FRIDAY JAN 13,1978 NM+4D.23H.1M.55S. LISP 383 -GLS, HIC-
[@] SOME CHANGES IN NOMENCLATURE FOR VARIOUS VERSIONS
[1] LAST MOST FINAL DOCUMENTATION OF THE HAIRY DEFUN FEATURE
[2] (STATUS JNUMBER) RETURNS A JOB NUMBER
[3] NEW EDIT COMMAND: YV FOO YANKS VALUE OF FOO
[A] FILEPOS CAN TAKE T AND NIL AS POSITION SPECIFIERS
[B] MEANINGS OF T AND NIL WHERE A FILE OBJECT IS REQUIRED
[C] NEW IO-LOSSAGE ERROR FOR AN INVALID VALUE OF MSGFILES
[D] SLIGHT INCOMPATIBILITY: UREAD AND UFILE NOW RETURN A FULL NAMELIST
[E] UAPPEND NO LONGER RENAMES THE FILE ON OPENING IT
[F] FOR THE RECORD, COMPLETE DEFINITIONS OF OLDIO IN TERMS OF NEWIO
[G] RENAMEF AND DELETEF OF A FILE OBJECT NOW CLOSE THE FILE OBJECT
[H] ALL ITS NEWIO I/O IS NOW DONE WITH SIOT
SOME FEATURES PRESENTLY IMPLEMENTED ONLY FOR THE SAIL VERSION:
[!] SAIL VERSION NOW USES TWO SEPARATE DISK FILES FOR SAVED LISPS
["] INITIALIZATION AUTOMATICALLY SAVES A HIGH SEGMENT
[#] FASLOAD CAN LOAD INTO THE HIGH SEGMENT
[$] HIGH-SEGMENT PURE FREE STORAGE
[%] SUSPEND NOW TAKES ONE OR TWO ARGUMENTS
SOME THINGS PROBABLY OF INTEREST ONLY TO LISP SYSTEM HACKERS:
[{] NEW INTERNAL ROUTINES %CONS, %HUNK, ETC. SOLVE A PDLNMK PROBLEM
[|] INITG IS NOW INITIALIZEG, TO PREVENT CONFLICT WITH DEC-10 INIT UUO
[}] NEW MACROS PUSHN AND POPI ARE USED IN THE SOURCE
[~] THE FORMAT OF FILE OBJECTS HAS CHANGED SOME - REASSEMBLE CODE IF NECESSARY
----------------------------------------------------------------
[@] THERE ARE MANY, MANY VERSIONS OF MACLISP FLOATING AROUND.
EVEN JUST ON THE PDP-10, THERE ARE MANY BECAUSE OF THE
POSSIBILITIES OF CONDITIONAL ASSEMBLY. WORK IS PROCEEDING
APACE ON VERSIONS FOR THE TENEX AND TOPS-20 OPERATING SYSTEMS,
AND ON NEWIO VERSIONS FOR SAIL AND TOPS-10. HERE WE LAY OUT
SOME STANDARD NOMENCLATURE FOR THE VARIOUS VERSIONS.
THE VARIOUS NAMES FALL INTO SETS WHICH REPRESENT ORTHOGONAL
CHOICES.
OPERATING SYSTEM:
/ ITS
| / TOPS-10
| DEC-10 | SAIL
PDP-10 | \ CMU
| /
| DEC-20 | TENEX
\ \ TOPS-20 (AKA "TWENEX")
MULTICS
THE PDP-10 VERSION WILL EVENTUALLY RUN ON SIX DIFFERENT
OPERATING SYSTEMS. TOPS-10, SAIL, AND CMU ARE SUFFICIENTLY
SIMILAR TO WARRANT LUMPING THEM TOGETHER AS "DEC-10"; SIMILARLY
TENEX AND TOPS-20 ARE LUMPED TOGETHER AS "DEC-20".
MULTICS, OF COURSE, IS NOT A PDP-10 VERSION.
PROCESSOR:
KA10
KI10
KL10
THE KA10 VERSION WILL RUN ON ALL PROCESSORS; THE KI10 VERSION WILL
RUN ONLY ON KI10 AND KL10 PROCESSORS; AND THE KL10 ONLY ON KL10'S.
SO FAR WE HAVE BEEN GENERATING ONLY KA10 VERSIONS; WHEN THE NEW
NUMBER STUFF IS IMPLEMENTED, THIS CHOICE WILL BECOME MORE IMPORTANT.
I/O IMPLEMENTATION:
OLDIO (UREAD, UWRITE, ETC. *ONLY*)
NEWIO (MULTIPLE I/O CHANNELS; ALSO SUPPORTS UREAD)
MINIMALITY:
MINIMAL (FANCY FRILLS NOT INCLUDED)
USELESS (FANCY "USELESS" FRILLS ARE INCLUDED)
THE FRILLS INCLUDE THE GCD FUNCTION, PURIFY AND FRIENDS, AND LOTS
OF LITTLE I/O HACKS LIKE ROMAN NUMERALS AND PRINLEVEL/PRINLENGTH.
THE MINIMAL VERSION IS USUALLY USED ONLY FOR DEC-10 VERSIONS
WHICH MUST RUN ON MACHINES WITH LITTLE PHYSICAL MEMORY; HOWEVER,
IT IS AN OPTION INDEPENDENT OF OPERATING SYSTEM.
ARITHMETIC:
BIGNUMS
DOUBLE-PRECISION FLONUMS
COMPLEX NUMBERS
THESE THREE ARE INDEPENDENT CHOICES WHICH MAY BE PRESENT OR ABSENT.
THUS, TO IDENTIFY THE VERSION PRESENTLY RUNNING AT MIT-AI, WE
MIGHT SAY "THE ITS KA10 NEWIO USELESS BIGNUM VERSION".
[1] THE FOLLOWING ARE THE OFFICIAL SPECS FOR THE "HAIRY DEFUN"
FEATURE, WHEREIN THE NAME OF THE FUNCTION IS ACTUALLY
A LIST OF GOODIES. IF THE INTERPRETER OR COMPILER DOESN'T
ACTUALLY DO WHAT FOLLOWS, IT'S A BUG. (UP TO NOW WE HAVEN'T
BEEN ABLE TO DISTINGUISH BUGS AND MISFEATURES BECAUSE WE
WEREN'T SURE PRECISELY WHAT THE FEATURE SHOULD DO IN ALL CASES.)
THE GENERAL FORM OF A CALL TO DEFUN IS:
(DEFUN <SPEC> <FLAG> <ARGS> . <BODY>)
<SPEC> AND <FLAG> MAY BE INTERCHANGED.
<FLAG> MAY BE OMITTED, OR MAY BE "EXPR", "FEXPR", OR "MACRO".
<SPEC> MAY BE A SYMBOL (THE NAME OF THE FUNCTION), OR
A LIST OF TWO TO FOUR SYMBOLS (IN WHICH CASE THE FLAG "MACRO"
IS ILLEGAL). <ARGS> IS A NON-NIL SYMBOL OR A LIST OF SYMBOLS;
THE FORMER INDICATES AN LEXPR (INCOMPATIBLE WITH THE "MACRO"
AND "FEXPR" FLAGS).
IF THE VALUE OF THE SWITCH DEFUN IS T, THEN THE EXPR-HASH HACK
IS ENABLED. IN THIS CASE, DEFUN AVOIDS MAKING THE INTERPRETIVE
DEFINITION IF HASHING THE DEFINITION INDICATES THAT IT IS
THE SAME AS THE CURRENT, PRESUMABLY COMPILED, DEFINITION.
THE VARIOUS CASES ARE:
FORM OF <SPEC>:
FOO (FOO BAR) (FOO BAR BAZ) (FOO BAR BAZ QUUX)
EXPR-HASH PROPERTY IS ON THE ATOM:
FOO THE RESULT OF - NONE - FOO
(GET 'FOO 'BAR)
IF THIS IS A SYMBOL
EXPR-HASH PROPERTY INDICATOR IS:
EXPR-HASH EXPR-HASH - NONE - QUUX
DEFUN PUTS THE FUNCTION DEFINITION ON FOO UNDER THE PROPERTY:
EXPR/FEXPR/MACRO BAR BAR BAR
COMPILER PUTS THE FUNCTION DEFINITION ON FOO UNDER THE PROPERTY:
SUBR/FSUBR/LSUBR BAR * BAZ BAZ
* THE PROPERTY WILL BE A SYMBOL |FOO BAR| WHICH IN TURN
WILL HAVE THE APPROPRIATE SUBR/FSUBR/LSUBR PROPERTY.
[2] (STATUS JNUMBER) RETURNS THE NUMBER OF THE LISP JOB (AS DEFINED
BY THE HOST OPERATING SYSTEM).
[3] THE EDITOR COMMAND YV FOO IS THE SAME AS YP FOO VALUE .
IT IS USEFUL FOR EDITING THE VALUE OF A SYMBOL.
[A] T AND NIL AS THE SECOND ARGUMENT TO FILEPOS HAVE SPECIAL
MEANINGS. T MEANS THE END OF THE FILE, AND NIL MEANS
THE ACTUAL BEGINNING OF THE FILE. THE DIFFERENCE BETWEEN
NIL AND 0 IS THAT 0 MEANS THE LOGICAL BEGINNING OF THE FILE,
WHILE NIL MEANS THE PHYSICAL BEGINNING. THIS MAKES NO
DIFFERENCE IN ANY CURRENT IMPLEMENTATION, BUT WILL MAKE
A DIFFERENCE WHEN SAIL NEWIO EXISTS. FILEPOS WILL KNOW
ABOUT THE SAIL RECORD OFFSET FEATURE, AND NIL WILL MEAN
THE APPROPRIATE NEGATIVE RECORD NUMBER.
[B] THERE ARE THREE KINDS OF CONTEXTS IN WHICH A FILE OBJECT
CAN BE USED:
(1) AN INPUT FILE IS NEEDED, E.G. FOR READ AND TYI.
(2) AN OUTPUT FILE IS NEEDED, E.G. FOR PRINT AND TYO.
(3) EITHER DIRECTION IS ACCEPTABLE, E.G. FOR LINEL AND (STATUS TTYCONS).
IN THE PAST T HAS MEANT THE TTY (THE TERMINAL). UNFORTUNATELY,
THERE IS AN AMBIGUITY IN CONTEXT (3). TO ALLEVIATE THIS, WE
ARRANGED FOR THE VARIABLES TYI AND TYO TO CONTAIN THE FILES
USED FOR THE TTY (AS ALREADY DOCUMENTED), SO THAT THE USER
CAN REFER TO THESE VARIABLES IN CONTEXT (3). MOREOVER,
IN CONTEXTS (1) AND (2) T IS TAKEN TO MEAN "THE FILE IN
THE VARIABLE TYI OR TYO (RESPECTIVELY)".
A PREVIOUSLY UNDOCUMENTED FEATURE OF THIS IS THAT MSGFILES,
FOR EXAMPLE, CAN BE '(T) (WHICH IS IN FACT THE DEFAULT VALUE),
WHICH CAUSES MESSAGES TO GO TO WHATEVER FILE IS IN TYO.
IN THIS WAY ONE NEED NOT CHANGE MSGFILES JUST BECAUSE THE VALUE
OF TYO IS CHANGED.
WE NOW ALSO MAKE THE FURTHER EXTENSION THAT IN CONTEXT (2),
WHERE ^W WOULD BE HEEDED IF A FILE ARGUMENT WERE OMITTED,
THAT SPECIFYING THE FILE EXPLICITLY (BY REFERRING TO THE VALUE
OF TYO) WILL NOT HEED ^W, BUT SPECIFYING T WILL ALLOW ^W TO
FORCE THE FILE IN TYO TO BE IGNORED. THIS, FOR EXAMPLE,
ALLOWS ^W TO SUPPRESS MSGFILES ACTIVITY TO THE TTY AND WELL AS
ORDINARY ACTIVITY.
NIL AS A FILE MEANS DIFFERENT THINGS IN DIFFERENT CONTEXTS.
IN CONTEXTS (1) AND (2) IT MEANS THE SAME AS SPECIFYING
NO FILE ARGUMENT AT ALL, AND SO USES THE DEFAULT (INFILE FOR
CONTEXT (1), OUTFILES AND TYO AS CONTROLLED BY ^R AND ^W FOR
CONTEXT (2)). FOR CONTEXT (3) IT MEANS "SET A DEFAULT VALUE"
IF THAT IS APPROPRIATE (E.G. FOR LINEL), AND IS ILLEGAL IF NOT
APPROPRIATE.
[C] IF MSGFILES IS EVER FOUND TO HAVE A BAD VALUE, AND IO-LOSSAGE
ERROR OCCURS, SIMILAR TO THE FAIL-ACT ERRORS FOR BAD VALUES
OF BASE, IBASE, ETC. BEFORE THE ERROR OCCURS, MSGFILES IS
SET TO '(T).
[D] UREAD AND UFILE NOW HAVE AS THEIR VALUE A FULL NAMELIST, NOT
JUST THE SIMPLE FILE NAMES. THUS UREAD MIGHT RETURN
((DSK LOSER) FOO BAR) WHERE FORMERLY IT WOULD HAVE RETURNED
(FOO BAR).
[E] UAPPEND NO LONGER RENAMES THE OPENED FILE TO ".LISP. APPEND";
THE FILE RETAINS ITS OWN NAME. (THIS IS PRIMARILY BECAUSE
IT IS SO DIFFICULT TO RENAME AN OPEN FILE ON TOPS-10 - GRR!).
[F] HERE ARE THE OFFICIAL DEFINITIONS OF THE OLDIO FUNCTIONS
IN TERMS OF NEWIO FUNCTIONS:
(DEFUN UREAD FEXPR (FILENAME)
(UCLOSE)
((LAMBDA (FILE)
(EOFFN UREAD
(FUNCTION
(LAMBDA (EOFFILE EOFVAL)
(UCLOSE)
EOFVAL)))
(INPUSH (SETQ UREAD FILE))
(DEFAULTF FILE))
(OPEN (*UGREAT FILENAME) 'IN)))
(DEFUN UCLOSE FEXPR (X)
(COND (UREAD
((LAMBDA (OUREAD)
(AND (EQ OUREAD INFILE) (INPUSH -1))
(SETQ UREAD NIL)
(CLOSE OUREAD))
UREAD))
(T NIL)))
(DEFUN UWRITE FEXPR (DEVDIR)
(OR DEVDIR (SETQ DEVDIR (CAR (DEFAULTF NIL))))
(*UWRITE (CONS DEVDIR
(COND ((STATUS FEATURE DEC10)
(CONS (STATUS JNAME) '(OUT)))
((STATUS FEATURE DEC20)
'(MACLISP OUTPUT))
((STATUS FEATURE ITS)
'(.LISP. OUTPUT))))
'OUT
(LIST DEVDIR)))
(DEFUN UAPPEND FEXPR (FILENAME)
(SETQ FILENAME (*UGREAT FILENAME))
(*UWRITE FILENAME 'APPEND FILENAME))
(DEFUN *UWRITE (NAME MODE NEWDEFAULT) ;INTERNAL ROUTINE
(COND (UWRITE
(SETQ OUTFILES (DELQ UWRITE OUTFILES))
(CLOSE UWRITE)
(SETQ UWRITE NIL)))
((LAMBDA (FILE)
(SETQ OUTFILES
(CONS (SETQ UWRITE FILE)
OUTFILES))
(CAR (DEFAULTF NEWDEFAULT)))
(OPEN NAME MODE)))
(DEFUN UFILE FEXPR (SHORTNAME)
(COND ((NULL UWRITE)
(ERROR 'NO/ UWRITE/ FILE
(CONS 'UFILE SHORTNAME)
'IO-LOSSAGE))
(T (PROG2 NIL
(DEFAULTF (RENAMEF UWRITE (*UGREAT SHORTNAME)))
(SETQ OUTFILES (DELQ UWRITE OUTFILES))
(SETQ UWRITE NIL)
(OR OUTFILES (SETQ ^R NIL))))))
(DEFUN *UGREAT (NAME) ;INTERNAL ROUTINE
(MERGEF NAME
(COND ((STATUS FEATURE DEC10) '(* . LSP))
((STATUS FEATURE DEC20) '(* MACLISP *))
((STATUS FEATURE ITS) '(* . >)))))
(DEFUN UPROBE FEXPR (FILENAME)
(SETQ FILENAME (MERGEF (*UGREAT FILENAME) NIL))
(PROBEF FILENAME))
(DEFUN UKILL FEXPR (FILENAME)
(DEFAULTF (DELETEF FILENAME))))
[G] FOR CONSISTENCY WITH TOPS-10 (SIGH), THE NEWIO FUNCTIONS
DELETEF AND RENAMEF WHEN APPLIED TO A FILE OBJECT WILL
ALSO CLOSE THE FILE OBJECT.
[H] IN CASE ANYONE CARES, ALL ITS NEWIO I/O TRANSACTIONS ARE
NOW DONE WITH SIOT, NOT WITH BLOCK IOT. THIS MAY AFFECT
INTERACTIONS WITH FILES WRITTEN BY PROGRAMS WHICH STILL
USE BLOCK IOT (E.G. ^C PADDING AT ENDS OF FILES).
THE FOLLOWING FEATURES EXIST ONLY IN THE SAIL VERSION.
EVENTUALLY THEY WILL BE IMPLEMENTED IN ALL DEC-10 VERSIONS.
SOME OF THESE PROVIDE ABILITIES ANALOGOUS TO, BUT NOT
IDENTICAL WITH, FEATURES ALREADY PROVIDED ON ITS FOR HACKING
SHARABLE CODE AND DATA. SYSTEMS PROGRAMMERS SHOULD EXAMINE
THE FOLLOWING DESCRIPTIONS TO SEE HOW TO HANDLE THESE
FEATURES IN A MANNER COMPATIBLE WITH ALL VERSIONS.
AT THE END IS AN EXAMPLE OF HOW TO CREATE A SHARED SYSTEM
IN A WAY THAT WILL WORK IN ALL EXISTING PDP-10 VERSIONS.
[!] THE SAIL (SU-AI) TIME-SHARING SYSTEM ORDINARY SAVES
TWO-SEGMENT PROGRAMS AS A SINGLE FILE, UNLIKE TOPS-10,
WHICH USES TWO DISTINCT DISK FILES (ONE FOR EACH
SEGMENT). MACLISP NOW GOES TO SOME TROUBLE TO USE TWO
DISTINCT FILES ON SAIL ALSO. THE HIGH-SEGMENT FILE
NORMALLY HAS THE EXTENSION ".SHR". THIS IS USED TO
SUPPORT THE OTHER FEATURES BELOW.
["] WHEN A NEW MACLISP HAS BEEN ASSEMBLED, LOADED, AND
STARTED BY THE SU-AI MAINTAINER, IT WILL AUTOMATICALLY
TRY TO DUMP OUT THE HIGH SEGMENT AS A DISK FILE,
AND WILL PRINT A MESSAGE REGARDING SUCCESS OR FAILURE.
IT THEN LOADS THE LINE EDITOR WITH AN APPROPRIATE
SAVE COMMAND (NOT SSAVE, BECAUSE ONLY THE LOW SEGMENT
SHOULD BE SAVED) FOR THE USER TO APPROVE WITH "RETURN"
IF DESIRED. (IF THE MAINTAINER WANTS TO USE NON-STANDARD
FILE NAMES, HE CAN DEPOSIT THE NAMES IN LOCATIONS
SGADEV, SGANAM, SGAEXT, AND SGAPPN.)
[#] FASLOAD CAN NOW LOAD CODE INTO THE HIGH SEGMENT.
RECALL THAT IN THE ITS VERSION, THE VARIABLE "PURE"
CONTROLS THE LOADING OF PURIFIABLE (SHARABLE) CODE.
THE MEANING OF THIS VARIABLE HAS BEEN EXTENDED.
IF PURE IS A FIXNUM, THEN FASLOAD WILL SET UP FOR
THE UUOLINKS HACK. THE EXTENSION IS TWOFOLD:
(1) IF THE ABSOLUTE VALUE OF PURE IS LESS THAN 10,
IT IS MULTIPLIED BY 1024. (1K). (2) THE ABSOLUTE
VALUE OF THE RESULT IS AN ESTIMATE OF THE NUMBER
OF *WORDS* DESIRED FOR THE UUOLINKS HACK. THIS SHOULD
BE ABOUT 15% MORE THAN THE TOTAL NUMBER OF DIFFERENT
COMPILED FUNCTIONS TO BE LOADED. (STEP 1 IS FOR
COMPATIBILITY WITH THE OLD MEANING OF PURE, AS THE
NUMBER OF 1K BLOCKS TO RESERVE.)
IN THE ITS (AND DEC-20) VERSIONS, THE SIGN OF THE
FIXNUM IS IRRELEVANT. FOR SAIL (AND EVENTUALLY TOPS-10
AND CMU), THE SIGN CONTROLS WHICH SEGMENT TO LOAD INTO.
A POSITIVE VALUE LOADS INTO THE LOW SEGMENT, AS BEFORE.
A NEGATIVE VALUE CAUSES THE HIGH SEGMENT TO BE
DEPURIFIED (A WRITABLE COPY MADE) IF NECESSARY;
THE CODE IS THEN LOADED INTO THE HIGH SEGMENT.
ALSO, ONLY ONE OF THE UUOLINKS AREAS IS MADE IN THE
LOW SEGMENT; THE OTHER IS PUT IN THE HIGH SEGMENT.
(THUS THE HIGH-SEGMENT LOADING FEATURE IS TIED TO THE
UUOLINKS FEATURE - SORRY ABOUT THAT.)
[$] RECALL THAT *PURE CONTROLS WHETHER CERTAIN KINDS OF
S-EXPRESSIONS ARE TO BE AUTOMATICALLY PURCOPY'D.
FOR ITS (AND DEC-20) ALL THAT MATTERS IS WHETHER IT IS
NIL OR NON-NIL. FOR SAIL (AND EVENTUALLY TOPS-10 AND CMU),
IT MUST BE A FIXNUM TO CAUSE PURCOPY TO USE THE HIGH
SEGMENT. THIS IN TURN WORKS ONLY IF PURE IS A NEGATIVE
FIXNUM.
THE VALUE OF *PURE SHOULD BE AN ESTIMATE OF THE TOTAL
NUMBER OF WORDS OF PURE FREE STORAGE NEEDED, INCLUDING ALL
THAT LOADED BY PREVIOUS FILES AND ALL THAT INCLUDED IN
THE INITIAL LISP SYSTEM (PRESENTLY ABOUT 6000. WORDS).
THIS CAUSES FASLOAD TO PREALLOCATE ENOUGH ADDITIONAL ROOM
IN THE HIGH SEGMENT TO ACCOMODATE THE ESTIMATED TOTAL AMOUNT
OF PURE STORAGE. (THE PREALLOCATION IS NECESSARY BECAUSE
IT ISN'T POSSIBLE TO ALLOCATE LIST STORAGE IN THE HIGH
SEGMENT ONCE THE LOADING OF CODE HAS BEGUN.) MAKING THE
ESTIMATE IN *PURE TOO BIG MERELY WASTES SPACE IN THE
HIGH SEGMENT; MAKING IT TOO SMALL CAUSES PURCOPY TO MAKE
ITS COPIES IN THE LOW SEGMENT.
[%] ONCE CODE AND DATA HAS BEEN LOADED INTO THE HIGH SEGMENT,
ONE CAN USE SUSPEND TO REPURIFY AND DUMP IT. IF SUSPEND
IS GIVEN TWO ARGUMENTS, IT WILL TAKE THE SECOND AS A FILE
NAME, DUMP THE HIGH SEGMENT TO THAT FILE, AND EXPUNGE THE
HIGH SEGMENT. IT THEN RETURNS TO MONITOR LEVEL. (THE SAIL
VERSION ALSO LOADS THE FIRST ARGUMENT INTO THE LINE
EDITOR; THIS WILL NORMALLY BE A SAVE (NOT SSAVE) COMMAND.)
WHEN THE LOW SEGMENT IS SUBSEQUENTLY CONTINUED OR RUN
FROM THE SAVE FILE, IT WILL ATTACH TO A HIGH SEGMENT
MADE FROM THE SAVED HIGH-SEGMENT FILE. IN SO DOING IT
WILL ARRANGE TO SHARE THAT HIGH SEGMENT WITH OTHER LISPS
USING THAT SAME HIGH SEGMENT.
CHANGES OF INTEREST TO LISP SYSTEM HACKERS:
[{] THERE WAS A BUG WHICH OCCURRED BECAUSE CONS (AND HUNK) DID NOT
PDLNMK ITS ARGUMENTS. THIS WAS CONSIDERED OKAY BECAUSE NCOMPLR
KNOWS ABOUT THESE SPECIALLY, AND KNOWS THAT THEY MUST NOT BE
GIVEN UNSAFE ARGUMENTS. HOWEVER, IT WAS POSSIBLE TO USE FUNCALL
(OR SUBRCALL!) TO GIVE THEM UNSAFE ARGUMENTS. THE SOLUTION
WAS TO MAKE CONS AND HUNK ALWAYS PDLNMK, AND TO HAVE SPECIAL
ROUTINES %CONS, %NCONS, %XCONS, %HUNK3, AND %HUNK4, WHICH ARE
CALLED BY JSP T, AND WHICH NCOMPLR KNOWS ABOUT. THESE EXPECT
SAFE ARGUMENTS AND DO NOT PDLNMK.
[|] INITG IS NOW INITIALIZEG, TO PREVENT CONFLICT WITH DEC-10 INIT UUO.
[}] THE MACRO PUSHN PDL,N PUSHES N WORDS OF ZEROS ONTO PDL. THIS WORKS
FOR ANY N; THE MACRO KNOWS ABOUT THE ROUTINES NPUSH, 0PUSH, AND
0.0PUSH AND GENERATES THE APPROPRIATE CALLS. THE MACRO IMPLICITLY
DESTROYS T.
THE MACRO POPI PDL,N POPS N WORDS FROM PDL BY SUBTRACTING AN
APPROPRIATE LITERAL. THE MACRO KNOWS ABOUT LOCATION R70.
[~] THE FORMAT OF FILE OBJECTS HAS BEEN CHANGED TO ACCOMODATE NEW INFORMATION.
SOME EXTRA RESERVED SLOTS HAVE BEEN CREATED FOR FUTURE EXPANSION.
IN PARTICULAR, NOTICE J.UIND (USER INDEX) FOR JOB ARRAYS, AND
FB.BVC (VALID CHARACTER COUNT) FOR FILE OBJECTS.