home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
jËzyki_programowania
/
clisp
/
src
/
archive
/
clisp.faslsp.lha
/
gstream.lsp
< prev
next >
Wrap
Lisp/Scheme
|
1996-04-15
|
5KB
|
144 lines
;;; generic stream default methods
;;; Marcus Daniels 16.4.1994
(in-package "LISP")
(export '(generic-stream-read-char
generic-stream-listen
generic-stream-clear-input
generic-stream-write-char
generic-stream-write-string
generic-stream-finish-output
generic-stream-force-output
generic-stream-clear-output
generic-stream-read-byte
generic-stream-write-byte
generic-stream-close
generic-stream-controller
) )
(in-package "SYSTEM")
(clos:defclass generic-stream-controller () ())
(clos:defgeneric generic-stream-read-char (controller))
(clos:defgeneric generic-stream-listen (controller))
(clos:defgeneric generic-stream-clear-input (controller))
(clos:defgeneric generic-stream-write-char (controller ch))
(clos:defgeneric generic-stream-write-string (controller string start len))
(clos:defgeneric generic-stream-finish-output (controller))
(clos:defgeneric generic-stream-force-output (controller))
(clos:defgeneric generic-stream-clear-output (controller))
(clos:defgeneric generic-stream-read-byte (controller))
(clos:defgeneric generic-stream-write-byte (controller by))
(clos:defgeneric generic-stream-close (controller))
(clos:defmethod generic-stream-read-char ((controller generic-stream-controller))
(declare (ignore controller))
)
(clos:defmethod generic-stream-listen ((controller generic-stream-controller))
(declare (ignore controller))
)
(clos:defmethod generic-stream-clear-input ((controller generic-stream-controller))
(declare (ignore controller))
)
(clos:defmethod generic-stream-write-char ((controller generic-stream-controller) ch)
(declare (ignore controller ch))
)
(clos:defmethod generic-stream-write-string ((controller generic-stream-controller) string start len)
(dotimes (i len)
(generic-stream-write-char controller (schar string (+ start i)))
) )
(clos:defmethod generic-stream-finish-output ((controller generic-stream-controller))
(declare (ignore controller))
)
(clos:defmethod generic-stream-force-output ((controller generic-stream-controller))
(declare (ignore controller))
)
(clos:defmethod generic-stream-clear-output ((controller generic-stream-controller))
(declare (ignore controller))
)
(clos:defmethod generic-stream-read-byte ((controller generic-stream-controller))
(declare (ignore controller))
)
(clos:defmethod generic-stream-write-byte ((controller generic-stream-controller) by)
(declare (ignore controller by))
)
(clos:defmethod generic-stream-close ((controller generic-stream-controller))
(declare (ignore controller))
)
#| ;; Example:
;; Alias streams just perform the required operation on another given stream.
(use-package "CLOS")
(defclass alias-controller (generic-stream-controller)
((orig-stream :initarg :orig-stream))
)
(defun make-alias-stream (orig-stream)
(make-generic-stream
(make-instance 'alias-controller :orig-stream orig-stream)
) )
(defmethod generic-stream-read-char ((controller alias-controller))
(with-slots (orig-stream) controller
(read-char orig-stream nil nil)
) )
(defmethod generic-stream-listen ((controller alias-controller))
(with-slots (orig-stream) controller
(if (listen orig-stream)
0 ; something available
(let ((ch (read-char-no-hang orig-stream nil t)))
(cond ((eql ch t) -1) ; eof
((null ch) +1) ; nothing available, not EOF
(t (unread-char ch orig-stream) 0) ; something available
) ) ) ) )
(defmethod generic-stream-clear-input ((controller alias-controller))
(with-slots (orig-stream) controller
(clear-input orig-stream)
t
) )
(defmethod generic-stream-write-char ((controller alias-controller) ch)
(with-slots (orig-stream) controller
(write-char ch orig-stream)
) )
#| ; not needed, see general method above
(defmethod generic-stream-write-string ((controller alias-controller) string start len)
(with-slots (orig-stream) controller
(dotimes (i len)
(write-char (schar string (+ start i)) orig-stream)
) ) )
|#
(defmethod generic-stream-finish-output ((controller alias-controller))
(with-slots (orig-stream) controller
(finish-output orig-stream)
) )
(defmethod generic-stream-force-output ((controller alias-controller))
(with-slots (orig-stream) controller
(force-output orig-stream)
) )
(defmethod generic-stream-clear-output ((controller alias-controller))
(with-slots (orig-stream) controller
(clear-output orig-stream)
) )
(defmethod generic-stream-read-byte ((controller alias-controller))
(with-slots (orig-stream) controller
(read-byte orig-stream nil nil)
) )
(defmethod generic-stream-write-byte (i (controller alias-controller))
(with-slots (orig-stream) controller
(write-byte i orig-stream)
) )
(defmethod generic-stream-close ((controller alias-controller))
; don't close orig-stream
)
|#