TUESDAY  SEPT 14,1976   FM+6D.1H.33M.7S.   LISP 1211  -GLS,JONL-

OLDIO AND NEWIO LISPS NOW BOTH ANNOUNCE THEMSELVES AS SUCH.
YOU CAN GET AN OLDIO BY TYPING OLDIO^K OR O^K; AS BEFORE,
NEWIO^K OR Q^K GETS A NEWIO.  IN THE NEAR FUTURE, LISP^K
AND L^K WILL START PROVIDING A NEWIO INSTEAD OF AN OLDIO.
OLDIO WILL STILL BE AVAILABLE AS OLDIO^K OR O^K FOR SEVERAL
MONTHS AFTER THAT.

NUMBERED ITEMS BELOW APPLY TO ALL LISPS; LETTERED ONES TO NEWIO ONLY.

[1] WHAT ARE PEOPLE USING HUNKS FOR?
[2] NEW ARITHMETIC FUNCTION:  IFIX
[3] "AUTOLOAD" HAS LOWER PRIORITY THAN OTHER FUNCTIONAL PROPERTIES
[4] ALLOC FUNCTION AND GC PRINTOUT SUPPRESS ZERO-SIZE SPACES
[5] EVALHOOK NOW HOOKS BOTH A MACRO CALL AND ITS EXPANSION
[6] NEW .FASL MACRO PRINTS SUPPRESSABLE LOAD MESSAGE
[7] CHANGES TO EDIT FUNCTION AND NEW COMMANDS

[A] NEWIO NOW PROVIDES A ##MORE## PROCESSOR
[B] NEW NVID, SLAVE, MPX PACKAGES FOR NEWIO
[C] PROBLEM WITH INIT FILES IN NEWIO: UREAD DOESN'T CLOSE THEM
[D] UNTRAPPED MEMORY AND MACHINE ERRORS NOW GO TO DDT
[E] CHANGES TO HANDLING OF TTY BLOCK OUTPUT
[F] BUG OF FASLOAD FROM WITHIN FASLOAD-FILE-NOT-FOUND BREAK FIXED
[G] STUPID SPACE-SWALLOWING THING ONLY HAPPENS IF READ IS NIL
[H] NEW CURSORPOS FEATURES: A, H, I, V
[I] THE ACTION AT END-OF-FILE HAS BEEN CHANGED
----------------------------------------------------------------
[1] IF YOU USE HUNKS, SEND SOME MAIL TO GLS SAYING FOR WHAT.
    (JUST NOSY, I GUESS.)  NCOMPLR NOW OPEN-CODES CXR.

[2] (IFIX X) IS JUST LIKE (FIX X), EXCEPT THAT X IS CONSTRAINED TO BE
    WITHIN THE RANGE OF FIXNUMS.  WHILE "FIX" MAY RETURN A BIGNUM,
    "IFIX" WILL NOT, AND THIS ALLOWS EFFICIENT OPEN-CODING OF "IFIX".
    CAVEAT EMPTOR!  THIS IS NOT THE SAME FUNCTION AS FORTRAN'S "IFIX":
    THIS ONE IS THE SAME AS THE "ENTIER" FUNCTION, AS IN ALGOL.

[3] WHENEVER LISP LOOKS UP A FUNCTION ON A PROPERTY LIST, IT
    WILL NOW PREFER A SUBR, EXPR, ETC. TO AN AUTOLOAD PROPERTY
    EVEN IF THE SUBR (OR WHATEVER) OCCURS AFTER THE AUTOLOAD
    PROPERTY ON THE PROPERTY LIST.  THAT IS, IT EFFECTIVELY
    LOOKS FOR OTHER FUNCTIONAL PROPERTIES FIRST, AND ONLY ON
    FAILURE DOES LISP CHECK FOR AN AUTOLOAD PROPERTY.
    THIS FIXES THE SCREW WHERE ONE PACKAGE DEFINES THE SUBR
    FOO AND THEN ANOTHER DOES (DEFPROP FOO ... AUTOLOAD).

[4] IF A SPACE HAS ZERO SIZE (OFTEN TRUE OF HUNK SPACES!),
    THEN THE ALLOC FUNCTION WILL NOT INCLUDE THE SPACE IN
    THE RETURNED DATA, AND GC STATISTICS PRINTOUT WILL NOT
    MENTION THE SPACE.  (STATUS SPCNAMES) WILL, HOWEVER,
    MENTION ALL SPACES, EVEN THOSE OF ZERO SIZE.

