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.