5/15/71 -JONL- LEAVE MAIL FOR JONL REGARDING BUGS. BE SURE TO USE NEW LAP WITH NLISP! THE CASUAL USER MAY RE-ADJUST TO NLISP [LISPS WITH VERSION NUMBER > 189] BY NOTING THE FOLLOWING QUICKIES: 1) THERE IS NO LONGER AN OBLIST, BUT RATHER AN INITIAL ARRAY CALLED OBARRAY. (MAKOBLIST NIL) PRODUCES AN OBLIST, AND (MAKOBLIST 'NEW) MAKES AN ARRAY OUT OF NEW AND COPIES THE CURRENT OBLIST INTO IT. 2) THE SUBR IOG HAS BEEN CONVERTED INTO AN FSUBR WHICH WORKES SIMILAR TO THE FOLLOWING: (DEFUN IOG FEXPR (L) ((LAMBDA (^W ^Q ^R ^B ^N) (COND ((CAR L) (APPLY 'IOC L))) (EVAL (CADR L))) NIL NIL NIL NIL NIL)) 3) IN CASE YOU HADN'T NOTICED, DO, LIKE PROG, RETURNS NIL AS ITS DEFAULT VALUE. PAGE 19 OF AI MEMO 190 [AN INTERIM LISP USERS GUIDE] SHOWS THAT THE DEFAULT RETURN VALUE IS THE VALUE OF THE INDEX UPON COMPLETION OF THE DO LOOP. ALSO, (STATUS MACRO C), IF NON-NIL, IS A 3-LIST CONTAINING IN ORDER THE ASSOCIATED FUNCTION, S OR NIL FOR SPLICING OR NOT, D OR NIL FOR DELAYED ACTION OR NOT [SEE AI MEMO 190, PAGE C2]. #### THE FOLLOWING HAS BEEN SUPERSEDED BY ENTRY OF 3/22/73 4) THE ATOM * HAS AS TOP LEVEL VALUE THE VALUE OF THE LAST THING COMPUTED IN THE TOP LEVEL LOOOOP. INITIALLY, BEFORE EVER ENTERING THE TOP LEVEL IT HAS VALUE '*, THUS WHEN RESTARTING BY G ONE WILL SEE A RANDOM * PRINTED OUT. THE PRESET PORTION OF THE TOP-LEVEL ROUTINE IS DEFINABLE AS FOLLOWS: (ERRSET (PROG NIL (SETQ ^Q NIL ^R NIL ^W NIL ^N NIL ^B NIL) (MAPC 'EVAL ERRLIST) A (PRINT *) (SETQ * (EVAL "TLF")) (GO A)) T) "TLF" IS THE PORTION THAT THE USER MAY CHANGE VIA SSTATUS, AND IS ORDINARILY DEFINABLE AS: (SSTATUS TOPLEVEL '(EVAL (READ))) BY WAY OF EXAMPLE, ONE COULD DEFINE EVALQUOTE THUSLY: (SSTATUS TOPLEVEL '(APPLY (READ) (READ)) ###THE PRECEEDING HAS BEEN SUPERSEDED BY ENTRY OF 3/22/73 5) CERTAIN REAL-TIME INTERRUPTS MAY BE SERVICED BY THE LISP USER WITH EXPR CODE. MORE WILL BE SAID ABOUT THIS BELOW, BUT FOR THE MOMENT, THE FOLLOWING GOODIE IS AVAILABLE AS A PRE-SET INTERRUPT SERVICE: WHEN ^H IS TYPED ON THE JOB COOONSOLE, THE STATE OF THE WORLD IS SAVED, (BREAK ^H T) IS EVAL'D, AND UPON EXIT FROM THE BREAK THE STATE OF THE WORLD IS RESTORED. THIS IS USEFUL IN FIGURING OUT WHY A LONG COMPUTATION IS TAKING SO LOOOOONG, SINCE ONE MAY INSPECT VALUES OF PROGRAM VARIABLES, CALL FOR A BAKTRACE, ETC. 6) *RSET NOW HAS A NEW FUNCTION IN LIFE! IF NON-NIL, THEN WHEN AN ERROR OCCURS, THE FORM (BREAK *RSET T) IS EVAL'D. CURRENTLY, PROCEEDING FROM THE BREAK CAUSES THE POP BACK TO TOP LEVEL AS BEFORE, BUT IN THE NEAR FUTURE, MANY ERRORS WILL REQUEST CORRECTIONS AND PROCEED ACCORDINGLY. SIMILARLY, MANY CONDITIONS NOW DEEMED TO BE ERRORS WILL MERELY BE NOTES TO THE USER. 7) RE*ARRAY HAS BEEN FLUSHED - INSTEAD USE *REARRAY. *REARRAY IS THE SUBR VERSION OF WHAT USED TO BE RE*ARRAY. *ARRAY IN THE LSUBR VERSION OR ARRAY. BAKTRACE HAS NO ARGUMENTS, AND CAUSES A BACKTRACEING TO BE PRINTED OUT. USEFUL WHEN IN A BREAK LOOP. TO SEE ANYTHING USEFUL, HOWEVER, ONE SHOULD REMEMBER TO SET THE BAKGAG SWITCH TO NON-NIL BEFOREHAND. [THE SYSTEM SAVES EXTRA STUFF WHEN IN BAKGAG MODE] NREVERSE IS A NO-CONSING VERSION OF REVERSE - IT RPLACD'S EACH CELL IN THE LIST IN ORDER TO TURN IT AROUND. ROT IS LIKE LSH, (ROT N M) DOES M CYCLES OF A 36-BIT LEFT-MOVING ROTATION ON THE NUMBER N. ASCII CREATES A SINGLE-CHARACTER ATOM WHOSE PNAME IS THE CHAR WITH ASCII VALUE OF THE ARGUMENT. FOR EXAMPLE, (ASCII 70.) IS THE ATOM F. RECLAIM GARBAGE-COLLECTS ITS FIRST ARGUMENT [EXCEPT FOR THE PNAME-TYPE ATOMS IN IT]. IF ITS SECOND ARGUMENT IS NIL, IT RE-COLLECTS ONLY LIST CELLS [AND NOT FIXNUM OR FLONUM CELLS]. ********* SECOND ARG TO RECLAIM DIFFERENT - 10/15/73 ******** (STATUS GCTIM) RETURNS THE TIME SPENT IN GARBAGE COLLECTION IN MICROSECONDS AS A FIXED POINT NUMBER. (STATUS MACRO . . .) NOW RETURN A LIST OF ONE OR TWO THINGS - THE FIRST IS THE ASSOCIATED FUNCTION OF THE MACRO CHARACTER, AND OPTIONALLY THERE WILL BE THE ATOMIC SYMBOL SPLICING TO DENOTE A SPLICING MACRO. (PURIFY LO HI T) PURIFYS THE PAGES FROM THAT ONE CONTAINING THE ADDRESS LO UP TO [INCLUDING] THAT ONE CONTAINING HI. SOMEDAY, A NIL 3RD ARG WILL SULLY THE PAGES [IE, DE-PURIFY THEM]. 8) THE BINFORD EDITOR HAS BEEN IN LISP FOR SOME TIME, BUT WAS UNDOCUMENTED [EXCEPT BY WORD OF MOUTH.] FOR THOSE WHO HAVE ALREADY USED IT, NOTE THAT IT HAS BEEN CHANGED EVER SO SLIGHTLY IN LISP 190] EVAL'ING (EDIT) ENTERS EDIT MODE, WHEREIN COMMANDS ARE GIVEN SIMILAR TO TECO COMMANDS, ACTION IS TAKEN ON SOME EXPRESSION CURRENTLY IN THE WORKING SPACE, AND A WINDOW AROUND THE POINTER IS PRINTED OUT AFTER EVERY COMMAND EXECUTION. (EDIT T) ENTERS EDIT MODE BUT DOES NOT TYPE OUT THE WINDOW AFTER EVERY COMMAND. [THE P COMMAND WILL CAUSE PRINTING OF THE WINDOW - USEFUL WHEN AT A TELETYPE]. COMMANDS ARE: Q<SPACE> EXIT FROM THE EDITOR BACK TO LISP. Y<SPACE>ATOM<SAPCE> CAUSES THE FUNCTION PROPERTY OF ATOM TO BE BROUGHT IN FOR EDITING. YP<SPACE>ATOM<SPACE>PROP<SPACE> YANK IN THE PROP PROPERTY OF THE ATOM ATOM. YP<SPACE>ATOM<SPACE> YANKS THE WHOLE PROPERTY LIST OF ATOM. J<SPACE> CAUSES THE POINTER [WHICH IS PRINTED OUT AS ] TO JUMP TO THE TOP OF THE WORKING EXPRESSION. S<SPACE>E1 . . . EN<SPACE><SPACE> SEARCHES FOR AN OCCURENCE OF THE SEQUENCE OF S-EXPRESSIONS E1 . . . EN AND MOVES THE POINTER JUST TO THE RIGHT IF SUCCESSFUL. NOTE THAT THE LISP READER IS USED FOR READ-IN BY THE EDITOR, SO THAT THE ATOM <ALTMODE><ALTMODE> MUST BE FOLLOWED BY SOME ATOM TERMINATING CHARACTER [SUCH AS <SPACE>]. I<SPACE>E1 . . . EN<SPACE><SPACE> INSERTS AT THE CURRENT POINTER POSITION THE SEQUENCE E1 . . . EN K<SPACE> KILLS THE S-EXPRESSION JUST TO THE RIGHT OF THE POINTER, AND SAVES IT AS THE VALUE OF THE ATOM . IV<SPACE>EXP INSERTS THE VALUE OF THE S-EXPRESSION EXP. ESPECIALLY USEFUL WHEN INSERTING STUFF DELETED FROM SOME PRIOR POINT. EV<SPACE>EXP MERELY EVALUATES EXP. HENCEFORWARD, <SPACE> WILL NOT BE EXPLICITLY WRITTEN OUT, BUT WILL BE UNDERSTOOD TO BE THE COMMAND TERMINATION CHARACTER. THE NEXT GROUP OF COMMANDS ADMIT AN OPTIONAL NUMERIC ARGUMENT [BASE 10.], PRECEEDING THE COMMAND, TO BE INTERPRETED AS A REPLICATION NUMBER: F MOVE FORWARD [RIGHTWARDS] PAST ONE TOKEN. A TOKEN IS EITHER A PARENTHESIS OR AN ATOM. C SAME AS F -B SAME AS F B MOVE BACK [LEFTWARDS] OVER ONE TOKEN. -C SAME AS B -F SAME AS B R MOVE RIGHTWARDS PAST THE NEXT S-EXPRESSION. L MOVE LEFT OVER ONE S-EXPRESSION. D MOVE "DOWN" INTO THE FIRST NON-ATOMIC S-EXPRESSION TO THE RIGHT OF THE POINTER. U MOVE "UP" OUT OF THE S-EXPRESSION CONTAINING THE POINTER. K KILL ALSO ADMITS A REPLICATION NUMBER. PW ARG IS NOT REALLY A REPLICATION NUMBER, BUT RATHER THE "WINDOW WIDTH" IN NUMBER OF TOKENS. THE FOLLOWING LITTLE USED COMMANDS MAY POSSIBLY BE OF SOME INTEREST: ( INSERT A VIRTUAL OPEN PARENTHESIS. ) INSERT A VIRTUAL CLOSE PARENTHESIS. D( VIRTUALLY DELETE AN OPEN PARENS D) VIRTUALLY DELETE A CLOSE PARENS () RESTRUCTURE THE WORKING S-EXPRESSION ACCORDING TO THE VIRTUAL PARENTHESES AND DELETIONS. 9) THE PICPAC STUFF HAS BEEN DROPPED [PICARRAY, READPIC, WRITEPIC]. ANYONE INTERESTED IN ITS REVIVAL SHOULD CONTACT JONL. 10) THAT OLD BUG IN PRINT HAS BEEN CHANGED; IE, IF "/" IS THE LAST CHARACTER OUTPUTTD BEFORE AN INTERNALLYY GENERATED CARRIAGE RETURN, THEN THE NEXT CHARACTER TO BE PRINTED IS SQUEEZED IN BEFORE THE CR. THUS IT IS POSSIBLE TO HAVE LINEL+1 CHARACTERS APPEAR ON SOME LINE. 11) ANYONE HAND-CODING IN LAP WMUST TAKE NOTE THAT THE FOLLOWING SYSTEM ROUITINES WHICH USED TO BE CALLED BY A PUSHJ P, ARE NOW CALLED BY A JSP T, NUMVAL FIX1A FWCONS FPCONS FLOAT IS NOW CALLED IFLOAT, AND SIMILARLY THERE IS A LABEL IFIX. FIX1A, IFLOAT, IFIX, FWCONS, AND FPCONS ALL TAKE THEIR ARGUMENT IN ACUMULATOR TT INSTEAD OF A AS BEFORE; NUMVAL, IFLOAT, AND IFIX PRODUCE THEIR RESULT IN ACCUMULATOR TT. THERE ARE LABELS FIX1 AND FIX2 IN THE FOLLOWING SEQUENCE: FIX2: JSP T,IFIX FIX1: JSP T,FIX1A POPJ P, SIMILARLY, THERE ARE LABELS FLOAT2 AND FLOAT1. 12) MORE ON USER PROGRAMMABLE INTERRUPTS: BY DOING A (SSTATUS INTERRUPT N '(PRINT 'NOW/ IS/ THE/ TIME)) IN THE NTH ENTRY OF THE USER INTERUPT TABLE, THE FORM (PRINT . . .) IS TO BE EVAL'ED. GENERALLY, IF NO SUCH DECLARATION HAS BEEN MADE, THEN THE INTERRUPT IS IGNORED. CURRENTLY THERE ARE ONLY FOUR ENTRYS IN THE USER INTERRUPT TABLE: 1 ^H TYPED ON JOB CONSOOOLE 2 ^A TYPED 3 ALARMCLOCK TIMER EXPIRED 4 AN ERROR OCCURED IN AN ERRSET COMPUTATION, AND ERRSET IS ABOUT TO RETURN NIL BECAUSE OF IT. (ALARMCLOCK N) SETS THE ALARMCLOCK TIMER TO GO OFF [PROVIDE AN INTERRUPT] IN N MICROSECONDS [+- 5%]; (ALARMCLOCK NIL) TURNS OFF THE FOOL THING IN CASE IT HAD BEEN PREVIOUSLY SET.