Filtering...

file-io

books/misc/file-io
other
(in-package "ACL2")
other
(program)
other
(set-state-ok t)
collect-objectsfunction
(defun collect-objects
  (list channel state)
  (mv-let (eofp obj state)
    (read-object channel state)
    (if eofp
      (mv (reverse list) state)
      (collect-objects (cons obj list) channel state))))
read-listfunction
(defun read-list
  (fname ctx state)
  (mv-let (channel state)
    (open-input-channel fname :object state)
    (if channel
      (mv-let (result state)
        (collect-objects nil channel state)
        (let ((state (close-input-channel channel state)))
          (value result)))
      (er soft
        ctx
        "Unable to open file ~s0 for :object input."
        fname))))
pprint-object-or-stringfunction
(defun pprint-object-or-string
  (obj channel state)
  (if (stringp obj)
    (princ$ obj channel state)
    (mv-let (erp val state)
      (state-global-let* ((write-for-read t))
        (pprogn (ppr2 (ppr1 obj (print-base) (print-radix) 80 0 state t)
            0
            channel
            state
            t)
          (value nil)))
      (declare (ignore erp val))
      state)))
write-objectsfunction
(defun write-objects
  (list channel state)
  (if (consp list)
    (pprogn (pprint-object-or-string (car list) channel state)
      (newline channel state)
      (newline channel state)
      (write-objects (cdr list) channel state))
    state))
write-list-body-fnfunction
(defun write-list-body-fn
  (bangp quietp)
  `(let ((quietp ,QUIETP))
    (if (not (stringp fname))
      (er soft
        ctx
        "The filename argument of write-list must evaluate to a string, ~
              but it has evaluated to ~x0.  See :DOC write-list."
        fname)
      (mv-let (channel state)
        ,(IF BANGP
     '(OPEN-OUTPUT-CHANNEL! FNAME :CHARACTER STATE)
     '(OPEN-OUTPUT-CHANNEL FNAME :CHARACTER STATE))
        (if channel
          (mv-let (col state)
            (cond (quietp (mv 0 state))
              (t (fmt1 "Writing file ~x0~%"
                  (list (cons #\0 fname))
                  0
                  (standard-co state)
                  state
                  nil)))
            (declare (ignore col))
            (let ((state (write-objects list channel state)))
              (pprogn (close-output-channel channel state)
                (value :invisible))))
          (er soft
            ctx
            "Unable to open file ~s0 for :character output."
            fname))))))
write-list-bodymacro
(defmacro write-list-body
  (bangp quietp)
  (write-list-body-fn bangp quietp))
write-list-fnfunction
(defun write-list-fn
  (list fname ctx state quiet)
  (if quiet
    (write-list-body nil t)
    (write-list-body nil nil)))
write-listmacro
(defmacro write-list
  (list fname ctx state &key quiet)
  (declare (xargs :guard (eq state 'state)))
  `(write-list-fn ,LIST ,FNAME ,CTX ,STATE ,QUIET))
downcasemacro
(defmacro downcase
  (form)
  `(state-global-let* ((print-case :downcase set-print-case))
    ,FORM))
write-list-downcasemacro
(defmacro write-list-downcase
  (list fname ctx state &key quiet)
  (declare (xargs :guard (eq state 'state)))
  `(downcase (write-list ,LIST ,FNAME ,CTX ,STATE :quiet ,QUIET)))