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.