2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 ;; DESCRIPTION : basic routines on files
6 ;; COPYRIGHT : (C) 2006 Joris van der Hoeven
8 ;; This software falls under the GNU general public license and comes WITHOUT
9 ;; ANY WARRANTY WHATSOEVER. See the file $TEXMACS_PATH/LICENSE for details.
10 ;; If you don't have this file, write to the Free Software Foundation, Inc.,
11 ;; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
13 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15 (define-module (tools file))
16 (use-modules (ice-9 rdelim) (tools base) (tools abbrevs))
18 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
20 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
22 (define-public-macro (ignore-errors type body)
27 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28 ;; Important directories
29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31 (define-public (server-dir)
32 (let* ((user (cuserid))
34 (home (passwd:dir info)))
35 (string-append home "/.texmacsd")))
37 (define-public (system-dir)
38 (string-append (server-dir) "/system"))
40 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
44 (define-public (save-string file s)
45 (display s (open-file file OPEN_WRITE))
49 (define-public (load-string file)
50 (read-delimited "" (open-file file OPEN_READ)))
52 (define-public (save-object file value)
53 (write value (open-file file OPEN_WRITE))
56 (define-public (load-object file)
57 (read (open-file file OPEN_READ)))
59 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
61 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63 (define-public-macro (with-temp-file name s . body)
64 `(with ,name (string-append (server-dir) "/system/tmpXXXXXX")
65 (with p (mkstemp! ,name)
69 (with r (begin ,@body)
73 (define-public (eval-system cmd)
74 (let* ((temp-file (string-append (server-dir) "/system/tmpXXXXXX"))
75 (p (mkstemp! temp-file))
77 (status (system (string-append cmd " > " temp-file)))
78 (r (if (== status 0) (load-string temp-file) #f))
79 (d2 (delete-file temp-file)))
82 (define-public (system* . args)
83 (system (apply string-append args)))
85 (define-public (eval-system* . args)
86 (eval-system (apply string-append args)))