--- /dev/null
+; THE FOLLOWING INFORMATION IS MEANT AS GUIDE TO THE CARE AND FEEDING\r
+; OF MUDDLE. IT ATTEMPTS TO SPECIFY PROGRAMMING CONVENTIONS AND\r
+; SUPPLY SYMBOLS AND MACROS NEEDED BY ALL MODULES IN A MUDDLE.\r
+\r
+; FOR EFFICIENCY THE STANDARD MODE OF RUNNING IS UNINTERRUPTABLE.\r
+; WITH EXPLICIT CHECKS FOR PENDING INTERRUPTS. THE INTGO MACRO\r
+; PERFORMS THE APPROPRIATE CHECK\r
+\r
+; FOR INTERRUPTS TO WORK IN INTERRUPTABLE CODE, IT MUST\r
+; BE ABSOLUTELY PURE. BETWEEN ANY TWO INSTRUCTIONS OF\r
+; INTERRUPTABLE CODE THERE MAY BE AN INTERUPT IN WHICH\r
+; A COMPACTING GARBAGE COLLECTION MAY OCCUR.\r
+; NOTE: A SCRATCH AC MAY CONTAIN POINTERS TO GC SPACE IN\r
+; INTERRUPTABLE CODE OR DURING AN INTGO IF THE TYPE CODE FOR THAT AC'S\r
+; SLOT IN THE PROCESS VECTOR IS SET TO REFLECT ITS CONTENTS.\r
+\r
+; ALL ATOM POINTERS WILL BE REFERRED TO IN ASSEMBLED CODE BY\r
+; MQUOTE <PNAME> -- FOR NORMAL ATOMS\r
+; EQUOTE <PNAME> -- FOR ERROR COMMENT ATOMS\r
+\r
+; FUNCTION CALLS TO INITIAL FUNCTIONS WILL BE CALLED USING THE FOLLOWING:\r
+\r
+; MCALL N,<PNAME> ;SEE MCALL MACRO\r
+; ACALL AC,<PNAME> ; SEE ACALL MACRO\r
+\r
+; UNLESS PNAME IS NOT A VALID MIDAS SYMBOL, IN WHICH CASE ANOTHER INTERNAL \r
+; NAME WILL BE USED\r
+\r
+; WHEN CALLING A SUBR THROUGH AN INDEX OR INDIRECT, THE UUOS GENERATED\r
+; BY THE MACROS SHOULLD BE USED.\r
+; THESE ARE .MCALL AND .ACALL -- EXAMPLE:\r
+; .ACALL A,@(B)\r
+\r
+\r
+\r
+\r
+\r
+\f; ORGANIZATION OF CORE STORAGE IN THE MUDDLE SYSTEM (ENVIRONMENT)\r
+\r
+; 20: SPECIAL CODE FOR UUO AND INTERUPTS\r
+\r
+;CODBOT: WORD CONTAINING LOCATION OF BOTTOMMOST WORD OF IMPURE CODE\r
+\r
+; --IMPURE CODE--\r
+\r
+;CODTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST WORD OF CODE\r
+\r
+;PARBOT: WORD CONTAINING LOCATION OFBOTTOMMOST LIST\r
+\r
+; --PAIRSS--\r
+\r
+;PARTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST PAIR WORD\r
+\r
+;VECBOT: WORD CONTAINING LOCATION OFFIRST WORD OF VECTORS\r
+\r
+; --VECTORS--\r
+\r
+;VECTOP: WORD CONTAINING LOCATION OFWORD AFTER TOPMOST VECTOR\r
+; THE WORD BEFORE VECTOP IS THE DOPE FOR THE LAST VECTOR\r
+\r
+; --GC MARK PDL (SOMETIMES NOT THERE)--\r
+\r
+;CORTOP: TOP OF LOW-SEGMENT/IMPURE CORE\r
+\r
+;600000: START OF PURE CODE (SHARED ALSO)\r
+\r
+; --PURE CODE--\r
+\r
+;\r
+\r
+\r
+\f; BASIC DATA TYPES PRE-DEFINED IN MUDDLE\r
+\r
+; PRIMITIVE DATA TYPES\r
+; IF T IS A DATA TYPE THEN $T=[T,,0]\r
+\r
+; DATA TYPES ARE ASSIGNED BY THE TYPMAK MACRO IN SOME ARBITRARY ORDER\r
+\r
+\r
+;TLOSE ;ILLEGAL TYPE (USED PRIMARILY FOR ERRORS)\r
+;TFIX ;FIXED POINT\r
+;TFLOAT ;FLOATING POINT\r
+;TCHRS ;WORD OF UP TO 5 ASCII CHARACTERS\r
+;TENTRY ; MARKS BEGINNING OF A FRAME ON TP STACK\r
+;TSUBR ;BUILT IN FUNCTION WITH EVALUATED ARGS\r
+;TFSUBR ;BUILT IN FUNCTION WITH UN-EVALUATED ARGS\r
+;TUNBOU ;TYPE GIVEN TO UNBOUND OR UNASSIGNED ATOM\r
+;TBIND ;MARKS BEGINNING OF BINDING BLOCK ON TP STACK\r
+;TILLEG ;POINTER PREVIOUSLY HERE NOW ILLEGAL\r
+;TTIME ;UNIQUE NUMBER (SEE FLOAD)\r
+;TLIST ;POINTER TO LIST ELEMENT\r
+;TFORM ;POINTER TO LIST ELEMENT BUT USED AS AN EXPRESSION\r
+;TSEG ;SAME AS FORM BUT VALUE IS MUST BE STRUCTURED AND IS USED \r
+; ;AS A SEGMENT\r
+;TEXPR ;POINTER TO LIST ELEMENT BUT USED AS AN INTERPRETIVE FUNCTION\r
+;TFUNAR ;LIKE TEXPR BUT HAS PARTIALLY EVALUATED ARGS\r
+;TLOCL ;LOCATIVE TO LIST ELEMENT (SEE AT,IN AND SETLOC)\r
+;TFALSE ;NOT TRUTH\r
+;TDEFER ;POINTER TO REAL VALUE (ONLY APPEARS AS CAR OF LIST)\r
+;TUVEC ;AOBJN POINTER TO UNIFORM VECTOR\r
+;TOBLS ;AOBJN TO UVEC OF LISTS OF ATOMS. USED AS SYMBOL TABLE\r
+;TVEC ;VECTOR (AOBJN POINTER TO GENERALIZED VECTOR)\r
+;TCHAN ;VECTOR OF INFO DESCRIBING AN I/O CHANNEL\r
+;TLOCV ;LOCATIVE TO GENERAL VECTOR (SEE AT,IN AND SETLOC)\r
+;TTVP ;POINTER TO TRANSFER VECTOR\r
+;TBVL ;BEGINS A VECTOR BINDING ON THE TP STACK\r
+;TTAG ;VECTOR OF INFO SPECIFYING A GENERALIZED TAG\r
+;TPVP ;POINTER TO PROCESS VECTOR\r
+;TLOCI ;POINTER TO ATOM VALUE ON STACK (INTERNAL NOT SEEN BY USER)\r
+;TTP ;POINTER TO MAIN MARKED STACK\r
+;TSP ;POINTER TO CURRENT BINDINGS ON STACK\r
+;TLOCS ;LOCATIVE TO STACK (NOT CURRENTLY USED)\r
+;TPP ;POINTER TO PLANNER PDL (NOT CURRENTLY USED)\r
+;TPLD ;POINTER TO P-STACK (UNMARKED)\r
+;TARGS ;POINTER TO AN ARG BLOCK (HAIRY KLUDGE)\r
+;TAB ;SAVED AB (NOT GIVEN TO USER)\r
+;TTB ;SAVED TB (NOT GIVEN TO USER)\r
+;TFRAME ;USER POINTER TO STACK FRAME\r
+;TCHSTR ;BYTE POINTER TO STRING OF CHARS (COUNT ALSO INCLUDED)\r
+;TATOM ;POINTER TO ATOM\r
+;TLOCD ;USER LOCATIVE TO ATOM VALUE\r
+;TBYTE :POINTER TO ARBITRARY BYTE STRING (NOT CURRENTLY USED)\r
+;TENV ;USER POINTER TO FRAME USED AS AN ENVIRONMENT\r
+;TACT ;USER POINTER TO FRAME FOR A NAMED ACTIVATION\r
+;TASOC ;ASSOCIATION TRIPLE\r
+;TLOCU ;LOCATIVE TO UVECTOR ELEMENT (SEE AT,IN AND SETLOC)\r
+;TLOCS ;LOCATIVE TO A BYTE IN A CHAR STRING (SEE AT,IN AND SETLOC)\r
+;TLOCA ;LOCATIVE TO ELEMENT IN ARG BLOCK\r
+;TENTS ;NOT USED\r
+;TBS ; ""\r
+;TPLDS ; ""\r
+;TPC ; ""\r
+;TINFO ;POINTER TO LIST ELEMENT USED WITH ARG POINTERS\r
+;TNBS ;NOT USED\r
+;TBVLS ;NOT USED\r
+;TCSUBR ;CARE SUBR (USED ONLY WITH CUDDLE SEE -- WJL)\r
+;TWORD ;36-BIT WORD\r
+;TRSUBR ;COMPILED PROGRAM (ACTUALLY A VECTOR POINTER)\r
+;TCODE ;UNIFORM VECTOR OF INSTRUCTIONS\r
+;TCLIST ;NOT USED\r
+;TBITS ;GENERAL BYTE POINTER\r
+;TSTORA ;POINTER TO NON GC IMPURE STUFF\r
+;TPICTU ;E&S CODE IN NON GC SPACE\r
+;TSKIP ;ENVIRONMENT SPLICE\r
+;TLINK ;LEXICAL LINK \r
+;TINTH ;INTERRUPT HEADER\r
+;THAND ;INTERRUPT HANDLER\r
+;TLOCN ;LOCATIVE TO ASSOCIATION\r
+;TDECL ;POINTER TO LIST OF ATOMS AND TYPE DECLARATIONS\r
+;TDISMI ;TYPE MEANING DONT RUN REST OF HANDLERS\r
+;TDCLI ; INTERNAL TYPE FOR SAVED FUNCTION BODY\r
+;TMENT ; POINTER TO MAIN ENTRY OF WHICH THIS IS PART\r
+;TENTER ; NON-MAIN ENTRY TO AN RSUBR\r
+;TSPLICE ; RETURN FROM READ MACRO MEANS SPLICE SUBELEMENTS IN\r
+;TPCODE ; PURE CODE POINTER IN FUNNY FORMAT\r
+;TTYPEW : TYPE WORD\r
+;TTYPEC ; TYPE CODE\r
+;TGATOM ; ATOM WITH GVALUE\r
+;TREADA ; READ ACTIVATION HACK\r
+;TUNWIN ; INTERNAL FOR UNWIND SPEC ON STACK\r
+;TUBIND ; BINDING OF UNSPECIAL ATOM\r
+;TMACRO ; EVAL MACRO\r
+\f\r
+; STORGE ALLOCATION TYPES. ALLOCATED BY AN "IRP" LATER IN THIS FILE\r
+\r
+\r
+;S1WORD ;UNMARKED STUFF OF NO INTEREST TO AGC\r
+;S2WORD ;POINTERS TO ELEMENTS IN PAIR SPACE (LIST, FORM, EXPR ETC.)\r
+;S2DEFR ;DEFERRED LIST VALUES\r
+;SNWORD ;POINTERS TO UNIFORM VECTORS\r
+;S2NWOR ;POINTERS TO GENERAL VECTORS\r
+;STPSTK ;STACK POINTERS\r
+;SPSTK ;UNMARKED STACK POINTERS\r
+;SARGS ;POINTERS TO ARG BLOCKS (USER)\r
+;SABASE ;POINTER TO ARG BLOCK (INTERNAL)\r
+;STBASE ;POINTER TO FRAME (INTERNAL)\r
+;SFRAME ;POINTER TO FRAME (USER)\r
+;SBYTE ;GENERAL BYTE POINTER\r
+;SATOM ;POINTER TO ATOM\r
+;SLOCID ;POINTER TO VALUE CELL OF ATOM\r
+;SPVP ;PROCESS VECTORS\r
+;SCHSTR ;ASCII BYTE POINTER\r
+;SASOC ;POINTER TO ASSOCIATION BLOCK\r
+;SINFO ;LIST CELL CONTAINING EXTRA ARGBLOCK INFO\r
+;SSTORE ;NON GC STORGAGE POINTER\r
+;SLOCA ;ARG BLOCK LOCATIVE\r
+;SLOCD ;USER VALUE CELL LOCATIVE\r
+;SLOCS ;LOCATIVE TO STRING\r
+;SLOCU ;LOCATIVE TO UVECTOR\r
+;SLOCV ;LOCATIVE TO GENERAL VECTOR\r
+;SLOCL ;LOCATIVE TO LIST ELEENT\r
+;SLOCN ;LOCATIVE TO ASSOCIATION\r
+;SGATOM ;REALLY ATOM BUT SPECIAL GC HACK\r
+\r
+;NOTE: TO FIND OUT IF A GIVEN STORAGE ALLOCATION TYPE NEEDS TO BE DEFERRED, REFER TO\r
+;LOCATION "MKTBS:" OFFSET BY THE STORAGE TYPE. IF IT IS <0, THAT SAT NEEDS TO BE DEFERRED.\r
+;\r
+;ONE WAY TO DO THIS IS TO PUT A REAL TYPE CODE IN AC A AND PUHSJ P,NWORDT\r
+; A WILL CONTAIN 1 IF NO DEFERRED NEEDED OR 2 IF DEFER IS NEEDED\r
+\r
+\f; SOME MUDDLE DATA FORMATS\r
+\r
+; FORMAT OF LIST ELEMENT\r
+\r
+; WORD 1: SIGN BIT, RESERVED FOR GARBAGE COLLECTOR\r
+; BITS 1-17 TYPE OF FIRST ELEMENT OF LIST\r
+; BITS 18-35 POINTS TO REST OF LIST (ALWAYS ANOTHER LIST OR 0)\r
+;\r
+; WORD 2: DATUM OF FIRST ELEMENT OF LIST OF TYPE SPECIFIED\r
+;\r
+; IF DATUM REQUIRES 54 BITS TO SPECIFY, TYPE WILL BE "TDEFER" AND\r
+; VALUE WILL BE AN 18 BIT POINTER TO FULL 2 WORD PAIR\r
+\r
+\r
+\r
+;FORMAT OF GENERAL VECTOR (OF N ELEMENTS)\r
+;POINTED INTO BY AOBJN POINTER\r
+;A GENERAL VECTOR HAS FEWER THAN 2^16 ELEMENTS\r
+\r
+\r
+; TYPE<1> TYPE OF FIRST OBJECT (THE RIGHT HALF OF THE TYPE WORD MIGHT BE NONZERO)\r
+; OBJ<1> OBJECT OF SPECIFIED TYPE\r
+; TYPE<2>\r
+; OBJ<2>\r
+; .\r
+; .\r
+; .\r
+; TYPE<N>\r
+; OBJ<N>\r
+; VD(1)-VECTOR DOPE--SIGN-NOT UNIFORM, BITS 1-17 TYPE,,18-35 GROWTH/SHRINKAGE\r
+; VD(2)-VECTOR DOPE--SIGN-G.C.; BITS 1-17 ARE 2*N+1,,18-35 G.C. RELOCATION EITHER UP OR DOWN\r
+\r
+\r
+\f;SPECIAL VECTORS IN THE INITIAL SYSTEM\r
+\r
+;THE SYSTEM KEEPS RELEVANT INFORMATION CONCERNING ALL TYPES\r
+;IN A TYPE VECTOR, TYPVEC, WHICH MAY BE INDEXED BY THE TYPE NUMBER\r
+;FOUND IN THE TYPE FIELD OF ANY GOODIE. TABLES APLTYP AND EVLTYP ALSO EXIST\r
+;THEY SPECIFY HOW DIFFERENT TYPES EVAL AND APPLY.\r
+\r
+;TYPE IN AC A, PUSHJ P,SAT RETURNS STORAGE TYPE IN A\r
+\r
+;TYPE TO NAME OF TYPE TRANSLATION TABLE\r
+\r
+; TATOM,,<STORAGE ALLOCATION TYPE>+CHBIT+TMPLBT\r
+\r
+; ATOMIC NAME\r
+\r
+; CHBIT ON MEANS YOU CANT RANDOMLY CHTYPE INTO THIS TYPE\r
+; TMPLBT ON MEANS A TEMPLATE EXISTS DESCRIBING THIS\r
+\r
+;AN ATOM IS A BLOCK IN VECTOR SPACE WITH THE FOLLOWING FORMAT\r
+\r
+; <TUNBOU OR TLOCI>,,<0 OR BINDID> ; TLOCI MEANS VAL EXISTS.\r
+ ; 0 MEANS GLOBAL\r
+; ; BINDID SPECS ENV IN\r
+ ; WHICH LOCAL VAL EXISTS\r
+; <LOCATIVE TO VALUE OR 0>\r
+; <POINTER TO OBLIST OR 0>\r
+; <ASCII /PNAME/>\r
+; <400000+SATOM,,0>\r
+; <LNTH>,,0 (SIGN BIT FOR G.C. RH FOR G.C. RELOCATION)\r
+\r
+;POINTERS TO INITIAL STRUCTURES AND ATOMS NEEDED BY COMPILED CODE\r
+;WILL BE POINTED TO BY THE TRANSFER VECTOR\r
+;A POINTER TO THIS VECTOR ALWAYS EXISTS IN AC TVP\r
+;THE FORMAT OF THIS VECTOR IS:\r
+\r
+; TYPE,,0\r
+; VALUE\r
+; .\r
+; .\r
+; .\r
+; TV DOPE WORDS\r
+\r
+\r
+;INFORMATION CONCERNING EACH PROCESS IS KEPT IN THE PROCESS VECTOR\r
+;A POINTER TO THE CURRENT PROCESS ALWAYS EXISTS IN AC PVP\r
+;THE FORMAT OF A PROCESS VECTOR IS:\r
+\r
+; TFIX,,0\r
+; PROCID ;UNIQUE ID OF THIS PROCESS\r
+\r
+; 20 ELEMENTS (I.E. 40 WORDS) CONTAINIG SAVED ACS\r
+; CAN BE REFERENCED SYMBOLICALLY USING SYMBOLS\r
+; OF THE FORM AC!STO(PVP)\r
+\r
+; OTHER PROCESS LOCAL INFO LIKE LEXICAL STATE, PROCESS STATE,LAST RESUMER\r
+; .\r
+; .\r
+; .\r
+; PV DOPE WORDS\r
+\r
+\r
+\r
+\r
+;FORMAT OF PUSH DOWN STACKS USED AND CONVENTIONS\r
+\r
+\fIF1 [\r
+PRINTC /MUDDLE - INSERT FILE FOR ALL PROGRAMS\r
+/\r
+]\r
+\r
+IF2 [PRINTC /MUDDLE\r
+/\r
+]\r
+;AC ASSIGNMNETS\r
+\r
+P"=17 ;THE UNMARKED PDL POINTER (USED BY THE OUTSIDE WORLD AND MUDDLE)\r
+R"=16 ;REFERENCE BASE FOR RSUBRS\r
+M"=15 ;CODE BASE FOR RSUBRS\r
+SP"=14 ;SPECIAL PDL (USED BY MUDDLE FOR VARIABLE BINDINGS)(SPECIAL PDL IS PART OF TP)\r
+TP"=13 ;MARKED PDL (USED BY MUDDLE FOR ARGS TO FUNCTIONS \r
+ ;AND MARKED TEMPORARIES)\r
+TB"=12 ;MARKED PDL BASE POINTER AND CURRENT FRAME POINTER \r
+AB"=11 ;ARGUMENT PDL BASE (MARKED)\r
+ ;AB IS AN AOBJN POINTER TO THE ARGUMENTS\r
+TVP"=7 ;TRANSFER VECTOR POINTER\r
+PVP"=6 ;PROCESS VECTOR POINTER\r
+\r
+;THE FOLLOWING ACS ARE 'SCRATCH' FOR MUDDLE\r
+\r
+A"=1 ; A AND B CONTAIN TYPE AND VALUE UPON FUNCTION RETURNS\r
+B"=2\r
+C"=3\r
+D"=4\r
+E"=5\r
+\r
+NIL"=0 ;END OF LIST MARKER\r
+\r
+;MACRO TO DEFINE MAIN IF NOT DEFINED\r
+\r
+IF1 [\r
+DEFINE SYSQ\r
+ ITS==1\r
+ IFE <<<.AFNM1>_-24.>-<SIXBIT / T./>>,ITS==0\r
+ IFN ITS,[PRINTC /ITS VERSION\r
+/]\r
+ IFE ITS,[PRINTC /TENEX VERSION\r
+/]\r
+ \r
+ TERMIN\r
+\r
+DEFINE DEFMAI ARG,\D\r
+ D==.TYPE ARG\r
+ IFE <D-17>,ARG==0\r
+ EXPUNGE D\r
+ TERMIN\r
+]\r
+\r
+DEFMAI MAIN\r
+DEFMAI READER\r
+\r
+IF2,EXPUNGE DEFMAI\r
+\r
+\f;DEFINE TYPES AND $TYPES AND IF MAIN NOT 0, MAKE THE $TYPE WORDS\r
+\r
+\r
+IFN MAIN,NUMPRI==-1\r
+\r
+IF1 [\r
+NUMPRI==-1 ;NUMBER OF PRIMITIVE TYPES\r
+\r
+DEFINE TYPMAK SAT,LIST\r
+IRP A,,[LIST]\r
+NUMPRI==NUMPRI+1\r
+IRP B,,[A]\r
+T!B==NUMPRI\r
+.GLOBAL $!T!B\r
+IFN MAIN,[$!T!B=[T!B,,0]\r
+]\r
+.ISTOP\r
+TERMIN\r
+IFN MAIN,[\r
+RMT [ADDTYP SAT,A\r
+]]\r
+TERMIN\r
+TERMIN\r
+\r
+;MACRO TO ADD STUFF TO TYPE VECTOR\r
+\r
+IFN MAIN,[\r
+DEFINE ADDTYP SAT,TYPE,NAME,CHF,\CH\r
+ IFSE [CHF],CH==0\r
+ IFSN [CHF],CH==CHBIT\r
+ IFSE [NAME]IN,CH==CHBIT\r
+ IFSN [CHF]-1,[\r
+ TATOM,,CH+SAT\r
+ IFSN [NAME],[IFSE [NAME]IN,MQUOTE INTERNAL\r
+ IFSN [NAME]IN,MQUOTE [NAME]\r
+ ]\r
+ IFSE [NAME],MQUOTE TYPE\r
+ ]\r
+ IFSE [CHF]-1,[\r
+ TATOM,,CH+SAT\r
+ IMQUOTE [NAME]\r
+ ]\r
+ TERMIN\r
+]\r
+]\r
+IF2 [IFE MAIN,[DEFINE TYPMAK SAT,LIST\r
+ RMT [EXPUN [LIST]\r
+]\r
+ TERMIN\r
+]\r
+]\r
+\r
+;DEFINE THE STORAGE ALLOCATION TYPES IN THE WORLD\r
+\r
+\r
+NUMSAT==0\r
+GENERAL==400000,,0 ;FLAG FOR BEING A GENERAL VECTOR\r
+\r
+IF1 [\r
+DEFINE PRMACR HACKER\r
+\r
+IRP A,,[1WORD,2WORD,2DEFRD,NWORD,2NWORD,TPSTK,PSTK,ARGS\r
+ABASE,TBASE,FRAME,BYTE,ATOM,LOCID,PVP,CHSTR,ASOC,INFO,STORE\r
+LOCA,LOCD,LOCS,LOCU,LOCV,LOCL,LOCN,GATOM,LOCT]\r
+\r
+HACKER A\r
+\r
+TERMIN\r
+TERMIN\r
+\r
+\r
+\r
+DEFINE DEFINR B\r
+ NUMSAT==NUMSAT+1\r
+ S!B==NUMSAT\r
+ TERMIN\r
+]\r
+\r
+PRMACR DEFINR\r
+\r
+STMPLT==NUMSAT+1\r
+\r
+;MACRO FOR SAVING STUFF TO DO LATER\r
+\r
+.GSSET 4\r
+\r
+DEFINE HERE G00002,G00003\r
+G00002!G00003!TERMIN\r
+\r
+IF1 [\r
+DEFINE RMT A\r
+HERE [DEFINE HERE G00002,G00003\r
+G00002!][A!G00003!TERMIN]\r
+TERMIN\r
+]\r
+\r
+\r
+RMT [EXPUNGE GENERAL,NUMSTA\r
+]\r
+\r
+DEFINE XPUNGR A\r
+ EXPUNGE S!A\r
+ TERMIN\r
+\r
+IFE MAIN,[\r
+RMT [PRMACR XPUNGR\r
+]\r
+]\r
+\r
+C.BUF==1\r
+C.PRIN==2\r
+C.BIN==4\r
+C.OPN==10\r
+C.READ==40\r
+\r
+; FLAG INDICATING VECTOR FOR GCHACK\r
+\r
+.VECT.==40000\r
+\r
+; DEFINE SYMBLOS FOR VARIOUS OBLISTS\r
+\r
+SYSTEM==0 ;MAIN SYSTEM OBLIST\r
+ERRORS==1 ;ERROR COMMENT OBLIST\r
+INTRUP==2 ;INERRUPT OBLIST\r
+MUDDLE==3 ;MUDDLE GLOBAL SYMBOLS (ADDRESSES)\r
+\r
+RMT [EXPUNGE SYSTEM,ERRORS,INTRUP\r
+]\r
+; DEFINE SYMBOLS FOR PROCESS STATES\r
+\r
+RUNABL==1\r
+RESMBL==2\r
+RUNING==3\r
+DEAD==4\r
+BLOCKED==5\r
+\r
+IFE MAIN,[RMT [EXPUNGE RESMBL,RUNABL,RUNING,DEAD,BLOCKED\r
+]\r
+]\f;BUILD THE TYPE CODES AND ADD STUFF TO TYPVEC AND DEFINE $!TYPE)\r
+\r
+IFN MAIN,[RMT [SAVE==.\r
+ LOC TYPVLC\r
+ ]\r
+ ]\r
+\r
+\r
+TYPMAK S1WORD,[[LOSE],FIX,FLOAT,[CHRS,CHARACTER],[ENTRY,IN],[SUBR,,1],[FSUBR,,1]]\r
+TYPMAK S1WORD,[[UNBOUND,,1],[BIND,IN],[ILLEGAL,,1],TIME]\r
+TYPMAK S2WORD,[LIST,FORM,[SEG,SEGMENT],[EXPR,FUNCTION],[FUNARG,CLOSURE]]\r
+TYPMAK SLOCL,[LOCL]\r
+TYPMAK S2WORD,[FALSE]\r
+TYPMAK S2DEFRD,[[DEFER,IN]]\r
+TYPMAK SNWORD,[[UVEC,UVECTOR],[OBLS,OBLIST,-1]]\r
+TYPMAK S2NWORD,[[VEC,VECTOR],[CHAN,CHANNEL,1]]\r
+TYPMAK SLOCV,[LOCV]\r
+TYPMAK S2NWORD,[[TVP,IN],[BVL,IN],[TAG,,1]]\r
+TYPMAK SPVP,[[PVP,PROCESS]]\r
+TYPMAK STPSTK,[[LOCI,IN],[TP,IN],[SP,IN],[LOCS,IN]]\r
+TYPMAK S2WORD,[[MACRO]]\r
+TYPMAK SPSTK,[[PDL,IN]]\r
+TYPMAK SARGS,[[ARGS,TUPLE]]\r
+TYPMAK SABASE,[[AB,IN]]\r
+TYPMAK STBASE,[[TB,IN]]\r
+TYPMAK SFRAME,[FRAME]\r
+TYPMAK SCHSTR,[[CHSTR,STRING]]\r
+TYPMAK SATOM,[ATOM]\r
+TYPMAK SLOCID,[LOCD]\r
+TYPMAK SBYTE,[BYTE]\r
+TYPMAK SFRAME,[[ENV,ENVIRONMENT],[ACT,ACTIVATION,1]]\r
+TYPMAK SASOC,[ASOC]\r
+TYPMAK SLOCU,[LOCU]\r
+TYPMAK SLOCS,[LOCS]\r
+TYPMAK SLOCA,[LOCA]\r
+TYPMAK S1WORD,[[CBLK,IN]]\r
+TYPMAK STMPLT,[[TMPLT,TEMPLATE]]\r
+TYPMAK SLOCT,[LOCT]\r
+ ;THE FOLLOWING TYPES (THROUGH CSUBR) CAN PROBABLY BE RECYCLED\r
+TYPMAK S1WORD,[[PC,IN]]\r
+TYPMAK SINFO,[[INFO,IN]]\r
+TYPMAK SATOM,[[BNDS,IN]]\r
+TYPMAK S2NWORD,[[BVLS,IN]]\r
+TYPMAK S1WORD,[[CSUBR,,1]]\r
+\r
+TYPMAK S1WORD,[[WORD]]\r
+TYPMAK S2NWORD,[[RSUBR,,1]]\r
+TYPMAK SNWORD,[CODE]\r
+ ;TYPE CLIST CAN PROBABLY BE RECYCLED\r
+TYPMAK S2WORD,[[CLIST,IN]]\r
+TYPMAK S1WORD,[[BITS]]\r
+TYPMAK SSTORE,[STORAGE,PICTURE]\r
+TYPMAK STPSTK,[[SKIP,IN]]\r
+TYPMAK SATOM,[[LINK,,1]]\r
+TYPMAK S2NWORD,[[INTH,IHEADER,1],[HAND,HANDLER,1]]\r
+TYPMAK SLOCN,[[LOCN,LOCAS]]\r
+TYPMAK S2WORD,[DECL]\r
+TYPMAK SATOM,[DISMISS]\r
+TYPMAK S2WORD,[[DCLI,IN]]\r
+TYPMAK S2NWORD,[[ENTER,RSUBR-ENTRY,1]]\r
+TYPMAK S2WORD,[SPLICE]\r
+TYPMAK S1WORD,[[PCODE,PCODE,1],[TYPEW,TYPE-W,1],[TYPEC,TYPE-C,1]]\r
+TYPMAK SGATOM,[[GATOM,IN]]\r
+TYPMAK SFRAME,[[READA,,1]]\r
+TYPMAK STBASE,[[UNWIN,IN]]\r
+TYPMAK S1WORD,[[UBIND,IN]]\r
+IFN MAIN,[RMT [LOC SAVE\r
+ ]\r
+ ]\r
+IF2,EXPUNGE TYPMAK,DOTYPS\r
+\f\r
+RMT [EQUALS XP EXPUNGE\r
+IF2,XP STMPLT\r
+]\r
+IF1 [\r
+\r
+DEFINE EXPUN LIST\r
+ IRP A,,[LIST]\r
+ IRP B,,[A]\r
+ EXPUNGE T!B\r
+ .ISTOP\r
+ TERMIN\r
+ TERMIN\r
+ TERMIN\r
+]\r
+\r
+\r
+TYPMSK==17777\r
+MONMSK==TYPMSK#777777\r
+SATMSK==777\r
+CHBIT==1000\r
+TMPLBT==2000\r
+\r
+IF1 [\r
+DEFINE GETYP AC,ADR\r
+ LDB AC,[221500,,ADR]\r
+ TERMIN\r
+\r
+DEFINE GETYPF AC,ADR\r
+ LDB AC,[003700,,ADR]\r
+ TERMIN\r
+\r
+DEFINE MONITO\r
+ .WRMON==200000\r
+ .RDMON==100000\r
+ .EXMON== 40000\r
+ .GLOBAL .MONWR,.MONRD,.MONEX\r
+ RMT [IF2 IFE MAIN, XP .WRMON,.RDMON,.EXMON\r
+]\r
+ TERMIN\r
+]\r
+\r
+IFN MAIN,MONITO\r
+\r
+IFE MAIN,[RMT [XP SATMSK,TYPMSK,MONMSK,CHBIT\r
+]\r
+]\r
+\f;MUDDLE WIDE GLOBALS\r
+\r
+;DEFINE ENTRIES IN PROCESS VECTOR AS BEING GLOBAL\r
+\r
+IF1 [\r
+IRP A,,[0,A,B,C,D,E,PVP,TVP,TP,TB,AB,P,PB,SP,M,R]\r
+.GLOBAL A!STO\r
+TERMIN\r
+\r
+.GLOBAL CALER1,FINIS,VECTOP,VECBOT,INTFLG\r
+\r
+;GLOBALS FOR MACROS IN VECTOR AND PAIR SPACE\r
+\r
+.GLOBAL VECLOC,PARLOC,TVBASE,TVLOC,PVLOC,PVBASE,SQUTBL,SQULOC\r
+.GLOBAL PARTOP,CODTOP,HITOP,HIBOT,SPECBIND,LCKINT\r
+.GLOBAL GETWNA,WNA,TFA,TMA,WRONGT,WTYP,WTYP1,WTYP2,WTYP3,CALER,CALER1\r
+]\r
+\r
+\r
+;STORAGE ALLOCATIN SPECIFICATION GLOBALS\r
+\r
+NSUBRS==600. ; ESTIMATE OF # OF SUBRS IN WOLD\r
+TPLNT"==2000 ;TEMP PDL LENGTHH\r
+GSPLNT==2000 ;INITIAL GLOBAL SP\r
+GCPLNT"==100. ;GARBAGE COLLECTOR'S PDL LENGTH\r
+PVLNT"==100 ;LENGTH OF INITIAL PROCESS VECTOR\r
+TVLNT"==6000 ;MAX TRANSFER VECTOR\r
+ITPLNT"==100 ;TP FOR GC\r
+PLNT"==1000 ;PDL FOR USER PROCESS\r
+\r
+;LOCATIONS OF VARIOUS STORAGE AREAS\r
+\r
+PARBASE"==32000 ;START OF PAIR SPACE\r
+VECBASE"==44000 ;START OF VECTOR SPACE\r
+IFN MAIN,[PARLOC"==PARBASE\r
+VECLOC"==VECBASE\r
+]\r
+\f\r
+;INITIAL MACROS\r
+\r
+;SYMBLOS ASSOCIATED WITH STACK FRAMES\r
+;TB POINTS TO CURRENT FRAME, THE SYMBOLS BELOW ARE OFFSETS ON TB\r
+\r
+FRAMLN==7 ;LENGTH OF A FRAME\r
+FSAV==-7 ;POINT TO CALLED FUNCTION\r
+OTBSAV==-6 ;POINT TO PREVIOUS FRAME AND CONTAINS TIME\r
+ABSAV==-5 ;ARGUMENT POINTER\r
+SPSAV==-4 ;BINDING POINTER\r
+PSAV==-3 ;SAVED P-STACK\r
+TPSAV==-2 ;TOP OF STACK POINTER\r
+PCSAV==-1 ;PCWORD\r
+\r
+RMT [EXPUNGE FRAMLN\r
+]\r
+IFE MAIN,[RMT [EXPUNGE PCSAV TPSAV SPSAV PSAV ABSAV FSAV OTBSAV \r
+]\r
+]\r
+\r
+;CALL MACRO\r
+; ARGS ARE PUSHED ON THE STACK AS TYPE VALUE PAIRS\r
+\r
+.GLOBAL .MCALL,.ACALL,FINIS,CONTIN,.ECALL,FATINS\r
+\r
+; CALL WITH AN ASSEMBLE TIME KNOWN NUMBER OF ARGUMENTS\r
+\r
+IF1 [\r
+DEFINE MCALL N,F\r
+ .GLOBAL F\r
+ IFGE <17-N>,.MCALL N,F\r
+ IFL <17-N>,[PRINTC /LOSSAGE AT MCALL - TOO MANY ARGS\r
+/\r
+ .MCALL F\r
+ ]\r
+ TERMIN\r
+\r
+; CALL WITH RUN TIME KNOWN NUMBER OF ARGS IN AC SPECIFIED BY N\r
+\r
+DEFINE ACALL N,F\r
+ .GLOBAL F\r
+ .ACALL N,F\r
+ TERMIN\r
+\r
+; STANDARD SUBROUTINE RETURN\r
+\r
+; JRST FINIS\r
+\r
+; ARGUMENTS WILL NO LONGER BE ON THE STACK WHEN RETURN HAS HAPPENED\r
+; VALUE SHOULD BE IN A AND B\r
+\r
+;CHECK THAT THE ENTRY POINT WAS CALLED WITH N ARGUMENTS\r
+\r
+DEFINE ENTRY N\r
+ IFSN N,,[\r
+ HLRZ A,AB\r
+ CAIE A,-2*N\r
+ JSP E,GETWNA]\r
+TERMIN\r
+\f\r
+\r
+; MACROS ASSOCIATED WIT INTERRUPT PROCESSING\r
+;INTERRUPT IF THERE IS A WAITING INTERRUPT\r
+\r
+DEFINE INTGO\r
+ SKIPGE INTFLG\r
+ JSR LCKINT\r
+TERMIN\r
+\r
+;TO BECOME INTERRUPTABLE\r
+\r
+DEFINE ENABLE\r
+ AOSN INTFLG\r
+ JSR LCKINT\r
+TERMIN\r
+\r
+;TO BECOME UNITERRUPTABLE\r
+\r
+DEFINE DISABLE\r
+ SETZM INTFLG\r
+TERMIN\r
+]\r
+\fIF1 [\r
+;MACRO TO BUILD TYPE DISPATCH TABLES EASILY\r
+\r
+DEFINE TBLDIS NAME,DEFAULT,LIST,LNTH\r
+\r
+NAME:\r
+ REPEAT LNTH+1,DEFAULT\r
+ IRP A,,[LIST]\r
+ IRP TYPE,LOCN,[A]\r
+ LOC NAME+TYPE\r
+ LOCN\r
+ .ISTOP\r
+ TERMIN\r
+ TERMIN\r
+ LOC NAME+LNTH+1\r
+TERMIN\r
+\r
+; DISPATCH FOR NUMPRI GOODIES\r
+\r
+DEFINE DISTBL NAME,DEFAULT,LIST\r
+ TBLDIS NAME,DEFAULT,[LIST]NUMPRI\r
+ TERMIN\r
+\r
+DEFINE DISTBS NAME,DEFAULT,LIST\r
+ TBLDIS NAME,DEFAULT,[LIST]NUMSAT\r
+ TERMIN\r
+\r
+]\r
+\f\r
+\r
+VECFLG==0\r
+PARFLG==0\r
+\r
+;MACROS FOR INITIIAL MUDDLE LIST STRUCTURE\r
+\r
+;CHAR STRING MAKER, RETURNS POINTER AND TYPE\r
+\r
+IF1 [\r
+DEFINE MACHAR NAME,TYPE,VAL,\LNT,WHERE,LAST\r
+ TYPE==TCHSTR\r
+ VECTGO WHERE\r
+ LNT==.LENGTH \NAME!\\r
+ ASCII \NAME!\\r
+ LAST==$."\r
+ TCHRS,,0\r
+ $."-WHERE+1,,0\r
+ VAL==LNT,,WHERE\r
+ VECRET\r
+\r
+TERMIN\r
+;MACRO TO DEFINE ATOMS\r
+\r
+DEFINE MAKAT NAME,TYAT,VALU,OBLIS,REFER,LOCN,\TVENT,FIRST\r
+ FIRST==.\r
+ TYAT,,OBLIS\r
+ VALU\r
+ 0\r
+ ASCII \NAME!\\r
+ 400000+SATOM,,0\r
+ .-FIRST+1,,0\r
+ TVENT==FIRST-.+2,,FIRST\r
+ IFSN [LOCN],LOCN==TVENT\r
+ ADDTV TATOM,TVENT,REFER\r
+ TERMIN\r
+\r
+\r
+\r
+\f;MACROS TO SWITCH BACK AND FORTH INTO AND OUT OF VECTOR AND PAIR SPACE\r
+;GENERAL SWITCHER\r
+\r
+DEFINE LOCSET LOCN,RETNAM,NEWLOC,OTHLOC,F1,F2,TOPWRD,\SAVE,SAVEF1,SAVEF2,NEW\r
+\r
+ IFE F1,[SAVE==.\r
+ LOC NEWLOC\r
+ SAVEF2==F2\r
+ IFN F2,OTHLOC==SAVE\r
+ F2==0\r
+ DEFINE RETNAM\r
+ F1==F1-1\r
+ IFE F1,[NEWLOC==.\r
+ F2==SAVEF2\r
+ LOC TOPWRD\r
+ NEWLOC\r
+ LOC SAVE\r
+ ]\r
+ TERMIN\r
+ ]\r
+\r
+ IFN F1,[F1==F1+1\r
+ ]\r
+\r
+ IFSN LOCN,,LOCN==.\r
+ IFE F1,F1==1\r
+\r
+TERMIN\r
+\r
+\r
+DEFINE VECTGO LOCN\r
+ LOCSET LOCN,VECRET,VECLOC,PARLOC,VECFLG,PARFLG,VECTOP\r
+ TERMIN\r
+\r
+DEFINE PARGO LOCN\r
+ LOCSET LOCN,PARRET,PARLOC,VECLOC,PARFLG,VECFLG,PARTOP\r
+ TERMIN\r
+\r
+DEFINE ADDSQU NAME,\SAVE\r
+ SAVE==.\r
+ LOC SQULOC\r
+ SQUOZE 0,NAME\r
+ NAME\r
+ SQULOC==.\r
+ LOC SAVE\r
+ TERMIN\r
+\r
+DEFINE ADDTV TYPE,GOODIE,REFER,\SAVE\r
+ SAVE==.\r
+ LOC TVLOC\r
+ TVOFF==.-TVBASE+1\r
+ TYPE,,REFER\r
+ GOODIE\r
+ TVLOC==.\r
+ LOC SAVE\r
+ TERMIN\r
+\r
+;MACRO TO ADD TO PROCESS VECTOR\r
+\r
+DEFINE ADDPV TYPE,GOODIE,OFFS,\SAVE\r
+ SAVE==.\r
+ LOC PVLOC\r
+ PVOFF==.-PVBASE\r
+ IFSN OFFS,,OFFS==PVOFF\r
+ TYPE,,0\r
+ GOODIE\r
+ PVLOC==.\r
+ LOC SAVE\r
+ TERMIN\r
+\r
+\r
+\r
+\r
+\f\r
+;MACRO TO DEFINE A FUNCTION ATOM\r
+\r
+DEFINE MFUNCTION NAME,TYPE,PNAME\r
+ (TVP)\r
+NAME":\r
+ VECTGO DUMMY1\r
+ ADDSQU NAME\r
+ IFSE [PNAME],MAKAT NAME,T!TYPE,NAME,SYSTEM,<NAME-1>\r
+ IFSN [PNAME],MAKAT [PNAME]T!TYPE,NAME,SYSTEM,<NAME-1>\r
+ VECRET\r
+ TERMIN\r
+\r
+; VERSION OF MQUOTE WITH IMPURE BIT ON\r
+\r
+DEFINE IMQUOTE ARG,PNAME,OBLIS,\LOCN\r
+ (TVP)\r
+\r
+ LOCN==.-1\r
+ VECTGO DUMMY1\r
+ IFSE [PNAME],MAKAT [ARG]<400000+TUNBOU>,0,OBLIS,LOCN\r
+\r
+ IFSN [PNAME],MAKAT [PNAME]<400000+TUNBOU>,0,OBLIS,LOCN\r
+ VECRET\r
+ TERMIN\r
+\r
+;MACRO TO DEFINE QUOTED GOODIE\r
+\r
+DEFINE MQUOTE ARG,PNAME,OBLIS,\LOCN\r
+ (TVP)\r
+\r
+ LOCN==.-1\r
+ VECTGO DUMMY1\r
+ IFSE [PNAME],MAKAT [ARG]TUNBOU,0,OBLIS,LOCN\r
+ IFSN [PNAME],MAKAT [PNAME]TUNBOU,0,OBLIS,LOCN\r
+ VECRET\r
+ TERMIN\r
+\r
+\r
+\r
+\r
+DEFINE CHQUOTE NAME,\LOCN,TYP,VAL\r
+ (TVP)\r
+ LOCN==.-1\r
+ MACHAR [NAME]TYP,VAL\r
+ ADDTV TYP,VAL,LOCN\r
+\r
+ TERMIN\r
+\r
+\r
+; SPECIAL ERROR MQUOTE\r
+\r
+DEFINE EQUOTE ARG,PNAME\r
+ MQUOTE ARG,[PNAME]ERRORS TERMIN\r
+\r
+\r
+; MACRO DO .CALL UUOS\r
+\r
+DEFINE DOTCAL NM,LIST,\LOCN\r
+ .CALL LOCN\r
+ RMT [LOCN==.\r
+ SETZ\r
+ SIXBIT /NM/\r
+ IRP Q,R,[LIST]\r
+ IFSN [R][][Q\r
+ ]\r
+\r
+ IFSE [R][][<SETZ>\<Q>\r
+ ]\r
+ TERMIN\r
+ ]\r
+TERMIN\r
+\r
+; MACRO TO HANDLE FATAL ERRORS\r
+\r
+DEFINE FATAL MSG/\r
+ FATINS [ASCIZ /:\e FATAL ERROR MSG \e\r
+/]\r
+ TERMIN\r
+]\r
+\f\r
+CHRWD==5\r
+\r
+IFN READER,[\r
+NCHARS==177\r
+;CHARACTER TABLE GENERATING MACROS\r
+\r
+DEFINE SETSYM WRDL,BYTL,COD\r
+ WRD!WRDL==<WRD!WRDL>&<MSK!BYTL>\r
+ WRD!WRDL==<WRD!WRDL>\<<COD&177>_<<4-BYTL>*7+1>>\r
+ TERMIN\r
+\r
+DEFINE INIWRD N,INIT\r
+ WRD!N==INIT\r
+ TERMIN\r
+\r
+DEFINE OUTWRD N\r
+ WRD!N\r
+ TERMIN\r
+\r
+;MACRO TO KILL THESE SYMBOLS LATER\r
+\r
+DEFINE KILLWD N\r
+ EXPUNGE WRD!N\r
+ TERMIN\r
+DEFINE SETMSK N\r
+ MSK!N==<177_<<4-N>*7+1>>#<-1>\r
+ TERMIN\r
+\r
+;MACRO TO KILL MASKS LATER\r
+\r
+DEFINE KILMSK N\r
+ EXPUNGE MSK!N\r
+ TERMIN\r
+\r
+NWRDS==<NCHARS+CHRWD-1>/CHRWD\r
+\r
+REPEAT CHRWD,SETMSK \.RPCNT\r
+\r
+REPEAT NWRDS,INIWRD \.RPCNT,004020100402\r
+\r
+DEFINE OUTTBL\r
+ REPEAT NWRDS,OUTWRD \.RPCNT\r
+ TERMIN\r
+\r
+\r
+;MACRO TO GENERATE THE DUMMIES EASLILIER\r
+\r
+DEFINE INITCH \DUM1,DUM2,DUM3\r
+\r
+\r
+DEFINE SETCOD COD,LIST\r
+ IRP CHAR,,[LIST]\r
+ DUM1==CHAR/5\r
+ DUM2==CHAR-DUM1*5\r
+ SETSYM \DUM1,\DUM2,COD\r
+ TERMIN\r
+ TERMIN\r
+\r
+DEFINE SETCHR COD,LIST\r
+ IRPC CHAR,,[LIST]\r
+ DUM3=="CHAR\r
+ DUM1==DUM3/5\r
+ DUM2==DUM3-DUM1*5\r
+ SETSYM \DUM1,\DUM2,COD\r
+ TERMIN\r
+ TERMIN\r
+\r
+DEFINE INCRCO OCOD,LIST\r
+ IRP CHAR,,[LIST]\r
+ DUM1==CHAR/5\r
+ DUM2==CHAR-DUM1*5\r
+ SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>\r
+ TERMIN\r
+ TERMIN\r
+\r
+DEFINE INCRCH OCOD,LIST\r
+ IRPC CHAR,,[LIST]\r
+ DUM3=="CHAR\r
+ DUM1==DUM3/5\r
+ DUM2==DUM3-DUM1*5\r
+ SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>\r
+ TERMIN\r
+ TERMIN\r
+ RMT [EXPUNGE DUM1,DUM2,DUM3\r
+ REPEAT NWRDS,KILLWD \.RPCNT\r
+ REPEAT CHRWD,KILMSK \.RPCNT\r
+]\r
+\r
+TERMIN\r
+\r
+INITCH\r
+]\r
+\f\r
+;REDEFINE END DO ALL THE REMOTES (ON LAST PASS ONLY)\r
+\r
+EQUALS E.END END\r
+\r
+DEFINE END ARG\r
+ EQUALS END E.END\r
+ CONSTANTS\r
+\r
+ IMPURE\r
+ VARIABLES\r
+ PURE\r
+ HERE\r
+ .LNKOT\r
+ IF2 GEXPUN\r
+ CONSTANTS\r
+ IMPURE\r
+ VARIABLES\r
+ CODEND==.\r
+ LOC CODTOP\r
+ CODEND\r
+ LOC CODEND\r
+ PURE\r
+ CODEND==.\r
+ LOC HITOP\r
+ CODEND\r
+ LOC CODEND\r
+ IF2 EXPUNGE PARFLG,VECFLG,CHRWD,NN,NUMPRI,PURITY,EAD,ACD,PUSHED\r
+ IF2 EXPUNGE INSTNT,DUMMY1,PRIM,PPLNT,GSPLNT,MEDIAT\r
+ END ARG\r
+ TERMIN\r
+\r
+\r
+;MACROS TO PRINT VERSIONS OF PROGRAMS DURING ASSEMBLY\r
+\r
+IF1 [\r
+DEFINE NUMGEN SYM,\REST,N\r
+ NN==NN-1\r
+ N==<SYM_-30.>&77\r
+ REST==<SYM_6>\r
+ IFN N,IFGE <31-N>,IFGE <N-20>,TOTAL==TOTAL*10.+<N-20>\r
+ IFN NN,NUMGEN REST\r
+ EXPUNGE N,REST\r
+ TERMIN\r
+\r
+DEFINE VERSIO N\r
+ PRINTC /VERSION = N\r
+/\r
+ TERMIN\r
+]\r
+\r
+TOTAL==0\r
+NN==7\r
+\r
+NUMGEN .FNAM2\r
+\r
+IF1 [\r
+RADIX 10.\r
+\r
+VERSIO \TOTAL\r
+\r
+RADIX 8\r
+PROGVN==TOTAL\r
+\r
+\r
+DEFINE VATOM SYM,\LOCN,TV,A,B\r
+ VECTGO\r
+ LOCN==.\r
+ TFIX,,MUDDLE\r
+ PROGVN\r
+ 0\r
+ A==<<<<SYM_-30.>&77>+40>_29.>\r
+ B==<<SYM_-24.>&77>\r
+ IFN B,A==A+<<B+40>_22.>\r
+ B==<<SYM_-18.>&77>\r
+ IFN B,A==A+<<B+40>_15.>\r
+ B==<<SYM_-12.>&77>\r
+ IFN B,A==A+<<B+40>_8.>\r
+ B==<<SYM_-6.>&77>\r
+ IFN B,A==A+<<B+40>_1.>\r
+ A\r
+ IFN <SYM&77>,<<SYM&77>+40>_29.\r
+ 400000+SATOM,,\r
+ .-LOCN+1,,0\r
+ TV==LOCN-.+2,,LOCN\r
+ ADDTV TATOM,TV,0\r
+ VECRET\r
+ TERMIN\r
+\r
+;VATOM .FNAM1 ;"HACK REMOVED FOR EFFICIENCY"\r
+\r
+\r
+;MACRO TO REMMVE SYMBOLS OF THE FORM "GXXXXX"\r
+\r
+DEFINE GEXPUN \SYM\r
+ NN==7\r
+ TOTAL==0\r
+ NUMGEN \<SIXBIT /SYM!/>\r
+ RADIX 10.\r
+ .GSSET 0\r
+ REPEAT TOTAL,XXP\r
+ RADIX 8\r
+TERMIN\r
+\r
+DEFINE XXP \A\r
+ EXPUNGE A\r
+ TERMIN\r
+\r
+\r
+DEFINE ..LOC NEW,OLD\r
+ .LIFS .LPUR"+.LIMPU"\r
+ OLD!"==$."\r
+ LOC NEW!"\r
+ .ELDC\r
+ .LIFS -.LPUR"\r
+ LOC $."\r
+ .ELDC\r
+ .LIFS -.LIMPU\r
+ LOC $."\r
+ .ELDC\r
+ TERMIN\r
+\r
+\r
+; PURE - MACRO TO SWITCH LOADING TO PURE CORE.\r
+\r
+DEFINE PURE\r
+ IFE PURITY-1, ..LOC .LPUR,.LIMPU\r
+ PURITY==0\r
+ TERMIN\r
+\r
+; IMPURE - MACRO TO SWITCH LOADING TO IMPURE CORE.\r
+\r
+DEFINE IMPURE\r
+ IFE PURITY, ..LOC .LIMPU,.LPUR\r
+ PURITY==1\r
+ TERMIN\r
+]\r
+PURITY==0\r
+\f\f\r