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

  1. ;;; (C) Copyright 1984 by Gold Hill Computers
  2.  
  3. ;;; GOLDEN COMMON LISP initialization file
  4.  
  5. (SETQ *BQ-LEVEL* 0
  6.       *BQ-COMMA* (GENSYM)
  7.       *BQ-COMMA-AT* (GENSYM))
  8.  
  9. ;; the famous back-quote macro
  10. (DEFUN BQ (X &AUX)
  11.   (COND ((NULL X) NIL)
  12.     ((ATOM X) (LIST 'QUOTE X))
  13.     ((EQ (CAR X) *BQ-COMMA*)
  14.      (CADR X))
  15.     (T
  16.        (DO* ((HOOK (NCONS 'LIST))
  17.          (Y HOOK (SNOC Y (BQ (CAR X))))
  18.          (X X (CDR X)))
  19.         ((NULL X) HOOK)
  20.          (COND ((ATOM X)
  21.                  (RPLACA HOOK 'LIST*)
  22.             (SNOC Y (LIST 'QUOTE X))
  23.             (RETURN HOOK))
  24.            ((EQ (CAR X) *BQ-COMMA-AT*)
  25.               (RPLACA HOOK 'LIST*)
  26.             (RPLACD Y (NCONS (LIST 'APPEND
  27.                        (CADR X)
  28.                        (BQ (CDDR X)))))
  29.             (RETURN HOOK))
  30.            ((EQ (CAR X) *BQ-COMMA*)
  31.             (RPLACA HOOK 'LIST*)
  32.             (RPLACD Y (NCONS (CADR X)))
  33.             (RETURN HOOK)))))))
  34.  
  35. (DEFUN COMMA-MACRO (STREAM IGNORE &AUX X)
  36.   (WHEN (<= *BQ-LEVEL* 0)
  37.     (ERROR "Comma not inside backquote"))
  38.   (IF (OR (EQ (SETQ X (FUNCALL STREAM :READ-CHAR)) 64.)    ; is it "@"?
  39.       (EQ X 46))                    ; or a "."?
  40.       *BQ-COMMA-AT*
  41.       (PROGN
  42.         (FUNCALL STREAM :UNREAD-CHAR X)            ; put it back
  43.         (LIST *BQ-COMMA* (READ STREAM NIL NIL T)))))
  44.  
  45. (DEFUN BQ-MACRO (STREAM IGNORE &AUX (*BQ-LEVEL* (1+ *BQ-LEVEL*)))
  46.   (BQ (READ STREAM NIL NIL T)))
  47.  
  48. (SET-MACRO-CHARACTER 44. 'COMMA-MACRO)
  49. (SET-MACRO-CHARACTER 96. 'BQ-MACRO)
  50.  
  51. (MACRO DEFMACRO (FRM)
  52.   (IF (NOT (SYMBOLP (NTH 2 FRM)))
  53.     (PROGN
  54.       (AUTOLOAD DEFMACRO "DEFMAC.LSP" *LISP-LIBRARY-PATHNAME*
  55.               *LISP-LIBRARY-DISKETTE*)
  56.       FRM)                ; do it again
  57.     `(MACRO ,(NTH 1. FRM) (,(NTH 2. FRM))    ; Name and arglist
  58.        (RPLACB ,(NTH 2. FRM)        ; macro's arg
  59.                (PROGN
  60.                  ;; pop off first element of arg list
  61.                  (SETQ ,(NTH 2. FRM) (CDR ,(NTH 2. FRM)))
  62.                  ,@(NTHCDR 3. FRM))))))    ; splice in body
  63.  
  64. ;; A simple DEFVAR macro
  65. (DEFMACRO DEFVAR FRM 
  66.   `(UNLESS (BOUNDP ',(CAR FRM))
  67.      (SETQ ,(CAR FRM) ,(IF (> (LENGTH FRM) 1.)
  68.                     (CADR FRM)
  69.                NIL))))
  70.  
  71. ;; A simple DEFCONSTANT
  72. (DEFMACRO DEFCONSTANT FRM
  73.   `(SETQ ,(CAR FRM) ,(CADR FRM)))
  74.  
  75. ;; A simple DEFPARAMETER
  76. (DEFMACRO DEFPARAMETER FRM
  77.   `(SETQ ,(CAR FRM) ,(CADR FRM)))
  78.  
  79. ;; The Sharp sign macro character handlers.
  80. (DEFCONSTANT *SHARP-SIGN-MACROS* 
  81.   '(
  82.     (39. .                ;#'
  83.       (LAMBDA (S)
  84.         (LIST 'FUNCTION (READ S NIL NIL T))))
  85.     (40. .                ;#(
  86.      (LAMBDA (S &AUX X)
  87.        (FUNCALL S :UNREAD-CHAR 40.)
  88.        (SETQ X (READ S NIL NIL T))
  89.        (APPLY 'VECTOR X)))
  90.     (43. .                ; #+
  91.      (LAMBDA (S &AUX (X (READ S NIL NIL T)))
  92.        (VALUES (READ S NIL NIL T) (NOT (|#-FEATUREP| X)))))
  93.     (45. .                ; #-
  94.      (LAMBDA (S &AUX (X (READ S NIL NIL T)))
  95.        (VALUES (READ S NIL NIL T) (|#-FEATUREP| X))))
  96.     (46. .                ; #.
  97.      (LAMBDA (S)
  98.        (EVAL (READ S NIL NIL T))))
  99.     (58. .                ;#:
  100.      (LAMBDA (S) (COPY-SYMBOL (READ S NIL NIL T))))
  101.     (66. .                ;#B
  102.      (LAMBDA (S &AUX (*READ-BASE* 2.))
  103.        (READ S NIL NIL T)))
  104.     (68. .                ;#D
  105.      (LAMBDA (S &AUX (*READ-BASE* 10.))
  106.          (READ S NIL NIL T)))
  107.     (79. .                ;#O
  108.      (LAMBDA (S &AUX (*READ-BASE* 8.))
  109.        (READ S NIL NIL T)))
  110.     (83. .                ;#S
  111.      (LAMBDA (S &AUX (SPEC (READ S NIL NIL T)))
  112.        (EVAL (CONS (INTERN (STRING-APPEND "MAKE-" (CAR SPEC)))
  113.            (DO ((X (CDR SPEC) (CDDR X))
  114.                 (RESULT NIL (CONS `',(CADR X)
  115.                           (CONS (%INTERN (CAR X) 'KEYWORD)
  116.                             RESULT))))
  117.                ((NULL X) (NREVERSE RESULT)))))))
  118.     (88. .                ;#X
  119.      (LAMBDA (S &AUX (*READ-BASE* 16.))
  120.        (READ S NIL NIL T)))
  121.     (92. .                ; #\
  122.      (LAMBDA (S)
  123.        (FUNCALL S :UNREAD-CHAR 92.)        ; put escape char back
  124.        (DO ((STR (STRING (READ S NIL NIL T)))
  125.         (BITS 0)
  126.         (I 0))
  127.        (())
  128.      (COND ((= (- (LENGTH STR) I) 1)    ; 1 char left
  129.         (RETURN (CODE-CHAR (CHAR STR I) BITS)))
  130.            ((STRING-EQUAL "C-" STR :START2 I :END2 (+ I 2))
  131.             (SETQ BITS (LOGIOR BITS 1)
  132.               I (+ I 2)))
  133.            ((STRING-EQUAL "M-" STR :START2 I :END2 (+ I 2))
  134.             (SETQ BITS (LOGIOR BITS 2)
  135.               I (+ I 2)))
  136.            ((NAME-CHAR (SETQ STR (SUBSEQ STR I)))
  137.             (RETURN (CODE-CHAR (NAME-CHAR STR) BITS)))
  138.            (T
  139.             (ERROR "Bad \"\#\\\" name: ~S" STR))))))
  140.     (124. .                ;#|
  141.       (LAMBDA (S)
  142.         (DO ((CNT 0)
  143.          (CHAR (FUNCALL S :READ-CHAR) (FUNCALL S :READ-CHAR))
  144.          (LCHAR 0 CHAR))
  145.         ((AND (= CHAR 35.)(= LCHAR 124.)(ZEROP CNT)) NIL)
  146.       (COND ((AND (= LCHAR 35.)(= CHAR 124.))
  147.          (INCF CNT))
  148.         ((AND (= LCHAR 124.)(= CHAR 35.)(> CNT 0))
  149.          (DECF CNT))))))
  150.     ))
  151.  
  152. ;; Used by the #+ and #- macros
  153. (DEFUN |#-FEATUREP| (F)
  154.   (COND ((ATOM F)(MEMBER F *FEATURES*))
  155.     ((EQ (CAR F) 'NOT) (NOT (|#-FEATUREP| (SECOND F))))
  156.     ((EQ (CAR F) 'OR)
  157.      (DOLIST (I (REST F) NIL)
  158.        (WHEN (|#-FEATUREP| I) (RETURN T))))
  159.     ((EQ (CAR F) 'AND)
  160.      (DOLIST (I (REST F) T)
  161.        (UNLESS (|#-FEATUREP| I) (RETURN NIL))))
  162.     (T (ERROR "Bad #+/- feature syntax: ~S" F))))
  163.  
  164. (DEFUN SHARP-MACRO (STREAM IGNORE &AUX X Y)
  165.   (SETQ X
  166.        (ASSOC (CHAR-UPCASE (SETQ Y (FUNCALL STREAM :READ-CHAR)))
  167.                 *SHARP-SIGN-MACROS*))
  168.   (IF X
  169.       (FUNCALL (CDR X) STREAM)
  170.       (ERROR NIL "Undefined \# macro: ~C" Y)))
  171.  
  172. (SET-MACRO-CHARACTER 35. 'SHARP-MACRO)
  173.  
  174. ;;; an autoload facility
  175. (DEFMACRO AUTOLOAD ARGS
  176.   (LET ((NAME (FIRST ARGS))
  177.         (FILENAME (SECOND ARGS))
  178.         (DEV-DIR (OR (THIRD ARGS) '*LISP-LIBRARY-PATHNAME*))
  179.         (DISKETTE (NTH 3 ARGS)))
  180.     `(MACRO ,NAME (FORM)
  181.        (AUTOLOAD1 FORM ',NAME ,FILENAME ,DEV-DIR ,DISKETTE))))
  182.  
  183. (DEFUN AUTOLOAD1 (FORM NAME FILENAME DEV-DIR DISKETTE)
  184.   (WHEN *LOAD-VERBOSE*
  185.     (FORMAT T "~&; Autoloading definition of ~A." NAME))
  186.   (WITH-DISKETTE DISKETTE
  187.                  #'LOAD 
  188.          (MERGE-PATHNAMES
  189.            (MERGE-PATHNAMES FILENAME ".LSP")
  190.            DEV-DIR)
  191.                  :VERBOSE NIL)
  192.   FORM)
  193.  
  194. (DEFVAR *EXPLORER-LOADED-P* NIL)
  195. (DEFVAR *GMACS-LOADED-P* NIL)
  196.  
  197. (DEFMACRO INSPECT X
  198.   `(INSPECT-EXPLORE 'I-INSPECT ',X))
  199.  
  200. (DEFMACRO EXPLORE X
  201.   `(INSPECT-EXPLORE 'I-EXPLORE ',X))
  202.  
  203. (DEFUN INSPECT-EXPLORE (FUNC ARG-LIST &AUX *LOAD-VERBOSE*)
  204.   (WHEN *GMACS-LOADED-P*
  205.     (ERROR "The EXPLORER cannot be loaded after GMACS has been loaded.
  206. Exit GCLISP by typing (EXIT) and re-start GCLISP."))
  207.   (IF (NULL *EXPLORER-LOADED-P*)
  208.       (PROGN
  209.     (FORMAT T "~%Loading San Marco LISP Explorer.")
  210.         (SETF *EXPLORER-LOADED-P* T)
  211.     (EVAL `(,FUNC ',ARG-LIST :DIRECTIVE :LOAD)))
  212.       (FUNCALL FUNC ARG-LIST :DIRECTIVE :RUN)))
  213.  
  214. (DEFUN ED (&REST X &AUX *LOAD-VERBOSE*)
  215.   (WHEN *EXPLORER-LOADED-P*
  216.     (ERROR "GMACS cannot be loaded after The EXPLORER has been loaded.
  217. Exit GCLISP by typing (EXIT) and re-start GCLISP."))
  218.   (IF (NULL *GMACS-LOADED-P*)
  219.     (PROGN
  220.       (SETF *GMACS-LOADED-P* T)
  221.       (I-ED X :DIRECTIVE :LOAD))
  222.     (I-ED X :DIRECTIVE :RUN)))
  223.  
  224. (AUTOLOAD I-EXPLORE "EXPLORE.LSP" *EXPLORER-VIEWER-PATHNAME*
  225.              *EXPLORER-VIEWER-DISKETTE*)
  226. (AUTOLOAD I-INSPECT "EXPLORE.LSP" *EXPLORER-VIEWER-PATHNAME*
  227.              *EXPLORER-VIEWER-DISKETTE*)
  228. (AUTOLOAD I-ED "GMACS" *GMACS-PATHNAME* *GMACS-DISKETTE*)
  229. (AUTOLOAD APROPOS "APROPOS" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  230. (AUTOLOAD LAMBDA-LIST "DOC" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  231. (AUTOLOAD DEFSTRUCT "DEFSTRUC" *LISP-LIBRARY-PATHNAME* 
  232.  *LISP-LIBRARY-DISKETTE*)
  233. (AUTOLOAD DESCRIBE "DESCRIBE" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  234. (AUTOLOAD DOC "DOC" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  235. (AUTOLOAD DOCUMENTATION "DOC" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  236. (AUTOLOAD DRIBBLE "DRIBBLE" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  237. (AUTOLOAD MAKE-WINDOW-STREAM "WSTREAM" *LISP-LIBRARY-PATHNAME*
  238.  *LISP-LIBRARY-DISKETTE*)
  239. (AUTOLOAD PIANO "MUSICPGM" *EXAMPLE-PATHNAME* *EXAMPLE-DISKETTE*)
  240. (AUTOLOAD PPRINT "PPRINT" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  241. (AUTOLOAD ROOM "UTIL" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  242. (AUTOLOAD STEP  "STEPPER" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  243. (AUTOLOAD TIME "UTIL" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  244. (AUTOLOAD TRACE "TRACE" *LISP-LIBRARY-PATHNAME* *LISP-LIBRARY-DISKETTE*)
  245. (AUTOLOAD WITH-OPEN-STREAM "MACRO" *LISP-LIBRARY-PATHNAME*
  246.    *LISP-LIBRARY-DISKETTE*)
  247. (AUTOLOAD WITH-OPEN-FILE "MACRO" *LISP-LIBRARY-PATHNAME* 
  248.    *LISP-LIBRARY-DISKETTE*)
  249. (AUTOLOAD WITH-OUTPUT-TO-STRING "MACRO" *LISP-LIBRARY-PATHNAME*
  250.    *LISP-LIBRARY-DISKETTE*)
  251. (AUTOLOAD CHECK-FILES "CHECK" *INTERPRETER-PATHNAME*
  252.     *INTERPRETER-DISKETTE*)
  253. (AUTOLOAD CONFIGURE-GCLISP "CONFIGGC" *INTERPRETER-PATHNAME*
  254.    *INTERPRETER-DISKETTE*)
  255.  
  256. ;;; Where the docfile lives (directory comes from *DOCUMENT-PATHNAME*).
  257. (DEFVAR *DOC-FILE-PATHNAME* "DOCFILE.BIN")
  258.  
  259. ;;; Its rather important that this is HERE, not autoloaded.
  260. ;;; For closing all currently open files.
  261. (DEFUN CLOSE-ALL-FILES ()
  262.   (MAPCAR '(LAMBDA (FILE-STREAM)
  263.          (PROG1 (FILE-STREAM :PATHNAME)
  264.             (FILE-STREAM :CLOSE :ABORT)))
  265.       *OPEN-FILE-STREAMS*))
  266.  
  267. ;;; The GCLISP input-editor facility.  The input-editor is used when
  268. ;;; functions like READ and READ-LINE read from the keyboard (ie, a
  269. ;;; WINDOW-STREAM.
  270. (SETQ *DEFAULT-IE-OPTIONS*
  271.   '((IE-COMMANDS (#\M-A . IE-APROPOS)            ; <alt>-A - apropos
  272.          (#\M-L . IE-LAMBDA-LIST)        ; <alt>-L lambda-list
  273.          (#\M-E . (LAMBDA (&REST IGNORE)
  274.                 (EXPLORE)
  275.                 (stack-group-unwind)
  276.                 :REFRESH))
  277.            (#\C-B . (LAMBDA (&REST IGNORE)    ; ^B - backtrace
  278.                 (TERPRI T)
  279.                 (BACKTRACE)
  280.                 (TERPRI T)
  281.                 :REFRESH))
  282.          (#\C-D . (LAMBDA (&REST IGNORE &AUX TEMP)    ; ^D - DOS
  283.                 (FORMAT T "~&Going to DOS, type EXIT to return to GCLISP.")
  284.                             (WHEN (SETQ TEMP (DOS))
  285.                               (FORMAT T "~&Failed: ~?"
  286.                                 (CASE TEMP
  287.                                   (2 
  288. "COMMAND.COM not found, Please insert DOS system diskette in your 
  289. BOOT diskette drive.  Remember to insert GCLISP diskette when you 
  290. return to GCLISP.")
  291.                   (4 "Probably too many files open, try (CLOSE-ALL-FILES)")
  292.                                   (8 
  293. "Insufficient memory. You must reserve at least 28k bytes for DOS access.")
  294.                                   (OTHERWISE "DOS error code ~D"))
  295.                                 (LIST TEMP)))
  296.                 :REFRESH))
  297.          (#\M-H . (LAMBDA (&REST IGNORE)
  298.                 (FUNCALL *IE-HELP*)))
  299.          (#\M-D . IE-DOC)            ; <alt>-D - DOC
  300.          (#\M-K . IE-KEYS)
  301.          (#\C-E . IE-EDIT)
  302.          (#\C-G . (LAMBDA (&REST IGNORE)    ; ^G - CLEAN-UP-ERROR
  303.                 (CLEAN-UP-ERROR)))
  304.          (#\C-L . (LAMBDA (&REST IGNORE)    ; ^L - CLEAR SCREEN
  305.                 (SEND *TERMINAL-IO* :CLEAR-SCREEN)
  306.                 (PRINC *LISTENER-NAME* T)
  307.                 :REFRESH))
  308.          (#\C-P . (LAMBDA (&REST IGNORE)    ; ^P - CONTINUE
  309.                 (FORMAT *DEBUG-IO* "[continuing]~%")
  310.                 (CONTINUE)))
  311.          (#\C-C . CTRL-C-HANDLER)
  312.          (#\ESC . (LAMBDA (BUF IGNORE)        ; <esc> delete chars
  313.                 (LENGTH BUF)))
  314.          (#\RUBOUT . (LAMBDA (IGNORE IGNORE)    ; <RUBOUT> 1 CHAR
  315.               1))
  316.     )))
  317.  
  318. (DEFUN CTRL-C-HANDLER (&REST IGNORE)
  319.   (STACK-GROUP-UNWIND))
  320.  
  321. (DEFVAR *IE-HELP* 'IE-HELP)
  322. (DEFVAR *HELP-WAIT-TIME* 100)
  323.  
  324. (DEFUN IE-EXPLORE (&rest ignore)
  325.   (EXPLORE))
  326.  
  327. (DEFUN IE-KEYS (&REST IGNORE)
  328.   (send *terminal-io* :clear-screen)
  329.   (FORMAT T "~&
  330. ══════════════════════════════════════════════════════════════════════════════
  331.   These are the GCLISP keychord commands:
  332.  
  333.      Alt-A          Apropos a string
  334.      Alt-D          Document a function, variable, or type
  335.      Alt-E          Enter the LISP Explorer
  336.      Alt-H          Invoke On-line Help
  337.      Alt-K          Display this list of keychord commands
  338.      Alt-L          Display the lambda-list of a function
  339.     Ctrl-B          Backtrace the execution stack
  340.     Ctrl-C          Unwind to Top-Level
  341.     Ctrl-D          Invoke the DOS command processor
  342.     Ctrl-E          Invoke the GMACS editor
  343.     Ctrl-G          Go up one error level
  344.     Ctrl-L          Clear the display screen
  345.     Ctrl-P          Continue from a break
  346.     Ctrl-Break          Enter into a break level
  347.     Ctrl-NumLock      Halt typeout to screen (any key continues)
  348.     Rubout          Delete the preceding character
  349.     Esc              Delete the current input line
  350.  
  351.   These keychords can be typed at any time.  
  352. ══════════════════════════════════════════════════════════════════════════════
  353. "
  354. )
  355.   :REFRESH)
  356.  
  357. (DEFUN IE-HELP   (&REST INGNORE &AUX CHAR)
  358.   (send *terminal-io* :clear-screen)
  359.   (format t "~&══════════════════════════════════════════════════════════════════════════════
  360.   To invoke one of the following GCLISP applications,
  361.   type the indicated keychord:
  362.     
  363.     Alt-E      The LISP Explorer, an on-line tutorial
  364.    Ctrl-E      The GMACS Editor
  365.  
  366.   To get help in one of the following areas,
  367.   type the indicated keychord:
  368.  
  369.     Alt-K      \"Keys\" - Displays a list of the actions
  370.                invoked by special keys and keychords.
  371.  
  372.     Alt-A      \"Apropos\"  - Lists all symbols whose names
  373.                contain a specified string. Prompts for the string.
  374.  
  375.     Alt-D      \"Documentation\" - Displays the on-line documentation 
  376.                for a specified function, variable, or type name.
  377.                Prompts for the name.  
  378.  
  379.     Alt-L      \"Lambda-List\" - Displays the arguments for a specified
  380.                function.  Prompts for the function name.
  381.  
  382. ══════════════════════════════════════════════════════════════════════════════"
  383. )
  384.  :REFRESH)
  385.  
  386. (DEFUN IE-EDIT (&REST IGNORE)
  387.  (ED) :REFRESH)
  388.  
  389. (DEFUN IE-LAMBDA-LIST (&OPTIONAL BUF IGNORE)
  390.   (LET ((F (AND BUF (FIND-FUNC BUF))))
  391.     (LABELS ((AL (F)
  392.                (MULTIPLE-VALUE-BIND (L NOT-FOUND-P)(LAMBDA-LIST F)
  393.                  (IF NOT-FOUND-P
  394.                      (FORMAT T "~&No lambda list found for ~S" F)
  395.              (FORMAT T "~&Lambda list for ~S: ~A~%" F L)))))
  396.       (IF F
  397.           (AL F)
  398.       (PROGN
  399.         (FORMAT T "~&Lambda list for which function: ")
  400.         (AL (READ T))))))
  401.   :REFRESH)
  402.  
  403.  
  404. (DEFUN IE-APROPOS (&REST IGNORE)
  405.   (FORMAT T "~&Apropos string: ")
  406.   (LET ((STR (READ T)))
  407.     (APROPOS STR))
  408.   :REFRESH)
  409.  
  410. (DEFUN FIND-FUNC (BUF)
  411.   (LET ((IDX (1- (LENGTH BUF))))
  412.     (WHEN (PLUSP IDX)
  413.       (DOTIMES (I (LENGTH BUF))
  414.         (IF (EQ #\( (CHAR BUF IDX)) (RETURN NIL))
  415.     (DECF IDX))
  416.       (MULTIPLE-VALUE-BIND (VAL ERROR-P)
  417.           (IGNORE-ERRORS (READ-FROM-STRING BUF NIL NIL :START (1+ IDX)))
  418.         (IF ERROR-P NIL VAL)))))
  419.  
  420. (DEFUN IE-DOC (&OPTIONAL BUF IGNORE)
  421.   (LET ((F (AND BUF (FIND-FUNC BUF))))
  422.       (IF F
  423.           (DOC F)
  424.       (PROGN
  425.         (FORMAT T "~&Documentation for which function: ")
  426.         (SETQ F (READ T))
  427.         (DOC F))))
  428.   :REFRESH)
  429.  
  430. (SETF HELP "Type Alt-H for help"    ; For friendliness.
  431.       ? HELP)
  432.  
  433. (LET ((PN (MERGE-PATHNAMES "USERINIT.LSP")))
  434.   (WHEN (PROBE-FILE PN)
  435.     (LOAD PN)))
  436.  
  437. (DEFVAR *INITIAL-MEMORY-ALLOCATED-P*
  438.    (PROGN 
  439.       (ALLOCATE *PARAGRAPHS-RESERVED-FOR-DOS*
  440.                 *INITIAL-CONS-WEIGHT*
  441.                 *INITIAL-ATOM-WEIGHT*
  442.                 T)
  443.       T))
  444.  
  445. (SETQ *GC-LIGHT-P* 112)
  446.  
  447. (WHEN *GCLISP-UNCONFIGURED-P*
  448.   (FORMAT T "~&This GCLISP has not been configured,
  449.     type (CONFIGURE-GCLISP).~&")
  450.    )
  451.  
  452. (FORMAT T "~&~A" HELP)
  453.  
  454.