(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "LISP")(IL:FILECREATED "16-May-90 14:44:40" IL:|{DSK}<usr>local>lde>lispcore>sources>CMLSTEP.;2| 7485         IL:|changes| IL:|to:|  (IL:VARS IL:CMLSTEPCOMS)      IL:|previous| IL:|date:| "10-Dec-87 15:11:29" IL:|{DSK}<usr>local>lde>lispcore>sources>CMLSTEP.;1|); Copyright (c) 1986, 1987, 1990 by Venue & Xerox Corporation.  All rights reserved.(IL:PRETTYCOMPRINT IL:CMLSTEPCOMS)(IL:RPAQQ IL:CMLSTEPCOMS          ((IL:* IL:|;;;| "CMLSTEP -- Single Stepper STEP")           (IL:FUNCTIONS STEP)           (IL:FUNCTIONS STEP-COMMAND STEP-EVAL STEP-FORM STOP-STEPPING STEP-PRINT STEP-PRINT-VALUES)           (IL:VARIABLES *STEP-IO* *STEP-INDENTATION-INCREMENT* *STEP-INDENTATION-LEVEL*                   *STEP-PRINT-LEVEL* *STEP-STATE* *STEP-MAX-INDENTATION* *STEP-PRINT-LENGTH*)           (IL:PROP (IL:FILETYPE IL:MAKEFILE-ENVIRONMENT)                  IL:CMLSTEP)           (IL:FUNCTIONS STEP-SLEEP)           (IL:DECLARE\: IL:DONTEVAL@LOAD IL:DOEVAL@COMPILE IL:DONTCOPY IL:COMPILERVARS (IL:ADDVARS                                                                                         (IL:NLAMA)                                                                                         (IL:NLAML)                                                                                         (IL:LAMA)))))(IL:* IL:|;;;| "CMLSTEP -- Single Stepper STEP")(DEFMACRO STEP (FORM)   "Evaluate FORM interactively"   `(LET ((*EVALHOOK* #'STEP-COMMAND)          (*STEP-STATE* T)          (*STEP-INDENTATION-LEVEL* 0)          (*STEP-IO* *QUERY-IO*))         ,FORM))(DEFUN STEP-COMMAND (FORM ENVIRONMENT)   "This is the *EVALHOOK* when stepping.  It prints the form, and then reads a command.  The commands are single characters from the terminal.  If the stepper has subsequently been turned off, do the equivalent of the s command without printing."   (COND      ((NOT *STEP-STATE*)                                    (IL:* IL:\;                                                            "If aborted, just eval it.")       (EVAL FORM ENVIRONMENT))      ((NOT (OR (EQ *STEP-STATE* T)                (AND (CONSP FORM)                     (MEMBER (CAR FORM)                            *STEP-STATE* :TEST 'EQ))))       (IL:* IL:\;                                                        "Don't step this form, but keep on looking.")       (EVALHOOK FORM #'STEP-COMMAND NIL ENVIRONMENT))      (T                                                     (IL:* IL:\;                                 "Otherwise, bind indent level, print form, and enter command loop.")         (COND            ((OR (SYMBOLP FORM)                 (CONSTANTP FORM)                            (IL:* IL:\;                                                            "Handles quote, not function.")                 )             (STEP-PRINT FORM)             (LET ((VALUE (EVAL FORM ENVIRONMENT)))                  (STEP-PRINT-VALUES (LIST VALUE))                  VALUE))            (T (STEP-PRINT FORM)               (ECASE (IL:ASKUSER NIL NIL ": " '((IL:\  "Step" IL:EXPLAINSTRING "<space> -- Step")                                                 (IL:N "ext" IL:EXPAINSTRING                                                    "Next - Evaluate this expression without stepping"                                                       )                                                 (IL:F "inish" IL:EXPAINSTRING                                                    "Finish - complete evaluation without the stepper"                                                       )                                                 (IL:D "ebugger")                                                 (IL:^ " abort")))                   (IL:\                                     (IL:* IL:\;                                                      "Space: step thru the evaluation of this form")                      (STEP-FORM FORM ENVIRONMENT))                   (IL:N (STEP-EVAL FORM ENVIRONMENT))                   (IL:F                       (STOP-STEPPING)                      (EVAL FORM ENVIRONMENT))                   (IL:D                                     (IL:* IL:\;                          "Enter the debugger with this form, but then continue stepping afterward.")                      (XCL:DEBUGGER :FORM FORM :ENVIRONMENT ENVIRONMENT :CONDITION                             (XCL:MAKE-CONDITION 'SI::BREAKPOINT :FUNCTION FORM))                      (STEP-COMMAND FORM ENVIRONMENT))                   (IL:^ (IL:ERROR!))))))))(DEFUN STEP-EVAL (FORM ENVIRONMENT)   "Evaluate this form (without stepping) and print values"   (LET ((RESULTS (MULTIPLE-VALUE-LIST (EVAL FORM ENVIRONMENT))))        (STEP-PRINT-VALUES RESULTS)        (VALUES-LIST RESULTS)))(DEFUN STEP-FORM (FORM ENVIRONMENT)   "Evaluate this form by stepping and print values."   (LET ((RESULTS (LET ((*STEP-INDENTATION-LEVEL* (+ *STEP-INDENTATION-INCREMENT*                                                      *STEP-INDENTATION-LEVEL*)))                       (MULTIPLE-VALUE-LIST (EVALHOOK FORM #'STEP-COMMAND NIL ENVIRONMENT)))))        (STEP-PRINT-VALUES RESULTS)        (VALUES-LIST RESULTS)))(DEFUN STOP-STEPPING ()   (SETQ *STEP-STATE* NIL)   (SETQ *EVALHOOK* NIL))(DEFUN STEP-PRINT (FORM)   "Print form according to the current indentation level, and according to *STEP-PRINT-LEVEL* and *STEP-PRINT-LENGTH*"   (LET ((*PRINT-LEVEL* *STEP-PRINT-LEVEL*)         (*PRINT-LENGTH* *STEP-PRINT-LENGTH*))        (FORMAT *STEP-IO* "~&~vT~S " (MIN *STEP-INDENTATION-LEVEL* *STEP-MAX-INDENTATION*)               FORM)))(DEFUN STEP-PRINT-VALUES (VALUE-LIST)   "PRINT-VALUES is called to print a list of values which were returned from an evaluation."   (WHEN VALUE-LIST       (LET ((*PRINT-LEVEL* *STEP-PRINT-LEVEL*)             (*PRINT-LENGTH* *STEP-PRINT-LENGTH*))            (DOLIST (VALUE VALUE-LIST)                (FORMAT *STEP-IO* "~&~vT= ~S " (MIN *STEP-INDENTATION-LEVEL* *STEP-MAX-INDENTATION*)                       VALUE))))   (TERPRI *STEP-IO*))(DEFVAR *STEP-IO* NIL   "Stream to which step I/O is done, bound by CL:STEP.")(DEFVAR *STEP-INDENTATION-INCREMENT* 2   "Number of spaces to increase indenting.")(DEFVAR *STEP-INDENTATION-LEVEL* 0)(DEFVAR *STEP-PRINT-LEVEL* 2   "Local value")(DEFVAR *STEP-STATE* NIL   "EG, enabled")(DEFVAR *STEP-MAX-INDENTATION* 40)(DEFVAR *STEP-PRINT-LENGTH* 5   "Local value")(IL:PUTPROPS IL:CMLSTEP IL:FILETYPE IL:COMPILE-FILE)(IL:PUTPROPS IL:CMLSTEP IL:MAKEFILE-ENVIRONMENT (:READTABLE "XCL" :PACKAGE "LISP"))(DEFUN STEP-SLEEP (FUNCTIONS)   "Sleep until the given functions are reached."(IL:* IL:|;;;| "This is an interesting bit of functionality for step that needs a better interface.  It currently exists but will not be documented for the release.")   (WHEN (NULL FUNCTIONS)         (SETQ FUNCTIONS 0))   (SETQ *STEP-STATE* FUNCTIONS)   (SETQ *EVALHOOK* #'STEP-COMMAND)   (SETQ *STEP-INDENTATION-LEVEL* 0))(IL:DECLARE\: IL:DONTEVAL@LOAD IL:DOEVAL@COMPILE IL:DONTCOPY IL:COMPILERVARS (IL:ADDTOVAR IL:NLAMA )(IL:ADDTOVAR IL:NLAML )(IL:ADDTOVAR IL:LAMA ))(IL:PUTPROPS IL:CMLSTEP IL:COPYRIGHT ("Venue & Xerox Corporation" 1986 1987 1990))(IL:DECLARE\: IL:DONTCOPY  (IL:FILEMAP (NIL)))IL:STOP