perm filename HEAD[S,AIL]50 blob sn#303235 filedate 1977-08-30 generic text, type T, neo UTF8
00100	COMMENT ⊗   VALID 00017 PAGES
00200	C REC  PAGE   DESCRIPTION
00300	C00001 00001
00400	C00003 00002	HISTORY
00500	C00013 00003	 INTRODUCTION
00600	C00014 00004	  SWITCHES : AN INTRODUCTION
00700	C00019 00005	 SWITCH SETTINGS & MACROS
00800	C00031 00006	 THE FILSPC STUFF -- OLDER HISTORY 
00900	C00033 00007	 FILSPC FILES
01000	C00039 00008	 NARRATIVE FILSPC ACCOUNTS
01100	C00045 00009	LISTING CONTROL MACROS & THE LIKE
01200	C00053 00010	 MACHINE-EXTENDING MACROS (SOME USEFUL CONSTANT, STORAGE/STORAGE MANIPULATORS)
01300	C00059 00011	  TELETYPE COMMUNICATION MACROS
01400	C00063 00012	  INPUT/OUTPUT AIDS
01500	C00066 00013	 RANDOM OTHER MACROS
01600	C00068 00014	TBITS DEFINITIONS
01700	C00073 00015	 VARIOUS DEFINITIONS OF USER UUO'S.
01800	C00076 00016	DSCR USER DATA AREA TEMPLATE  
01900	C00090 00017	Global AC Definitions, Indices, Bits
02000	C00098 ENDMK
02100	C⊗;
     

00100	COMMENT ⊗HISTORY
00200	AUTHOR,REASON
00300	021  202200000016  ⊗;
00400	
00500	
00600	COMMENT ⊗
00700	VERSION 18-2(16) 6-11-76 BY JES ALLOCATE LOCAL ITEMS IN DESCENDING ORDER (URLEAP)
00800	VERSION	18-2(15) 3-18-76 BY RFR ADDED NEW LEAP SEARCHES F6,F7 UDER URHASH AND URSTAT SWITCHES
00900	VERSION 18-2(14) 3-26-75 BY JFR TENX DSPLEN←←=330 (P.9)
01000	VERSION 18-2(13) 2-16-75 BY JFR BAIL P.7,17 TYPE CODE FOR REC!PNTR, RUNTIME PROC DESCR FILE
01100	VERSION 18-2(12) 2-16-75 BY RLS JUST LOOKING
01200	VERSION 18-2(11) 2-16-75 BY RLS LOOKING AT TENEX SWITCH SETTINGS
01300	VERSION 18-2(10) 2-2-75 BY JFR CLAIM TYPE CODE FOR ITEMVARS IN BAIL, P.17
01400	VERSION 18-2(9) 2-1-75 BY RLS TENEX PSI SYSTEM
01500	VERSION 18-2(8) 12-10-74 BY JFR MORE BAIL LOADMODULE RESIDENCE DEFINITION
01600	VERSION 18-2(7) 12-7-74 BY JFR DEFINE RESIDENCE OF  BAIL  LOADMODULE
01700	VERSION 18-2(6) 11-17-74 BY JFR USER TABLE ENTRY FOR COMMUNICATION BETWEEN BAIL AND ERROR HANDLER
01800	VERSION 18-2(5) 11-7-74 BY JFR KEEP PPN IN CDB
01900	VERSION 18-2(4) 11-2-74 BY JFR REVISE DATA AND ZERODAT CHECKS TO USE "PRINTX", GIVE MORE INFORMATION
02000	VERSION 18-2(3) 10-18-74 BY rls check TENEX file setting for v. 8
02100	VERSION 18-2(2) 10-18-74 BY RHT V 18
02200	VERSION 17-2(104) 10-14-74 BY RHT MAKE FILES SAY SAISG8, ETC
02300	VERSION 17-2(103) 10-10-74 BY JFR FEAT %BS% NEW WAY TO DO BREAK TABLES
02400	VERSION 17-2(102) 10-10-74 BY RHT FEAT BR ELIMINATE HACKS
02500	VERSION 17-2(101) 10-10-74 
02600	VERSION 17-2(100) 10-10-74 
02700	VERSION 17-2(99) 9-20-74 BY JFR INSTALL BAIL
02800	VERSION 17-2(98) 9-5-74 BY RHT ADD ITSSW
02900	VERSION 17-2(97) 7-18-74 BY RHT FEAT %BK% NEEDED NEW LOSER TABLE ENTRY
03000	VERSION 17-2(96) 7-7-74 BY RHT MINOR EDITS FOR REC GC
03100	VERSION 17-2(95) 7-7-74 
03200	VERSION 17-2(94) 6-6-74 BY RHT ADD RGCSW
03300	VERSION 17-2(93) 5-30-74 BY RLS BUG #SM# TEST FOR OVERFLOW OF DISPATCH TABLE
03400	VERSION 17-2(92) 5-27-74 
03500	VERSION 17-2(91) 5-25-74 BY RLS MAKE V. 54 OF LOADER DEFAULT ON TENEX
03600	VERSION 17-2(90) 5-25-74 BY RLS EDIT
03700	VERSION 17-2(89) 5-25-74 BY rls edit
03800	VERSION 17-2(88) 5-25-74 BY RLS PARAMETERIZE JRST TABLE
03900	VERSION 17-2(87) 5-25-74 
04000	VERSION 17-2(86) 5-25-74 BY RLS NEW STDBRK
04100	VERSION 17-2(85) 5-24-74 
04200	VERSION 17-2(84) 5-10-74 BY RHT MODIFY CMU TREATMENT OF GLOBSW MACROS
04300	VERSION 17-2(83) 5-5-74 BY RHT ADD PRNINF TO USER TABLE
04400	VERSION 17-2(82) 4-11-74 BY RHT ADD RECSW & ASSOCIATED MACROS
04500	VERSION 17-2(81) 4-7-74 BY RHT FEAT %BI% ADD RECUUO
04600	VERSION 17-2(80) 4-7-74 BY RHT ADD RECTYP DEF
04700	VERSION 17-2(79) 3-26-74 BY RLS CHANGE TENEX LOADVR TO 54
04800	VERSION 17-2(78) 3-19-74 BY RHT GO OVER FILE WITH RS
04900	VERSION 17-2(77) 3-17-74 BY RLS  EDIT
05000	VERSION 17-2(76) 3-17-74 BY RLS INSTALL SITE SWITCHES
05100	VERSION 17-2(75) 3-17-74 BY RLS INSTALL TENEX FEATURES, TENEX SYSTEM SWITCHES
05200	VERSION 17-2(75) 2-24-74 BY RHT FEAT %BH% TMPB FOR REF ITEM DATUM
05300	VERSION 17-2(74) 1-11-74 
05400	VERSION 17-2(73) 1-11-74 BY JRL ADD CMU SWITCHES SPACE ALLOCATION COMVER
05500	VERSION 17-2(72) 1-11-74 
05600	VERSION 17-2(71) 1-11-74 
05700	VERSION 17-2(70) 12-9-73 BY KVL %BC% ADD BAIL SWITCH
05800	VERSION 17-2(69) 12-6-73 BY jrl REMOVE AS MANY NON STANFORD CHARS AS POSSIBLE
05900	VERSION 17-2(68) 12-3-73 BY RHT ITMANY←←0
06000	VERSION 17-2(67) 12-3-73 
06100	VERSION 17-2(66) 12-3-73 BY RFS INSERT CALLIS FOR EXPORT SYSTEM
06200	VERSION 17-2(65) 12-3-73 
06300	VERSION 17-2(64) 12-3-73 BY RFS ELIMINATED ALL III DISPLAY STUFF
06400	VERSION 17-2(63) 12-2-73 BY RHT HEREFK MACRO & REMOVE USELESS FILSPC TAPE HISTORY
06500	VERSION 17-2(62) 12-2-73 
06600	VERSION 17-2(61) 11-30-73 BY RHT ADD STANSW & DECSW
06700	VERSION 17-2(60) 11-26-73 
06800	VERSION 17-2(59) 11-26-73 
06900	VERSION 17-2(58) 11-26-73 BY RHT DIDDLE THE FILSPC STUFF
07000	VERSION 17-2(57) 11-24-73 BY RHT FEAT %AM% ALLOW MANY USER PHASES OF INIT
07100	VERSION 17-2(56) 11-24-73 
07200	VERSION 17-2(55) 11-21-73 BY RFS CHANGE 'TEST' TO 'TSTSEG'
07300	VERSION 17-2(54) 11-18-73 
07400	VERSION 17-2(53) 11-18-73 BY RHT FEAT %AJ% -- ADD IN FILSPC
07500	VERSION 17-2(52) 11-18-73 
07600	VERSION 17-2(51) 11-18-73 
07700	VERSION 17-2(50) 11-18-73 
07800	VERSION 17-2(49) 11-18-73 
07900	VERSION 17-2(48) 11-18-73 BY RHT FEAT %AJ% -- RESTRUCTURE HEAD
08000	VERSION 17-2(47) 11-10-73 BY RHT ADD CORERR, ERRPRI, ERFLGS BITS
08100	VERSION 17-1(46) 7-26-73 BY RHT TRY VERSION 17
08200	VERSION 17-1(45) 7-26-73 *********************
08300	VERSION 16-2(44) 7-9-73 BY JRL REMOVE LAST REFERENCES TO DCS SWITCH
08400	VERSION 16-2(43) 4-23-73 BY RHT CHANGE ARGTYP TO RFITYP
08500	VERSION 16-2(42) 2-7-73 BY RHT ADD TYPE FOR ARG LIST ITEM
08600	VERSION 16-2(41) 1-28-73 BY JRL PUT QBIND,FBIND HERE SO STATS CAN USE
08700	VERSION 16-2(40) 1-23-73 BY RHT MAKE NIC & UNBOUND THE SAME
08800	VERSION 16-2(39) 1-23-73 BY JRL CHANGE CODE FOR UNBND
08900	VERSION 16-2(38) 1-8-73 BY JRL ADD MAXLOC MAXIMUM NUMBER OF FOREACH LOCAL ITEMVARS ALLOWED
09000	VERSION 16-2(37) 12-13-72 BY jrl BUG #KS# ADD LOADVR SWITCH
09100	VERSION 16-2(36) 11-21-72 
09200	VERSION 16-2(35) 11-10-72 BY HJS MODIFY QPOP TO TAKE AS AN ARGUMENT AN ADDRESS FOR THE POPPED ENTRY
09300	VERSION 16-2(34) 10-16-72 BY JRL CHANGE INVTYP TO 31 TO ALLOW CONTEXT ARRAY ITEMS
09400	VERSION 16-2(33) 9-15-72 BY RHT ADD USER TABLE ENTRIES FOR INTERRUPTS
09500	VERSION 16-2(32) 8-27-72 BY RHT PUT CELL FOR STACK UNWINDER RET ADRS IN USER TABLE
09600	VERSION 16-2(31) 8-23-72 BY JRL ADD UNBND "ITEM"
09700	VERSION 16-2(30) 8-20-72 BY RHT MODIFY USER TABLE
09800	VERSION 16-2(29) 8-6-72 BY RHT ADD PRILIS TO USER TABLE
09900	VERSION 16-2(28) 8-3-72 BY JRL ADD MPBIND TO TBITS DEFS FOR MATCHING PROCEDURES
10000	VERSION 16-2(27) 7-27-72 BY RHT MAKE MACRO FOR DECLARING PD. ENTRIES
10100	VERSION 16-2(26) 7-20-72 BY JRL CHANGE ARRTYP VALUE
10200	VERSION 16-2(25) 7-20-72 BY RHT ADD PROCESS ITEM (TYPE 11)
10300	VERSION 16-2(24) 6-20-72 BY DCS BUG #HU# BETTER TTY INFORMATION
10400	VERSION 16-2(23) 5-16-72 BY DCS INTRODUCE VERSION 16
10500	VERSION 15-2(9-22) 5-4-72 LOTS OF THINGS
10600	VERSION 15-2(8) 2-19-72 BY RHT THE BRAVE NEW WORLD
10700	VERSION 15-2(7) 2-5-72 BY DCS BUG #GJ# ADD LSTON LISTING CONTROL STUFF
10800	VERSION 15-2(6) 2-5-72 BY DCS BUG #GI# REMOVE TOPSTR DUE TO NEW `CAT'
10900	VERSION 15-2(5) 2-1-72 BY DCS BUG #GE# INSTALL SYMB %ALLOC BLK INDICES
11000	VERSION 15-2(4) 1-31-72 BY DCS BUG #GE# UPDATE USER TABLE, %ALLOC BITS, INDICES
11100	VERSION 15-2(3) 1-3-72 BY DCS BUG #FX# REMOVE COM2, COM2SW COMPLETELY
11200	VERSION 15-2(2) 12-24-71 BY DCS BUG #FF# REMOVE SAILRUN(ASSUME RUNTIM OR LIB)
11300	VERSION 15-2(1) 12-2-71 BY DCS INSTALL VERSION NUMBER
11400	
11500	⊗;
     

