-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathio-utils.lisp
45 lines (37 loc) · 1.58 KB
/
io-utils.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(in-package "ACL2")
(local (include-book "arithmetic-3/top" :dir :system))
(set-state-ok t)
(defconst *newline* (fms-to-string "" nil))
(defmacro cat-str (&rest strs)
"An abbreviation for (concatenate 'string ...)"
`(concatenate 'string ,@strs))
(defun read-obj-r (current channel state objcount)
(declare (xargs :measure (if (natp objcount) objcount 0)))
(if (zp objcount)
(mv (reverse current) state)
(mv-let (eofp obj state)
(read-object channel state)
(if eofp
(mv (reverse current) state)
(read-obj-r (cons obj current)
channel
state
(- objcount 1))))))
(defun read-obj (filename state)
"Read and return all of the objects contained in the file indicated by
filename.
Returns (mv obj state) where obj is a list of all the forms in filename."
(mv-let (channel state)
(open-input-channel filename
:object state)
(mv-let (result state)
(read-obj-r nil channel state (expt 2 1000))
(let ((state (close-input-channel channel state)))
(mv result state)))))
(defun print-to-file (filename state output)
(mv-let (channel state)
(open-output-channel (cat-str filename ".html")
:character state)
(pprogn (princ$ output channel state)
(close-output-channel channel state)
state)))