FRIDAY MARCH 01,1974 FQ+18H.38M.31S. LISP 767 - GLS - [1] NEGATIVE RUNTIMES [2] ERRFRAME CHANGE [3] FUNCALL PUSHES APPLY FRAMES [4] NEW FUNCTION: NRECONC [5] PRINT, PRIN1, PRINC CHECK I/O FLAGS - AFFECTS ABBREVIATION [6] (STATUS UREAD) IS NOW CONSISTENT ABOUT LINKS [7] SOME CHANGES TO ARRAY STUFF (PREPARING FOR NEW ARRAYS) [7A] TYPEP MAY RETURN ARRAY [7B] BIBOP SAR SPACE NOW CALLED ARRAY SPACE [7C] IN BOTH LISPS, ALLOC SAYS "ARRAY=" [8] REVIEW OF P.$X AND FRIENDS ---------------------------------------------------------------- [1] IT HAS BEEN OBSERVED THAT OCCASIONALLY RUNTIMES WILL BE MEASURED AS BEING NEGATIVE. THIS IS APPARENTLY AN ITS BUG HAVING SOMETHING TO DO WITH REQUESTING CORE MANAGEMENT, SO IT HAPPENS MORE IN BIBOP LISP THAN IN NON-BIBOP. I'VE TAKEN SOME COMPENSATIVE ACTIONS, BUT BE FOREWARNED AND BEWARE. [2] CHANGE TO ERRFRAMES: FOR COMPATIBILITY WITH EVALFRAMES, ERRFRAMES ARE NOW OF THE FORM (ERR <PDL POINTER> <ERROR MESSAGE> <A-LIST>) I.E. THE ATOM "ERR" IS NOW CONSED ON THE FRONT, JUST AS "EVAL" OR "APPLY" IS CONSED ONTO AN EVALFRAME. [3] SPEAKING OF EVALFRAMES: FUNCALL CREATES SUCH A FRAME OF THE APPLY VARIETY THESE DAYS. [4] (NRECONC X Y) <=> (NCONC (NREVERSE X) Y) BUT IS FASTER, BECAUSE IT DOESN'T HAVE TO SCAN BACK DOWN THE LIST JUST NREVERSED TO DO THE NCONC. [5] PRINT, PRIN1, AND PRINC CHECK ALL THEOUTPUT FLAGS (^W, ^R, ^B, ^N) BEFORE COMMENCING PRINTOUT. IF THE FLAGS ALL INDICATE NO OUTPUT, THEY RETURN IMMEDIATELY, THUS SAVING MUCH TIME. FURTHERMORE, IF OUTPUT IS GOING TO THE TTY AND NOWHERE ELSE, AND YOU ARE USING PRINLEVEL AND PRINLENGTH TO GET ABBREVIATED FORMS OUTPUT, THEN ONLY THE ABBREVIATED FORMS ARE GENERATED. THIS MEANS THAT TYPING ^R IN THE MIDDLE OF SUCH A PRINTOUT MAY CAUSE A FILE TO RECEIVE (THE TAIL END OF) AN ABBREVIATED FORM, EVEN IF (STATUS ABBREVIATE) REQUESTS OTHERWISE. ON THE OTHER HAND, THIS HACK PREVENTS CERTAIN SCREWS INVOLVING CIRCULAR LISTS. [6] IF DSK:LOSER;FOO BAR IS A LINK TO DSK:CLOD;ZORCH QUUX AND YOU DO (UREAD FOO BAR DSK LOSER), THEN (STATUS UREAD) WILL RETURN (ZORCH QUUX DSK CLOD) AND NOT (ZORCH QUUX DSK LOSER) AS IT USED TO. [7] SOME NEW STUFF HAS BEEN INSTALLED IN THIS LISP IN ANTICIPATION OF THE NEW FAST ARRAY SCHEME. A NEW KIND OF SPACE HAS BEEN IMPLEMENTED IN NON-BIBOP LISP, ANALOGOUS TO BIBOP LISP'S FORMER "SAR" SPACE, WHICH HOLDS OBJECTS CALLED ARRAY POINTERS. [7A] SUCH OBJECTS ARE OF TYPE "ARRAY". TYPEP WILL RETURN "ARRAY" FOR SUCH AN OBJECT. [7B] BIBOP'S SAR SPACE IS NOW CALLED ARRAY SPACE, FOR INDEED THEY ARE THE SAME OBJECTS. THUS YOU MUST NOW SAY (ALLOC '(ARRAY 300)) INSTEAD OF (ALLOC '(SAR 300)), ETC. [7C] THE INITIAL ALLOC WILL ASK YOU "ARRAY=". ARRAY POINTERS ARE TWO WORDS, SO IF YOU SAY 100., YOU HAVE ALLOCATED ROOM FOR 50. ARRAY POINTERS. OTHERWISE ALL THE ARRAY STUFF SHOULD WORK THE SAME AS BEFORE; BUT WATCH FOR THE NEW ARRAY SCHEME! [8] FOR PEOPLE WHO USE DDT TO DEBUG LISP CODE (I.E. SUPER-HACKERS), HERE IS A REVIEW OF P.$X AND FRIENDS: P.$X AND RELATED GOODIES ARE NAMED INSTRUCTIONS WHICH YOU CAN EXECUTE FROM DDT WITH THE $X COMMAND WHICH DO ALL KINDS OF NICE THINGS FOR YOU. THEY AVOID CLOBBERING ANYTHING WITHIN THE LISP, E.G. THEY SAVE AND RESTORE ANY ACCUMULATORS AND/OR TEMPORARIES THEY USE, AND ARE CIRCUMSPECT ABOUT I/O SWITCHES. REFERENCES TO "THE LEFT HALF OF ." OR "THE RIGHT HALF OF ." MEANS THAT THE LEFT OR RIGHT HALF OF DDT'S CURRENTLY OPEN LOCATION IS UNDER CONSIDERATION. $=ALTMODE. P.$X ASSUMES THE RIGHT HALF OF . TO BE AN S-EXPRESION, AND PRINTS IT. PL.$X PRINTS THE LEFT HALF OF . AS AN S-EXPRESSION. PP Z$X WHERE Z IS SOME QUANTITY, PRINTS THAT QUANTITY AS IF IT WERE A POINTER, AS AN S-EXPRESSION. (PP IS A UUO, AND Z IS ITS EFFECTIVE ADDRESS. SINCE PP IS A UUO, A FEW TEMPORARIES USED BY THE UUO HANDLER GET CLOBBERED; THUS BEWARE OF USING IT IF YOU MAY HAVE BROKEN OUT OF THE UUO HANDLER TO DDT.) VC.$X ASSUMES THAT THE RIGHT HALF OF . POINTS TO A VALUE CELL, AND RUNS OVER THE OBARRAY TRYING TO FIND AN ATOM WITH THAT VALUE CELL. PRINTS THE ATOM IF IT FINDS ONE, OTHERWISE PRINTS ?. VCL.$X ASSUMES LEFT HALF OF . POINTS TO A VALUE CELL, AND BEHAVES LIKE VC.$X. NOTE THAT THIS IS PARTICULARLY GOOD FOR EXAMINING SPECIAL PDL ENTRIES, WHICH HAVE VALUE CELL POINTERS IN THE LEFT HALF, AND OLD VALUES ON THE RIGHT HALF. SB.$X ASSUMES THAT THE RIGHT HALF OF . POINTS SOMEWHERE INTO THE MIDDLE OF A SUBR, AND RUNS OVER THE OBARRAY TRYING TO FIND THE NAME OF THE SUBR. IF THE NAME CAN BE FOUND, IT IS PRINTED. THIS IS ESPECIALLY GOOD FOR REGULAR PDL ENTRIES CREATED BY PUSHJ, BECAUSE THEY CONTAIN A SUBR RETURN ADDRESS IN THE RIGHT HALF. HH$X CREATE A FAKE ^H BREAKPOINT IN LISP. THIS SAVES THE ENVIRONMENT THE WAY ANY USER INTERRUPT DOES AND LETS YOU INVESTIGATE A LITTLE. THIS IS GOOD WHEN YOU CAN'T AFFORD TO PROCEED THE LISP EVEN LONG ENOUGH TO TYPE ^H AT IT. WHEN YOU TYPE $P AT LISP, YOU WILL SEE A *. YOU ARE IN DDT! (YES, $P GETS YOU BACK TO DDT, NOT BACK FROM IT, HERE!) NOTE THAT IF YOU WENT BACK TO DDT WHILE LISP HAD USER INTERRUPTS LOCKED OUT (E.G. IN THE MIDDLE OF A GARBAGE COLLECTION), THEN THE ^H BREAK CAN'T BE RUN; YOU WILL RETURN TO DDT IMMEDIATELY. DP$X DEPURIFIES THE PAGE CONTAINING .. THIS WAS INVENTED BEFORE DDT DID IT FOR YOU. RP$X REPURIFIES THE PAGE CONTAINING .. THIS IS SOMEWHAT MORE USEFUL, E.G. TO REPURIFY A PAGE AFTER PATCHING IT. PURIFY$G THIS PURIFIES THE SYSTEM PAGES OF LISP WHICH MAY BE PURE. FOR BIBOP LISP, IT ALSO PURIFIES THOSE PAGES OF USER CODE WHICH HAVE BEEN MARKED AS PURIFIABLE. IT TENDS TO DESTROY ACCUMULATORS; YOU CAN'T PROCEED AFTER DOING IT. (IT IS GENERALLY PERFORMED PRIOR TO DUMPING OUT A LISP, E.G. JUST AFTER A CALL TO THE FUNCTION MACDMP.) THE REST OF THESE ARE AVAILABLE ONLY IN BIBOP LISP. T.$X IS LIKE P.$X, BUT INSTEAD OF PRINTING THE RIGHT HALF OF . AS AN S-EXPRESSION, IT GETS TYPEP INFORMATION FOR IT FROM THE BIBOP TYPE TABLE, AND PRINTS THE TYPE INFORMATION. TL.$X LIKE T.$X, BUT LOOKS AT THE LEFT HALF OF .. TP Z$X LIKE PP Z$X, ONLY DOES T. INSTEAD OF P.. TBLPUR$X PRINTS OUT BIBOP'S PURTBL DATA BASE, ONE DIGIT FOR EVERY PAGE IN THE 256K ADDRESS SPACE. THE DIGITS ARE 0 = NONEXISTENT MEMORY, 1 = IMPURE MEMORY, 2 = PURE MEMORY, 3 = MEMORY IN AN UNCERTAIN STATE, E.G. PDL AREAS AND THE END OF BINARY PROGRAM SPACE. AT THE END SUMMARIES ARE PRINTED. THIS IS NOT THE ACTUAL STATE OF MEMORY, BUT ONLY WHAT BIBOP WOULD LIKE IT TO BE, E.G. A PAGE MARKED 2 MAY NOT REALLY BE PURE. PURIFY$X IN BIBOP EFFECTIVELY FORCES THE ACTUAL STATE OF THE WORLD TO CONFORM TO THE PURTBL. PAGPUR$X PRINTS OUT A TABLE LIKE TBLPUR, BUT DISPLAYS THE ACTUAL STATE OF EACH PAGE, NONEXISTENT, IMPURE, OR PURE.