4/5/72 - JONL-

THERE ARE THREE NEW FEATURES WITH US NOW:
  1) TYIPEEK, A SUBR OF NO ARGUMENTS, WILL INSPECT THE NEXT CHARACTER
     IN THE INPUT STREAM AND RETURN ITS ASCII VALUE LIKE TYI, EXCEPT
     THAT IT WILL NOT GOBBLE UP THE CHARACTER.  THE NEXT READCH OR 
     READ WILL FIND IT STILL IN THE READ STREAM.  FOR THE TTY, THIS 
     MEANS THAT SOME BUFFERING IS DONE BY THE SYSTEM. FOR OTHER INPUT
     DEVICES, SUCH AS HAVE END-OF-FILE CONDITIONS, WHEN THE EOF IS 
     REACHED, TYIPEEK RETURNS 3 [CORRESPONDING TO CONTROL-C]
     INSTEAD OF SWITCHING TO THE NEXT DEFAULT DEVICE.
  2) USER INTERRUPT NUMBER 20. IS A GARBAGE-COLLECTOR DAEMON, 
     OF SORTS.  JUST AFTER EACH COLLECTION, THIS INTERRUPT FUNCTION
     IS CALLED WITH A LIST OF THREE PAIRS OF NUMBERS
       ((LIST0 . LIST1) (FX0 . FX1) (FL0 . FL1))
     LIST0 IS THE NUMBER OF CELLS FREE IN LIST STORAGE SPACE WHEN 
     THE GC WAS INITIATED, AND LIST1 IS THE NUMBER FREE AFTER THE GC 
     FINISHED; SIMILARLY FOR FIXNUM SPACE AND FLONUM SPACE.  IN
     THE ROSY FUTURE, A USER WILL BE ABLE TO ADD BLOCKS OF STORAGE 
     TO ANY SUCH SPACE [INCLUDING PDLS], AND HE WILL PROBABLY HAVE 
     A HEURISTIC GC-DAEMON FUNCTION TO DECIDE WHEN TO DO SO.
 3) IF YOU DEBUG FROM DDT, YOU WILL BE INTERESTED TO KNOW THAT HHX
     SIMULATES A CONTROL-H INTERRUPT IN LISP.  P.X STILL PRINTS OUT
     THE RIGHT-HALF OF THE CURRENTLY OPEN CELL AS LIST STRUCTURE; 
     PL.X WILL PRINT OUT THE LEFT-HALF.


THERE ARE A FEW CORRECTIONS TO THE DESCRIPTION OF THE DISPLAY SLAVE, 
AND IT MIGHT BE WISE TO TAKE ANOTHER COPY IF YOU ARE INTERESTED.  
IT IS AT THE BOTTOM OF THE PAGE IN THIS FILE HEADED 3/17/72

THE SERVICE FUNCTION FOR INTERRUPT NUMBER 10. [CALLED WHEN SOME
STORAGE AREA IS ABOUT TO RUN OUT OF SPACE] WILL BE GIVEN AS ARGUMENT
ONE OF THE THREE ATOMS LIST, FIXNUM, OR FLONUM DEPENDING ON WHICH 
SPACE IS ABOUT TO LOSE.

THE NEW ARITHMETIC FUNCTIONS ANNOUNCED LAST SUMMER FOR NLISP HAVE 
BEEN IN LISP FOR SOME TIME ALSO.  TO RECAPITULATE, THEY ARE:
	+  -  *  /  1+  1-  	  ;WHICH REQUIRE FIXNUM ARGUMENTS
	+$  -$  *$  /$  1+$  1-$  ;WHICH REQUIRE FLONUMS
	 <  >  =			  ;REQUIRES ARGS OF SAME TYPE