[5] EVALHOOK NOW HOOKS BOTH A MACRO CALL AND ITS EXPANSION.
    FORMERLY THE HOOK FUNCTION SAW THE MACRO CALL, AND THEN
    THE FIRST FORM WITHIN THE EXPANSION, BUT NOT THE EXPANSION
    ITSELF.

[6] MANY AUXILLIARY FILES, SUCH AS "GRIND", "LAP", "ALLFILES", ETC.
    WHICH ARE AUTOLOADABLE, OR FASLOADED BY THE USER, PRINT A MESSAGE
    ANNOUNCING THEIR VERSION NUMBER AND THE FACT THAT THEY ARE BEING
    LOADED.  FOR EXAMPLE,  WHEN ALLFILES IS LOADED, IT PRINTS
		;LOADING ALLFILES 43
    BY CONVENTION, ALL SUCH LOADING MESSAGES ARE SUPPRESSED IF THE 
    USER HAS DONE (SSTATUS FEATURE NOLDMSG).  ALL SUCH FILES WRITTEN
    IN LISP HAVE EXPR CODE WHICH CHECKS THE FEATURE LIST FOR 
    "NOLDMSG", AND IF ABSENT, PRINTS THE LOADING MESSAGE.
    TO FACILITATE SUCH A MESSAGE PRINTING FEATURE FOR PACKAGES WRITTEN
    IN MIDAS, THE STANDARD FILE "SYS:.FASL DEFS", TO BE INSERTED BY 
    .FASL FILES, NOW HAS A MACRO "VERPRT".  ITS ARGUMENT SHOULD BE 
    THE NAME OF THE PACKAGE; IT GENERATES A .SXEVAL FORM WHICH
    WILL PRINT A MESSAGE WHEN THE FILE IS LOADED. FOR EXAMPLE,
    THE ALLFILES PACKAGE EFFECTIVELY BEGINS:
		TITLE ALLFILES
		.FASL
		.INSRT SYS:.FASL DEFS
		VERPRT ALLFILES

    THE GENERATED FORM WORKS IN EITHER OLDIO OR NEWIO;
    IN NEWIO, THE MESSAGE IS PRINTED ON THE FILES SPECIFIED
    BY THE VARIABLE "MSGFILES" (WHICH IS ALSO USED BY ALL LISP
    SYSTEM MESSAGES).