00100	COMMENT ⊗ INTRODUCTION
00200		THIS IS THE FILE OF MACRO DEFINITIONS AND GLOBAL AC
00300		ASSIGNMENTS FOR THE SAIL COMPILER, THE SAIL RUNTIME
00400		ROUTINES.  NEEDLESS TO SAY, NOT ALL PORTIONS ARE USED
00500		BY ALL PEOPLE.
00600	⊗
00700	
00800	DEFINE JD ' (A) <
00900		EXTERNAL .JB'A
01000		DEFINE JOB'A <.JB'A>
01100	>
01200	JD (SA)
01300	JD (VER)
01400	JD (REN)
01500	JD (UUO)
01600	JD (SYM)
01700	JD (FF)
01800	JD (REL)
01900	JD (41)
02000	JD (DDT)
02100	JD (CNI)
02200	JD (TPC)
02300	JD (UUO)
02400	JD (APR)
02500	JD (HRL)
02600	
02700	;EXTERNAL  JOBSA,JOBVER,JOBREN,JOBUUO
02800	;EXTERNAL JOBSYM,JOBFF,JOBREL,JOB41,JOBDDT,JOBCNI,JOBTPC,JOBUUO
02900	;EXTERNAL JOBAPR,JOBHRL
03000	
03100	
03200	
03300	SUBTTL	SAIL/GOGOL MACROS AND SWITCHES
     

