home *** CD-ROM | disk | FTP | other *** search
- ;;; Copyright (C) 1984 by Gold Hill Computers
-
- ;;; Some useful macros from COMMON Lisp
-
- (DEFMACRO WITH-OPEN-STREAM X
- `(LET (,(CAR X))
- (UNWIND-PROTECT
- ,(IF (CDDR X)
- `(PROGN ,@(CDR X))
- (CADR X))
- (CLOSE ,(CAAR X)))))
-
- (DEFMACRO WITH-OPEN-FILE X
- `(WITH-OPEN-STREAM (,(CAAR X) (OPEN ,@(CDAR X)))
- ,@(CDR X)))
-
- (DEFMACRO WITH-OUTPUT-TO-STRING X
- (LET ((STREAM (CAAR X))
- (STRING (CDAR X))
- (BODY (CDR X))
- (V1 (GENSYM))
- (V2 (GENSYM)))
- (IF STRING
- `(LET ((,STREAM '(LAMBDA (,V1 &OPTIONAL ,V2)
- (CASE ,V1
- (:WRITE-CHAR (VECTOR-PUSH ,V2 ,(CAR STRING)))
- (:WHICH-OPERATIONS '(:WRITE-CHAR))
- (OTHERWISE
- (STREAM-DEFAULT-HANDLER ,STREAM ,V1 ,V2))))))
- ,@BODY)
- `(LET ((,STREAM (MAKE-STRING-OUTPUT-STREAM)))
- ,@BODY
- (GET-OUTPUT-STREAM-STRING ,STREAM)))))