JONL 2/2/73

FINALLY, THE NEW FASL FORMAT IS IN EFFECT, WITH LISP 229CW.  IT IS 
    AN EXTENDED FORMAT THAT REMOVES THE DIFFICULTIES SOME USERS HAVE
    HAD WITH RANDOM EVALUATIONS IN THE FASL FILE REFERENCEING THE 
    FUNCTIONS DEFINED IN THE FILE.  ALSO, IT ALLOWS VIRTUAL SYMBOL
    DEFINITIONS AT LOAD TIME SO THAT THERE WILL BE NO MORE ANNOYING
    PHASE DIFFERENCES IN ASSEMBLING AND LOADING HAND CODED LAP

THE NEW FUNCTION ODDP EXISTS.  IT REQUIRES A FIXNUM OR BIGNUM AS 
    INPUT, AND ITS ACTION SHOULD BE SELF EXPLANATORY.

MANY LOSERS HAVE FORGOTTEN THE WONDERFUL LSUBR BOOLE:
    ITS FIRST ARG IS A FIXNUM BETWEEN 0 AND 17 WHICH SELECTS ONE OF 
    THE 16. BOOLEAN FUNCTIONS OF TWO BINARY VARIABLES. THIS FUNCTION 
    IS THEN APPLIED SUCCESSIVELY TO THE 36.-BIT VALUES OF THE 
    REMAINING ARGS. THE SELECTED  FUNCTION MAY BEST BE DESCRIBED BY
    A GENERALIZED EXAMPLE.  SUPPOSE THE CALL IS (BOOLE N X Y) AND 
    THE BINARY REPRESENTATION OF N IS ABCD [A,B,C,D ARE ALL BINARY 
    DIGITS]  THEN THE TABLE FOR THE FUNCTION CORRESPONDING TO N IS:

	    ! Y
	    ! 0 1
	----------
	X 0 ! A C
	  1 ! B D

    FROM THIS IT IS EASY TO SEE THAT THE "AND" FUNCTION IS DESIGNATED
    BY 1, "XOR" BY 6, "OR" BY 7, AND THE COMPLEMENT OF ANY FUNCTION
    N BY 17-N; THUS "NAND" IS 17-1=16, "EQUIV" IS 17-6=11, AND 
    "NOR" IS 17-7=10 [ALL NUMBERS IN OCTAL].  
    BY "APPLIED SUCCESSIVELY" IS MEANT THAT (BOOLE N X Y Z) IS THE 
    SAME AS (BOOLE N (BOOLE N X Y) Z).  A FIXNUM CORRESPONDING TO 
    THE 36.-BIT RESULT IS RETURNED.

TYIPEEK IS NOW LSUBR.  IF GIVEN AN NUMERICAL ARGUMENT, IT 
    IS INTERPRETED AS FOLLOWS: 
	A) IF < 200 (OCTAL), THEN SCAN CHARS UNTIL ONE IS INPUT THAT 
	    MATCHES THE VALUE OF ARG. THE NEXT TYI OR READ WILL 
	    THUS ENCOUNTER THAT CHAR.
	B) IF > 777, THEN IS CONSIDRED TO BE A SYNTAX CATEGORY LSH'D
	    NINE PLACES, AND SCANNING IS TO STOP WHEN A CHAR IS 
	    ENCOUNTERED THAT BELONGS TO THAT CATEGORY.
	C) IF ARG IS NOT NUMERIC, THEN T MEANS ASSUME A NUMERICAL 
	    ARGUMENT THAT WILL CAUSE SCANNING TO THE NEXT CHAR WHICH
	    WILL START OUT A READ.  SPLICING MACRO CHARS WILL NOT 
	    START OUT A TOP-LEVEL READ, AND ARE EXECUTED MERELY TO 
	    GIVE THEM A CHANCE TO HAVE ANY APPROPRIATE SIDE-EFFECTS. 
	    SINCE SPACES, CONTROL-CHARACTERS, ETC. WON'T START OUT A
	    READ, THESE ARE SKIPPED OVER UNTIL SOME CHARACTER SUCH AS 
	    PARENTHESIS, LETTER, DIGIT, DECIMAL-POINT, ETC. IS FOUND.

	EXAMPLES: (TYIPEEK 15) SCANS UNTIL CARRIAGE-RETURN IS MET
		  (TYIPEEK 4000_9.) SCANS UNTIL MACRO CHAR IS MET
		  (TYIPEEK)  AS BEFORE, SIMPLY TAKES NEXT CHAR

