Artifact 326ea20ca1140f079ea4b6a5ded59a306ffa10aef3861c735afc7e0850976221:
- File
psl-1983/3-1/util/psl-input-stream.sl
— part of check-in
[eb17ceb7f6]
at
2020-04-21 19:40:01
on branch master
— Add Reduce 3.0 to the historical section of the archive, and some more
files relating to version sof PSL from the early 1980s. Thanks are due to
Paul McJones and Nelson Beebe for these, as well as to all the original
authors.git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/historical@5328 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 4189) [annotate] [blame] [check-ins using] [more...]
- File
psl-1983/util/psl-input-stream.sl
— part of check-in
[eb17ceb7f6]
at
2020-04-21 19:40:01
on branch master
— Add Reduce 3.0 to the historical section of the archive, and some more
files relating to version sof PSL from the early 1980s. Thanks are due to
Paul McJones and Nelson Beebe for these, as well as to all the original
authors.git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/historical@5328 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 4189) [annotate] [blame] [check-ins using]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % PSL-Input-Stream.SL - File Input Stream Objects (Portable PSL Version) % % Author: Alan Snyder % Hewlett-Packard/CRC % Date: 10 December 1982 % % Summary of public functions: % % (setf s (open-input "file name")) % generates error on failure % (setf s (attempt-to-open-input "file name")) % returns NIL on failure % (setf ch (=> s getc)) % read character (map CRLF to LF) % (setf ch (=> s getc-image)) % read character (don't map CRLF to LF) % (setf ch (=> s peekc)) % peek at next character % (setf ch (=> s peekc-image)) % peek at next character (don't map CRLF to LF) % (setf str (=> s getl)) % Read a line; return string without terminating LF. % (=> s empty?) % Are there no more characters? % (=> s close) % Close the file. % (setf fn (=> s file-name)) % Return "true" name of file. % (setf date (=> s read-date)) % Return date that file was last read. % (setf date (=> s write-date)) % Return date that file was last written. % (=> s delete-file) % Delete the associated file. % (=> s undelete-file) % Undelete the associated file. % (=> s delete-and-expunge) % Delete and expunge the associated file. % (setf name (=> s author)) % Return the name of the file's author. % (setf name (=> s original-author)) % Return the original author's name. % (setf count (=> s file-length)) % Return the byte count of the file. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% (CompileTime (load fast-int)) (BothTimes (load objects)) (de attempt-to-open-input (file-name) (let ((p (ErrorSet (list 'open-input file-name) NIL NIL))) (and (PairP p) (car p)) )) (de open-input (file-name) (let ((s (make-instance 'input-stream))) (=> s open file-name) s)) (defflavor input-stream ((chn NIL) % PSL "channel" eof-flag % T => EOF has been detected file-name % file name given to OPEN ) () (gettable-instance-variables file-name) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% (defmethod (input-stream getc) () % Return the next character from the file. Line termination is represented % by a single NEWLINE (LF) character. Returns NIL on end of file. (if (not eof-flag) (let ((ch (ChannelReadChar chn))) (if (= ch #\EOF) (prog () (setf eof-flag T)) % return NIL on EOF ch % return the character, otherwise )))) (defmethod (input-stream getc-image) () (=> self getc)) (defmethod (input-stream empty?) () (null (=> self peekc-image))) (defmethod (input-stream peekc) () % Return the next character from the file, but don't advance to the next % character. Returns NIL on end of file. (let ((ch (=> self getc))) (when ch (ChannelUnReadChar chn ch) ch))) (defmethod (input-stream peekc-image) () (=> self peekc)) (defmethod (input-stream getl) () % Read and return (the remainder of) the current input line. % Read, but don't return the terminating EOL (if any). % Return NIL if no characters and end-of-file detected. (let ((s "")) (while T (let ((ch (=> self getc))) (if (null ch) (exit (if (string-empty? s) NIL s))) (if (= ch #\EOL) (exit s)) (setf s (string-concat s (string ch))) )))) (defmethod (input-stream tell-position) () NIL ) (defmethod (input-stream seek-position) (p) ) (defmethod (input-stream open) (name-of-file) % Open the specified file for input via SELF. If the file cannot be opened, % a Continuable Error is generated. (if chn (=> self close)) (setf eof-flag NIL) (setf chn (open name-of-file 'input)) (setf file-name (copystring name-of-file)) ) (defmethod (input-stream close) () (when chn (close chn) (setf chn NIL) (setf eof-flag T) )) (defmethod (input-stream read-date) () 0) (defmethod (input-stream write-date) () 0) (defmethod (input-stream delete-file) () ) (defmethod (input-stream undelete-file) () ) (defmethod (input-stream delete-and-expunge-file) () ) (defmethod (input-stream author) () "") (defmethod (input-stream original-author) () "") (defmethod (input-stream file-length) () 0)