3/17/72 - JONL -
THE MAJOR NEW FEATURE OF LISP 229W IS THE USAGE OF THE DISPLAY SLAVE
THAT IRA, JERRY LERMAN AND I HAVE BEEN WORKING ON. SINCE THE
DESCRIPTION OF ITS USAGE IT QUITE LENGTHY, IT IS RESERVED FOR LAST
IN THIS NOTE.
FLOATING POINT OUTPUT IS NOW MUCH MORE READABLE - LISP HAS IMPROVED
CONVERSION ROUTINES THAT ACTUALLY ROUND TO 8. SIGNIFICANT DECIMAL
DIGITS, RATHER THAN TRUNCATING AS MOST OTHER PDP10 SYSTEMS PROGRAMS
DO [THAT IS WHY .1 PRINTS OUT AT YOU AS 0.09999999]. ALSO,
CALCULATION OF POWER-OF-TEN MULTIPLIERS IS DONE IN DOUBLE-PRECISION
FLOATING-POINT TO INSURE THAT THE READ-IN PHASE GETS THE BEST
27.-BIT APPROXIMATION TO THE MANTISSA OF THE NUMBER, AND THAT THE
PRINT-OUT PHASE DOES NOT LOSE ANY BITS IN THE NORMALIZATION PHASE:
NORMALIZES TO INTERVAL [1.0 10.0) ALL FLOATING POINT NUMBERS EXCEPT
THOSE IN THE RANGE (.099999999 99999999.5], AND WHEN NORMALIZED
PRINTS THE EXPONENT PRECEEDED BY "E".
AN EXPANDED FORM THE MULTIPLE-INDEX DO HAS BEEN ADDED TO THE SYSTEM
(DO INDEXLIST (ENDTEST RETURNVALUE) DOBODY)
THE ITEMS OF AN INDEXLIST MAY BE OF FORMS:
(X XINIT XSTEPPER) WHERE X IS INITIALIZED TO XINIT
AND MODIFIED AFTER EACH PASS THROUGH
DOBODY BY (SETQ X XSTEPPER)
(X XINIT) X IS INITIALIZED TO XINIT,
AND MAY BE USED LIKE A PROG VAR
(X) LIKE (X NIL)
AN ALTERNATE FORM FOR (ENDTEST RETURNVALUE) IS (ENDTEST), WHICH IS
TAKEN TO BE (ENDTEST NIL). CAREFUL ABOUT PARENTHESES - AN ENDTEST
OF (NULL X) IN THIS ABBREVIATED FORMAT WOULD LOOK LIKE, FOR EXAMPLE,
(DO ((X LONGLIST (CDR X)) (N 5 (SUB1 N)) (FLAG))
((NULL L))
(COND ((EQ (CAR L) 'FOO) (SETQ FLAG T))
(((EQ (CAR L) 'BAR) (SETQ FLAG N))))
(INFORM (CAR L) FLAG)
(INFORM 'GAG FLAG))
THE ORIGINAL DO FORMAT - (DO X XINIT XSTEPPER ENDTEST DOBODY) -
IS STILL APPLICABLE, AND FOR THE NEXT FEW WEEKS, THE COMPLR WILL NOT
HANDLE THE NEW MULTIPLE FORMAT.
*********** THIRD DO FORMAT INSTALLED 10/15/73 *********
BACKTRACE NOW WORKS MUCH BETTER, AND OMITS ALL THAT GARBAGE, OFTEN
SEEN WHEN AN ERROR OCCURS, ABOUT THE *RSET EXPR. THE FORMAT IS ALSO
A LITTLE DIFFERENT IN THAT AN ENTRY TO FUNCTION FOO WILL BE PRINTED
OUT AS FOO_ AND IF BAR IS CALLING FUNCTION FOO, THE PRINT-OUT WILL
BE FOO_BAR. IN GENERAL, PROGS AND CONDS ARE NO LONGER LISTED TWICE
FOR EACH ENTRY.
REMINDER! BACKTRACE IS NOT AUTOMATICALLY INVOKED UPON
AN ERROR, SO THE BEST WAY TO USE IT IS TO HAVE THE *RSET SWITCH SET
TO T, AND WHEN AN ERROR OCCURS, DO (BAKTRACE). IF YOUR ERROR IS
BEING CAUGHT AN STOPPED BY AN ERRSET, TRY SETTING USER INTERRUPT
NUMBER 4, WHICH WILL BE EXECUTED JUST AS AN ERROR
IS BEING CAUGHT BY AN ERRSET. TYPICAL USAGE WOULD BE
(SSTATUS INTERR 4 '(LAMBDA (FOO) (BREAK ERSTBREAK T)))
SPEAKING OF USER INTERRUPTS, NUMBER 9. WILL SERVICE A WRONG NUMBER OF
ARGUMENTS CAUGHT BY THE INTERPRETER.(CONTRARY TO A PREVIOUS NOTE, THE
FUNCTION CALLED WHEN AN ERROR CAUSES RESTORATION TO TOP LEVEL, I.E.,
THE *RSET FUNCTION, IS STORED IN INTERRUPT NUMBER 19.) AS ARGUMENT
IT WILL BE HANDED A TWO-LIST INDICATING THE FUNCTION ABOUT TO BE
APPLIED AND THE ARGUMENTS ACTUALLY PASSED ALONG, AND THE LAMBDA LIST
OF THE FUNCTION. FOR EXAMPLE ((FOO V1 V2 ) (X Y Z)) SHOWS THAT FOO
WAS BEING CALLED AND THE VALUES [REPEAT! VALUES] OF THE ARGUMENTS
TO FOO WERE V1 AND V2; ALSO, THE LAMBDA LIST OF FOO IS (X Y Z)
[CURRENTLY, THE INTERPRETER DOES NOT CATCH CALLS TO SUBRS WHERE THE
NUMBER OF ARGUMENTS IS WRONG]. SINCE A TYPICAL SERVICE FUNCTION
MIGHT BE (LAMBDA (ARGLOSS) (BREAK WNA T)), THE USER, AFTER INSPECTING
ARGLOSS, MIGHT TYPE
(RETURN '((FOO 'V1 'V2 35.)))
REMEMBERING THAT BREAK, UPON READING A RETURN, WILL ITSELF RETURN
THAT VALUE. AS BEFORE, IF THE SERVICE FUNCTION RETURNS A NON-NIL
VALUE, IT IS PRESUMED TO BE A LIST OF THE CORRECTED FORM; IN THIS
CASE, THE EVALUATION OF (FOO . . .) WILL BE RESTARTED AND REPLACED
BY (FOO 'V1 'V2 35.)
THE FAMOUS PSEUDO VIDISSECTOR IS WORKING WELL, AND IS
INITIALIZED BY (SSTATUS FTV FN1 FN2 DEV USR), IN ORDER TO USE THAT
FILE OF CANNED VIDI SCENES. NVFIX AND NVID WILL THEN OBTAIN THEIR
VALUES FROM THERE RATHER THAN FROM THE REAL VIDISSECTOR. GIVING
NVFIX A NEGATIVE FIRST ARGUMENT WILL ALLOW ACCESS OF CERTAIN HEADER
INFORMATION STORED WITH THE PICTURE ARRAY, THE SECOND ARGUMENT
SPECIFYING WHICH:
(NVFIX -1 0) => (XLL . YLL)
(NVFIX -1 1) => (XUR . YUR)
(NVFIX -1 2) => (DCO . CONF)
ASK JERRY LERMAN FOR MORE INFORMATION IF YOU ARE INTERESTED.
TYPEP IS A NEW SUBR THAT RETURNS ONE OF
LIST FIXNUM FLONUM BIGNUM PNAME RANDOM
DEPENDING UPON WHAT THE TYPE OF THE ARGUMENT IS; NIL IS OF TYPE PNAME
AS WELL AS TYPE LIST, SO IT IS ARBITRARILY GIVEN TYPE PNAME HERE; ANY
DOTTED PAIR, AND NOT JUST PROPER LISTS, IS GIVEN VALUE LIST.
MAKNUM IS NOW AN LSUBR, WITH (MAKNUM FOO) BEING EQUIVALENT
TO (MAKNUM FOO 'FIXNUM)
(SSTATUS DIVOV T) WILL ENABLE A DIVIDE OVERFLO IN THE
FUNCTION QUOTIENT TO RETURN THE NUMERATOR WITH ITS MAGNITUDE
INCREASED BY ONE (RATHER THAN CREATING AN ARITHMETIC OVERFLOW ERROR).
MORE REMINDERS OF THINGS ALREADY KNOWN:
(1) IF AN ITEM IN A LIST TO MAKNAM OR READLIST IS A NUMBER INSTEAD OF
A PNAME-TYPE ATOM, IT IS TREATED AS THE SINGLE CHARACTER ATOM
WHOSE ASCII CHARACTER VALUE IS THAT NUMBER. THUS
(READLIST '(101 102)) RETURNS AB .
(2) INFINITE PRECISION FIXNUM ARITHMETIC WORKS WELL IN BNLISP - SOME
HAVE SUGGESTED MAKING THIS THE STANDARD LISP. IF ANYONE OBJECTS
TO THE EXTRA BLOCK OF PURE CODE THAT THIS WOULD REQUIRE, OR TO
THE LOSS OF ERROR MESSAGES ON ARITHMETIC OVERFLOWS, OR TO THE
EPSILON TIME LOSS REQUIRED FOR ADDITIONAL INTERPRETATION, PLEASE
LEAVE ME A NOTE [DO :MAIL JONL I OBJECT ETC.<CONTROL-C>]
PERHAPS IT IS REDUNDANT TO SAY, BUT CODE COMPILED BY THE UPCOMING
FAST-NUMBER COMPILER WILL NOT MAKE USE OF THE INFINITE PRECISION
SUBROUTINES. INSTEAD WE AIM ONLY FOR ONE-HALF FORTRAN SPEED ON
FORTRAN-LIKE PROBLEMS ENCODED IN MACLISP.
PLANS FOR THE FUTURE: SUPER-FAST ARRAY ACCESSING, LIKE
FORTRAN ALMOST, AND THE EXTENSION OF THE FAST-NUMBER COMPLR TO HANDLE
THEM. A COMPATIBLE VERSION OF MACLISP [EXCEPT FOR UNUSUAL I/O
DEVICES] LIVES ON THE BBN TENEX SYSTEM; SOME GROUP AT UNIV. OF MICH.
HAS IMPLEMENTED A MACLISP ON A 360. WORK IS AFOOT TO OBTAIN A
COMPATIBLE MACLISP ON MULTICS [THEY SAY, TOO, THAT WORK IS AFOOT TO
MAKE MULTICS COMPATIBLE WITH REAL TIME]. THE VERSION RUNNING ON THE
MATHLAB SYSTEM MAY BE THE FIRST TO HAVE A DYNAMICALLY EXPANDABLE FREE
STORAGE, BUT THIS IS MANY MONTHS IN THE FUTURE.
IN ORDER TO USE THE SLAVE, IT IS NECESSARY TO HAVE AVAILABLE
THE PDP6. SOON WE WILL HAVE A VERSION THAT WILL ALSO RUN ON THE 10
UNDER ITS, AT PERHAPS SOME DEGRADATION IN PERFORMANCE (BOTH OF THE
SLAVE AND ITS). THE PDP6 SHOULD BE IN THE RUNNING STATE, AND IF
SIMPLY HITTING THE START SWITCH DOESN'T KEEP THE RUN LIGHT ON,
DEPOSIT ZEROS INTO LOCATIONS 40 AND 41 AND START UP AT 40
THE REMAINDER OF THIS DESCRIPTION OF LISP FUNCTIONS FOR THE NEW
PDP6 DISPLAY SLAVE USES THE FOLLOWING CONVENTIONS:
X, Y ARE ASSUMED TO BE INTEGER ARGUMENTS TO LINE DRAWING,
POINT INSERTING, AND OTHER SUCH FUNCTIONS
N IS A FIXED-POINT NUMERICAL ARGUMENT DESCRIBED
UNDER PARTICULAR FUNCTIONS
ITEM IS ASSUMED TO BE THE NUMERICAL INDEX OF SOME
DISPLAY SLAVE ITEM. IT IS A QUANTITY SUCH AS IS
RETURNED BY DISCREATE.
BRITE EACH ITEM HAS A BRIGHTNESS LEVEL ASSOCIATED WITH IT,
RANGEING BETWEEN 1 AND 8. DEFAULT VALUE = 8.
SCALE EACH ITEM HAS A SCALE, OR MAGNIFICATION, FACTOR
ASSOCIATED WITH IT, RANGEING BETWEEN 1 AND 4.
DEFAULT, AND NORMAL, IS 1; 2 DOUBLES THE LENGTH OF
DRAWN LINES AND TEXT, 3 QUADRUPLES AND 4 MULTIPLYS
BY 8. TEXT LOOKS MUCH NICER IF IT IS DRAWN WITH A
LITTLE MAGNIFICATION; GENERALLY 2 IS APPROPRIATE.
FLAG IS AN INDICATOR TELLING WHETHER A GIVEN ACTION
IS TO BE DONE [ON NON-NIL] OR UNDONE
BSL IS EITHER NIL, IN WHICH CASE THERE IS NO CHANGE, OR
IS A LIST LIKE (BRITE SCALE) INDICATING A SETTING OF
LEVELS FOR A GIVEN ACTION
121. A WELL-KNOWN INTEGER, EASILY RECOGNIZED TO BE THE
SQUARE OF THE FIFTH PRIME, BUT NOT SO EASILY SEEN
AS SUCH WHEN EXPRESSED IN OCTAL AS 171 - THUS WE USE
OCTAL NOTATION EXCEPT WHEN THE STRING OF DIGITS IS
FOLLOWED BY A .
EACH ITEM HAS ASSOCIATED WITH IT VARIABLES DETERMINING
THE BRIGHTNESS, SCALE, AND VISIBILITY OF POINT AND LINE INSERTION
REQUESTS; LIKE THE LOGO TURTLE, WE THINK OF THE ITEM AS HAVING A PEN
WHICH CAN BE "DOWN" SO THAT A LINE IS VISIBLE WHEN THE TURTLE IS
REQUESTED TO GO FROM ONE PLACE TO ANOTHER, OR "UP" SO THAT NO MARK
IS SEEN. FOR THE COMMANDS TO AFFECT BRIGHTNESS, SCALE, OR THE PENUP
STATUS, 0 GENERALLY MEANS NO CHANGE. COMMANDS WHICH TAKE AN
OPTIONAL BSL ARGUMENT - NAMELY DISAPOINT, DISCUSS, AND DISALINE -
WILL TREAT IT AS A TEMPORARY SETTING FOR THESE VALUES, AND UPON EXIT
WILL RESTORE THESE VARIABLES TO THEIR VALUES PRIOR TO THE CALL.
SIMILARLY, THE OPTIONAL PENUP ARGUMENT TO DISALINE IS TREATED
AS TEMPORARY.
ARGUMENTS THAT ARE INTENDED TO SPECIFY LOCATIONS
ON THE 340 SCREEN FOR THE FUNCTIONS DISALINE, DISAPOINT, AND DISCUSS,
ARE INTERPRETED IN ONE OF FOUR WAYS DEPENDING ON THE SETTING OF
THE SLAVE VARIABLE "ASTATE":
0 RELATIVE MODE - THE POINT SPECIFIED IS IN RELATION TO
THE HOME OF THE ITEM ON WHICH THE COMMAND IS ACTING.
1 ABSOLUTE MODE - X AND Y ARE DIRECTLY INTERPRETED IN
THE CO-ORDINATES OF THE 340 SCREEN, MOD 1024., WITH
THE LOWER-LEFT CORNER BEING [0,0]
2 INCREMENTAL MODE - THE POINT SPECIFIED IS IN RELATION
TO THE CURRENT POSITION OF THE PEN OF THE ITEM ON
WHICH THE COMMAND IS ACTING.
3 POLAR MODE - LIKE INCREMENTAL, BUT THE ARGUMENTS,
WHICH MUST BE FLOATING POINT, ARE CONSIDERED AS THE
RADIUS AND ANGLE FOR A POLAR COORDINATE SYSTEM
CENTERED ABOUT THE CURRENT PENPOSITION (WITH ZERO
DEGREES BEING HORIZONTAL TO THE RIGHT).
TO EMPHASIZE THE ASTATE MAPPING OF THESE ARGUMENTS, WE WILL WRITE
ASTATE[X,Y] TO MEAN THE POINT SPECIFIED BY X AND Y.
N.B.: FUNCTIONS LIKE DISCREATE, DISLOCATE, AND DISMOTION, WHICH
PLACE FOR AN ITEM'S HOME IN SOME SPECIFIED LOCATION, ALWAYS INTERPRET
THE SPECIFICATION IN ABSOLUTE MODE.
TYPICAL CALLS FUNCTION TYPE EXPLANATION
(DISCREATE X Y) LSUBR CREATE A DISPLAY ITEM WITH HOME AT
(DISCREATE) [X,Y] ON THE 340 SCREEN. DEFAULT
OPTION IS TO PLACE HOME AT [0,0]
IF X AND Y NOT GIVEN. RETURNS
ITEM NUMBER OF NEWLY CREATED ITEM.
(DISINI) LSUBR SEIZE AND INITIALIZE SLAVE. IF USER
ALREADY HAS SLAVE, THEN REINITIALIZE,
AND SET ASTATE TO GIVEN ARGUMENT.
ALWAYS RETURNS PREVIOUS VALUE OF
ASTATE, BUT NO ARG GIVEN, OR ARG NOT
AMONG 0,1,2,3 MAKES NO CHANGE IN
ASTATE. INITIAL ASTATE = 0.
(DISPLAY ITEM FLAG) SUBR ITEM ON OR OFF DISPLAY - I.E. MAKE
VISIBLE ON SCREEN OR NOT. DISCREATE,
DISCOPY, AND DISGOBBLE PLACE THEIR
ITEMS ON DISPLAY, EVEN WHEN NULL.
WHEN OFF DISPLAY, THE ITEM IS STILL
REMEMBERED BY THE SLAVE UNTIL FLUSHED
(DISFLUSH) LSUBR NO ARG GIVEN MEANS FLUSH WHOLE SLAVE
(DISFLUSH ITEM1 . . . ITEMN) OTHERWISE SIMPLY KILL ITEMS.
(DISLOCATE ITEM X Y) SUBR MOVE ITEM'S HOME TO LOCATION [X,Y]
(DISBLINK ITEM FLAG) SUBR SELF EXPLANATORY
(DISCOPY ITEM) SUBR MAKE A COPY OF ITEM, AS A NEW ITEM
WITH HOME AT SAME LOCATION. RETURN
NEW ITEM NUMBER.
(DISMARK ITEM N) SUBR IF N=0, REMOVE MARKER FROM ITEM.
IF N<0, INSERT STANDARD MARKER
IF N> , USE ITEM WITH #N AS MARKER
(DISCRIBE ITEM) SUBR GET LIST OF (XHOME,YHOME,XPENPOS,
YPENPOS,BRITE,SCALE,PENUP,MARKER)
FROM ITEM
(DISCHANGE ITEM BRITE SCALE)
SUBR BRITE AND SCALE ARE INCREMENTS TO
BE ADDED TO THE PARTS OF ITEM
(DISLINK ITEM1 ITEM2 FLAG)
SUBR LINK OR UNLINK ITEM1 TO ITEM2
ITEM2 IS THE "INFERIOR" OF ITEM1,
AND WILL BE DISLOCATED, DCHANGED,
DISBLINKED, AND DISPLAYED AS A
SUBPART OF ITEM1 WHENEVER THESE
OPERATIONS ARE PERFORMED ON ITEM1.
(DISLIST) LSUBR RETURN LIST OF ALL ITEMS ON DISPLAY
(DISLIST ITEM) RETURN LIST OF ALL INFERIORS OF ITEM
(DISET ITEM N BSL) SUBR SETS THE DEFAULT VALUES FOR PENUP,
BIRGHTNESS, AND SCALE PARAMETERS FOR
THE ITEM. IF N IS -1, PUT PEN DOWN;
IF +1, LIFT UP PEN; IF 0, LEAVE PEN
ALONE. SET BRITE AND SCALE FROM BSL
[FOR MEANING OF BSL, SEE CONVENTIONS
DISCUSSED ABOVE] WHEN CREATED, THE
ITEM'S DEFAULTS ARE: PEN IS DOWN,
BRIGHTNESS IS 8., AND SCALE IS 1.
(DISALINE ITEM X Y)
(DISALINE ITEM X Y N)
(DISALINE ITEM X Y BSL)
(DISALINE ITEM X Y BSL N)
LSUBR SET PENUP AND BSL AS INDICATED BY
N AND BSL (SEE DISET ABOVE), THEN GO
FROM CURRENT PEN POSITION TO
ASTATE[X,Y], LEAVING A VISIBLE LINE
ONLY IF THE PEN IS DOWN, AND THEN
RESTORE THE PENUP AND BSL PARAMETERS
(DISAPOINT ITEM X Y)
(DISAPOINT ITEM X Y BSL)
LSUBR DISPLAY A POINT AT ASTATE[X,Y]. DOES
AFFECT ITEM'S PENUP OR BSL PARAMETERS
(DISCUSS ITEM X Y TEXT)
(DISCUSS ITEM X Y TEXT BSL)
LSUBR THE CHARACTERS OF THE VALUE OF TEXT
ARE INSERTED, AS IF PRINC'ED, INTO
THE INTO ITEM BEGINNING AT POINT
ASTATE[X,Y]. NO CHANGE IN ITEM'S
PENUP AND BSL PARAMETERS.
(DISMOTION ITEM X Y SPD)
SUBR CAUSES ITEM TO BE SLOWLY DISLOCATED
SO THAT IT'S HOME IS AT [X,Y]. IF
EITHER X OR Y IS NEGATIVE THEN PLACES
ITEM UNDER CONTROL OF SPACE WAR
CONSOLE 1. THE BUTTON RETURNS
CONTROL TO THE TTY. SPD IS AN INVERSE
MEASURE OF THE SPEED AT WHICH THE
ITEM WILL MOVE. SPD = 0 IS MAXIMUM.
NOTE WELL: ALTHOUGH THE SPACE-WAR
CONSOLE CONTROL WILL WORK FOR ANY
DISPLAY ITEM, THE AUTOMATIC SLOW
MOTION WILL CURRENTLY WORK ONLY FOR
ITEMS CONSISTING SOLELY OF LINES
DRAWN BY DISALINE.
(DISGORGE ITEM) SUBR CREATES A (GENSYM'D) LISP ARRAY AND
FILLS IT WITH THE 340 CODE FROM ITEM.
(DISGOBBLE ARRAYNAM) SUBR TAKES THE ENTRIES OF THE LISP ARRAY
ARRAYNAM AND CREATES A DISPLAY SLAVE
ITEM WITH THOSE ENTRIES.
EXAMPLES
A SUBROUTINE TO DRAW A LIGHT BOX WITH A MEDIUM POINT INSIDE IT AT
THE CENTER OF THE SCREEN, RETURNING A DESCRIPTION OF THE SLAVE ITEM:
((LAMBDA (OASTATE B)
(DISALINE B -100 -100 1) ;GO TO LOWER-LEFT CORNER
(DISET B 0 (LIST 3 BOXSCL)) ;GLOBAL VARIABLE FOR SCALE,
;NO CHANGE TO PENUP STATUS
(DISALINE B 0 200)
(DISALINE B 200 0) ;SEE HOW EASY IT IS IN
(DISALINE B 0 -200) ;INCREMENTAL MODE!
(DISALINE B -200 0)
(DISINI 0) ;BUT EASIER TO PUT IN POINT
(DISAPOINT B 0 0 '(6 0)) ;IN RELATIVE MODE. NOTE THAT
;SCALE IS NOT USED HERE
(DISINI OASTATE) ;RESTORE ASTATE
(DISCRIBE B))
(DISINI 2) (DISCREATE 1000 1000)) ;CREATES B, HOME AT CENTER
TO ADD SOME TEXT ON THE TOP OF THE BOX, ASSUMING ASTATE=0 AND THAT
B'S VALUE IS THE NUMBER OF THE ABOVE ITEM:
(DISCUSS B -200 207 '(HERE IS THE BOX - SEE THE BOX) '(6 2))
TO MOVE THE BOX B RIGHT 100 UNITS:
(SETQ FOO (DISCRIBE B))
(SETQ FOO (LIST (CAR FOO) (CADR FOO)))
(DISLOCATE B (+ 100 (CAR FOO)) (CADR FOO))
TO PUT A CROSS WHERE THE PEN IS NOW, AND SOME TEXT WHERE IT USED TO
BE BEFORE THE MOVE:
(DISMARK B -1)
(DISCUSS B (CADDR FOO) (CADDDR FOO) '(TURTLE SLEPT HERE))
TO BRIGHTEN UP THE BOX AND POINT [BUT THE TEXT "(TURTLE SLEPT HERE)"
WAS ALREADY IN BRIGHTEST MODE, SO IT REMAINS UNCHANGED]:
(DISCHANGE B 2 0)
TO FLUSH THE BOX: (DISFLUSH B)
TO FLUSH ALL ITEMS ON THE LIST L: (APPLY 'DISFLUSH L)
TO GIVE UP THE SLAVE: (DISFLUSH)