[7] CHANGES TO THE "BINFORD EDITOR" (EDIT FUNCTION):
	  [7.1] THE COMMANDS "C" AND "-C" HAVE DISAPPEARED.
		THEY WERE EQUIVALENT TO THE STILL-EXISTING
		"F" AND "-F" COMMANDS.
	  [7.2]	"SS" = "SAVE SPOT", "RS" = "RESTORE SPOT"
		BOTH TAKE AN ATOMIC SYMBOL AS AN ARGUMENT.
		SS SAVES THE CURRENT "SPOT" (WHERE THE $$ APPEARS)
		AS THE VALUE OF THE SPECIFIED VARIABLE, AND RS
		RETURNS TO THAT SPOT.  THUS:
			SS FOO
			... LOTSA EDITING ...
			RS FOO
			<NOW CURSOR IS WHERE IT WAS BEFORE THE SS>
	  [7.3]	AN ARGUMENT TO EDIT NO LONGER CONTROLS THE AUTO-PRINT
		FEATURE (SEE [7.4] BELOW);  INSTEAD, IT SHOULD BE AN
		ATOMIC SYMBOL, THE NAME OF A FUNCTION.  AS THE EDITOR
		IS ENTERED, THAT FUNCTION IS "YANKED" SO THAT EDITING 
		MAY BEGIN ON ITS CODE WITHOUT EXPLICITLY USING THE 
		"Y" COMMAND.  THE VALUE OF THE VARIABLE "EDIT" 
		CONTROLS WHICH PROPERTIES WILL BE HUNTED FOR BY THE 
		"Y" OPERATION [INITIAL VALUE IS (EXPR FEXPR MACRO)].
	  [7.4] "SP" = "START/STOP PRINTING" TOGGLES THE STATE OF
		THE AUTOMATIC PRINTOUT AFTER EACH COMMAND.
	  [7.5]	"-KI" IS LIKE "L KI"; THAT IS, IT REPLACES THE
		PRECEDING S-EXPRESSION WITH ITS ARGUMENT.
	  [7.6]	AN "S" COMMAND IMMEDIATELY FOLLOWED BY "$$"
		(I.E. A NULL SEARCH STRING" WILL REPEAT THE PREVIOUS
		SEARCH, AS IN TECO.
	  [7.7]	YANKING IN A VALUE PROPERTY NOW WINS.  THUS:
			YP FOO VALUE $$
		ALLOWS YOU TO EDIT THE VALUE PROPERTY OF FOO.
----------------------------------------------------------------
[A] NEWIO NOW PROVIDES A ##MORE## PROCESSOR, IF YOU ARE IN
    ":TCTYP MORE" MODE WHEN LISP STARTS UP.  WHEN THE END OF
    THE SCREEN IS REACHED, "##MORE##" IS PRINTED, AND LISP
    WAITS FOR A CHARACTER.  SPACE OR RUBOUT IS SWALLOWED,
    AND ANYTHING ELSE IS LEFT TO BE SEEN BY LATER ##MORE##'S
    (AND EVENTUALLY BY READ).  THE STATE OF THE ##MORE## INTERRUPT 
    MAY STILL BE TOGGLED BY TYPING <CONTROL-UNDERSCORE>M  AT LISP, 
    AS WITH ANY OTHER ITS JOB.

[B] THE VARIOUS MOBYIO FEATURES IMPLEMETED ONLY ON THE AI MACHINE 
    (SUCH AS REAL AND FAKE TV'S, 340 STUFF, PLOTLIST AND MULTIPLEXOR
    ROUTINES) HAVE BEEN CODED AS AUTOLOAD PACKAGES FOR NEWIO.  THEY
    ARE VIRTUALLY UNTESTED, AND WE WOULD APPRECIATE IT IF TV AND 340
    HACKERS WOULD GIVE THEM A TRY AND HELP FIND THE BUGS.

[C] .LISP. (INIT) FILES ARE NOT HANDLED VIA THE UREAD MECHANISM
    IN NEWIO.  A STANDARD TRICK IN OLDIO, NOT USABLE IN NEWIO, IS TO 
    CALL UREAD IN THE LAST FORM IN AN INIT FILE, AND DEPEND ON IT TO
    CLOSE THE INIT FILE BEFORE OPENING THE NEW ONE.  SINCE THIS 
    DOESN'T WORK IN NEWIO, IT MAY HAPPEN THAT AN .INIT. FILE IS NEVER
    CLOSED.  THERE ARE TWO SOLUTIONS:
	(1) LET THE .INIT. FILE EXPLICITLY CLOSE ITSELF, AND POP THE 
	    INPUT STACK, DURING THE EVALUATION OF THE LAST FORM. E.G.
		(COMMENT CORE 120 . . .)	;RELIC FOR ALLOC
		(DO SOME STUFF)
			. . .			;MORE STUFF
		(PROGN (CLOSE INFILE) (INPUSH -1))
	(2) ARRANGE NOT TO RESET ^Q TO NIL IN THE INIT FILE, SO THAT
	    THE TOP-LEVEL READ-EVAL-PRINT LOOP WILL ENCOUNTER
	    END-OF-FILE AND CLOSE IT FOR YOU.

[D] THE OLD MESSAGE ABOUT
	;REFERENCE TO NON-EXISTENT MEMORY FROM LOCATION 314159
	;PROGRAM TRAPPED WHILE IN COMPLETELY-CRETINOUS-ROUTINE
    HAS BEEN FLUSHED IN NEWIO.  NOW, WHEN A MEMORY PROTECT VIOLATION,
    WRITE INTO READ-ONLY MEMORY, ILLEGAL OPERATION, OR PARITY ERROR
    OCCURS, NEWIO CHECKS THE VALUE OF THE ATOM "MACHINE-ERROR",
    AS PREVIOUSLY DOCUMENTED.  IF NON-NIL, IT IS THE USER HANDLER
    FOR THE ERROR.  IF NIL, LISP REFLECTS THE INTERRUPT BACK OUT,
    AND DDT HANDLES IT, PRINTING THE FAMILAR MESSAGE:
	MPV; 314159>>MOVE 1,(2)   1/   43   271828/   ??
    WHICH MAY SEEM SOMEWHAT MORE CRYPTIC, BUT WILL MAKE IT MUCH EASIER
    FOR KNOWLEDGEABLE LISP HACKERS TO DEBUG THE ERROR.  TO GET THE
    EFFECT OF THE OLD HANDLER (RETURN TO TOP LEVEL), TYPE $G TO DDT.
    SYSTEMS SUCH AS MACSYMA WHICH REQUIRE A BETTER USER INTERFACE SHOULD
    PROVIDE A MACHINE-ERROR USER INTERRUPT HANDLER.

[E] ALL TTY BLOCK OUTPUT IN NEWIO IS NOW DONE WITH SIOT.
    AS A COROLLARY, A FILE WRITTEN IN TTY BLOCK IMAGE OUTPUT MODE
    WILL WRITE 8-BIT CHARACTERS, AND TTY BLOCK FIXNUM OUTPUT
    WILL WRITE 12.-BIT CHARACTERS.  SUPER SYSTEMS HACKERS TAKE NOTE!

[F] BUG OF FASLOAD FROM WITHIN FASLOAD-FILE-NOT-FOUND BREAK FIXED.
    WHEN YOU GET A FILE-NOT-FOUND ERROR FROM FASLOAD, IT NOW WORKS
    TO REPEAT THE FASLOAD WITHOUT EXITING FROM THE BREAK.

[G] THE KLUDGE WHERE LISP'S TOP-LEVEL AND BREAK-LEVEL SWALLOW A
    SPACE AFTER AN ATOM DOES NOT HAPPEN IF THE USER SUPPLIED A
    READ FUNCTION BY SETQ'ING THE VARIABLE "READ".

[H] NEW CURSORPOS FEATURES: A, H, I, V
	(CURSORPOS 'A) ADVANCES TO A FRESH LINE; THAT IS,
		IT DOES A TERPRI UNLESS THE TTY IS ALREADY
		AT THE BEGINNING OF A LINE.
	(CURSORPOS 'P) (OUTPUT A ^P) HAS BEEN FLUSHED.
		(TYO 20) NOW DOES THE RIGHT THING IN NEWIO.
	(CURSORPOS 'H <N>) SETS JUST THE HORIZONTAL POSITION
		TO <N> WITHOUT AFFECTING THE VERTICAL POSITION.
	(CURSORPOS 'V <N>) SIMILARLY SETS THE VERTICAL POSITION.
	(CURSORPOS 'I <N>) OUTPUTS ASCII CODE <N> AS A ONE-POSITION
		PRINTING CHARACTER (WILL NOT WORK UNTIL IMPLEMENTED
		IN ITS, WHICH ISN'T YET!).

[I] THE ACTION AT END-OF-FILE, CONTRARY TO THE MOONUAL, IS NOW:
	IF WITHIN READ IN THE MIDDLE OF AN OBJECT (TYI CANNOT BE
		"IN THE MIDDLE OF AN OBJECT") SIGNAL A READ-EOF ERROR.
	OTHERWISE, IF NO USER EOF HANDLER BELONGS TO THE FILE,
		THEN CLOSE THE FILE UNLESS IT IS A TTY
		(EOF ON A TTY MERELY MEANS OVER-RUBOUT),
		POP THE INPUT STACK (BY DOING (INPUSH -1)),
		THEN IF WITHIN A READ THAT HAD ARGUMENTS
		RETURN THE EOF VALUE, AND OTHERWISE REPEAT
		THE READ FROM THE NOW CURRENT FILE POPPED.
	IF THERE WAS A USER EOF HANDLER,
		THEN CALL IT WITH THE FILE AND EOF VALUE AS
		ARGUMENTS.  WHEN IT RETURNS, THEN
		IF IT RETURNED NIL, CLOSE THE FILE (UNLESS
			IT IS A TTY) AND POP THE INPUT STACK,
			THEN REPEAT THE READ FROM THE NEW CURRENT
			INPUT FILE.
		IF IT RETURNED T, REPEAT THE READ USING WHATEVER
			SOURCE THE EOF HANDLER MADE CURRENT.
		IF IT RETURNED ANY OTHER VALUE, THEN
			IF NOT WITHIN A READ WITH ARGUMENTS,
			PRETEND IT RETURNED NIL.
			OTHERWISE, EXIT THE READ WITH THE VALUE
			RETURNED BY THE EOF HANDLER.
    IN THE ABOVE, "READ" REFERS TO WHATEVER INPUT FUNCTION WAS
    CALLED, SUCH AS READ, READLINE, TYI, ETC.