06/09/72  JONL

1)  THERE ARE SOME NEW FUNCTIONS DESCRIBED IN ITEMS 3-7 BELOW, AND A 
FEW MINOR INCOMPATIBILITIES DESCRIBED IN 8-14.  ITEM 2 IS REPRODUCED 
FROM THE LAST NOTE TO EMPHASIZE THE CONTINUING DIFFICULTY WITH THE 
COMPILATION OF ERRSET'S:
 BECAUSE OF THE NATURE OF ITEM 2 BELOW, SOME FILES COMPILED PRIOR
TO TODAY MAY NOT WORK IN THE CURRENT LISP [LISP 229AS].  READ THIS
NOTE CAREFULLY.

2) THERE IS A NEW PAIR OF BREAK-AWAY FUNCTIONS: CATCH, A FSUBR WHICH 
MERELY EVALS THE FIRST ITEM IN ITS ARGLIST, AND THROW, A SUBR OF ONE 
ARGUMENT WHICH BREAKS AWAY BACK TO THE MOST RECENT CATCH, CAUSING 
CATCH TO RETURN AS ITS VALUE THE ARGUMENT TO THROW.  IF NO THROWS TAKE
PLACE, THE CATCH MERELY RETURNS THE EVALUATION WHICH IT COMMENCED.
THIS MECHANISM IS INDEPENDENT OF ERRSET, AND SHOULD ALLEVIATE PROBLEMS
FOR THOSE WHO HAVE BEEN USING ERRSET AND ERR TO DO THE JOB THAT CATCH
AND THROW NOW DO.  HOWEVER, MORE STUFF MUST BE SAVED UP WHEN A CATCH 
OR ERRSET IS EVAL'D AND THUS CODE COMPILED BY COMPILERS PRIOR TO 
NUMBER 246 WILL NOT HAVE COMPILED ERRSET EVALUATIONS CORRECTLY.


3) THE FAKE TV [PSEUDO-VIDISSECTOR] WILL USE AS MANY BLOCKS OF CORE 
TO HOLD THE SIMULATED DATA AS THE USER REQUESTS; DEFAULT IS 4. 
THE REQUEST IS MADE AS (SSTATUS FTVSIZE N) FOR SUITABLE N, AND 
(STATUS FTVSIZE) WILL READ OUT THIS PARAMETER.  DEPENDING ON ONE'S 
SCAN PATTERN, HE MAY CAUSE FREQUENT, TIME-CONSUMING DISK REFERENCES;
THE HOPE IS TO MINIMIZE THIS BY ALLOWING MANY BLOCKS OF DATA TO
BE IN CORE AT ONCE.

4) ALL USER INTERRUPT SERVICE FUNCTIONS HAVE BEEN ASSIGNED TO THE 
VALUE OF A SUTIABLE-SOUNDING ATOM.  ONE CAN STILL ACCESS THEM USING 
THE STATUS CALLS, BUT THE USE OF LISP VARIABLES ALLOWS MNEMONIC 
REFERENCE AS WELL AS LAMBDA-BINDING POSSIBILITIES.

      NAME	INTERRUPT #	DESCRIPTION
    ^H			1	CONTROL-H TYPED ON CONSOLE
    ALARMCLOCK		3	ALARMCLOCK EXPIRED
    ERRSET		4	ERROR BEING CAUGHT BY ERRSET
    UNDF-FNCTN		5	UNDEFINED FUNCTION OBJECT ENCOUNTERED
    UNBND-VRBL		6	UNBOUND VARIABLE
    WRNG-TYPE-ARG	7	WRONG OR UNSUITABLE ARG FOR FUNCTION
    UNSEEN-GO-TAG	8.	GO TO A TAG NOT WITHIN PROG
    WRNG-NO-ARGS	9.	WRONG NUMBER OF ARGS TO FUNCTION
    GC-LOSSAGE		10.	NOT ENOUGHT SPACE RECLAIMED
    FAIL-ACT		11.	SOME REQUESTED ACTION FAILED
    *RSET-TRAP		19.	AN ERROR CAUSING RETURN TO TOPLEVEL
    GC-DAEMON		20.	A MONITOR ON THE GARBAGE COLLECTOR