IN GENERAL THESE ARE LSUBRS THAT WORK EXACTLY LIKE PLUS, DIFFERENCE, 
TIMES, QUOTIENT, ADD1, SUB1, LESSP, GREATERP, AND EQUAL [<, >, AND =
ARE SUBRS OF TWO ARGUMENTS]; HOWEVER, THE ARGUMENTS MUST OBEY THE 
NOTED RESTRICTIONS.   THIS IS SO THAT THE COMPLR MAY SOMEDAY OPEN 
CODE THESE ARITHMETIC FUNCTIONS, BUT SOME OF THE USER COMMUNITY HAVE 
FOUND THEIR STYLE AND SPELLING PREFERABLE TO THE EARLIER.  FOR THE 
SUPER-HACKER, THERE IS A SERIES OF FUNCTIONS TO DO ARITHMETIC ON THE
ACTUAL DATUM PASSED AS ARGUMENT RATHER THAN THE LISP INTERPRETATION
OF THAT DATUM [E.G., THE NUMBER 69.0E23 IS REPRESENTED AS AN 18.-BIT
ADDRESS IN THE FLONUM STORAGE AREA, CONTENTS OF WHICH ADDRESS IS THE
PDP10 36.-BIT FLOATING-POINT REPRESENTATION OF 69.0E23].  THEY ARE:
	+#  -#  *#  /#  1+#  1-#  <#  >#
OF COURSE, "EQ" IS THE EQUAL TEST FOR POINTERS.  NOTE ALSO THAT 
/, /$, AND /# MUST BE TYPED IN AS //, //$, AND //#.


THE VARIABLE OBLIST FEATURE IS WORKING WELL, AND IS PARTICULARLY 
USEFUL WHEN ONE WANTS TO READ IN A RATHER SELF-CONTAINED FILE OF 
FUNCTIONS BUT DOESN'T WANT FUNCTION DEFINITIONS ON THAT FILE TO 
CONFLICT WITH ALREADY EXISTING USER-DEFINED FUNCTIONS.  FOR EXAMPLE,

    (COMMENT RUNNER BLOCK)	;SINCE THE TOP LEVEL READER WILL READ
				;THIS, THESE ATOMS WILL BE INTERNED
				;ON THE CURRENT [I.E. THE STANDARD]
				;OBARRAY.
    (MAKOBLIST 'RUNOB)	;HERE WE MAKE UP AN OBARRAY FOR USE  WHILE 
			;LOADING IN THE FILE.  AT THIS POINT, IT IS 
			;JUST A COPY OF THE STANDARD, INCLUDING 
			;"RUNNER" AND "BLOCK", WHICH WILL BE THE  
			;SAME IN BOTH OBARRAYS.

************* REMOB IS NOW A SUBR - 10/15/73 *******************

    ((LAMBDA (OBARRAY)	 	;SO HERE WE BIND OBARRAY TO THE ARRAY
				;PROPERTY OF RUNOB
	(REMOB NVFIX NVSET)	;REMOBS TWO ATOMS [COMMON TO BOTH 
				;OBARRAYS] FROM THE RUNOB OBARRAY,
				;BUT NOT FROM THE STANDARD ONE.
	(LOADINFILE RUNNER > DSK FOO)	
				;SUPPOSE WE HAVE A FILE LOADING FUNCTION
	'LOADED)
     (GET 'RUNOB 'ARRAY))

	;SO NEW WE ARE BACK IN THE GOOD OLD STANDARD OBARRAY, BUT 
	;CAN SWITCH TO THE OTHER ONE TO LOOK AROUND IF NECESSARY.
	;FURTHERMORE, WE CAN CALL THE FUNCTION RUNNER FROM EITHER,
	;BUT THE LOCAL FUNCTION "DRAGGER", DEFINED ON THE FILE
	;RUNNER >, CAN BE ACCESSED BY THE READER ONLY WHEN THE 
	;RUNOB OBARRAY IS IN USE.


IN THE NEXT NOTE ON LISP, I HOPE TO HAVE A REVIEW, IN SOME COHERENT 
FORM, OF ALL THE STATUS OPTIONS, ALL THE USER INTERRUPTS AVAILABLE, 
ALL THE READER'S SYNTAX CATEGORIES, AND SOME USEFUL EXAMPLES WHICH 
PLAY UPON THESE GOODIES.  QUITE POSSIBLY, WE NEED A LIBRARY OF
USEFUL READ-CHARACTER MACROS AND CORRECTABLE-ERROR INTERRUPT SERVICE 
FUNCTIONS.