home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e070 / 4.ddi / LISPLIB / MACRO.LSP < prev    next >
Encoding:
Text File  |  1984-11-06  |  1019 b   |  34 lines

  1. ;;; Copyright (C) 1984 by Gold Hill Computers
  2.  
  3. ;;; Some useful macros from COMMON Lisp
  4.  
  5. (DEFMACRO WITH-OPEN-STREAM X
  6.   `(LET (,(CAR X))
  7.      (UNWIND-PROTECT
  8.        ,(IF (CDDR X)
  9.             `(PROGN ,@(CDR X))
  10.             (CADR X))
  11.        (CLOSE ,(CAAR X)))))
  12.  
  13. (DEFMACRO WITH-OPEN-FILE X
  14.   `(WITH-OPEN-STREAM (,(CAAR X) (OPEN ,@(CDAR X)))
  15.      ,@(CDR X)))
  16.  
  17. (DEFMACRO WITH-OUTPUT-TO-STRING X
  18.   (LET ((STREAM (CAAR X))
  19.     (STRING (CDAR X))
  20.     (BODY (CDR X))
  21.     (V1 (GENSYM))
  22.     (V2 (GENSYM)))
  23.     (IF STRING
  24.         `(LET ((,STREAM '(LAMBDA (,V1 &OPTIONAL ,V2)
  25.                            (CASE ,V1
  26.                              (:WRITE-CHAR (VECTOR-PUSH ,V2 ,(CAR STRING)))
  27.                              (:WHICH-OPERATIONS '(:WRITE-CHAR))
  28.                              (OTHERWISE 
  29.                                (STREAM-DEFAULT-HANDLER ,STREAM ,V1 ,V2))))))
  30.            ,@BODY)
  31.         `(LET ((,STREAM (MAKE-STRING-OUTPUT-STREAM)))
  32.            ,@BODY
  33.            (GET-OUTPUT-STREAM-STRING ,STREAM)))))
  34.