(read-char$-all channel state) reads all remaining characters from a file.
(read-char$-all channel state) → (mv * state)
This is the main loop inside read-file-characters. It reads everything in the file, but doesn't handle opening or closing the file.
Function:
(defun read-char$-all (channel state) (declare (xargs :stobjs (state))) (declare (xargs :guard (symbolp channel))) (declare (xargs :guard (open-input-channel-p channel :character state))) (let ((__function__ 'read-char$-all)) (declare (ignorable __function__)) (mbe :logic (b* (((unless (state-p state)) (mv nil state)) ((mv char state) (read-char$ channel state)) ((unless char) (mv nil state)) ((mv rest state) (read-char$-all channel state))) (mv (cons (char-fix char) rest) state)) :exec (b* (((mv contents state) (tr-read-char$-all channel state nil))) (mv (reverse contents) state)))))
Theorem:
(defthm true-listp-of-read-char$-all (true-listp (mv-nth 0 (read-char$-all channel state))) :rule-classes :type-prescription)
Theorem:
(defthm tr-read-char$-all-removal (equal (tr-read-char$-all channel state nil) (mv (rev (mv-nth 0 (read-char$-all channel state))) (mv-nth 1 (read-char$-all channel state)))))
Theorem:
(defthm state-p1-of-read-char$-all (implies (and (force (state-p1 state)) (force (symbolp channel)) (force (open-input-channel-p1 channel :character state))) (state-p1 (mv-nth 1 (read-char$-all channel state)))))
Theorem:
(defthm open-input-channel-p1-of-read-char$-all (implies (and (force (state-p1 state)) (force (symbolp channel)) (force (open-input-channel-p1 channel :character state))) (open-input-channel-p1 channel :character (mv-nth 1 (read-char$-all channel state)))))
Theorem:
(defthm character-listp-of-read-char$-all (character-listp (mv-nth 0 (read-char$-all channel state))))