INTERUPTS 5 THROUGH 11. COME PRESET IN THE LISP TO A SYSTEM SUBR 
WHICH MERELY BINDS THE ATOM ARGS AS NOTED PREVIOUSLY, AND ENTERS A
BREAK LOOP [WITH IDENTIFICATION THE SAME AS THE NAME OF THE INTERRUPT]
ONE CAN THUS INSPECT THE CAUSE OF HIS LOSSAGE, TAKE CORRECTIVE ACTION,
AND RETURN A LIST CONTAINING SOME NEW FORM [OR PERHAPS THE SAME OLD 
ONE, IF IT HAS BEEN CORRECTED] TO TRY INSTEAD.
    FAIL-ACT IS A NEW CORRECTABLE ERROR USER INTERRUPT, WHICH IS 
INVOKED  ONLY A FEW PLACES CURRENTLY.  USUALLY THE SERVICE FUNCTION 
WILL BE HANDED SOME DESCRIPTIVE LIST AS ARGUMENT.  TO PRECEED FROM A 
FAIL-ACT ERROR, ONE RETURNS A LIST OF SOME FORM TO BE EVAL'ED IN PLACE
OF THE ONE THAT FAILED IN ACTION.
    THE GC-DAEMON FUNCTION, AS NOTED PREVIOUSLY, IS HANDED A LIST 