NEW USER INTERRUPT CONTROL CHARS AVAILABLE:  ^\ ^] ^^  
    (ASCII VALUES 34 35 AND 36) CORRESPOND TO USER INTERRUPTS 14. 15.
    AND 16.  THERE ARE NO GLOBAL VARIABLES CORRESPONING, SO ONE MUST 
    USE SSTATUS TO SET AND CHANGE THESE INTERRUPTS.

COMPLR HAS YET TWO MORE SWITCHES TO PUT IN COMMAND LINES;
    D IS FOR DISOWNED AND I IS FOR INITIALIZE. SPECIFYING D WILL 
    CAUSE COMPLR TO AUTOMATICALLY DISOWN ITSELF AND COMMIT SUICIDE 
    WHEN COMPILATION IS DONE. THIS SWITCH SHOULD BE USED RATHER
    THAN ANY OTHER METHOD OF DISOWNING SINCE THIS WAY COMPLR WILL 
    KNOW IT IS DISOWNED AND CAN AVOID CERTAIN TYPES OF HACKERY 
    INVOLVING DDT. WHEN COMPLR IS FIRST LOADED THE DEFAULT VALUES OF 
    ALL SWITCHES IS NIL, EXCEPT TTYNOTES (T) AND UNFASLCOMMENTS 
    (U), WHICH ARE INITIALIZED TO T. 

MORE CONTROLS FROM THE STATUS FUNCTIONS.  (SSTATUS TERPRI T)
    WILL SUPPRESS THE GENERATION OF CARRIAGE RETURNS BY THE TYO
    FUNCTION [WHICH ARE NORMALLY PRODUCED WHENEVER THERE IS A 
    RUN OF LINEL OR MORE CHARACTERS WITH OUT A CARRIAGE RETURN]. 
    WHEN BASE = 10., (SSTATUS _ T) WILL PERMIT THE USE OF THE PRINT 
    FORMAT XXX_YY WHEN BASE = 8.  [THIS FORMAT IS AN ESPECIAL WIN FOR 
    LAP OUTPUT IN BASE EIGHT, BUT IS PROBABLY NOT ACCEPTABLE TO 
    THE NUMBER THEORY HACKER]. IN EACH CASE, THE SUPPRESSION-SWITCH 
    MAY BE INTERROGATED WITH STATUS.  INITIAL VALUES ARE NIL FOR 
    TERPRI, AND T FOR _.

ALARMCLOCK  TWO TYPES OF ALARMCLOCKS ARE AVAILABLE NOW - REAL ELAPSED 
    TIME, AND CPU RUNTIME USED BY JOB IN QUESTION.  FIRST ARG 
    SPECIFIES WHICH TIMER TO USE, AND SECOND ARG SPECIFIES INTERVAL 
    TO WAIT, EXCEPT THAT A NEGATIVE SECOND ARG MEAN SHUT OFF THAT 
    TIMER.   FIRST ARG = "RUNTIME" => WAIT FOR ELAPSED  RUNTIME 
    IN UNITS OF MICROSECONDS;  FIRST ARG = "TIME" => WAIT FOR ELAPSED
    REALTIME IN UNITS OF SECONDS.  SECOND ARG MAY BE EITHER FIXED OR
    FLOATING POINT.  VALUE RETURNED IS T  IF A TIMER WAS JUST SET, 
    AND NIL IF IT WAS TURNED OFF.

THE ARGUMENT TO SLEEP IS NOW IN SECONDS, [MAY BE EITHER FIXED OR 
    FLOATING];  THE RETURN VALUE OF TIME IS A FLOATING POINT 
    NUMBER MEASURED IN SECONDS.  TO OBTAIN THE VALUE OF THE ITS 
    SYSTEM COUNTER [IN UNITS OF 1/30.TH OF A SECOND] DO 
    (FIX (*$ (TIME) 30.0),  WHICH WILL BE ACCURATE TO THE 
    NEAREST FOUR WEEKS.