12/3/73 MONDAY DEC 03,1973 LISP 686 - GLS, JONL - NOT-SO-BRIEF SYNOPSIS: [0] TRY BLISP! (THIS IS, AT LONG LAST, THE FAMOUS "BIBOP LISP".) INFO ON BIBOP LISP IS AT THE *END* OF THIS LISP RECENT, AND ALSO ON .INFO.;BIBOP (MEMO). THE LATTER IS TJ6'D, SUITABLE FOR OUTPUTTING TO THE XGP OR LPT. IF YOU ARE DEEPLY CONCERNED WITH THE INNER WORKINGS OF LISP, E.G. YOU MAKE UP AND DUMP CONNIVERS OR MACSYMAS, SEE GLS OR JONL IN ROOM 834 FOR AN ILLUSTRATED BIBOP MEMO AND/OR A LONG-WINDED EXPLANATION. [1] NUMBERP, FIXP, FLOATP, BIGP RETURN T OR NIL, NOT ARG [2] CURSORPOS EXTENDED [3] NEW FUNCTIONS: [3A] COPYSYMBOL [3B] SYSP [3C] ALLOC [4] NOINTERRUPT NOW RETURNS OLD STATE [5] NEW SWITCH FOR ARITHMETIC UNDERFLOW: ZUNDERFLOW [6] GRIND0 AND SPRINTER NOW AUTOLOAD [7] DISINI TAKES SECOND ARG TO USE GT40 [8] GCMIN HAS DISAPPEARED; NEW GC-LOSSAGE AND GC-DAEMON ARGS [9] COMPLR HAS TWO READTABLES ---------------------------------------------------------------- [1] FOR VARIOUS REASONS HAVING TO DO WITH EFFICIENCY OF CODE PRODUCED BY THE NUMBER COMPILER (NCOMPLR), NUMBERP, FIXP, FLOATP, AND BIGP NOW ALWAYS RETURN T OR NIL, AND NEVER THEIR ARGUMENTS AS THEY USED TO. [2] CURSORPOS HAS BEEN EXTENDED IN TWO WAYS: [2A] IN THE TWO-ARGUMENT FORM, AN ARGUMENT OF NIL MEANS DON'T CHANGE THAT COORDINATE. [2B] CURSORPOS MAY BE CALLED WITH ONE ARGUMENT, WHICH SHOULD BE EITHER A SINGLE-CHARACTER OBJECT (AN ATOMIC SYMBOL, THE FIRST CHARACTER OF WHICH IS USED) OR A FIXNUM BETWEEN 0 AND 177 SPECIFYING THE ASCII VALUE OF A CHARACTER. A LIST OF VALID CHARACTERS AND THEIR ACTIONS (HACKERS WILL NOTE THAT THESE ARE CONTROL-P TTY CODES): CHARACTER FUNCTION C CLEAR SCREEN AND HOME UP F MOVE CURSOR FORWARD NON-DESTRUCTIVELY B MOVE CURSOR BACKWARD D MOVE CURSOR DOWN (LINE FEED) U MOVE CURSOR UP (LINE STARVE) ] KILL FROM CURSOR TO END OF LINE E KILL FROM CURSOR TO END OF SCREEN T HOME UP, DO NOT CLEAR SCREEN M,N CONNECTED TO **MORE** FEATURE, NOT VERY WELL DEFINED. USE AT YOUR OWN RISK. NOTE THAT R AND S ARE NOT PERMITTED, SINCE LISP USES THOSE CODES FOR ITS ONW PURPOSES. IF YOU FEED AN INVALID CHARACTER TO CURSORPOS, IT WILL GIVE A CORRECTABLE WRNG-TYPE-ARG ERROR. [3] THREE NEW FUNCTIONS: COPYSYMBOL, SYSP, AND ALLOC. [3A] COPYSYMBOL IS A SUBR OF TWO ARGUMENTS. THE FIRST MUST BE AN ATOMIC SYMBOL, AND THE SECOND IS A FLAG. IT RETURNS A COPY (NON-INTERNED!) OF THE ATOMIC SYMBOL. THIS COPY WILL HAVE THE SAME PRINT NAME AS THE OLD ONE. IF THE FLAG IS NIL, THE NEW SYMBOL WILL HAVE NO OTHER PROPERTIES OR VALUE. IF THE FLAG IS NON-NIL, IT WILL HAVE THE SAME PROPERTIES AS THE OLD ONE. NOTE THAT ALTHOUGH VALUES OF PROPERTIES WILL BE EQ, SECTIONS OF PROPERTY LIST WILL NOT; THUS PUTTING A PROPERTY ONTO THE OLD ATOM AFTERWARD WILL NOT AFFECT THE NEW ONE, AND VICE VERSA. IF THE OLD ATOM HAD A VALUE, THE NEW ONE WILL HAVE ITS OWN VALUE CELL, BUT THE SAME VALUE IN THAT VALUE CELL. ARGS PROPERTIES, SUBR PROPERTIES, ETC. WILL BE TRANSFERRED IN AN APPROPRIATE MANNER. THIS IS THE RECOMMENDED WAY TO CREATE NEW ATOMIC SYMBOLS (MAKNAM AND GENSYM ARE ALSO RECOMMENDED). THE OLD TECHNIQUE (THAT'S A POLITE TERM FOR A CROCK) OF SAYING (CONS (CAR NIL) (CDR <ATOM>)) DOES NOT WORK ON MULTICS AND WILL NOT WORK ON THE NEW PDP-10 BIBOP LISP, AND IS THEREFORE HIGHLY DISCOURAGED. [3B] SYSP IS A SUBR OF ONE ARGUMENT. IF ITS ARGUMENT IS A SUBR PROPERTY WHICH IS THAT OF SOME SYSTEM SUBR (AS OPPOSED TO A USER SUBR), OR AN ATOMIC SYMBOL WITH SUCH A PROPERTY, THEN SYSP RETURNS T, OTHERWISE NIL. THIS IS USED PRIMARILY BY COMPLR. EXAMPLES: (SYSP 'CAR) => T (SYSP 'FOO) => NIL (SYSP 47) => NIL [3C] ALLOC IS A SUBR OF ONE ARGUMENT, WHICH CAN BE USED TO SET THE GCMIN PARAMETERS FOR VARIOUS SPACES. (NOTE THAT THE VARIABLE GCMIN HAS DISAPPEARED - SEE [8] BELOW.) IT TAKES A PAIRED LIST; THE FIRST ITEM OF EACH PAIR SHOULD BE THE NAME OF A SPACE (LIST, FIXNUM, OR FLONUM), AND THE SECOND SHOULD BE OF THE FORM (NIL NIL <FIXNUM>). THE FIXNUM IS USED TO SET THE GCMIN. THIS STRANGE FORMAT IS FOR COMPATIBLITY WITH BIBOP; SEE BELOW. EXAMPLE: TO SET THE GCMIN FOR LIST TO 333, AND FOR FLONUM TO 22, LEAVING THE FIXNUM GCMIN ALONE, SAY: (ALLOC '(LIST (NIL NIL 333) FLONUM (NIL NIL 22))) TO EXAMINE THE GCMINS, SAY (ALLOC T) AND YOU WILL GET BACK A LIST SUITABLE FOR USE AS AN ARGUMENT TO ALLOC, CONTAINING THE CURRENT STATES OF THE GCMINS. [4] THE NOINTERRUPT FUNCTION DESCRIBED IN THE LAST LISP RECENT HAS BEEN ALTERED SO THAT IT ALWAYS RETURNS THE PREVIOUS STATE OF THE SWITCH, RATHER THAN ITS ARGUMENT. THUS ONE MAY "PUSH" AND "POP" THE STATE OF THIS SWITCH. [5] MOST OF THE FLONUM ARITHMETIC FUNCTIONS GIVE AN ERROR "ARITHMETIC UNDERFLOW" IF UNDERFLOW OCCURS DURING SOME COMPUTATION. SETTING THE VARIABLE ZUNDERFLOW TO NON-NIL CAUSES 0 TO BE RETURNED INSTEAD WHEN UNDERFLOW OCCURS. IN PARTICULAR ((LAMBDA (ZUNDERFLOW) (LIST (TIMES 1.0E-20 1.0E-20) (*$ 1.0E-20 1.0E-20) (EXPT 1.0E-20 2))) T) WILL RETURN (0.0 0.0 0.0). NOTE THAT UNDERFLOW DETECTION WILL NOT OCCUR IN NUMERICAL CODE OPEN-CODED BY NCOMPLR; ONLY CLOSED (OR INTERPRETED) CALLS TO LISP SYSTEM SUBRS WILL DETECT THIS. [6] SPRINTER AND GRIND0 NOW AUTOLOAD. SPRINTER IS MERELY A "PRETTY-PRINT" FUNCTION FOR RANDOM FORMS; IT IS ESSENTIALLY WHAT GRINDEF CALLS WHEN IT IS "PRETTY-PRINTING" A FUNCTION DEFINITION. [7] DISINI MAY NOW TAKE A SECOND ARGUMENT, WHICH SPECIFIES THAT A GT40 IS TO BE USED INSTEAD OF THE 340. THIS ARGUMENT SHOULD BE AN ATOMIC SYMBOL WHOSE PRINT NAME IS THE GT40'S TTY NUMBER. EXAMPLE: (DISINI 0 'T34) CURRENTLY, T34 IS THE ONLY GT40 AVAILABLE. [8] THE VARIABLE GCMIN NO LONGER EXISTS. TO ALTER GCMIN PARAMETERS, USE THE FUNCTION ALLOC, DESCRIBED ABOVE. THE FORMAT OF THE ARGUMENT TO THE GC-LOSSAGE FUNCTION HAS BEEN ALTERED FOR COMPATIBILITY WITH BIBOP. IT USED TO BE THE NAME OF THE LOSING SPACE (LIST, FIXNUM, OR FLONUM). NOW IT IS A LIST OF THE SPACE NAME AND THE ATOM "MIN"; THUS IF LIST SPACE OVERFLOWED, THE GC-LOSSAGE FUNCTION WOULD GET THE ARGUMENT (LIST MIN). THE FORMAT OF THE GC-DAEMON'S ARGUMENT HAS ALSO BEEN ALTERED: WHERE THE ARGUMENT USED TO BE OF THE FORM (<BEFORE> . <AFTER>), IT IS NOW OF THE FORM (<SPACE NAME> <BEFORE> . <AFTER>). THUS A TYPICAL GC-DAEMON ARGUMENT MIGHT BE ((LIST 200 . 473) (FIXNUM 0 . 375) (FLONUM 457 . 472)). [9] THE COMPILER NOW HAS TWO READTABLES. THE FIRST IS THE STANDARD INITIAL READTABLE, THE OTHER IS THE VALUE OF THE VARIABLE CREADTABLE. THE VARIABLE READTABLE IS LAMBDA-BOUND TO THE VALUE OF CREADTABLE WHEN COMPILATION BEGINS. THIS READTABLE WILL THUS BE IN EFFECT DURING EXECUTION OF DECLARES, ETC. SO THAT FUNNY MACRO CHARACTERS DEFINED IN THE FILE WILL GO INTO THE SECOND READTABLE. THUS THESE CHARACTERS WILL NOT BE SEEN IF YOU DO A ^G QUIT. IF YOUR FILE NEEDS CERTAIN MACRO CHARACTER DEFINITIONS IN ORDER TO BE READABLE, THERE ARE TWO WAYS TO GET THESE DEFINITIONS INTO CREADTABLE: 1) BY DECLARE, E.G. (DECLARE (SETSYNTAX '/: 'SPLICING '(LAMBDA NIL NIL))) OR EVEN (DECLARE (EVAL (READ))) (SETSYNTAX '/: 'SPLICING '(LAMBDA NIL NIL)) 2) BY EXPLICITLY BINDING READTABLE TO CREADTABLE, E.G. ((LAMBDA (READTABLE) (FASLOAD MAC CHARS)) CREADTABLE) [0] HERE FOLLOWS SOME INFORMATION ON BIBOP LISP: The (in)famous "Bibop" (pronounced "bee-bop") LISP scheme is now available. Bibop means "BIg Bag Of Pages", a reference to the method of memory management used to take advantage of the memory paging features of ITS. The average LISP user should not be greatly affected in converting to this new LISP (which very eventually will become the standard LISP, say in two or three months). Much effort has been expended to keep Bibop and non-Bibop LISPs compatible. In particular, if LISP code written for non-Bibop LISP also works "as is" in Bibop LISP, then so will the corresponding LAP and FASL files; that is, the compiler output is completely compatible (and will be kept so). Unless you must alter source code for Bibop LISP, there is no need to recompile. $$$$$ [1] $$$$$ Atomic Symbols Are Different $$$$$ Atomic symbols in Bibop LISP are very different from those in non-Bibop LISP. The PNAME, ARGS, and VALUE "properties" are not stored on the property list, but in a secret hidden place. The ARGS property can be examined and altered with the function ARGS as in non-Bibop LISP, the VALUE property with EVAL, SET, SETQ, and BOUNDP, and the PNAME property with EXPLODE, GETCHAR, etc. The car of an atomic symbol is not -1 (#777777) in Bibop LISP. The cdr of an atomic symbol is still the property list, however; using RPLACD on an atom, though hackish, also works as before. EXPR and SUBR properties are kept on the property list as in non-Bibop LISP. Note well: (CONS (CAR NIL) <property-list>) is most definitely not a good way to construct a new atomic symbol (in Bibop, the result won't be an atom at all, but a dotted pair or whatever). If it is necessary to create a new atomic symbol in this manner, use the function COPYSYMBOL, which works as described in LISP ARCHIV in both Bibop and non-Bibop LISPs. $$$$$ [2] $$$$$ The Allocator Is Different $$$$$ When a Bibop LISP starts up, it says: BIBOP LISP <version number> ALLOC? All the usual responses have their usual effects; ^Q, ^W, space, Y, N, etc. work as in non-Bibop LISP. Some questions asked are different, however, and they are presented in a different order. Questions and their default values look something like: CORE = 66 REGPDL = 10000 SPECPDL = 4000 FXPDL = 10000 FLPDL = 2000 LIST = 40000 FIXNUM = 5000 FLONUM = 2000 BIGNUM = 400 SYMBOL = 2000 SAR = 400 The only parameters which are of real importance are the various pdl allocations, which is why they come first; the others can be changed later (see below). The four pdl parameters are upper limits to the sizes (in PDP-10 words) of the four push-down stacks in LISP. Don't be afraid to give large values for these allocations (or for others, either) since you are not really given as much core as you ask for, but only one page of core per pdl; as the pdls grow, more pages of core are added. The other six parameters control the maximum size for each of six "spaces" used to contain various objects. They are: LIST lists and dotted pairs FIXNUM fixnums (like FXS in non-Bibop LISP) FLONUM flonums (like FLS in non-Bibop LISP) BIGNUM bignums (actually, just the bignum headers, which hold the sign and point to the rest) SYMBOL atomic symbols (this is why you can't use CONS to create symbols; they are not in LIST space!) SAR special array cells (seen primarily on property lists as values of ARRAY properties; the allocation for these need not be large) Again, you are not really given as much core as you ask for, so don't be afraid to ask for lots; you only get a little core, and more is added when you need it. As in non-Bibop LISP, if you type ^Q or other magic characters at the ALLOC? question, your .LISP. (INIT) file will be read. The first form should be a comment, as usual. The names of the spaces should be the same as the names used by ALLOC, given above. Note that supplying nonexistent space names in the comment doesn't hurt, so you can use the same comment in non-Bibop LISPs as well as Bibop LISPs; e.g. the comment (COMMENT FXS 4000 FIXNUM 5000 FLS 2000 SYMBOL 4000 FLONUM 2000 BIGNUM 1400) will for non-Bibop set the size for FXS=4000, FLS=2000 and for Bibop will set FIXNUM=5000, FLONUM=2000, SYMBOL=4000, BIGNUM=1400. $$$$$ [3] $$$$$ The ALLOC Function $$$$$ The primary feature of Bibop is that it allows you to expand memory dynamically. It does this automatically to a certain extent; however, the user may explicitly alter the sizes of memory spaces with the function ALLOC. This is a subr whose single argument should look like the comment form given in a .LISP. (INIT) file. Example: (ALLOC '(LIST 40000 FIXNUM 6000 SYMBOL 5000)) will dynamically re-allocate LIST space to be a maximum of 40000 words, etc. At present Bibop can only expand memory, not shrink it, so if you specify a size for a space smaller than its current actual size, your request is ignored for that space. ALLOC returns T. (The ALLOC function is actually considerably more complicated, but the above description should suffice for the purposes of most users. An extended description of ALLOC may be found in section II.[3].) $$$$$ [4] $$$$$ A Few New Messages $$$$$ If you should run out of memory for any reason, you will see a message similar to that in non-Bibop LISP, e.g.: (FIXNUM MAX) STORAGE CAPACITY EXCEEDED ;BKPT GC-LOSSAGE Now all is not lost at this point in a Bibop LISP; you may call the function ALLOC to make FIXNUM space bigger, then say (RETURN '(T)) to continue the computation. If you say $P the computation is aborted. If it says (FIXNUM MIN) instead of (FIXNUM MAX), then you have lost badly; just type $P. This should happen only rarely, however. If you see a message that looks something like ;ADDING A NEW FIXNUM SEGMENT - FIXNUM SPACE NOW 2000 WORDS it merely means that the garbage collector has decided to add more memory. You will only see this if you have typed ^D to see the garbage collector statistics (as in non-Bibop). Yet another message you may see (which also does not exist in non-Bibop LISP) is: ;BKPT PDL-OVERFLOW This means that you have used excessive amounts of pdl, and therefore are probably stuck in infinite recursion or something. If you want to keep going, just say $P and Bibop will try to extend the pdl if it can. To abort the computation, use ^G.MONDAY OCT 15,1973 FM+4D.3H.22M.30S. LISP 623 - GLS - BRIEF SYNOPSIS: [1] NEW FUNCTION GCD FOR "GREATEST COMMON DIVISOR" [2] NEW DO FORMAT PERMITS PROGS WITH INITIAL SETTINGS FOR VARIABLES [3] PRINLEVEL, PRINLENGTH, AND (STATUS ABBREVIATE) [4] NOINTERRUPT - USER FEATURE TO LOCK OUT REAL-TIME INTERRUPTS [5] (STATUS DOW) FOR DAY-OF-WEEK INFORMATION [6] NEW COMPLR SWITCH: V [7] SOME CHAGES: A) (STATUS XCTPG) AND (XCTBLT) SUPERSEDED BY (STATUS UUOLINKS) AND (SSTATUS UUOLINKS) B) REMOB IS NOW A SUBR C) SECOND ARG TO RECLAIM IS DIFFERENT ---------------------------------------------------------------- [1] THERE EXIST TWO FUNCTIONS TO TAKE THE GCD OF TWO NUMBERS. (GCD X Y) TAKES THE GCD OF X AND Y, WHICH MAY BE FIXNUMS OR BIGNUMS. (\\ X Y) IS SIMILAR, BUT X AND Y MAY ONLY BE FIXNUMS. THUS \\ IS TO GCD AS * IS TO TIMES, ETC. THIS SYMBOL IS EASILY REMEMBERED IF YOU REMEMBER THAT \ MEANS REMAINDER, AND GCD IS JUST A MOBY REMAINDER, SORT OF. [2] THERE IS A THIRD FORMAT FOR DO NOW: (DO <VAR-SPECS> NIL BODY...) THIS IS EXACTLY LIKE A NEW-STYLE DO (MULTIPLE INDICES) EXCEPT THAT THE PREDICATE/RETURN VALUE CLAUSE IS NIL. (NOT (NIL), BUT NIL!!!) THE MEANING OF THIS IS THAT THE VARIABLES SHOULD BE INITIALIZED AND THE BODY PERFORMED EXACTLY ONCE. NOTE THAT STEPPERS FOR THE VARIABLES ARE ILLEGAL IN THIS MODE, SINCE STEPPERS CAN NEVER BE EXECUTED. EXAMPLE: (DO ((A 0) (B 1)) NIL (PRINT 'A=) (PRIN1 A) (PRINT 'B=) (PRIN1 B)) PRINTS THE FOLLOWING: A=0 B=1 AND THEN RETURNS NIL. IN THIS WAY ONE GETS THE EFFECT OF THE FAMOUS "PROG WITH INITIALIZED VARIABLES" FEATURE. [3] THE MANY AND VARIOUS OUTPUT FUNCTIONS (PRINT, PRIN1, FLATSIZE, ETC.) ARE NOW CONTROLLED BY TWO GLOBAL VARIABLES AND A STATUS CALL. PRINLEVEL AND PRINLENGTH SHOULD ALWAYS BE EITHER NON-NEGATIVE FIXNUMS OR NIL. PRINLEVEL IS THE MAXIMUM NUMBER OF UNBALANCED OPEN PARENTHESES WHICH PRIN1, ETC. MAY OUTPUT; IF THE LIST STRUCTURE IS TOO "DEEP" TO BE ABLE TO DO THIS, THEN SUB-LISTS BELOW THE PRINLEVEL ARE ABBREVIATED BY #. E.G. SUPPOSE ONE TRIES TO PRINT THE LIST (FOO (BAR (LAMBDA (X Y) (QUUX BAZ))) (TEST)) WITH PRINLEVEL=1. THEN IT WOULD ACTUALLY PRINT AS: (FOO # #) WITH PRINLEVEL=2, IT WOULD COME OUT AS: (FOO (BAR #) (TEST)) AND WITH PRINLEVEL=3 IT WOULD PRINT AS: (FOO (BAR (LAMBDA # #)) (TEST)) PRINLEVEL=NIL MEANS PRINLEVEL=INFINITY. PRINLENGTH IS TO THE CDR DIRECTION WHAT PRINLEVEL IS TO THE CAR DIRECTION. IF ANY LIST IS LONGER THAN SPECIFIED BY PRINLENGTH, THEN ANY EXTRA ITEMS ARE OMITTED AND ABBREVIATED AS ... EXAMPLE: IF YOU TRY TO PRINT THE LIST (FOO (BAR (BAZ) (HERE (IS) A TEST)) WHAT ARE YOU) WITH PRINLENGTH=1 (AND PRINLEVEL=NIL) IT WOULD PRINT AS: (FOO ...) WITH PRINLENGTH=2, AS: (FOO (BAR (BAZ) ...) ...) AND WITH PRINLENGTH=3 AS: (FOO (BAR (BAZ) (HERE (IS) A ...)) WHAT ...) OF COURSE, ONE CAN USE PRINLEVEL AND PRINLENGTH BOTH AT THE SAME TIME. IF THE ABOVE LISTS WERE PRINTED WITH PRINLEVEL=2 AND PRINLENGTH=2, THEY WOULD PRINT AS: (FOO (BAR #) ...) (FOO (BAR # ...) ...) WITH PRINLEVEL=3 AND PRINLENGTH=2, THEY WOULD PRINT AS: (FFOO (BAR (LAMBDA # ...)) ...) (FOO (BAR (BAZ) ...) ...) AND WITH PRINLEVEL=3 AND PRINLENGTH=3, THEY WOULD PRINT AS: (FOO (BAR (LAMBDA # #)) (TEST)) (FOO (BAR (BAZ) (HERE # A ...)) WHAT ...) THE DEFAULT CONDITION FOR ALL THIS HACKERY IS THAT IT APPLIES ONLY TO TTY OUTPUT AND NO OTHER. THUS IF ONE IS OUTPUTTING TO BOTH DSK AND TTY, THE TTY OUTPUT WILL BE ABBREVIATED AS SPECIFIED BY PRINLEVEL AND PRINLENGTH, BUT OUTPUT TO THE FILE WILL NOT BE, NOR WILL THE RESULT OF EXPLODE AND FLATSIZE BE AFFECTED. THIS CAN BE ALTERED BY (SSTATUS ABBREVIATE <N>). IF THE 1 BIT OF N (A FIXNUM) IS ON, IT MEANS THAT OUTPUT TO FILES SHOULD BE ABBREVIATED; IF THE 2 BIT IS ON, IT MEANS THAT FLATSIZE AND EXPLODE SHOULD USE ABBREVIATIONS. THUS 0 => ONLY TTY, 1 => TTY AND FILES, 2 => TTY AND FLATSIZE, AND 3 => TTY, FILES, AND FLATSIZE. AS A HACK, (SSTATUS ABBREVIATE T) MEANS EVERYTHING GETS ABBREVIATED, AND (SSTATUS ABBREVIATE NIL) MEANS ONLY TTY GETS ABBREVIATED; THIS WILL CONTINUE TO BE TRUE EVEN IF MORE BITS OF (STATUS ABBREVIATE) ARE ASSIGNED MEANINGS. NOTE THAT, LIKE (STATUS TERPRI), (STATUS _), AND (STATUS TTYREAD), (STATUS ABBREVIATE) RESIDES IN THE READTABLE; THUS ONE CAN ALTER IT (AND IN PARTICULAR LAMBDA-BIND IT) BY CHANGING READTABLES. [4] USERS CAN CONTROL SOMEWHAT THE HAPPENING OF RANDOM "REAL TIME" INTERRUPTS WITH THE FUNCTION NOINTERRUPT OF ONE ARGUMENT. (NOINTERRUPT T) PUTS LISP IN A MODE WHEREBY ALL TTY AND ALARMCLOCK INTERRUPTS WILL BE DEFERRED (EVEN ^G AND ^X INTERRUPTS!!!) AND SAVED IN A FIFO QUEUE. (NOINTERRUPT NIL) RELEASES THIS MODE AND PROCESSES ANY INTERRUPTS WHICH WERE STACKED UP DURING THIS TIME, IF ANY. NOTE THAT IF WHILE IN (NOINTERRUPT T) MODE, YOU TYPE (SAY) ^H ^] ^G ^A ^\ THEN THE ^G WILL FLUSH THE ^H AND ^] INTERRUPTS FROM THE QUEUE; BUT WHEN (NOINTERRUPT NIL) IS DONE, THE ^G QUIT WILL BE PERFORMED, FOLLOWED BY THE ^A AND ^\ INTERRUPTS. IN GENERAL, WHEN NOINTERRUPT MODE IS REALEASED, PENDING INTERRUPTS ARE PROCESSED IN THE ORDER (^G, ^X QUIT), (CLOCK INTERRUPTS), (OTHER TTY INTERRUPTS). NOTE THAT CALLS TO THE FUNCTION IOC ALWAYS PERFORM THEIR ACTIONS, EVEN IN NOINTERRUPT MODE; THUS (IOC G) WILL DO A ^G-QUIT IN SPITE OF THE STATE OF THE NOINTERRUPT MODE. [5] (STATUS DOW) RETURNS ONE OF THE EIGHT SYMBOL ATOMS SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, OR NIL (THE LATTER IF ITS DOESN'T KNOW THE DAY). USE YOUR IMAGINATIONS! A PRIZE FOR THE BEST HACK USING THIS [6] COMPLR HAS A NEW SWITCH: V (CORRESPONDS TO THE VARIABLE NFUNVARS). IF TRUE (NORMALLY NIL), IT MEANS THAT THERE ARE NO FUNCTIONAL VARIABLE USAGES IN YOUR FILE [I.E. CONSTRUCTS WHERE YOU SAY (FOO A B), AND FOO IS NOT DIRECTLY THE NAME OF THE FUNCTION, BUT RATHER FOO'S VALUE HOLDS THE NAME OF THE FUNCTION TO BE APPLIED TO A AND B.] IN SITUATIONS WHERE FOO IS A FREE SPECIAL VARIABLE, OR ANY BOUND VARIABLE OF THE FUNCTION CONTAINING THE FORM (FOO A B), COMPLR ASSUMES THAT IT IS A FUNCTIONAL VARIABLE RATHER THAN SOME YET-TO-BE-COMPILED USER FUNCTION. ONE CAN ALWAYS USE DECLARATIONS NEAR THE BEGINNING OF ONE'S FILES, SUCH AS (*EXPR FOO) OR (*LEXPR FOO) OR (*FEXPR FOO), BUT WHEN USING THE ALL-VARIABLES-AUTOMATICALLY-MADE-SPECIAL OPTION [THE S SWITCH] IT WOULD MEAN AN UNNECESSARILY LARGE NUMBER OF SUCH DECLARATIONS. THE NEW V SWITCH IF FOR THE MOST COMMON CASE, IN WHICH THE USER DOES NOT USE FUNCTIONAL VARIABLES. EVEN WHEN THIS SWITCH IS SET, YOU CAN STILL EVALUATE VARIABLES TO GET FUNCTIONS BY USING THE FUNCTION FUNCALL, DESCRIBED IN THE PREVIOUS LISP RECENT. [7] IN AN ATTEMPT AT MNEMONICITY (MUMBLE!), (STATUS XCTPG) IS NOW CALLED (STATUS UUOLINKS), AND THE FUNCTION XCTBLT IS NOW INVOKED AS (SSTATUS UUOLINKS). YES, INDEED, FOLKS, REMOB, AS, EARLIER, WE THREATENED, IS, NOW, NOT AN FSUBR, BUT, TAKING ONE ARGUMENT, A SUBR. THE SECOND ARGUMENT TO THE RECLAIM FUNCTION NOW HAS A SOMEWHAT DIFFERENT MEANING: IF NIL, IT RECLAIMS ONLY THE TOP LEVEL OF A LIST (DOES NOTHING IS FIRST ARG IS ATOMIC); IF NON-NIL, IT RECLAIMS ALL LIST, FIXNUM, AND FLONUM CELLS WITHIN THE S-EXPRESSION, INCLUDING BIGNUMS, BUT NOT ATOMIC SYMBOLS.