00100	COMMENT ⊗  SWITCHES : AN INTRODUCTION
00200	Conditional assembly runs rampant in SAIL.  Most of the switches are used to
00300	 select options (debug or no debug, etc.) Some are only valid at Stanford.
00400	 There is one, EXPORT, tested by the macros NOEXPO and EXPO, which decides
00500	 whether this is for Stanford or somebody else.
00600	
00700	We have a program which, by reading the SAIL files and looking for switch-
00800	 testing macros, can do the conditional assembly once and for all (removing
00900	 the conditional stuff from the files.  It is such a set of files which
01000	 we normally send out, so if you see some switches and macros below that
01100	 never get referenced, it's because that code was taken out of your files.
01200	
01300	The conditional assembly switches are assigned in the following files:
01400	
01500	DCS	DCS	←2				;SLS (experimental) system
01600		FTDEBUG ←1				;include debugging in cmplr
01700	
01800	;NOCOM	COM2SW	←0				;OBSOLETE SWITCH, WAS TO
01900							; DISTINGUISH 2-SEG COMPILER
02000	WOM	DCS	←1				;WOM (experimental) system
02100	
02200	HEAD	EXPORT	←if NDEF then 0 else EXPORT
02300		DCS	←if NDEF then 0 else DCS
02400	;	COM2SW	←if NDEF then 1 else 0
02500		SIXSW	←if NDEF then (if EXPO then 0 else 1) else SIXSW ;sixbit PPN's
02600		HEDSYM	←if NDEF then 0 else HEDSYM	;With HEDSYM on, assembling HEAD
02700							; yields HEAD.REL, a symbol
02800							; file for the USERCON function
02900	
03000	GLB	GLOBSW	←1				;runtimes know about glb mdl
03100	
03200	LOW	SEGS	←1				;upper or lower assembly
03300		LOWER	←1				;assembles SAILOW or GLBLOW
03400		UPPER	←0
03500	
03600	UP	SEGS	←1
03700		LOWER	←0
03800		UPPER	←1				;assembles UPPER or GLOBAL
03900	
04000	FILSPC IS PART OF HEAD AS OF NOV 1973
04100	FILSPC	FILXXX	←SAISGn				;SAIL upper segment name
04200		SLOFIL	←SAILOW				;SAIL lower segment name
04300	GLOB <
04400		FILXXX	←GLBSGn				;global model upper segment name
04500		SLOFIL	←GLBLOW				;global model lower segment name
04600	>;GLOB
04700		SGDEVC	←SYS				;device for segment files
04800		SGPPNN	←0				;PPN for segment files
04900		LOCSYM	←0				;no local uppers in lower file
05000		NOPROT	←0				;want upper segment protected
05100	
05200	DB	FTDEBUG	←1
05300	
05400	SAIL	LEAPSW	←1				;LEAP exists
05500		FTDEBUG	←if NDEF then 0 else FTDEBUG
05600		GLOBC	←if LEAP and NOEXPO then 1 else if NDEF then 0 else GLOBC
05700		PATSW	←if NDEF then 0 else PATSW	;compile AOS/SOS to PAT words
05800		RENSW	←if NDEF then 1 else RENSW	;compile Re-entrant Code
05900		TMPCSW	←if NDEF then (if EXPO then 1 else 0) else TMPCSW
06000						;TMPCOR UUO available and used
06100	;; #KS BY JRL (12-13-72) ADD LOADVR SWITCH
06200		LOADVR  ←if NDEF then 54 else LOADVR (for differences in block code
06300				for required rel files,libraries in LOADER 54)
06400		 SAILRUN was a switch controlling some runtimes.  Now runtimes will
06500		  be assembled to assume a compiler (since that's common anyway).
06600	;; %BC% BY KVL (1/3/74) ADD BAIL SWITCH
06700		BAISW	←if STANFO then 1 else 0	;Bail only at stanford
06800	
06900	GOGOL	UPPER	←if NDEF then 0 else 
07000		UPPER	←if NDEF then 0 else UPPER
07100		LOWER	←if NDEF then 0 else LOWER
07200		SEGS	←UPPER or LOWER
07300		GLOBSW	←if NDEF then 0 else GLOBSW
07400		RENSW	←if NDEF then 1 else RENSW	;assemble Upper-Segment Library
07500		 SAILRUN  no longer exists.
     

00100	; SWITCH SETTINGS & MACROS
00200	
00300	These macros come in pairs, and exist so that the above-mentioned
00400	 program will have an easy job of it.  The meaning of each pair is
00500	 obvious.  They may be used only as in the following example:
00600	SW <			;or NOSW, starting in col. 1 (any comment out here)
00700	(code to appear under this switch)
00800	>;SW			or NOSW, must be same, any comment out here
00900	 These things may be nested without confusing anyone.
01000	
01100	Here are the macros
01200	⊗
01300	
01400	;;=I12=
01500	DEFINE DEC <IFE STANSW!TENXSW!CMUSW!TYMSW,>	;HAS TOPS-10 FEATURES (ESP. MPB)
01600	DEFINE NODEC <IFN STANSW!TENXSW!CMUSW,>	;SITE WITHOUT ALL TOPS-10 FEATURES
01700	
01800	DEFINE STANFO <IFN STANSW,>	;code for stanford only
01900	DEFINE NOSTANFO <IFE STANSW,>	;code not allowed at stanford ever
02000	DEFINE EXPO <IFN EXPORT, >	;code for export only (BEING PHASED OUT)
02100	DEFINE NOEXPO <IFE EXPORT, >	;code for Stanford only (BEING PHASED OUT)
02200	DEFINE CMU <IFN CMUSW,>		;CODE ONLY FOR CMU
02300	DEFINE NOCMU <IFE CMUSW,>	  ;CODE NEVER FOR CMU
02400	DEFINE TYMSHR <IFN TYMSW,>
02500	DEFINE NOTYMSHR <IFE TYMSW,>
02600	DEFINE ITS <IFN ITSSW,>		;Code only for its
02700	DEFINE NOITS <IFE ITSSW,>	;code never for its
02800	DEFINE IMSSS <IFN IMSSSW,>	;IMSSS version of TENEX-SAIL
02900	DEFINE NOIMSSS <IFE IMSSSW,>
03000	DEFINE PARC <IFN PARCSW,>	;CODE ONLY FOR PARC
03100	DEFINE NOPARC <IFE PARCSW,>	;NEVER FOR PARC
03200	DEFINE SRIAI <IFN SRIAISW,>	;CODE ONLY FOR SRI-AI
03300	DEFINE NOSRIAI <IFE SRIAISW,>	;NEVER 
03400	
03500	DEFINE JPL <IFN JPLSW,>		;AT JPL
03600	DEFINE NOJPL <IFE JPLSW,>	;NOT AT JPL
03700	DEFINE SUMEX <IFN SUMEXSW,>	;AT SUMEX
03800	DEFINE NOSUMEX <IFE SUMEXSW,>	;NOT AT SUMEX
03900	DEFINE UOR <IFN UORSW,>		; CODE FOR UNIV OF ROCHESTER
04000	DEFINE NOUOR <IFE UORSW,>	;NOT AT U OF R
04100	;; NEW SWITCHES FOR BIG LEAP AND IMPROVED HASHING \UR#3\
04200	DEFINE URHASH <IFN URHSW,>	;NEW LEAP HASH ROUTINES AND SEARCHES
04300	DEFINE NOURHASH <IFE URHSW,>
04400	DEFINE URLEAP <IFN URLPSW,>	;TRUE FOR DESCENDING ITEM ALLOCATION
04500	DEFINE NOURLEAP <IFE URLPSW,>	;LOCALS ASCENDING, GLOBALS DESCENDING
04600	DEFINE URSTAT<IFN URSTSW,>	;TRUE IF YOU WANT LEAP SEARCH STATISTICS
04700	DEFINE NOURSTAT <IFE URSTSW,>	;NO STATISTICS PLEASE
04800	;; \UR#3\
04900	DEFINE BAIL <IFN BAISW,>	;DEBUGGER STUFF
05000	DEFINE NOBAIL <IFE BAISW,>
05100	DEFINE GLOB <IFN GLOBSW, >	;since global compiler (GLOBC) can service
05200	DEFINE NOGLOB <IFE GLOBSW, >	; non-global code, GLOBC is different
05300	DEFINE GLOC <IFN GLOBC, >	; from GLOB (global model)
05400	DEFINE NOGLOC <IFE GLOBC, >
05500	DEFINE UP <IFN UPPER,>		;upper segment code (only used in runtime)
05600	DEFINE NOUP <IFE UPPER,>	;not
05700	DEFINE LOW <IFN LOWER,>		;lower bootstrap for 2 seg thing (ditto)
05800	DEFINE NOLOW <IFE LOWER,>	;not
05900	DEFINE LEP <IFN LEAPSW,>	;this compiler understands LEAP
06000	DEFINE NOLEP <IFE LEAPSW,>	;doesn't (applies to runtime too)
06100	DEFINE REN <IFN RENSW,>		;Re-entrant output (comp), runtimes (runtim)
06200	DEFINE NOREN <IFE RENSW,>
06300	DEFINE RENC <IFN RENCSW,>	;The compiler itself is reentrant
06400	DEFINE NORENC <IFE RENCSW,>	;The compiler itself is not reentrant
06500	DEFINE HACK <IFN HACKSW,>	;TEMPORARILY VERSION FOR STANFORD
06600	DEFINE NOHACK<IFE HACKSW,>	; WILL DISAPPEAR NEXT SAISG
06700	DEFINE TENX<IFN TENXSW,>	;FOR TENEX SYSTEMS
06800	DEFINE NOTENX<IFE TENXSW,>	;NOT
06900	DEFINE REC <IFN RCDSW,>		;RECORDS ARE CONDITIONAL UNTIL DEBUGGED BETTER
07000	DEFINE NOREC <IFE RCDSW,>	;RECSW WAS A VARIABLE IN THE COMPILER
07100	DEFINE RGC <IFN RGCSW,>		;RECORD GARBAGE COLLECTION (INSTEAD OF REF CNT)
07200	DEFINE NORGC <IFE RGCSW,>	;NOT
07300	DEFINE NRC <IFN NRCSW,>		;NEW-STYLE RECORD DESCRIPTORS
07400	DEFINE NONRC <IFE NRCSW,>	;NOT
07500	DEFINE KI10 <IFN KI10SW,>	;CPU IS A KI10
07600	DEFINE NOKI10 <IFE KI10SW,>	;NOT
07700	DEFINE KL10 <IFN KL10SW,>	;CPU IS A KL10
07800	DEFINE NOKL10 <IFE KL10SW,>	;NOT
07900	DEFINE XCOM <IFN XCOMSW,>	;COMPILER SAVE/RESTART (EXTEND) FACILITY
08000	DEFINE NOXCOM <IFE XCOMSW,>
08100	;;=I12=	ADD SFD SWITCH CONTROL
08200	DEFINE SFDS <IFG SFDLVL,>
08300	DEFINE NOSFDS <IFE SFDLVL,>	;NOT USED AT THE MOMENT
08400	
08500	; ** CONDITIONAL SETTINGS **
08600	
08700	DEFINE STSW (V,VL) <IFNDEF V,<?V←←VL>>
08800	
08900	
09000	IFDEF SPCWAR,<STSW(STANSW,1)> ;SPCWAR ONLY DEFINED AT STANFORD
09100	
09200	STSW (STANSW,0);WE MUST BE EXPORTING
09300	STSW (HACKSW,STANSW) ;ONLY AT STANFORD
09400	STSW (TENXSW,0); NOT USUSALLY AT TENEX
09500	STSW (CMUSW,0); NOT USUALLY AT CMU 
09600	IFDEF AUXCAL,<STSW (TYMSW,1)>
09700	STSW (TYMSW,0); IN CASE THE LINE ABOVE DOES NOT TAKE
09800	STSW (ITSSW,0); NOT USUALLY AT MIT
09900	STSW (IMSSSW,0); NOT USUALLY AT IMSSS
10000	STSW (PARCSW,0); NOT USUALLY AT PARC
10100	STSW (SRIAISW,0); NOT USUALLY AT SRIAI
10200	STSW (JPLSW,0);	NOT USUALLY AT JPL
10300	STSW (SUMEXSW,0); NOT USUALLY AT SUMEX
10400	STSW (UORSW,0); NOT USUALLY AT UOR
10500	STSW (RENCSW,0)	;NOT USUALLY A REENTRANT COMPILER
10600	STSW (DECSW,1); USUALLY DEC 10-50 BASED SYSTEM
10700	STSW (HEDSYM,0)		;USUALLY NOT A USER-TABLE SYMBOL GENERATOR
10800	STSW (KL10SW,.CPU.⊗-2)	;.CPU. IS 4 FOR KL, 2 FOR KI, 1 FOR KA, 0 FOR 6
10900	STSW (KI10SW,.CPU.⊗-1)
11000	STSW (XCOMSW,1)		;COMPILER SAVE/RESTART USUALLY SUPPORTED
11100	STSW (SFDLVL,5)		;NORMAL SITE ALLOWS SFDs
11200	NOCMU <
11300	STSW(GLOBSW,0)		;USUALLY NOT A GLOBAL SEGMENT BEING MADE
11400	>;NOCMU
11500	
11600	NOSTANFO <
11700	?EXPORT ←← 1 	; TAKE CARE OF OBSOLETE SWITCH
11800	STSW (SIXSW,0)
11900	>;NOSTANFO
12000	STANFO <
12100	?EXPORT ←← 0
12200	STSW (SIXSW,1)
12300	?KI10SW←←1
12400	?KL10SW←←1
12500	?SFDLVL←←0		;STANFORD DOESN'T HAVE SFD'S
12600	>;STANFO	
12700	STSW(RCDSW,1); 
12800	STSW(RGCSW,RCDSW); DITTO, ALSO REALLY ONLY USE WHEN DEBUGGING COMPILER UNTIL BETTER
12900	STSW(NRCSW,1); USUALLY A NEW-STYLE RECORD SYSTEM (now) ****
13000	
13100	CMU < ;**** EXTRA SWITCHES FOR CMU ******
13200	DEFINE GGAS <IFN GASSW,>	;cmu version of global segment
13300	DEFINE NOGGAS <IFE GASSW,>	;inverse
13400	DEFINE GGGON <↑↑ GLOBSW←←GASSW>	;
13500	DEFINE GGGOFF <↑↑ GLOBSW ←←0>	;USED TO SELECT SOME OF SU-AI GLOB STUFF
13600	STSW(GASSW,0)			;NOT USUALLY CMU GLOBAL
13700	STSW(GLOBSW,0)			;CMU WILL DIDDLE THIS SWITCH DIRECTLY
13800	?SFDLVL←←0		 ;CMU DOESN'T HAVE SFD'S
13900	>;CMU
14000	
14100	IMSSS <;DEFAULT SETTINGS AT IMSSS
14200	?TENXSW←←1			;TENEX AT IMSSS
14300	?KI10SW←←1			;AND A KI
14400	?SIXSW←←1			;USE SIXBIT PPN'S FOR LOADER AT IMSSS
14500	>;IMSSS
14600	
14700	PARC <
14800	?TENXSW←←1			;TENEX AT PARC
14900	?KI10SW←←1
15000	?SIXSW←←0
15100	>;PARC
15200	
15300	JPL <
15400	?TENXSW←←1
15500	?SIXSW←←0
15600	>;JPL
15700	
15800	SRIAI <
15900	?TENXSW←←1			
16000	?SIXSW←←0
16100	>;SRIAI
16200	
16300	SUMEX <
16400	?IMSSSW←←1			;MOST IMSSS FEATURES
16500	?SIXSW←←0			;EXCEPT DONT USE SIXBIT
16600	?TENXSW←←1			;BUT IS TENEX
16700	?KI10SW←←1			;IS KI
16800	>;SUMEX
16900	
17000	UOR <
17100	?DECSW ←← 1			;DEC TOPS-10 MONITOR
17200	?KL10SW←←1			;IS KL
17300	?EXPORT ←← 1			; NOT AT STANFORD
17400	?STANSW ←← 0			; NOT AT STANFORD
17500	?GLOCSW ←← 0			; NO GLOBAL MODEL
17600	?GLOBSW ←← 0			; NO GLOBAL MODEL STUFF
17700	?URHSW ←← 1			; USE NEW HASH TECHNIQUE
17800	?URLPSW ←← 1			; ALLOCATE ITEMS TOP DOWN
17900	>;UOR
18000	TENX <
18100	?RENCSW←←1			;WANT A RE-ENTRANT COMPILER
18200	?RENSW←←1			;WANT A RE-ENTRANT RUNTIME
18300	?DECSW←←0			;NOT A DEC SYSTEM
18400	?EXPORT←←1			;AVOID STANFORD FEATURES
18500	?STANSW←←0			;IN FACT, EXPLICITLY NOT STANFORD
18600	?GLOBSW←←0			;NOT USUALLY GLOBAL FOR TENEX
18700	?GLOBC←←0			;
18800	STSW(LOADVR,=54)			;TENEX SITES SEEM TO HAVE V. 54
18900	?SFDLVL←←0			;NO TENEX SITE HAS SFD'S
19000	>;TENX
19100	
19200	TYMSHR<
19300	?SFDLVL←←0			;NO SFD'S AT TYMSHARE
19400	?KI10SW←←1			;ALL KI'S
19500	>;TYMSHR
19600	
19700	;; %BC% KVL 1-6-74	ADD BAILD SWITCH
19800	STSW (BAISW,1)		;USUALLY ON
19900	;; %BC%
20000	;; %% \UR#3\ JES (@UOR)	;NEW LEAP STUFF
20100	STSW (URHSW,0)		; LEAVE OFF UNLESS EXPLICITLY ASKED FOR
20200	STSW (URLPSW,URHSW)		;MIGHT AS WELL USE BOTH AS ONE
20300	STSW (URSTSW,0)			;GENERALLY DON'T WANT THIS
20400	IFG	URLPSW-URHSW,<		;IF URLPSW = 1 & URHSW = 0
20500		PRINTX	URLPSW REQUIRES URHSW [FAIL ERROR ON NEXT LINE]
20600		#SWERR
20700	>
20800	;; %%
20900	
21000	KL10<	?KI10SW←←1		;NORMALIZE
21100	>;KL10
21200	NOKI10<	?KL10SW←←0
21300	>;NOKI10
21400	
21500	IFG STANSW+TENXSW+CMUSW+TYMSW-1,<	;AT MOST ONE OF THESE CAN BE SET
21600		PRINTX	SWITCH INCOMPATIBILITY [FAIL ERROR ON NEXT LINE]
21700		#SWERR
21800	>
     

00100	COMMENT ⊗ THE FILSPC STUFF -- OLDER HISTORY ⊗
00200	
00300	
00400	COMMENT ⊗
00500	VERSION 17(3) 8-19-73 BY RHT DECUS!!!
00600	VERSION 17(2) 7-26-73 
00700	VERSION 16-2(11) 7-26-73 BY JRL VERSION 17
00800	VERSION 16-2(10) 7-26-73 BY jrl RECONFIGURE FOR VERSION 17
00900	VERSION 16-2(9) 1-8-73 BY JRL LIB NAMES NOW LIBSA5,HLBSA5
01000	VERSION 16-2(8) 12-2-72 BY RHT CONFIGURE FOR SAISG5, ETC
01100	VERSION 16-2(7) 9-21-72 BY JRL RECONFIGURE FOR SAIL
01200	VERSION 16-2(6) 8-29-72 BY RHT CONFIGURE FOR NSAIL (PROCESSES, EVENTS, ETC.)
01300	VERSION 16-2(5) 7-2-72 BY RHT PUT UP VERSION 16
01400	VERSION 16-2(4) 6-25-72 BY DCS SAISG4 UPDATES V16 FEATURES
01500	VERSION 16-2(3) 6-24-72 BY DCS BUG #HX# PARAM PROCESSOR NAME, LIBRARIES
01600	VERSION 16-2(2) 5-13-72 BY DCS INSTALL VERSION 16
01700	VERSION 15-2(1) 12-2-71 BY DCS INSTALL VERSION NUMBER
01800	
01900	⊗;
     

00100	; FILSPC FILES
00200	
00300	IFNDEF TSTSEG,<TSTSEG←←0>
00400	NOTENX <
00500	IFN TSTSEG,<
00600	DEFINE FILXXX <SIXBIT /SAISGT/>
00700	DEFINE SLOFIL <SIXBIT /SAILWT/>
00800	DEFINE SGDEVC <SIXBIT /DSK/>
00900	STANFO <
01000	DEFINE SGPPNN <SIXBIT /  SAIL/>
01100	>;STANFO
01200	NOSTAN <
01300	DEFINE SGPPPN <0>
01400	>;NOSTAN
01500	?LOCSYM←←1
01600	?NOPROT←←1
01700	>
01800	IFNDEF FILXXX,<DEFINE FILXXX <SIXBIT /SAISG8/>>
01900	;SAILOW FOR PROCESSOR SAIL, EXTENSION SAI
02000	;SAILOX  "	      OSAIL,   "      OSA
02100	;SAILOY  "	      NSAIL,   "      NSA
02200	IFNDEF SLOFIL,<DEFINE SLOFIL <SIXBIT /SAILOW/>>;PRODUCTION SAIL
02300	IFNDEF SGDEVC,<DEFINE SGDEVC <SIXBIT /SYS/>>
02400	IFNDEF SGPPNN,<DEFINE SGPPNN <0>>
02500	IFNDEF LOCSYM,<?LOCSYM←←0>;DON'T WANT LOCAL SEGMENT SYMBOLS
02600	IFNDEF NOPROT,<?NOPROT←←0>	;DON'T WANT SEGMENT PROTECT IF NOT GLOBAL
02700	
02800	DEFINE PROCSR <ASCIZ /SAIL: />	;FOR PRINTOUT OF PROCESSOR
02900	DEFINE RPGFIL <SIXBIT /QQSAIL/> ;FOR COMPIL PURPOSES
03000	DEFINE DEFEXT <'SAI'>		;DEFAULT EXTENSION
03100	IFNDEF BKTFIL,<DEFINE BKTFIL <=9
03200				     POINT 7,[ASCIZ /BKTBL.BKT/],-1 >>
03300	
03400	?LIBLEN←←=10				;LENGTH OF FOLLOWING STRINGS
03500	DEFINE LIBLOW <ASCIZ /SYS:LIBSA8/>	;REQUIRED LIBRARIES
03600	DEFINE LIBHI  <ASCIZ /SYS:HLBSA8/>	; (HISEG VERSION)
03700	BAIL<
03800	?BALENG←←=12				;LENGTH OF FOLLOWING STRING
03900	DEFINE BAILOD <ASCIZ /SYS:BAIL.REL/>	;RESIDENCE OF BAIL
04000	;;%##% JFR 2-16-75 FOR KNOWLEDGE OF SAIL RUNTIMES
04100	?BPDALN←←=14				; LENGTH OF FOLLOWING STRING
04200	DEFINE BAIPDS <ASCIZ /SYS:BAIPD8.REL/>
04300	>;BAIL
04400	
04500	DEFINE OPDEV   <SIXBIT /SYS/>		;DEVICE FOR OPCODE FILE
04600	DEFINE OPNAME  <SIXBIT /2OPS2/>		;NAME OF SAME (EXTEN ALWAYS OPS)
04700	DEFINE OPPPN   <0>			;WHERE IT'S AT
04800	
04900	GLOB <
05000	DEFINE FILXXX <SIXBIT /GLBSG8/>
05100	DEFINE SLOFIL <SIXBIT /GLBLOW/>
05200	DEFINE SGDEVC,<SIXBIT /SYS/>
05300	DEFINE SGPPNN,<0>
05400	?NOPROT←←1
05500	?LOCSYM←←1
05600	>;GLOB
05700	
05800	CMU <
05900	GGAS <	;OH WELL
06000	DEFINE SGDEVC <SIXBIT/DSK/>
06100	DEFINE FILXXX <SIXBIT/CONSEG/>
06200	DEFINE SGPPNN <XWD 1305,60410>	
06300			;KLUDGE - HACK - A700CR00, WHEREON THE CONTROLLER LIVES.
06400	>;GGAS
06500	>;CMU
06600	>;NOTENX
06700	
06800	TENX <
06900	IFN TSTSEG,<
07000	IFNDEF FILXXX,<DEFINE FILXXX <ASCIZ /<SAIL>T-SAISGT.SAV/>>
07100	IFNDEF SLOFIL,<DEFINE SLOFIL <SIXBIT /SAILWT/>>
07200	?LOCSYM←←1
07300	?NOPROT←←1
07400	IFNDEF LIBLOW,<DEFINE LIBLOW <ASCIZ /LIBSAT.REL/>>
07500	?LIBLEN←←=10
07600	>;IFN TSTSEG
07700	BAIL<
07800	?BALENG←←=14				;LENGTH OF FOLLOWING STRING
07900	DEFINE BAILOD <ASCIZ /<SAIL>BAIL.REL/>	;RESIDENCE OF BAIL
08000	;;%##% JFR 2-16-75 FOR KNOWLEDGE OF SAIL RUNTIMES
08100	?BPDALN←←=16
08200	DEFINE BAIPDS <ASCIZ /<SAIL>BAIPD8.REL/>
08300	>;BAIL
08400	IFE TSTSEG,<
08500	IFNDEF FILXXX,<DEFINE FILXXX <ASCIZ /<SAIL>T-5-SAISG8.SAV/>>
08600	IFNDEF SLOFIL,<DEFINE SLOFIL <SIXBIT /LOWTSA/>>
08700	IFNDEF SLOLOD,<DEFINE SLOLOD <ASCIZ/SYS:LOWTSA,/>>	;FOR INTERFACE TO LOADER
08800	?LOCSYM←←0
08900	?NOPROT←←0
09000	IFNDEF LIBLOW,<DEFINE LIBLOW <ASCIZ /<SAIL>LIBSA8.REL/>>
09100	IFNDEF LIBHI,<DEFINE LIBHI <ASCIZ /<SAIL>HLBSA8.REL/>>
09200	IMSSS<
09300	IFNDEF SDTLOD,<DEFINE SDTLOD <ASCIZ/,SDDTRL[S,AIL]/>>
09400	>;IMSSS
09500	?LIBLEN←←=16
09600	>;IFE TSTSEG
09700	IFNDEF SEGPAG, <
09800	?SEGPAG←←630				;PAGE WHERE THE SEGMENT STARTS
09900	>;IFNDEF SEGPAG
10000	IFNDEF STARTPAGE, <
10100	?STARTPAGE←←610				;PAGE WHERE CHANNEL BUFFERS BEGIN
10200	>;IFNDEF STARTPAGE
10300	IFNDEF JFNSIZE, <
10400	?JFNSIZE←←20				;NUMBER OF CHANNELS ALLOWED
10500	>;IFNDEF JFNSIZE
10600	IFNDEF RUNLOD,<DEFINE RUNLOD <=18
10700				      POINT 7,[ASCIZ/<SUBSYS>LOADER.SAV/],-1 >>
10800	IFNDEF LODTFN,<DEFINE LODTFN <ASCIZ/LOA.TMP/>>
10900	IFNDEF BKTFIL,<DEFINE BKTFIL <=15
11000				     POINT 7,[ASCIZ /<SAIL>BKTBL.BKT/],-1 >>
11100	IFNDEF UDTFIL,<DEFINE UDTFIL <ASCIZ /<SAIL>UDDT.SAV/>>
11200	IFNDEF OPFILE,<DEFINE OPFILE <ASCIZ /<SAIL>3OPS3.OPS/>>
11300	>;TENX
     

00100	; NARRATIVE FILSPC ACCOUNTS
00200	
00300	STANFO <  ; ACTUALLY, NOT KEPT UP LATELY
00400	COMMENT ⊗
00500	HISTORY OF SAIL SYSTEMS
00600	3-1-71   VERSION 'SG1',,10
00700	 NEW SAIL SYSTEM UP, COMPILER AND RUNTIME
00800	 FEATURES:
00900	   NEW SEGMENT SCHEME ELIMINATES SAISYM GARBAGE, ALLOWS EXPO SHARED
01000		SEGMENTS, USE OF LATEST DEC LOADER.
01100	   NEW RAID WENT UP AT SAME TIME.
01200	   NEW LOADER (.052 MODIFIED) AT SAME TIME; WORKS AS LISP LOADER.
01300	   NEW DDT?
01400	   I/O ERROR ENABLE BUSINESS; BETTER SUBSTRING STUFF;
01500		PUNCTUATION ERROR ENABLE IN LOOKUP, ETC.
01600	   NONSTD BUFFER SIZES
01700	   USERCON
01800	   FREITM
01900	   GC CHANGE (WORKS WITH XPAND 0)
02000	   CVFIL, CVOS BETTER.
02100	3-12-71  GLOBAL SEGMENT GLBLOW,GLBSG2 UP
02200	   FIXED PTYALL BUG, WHICH CAUSED MESSAGE PROCEDURES TO BLOW
02300	3-15-71 GLOBAL SEGMENT GLBLOW,GLBSG3 UP
02400	   PTYALL FIXES SOME MORE -- GLUB.
02500	3-21-71  GLBLOW, GLBSG4 CREATED, TESTED
02600	    REQUIRE -1 NEW!ITEMS (GLOBAL OR NOT) INHIBITS LOCAL MODEL
02700	3-21-71 FILES FOR RUNTIMES, GREATLY MODIFIED, TRANSFERRED
02800	    FROM T,AIL WHERE THEY HAD BEEN SUCCESSFULLY TESTED IN
02900	    ALL CONFIGURATIONS I COULD THINK OF -- FACILITATE MUCH
03000	    MORE RAPID LIBRARY CREATION (THERE IS NOW ONLY 1 SCISS).
03100	6-22-71  MESPRO CHANGED TO ADD NEW FEATURE TO PUT!DATA.
03200	
03300	7-16-71 VERSION 'SG2',,11  (version SG6 for global model)
03400	 NEW SAIL SYSTEM, COMPILER AND RUNTIME
03500	 FEATURES:
03600	  CASE STATEMENT IMPROVEMENTS OUTLINED IN NEWMAN AND DOCS.UPD
03700	  REQUIRE n VERSION IMPLEMENTED
03800	  MYRIAD BUGS FIXED
03900	  LEABOT AND FRLOC TABLES ELIMINATED FROM USER TABLE
04000	  REQUIRE -1 NEW!ITEMS GIVES NO LOCAL MODEL ALLOCATION
04100	  RETURN CODE CHANGED -- MORE EFFICIENT -- NOW A LOCAL STRING
04200	    VARIABLE MAY BE RETURNED FROM A RECURSIVE STRING PROCEDURE.
04300	  AOS PAT/SOS PAT STUFF REMOVED FROM GENERATED PROCEDURES.
04400	  FREITM MOVED TO BE WITH OTHERS IN USER TABLE
04500	  THE RES COUNTER SYSTEM (/K) INSTALLED (SEE DOCS.UPD ETC.)
04600	7-21-71 VERSION GLBLOW,GLBSG7 UP
04700		MESSAGE PROCEDURE ROUTINE PUT!DATA(0,0,NAME) CHANGED TO REQUIRE
04800	ALL JOBS ENTERED TO HAVE SAME VERSION NUMBER
04900	10-20-71 VERSION GLBSG8 UP - RANDOM BUGS FIXED
05000	
05100	5-13-72 VERSION 16 (16 runtime) OF SAIL UP FOR EXPERIMENTATION
05200	 FEATURES:
05300	  1. Various improvements
05400	  2. New stack structure, up-level addressing, jumps out BY RHT
05500	  3. Improved LEAP by JRL
05600	  4. Improved macros by HJS
05700	 SAISG3
05800	6-25-72 VERSION 16 PUT UP AS STANDARD PROCESSOR,  NSAIL.  The files:
05900	  NSAIL.DMP[1,3] is the compiler, ext. NSA (uses SAISG4).
06000	  SAILOY.REL[1,3] is the low segment (always for NSAIL)
06100	  SAISG4.SEG[1,3] is the segment
06200	  LIBSA1, HLBSA1[1,3] are the libraries.
06300	 Will go back to SAISG3 shortly.
06400	7-3-72 VESRION 16 PUT UP AS STANDARD SAIL
06500	  OLD SAIL (VERSION "15") BECOMES STANDARD PROCESSOR "OSAIL"
06600		EXTENSION .OSA , LOW SEGMENT IS SAILOX (PREV SAILOW)
06700		SAISG2.REL IS ITS UPPER
06800	  NOW SAISG3.SEG IS THE UPPER, SAILOW.REL IS THE LOWER, LIBSA1, HLBSA1 
06900	  ARE THE LIBRARIES.
07000	10-22-72 NEWER, BETTER SAIL PUT UP.  SAISG4 IS THE SEGMENT
07100	
07200	12-7-72 VERSION 16 (REVISED) PUT UP AS STANDARD PROCESSOR
07300	 FEATURES:
07400	  1. miscellaneous bugs fixed
07500	  2. More LEAP modifications by JRL
07600	  3. CLEANUPs to blocks
07700	  4. User initialization happens as first executable statement.
07800	
07900	 SAISG5.SEG is the segment.  LIBSA5.REL is the library.
08000	
08100	7-25-73 VERSION 17 PUT UP AS STANDARD PROCESSOR (DECUS RELEASE??)
08200	 FEATURES
08300	  1. bug fixes
08400	  2. macro changes
08500	  3. process changes
08600	 SAISG6.SEG is the segment. LIBSA6.REL, the library.
08700	 GLBSG6.SEG is the global segment.
08800	
08900	8-19-73 TRANSFERRED FILES OVER TO X,AIL FOR DECUS RELEASE
09000	⊗
09100	>;STANFO
09200	
09300	
     

00100	;LISTING CONTROL MACROS & THE LIKE
00200	
00300	;VARIOUS HANDY MACRO DEFINITIONS TO TRY TO MAKE THE CODE
00400	;SOMEWHAT MORE READABLE.
00500	
00600	II←←1
00700	FOR @' JJ IN (HEAD,SAIL,PARSE,PDEFS,PRODS,SUBRS,SMTB,SYM,GEN,ARRAY) <
00800	?..'JJ←←II
00900	II←←II⊗1
01000	>
01100	FOR @' JJ IN (EXPRS,STATS,LEAP,TOTAL,COMSER,GOGOL,STRSER,IOSER,LEPRUN,MESPRO,WRDGET) <
01200	?..'JJ←←II
01300	II←←II⊗1
01400	>
01500	IFDEF SETLST,<SETLST>
01600	
01700	IFNDEF ..LIST,<
01800	..LIST←←0
01900	FOR @' JJ IN (HEAD,SAIL,PARSE,SYM,GEN,ARRAY,EXPRS,STATS,LEAP,TOTAL,COMSER) <
02000	?..LIST←←..LIST!..'JJ
02100	>
02200	FOR @' JJ IN (GOGOL,STRSER,IOSER,LEPRUN,MESPRO,WRDGET) <
02300	?..LIST←←..LIST!..'JJ
02400	>>
02500	IFDEF SETLS2,<
02600		SETLS2
02700	>
02800	DEFINE LSTON ' (JJ) <
02900		XLIST
03000	IFN ..LIST & ..'JJ,<
03100		LIST>
03200	>
03300		LSTON	(HEAD)
03400	
03500	DEFINE DSCR <COMMENT ⊗ > ; FOR DIRECTORY MAKER
03600	
03700	DEFINE GEN <IFE .NOGEN,<LALL>>
03800	DEFINE NOGEN <XALL>
03900	?.NOGEN←←1	;DON'T EXPAND MACROS AT ALL AFTER FIRST NOGEN
04000		NOGEN
04100	
04200	DEFINE IFNB (X) <IFDIF <><X>,>
04300	DEFINE IFB (X) <IFIDN <><X>,>
04400	
04500	
04600	DSCR  STORAGE MANAGEMENT MACROS
04700	⊗
04800	
04900	DSCR  HERE
05000	CAL MACRO
05100	PAR ROUTINE NAME
05200	DES For runtime routine vector.  If this is a library or one-segment
05300	 run, this is equivalent to placing a label "HERE".  Otherwise, the
05400	 label is placed on a JRST instruction in a vector of JRST's in the
05500	 upper segment.  The  JRST is to "HERE".  This allows the code for
05600	 runtimes to be changed without forcing everyone to forsake their
05700	 SAIL-compiled core images.
05800	⊗
05900	
06000	NOTENX <
06100	?DSPLEN←←=280	;LAST CHANGED 2-8-77, FROM 260
06200	>;NOTENX
06300	TENX <
06400	?DSPLEN←←=330	;LAST CHANGED 3-26-75, FROM 300
06500	>;TENX
06600	GLOB <
06700	?DSPLEN←←DSPLEN+=50 ; SINCE THIS TAKES MORE
06800	>;GLOB
06900	
07000	;;#SM# 5-30-74 RLS TEST FOR OVERFLOW OF DISPATCH TABLE
07100	DEFINE HERE(X) <
07200	UP <
07300		FQQQQ ←← .
07400		USE DSPCH	;SO THAT THE LABELS HAVE THE SAME ADDRESS
07500				;FROM ONE ASSEMBLY TO ANOTHE.
07600	↑↑ X :	JRST	FQQQQ
07700	IFGE .-DSPBAS-DSPLEN, <
07800	PRINTS / Dispatch vector size exceeded, bump DSPLEN
07900	/
08000	>;
08100		USE
08200	>;UP
08300	NOUP <
08400	↑↑ X :			;IF NOT MAKING AN UPPER SEGMENT, DOES NOT MATTER.
08500	>;NOUP
08600	>
08700	;;#SM#
08800	
08900	DEFINE HEREFK (X,XFAKE) <
09000	UP<
09100	↑↑ XFAKE:		; A FAKE LABEL (FELLOW WILL HAVE REAL THING IN SPARES
09200	>;UP
09300	NOUP <
09400	HERE(X)			;ONLY MATTERS IF MAKING A SEGMENT
09500	>;NOUP
09600	>
09700	
09800	DSCR SETCOR (SIZE,FIRST,LAST)
09900	CAL MACRO
10000	PAR SIZE is CORGET size desired
10100	 FIRST (optional) is vbl which will point to first word
10200	 LAST (optional) is vbl which will point to first word after block
10300	RES CORGET called, B put into FIRST, LAST computed
10400	ERR if not enough core, complains
10500	DES used in ALLOC (SAILOR sequence)
10600	SEE ALLOC
10700	⊗
10800	
10900	DEFINE SETCOR (SIZE,FIRST,LAST) <
11000		MOVE	C,SIZE
11100		PUSHJ	P,CORGET
11200		ERR	<CAN'T GET CORE FOR FIRST ALLOCATION>
11300		IFDIF <FIRST><>, <MOVEM	B,FIRST>
11400		IFDIF <LAST><>,<
11500			ADD	C,B
11600			MOVEM	C,LAST
11700	>>
11800	
11900	DSCR DATA, ZERODATA, TABLEDATA,--etc.
12000	CAL MACRO
12100	PAR One argument, a description
12200	RES For ZERODATA, the ZVBLS PC is switched to for the data.  For others,
12300	 the VBLS PC.  A check is made to ensure that the appropriate area is
12400	 big enough for the new data.
12500	DES This allows data to be concentrated in one area (for reentrancy
12600	 consideration, one-instruction CLEAR operations, etc.), but to
12700	 be defined locally.  Some special purpose programs can examine the
12800	 CREF listing file to print summaries, sorted cross-references, etc.
12900	⊗
13000	
13100	DEFINE DATA (MSG) <
13200		USE	VBLS
13300		IFGE	.-DBASE-DSIZE,<
13400		PRINTX	DATA AREA TOO SMALL [you will get a FAIL error on next line]
13500		#DATERR
13600	>>
13700	
13800	DEFINE TABLEDATA (MSG) <
13900		ZERODATA ()
14000	>
14100	
14200	DEFINE TABCONDATA (MSG) <
14300		DATA ( )
14400	>
14500	
14600	DEFINE ZERODATA (MSG) <
14700		USE	ZVBLS
14800		IFGE	.-ZBASE-ZSIZE,<
14900		PRINTX	ZEROED DATA AREA TOO SMALL [you will get a FAIL error on next line]
15000		#DATERR
15100	>>
15200	
15300	DEFINE BITDATA (MSG) <	USE>
15400	
15500	DEFINE BITDDATA (MSG) <	USE>
15600	
15700	DEFINE BIT2DATA (MSG) <	USE>
15800	
15900	DEFINE BITD2DATA (MSG) < USE>
16000	
16100	DEFINE ACDATA (MSG) <	USE>
16200	
16300	DEFINE AC2DATA (MSG) <	USE>
16400	
16500	DEFINE ENDDATA <
16600	IFDEF ZBASE, <
16700		DATA ()		;CHECK
16800		ZERODATA ()		;CHECK
16900		USE
17000	>>
17100	
17200	
17300	
17400	
17500	COMMENT ⊗
17600	
17700	DSCR LEVPOINT
17800	DES CHEAP MACRO TO GENERATE POINTERS TO DISPLAY LEVEL FIELD OF WORDS
17900	⊗
18000	
18100	DEFINE LEVPOINT(AD)< POINT DLFLDL,AD,35-LLFLDL>
18200	
18300	;;%  % CMU STYLE TRAP CALL MACRO -- SHOULD REALLY BE TURNED INTO ROUTINE CALL
18400	DEFINE TRPCAL (P1,P2,P3,P4,ADR) <
18500	BEGIN
18600		SKIPN	ADR
18700		 JRST 	 NOTRP
18800	CMU <  GGGON	;
18900	>;CMU
19000	GLOB <
19100		PUSH	P,USER
19200		MOVE	USER,GOGTAB	;IT MAY HAVE BEEN GLUSER
19300	>;GLOB
19400		PUSH	P,TEMP
19500		PUSH	P,UUO1(USER)
19600		MOVEI	TEMP,.TRACS
19700		BLT	TEMP,.TRACS+11
19800		MOVE	TEMP,-1(P)
19900		PUSH	P,P1
20000		PUSH	P,P2
20100		PUSH	P,P3
20200		PUSH	P,P4
20300		PUSHJ	P,@ADR
20400		MOVSI	TEMP,.TRACS
20500		BLT	TEMP,11
20600		POP	P,UUO1(USER)
20700		POP	P,TEMP
20800	GLOB <
20900		POP	P,USER		;GET IT BACK
21000	>;GLOB
21100	CMU <   GGGOFF			;DELSELECT GLOBAL STUFF
21200	>;CMU
21300	NOTRP:
21400	BEND
21500	>;END TRPCAL DEF
     

00100	; MACHINE-EXTENDING MACROS (SOME USEFUL CONSTANT, STORAGE/STORAGE MANIPULATORS)
00200	
00300	DSCR MOVEWI, MOVEW, MOVE6, MOVEI7, LOAD6, LOADI7
00400	CAL MACRO
00500	DES Provide extended "instructions" for data movement
00600	 MOVEWI(I,J) moves J (immed) to I via TEMP
00700	 MOVEW(I,J)  moves J to I via TEMP
00800	 MOVE6(I,J)  moves SIXBIT /J/ to I via TEMP
00900	 MOVEI7(I,J) moves addr of ASCIZ /J/ to I via TEMP
01000	 LOAD6 (I,J) moves SIXBIT /J/ to AC I
01100	 LOADI7(I,J) moves addr of ASCIS /J/ to AC I
01200	SID TEMP -- sometimes changed
01300	⊗
01400	
01500	DEFINE MOVEWI (I,J) <
01600			MOVEI TEMP,J
01700			MOVEM TEMP,I
01800	>
01900	
02000	DEFINE MOVEW (I,J) <
02100			MOVE	TEMP,J
02200			MOVEM	TEMP,I
02300	>
02400	
02500	DEFINE MOVE6 (I,J) <
02600			MOVE	TEMP,[SIXBIT /J/]
02700			MOVEM	TEMP,I
02800	>
02900	
03000	DEFINE MOVEI7 (I,J) <
03100			MOVEI	TEMP,[ASCIZ /J/]
03200			MOVEM	TEMP,I
03300	>
03400	
03500	DEFINE LOAD6 (I,J) <
03600			MOVE	I,[SIXBIT /J/]
03700	>
03800	
03900	DEFINE LOADI7 (I,J) <
04000			MOVEI	I,[ASCIZ /J/]
04100	>
04200	
04300	DSCR	PWORD,PCHAR,IPWORD,IPCHAR,PLEFT,PRIGHT,IPLEFT,IPRIGHT
04400	CAL MACRO
04500	DES MAKE BYTE POINTERS EASIER TO TYPE
04600	  THE ONES WITH "P" ARE SETUP SO THAT AN LDB FETCHES THE VALUE
04700	  THE ONES WITH "IP" ARE SETUP SO THAT AN ILDB FETCHES THE VALUE
04800	⊗
04900	
05000	DEFINE PWORD (A) <
05100		POINT	36,A,35>
05200	DEFINE PLEFT (A) <
05300		POINT	18,A,17>
05400	DEFINE PRIGHT (A) <
05500		POINT	18,A,35>
05600	DEFINE PCHAR (A) <
05700		POINT	7,A,35>
05800	DEFINE IPWORD (A) <
05900		POINT	36,A>
06000	DEFINE IPLEFT (A) <
06100		POINT	18,A>
06200	DEFINE IPRIGHT (A) <
06300		POINT	18,A,17>
06400	DEFINE IPCHAR(A) <
06500		POINT	7,A>
06600	
06700	DSCR SAVACS, RESTACS (L)
06800	CAL MACRO
06900	PAR a list like <A,C,LPSA>
07000	RES specified AC's pushed on (popped from) P-stack
07100	⊗
07200	DEFINE SAVACS (L) <
07300	 FOR II IN  L ,<
07400		PUSH	P,II
07500	>>
07600	DEFINE RESTACS (L) <
07700	FOR II  IN  L, <
07800		POP	P,II
07900	>>
08000	
08100	DSCR CALL6(I,J)
08200	CAL MACRO
08300	PAR I is AC# if J is present, else see J
08400	 J is symbolic value for a system CALL
08500	RES does CALLI AC,U&INDEX 
08600	 AC defaulted to 0
08700	⊗
08800	
08900	NOTENX <
09000	NOSTANFO <
09100	DEFINE CALL6 ' (I,J) <
09200		IFDIF <><J>,<
09300			IFDIF <><I>,<CALLI I,U'J;>  CALLI U'J
09400	>
09500		IFIDN <><J>,<
09600			CALLI	U'I
09700	>>
09800	>;NOSTANFO
09900	
10000	STANFO <
10100	DEFINE CALL6 ' (I,J) <
10200		IFDIF <><J>,<
10300			IFDIF <><I>,<J I,;> J
10400	>
10500		IFIDN <><J>,<
10600			I
10700	>>
10800	>;STANFO
10900	
11000	NOSTANFO <
11100	DEFINE CX ' (Y,Z) <
11200	?U'Y←←Z
11300	>
11400	
11500		CX RESET,0	;0 RESET IO
11600		CX DDTIN,1	;1 EXT-GET DDT CHAR.
11700		CX SETDDT,2	;2 SETDDT LOC IN PROTECTED JOB DATA
11800		CX DDTOUT,3	;3 EXT:SEND DDT CHAR.
11900		CX DEVCHR,4	;4 DEVICE CHARACTISTICS
12000		CX DDTGT,5	;5 GET DDT MODE
12100		CX GETCHR,6	;6 DEVICE CHAR.(DIFF. NAME)
12200		CX DDTRL,7	;7 RELEASE DDT MODE
12300		CX WAIT,10	;10 WAIT TILL DEVICE INACTIVE
12400		CX CORE,11	;11 CORE UUO
12500		CX EXIT,12	;12 EXIT
12600		CX UTPCLR,13	;13 CLEAR DEC TAPE DIRECTORY 
12700		CX DATE,14	;14 GET DATE
12800		CX APRENB,16	;16 ENABLE APR FOR TRAPPING
12900		CX SWITCH,17	;20 RETURN DATA SWITCHES
13000		CX REASSIGN,21	;21 REASSIGN DEVICE TO ANOTHER JOB
13100		CX TIMER,22	;22 RETURN JIFFY CLOCK TIME
13200		CX MSTIME,23	;23 RETURN TIME OF DAY IN MS
13300		CX GETPPN,24	;24 RETURN PROJECT-PROGRAMMER NUMBER
13400		CX TRPSET,25	;25 SET PI TRAP LOC, AND USER IO
13500		CX TRPJEN,26	;26 DISMISS INTERRUPT TO EXEC MODE
13600		CX RUNTIM,27	;27 RETURN TOTAL JOB RUNNING TIME
13700		CX PJOB,30	;30 RETURN JOB NUMBER
13800		CX SLEEP,31	;31 SLEEP FOR N SECONDS, THEN RETURN TO USER
13900		CX SETPOV,32	;32 SET PUSH DOWN OVERFLOW TRAP
14000					;(FOR COMPATIBILITY ONLY)
14100		CX PEEK,33	;33 PEEK INTO SYSTEM CORE.		;JS
14200		CX GETLIN,34	;34 GET NAME OF TTY
14300		CX RUN,35	;35 RUN COMMAND
14400		CX SETUWP,36	;36 SET USER WRITE PROTECT
14500		CX REMAP,37	;37 REDO CORE MAP
14600		CX GETSEG,40	;40 GET SEGMENT
14700		CX GETTAB,41	;41 GETTAB ILLEGAL AT STANFORD.
14800	>;NOSTANFO
14900	>;NOTENX
15000	
15100	
     

00100	;  TELETYPE COMMUNICATION MACROS
00200	
00300	DEFINE OP1 &(OPR,MS,ACC)  <
00400		IFIDN <ACC><>, <II←←0>
00500		IFDIF <ACC><>, <II←←ACC>
00600		OPR&. II,[ASCIZ /MS/]
00700	>
00800	
00900	DSCR IOERR (STR)
01000	CAL MACRO
01100	PAR ASCII string to be printed
01200	RES calls IOERR. UUO to print message, either restart
01300	 compiler or EXIT
01400	⊗
01500	
01600	DSCR ERR (STR,CODE,ROUT)
01700	CAL MACRO -- calls ERR. UUO
01800	PAR STR ASCII string to be printed
01900	 CODE determines how UUO functions
02000	 ROUT is address or literal to jump to if ERR continues
02100	RES If SAIL is on DPY, displays input line
02200	 Prints STR
02300	 CODE%2 determines what else to print -- if CODE is:
02400	  0-1:  Print nothing more
02500	  2-3:  Ident name for Semantics in LPSA (SAIL only)
02600	  4-5:  Ident name for Semantics in UUO instr (SAIL only)
02700	  6-7:  Value of AC in AC field of instr preceding UUO
02800	 10-11: The UUO in octal
02900	 12-13: Value of AC field of instr preceding that indicated
03000	        by UUO1(GOGTAB)
03100	
03200	 If CODE is even, don't allow continuation -- otherwise
03300	  allow continuation in manner described by error message.
03400	 If ROUT is present, jump to it -- else continue in line
03500	⊗
03600	FOR OP  IN  (ERR,IOERR) <
03700	DEFINE OP (MSG,AC,ADDR) <
03800		IFIDN	<ADDR><>,<OP1 (OP,<MSG>,AC)>
03900		IFDIF <ADDR><>,<JRST	[OP1 (OP,<MSG>,AC)
04000				   JRST	ADDR ]>
04100	>>
04200	
04300	DSCR CORERR
04400	CAL MACR
04500	PAR	message
04600	RES	Types the message, then exits the program 
04700	SID none
04800	⊗
04900	DEFINE CORERR(MSG) < JRST [	PUUO	3,[ASCIZ /MSG
05000	/]
05100	NOTENX <
05200					HALT	.	;DOT IN LITERALS REFERS TO THE
05300							;LOC COUNTER OUTSIDE THE LITERAL
05400	>;NOTENX
05500	TENX <
05600					JSYS	HALTF
05700	>;TENX
05800								]>
05900	
06000	DSCR PRINT, TERPRI (STR)
06100	CAL MACRO -- calls prin.. uuo.  
06200	PAR Ascii message
06300	RES Types string -- types CRLF after if TERPRI -- ERRPRI sends to log file if
06400	user is enabled for that.
06500	SID none
06600	⊗
06700	DEFINE ERRPRI (X) <
06800		PUSH	P,A
06900		MOVEI	A,[ASCIZ /X
07000	/]
07100		PUSHJ	P,PRINT.
07200		POP	P,A
07300	>
07400	
07500	DEFINE PRINT (X) <
07600		PUUO 3,[ASCIZ /X/]
07700	>
07800	
07900	DEFINE TERPRI (X) <
08000		PUUO	3,[ASCIZ /X
08100	/]>
08200	
08300	DEFINE SPRINT(X) <	;SAFE PRINT, BEFORE UUO SET UP
08400		TTCALL 	3,[ASCIZ /X/]
08500	>
08600	
     

00100	;  INPUT/OUTPUT AIDS
00200	
00300	DSCR MAKCDB (CHN, NAM, MODE, I, O)
00400	CAL MACRO
00500	PAR CHN channel number
00600	 NAM Prefix for symbols defined
00700	 MODE data mode
00800	 I,O # input, # output buffers
00900	RES generates a table to specify all (most?) data about
01000	 a file (Source, Rel, Command, etc.), instructions
01100	 tailored for this channel -- it takes the form: 
01200	⊗
01300	
01400	DEFINE MAKCDB &  (CHN,NAM,MODD,I,O)  <
01500	NAM&CDB:
01600	NAM&MOD: MODD			;DATA MODE
01700	NAM&DEV: 0			;DEVICE NAME IN SIXBIT
01800	NAM&HED:
01900		IFN O,<XWD NAM&HDR,0;> NAM&HDR  ;BLOCK HEADER POINTER
02000	NAM&HDR: 0			;I/O HEADER BLOCK
02100	NAM&PNT: 0			;I/O BYTE POINTER
02200	NAM&CNT: 0			;I/O CHAR COUNT
02300	↑NAM&FIL: 0			;I/O FILE NAME
02400	↑NAM&EXT: 0			;I/O EXTENSION
02500	;;#%%# BY JFR 11-7-74 KEEP PPN HERE, TOO
02600	↑NAM&PPN: 0			;I/O PPN
02700	NAM&OP:	OPEN	CHN,NAM&CDB	;OPEN INSTRUCTION
02800	NAM&NT:
02900		IFN I,<LOOKUP CHN,NAME;> ENTER CHN,NAME
03000	NAM&SPC:
03100		IFN O,<OUTBUF CHN,O>
03200	IFE O,<
03300	NOSTANFO <
03400		 IFIDN <NAM> <SRC>, <
03500			PUSHJ P,[MOVEI TEMP,.+1 ; PTR TO DESCRIPTOR, CALL UINBF ROUTINE
03600				 JRST	UINBF] ;>INBUF CHN,I
03700	>;NOSTANFO
03800	STANFO <
03900			    UINBF CHN,.+1
04000	>;STANFO
04100	>;IFE O
04200	NAM&BFS: IFN O,<O;>	I		;# OF BUFFERS
04300		202	;MAKE BIGGER BUFFERS THAN NORMAL (INPUT ONLY)
04400	;;=I10=	ADD PLACE FOR SFD'S
04500	SFDS<
04600	NAM&PTH:	BLOCK 4+SFDLVL	;PLACE FOR PATH TO GO
04700	> ;SFDS
04800	>
04900	
05000	DSCR CHKCHN, TSTERR, TSTEOF
05100	CAL MACRO
05200	PAR First argument is channel # (AC containing same for CHKCHN)
05300	 2d argument is routine name for CHKCHN, address for TSTEOF
05400	RES CHKCHN makes sure channel # in AC is legal
05500	  prints error message using routine name, if not legal
05600	 TSTERR does an error STATZ
05700	 TSTEOF jumps to Address if EOF is present on the channel
05800	⊗
05900	DEFINE CHKCHN (AA,ROUTIN) & <
06000			TRZE	AA,777760	;ZERO BITS AND TEST VALID
06100			ERR <ROUTIN&: INVALID CHANNEL NUMBER>
06200	>
06300	
06400	DEFINE TSTERR (CHAN) <
06500			STATZ CHAN,740000 ;ANY ERRORS?
06600	>
06700	
06800	DEFINE TSTEOF (CHAN,EOFADD) <
06900			STATZ CHAN,20000  ;END OF FILE?
07000			JRST EOFADD	  ; YES
07100	>
07200	
     

00100	; RANDOM OTHER MACROS
00200	
00300	DEFINE SETNIT <
00400		MOVE	TEMP,[PUSHJ P,%UUOLNK]	;MAKE SURE WE CAN DO UUOS
00500		MOVEM	TEMP,41
00600		MOVE	P,ALLPDP	;AND PUSHJ'S
00700	>
00800	
00900	DSCR SETPOV(AC,STR)
01000	CAL MACRO
01100	PAR AC REPRESENTING PUSH-DOWN POINTER
01200	STR REPRESENTING SOME SUGGESTIONS FOR ACTION WHEN THIS PTR OVERFLOWS
01300	RES POVTAB has one entry for each AC.  the string pointer (0 if none)
01400	 is put into this entry.  If a PDP in this AC overflows,  POVTRP, which
01500	 is enabled in SALNIT for PDL-OV, prints the string as a standard fatal
01600	 error message.  POVTRP is in  COMSER.
01700	SEE POVTRP
01800	⊗
01900	
02000	DEFINE SETPOV (AC,STR) <
02100	 IFIDN <STR><><MOVEI TEMP,0;>MOVEI TEMP,[ASCIZ ?STR?] ;GET VALUE
02200	 II←←(AC+17)&17			;BETWEEN 0 AND 17
02300	 JJ←←II-(2*(II/2))		;ODD OR EVEN
02400	 IFE JJ,<HRLM TEMP,POVTAB+(II/2); EVEN-- LEFT> HRRM TEMP,POVTAB+(II/2)
02500	>;SETPOV
02600	
02700	DSCR OPTSYM(SYM)
02800	CAL MACRO
02900	PAR SYM IS SYMBOL TO BE DEFINED
03000	RES IF  WHERSW  IS ON, THEN  SYM  is defined as a loader symbol
03100	with value of PCNT.
03200	Principally to help external code optimizer.
03300	⊗
03400	
03500	DEFINE OPTSYM(SYM)<
03600		MOVE	TEMP,[RADIX50 50,SYM]
03700		PUSHJ	P,OPTSY.
03800	>
03900	
     

00100	;TBITS DEFINITIONS
00200	
00300	DEFINE BIT(NAME,BITT) <IFDIF <NAME><SPARE>,<?NAME←←BITT>>
00400	DEFINE DEFTBS <
00500		BIT	(RES,400000)	;RESERVED WORD
00600		BIT	(CNST,200000)	;CONSTANT ENTRY
00700		BIT	(SPARE,100000)	;****
00800		BIT	(INTRNL,40000)	;INTERNAL SYMBOL (SYMBOL EXPORTED)
00900		BIT	(EXTRNL,20000)	;EXTERNAL SYMBOL (STORAGE FOUND ELSEWHERE)
01000		BIT	(MPBIND,10000)	;MATCHING PROCEDURE OR BINDING ITEMVAR
01100		BIT	(VALUE,4000)	;FORMAL PARAMETER CALL BY VALUE
01200		BIT	(REFRNC,2000)	;FORMAL PARAMETER CALL BY REFERENCE
01300		BIT	(CONOK,1000)	;OK TO CALL INTRINSIC WITH CONST ARGS AT COMPTIME
01400		BIT	(SIMPLE,400)	;FOR DISPLAY SYSTEMS ONLY
01500		BIT	(MESSAGE,200)	;A MESSAGE PROCEDURE !!!!!(STANFORD ONLY).
01600		BIT	(OWN,100)	;OWN VARIABLE ?
01700		BIT	(ANYTYP,40)	;ANYTYPED VARIABLE (USED IN PROCEDURE CALLS)
01800		BIT	(SAFE,20)	;SAFE -- FOR ARRAYS AND SUCH.
01900		BIT	(DEFINE,10)	;DEFINED MACRO IDENTIFIER
02000		BIT	(RECURS,4)	;THIS ROUTINE IS REENTRANT
02100		BIT	(BILTIN,2)	;IF ON IN TBITS, DON'T SAVE AC'S ON CALL.
02200		BIT	(SBSCRP,1)	;SUBSCRIPED VARIABLE (ARRAY)
02300	
02400	;RIGHT HALF BITS -- TBITS WORD.
02500	
02600		BIT	(INPROG,400000)	;PROCEDURE BEING DEFINED, KEEP FIXUP CHAIN
02700		BIT	(GLOBL,200000)	;GLOBAL LEAP VARIABLE
02800		BIT	(FORTRAN,100000);FORTRAN PROCEDURE (EXTERNAL)
02900		BIT	(FORWRD,40000)	;FORWARD PROCEDURE OR LABEL
03000		BIT	(PROCED,20000)	;PROCEDURE
03100		BIT	(SHORT,10000)	;SHORT INTEGER OR SHORT REAL
03200		BIT	(ITMVAR,4000)	;LEAP ITEMVAR
03300		BIT	(PNTVAR,2000)	;RECORD POINTER VARIABLE
03400		BIT	(BOOLEAN,1000)	;BOOLEAN VARIABLE ?? (SAME AS INTEGER FOR NOW
03500					; SEE TYPSET IN FILE "GEN"
03600		BIT	(ITEM,400)	;LEAP ITEM
03700		BIT	(STRING,200)	;A FHQ STRING
03800		BIT	(LPARRAY,100)	;TYPE OF THIS ITEM IS ARRAY
03900		BIT	(SET,40)	;LEAP SET
04000		BIT	(LABEL,20)	;LABEL
04100		BIT	(LSTBIT,10)	; COMPLEX NUMBER ?? (NOT IMPLEMENTED)
04200		BIT	(DBLPRC,4)	; DOUBLE PRECISION NUMBER ?? (NOT IMPLEMENTED)
04300		BIT	(FLOTNG,2)	;REAL NUMBER
04400		BIT	(INTEGR,1)	;INTEGER NUMBER
04500	
04600	;LEFT HALF OF %ERFLGS WORD -- STATE OF ERROR HANDLER
04700	
04800		BIT	(KEEP,1)	;DO NOT FLUSH TYPE AHEAD
04900		BIT	(QUIET,2)	;DO NOT PRINT MESSAGES
05000		BIT	(NUMBS,4)	;DO PRINT THE "CALLED FROM .." STUFF
05100		BIT	(LOGGIN,10)	;SEND MESSAGES TO LOG FILE
05200		BIT	(CONT,20)	;CONTINUABLE ERROR
05300		BIT	(AUTO,40)	;AUTOMATIC CONTINUATION MODE
05400		BIT	(LOGOPN,100)	;LOG FILE IS CURRENTLY OPEN
05500		BIT	(ERRNOW,200)	;WE ARE CURRENTLY IN THE MIDDLE OF AN ERR. UUO
05600		BIT	(MINUS,400)	;WE JUST SAW A MINUS!
05700		BIT	(MADEPT,1000)	;WE HAVE ALREADY MADE A BYTE POINTER FOR FAKETTY
05800		BIT	(BUFOPN,2000)	;HE HAVE A BUFFER FOR DUMP MODE LOGGING
05900	
06000	>
06100	
06200	DEFTBS		;DEFINE THE TBITS
06300	
06400	?FNYNAM ←← RECURS 		;EXTERNAL+OWN+FNYNAM MEANS EXT REQ IS FOR
06500					; FOO$ INSTEAD OF FOO (CF SIN)
06600	
     

00100	; VARIOUS DEFINITIONS OF USER UUO'S.
00200	FLOAT←2B8	OPDEF	FLOAT	[2B8]
00300	STANFO <
00400	PDPFIX←<KAFIX>	OPDEF	PDPFIX	[KAFIX]
00500	>;STANFO
00600	FIX←3B8		OPDEF	FIX	[3B8]
00700	
00800	DMOVE←120B8	OPDEF	DMOVE	[120B8]
00900	DMOVEM←124B8	OPDEF	DMOVEM	[124B8]
01000	DMOVN←121B8	OPDEF	DMOVN	[121B8]
01100	DMOVNM←125B8	OPDEF	DMOVNM	[125B8]
01200	
01300	FIXR←126B8	OPDEF	FIXR	[126B8]
01400	FLTR←127B8	OPDEF	FLTR	[127B8]
01500	KIFIX←122B8	OPDEF	KIFIX	[122B8]
01600	ADJSP←105B8	OPDEF	ADJSP	[105B8]
01700	
01800	DFAD←110B8	OPDEF	DFAD	[110B8]
01900	DFSB←111B8	OPDEF	DFSB	[111B8]
02000	DFMP←112B8	OPDEF	DFMP	[112B8]
02100	DFDV←113B8	OPDEF	DFDV	[113B8]
02200	
02300	DADD←114B8	OPDEF	DADD	[114B8]
02400	DSUB←115B8	OPDEF	DSUB	[115B8]
02500	DMUL←116B8	OPDEF	DMUL	[116B8]
02600	DDIV←117B8	OPDEF	DDIV	[117B8]
02700	
02800	IOERR.←4B8	OPDEF	IOERR.	[4B8]
02900	ERR.←5B8	OPDEF	ERR.	[5B8]
03000	SIXPNT←6B8	OPDEF	SIXPNT	[6B8]
03100	ARERR←7B8	OPDEF	ARERR	[7B8]
03200	;;%BI% --! RECORDS
03300	RECUUO ← 10B8	OPDEF	RECUUO	[10B8]
03400	DECPNT←11B8	OPDEF	DECPNT	[11B8]
03500	OCTPNT←12B8	OPDEF	OCTPNT	[12B8]
03600	;;%CJ% JFR 7-20-75
03700	ERRSPL←13B8	OPDEF	ERRSPL	[13B8]
03800	SNGL←14B8	OPDEF	SNGL	[14B8]
03900	TENX <
04000	PUUO←15B8	OPDEF	PUUO	[15B8]
04100			OPDEF	TTCALL	[PUUO]
04200	>;TENX
04300	NOTENX <
04400	PUUO←<TTYUUO>	OPDEF	PUUO	[TTYUUO]
04500			OPDEF	TTCALL	[TTYUUO]
04600	>;NOTENX
04700	
04800	JFOV←<JFCL 1,0>	OPDEF	JFOV	[JFCL 1,0]
04900	
05000	;;3! JFR 9-17-75 CHEAP WAY TO GET SOME MICRO-EFFICIENCY
05100			OPDEF	TRZ	[ANDCMI]
05200			OPDEF	TRC	[XORI]
05300			OPDEF	TRO	[IORI]
05400	
05500	STANFO <
05600	DPYOUT←703B8	OPDEF	DPYOUT	[703B8]
05700	DPYCLR←701B8	OPDEF	DPYCLR	[701B8]
05800	UINBF←704B8	OPDEF 	UINBF	[704B8]
05900	
06000	?SEGSIZUUO 	← 400022	;GET SIZE OF SECOND SEGMENT.
06100	?CORE2UUO	← 400015	;GET SOME MORE SECOND SEGMENT.
06200	?GLBAR		←← 1000		;CURRENT LENGTH OF GLOBAL MODEL AREA.
06300	>;STANFO
06400	
06500	
06600	
06700	SUBTTL	SAIL/GOGOL USER TABLE DESCRIPTION
     

00100	DSCR USER DATA AREA TEMPLATE  
00200	DES These values serve as indices for the run-time routines
00300	  into the user's data table. The table is necessary to allow
00400	  the routines to be re-entrant.  The table is allocated
00500	  in the SAILOR sequence at startup time; many of its values
00600	  (data area bounds, etc.) are placed in it at that time.
00700	 One can force re-initialization of this and all other dynamic
00800	  areas by setting GOGTAB to 0 before next CORGET.
00900	SEE XX descriptions for all these goodies directly below
01000	⊗
01100	
01200	DEFINE XX (SYMBOL,SIZE,BACKUP) <
01300		?SYMBOL←←LOCAT
01400	IFN HEDSYM,<
01500		ENTRY	SYMBOL			;FOR HEAD.REL SYMBOL FILE
01600	>;N HEDSYM
01700		LOCAT←←LOCAT+1
01800		IFDIF<SIZE><>< LOCAT←←LOCAT+SIZE-1>
01900		IFDIF<BACKUP><>< LOCAT←←LOCAT-BACKUP>
02000	>
02100	
02200	LOCAT←←0		;MAKES SYMBOLS ABSOLUTE
02300	
02400	; THESE VARIABLES WILL NOT BE RE-INITIALIZED BY THE INIT ROUTINE
02500	
02600	
02700	; LINK TO STRING BLOCKS FOR STRING GARBAGE COLLECTOR
02800	
02900	 XX CLER,,1
03000	
03100	 XX UUO1	;TRADITIONAL LOC FOR GOGOL RETRN ADRS FOR ERROR MSGS.
03200	
03300	;LOADER LINK CHAINS
03400	 XX STRLNK
03500	 XX SPLNK	;LINK END FOR SPACE ALLOCATION.
03600	 XX SETLNK	;LINK END FOR SETS.
03700	 XX SGROUT	;LINK UP STRING DSCRPTR GENERATOR ROUTINES HERE
03800	 XX KNTLNK	;PROFILE COUNTER LINK END
03900	
04000	;IMPORTANT STRING SPACE ENTRIES
04100	 XX ST		;BOTTOM OF STRING SPACE
04200	 XX STTOP	;TOP OF SAME
04300	;;%  % DCS 12-3-73 New entries
04400	 XX STLIST	;HEAD OF LIST OF STRING SPACES
04500	 XX TOPBYTE	;NEXT FREE BYTE
04600	 XX REMCHR	;-REMAINING FREE CHARS
04700	;;#GI# DCS 2-5-72 REMOVE TOPSTR
04800	 XX SGLIGN	;ON IF MUST BE ALIGNED TO FW BDRY (COMPILER ONLY).
04900	
05000	; I/O CHANNEL POINTER TABLE
05100	; EACH POINTS TO A "CHANNEL DATA BLOCK" FULL OF GOODIES
05200	 XX CHANS,20
05300	
05400	; I/O BREAK TABLES (FOR INPUT SCANNING ROUTINES)
05500	;;%BS%
05600	 XX BKTPRV		;0→UNPRIVILEGED, ≠0→PRIVILEGED
05700	 XX BKTPTR,4,,		;POINTERS TO CORGET BLOCKS OF 18 BREAKTABLES EACH
05800		DSPTBL←←0		;BREAK CHAR DISPOSITION TABLE
05900		LINTBL←←=19+DSPTBL	;LINE NUMBE    "	"
06000		BRKTBL←←=19+LINTBL	;BREAK CHAR TABLE
06100		BKJFFO←←=128+BRKTBL	;RESERVATION WORD
06200		BRKCVT←←1+BKJFFO	;UPPER CASE CONVERSION
06300		BRKOMT←←1+BRKCVT	;OMIT SPEED UP
06400		BRKDUM←←1+BRKOMT	;%DQ% used to hold "Z" bit flag
06500	;;%BS% ↑ MOVED INTO CORGET BLOCK FOR BREAK TABLES
06600	
06700	;;%##% RHT THESE FOR ADDED RUNTIMES
06800	XX  TTYCVT		; DITTO FOR TTY INPUT
06900	XX  FSTATS		; FOR GETSTS
07000	
07100	 XX PDL		;IOWD SIZE,BASE  FOR SYSTEM PDL
07200	 XX SPDL	;XWD SIZE,BASE FOR STRING PDL
07300	
07400	STANFO <
07500	XX  ZAPBEG,,1	;BEGINNING OF SECOND SEGMENT COPY OF STUFF.
07600			;FOR GLOBAL MODEL ONLY.
07700	>;STANFO
07800	CMU <
07900	XX  ZAPBEG,,1	;JUST LIKE SU-AI
08000	>; CMU
08100	
08200	;LEAP   THINGS.
08300	
08400	STANFO <
08500	 XX CURMES		;CURRENT MESSAGE.
08600	>;STANFO
08700	 XX MAXITM		;CURRENT TOP ITEM NUMBER.
08800	 XX OLDITM		;LINKED LIST OF OLD ITEMS (DUMP HEAP).
08900	 XX INFOTAB		;POINTER TO "GOOD POINTER" BLOCK OF CORE.
09000	 XX DATAB		;POINTER TO DATUM AREA.
09100	 XX HASTAB		;POINTER TO THE LEAP HASH TABLE.
09200	 XX FP1			;FREE STORAGE -- 1 WORD.
09300	 XX FP2			;FREE STORAGE -- 2 WORDS.
09400	 XX HASMSK		;THE MASK FOR HASHING INTO OUR HASH SPACE.
09500	;; \UR#3\ START OF NEW USER TABLE ENTRIES FOR BIG LEAP
09600	URHASH <
09700	XX RMASK1		;NEW MASK FOR MODIFIED LEAP ROUTINES
09800				;(RICK RASHID 3/15/76) WHICH IMPROVE
09900				;A XOR Y EQV Z AND X XOR B EQV Z SEARCHES
10000	XX RMASK2
10100	XX RMASK3
10200	XX RMASK4		;END OF NEW MASKS (3/15/76 --
10300				;BEWARE THE IDES OF MARCH!)
10400	>;URHASH
10500	URLEAP <
10600	XX BRACKL		;POINTER TO LIST OF BRACKETED TRIPLE BLOCKS
10700	>;URLEAP
10800	;; \UR#3\ END OF NEW USER TABLE ENTRIES FOR BIG LEAP
10900	 XX HASHP		;FOR PNAMES. XWD NEXT FREE ARRAY ENTRY,ARRAY BASE.
11000	 XX MKBP		;MAKE BREAK-POINT
11100	 XX ERBP		;ERASE BREAK-POINT
11200	 XX PUBP		;PUT BREAK-POINT (NOT IMPLEMENTED)
11300	 XX REBP		;REMOVE BREAK-POINT.(NOT IMPLEMENTED)
11400	 XX ITMTOP		;MAXIMUM PERMISSIBLE ITEM NUMBER.
11500	 XX LEABOT		; PTR TO SEARCH CONTROL BLOCK FOR DERIVED SETS ERASE. 
11600	 XX FRLOC		; PTR TO CURRENT ACTIVE FOREACH CONTROL BLOCK POINTER
11700	 XX SCBCHN		; PTR TO CHAIN OF ABANDONED SCB'S
11800	 XX FREITM	;NUMBER OF FREE ITEMS REMAINING
11900	
12000	; MISC. ARRAY THINGS.
12100	 XX ARYDIR	;FOR TELLING FOUR ARRAY ROUTINES WHICH END IS UP.
12200	 XX ARYLS	;A LINKED LIST (LUCKILY) OF STRING ARRAYS IN LEAP, AND SO FORTH.
12300			;THIS IS SO STRING GARB COLLECTOR CAN FIND THEM ALL.
12400	
12500	; BLOCK CONTROL TABLE INFORMATION
12600	;THIS IS FOR SAIL'S CORE MANAGEMENT ROUTINES (CORGET,CORREL,CORINC...)
12700	
12800	XX BLKTAB,3,3	;BASE OF BLOCK CONTROL TABLE
12900	   XX LOWC	;LOW LIMIT OF ALLOCATABLE "BLOCK" CORE
13000	   XX TOP	;UPPER LIMIT OF SAME
13100	   XX FRELST	;POINTER TO BLOCK FREE STORAGE LIST
13200	
13300	 XX XPAND	;PERMISSION TO EXPAND IN CORREL IF 0
13400	 XX ATTOP	;REQUEST TO ALLOCATE OFF TOP OF CORE IF NON-0
13500	 XX NOSHRK	;IF ON, CORREL NOT GIVEN PERMISSION TO SHRINK CORE
13600	STANFO <
13700	 XX USCOR2	;IF ON, CORGET WILL USE CORE2 ROUTINES.
13800	>;STANFO
13900	
14000	 XX BUFACS,10,,	;FOR BUFFER ALLOCATOR
14100	STANFO <
14200	XX ZAPEND,,1	;END OF SECOND SEGMENT AREA.
14300	>;STANFO
14400	CMU <
14500	XX USCOR2		;THE COPYCATS
14600	XX ZAPEND,,1		;ditto ZAPBEG
14700	>;CMU
14800	
14900	; INTERNAL VARIABLES FOR RE-ENTRANT ROUTINES
15000	
15100	;;%  % DCS 12-3-73 New entries, delete some old ones (strngc) 
15200	 XX STBUCK,1,1	;USED IN STRING GC TO KEEP TRACK OF BLOCKS
15300	   XX OFFSET		;Distance to move a string space, see STRNGC
15400	 XX STINCR		;String space increment size, see STRNGC
15500	 XX STREQD		;String space threshold size, see STRNGC
15600	
15700	 XX SGCCNT		;NUMBER OF TIMES STRNGC HAS BEEN CALLED
15800	 XX SGCTIME		;Time of last GC if non-zero, else not enabled
15900	 XX SGCTOTAL		;Total GC time while enabled (set SGCTIME -1 to enable)
16000	 XX SGCNUM		;Number of strings collected last GC
16100	 XX SGCWASTE		;Number of wasted words after last GC
16200	
16300	 XX SRELOC
16400	 XX CODAC		;SAVE AC 1 OVER CALLS ON "CODE" RUNTIME ROUTINE
16500	 XX WDTH		;GLOBAL WIDTH FOR STRING CONVERSION ROUTNES
16600	 XX DIGS		; "" FOR # OF DECIMAL DIGITS
16700	
16800	; I/O INTERNAL VARIABLES
16900	
17000	 XX CDBLOC	;IF CHNL IS A CH #, @CDBLOC(USER) GETS ITS CDB ADDR
17100	
17200	 XX FNAME	;ENTER-LOOKUP TABLE
17300	 XX EXT
17400	 XX WD3
17500	 XX PRPN
17600	 XX LONGWD	;LONG FORM LOOKUPS AND ENTERS POKE THIS
17700	 XX LONG2	; AND THIS -- FILEINFO ROUTINE GIVES TO USER
17800	
17900	 XX PROJ		;USED BY FILNAM ROUTINE
18000	
18100	TYMSHR<
18200	XX FUSER
18300	XX FUSER1	;TYMSHARE USER NAMES
18400	>
18500	; AC SAVE AREAS
18600	
18700	 XX RACS,13,,	;RE-ENTRANT ROUTINES SAVE HERE
18800	 XX SGACS,14,,	;AVAILABLE ANY TIME IF YOU ARE NOT
18900	 		; LIKELY TO CALL STRNGC
19000	 XX STACS,14,,	;YET ANOTHER AC SAVE AREA
19100	 XX PGNNFL
19200	
19300	;SOME STUFF FOR MULTIPLE PROCESSES
19400	
19500	?NPRIS←←20	;NUMBER OF PRIORITIES
19600	 XX PRILIS,NPRIS,, 	;PRIORITY LIST HEADERS
19700	 XX GGDAD		;THE BASE FOR THE MAIN PROCESS (IF HAVE ONE)
19800	 XX TIMER		;COUNTED DOWN FOR CLOCK INTERRUPTS
19900	 XX SCHDRQ		;SET ≠0 FOR A SCHEDULER REQUEST
20000				;(USED BY EVENTS)
20100	 XX STKURT		;PLACE FOR STACKUNWINDER RETN ADRS
20200	 XX INTQWP		;INTERRUPT NOTICE BUFFER WRITE PTR
20300	 XX INTQRP		;READ PTR
20400	 XX INTQWT		;TOP OF BUFFER 
20500	 XX INTQWB		;BOTTOM OF BUFFER
20600	 XX INTPRC		;INTERRUPT PROCESS BASE
20700	 XX DISPAT		;DISPATCH TABLE FOR INTERRUPT LEVEL MODULE
20800	 XX DFRINF		; AOBJN PTR TABLE FOR DEFERRED INTERRUPTS
20900	NOTENX<
21000	 XX IPDP		;INTERRUPT PDP
21100	>;NOTENX
21200	TENX<
21300	 XX IPDP1
21400	 XX IPDP2
21500	 XX IPDP3
21600	 XX ISPDP1
21700	 XX ISPDP2
21800	 XX ISPDP3
21900	 XX TIMFRK		;TABLE OF FORK HANDLES FOR INTERRUPT SYSTEM, PROCESSES
22000	>;TENX
22100	 XX IJBCNI		;JOBCNI FROM A DEFERRED INTERRUPT
22200	 XX IJBTPC		;JOBTPC FROM DEFERRED INTERRUPT
22300	 XX IRUNNR		;RUNNER AT TIME OF DEFERRED INTERRUPT
22400	NOTENX<
22500	 XX ISPDP		;STRING PDP FOR INTERRUPT LEVEL
22600	>;NOTENX
22700	;;%##%  ADDING THESE
22800	 XX $FSLIS		;LIST OF FREE STORAGE ALLOCATORS
22900	 XX PRNINF		;$PRINT DEFAULTS
23000	;;%##% BY JFR 11-17-74 COMMUNICATION BETWEEN BAIL AND ERROR HANDLER
23100	 XX BAILOC		;IF NONZERO, ADDRESS OF BAIL INTERCEPT ROUTINE
23200	 XX JFRCEL		; USED TO BE XX <NOTHING>
23300	;;%CC% FOR STRNGC OF RECORD STRINGS
23400	 XX RSGCLK		;THE TWO WORD BLOCK REQUIRED BY SGINS
23500	 XX RSGCL2		; AND A SECOND WORD
23600	 XX STBLST		;HEAD OF CHAIN OF STRING DESCR ARRAYS FOR RECORDS
23700	;;%CC% ↑
23800	;;%DA%			
23900	 XX RGCOFF		;SET THIS TO TURN OFF AUTO GC
24000	 XX TGRADJ		;PUT PUSHJ ADR HERE TO ADJUST OWN TRIGGER LEVELS
24100	 XX RGCRHO		;-1.0+1/"%FILL" LEVEL DESIRED FOR RECORD SPACES
24200	;;%BR% -- RHT USED TO BE 2 %DA MADE IT 1 (FROM 4)
24300	 XX SPARUT,1,,		;SPARE USER TABLE ENTRIES
24400	;;%DA% ↑↑
24500	 XX PRTINF		;PRINT OUTPUT INFORMATION  XWD BITS,CHAN
24600	 XX $$PROU		;PRINT OUTPUT TRAP FOR ALL STRINGS
24700	 XX $$FINT		;USER FORMATTING FUNCTION FOR INTEGERS
24800	 XX $$FREL		; "         "       "      "  REALS
24900	 XX $$FITM		; "         "       "      "  ITEMS
25000	 XX $$FSET		; "         "	    "	   "  SETS
25100	 XX $$FLST		; "	    "	    "	   "  LISTS
25200	 XX $$FSTR		; "	    "       "      "  STRINGS
25300	 XX $$FREC		; "         "       "      "  RECORDS
25400	;;%DU%
25500	 XX $$FLRL		;LONG REAL
25600	
25700	;;=I09=	ADD PATH BLOCK FOR USE BY I/O ROUTINES WITH SFD'S
25800	SFDS<
25900	 XX PATHBL,4+SFDLVL,,		;PATH BLOCK
26000	> ;SFDS
26100	
26200	;;%DY% ! GJA/JFR 1-13-77
26300	 XX EXPCHR	;"@" OR "E" FOR REAL NUMBER EXPONENT CHARACTER
26400	;;%DZ% 2! GJA/JFR 1-13-77
26500	 XX SEGBOT	;ADDR WHICH SAIL FREE STORAGE MUST NOT EXCEED
26600			; (DEFAULT TO 400000 = LOWEST ADDR OF USER PURE CODE)
26700	 XX ENDREN	; END OF USER DATA TABLE
26800	
26900	
27000	
27100	
27200	
     

00100	SUBTTL	Global AC Definitions, Indices, Bits
00200	
00300	AC2DATA (GLOBAL AC ASSIGNMENTS)
00400	?P	←17
00500	?SP	←16
00600	?USER	←15
00700	?TEMP	←14
00800	?LPSA	←13
00900	?RF	←←12			;THE ALMIGHTY F REGISTER
01000	?TAC1	←←TEMP
01100	?TAC2	←←LPSA
01200	
01300	BITDATA (BITS FOR %ALLOC SPACE REQUEST BLOCK ENTRIES)
01400	?STDSPC ←←400000	;"INDIRECT" SPECIFICATION OF STANDARD AREA
01500	?WNTADR ←←200000	;ADDRESS OF AREA TO BE STORED AS SPECIFIED
01600	?WNTEND ←←100000	;ADDRESS OF NEXT AREA TO BE STORED AS SPECIFIED
01700	?WNTPDP ←← 40000	;PDP TO AREA TO BE STORED " "
01800	?WNTPDL ←← WNTPDP	;WNTPDP, WNTPDL -- WHAT'S THE DIFFERENCE?
01900	?USRTB  ←← 20000	;RESULT ADDRESSES ARE IN THE USER TABLE
02000	?MINSZ  ←← 10000	;THIS SIZE TO BE USED ONLY IF NO OTHERS GIVEN
02100	
02200	BITDATA (INDICES OF STANDARDLY ALLOCATED AREAS (SEE %ALLOC))
02300	?SYSPD	←← 1		;SYSTEM!PDL
02400	?SYSSPD	←← 2		;STRING!PDL
02500	?STRSP	←← 3		;STRING!SPACE
02600	
02700	BITDATA (INDICES INTO THE FIXED PORTION OF EACH %ALLOC SPACE REQ. BLOCK)
02800	?$ITNO	←←1		;MAX ITEM NUMBER DECLARED THIS COMPILATION
02900	?$NWITM ←←2		;XWD REQUIRED BUCKETS,REQUIRE  NEW!ITEMS 
03000	?$GITNO	←←3		;MAX (MIN?) GLOBAL ITEM NUMBER DECLARED
03100	?$MSLNK	←←4		;POINTER TO MESSAGE PROCEDURE LIST PUT HERE
03200	?$PNMNO	←←5		;REQUIRE n PNAMES PUTS n HERE
03300	?$VRNO	←←6		;VERSION NUMBER
03400	?$SGNM	←←7		;REQUIRED GLOBAL SEGMENT NAME (USUALLY EMPTY)
03500	?$SGD	←←10		;REQUIRED GLOBAL SEGMENT FILE DEVICE
03600	?$SGF	←←11		;" FILE NAME
03700	?$SGPP	←←12		;" PPN
03800	?$TINIT ←←13		; POINTER TO INITIAL ITEM TYPES
03900	?$PINIT ←←14		; POINTER TO INITIAL PRINTNAMES
04000	?$CMVER ←← 15		;com version
04100	?$OBPDA ←← 16		; pointer to outer block pda
04200	?$SPREQ ←← 20		; leaves a spare
04300			; *** SEE ALSO SPCSIZ (TOTAL) IF CHANGE THIS ***
04400	ENDDATA
04500	
04600	
04700	BITDATA (LINK NAMES)
04800	?%STLNK ←← 1
04900	?%SPLNK ←← 2
05000	?%SETLK ←← 3
05100	?%SGROT ←← 4
05200	?%KTLNK ←← 5
05300	?%PDLNK ←← 6
05400	?%INLNK ←← 7
05500	?%RBLNK ←← 10
05600	BAIL<
05700	?%BALNK ←← 11
05800	>;BAIL
05900	;;%CB% ! NEED A NEW LINK TYPE
06000	?%RCLNK ←← 12		;RECORD CLASS LINK
06100	
06200	BITDATA (PROCEDURE DESCRIPTOR INDICES)
06300	
06400		DEFINE PDX(I),
06500			<?I ←← PD.XXX
06600			PD.XXX←←PD.XXX+1
06700	>
06800	PD.XXX	←← 0
06900		PDX	PD.	;0
07000		PDX	PD.ID1	;1
07100		PDX	PD.ID2	;2
07200		PDX	PD.PDB	;3
07300		PDX	PD.NPW	;4
07400		PDX	PD.DSW	;5
07500		PDX	PD.LLW	;6
07600		PDX	PD.DLW	;7
07700		PDX	PD.PDA	;10
07800		PDX	PD.PPD	;11
07900		PDX	PD.PCW	;12
08000		PDX	PD.BDI	;13
08100	
08200	?PD.XXX←←PD.XXX
08300	
08400	BITDATA (TYPE CODES WITHIN RH OF INFOTAB ENTRY)
08500		NOTYPE ←← 1	;NO TYPE AT ALL
08600	        BRKITM ←← 2	;BRACKETED TRIPLE
08700		STTYPE ←← 3	;STRING ITEM
08800		FLTYPE ←← 4	;REAL ITEM
08900		INTYPE ←← 5	;INTEGER ITEM
09000		LSTYPE ←← 7	;LIST ITEM (TYPE SHOULD ALWAYS BE 1 MORE THN SETYPE
09100		SETYPE ←← 6	;SET ITEM
09200		PITTYP ←← 10	;PROCEDURE ITEM
09300		PRCTYP ←← 11	;PROCESS ITEM
09400		EVTTYP ←← 12	;EVENT TYPE ITEM
09500		CTXTYP ←← 13	;CONTEXT ITEM
09600		RFITYP ←← 14	;REFERENCE ITEM
09700		RECTYP ←← 15	;RECORD
09800	;;%BR% -- ADD A FEW & LEAVE ROOM TO GROW
09900		LBLTYP ←← 16	;LABEL
10000		RCLTYP ←← 17	;RECORD CLASS
10100	;;#%%# 2! BY JFR 2-2-75 CLAIM ONE FOR BAIL
10200		ITVTYP ←← 20	;ITEMVAR	***** UNUSED 12-9-76 *****
10300	;;%DU%
10400		LFLTYP ←← 21	;LONG REAL
10500		LINTYP ←← 22	;LONG INTEGER
10600		MXSTYP ←← LINTYP; LAST SIMPLE TYPE
10700		ARRTYP ←← 24	;ARRAYS ARE THIS PLUS SIMPLE TYPE CODE
10800				; used to be 15
10900	;;%BR% ↑
11000		INVTYP ←← MXSTYP+ARRTYP+1; NON-VALID TYPE CODE
11100	
11200	BITDATA (RECORD CLASS TYPE BITS)
11300		NODELC ←← 1	;DO NOT DELETE RECORDS OF THIS CLASS (VIA GC)
11400		CMPLDC ←← 2	;THIS RECORD CLASS IS COMPILED-IN
11500		HASRPS ←← 4	;HAS RPTR / RPTR ARRAY
11600		HASSTR ←← 10	;HAS STRING / STRING ARRAY SUBFIELDS
11700	;;%DU%
11800		HASDBL ←← 20	;HAS DOUBLE (LONG REAL) FIELDS
11900	
12000	BITDATA( PROC DESC STUFF)
12100	?BLKCOD←←17				;BLOCK BOUNDARY CODE
12200	?EOPCOD←←0				;END OF PROC LVI CODE
12300	?AACOD←←1					;ARITH ARRAY
12400	?SACOD←←2					;STRING ARRAY
12500	?SETCOD←←3				;SET
12600	?LACOD←←4					;LIST OR SET ARRAY
12700	?FRCCOD←←5				;FOREACH STATEMENT
12800	?KLCOD←←6				;KILL LIST
12900	?CTXCOD ←← 7				;CONTEXT
13000	?CLNCOD ←← 10				;CLEANUP PROC
13100	?RPCOD ←← 11				;RECORD PTR
13200	?RPACOD ←← 12				;RECORD PTR ARRAY
13300	ENDDATA
13400	
13500	BITDATA (USE OF THE RESERVED ITEMS)
13600	; ANY IS REPRESENTED BY 0
13700		ITMANY ←← 0	;ITEM FOR ANY
13800		MAINPI ←← 1	;ITEM NUMBER OF THE MAIN PROCESS ITEM
13900		UNBND  ←← 2	;UNBOUND (?ITEMVARS ETC)
14000		EVTYPI ←← 3	;THE ITEM EVENT!TYPE
14100		NIC    ←← UNBND	;ITEM GET BACK FROM EMPTY NOTICE QUEUE
14200	;;# # MAKE NIC & UNBOUND THE SAME ITEM -- RHT
14300	;;     I.E. NULL INTERROGATIONS RETURN UNBOUND NOW
14400	
14500		?MAXLOC ←← =10	;MAXIMUM NUMBER OF LOCAL ITEMVARS IN FOREACH
14600		?QBIND ←← 200	;A ? ITMVR (NOT A MP PARM)
14700		?FBIND ←← 100	;A BIND ITMVR(HERE BECAUSE OF STATS)
14800	
14900	BITDATA (THE NAMED BITS FOR REF ITEMS)
15000	;;%BH% RHT ADD TEMP BIT
15100		?TMPB ←← 400000 ; SIGN BIT MEANS A TEMP REF ITEM
15200		?REFB ←← 200000	;USUALLY SET
15300		?QUESB ←← 100000;FOR ? ITEMVARS
15400		?BINDB ←← 40000	;FOR BIND ITEMVAR
15500		?PROCB ←← 20000	;NOT NOW REALLY USED
15600		?ITEMB ←← 10000	; AN ITEM (ITEMVAR)
15700		?ARY2B ←← 4000	;FOR * ARRAY ITEMVAR ARRAY REFERENCES
15800		?MSK6BT ←← 3740 ; BITS FOR SIX BIT TYPE
15900		?MSKUNT ←← 3700	;BIT MASK FOR UNTYPED 
16000	ENDDATA
16100	
16200	;;%AM% MANY USER PHASES 
16300	 SYSPHS←←2			;TWO SYSTEM PHASES
16400	 USRPHS←←3			;THREE USER PHASES (FOR NOW)
16500					; (0, 1, 2) -- 1 IS DEFAULT
16600	
16700	IFN HEDSYM, <		;MAKE AN HONEST ASSEMBLY OUT OF IT
16800		TITLE	HEAD
16900		END
17000	>;IFN HEDSYM
17100