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.