SHOWING THE BEFORE-AND-AFTER AMOUNTS THAT ARE FREE IN THE VARIOUS 
STORAGE SPACES.  IN THIS WAY, ONE CAN ASCERTAIN WHICH SPACES NEED MORE
ALLOCATION.  E.G., TRY (SETQ GC-DAEMON '(LAMBDA (GCL) (PRINT GCL)))
    ALSO, THE GCMIN FEATURE, THAT ALLOWS THE USER TO SPECIFY THE LOWER
LIMIT OF FREE STORAGE FOR EACH SPACE, IS NOW THE VALUE OF THE ATOM 
GCMIN.  THUS ONE WOULD SAY  (SETQ GCMIN '(1000 200 10))  TO SAY TO THE
GARBAGE COLLECTOR THAT IT SHOULD CONSIDER IT AN ERROR IF THE AMOUNT OF
SPACE FREE FOR STORING LIST STRUCTURE FALLS BELOW 1000, OR FOR FIXNUMS
FALLS BELOW 200, OR FLONUMS BELOW 10.

5) THE READER'S SYNTAX TABLE IS NOW AN ARRAY, WHOSE SPECIAL ARRAY CELL
IS POINTED TO BY THE VALUE OF THE ATOM READTABLE.  THUS ONE CAN 
QUICKLY SWITCH BACK AND FORTH BETWEEN SEVERAL SYNTAX OPTIONS BY 
MEANS OF LAMBDA BINDNG AND SETQ.  AS WITH THE OBARRAY FEATURE, THERE 
IS A NEW FUNCTION TO CREATE A COPY OF THE CURRENT READ SYNTAX TABLE 
AS AN ORDINARY LISP ARRAY.  E.G.,
	(MAKREADTABLE 'LISP1/.5)	;(MAKREADTABLE NIL) WOULD 
					;GENSYM UP AN ARRAY
	((LAMBDA (READTABLE)		;WE WANT THE LISP1/.5 
		 (SSTATUS MACRO /; NIL) ;TABLE TO HAVE NONE OF THE
		 (SSTATUS MACRO /' NIL));MACLISP SYNTAX OPTIONS
	   (GET 'LISP1/.5 'ARRAY))

6) ERRPRINT, A NEW SUBR OF ONE ARGUMENT, WAS IMPLEMENTED TO AID
IN DEBUGGING.  WHEN AN ERROR OCCURS, THE LISP SYSTEM PUSHES SOME ERROR
INFORMATION ON THE PDL AND RUNS THE CORRESPONDING INTERRUPT FUNCTION
IF THERE IS ONE, AND MAY ALSO RUN THE *RSET-TRAP FUNCTION JUST BEFORE
RESTORING BACK TO TOP LEVEL.  THESE SERVICE FUNCTIONS ARE OFTEN BREAK
LOOPS, AND ONE MISSES THE ERROR MESSAGES  THAT ARE ULTIMATELY
PRINTED OUT.  THE ARGUMENT TO ERRPRINT IS EITHER NIL OR A PDL POINTER,
JUST LIKE THE ARGUMENT TO FRAME [SEE PREVIOUS LISP NOTE]. 
(ERRPRINT NIL) PRINTS OUT THE MOST RECENTLY STACKED-UP ERROR MESSAGE,
AND (ERRPRINT FOO) BEGINS SEARCHING THE PUSH-DOWN STACK FOR AN ERROR
MESSAGE PRIOR TO THE POINT NOTED BY THE PDL POINTER FOO.
    AS SOME USERS HAVE ALREADY NOTICED, IF AN ERROR IS CAUGHT BY AN 
ERRSET, AND THE USER INTERUPT NUMBER 4 IS NOT ENABLED, THERE IS NO 
ACTION BY THE CORRESPONDING ERROR SERVICE FUNCTION, THE IDEA BEING 
THE CATCH BY THE ERRSET WAS SUFFICIENT ACTION.  SINCE THE 
SYSTEM-SUPPLIED SERVICE FUNCTIONS ARE PRIMARILY A CALL TO THE FSUBR 
BREAK, AND SINCE THE EVALUATIONS BEGUN AT THE TELETYPE ARE CUSHIONED 
BY A SURROUNDING ERRSET, THEN THE ERROR SYSTEM DOES NOT AT FIRST 
GLANCE APPEAR TO BE RECURSIVE.  IT IS, HOWEVER, AS THE USER MAY VERIFY
BY WRITING HIS OWN INTERRUPT SERVICE FUNCTIONS, OR BY SETQ'ING ERRSET
TO AN APPROPRIATE FUNCTION.


7A)  A NEW FUNCTION BLTARRAY, A SUBR TO TWO ARGUMENTS, ASSUMES THAT 
BOTH ARE ARRAYS, AND ZAPS AS MUCH AS POSSIBLE OF THE FIRST INTO THE 
SECOND USING THE BLT INSTRUCTION OF THE PDP10.  BLTARRAY DOES NOT 
*REARRAY EITHER ARRAY; THAT IS TO SAY THAT NEITHER ARRAY IS MOVED 
AROUND, NOR IS EITHER ARRAY EXTENDED IN SIZE.
7B)  A NEW FUNCTION ARRAYDIMS, A SUBR OF ONE ARGUMENT, ASSUMES THAT 
ITS ARGUMENT IS AN ARRAY, AND RETURNS A LIST OF THE TYPE AND SIZES OF 
EACH DIMENSION OF THE ARRAY.  THUS IF AN ARRAY BAZ WERE CREATED BY 
(ARRAY BAZ T 2 30),  (ARRAYDIMS 'BAZ) WOULD RETURN (T 2 30).

8)  ** DELETED **

9) THERE ARE TWO NEW FUNCTIONS LOADARRAYS AND DUMPARRAYS;  THE PLANNED
   USAGE IS FOR QUICKLY SWAPPING DATA ARRAYS IN AND OUT OF AUXILLIARY 
   STORAGE. [A DATA ARRAY, AS OPPOSED TO AN S-EXPRESSION ARRAY, IS 
   ONE THAT WAS MADE WITH THE GC BIT OFF - AS IN (ARRAY FOO NIL 40). 
   DISGORGE RETURNS SUCH AN ARRAY, AND MUCH USAGE OF LOADARRAYS AND 
   DUMPARRAYS CENTERS AREOUND THE DISPLAY SLAVE.
	DUMPARRAYS TAKES TWO ARGUMENTS, THE FIRST OF WHICH IS A LIST 
   OF THE NAMES OF THE ARRAYS TO BE DUMPED ONTO AN OUTPUT FILE, AND 
   THE SECOND OF WHICH IS A FILE SPECIFICATION [WITH DEFAULTING LIKE 
   UREAD].  LOADARRAYS HAS ONE ARGUMENT, A FILE SPECIFICATION FOR 
   SOME FILE CREATED BY DUMPARRAYS, WHICH IT PROCEEDS TO SNARF DOWN,
   LOADING AS MANY ARRAYS [WITH GENSYM'ED NAMES] AS ARE INDICATED IN
   THE INPUT FILE, AND RETURNING A LIST OF 3-LISTS FOR EACH 
   NEWLY LOADED-IN ARRAY:
	A) GENSYM NAME OF NEWLY-CREATED ARRAY
	B) ORIGINAL PNAME OF ARRAY WHEN DUMPARRAYED
	C) SIZE OF ARRAY [IN TERMS OF NUMBER OF ENTRIES]
   EXAMPLE USAGE:
     (ARRAY FOO NIL 40)			;FOO CREATED HERE - 
     (NSTORE (A 37) 105105)		;ASSUME BAR ALREADY EXISTS
     (DUMPARRAY '(FOO BAR) '(FOOD DATA DSK VIS))
     (SETQ COPIES (LOADARRAYS '()))	;NOTE DEFAULTING AS IN UREAD
					;CAUSES SAME FILE TO BE OPENED
     (MAPC '(LAMBDA (X) (DISGOBBLE (CAR X))) COPIES)
					;LOOK AT COPIES FROM DSK


10.) THE ARGUMENT GIVEN TO THE INTERRUPT FUNCTIONS FOR UNDF-FNCTN, 
UNBND-VRBL, WRNG-TYPE-ARG, AND UNSEEN-GO-TAG  IS NOW A LIST OF THE 
LOSING ITEM, RATHER THAN SIMPLY THE LOSING ITEM. THUS IF FOO WERE THE 
UNBOUND VARIABLE, ARGS WOULD BE BOUND TO (FOO)

11.) ARRAY ACCESS ERRORS NOW CAUSE A CORRECTABLE ERROR OF TYPE 
"FAIL-ACT", [USER INTERUPT NUMBER 7],  WHICH MAY BE PROCEEDED WITH ANY
FORM TO BE EVALUATED IN PLACE OF THE FAULTY REFERENCE.  THE INTERRUPT
FUNCTION, INTITIALLY SET TO A BREAK LOOP WITH ARGUMENT "ARGS", IS 
HANDED A 2-LIST WHOSE FIRST ELEMENT IS THE ATOM "ARRAYINDEX" AND THE 
SECOND IS A LIST OF THE ARRAY NAME AND THE VALUES OF THE INDICES 
THAT CAUSED THE ERROR,  E.G. (ARRAYINDEX (BAR 3 5)). THE
USER COULD RESTART THE EVALUATION BY RETURNING SAY ((BAR 2 4)), [OR
FOR EXAMPLE, ((RANDOMNESS PHOOEY)) IF SOME OTHER VALUE IS DESIRED].
IF THE ARRAY IS NOT ON THE OBLIST, [SUCH WOULD BE THE CASE WITH A 
NON-INTERN'ED GENSYM'ED ARRAY] THE ARGUMENT TO THE  INTERRUPT WILL BE 
(ARRAYINDEX (? 3 5)), THE ? INDICATING THAT  A PNAME FOR THE ARRAY 
COULD NOT BE READILY OBTAINED.
 
12.)  ** DELETED **

13.)  THE COMPLR WILL NOW OUTPUT ARGS INFORMATION [IN THE FORM 
OF PSEUDO-OPS TO LAP] ABOUT EXPRS WHICH IT COMPILES, AND LAP WILL TRY
TO USE THIS INFORMATION TO PLACE ARGS PROPERTIES OF THE FUNCTIONS 
ASSEMBLED.  THERE IS A COMPILER SWITCH TO CONTROL THE OUTPUTTING OF 
THIS INFORMATION - NORMALLY THE SWITCH IS ON - BUT A DECLARATION OF 
(NOARGS T) WILL TURN IT OFF SO THAT THE COMPLR WILL NOT OUTPUT THIS
STUFF;  OF COURSE (NOARGS NIL) TURNS IT BACK ON AGAIN.



14.) THE DELAYED-READ-MACRO FEATURE HAS BEEN FLUSHED. ALSO, THE CLI 
INTERRUPT HAS BEEN FLUSHED.