File PPL.MA (MACREL macro assembler source file)

Directory of image this file is from
This file as a plain text file

	HARVN==1	;MAKE HARVARD VERSION
	UNIVERSAL PPL - THE POLYMORPHIC PROGRAMMING LANGUAGE

;UNIVERSAL PARAMETER AND MACRO DEFINITIONS FOR ASSEMBLING PPL.
;THE INITIAL IDENTIFIER AND OPERATOR TABLES ARE ALSO ASSEMBLED.

	SALL
	HISEG


;THE FOLLOWING MACRO DECLARES THE VERSION,UPDATE,EDIT,DAY,MONTH,YEAR

	DEFINE	VERDEF <
	VER	52,C,230,15,AUG,74
>

	JOB41=:	41
	JOBREN=:124
	JOBVER=:137


;###########################################################
;#   ASSEMBLY REQUIREMENTS:				   #
;#	MINIMUM:  MACRO V.45				   #
;#		  LOADER V.52				   #
;#	THIS VERSION MOST RECENTLY TESTED ON:  MACRO V.47  #
;#					       LOADER V.55 #
;###########################################################

;GLOBAL SYMBOLS DEFINED IN PPL.MAC:

	INTERN	BEGIDT,BEGOPT,PPLHDR,VERCHK,INIDAT,INIEND
	EXTERN	IDTP,OPTP

COMMENT /********** ACCUMULATOR CONVENTIONS ************ 0. ACCUMULATOR 0 IS LABELLED 'FF' AND IS THE SYSTEM FLAG REGISTER. 1-7. AC'S 1 THROUGH 7 ARE NAMED 'AC1' THROUGH 'AC7', AND ARE USED FOR ARGUMENT PASSING AND TEMPORARY USE. ARGS ARE ALLOCATED FROM AC1 UP. ARGS MAY NOT BE MODIFIED BY CALLED ROUTINES UNLESS OTHERWISE SPECIFIED. TEMP LOCATIONS ARE ALLOCATED AFTER THE ARGS. ALL ARG AND TEMP LOCATIONS CLOBBERED BY A ROUTINE MUST BE SAVED AND RESTORED BY THAT ROUTINE. 10-14. AC'S 10 THROUGH 14 ARE NAMED 'AC10' THROUGH 'AC14'. THEY ARE USED TO STORE VARIOUS SYSTEM COMMON INFORMATION, AND ARE NOT SAVED AND RESTORED OVER SUBROUTINE CALLS. SUCH REGISTERS MAY BE APPROPRIATELY UPDATED BY CALLED ROUTINES, BUT MAY NOT BE CLOBBERED. 15-16. THESE AC'S ARE LABELLED 'R' AND 'R2', AND ARE USED FOR THE RETURN OF VALUES BY SUBROUTINES. UNLESS OTHERWISE SPECIFIED, ROUTINES RETURN VALUES IN THE FOLLOWING MANNER: A) ONE SINGLE-WORD VALUE - RETURNED IN R. B) TWO SINGLE-WORD VALUES, OR ONE DOUBLE-WORD VALUE - R AND R2. R AND R2 ARE NOT SAVED OR PROTECTED FROM SUBROUTINE CALLS UNLESS SUCH SAVING IS DONE BY THE CALLER. R AND R2 ARE VERY TEMPORARY, AND MAY BE CLOBBERED FREELY EVEN BY ROUTINES THAT DON'T RETURN VALUES. 17. AC 17 IS LABELLED 'P' AND IS THE SYSTEM PUSHDOWN POINTER FOR SUBROUTINE CALLING AND SOME REGISTER SAVING. NOTE THAT RECURSION IS ONLY LEGAL DURING THE COURSE OF A SINGLE ACTIVATION. THE SYS- TEM STACK MUST BE CLEAR UPON SELECTION OF ANOTHER ACTIVATION RECORD. / IF1,< FF= 0 ;SYSTEM FLAGS AC1= 1 ;ARGS, THEN TEMPS AC2= 2 AC3= 3 AC4= 4 AC5= 5 AC6= 6 AC7= 7 AC10= 10 ;SYSTEM COMMON AC11= 11 AC12= 12 AC13= 13 AC14= 14 R= 15 ;RETURNED VALUES R2= 16 P= 17 ;SYSTEM PUSHDOWN POINTER ;ACCUMULATORS MAY BE LOCALLY RENAMED. THIS SHOULD BE DONE IN THE FORM: ; NAME== ACN
;SOME SPECIAL MNEMONICS THAT HAVE BECOME RATHER GLOBAL ;NOTE THAT SOME OF THESE CONVENTIONS HAVE BEEN OVERRIDDEN LOCALLY B== AC14 ;HOLDS DZ ADR OF BLOCK BEING ACCESSED BY GET/SET L== AC13 ;HOLDS LEXEME BEING ACCESSED BY LGET/LSET CAR== AC11 ;CURRENT ACTIVATION RECORD PZ ADR T== AC12 ;HOLDS DATA TYPE INDEX ARGP== AC10 ;HOLDS B,,REL POINTER TO ARG IN CAR C== AC11 ;HOLDS CHARACTER BP== AC10 ;BYTE POINTER N== AC12 ;CHAR OR OTHER COUNTER CT== AC13 ;CHARACTER TYPE (BITS) TOP== AC5 ;POINTS TO TOP OF AR STACK CL== AC4 ;DZ ADR OF CURRENT LINE OF BASE TEXT CPM== AC3 ;CURRENT POSITION MARKER IN TEXT S== AC12 ;TEMPORARY FOR SUPVSR AND INTERP ;SOME USEFUL CONSTANTS COMMA== "," TAB== 11 CR== 15 LF== 12 COLON== ":" ;PARAMETERS AND DEFINITIONS STKLEN==:400 ;LENGTH OF SYSTEM STACK TXTSIZ==:^D100 ;SIZE OF TEXT BUFFER (WORDS) MAXTXT==TXTSIZ*5 ;SAME (CHARACTERS) LXBSIZ==:^D100 ;SIZE OF LEXICAL TEMP BUFFER LXMBSZ==:^D200 ;SIZE OF LXMBUF L0BSIZ==:^D100 ;SIZE OF L0BUF LBLBSZ==:^D50 ;SIZE OF LBLBUF XTRADZ==4000 ;END-OF-DZ BUFFER ZONE SIZE SSLEN== ^D100 ;LENGTH OF SYNTAX ANALYSIS STACK ISTKL== ^D10 ;INITIAL ALLOCATION FOR AR STACKS STKXTL==^D10 ;AMOUNT TO EXTEND A STACK BY WHEN IT OVERFLOWS
;EDITING CHARACTERISTICS (IN RH OF CT) NINS== 1 ;NORMAL INSERTABLE CHARACTER SPTIN== 2 ;SPECIAL ACTION ON NON-EDIT MODE TYPEIN SPEDT1==4 ;SPECIAL ACTION DURING 1:1 CHAR. REPLACEMENT SPINS== 10 ;SPECIAL ACTION DURING INSERTION VIA ^A SPDEL== 20 ;SPECIAL ACTION IF CHAR. GETS DELETED ANYTIM==100 ;SPECIAL ACTION ANYTIME (ALWAYS SAME RESPONSE) ;LEXICAL CHARACTERISTICS LETDE== 200 ;CAP OR SMALL LETTER D OR E FNHDR== 400 ;LEFT PAREN, SEMICOLON, OR NULL (DELIMITS FN NAME) LETTR== 1000 ;LETTER (CAP OR SMALL) SMLLET==2000 ;SMALL LETTER DIGIT== 4000 ;DIGIT 0-9 ODIGIT==10000 ;OCTAL DIGIT 0-7 PUNCT== 20000 ;PUNCTUATION, NOT INCL. "? PLSMIN==40000 ;+ OR - SPTYP== 100000 ;SPECIAL CHAR. IF BEFORE DIGIT .#% SEPRTR==200000 ;SEPARATOR - SPACE,TAB,LF PERIOD==400000 ;PERIOD
;CONDITIONAL ASSEMBLY PARAMETERS AND VERSION IDENTIFICATION ;SET ALL AVAILABLE FEATURE SWITCHES TO ZERO INITIALLY. DEFINE FEAT(L) < IRP L <IFNDEF L,< L== 0 > INTERN L >> FEAT <ARDS,SYLVN,DDP516,CTRLUB,CTRLZU,FTSTAT,FTEMF,FTBAKG,FTCCIN,CHARIO> HARVN== 1 ;INITIALLY ASSUME HARVARD VER BEING ASSEMBLED ;ASSOCIATE FEATURES WITH CONFIGURATIONS DEFINE CONFIG(ID,SW,NAME,L) < INTERN SW IFNDEF SW,< SW== 0 > IFN SW,< HARVN==0 IFNB <L>,<IRP L < L== 1 >> DEFINE VER(V,U,E,D,M,Y) < PPLVER==:V PPLHDR: SIXBIT /PPL ID'.'V'U(E) D-M-Y#/ LOC JOBVER JOBVER: BYTE (3)0 (9)V (6)"U"&77 (18)E RELOC VERCHK: BYTE (18)'PPL'(10)''ID''(8)E SUBTTL NAME VERSION - TAS/EAT/ ID'.'V'U(E) D-M-Y IF1,< PRINTX NAME VERSION V'U(E) D-M-Y >>>>
CONFIG TS,FTTSC,TSC,<ARDS,DDP516,FTEMF,FTCCIN> CONFIG TX,TENEX,TENEX,<> CONFIG S,STNDRD,STANDARD,<FTEMF,FTCCIN> CONFIG M,MITS,MITS,<ARDS> CONFIG TL,TELCMP,TELCOMP,<FTEMF> CONFIG FD,FDATA,FIRST DATA,<CTRLUB,FTEMF,FTCCIN,CHARIO> CONFIG H,HARVN,HARVARD,<HARVN,ARDS,SYLVN,CTRLUB,FTEMF,FTBAKG,FTCCIN,CHARIO> IFE CTRLUB+TENEX+MITS,< CTRLZU==1 ;SUBSTITUTE ^Z FOR ^U > > ;;; END IF1 XALL VERDEF ;ASSEMBLE HEADER,SUBTITLE,VERSION,ETC. SALL
;COMMENTS ON DEBUGGING REPEAT 0,< PPL DEBUG FACILITIES A. DDT MAY BE LOADED IN THE NORMAL WAY, I.E. .DEBUG <PPL FILES> THE SAME .REL FILES ARE USED FOR BOTH PRODUCTION AND DEBUGGING B. IF DDT IS LOADED, THE FOLLOWING FEATURES BECOME AVALABLE: 1) IRRECOVERABLE SYSTEM ERRORS CAUSE AN AUTOMATIC JUMP TO DDT INSTEAD OF BOMBING OUT TO THE MONITOR. 2) A TYPED-IN ^Z CAUSES CONTROL TO TRANSFER TO DDT. ^Z IS EQUIVALENT TO THE SEQUENCE ^C, .DDT EXCEPT THAT ^Z CAUSES ALL THE AC'S TO BE SAVED IN THE CRSHSV BLOCK. 3) THE DDT COMMAND CONT$G CAUSES CONTROL TO RETURN TO PPL VIA THE EXECUTION OF JRSTF @JOBOPC. IF EXIT TO DDT WAS CAUSED BY ^Z, THE AC'S ARE RESTORED. IF EXIT WAS CAUSED BY AN ERROR, PPL WILL BOMB OUT TO THE MONITOR. C. THE DEBUGGING PACKAGE IS LOADED BY: .DEBUG <PPL FILES>,DBGPRT THE DBGPRT ROUTINE PRINTS IN READABLE FORM THE CONTENTS OF THE BLOCK WHOSE PZ POINTER IS ADDRESSED BY THE RH OF AC1. THE INSTRUCTION PNT$X IS EQUIVALENT TO PUSHJ P,DBGPRT$X >
IF1,< ;FF FLAG DEFINITIONS (RH) EDIT== 1 ; IF 1, THERE IS AN OLD LINE TO EDIT. RELF== 2 ;CURRENTLY PROCESSING A RELOCATABLE LINE NUMBER QUOTF== 4 ;CURRENTLY PROCESSING A QUOTED STRING COMMF== 10 ;CURRENTLY WITHIN A COMMENT TALL== 20 ;IF 1, WE ARE TYPING ALL OF A FUNCTION FOPN== 40 ;IF 1, A FUNCTION IS OPEN FOR EDITING LEXCHK==100 ;IF 1, LEXICAL ANALYZER IS JUST CHECKING RFLG== 200 ;REAL FLAG DBLFLG==400 ;DOUBLE FLAG EXPSGN==1000 ;SIGN OF EXPONENT FOV== 2000 ;PROGRAM-DETECTED FLOATING OVERFLOW TRNERR==4000 ;ERROR HAS OCCURRED DURING FINAL TRANSLATION DNTRTP==10000 ;DON'T RETYPE LINE IN WHICH ERROR OCCURRED EDIFLG==20000 ;SET TO RE-ENTER EDITOR AFTER AUTOMATIC RESET PIR== 40000 ;PRINT IF REQUIRED (FIND.PHRASE) TUPARG==100000 ;TUPLE ARGUMENT FLAG DLRFLG==RFLG ;SET DURING ANALYSIS OF $ID INSTEAD OF ID ALTF== DBLFLG ;USED IN PACKING OF ALT DATA DEFINITION ASGFLG==DBLFLG ;USED IN ASSIGNMENT ROUTINE SQUOTF==TALL ;USED TO FLAG SINGLE QUOTE IN "GETC" STRFLG==DBLFLG ;USED IN STOP/TRACE PROCESSING FILFLG==DBLFLG ;USED IN DEVERR AND FILERR UUO HANDLER LKFLG== TALL ;IN PARSE: 1 IF A LOOKAHEAD HAS BEEN DONE ;FF FLAG DEFINITIONS (LH) RDFLG== 1 ;READ FROM A FILE IN PROGRESS RSTFLG==2 ;RESTORE FROM A FILE IN PROGRESS TTIFLG==4 ;TTY INPUT MUST BREAK ON EVERY CHARACTER EMFOPN==10 ;ERROR MESSAGE FILE IS OPEN NOCRLF==20 ;DON'T OUTPUT CRLF WHEN # SEEN (TTOS)
;DEFINITION OF "GET" AND "SET" MACROS REPEAT 0,< USES: GET TYPF ;LOAD INTO R THE REQUESTED FIELD IN BLOCK B GET AC,TYPF ;LOAD INTO AC """""" SET TYPF ;DEPOSIT FROM R SET AC,TYPF ;DEPOSIT FROM AC CONSTRUCTION: FOR MAXIMUM EFFICIENCY, THE "GET" AND "SET" MACROS GENERATE HALF WORD OR FULL WORD INSTRUCTIONS RATHER THAN BYTE INSTRUCTIONS WHERE POSSIBLE. THE MACRO "FDEF" IS USED TO DEFINE THE CHARACTER- ISTICS OF ALL DEFINED FIELDS. "EDEF" IS USED WHERE A SIGNED, 18-BIT NUMBER IS TO BE LOADED OR STORED > DEFINE DEFDEF(M,N) ;MACRO TO DEFINE FDEF AND EDEF WITH < DEFINE N'DEF(T,S,D,P) ;TYPE,SIZE,DISPLACEMENT,RIGHTMOST BIT POSITION < IFE S-36,< OPDEF G.'T [MOVE D(B)] OPDEF S.'T [MOVEM D(B)]> IFE S-18,< IFE P-17,< OPDEF G.'T [HLR'M D(B)] OPDEF S.'T [HRLM D(B)]> IFE P-35,< OPDEF G.'T [HRR'M D(B)] OPDEF S.'T [HRRM D(B)]>> IF1,< IFNDEF G.'T,< BY'T: POINT S,D(B),P>> IF2,< IFDEF BY'T,< BY'T: POINT S,D(B),P>> IFDEF BY'T,< DEFINE G.'T(F) < LDB F,BY'T > DEFINE S.'T(F) < DPB F,BY'T > INTERN BY'T > > > DEFDEF (Z,F) ;DEFINE FDEF DEFDEF (E,E) ;DEFINE EDEF
;DEFINE LDEF MACRO TO GENERATE FIELDS OF LEXEMES AND PZWORDS DEFINE LDEF(T,S,D,P) ;TYPE,LENGTH,DISPLACEMENT,RIGHTMOST BIT < IFE S-36,< OPDEF G%'T [MOVE L] OPDEF S%'T [MOVEM L]> IFE S-18,< IFE P-17,< OPDEF G%'T [HLRZ L] OPDEF S%'T [HRLM L]> IFE P-35,< OPDEF G%'T [HRRZ L] OPDEF S%'T [HRRM L]>> IF1,< IFNDEF G%'T,< BY'T: POINT S,L,P>> IF2,< IFDEF BY'T,< BY'T: POINT S,L,P>> IFDEF BY'T,< DEFINE G%'T(F) < LDB F,BY'T > DEFINE S%'T(F) < DPB F,BY'T > INTERN BY'T > > >; *** END IF1 FROM WAY BACK
;FIELDS OF ALL DATA BLOCKS RADIX ^D10 FDEF WLF,18,0,17 ;WLENGTH FIELD FDEF BPF,18,0,35 ;BACK POINTER FIELD ;FIELDS OF ATOMIC DATA BLOCKS FDEF INTF,36,1,35 ;INT FIELD FDEF REALF,36,1,35 ;REAL FIELD FDEF DBLLF,36,2,35 ;LOW PART OF DOUBLE FIELD FDEF BOOLF,1,1,35 ;BOOL FIELD FDEF CHARF,7,1,35 ;CHAR FIELD ;FIELDS OF SEQ AND VSEQ DATA BLOCKS EDEF LBF,18,1,17 ;LOWER BOUND FIELD EDEF UBF,18,2,35 ;UPPER BOUND FIELD (SEQ ONLY) FDEF TYPF,18,1,35 ;TYPE FIELD ;FIELDS OF ACTIVATION RECORDS FDEF FNF,18,1,17 ;FUNCTION POINTER FIELD EDEF LNF,18,1,35 ;LINE NUMBER FIELD FDEF TOPF,18,2,17 ;TOP POINTER FIELD FDEF LPF,18,2,35 ;LINE POINTER FIELD FDEF ATRF,18,3,17 ;ATTRIBUTE FIELD FDEF PMF,18,3,35 ;POSITION MARKER FIELD FDEF CRF,18,4,17 ;CALLER FIELD FDEF OLNF,18,4,35 ;OLD LINE NUMBER FIELD FDEF LRF,18,5,17 ;LEFT RING FIELD FDEF RRF,18,5,35 ;RIGHT RING FIELD ;FIELDS OF REFS AND LVALUES FDEF ELTF,18,1,17 ;ELEMENT TYPE FIELD FDEF PZAF,18,1,35 ;POINTER ZONE ADDRESS FIELD FDEF DISPF,18,2,17 ;DISP FIELD FDEF BEGF,6,2,23 ;BEGINNING FIELD FDEF LENF,12,2,35 ;LENGTH FIELD ;FIELDS USED IN INSTANCES OF USER DEFINED VARAIDIC SEQUENCES EDEF UDUBF,18,1,35 ;USER DEFINED UPPER BOUND FIELD
;FIELDS OF TRANSLATED FUNCTIONS FDEF LCLSF,18,1,17 ;NUMBER OF LOCALS FIELD FDEF MSTKF,18,1,35 ;MAX STACK REQUIRED FIELD FDEF LINESF,18,2,17 ;NUMBER OF LINES FIELD FDEF TEXTF,18,2,35 ;POINTER TO TEXT FIELD ;FIELDS OF TRANSLATED LINES FDEF TBITF,1,1,0 ;TRACE BIT FIELD FDEF SBITF,1,1,1 ;STOP BIT FIELD FDEF INHF,16,1,17 ;INHERITED LINE NUMBER FIELD EDEF NF,18,1,35 ;LINE NUMBER FIELD ;FIELDS OF LINE0 FDEF FRMLF,12,2,11 ;NUMBER OF FORMALS FIELD FDEF LCLF,12,2,23 ;NUMBER OF LOCALS FIELD FDEF ASGNSF,12,2,35 ;NUMBER OF ASSIGNMENTS FIELD FDEF ATRSF,18,3,17 ;FUNCTION ATTRIBUTES FIELD ;FIELDS OF PZWORDS LDEF GCBF,1,0,0 ;GARBAGE COLLECTION BIT FIELD LDEF CBF,1,0,1 ;COPY BIT FIELD LDEF SYSBF,1,0,2 ;SYSTEM BIT FIELD LDEF BLTF,15,0,17 ;BLOCK TYPE FIELD LDEF DZPF,18,0,35 ;DATA ZONE POINTER FIELD ;FIELDS OF LEXEMES LDEF IACTF,5,0,13 ;INTERPRETER ACTION FIELD LDEF LTYPF,4,0,17 ;LEXEME TYPE FIELD RADIX 8 ;RETURN TO NORMAL OCTAL RADIX
IF1,< ;MACROS FOR GET AND SET (B CONTAINS BLOCK BASE ADDRESS) DEFINE GET(X,Y) < IFB <Y>,< G.'X R,> IFNB <Y>,< G.'Y X,> > DEFINE SET(X,Y) < IFB <Y>,< S.'X R,> IFNB <Y>,< S.'Y X,> > ;MACROS FOR LGET AND LSET (L CONTAINS LEXEME OR PZWORD) DEFINE LGET(X,Y) < IFB <Y>,< G%'X R,> IFNB <Y>,< G%'Y X,> > DEFINE LSET(X,Y) < IFB <Y>,< S%'X R,> IFNB <Y>,< S%'Y X,> >
;THESE MACROS ALLOW BOTH SOURCE AND DESTINATION TO BE SPECIFIED. ;CALLS ARE: ; FETCH (AC,SOURCE,FIELD) ; STORE (AC,DEST,FIELD) DEFINE FETCH(DST,SRC,FLD) < ZZ== 0 IFE FLD'S-^D18,< IFE FLD'P-^D17,< HLRZ DST,SRC ZZ== 1 > IFE FLD'P-^D35,< HRRZ DST,SRC ZZ== 1 >> IFE ZZ,< LDB DST,[POINT FLD'S,SRC,FLD'P] >> DEFINE STORE(SRC,DST,FLD) < ZZ== 0 IFE FLD'S-^D18,< IFE FLD'P-^D17,< HRLM SRC,DST ZZ== 1 > IFE FLD'P-^D35,< HRRM SRC,DST ZZ== 1 >> IFE ZZ,< DPB SRC,[POINT FLD'S,DST,FLD'P] >>
;DEFINE FIELD NAMES, SIZES, AND POSITIONS FOR FETCH AND STORE. DEFINE FLDDEF(SYM,SIZ,POS) < SYM'S== ^D'SIZ SYM'P== ^D'POS > ;FIELDS OF SYNTAX TOKENS FLDDEF (BGNPF,9,8) ;CHAIN BEGIN PTR FIELD FLDDEF (ENDPF,9,17) ;CHAIN END PTR FIELD FLDDEF (AUXCF,9,26) ;AUXILIARY COUNTER FIELD FLDDEF (STATF,9,35) ;STATE NUMBER FIELD ;FIELDS OF LEXEMES FLDDEF (FCHNF,9,8) ;FORWARD CHAIN FIELD FLDDEF (IACTF,5,13) ;INTERPRETER ACTION FIELD FLDDEF (LTYPF,4,17) ;LEXEME TYPE FIELD
;OTHER STANDARD OPDEFS AND MACROS OPDEF CALL [PUSHJ P,] ;CALL A PPL ROUTINE OPDEF RETURN [POPJ P,] ;RETURN FROM PPL ROUTINE DEFINE SAVE(L) ;SAVE LIST L ON STACK < IRP L <PUSH P,L>> DEFINE RESTORE(L) ;RESTORE REGISTERS FROM STACK < IRP L <POP P,L>> ;L MUST BE INVERSE OF L IN ; CORRESPONDING SAVE DEFINE REFRSH(A) ;REFRESH ACCUMULATOR A FROM TOP < MOVE A,(P)> ;OF SYSTEM STACK ;MACRO TO CONCATENATE UP TO FOUR STRINGS DEFINE CONC(A,B,C,D) <A''B''C''D> ;OTHER MISCELLANEOUS JUNK DEFINE MSG(S) <$'S##> ;SIXBIT MESSAGE SYMBOL DEFINE ILLTYP <SFNERR MSG(IATYP)> ;IMPROPER ARGUMENT TYPE DEFINE ASGERR <SFNERR MSG(ILASG)> ;ILLEGAL ASSIGNMENT ARBASE==6 ;RELATIVE POSITION OF PROCID ENTRY IN AR IFN FTSTAT,< ;CODES FOR THE AC FIELD OF THE STAT UUO, FOR INDICATING TYPE OF STATISTIC ; BEING OUTPUT. .ALL== 1 ;SIZE OF BLOCK BEING ALLOCATED .BIU== 2 ;SIZE OF (LARGE) IN-USE BLOCK ENCOUNTERED ; DURING GC .PZS== 3 ;TOTAL # WORDS IN USE IN PZ AFTER GC .DZS== 4 ;TOTAL # WORDS IN USE IN DZ AFTER GC .TBL== 5 ;BLOCK SIZE DISTRIBUTION TABLE FOLLOWS ; (SIZE OF TBL IS EFF ADR OF STAT UUO) DSTSIZ==^D50 ;SIZE OF TABLE FOR BLOCK SIZE DISTRIBUTIONS >
;PARAMETERS AND BIT DEFINITIONS FOR THE PARSER ACCCD1==400 ;PARSE TABLE ACCESS CODE 1 ACCCD2==1000 ;ACCESS CODE 2 ACCCD3==1400 ;ACCESS CODE 3 NSTATES==^D104 ;NUMBER OF STATES MXTOPP==5 ;MAX NUMBER OF TOP PAIRS TO BE STORED AS ; PAIRS RATHER THAN AS A VECTOR MXRDPR==3 ;MAX NUMBER OF READ TRANSITIONS TO BE STORED AS ; PAIRS RATHER THAN AS A VECTOR ;HARDWARE BITS - RH OF JOBCNI FOR APRENB AP.REN==1B18 ;REPETITIVE ENABLE AP.POV==1B19 ;PUSHDOWN OVERFLOW AP.ILM==1B22 ;ILL MEM REF AP.CLK==1B26 ;CLOCK AP.FOV==1B29 ;FLOATING OVERFLOW IFN FTBAKG,< MINSLP==5 ;MINIMUM TIME TO SLEEP IN BACKGROUND MODE MAXSLP==^D60 ;MAXIMUM TIME TO SLEEP IN BACKGROUND MODE INITIC==^D10*^D60 ;NUMBER OF RUN TICKS ALLOWED AFTER ANY INTERACTION >
;PARAMETERS AND BIT DEFINITIONS FOR THE FILE I/O MECHANISMS ;DEVCHR BITS DV.DSK==1B1 ;DEVICE IS A DISK DV.DTA==1B11 ;DEVICE IS A DECTAPE DV.TTY==1B14 ;DEVICE IS A TELETYPE DV.DIR==1B15 ;DEVICE HAS A DIRECTORY DV.IN== 1B16 ;DEVICE CAN DO INPUT DV.OUT==1B17 ;DEVICE CAN DO OUTPUT ;ASSIGN NUMBERS TO PERMANENTLY-ALLOCATED I/O CHANNELS DEFINE CHNASS(CH) < CH== <HPCHAN==HPCHAN+1> > HPCHAN==-1 ;HIGHEST PERMANENTLY-ALLOCATED CHANNEL CHNASS (TT) ;DUMMY CHANNEL FOR TELETYPE CHNASS (RD) ;CHANNEL FOR READ, RESTORE WR== RD ;CHANNEL FOR WRITE, SAVE IFN FTEMF,< CHNASS (EMF) ;ERROR MESSAGE READ CHANNEL > IFN FTSTAT,< CHNASS (STCH) ;STATISTICAL DATA OUTPUT CHANNEL > NFCBLK==17-HPCHAN ;NUMBER OF USER FILE CHANNEL BLOCKS ; (ALSO HIGHEST LEGAL USER CHANNEL#) ;DISPLACEMENTS INTO A FILE CHANNEL BLOCK FILPZA==0 ;CHANNEL DATA TYPE ,, PZADR OF BUFFER BLOCK FILDEV==1 ;DEVICE NAME FILNAM==2 ;FILE NAME FILEXT==3 ;EXTENSION ,, STATUS BITS AND CHANNEL # FS.EOF==1B18 ; END-OF-FILE SEEN ON INPUT FS.TTY==1B19 ; DEVICE IS A TELETYPE FS.OUT==1B20 ; CHANNEL IS OPENED FOR OUTPUT FS.DSK==1B21 ; DEVICE IS A DISK ; 32-35 = ACTUAL I/O CHANNEL NUMBER FILPPN==4 ;PROJECT-PROGRAMMER NUMBER FILHDP==5 ;POINTER TO CURRENT BUFFER *** 3-WORD FILPTR==6 ;BYTE POINTER *** RING FILCTR==7 ;BYTE COUNTER *** HEADER FILPOS==10 ;CURRENT RELATIVE BLOCK NUMBER IN FILE FCBSIZ==11 ;SIZE OF FILE CHANNEL BLOCK
IFN MITS,< ;**** DEFINE SPECIAL MNEMONICS FOR MIT VERSION **** .TTYI== 0 ;TTY I/O CHANNELS .TTYO== 1 .RMEMT==12 ;FOR GETTING JOBREL FROM ITS MONITOR OPDEF .IOT [40B8] ;ITS UUO'S OPDEF .STATUS [46B8] OPDEF .DISMISS [43040,,0] OPDEF .ITYIC [42000,,60] OPDEF .VALUE [43200,,0] OPDEF .SETM2 [42000,,5] OPDEF .OPEN [41B8] OPDEF .CORE [43300,,0] OPDEF .SUSET [43540,,0] PDLOVF==200000 ;PDL OVERFLOW FLAG MEMPRV==20000 ;MEM PROT VIOLATION FLTOVF==10 ;FLOATING OVERFLOW DEFINE CORE(A) < LSH A,-^D10 ;ARG TO MITS .CORE IS NUMBER OF BLOCKS .CORE 1(A) > DEFINE RESET < .OPEN .TTYI,[4,,'TTY'] .VALUE [ASCIZ/?TTY INPUT FAILURE? /] .OPEN .TTYO,[5,,'TTY'] .VALUE [ASCIZ/?TTY OUTPUT FAILURE? /] HLRZ R,JOBSA ;SETUP JOBFF MOVEM R,JOBFF .DISMISS [0,,.+1] MOVEI R,PDLOVF+MEMPRV+FLTOVF ;ENABLE APR TRAPS MOVEI R2,1 .SETM2 R, > >
SUBTTL DEFINITIONS FOR INTERNAL NAMES AND INDICES REPEAT 0,< TO AVOID CONFUSION BETWEEN DIFFERENT CLASSES OF INTERNAL NAMES [FOR EXAMPLE, 'FN' IS USED BOTH AS AN IDENTIFIER TYPE AND AS A BLOCK TYPE], THE FOLLOWING NAMING CONVENTIONS ARE APPLIED: 1. BLOCK TYPES (STORED IN LH OF PZ WORDS) A) INTERNAL (BIT 2 A ONE) - PRECEDED BY "B." B) USER-NAMABLE (BIT 2 A ZERO) - PRECEDED BY "U." [NOTE, THOUGH, THAT THE NAME BY WHICH THE USER ADDRESSES THE TYPE DOES NOT CONTAIN THE "U." PREFIX] 2. IDENTIFIER TYPES (STORED IN LH OF SYMBOL TABLE ENTRIES) - PRECEDED BY "I." 3. LEXEME TYPES (BITS 2-11 OF LEXEMES) - PRECEDED BY "L." ******* ALL INDICES ARE TO BE ASSIGNED BY MACROS ********* > ;INTERNAL BLOCK TYPE DEFINITIONS (LH OF PZ WORDS, BIT 2 = 1) DEFINE B.DEFS < B.DEF (TLINE) ;; LINE OF ASCII TEXT B.DEF (LSB) ;; ASCII LINE SEQUENCE BLOCK B.DEF (IDT) ;; IDENTIFIER TABLE B.DEF (OPT) ;; OPERATOR TABLE B.DEF (STRUCT) ;; STRUCTURE DEFINITION B.DEF (ALT) ;; ALTERNATE DEFINITION B.DEF (SEQ) ;; SEQUENCE DEFINITION B.DEF (VSEQ) ;; VARIADIC SEQUENCE DEFINITION B.DEF (LOGIC) ;; UNSPECIFIED LOGIC BLOCK B.DEF (AR) ;; ACTIVATION RECORD B.DEF (LVAL) ;; L-VALUE B.DEF (FN) ;; FUNCTION B.DEF (LINE) ;; LINE OF BASE-LANGUAGE TEXT B.DEF (LIN0) ;; LINE ZERO BASE LANGUAGE TEXT B.DEF (CVAL) ;; CONTINUOUS VALUE B.DEF (IOB) ;; I/O BUFFER RING BLOCK >
;USER-NAMABLE BLOCK TYPES (LH OF PZ WORDS, BIT 2 = 0). THE ;ASSIGNED INDICES WILL BE THE RELATIVE ADDRESSES OF THE BLOCK TYPE NAMES ;IN THE IDT. THE SECOND ARG IS THE LH OF THE STE FOR THE BLOCK NAME. ;*** ALL ATOMS MUST APPEAR FIRST IN THE LIST *** DEFINE U.DEFS < U.DEF (INT,ATOM) ;; INTEGER U.DEF (REAL,ATOM) ;; SINGLE-PRECISION REAL U.DEF (DBL,ATOM) ;; DOUBLE-PRECISION REAL U.DEF (BOOL,ATOM) ;; BOOLEAN U.DEF (CHAR,ATOM) ;; CHARACTER U.DEF (NONE,ATOM) ;; DATA TYPE OF NULL U.DEF (STRING,DDEF) ;; STRING DATA DEFINITION U.DEF (TUPLE,DDEF) ;; TUPLE DATA DEFINITION > ;IDENTIFIER TYPES (LH OF SYMBOL TABLE ENTRIES) DEFINE I.DEFS < I.DEF (VAR) ;; STANDARD VARIABLE I.DEF (FN) ;; FUNCTION I.DEF (DDEF) ;; DATA DEFINITION I.DEF (SEL) ;; SELECTOR DEFINITION I.DEF (CEV) ;; CONTINUOUSLY EVALUATING VARIABLE I.DEF (ATOM) ;; ATOMIC TYPE NAME I.DEF (SFN) ;; BUILT-IN SYSTEM FN (USER REDEFINABLE) I.DEF (RESW) ;; RESERVED WORD ;; ***** THE FOLLOWING ENTRY MUST BE LAST ***** I.DEF (SYNTOK) ;; SYNTAX TOKEN (CAN'T BE DIDDLED BY USER) > ;LEXEME TYPES (BITS 14-17 OF LEXEMES) DEFINE L.DEFS < L.DEF (OP) ;; OPERATOR L.DEF (PROCID) ;; PROCEDURE IDENTIFIER L.DEF (FORML) ;; FORMAL PARAMETER L.DEF (LCL) ;; LOCAL VARIABLE L.DEF (ID) ;; IDENTIFIER (GLOBAL) L.DEF (CONST) ;; CONSTANT L.DEF (RELOC) ;; RELOCATABLE CONSTANT L.DEF (DEMAND) ;; DEMAND SYMBOL L.DEF (SELX) ;; RESULT OF SELECTION EXPRESSION (LVALUE) L.DEF ($ID) ;; UNCOERCIBLE ID L.DEF (DUMREF) ;; DUMMY REFERENCE (TO ANOTHER AR'S LOCALS) >
;INTERPRETER ACTIONS (BITS 9-13 OF LEXEMES) DEFINE A.DEFS < A.DEF (STAK) ;; STACK LEXEME A.DEF (BINOP) ;; PERFORM BINARY OPERATION A.DEF (UNOP) ;; PERFORM UNARY OPERATION A.DEF (UNSTAK) ;; UNSTACK LEXEME A.DEF (FNAPP) ;; APPLY FUNCTION TO ARGUMENTS A.DEF (SELAPP) ;; APPLY SELECTOR(S) A.DEF (FORSCP) ;; FOR SCOPE - PERFORM TEST A.DEF (ENDFOR) ;; END FOR SCOPE - LOOP TO START A.DEF (THNSC1) ;; THEN SCOPE FOR ONE-ARMED CONDITIONAL A.DEF (THNSC2) ;; THEN SCOPE FOR TWO-ARMED CONDITIONAL A.DEF (ELSSCP) ;; ELSE SCOPE - UNCONDITIONAL JUMP A.DEF (MAKTUP) ;; MAKE A TUPLE A.DEF (FORST) ;; FOR STATEMENT WITH LINE-NUMBER SCOPE A.DEF (FORASS) ;; PERFORM FOR-ASSIGNMENT A.DEF (RPAD) ;; PRINT IF REQUIRED AND UNSTACK A.DEF (WHLSCP) ;; WHILE SCOPE FOR WHILE DO A.DEF (ENDWHL) ;; END WHILE SCOPE A.DEF (RPTSCP) ;; REPEAT SCOPE FOR REPEAT UNTIL A.DEF (ENDRPT) ;; END REPEAT SCOPE A.DEF (CXTWD) ;; CONTEXT WORD - SAVES PREVIOUS CONTEXT > ;SPECIAL SYNTAX TOKENS ;APPEAR IN IDENTIFIER TABLE BUT ARE NOT AVAILABLE TO USERS AS IDENTIFIERS. ;THE MACRO BELOW ASSIGNS A VOCAB # TO EACH TOKEN (THIS USED IN THE PARSER). DEFINE S.DEFS < S.DEF (ELSE,2) S.DEF (IF,9) S.DEF (THEN,10) S.DEF (FOR,12) S.DEF (DO,13) S.DEF (DOTHRU,16) S.DEF (GOTO,17) S.DEF (RETURN,18) S.DEF (WHILE,20) S.DEF (UNTIL,21) S.DEF (REPEAT,22) > ;SPECIAL VOCABULARY NUMBER DEFINITIONS FOR GENERIC TERMINALS V$OP==3 V$TERM==8 V$RPAD=^D19
;ASSORTED BIT DEFINITIONS GCBIT== 1B0 ;PZ WORD - GARBAGE COLLECTION BIT CPYBIT==1B1 ;PZ WORD - COPY BIT SYSBIT==1B2 ;PZ WORD - SYSTEM BLOCK TYPE BIT STPBIT==1B1 ;STOP BIT (WORD 1 OF TRANSLATED LINE) TRCBIT==1B0 ;TRACE BIT SB== SYSBIT_-^D18 CBRBIT==1B18 ;CALL-BY-REFERENCE BIT (LINE0 FORMLS) SUBATR==1 ;SUBROUTINE ATTRIBUTE BIT PARATR==2 ;PARALLEL PROCEDURE ATTRIBUTE RCATR== 4 ;RELATIVELY CONTINUOUS ATTRIBUTE TUPATR==10 ;TUPLED ARGUMENT ATTRIBUTE SSATR== 400000 ;STOP/SUSPENSION ATTRIBUTE (KLUDGE) ;MACRO FOR SPECIFYING BLOCK TYPE AND SIZE FOR MKBLK ROUTINE ; BLKARG(A,B) ;A: BLOCK TYPE (WITH OR WITHOUT SYSBIT) ;B: BLOCK SIZE (MAY BE INDIRECT AND INDEXED) DEFINE BLKARG(A,B) < EXP <<<A>&SYSBIT>_2>+<<A>&7777>B12+<Z B>> ;MACRO FOR CONSTRUCTING A LEXEME ;CALLED BY: ; LXM (A,T,V) ;WHERE ; A IS THE INTERPRETER ACTION ; T IS THE LEXEME TYPE ; V IS THE (18-BIT) VALUE DEFINE LXM(A,T,V) < <A>B<IACTFP>+<T>B<LTYPFP>+V>
;DEFINITION OF BUILT-IN OPS RASSOC==400000 DEFINE OPS < RADIX 10 ;; SET LOCAL RADIX OPD +,PLUS,100,ADD,70 OPD -,MINUS,100,SUB,70 OPD *,,,MUL,80 OPD /,,,DIV,80 OPD ^,,,POWER,90,RASSOC OPD <,,,LESS,50 OPD <=,,,LESSEQ,50 OPD >,,,GR,50 OPD >=,,,GREQ,50 OPD =,,,EQ,50 OPD #,,,NOTEQ,50 OPD &,,,AND,40 OPD !,,,OR,30 OPD _,,,ASSIGN,20,RASSOC ; OFFSET RIGHT ANGLE IN NEXT LINE < OPD -->,UGOTO,10,CGOTO,10 OPD __,,,NONCOPY,20,RASSOC OPD ==,,,INSTANCE,60 RADIX 8 >
;DEFINITIONS OF BUILT-IN FUNCTIONS NOT INVOKED BY OPERATORS DEFINE BIFS < BIF (RESET) ;; CLEAR RAF,RSF AND GO CONVERSE BIF (UNARY) ;; DEFINE A UNARY OPERATOR AND ITS ASSOCIATED FN BIF (BINARY) ;; DEFINE A BINARY OPERATOR AND ITS ASSOCIATED FN BIF (UNARY.PREC,SUPREC) ;; RETURNS UNARY PRECEDENCE BIF (BINARY.PREC,SBPREC) ;; RETURNS BINARY PRECEDENCE BIF (ASSOCIATIVITY) ;; RETURNS ASSOCIATIVITY BIF (UNARY.DEF,SUDEF) ;; RETURNS UNARY DEFINITION BIF (BINARY.DEF,SBDEF) ;; RETURNS BINARY DEFINITION BIF (OPERATORS) ;; RETURNS LIST OF OPS BIF (PRINT) ;; PRINT OUT THE ARGUMENT LIST ON ONE LINE BIF (LENGTH) ;; LENGTH OF A USER DATUM BIF (MAKE) ;; MAKE A SEQ OR VSEQ OF LENGTH N BIF (L.BOUND) ;; LOWER BOUND OF A SEQ OR VSEQ BIF (WRITE) ;; WRITE ALL DEFINED OPS,DDEFS,FNS ONTO AN ASCII FILE BIF (READ) ;; SWITCH ALL INPUT TO SOME ASCII FILE BIF (SAVE) ;; SAVE ENVIRONMENT ONTO BINARY FILE BIF (RESTORE) ;; RESTORE ENVIRONMENT FROM BINARY FILE BIF (INPUT) ;; OPEN A FILE FOR INPUT BIF (OUTPUT) ;; OPEN A FILE FOR OUTPUT BIF (INBYTE) ;; INPUT A BYTE FROM A FILE BIF (OUTBYTE) ;; OUTPUT A BYTE TO A FILE BIF (EOF) ;; TEST FOR END-OF-FILE BIF (OPENED) ;; TEST FOR FILE OPEN ON CHANNEL BIF (FREE.CHANNEL) ;; RETURN FIRST FREE CHANNEL NUMBER BIF (CLOSE) ;; CLOSE A FILE BIF (PRINTF,SPRNTF) ;; PRINT TO FILE BIF (FORMATF,SFRMTF) ;; FORMAT TO FILE BIF (INSTMT) ;; INPUT A STATEMENT FROM A FILE BIF (INSTRING) ;; INPUT A STRING FROM A FILE BIF (POSITION) ;; POSITION AN INPUT DISK FILE BIF (GETBYTE) ;; EXTRACT A BYTE FROM A DATUM BIF (PUTBYTE) ;; PACK A BYTE INTO A DATUM BIF (ERASE) ;; RUDIMENTARY ERASE FUNCTION - ERASE ID'S BIF (TYPE) ;; RETURNS STRING WHICH IS TYPE NAME BIF (NTYPE) ;; RETURNS INTERNAL NAME AS AN INT BIF (CONCAT) ;; CONCATENATES VARIADIC SEQUENCES BIF (FORMAT) ;; PERFORM NUMERIC OUTPUT FORMATTING BIF (STOP) ;; SET STOP BITS BIF (UNSTOP) ;; REMOVE STOP BITS BIF (TRACE) ;; SET TRACE BITS BIF (UNTRACE) ;; REMOVE TRACE BITS BIF (BACKTRACE) ;; BACKTRACE FUNCTION BIF (RESUME) ;; RESUME SUSPENDED ENVIRONMENT BIF (EXECUTE) ;; TRANSLATE AND EXECUTE FUNCTION BIF (COPYSF) ;; COPIES SYSTEM FUNCTION DEF BIF (SRETURN,SRETURN,SRETURN) ;; GENERALIZED VALUE RETURN FROM FNS BIF (UNASSIGNED);; UNASSIGNED VARIABLE PREDICATE BIF (SYSTEM.FN) ;; SYSTEM FN PREDICATE BIF (USER.FN) ;; USER FN PREDICATE BIF (COMPOSITE.TYPE) ;; COMPOSITE TYPE PREDICATE BIF (ATOMIC.TYPE) ;; ATOMIC TYPE PREDICATE BIF (SELECTOR.NAME) ;; SELECTOR NAME PREDICATE BIF (ALTERNATE.TYPE) ;; ALTERNATE TYPE PREDICATE BIF (VARIABLE,SVARCK) ;; VARIABLE PREDICATE BIF (CLASS) ;; RETURNS STRING CLASS BIF (FUNCTIONS) ;; ENUMERATE DEFINED FUNCTIONS BIF (VARIABLES) ;; ENUMERATE DEFINED VARIABLES BIF (DATA.DEFINITIONS) ;; ENUMERATE DATA-DEFS BIF (IDIV) ;; OLD (INTEGER) DIVIDE
BIF (SQRT) ;;**** LIBRARY FNS **** SQUARE ROOT BIF (EXP) ;; EXPONENTIAL BIF (LN) ;; NATURAL LOGARITHM BIF (SIN) ;; SINE BIF (COS) ;; COSINE BIF (ATAN) ;; ARCTANGENT BIF (RANDOM) ;; RANDOM NUMBER BIF (NOT) ;; LOGICAL OR INTEGER COMPLEMENTATION BIF (SYS,SMONIT) ;; EXIT TO MONITOR (CONTINUABLY) BIF (LOGOUT) ;; CLOSE FILES AND CALL LOGOUT
IFN ARDS,< BIF (SETPOINT) ;; SET BEAM POINTER TO (X,Y) ON ARDS BIF (SOLIDVEC) ;; DRAW SOLID VECTOR WITH DISPLACEMENTS (X,Y) BIF (DOTTEDVEC) ;; DRAW DOTTED VECTOR WITH DISPLACEMENTS (X,Y) BIF (ARDMODE) ;; ENTER SPECIAL ARDS OUTPUT MODE BIF (TTYMODE) ;; LEAVE SPECIAL ARDS MODE > IFE MITS,< BIF (SLEEP) ;; WAIT FOR N SECONDS BIF (DAYTIME) ;; RETURN TIME OF DAY IN MILLISECONDS BIF (DATE) ;; RETURN DATE AND TIME AS A STRING > IFN CHARIO,< BIF (GETCHAR) ;; GET A SINGLE CHARACTER (ALL BREAK) BIF (SENDCHAR) ;; SEND A SINGLE IMAGE CHR TO TTY > IFN SYLVN,< BIF (READSTYLUS) ;; SET VARIABLES XSTYLUS,YSTYLUS,ZSTYLUS ;; FROM SYLVANIA TABLET > IFN FTBAKG,< BIF (BACKGROUND) ;;ENTER BACKGROUND MODE BIF (FOREGROUND) ;;LEAVE BACKGROUND MODE > IFN FTSTAT,< BIF (STAT) ;; TURN ON OR OFF STATISTICAL REPORTING >>
;DEFINITIONS OF BUILT-IN VALUES FOR VARIABLES DEFINE BIVS < BIV (TRUE,TRUE) ;; BOOLEAN VALUE TRUE BIV (FALSE,FALSE) ;; BOOLEAN VALUE FALSE BIV (NULL,NULL) ;; NULL VALUE BIV (DEF.UNARY.PREC,DEFUP) ;; DEFAULT UNARY PREC BIV (DEF.BINARY.PREC,DEFBP) ;; DEFAULT BINARY PREC BIV (DEF.ASSOC) ;; DEFAULT ASSOCIATIVITY IFN SYLVN,< BIV (XSTYLUS,INTTAB) ;; SET TO STYLUS X COORD BY READSTYLUS BIV (YSTYLUS,INTTAB) BIV (ZSTYLUS,INTTAB) > BIV (TOP.PROMPT) ;; TOP-LEVEL PROMPTING STRING BIV (SUSPEND.PROMPT) ;; SUSPENDED-ENV PROMPT STRING BIV (DEMAND.PROMPT) ;; DEMAND-INPUT PROMPT STRING BIV (NEWLINE) ;; CARRIAGE RETURN/LINE FEED > ;DEFINITIONS OF RESERVED WORDS DEFINE RSWS < RSW (GENERAL) ;; UNIVERSAL PREDICATE RSW (STRUCTURE) ;; PREDICATE FOR UNION OF ALL STRUCTURES RSW (SEQUENCE) ;; PREDICATE FOR UNION OF ALL FIXED SEQUENCES RSW (V.SEQUENCE);; PREDICATE FOR UNION OF ALL VARIADIC SEQUENCES RSW (ATOMIC) ;; PREDICATE FOR UNION OF ALL ATOMS >
;MACRO FOR ASSIGNING SEQUENTIAL INDICES STARTING AT N DEFINE SEQIND(A,B,N) < ZZ== N-1 DEFINE A'DEF(X) < B''X== <ZZ==ZZ+1> > A'DEFS A'MAX== ZZ > SEQIND (B.,B.,1) ;NUMBER THE BLOCK TYPES SEQIND (I.,I.,1) ;NUMBER THE ID TYPES SEQIND (L.,<>,0) ;NUMBER THE LEXEME TYPES SEQIND (A.,<>,0) ;NUMBER THE INTERPRETER ACTIONS > ;;; END IF1 ;MNEMONICS FOR CONTENTS OF LEXEME TYPE FIELD WHEN ACTION IS "CXTWD" FORCWD==0 ;"FOR" CONTEXT WORD BOTCWD==1 ;BOTTOM CONTEXT WORD DMDCWD==2 ;DEMAND CONTEXT WORD SUSCWD==3 ;SUSPENSION CONTEXT WORD SNONE==<%NONE==0> ;CLEAN UP SOME IDT-OPT LINKAGE
;MACRO FOR GENERATING A SIXBIT NAME IN STANDARD FORMAT DEFINE IDSIX(A) ;PASS 1 DEFINITION < UN== ^D12 IRPC A <IFNB <A>,< UN==UN+1>> BLOCK <UN/6>-1 > IF2,< DEFINE IDSIX(A) ;PASS 2 DEFINITION < UN== ^D12 IRPC A <IFNB <A>,< UN== UN+1 >> UW== <UN/6>B5 UN== 5 IRPC A <IFNB <A>,< IFE UN,<EXP UW UW== 0 UN== 6 > UN== UN-1 UW== UW+<<SIXBIT/ A/>_<UN*6>>>> EXP UW > >; ***END IF2 ;MACRO TO GENERATE INITIAL DATA BLOCK HEADER. ; MACRO CALL IS OF THE FORM: ; BLKBGN TYPE,STORAGE ; WHERE TYPE SPECIFIES LH OF PZ WORD AND STORAGE SPECIFIES WHERE ; TO PUT POINTER TO THE GENERATED BLOCK (INDEXED BY B IF IN IDT) DEFINE BLKBGN(T,S) < IFDEF BLKLOC,< BLKEND ;;FINISH PREVIOUS BLOCK IF NECESSARY > CONC <<T>,,BSIZ>,\<BLKNUM==BLKNUM+1> Z S BLKLOC==. > ;MACRO TO DECLARE END OF AN INITIAL BLOCK. NOT NECESSARY IF FOLLOWED ; IMMEDIATELY BY ANOTHER BLKBGN DEFINE BLKEND < CONC BSIZ,\BLKNUM,==.-BLKLOC+1 PURGE BLKLOC >
IF1,< ;MACRO FOR ENTERING IDT NAMES FOR THE PREDEFINED USER TYPES DEFINE U.DEF(A,B) < U.'A== .-BEGIDT+1 IF2,<IFNDEF S'A,<EXTERN S'A>> XWD I.'B,S'A IFIDN <B><ATOM>,<LSTATM==U.'A> IDSIX(A) > >; *** END IF1 BLKNUM==0 ;START NUMBERING THE INITIAL BLOCKS INIDAT: BLKBGN B.IDT(SYSBIT),IDTP ;IDENTIFIER TABLE HEADER BEGIDT: U.DEFS
;ENTER SYNTAX TOKENS DEFINE S.DEF(A,B) < XWD I.SYNTOK,^D'B IDSIX (A) > S.DEFS
;ENTER RESERVED WORDS IF1,< DEFINE RSW(A) < XWD I.RESW,RSWN %'A== .-BEGIDT IDSIX(A) RSWN== RSWN+1 > > RSWN== 1 RSWS FSTRDF==.-BEGIDT+1 ;INDEX OF FIRST ID THAT USER MAY REDEFINE ; OR ERASE
;ENTER THE NAMES FOR THE BUILT-IN FUNCTIONS INTO THE IDT DEFINE OPD(OP,U,UP,B,BP,BA) < IFNB <B>,< %'B== .-BEGIDT+1 EXTERN S'B XWD I.SFN,S'B IDSIX (B) > IFNB <U>,< %'U== .-BEGIDT+1 EXTERN S'U XWD I.SFN,S'U IDSIX (U) >> OPS
;ENTER BUILT-IN FUNCTIONS NOT INVOKED BY OPERATORS IF1,< DEFINE BIF(A,B,C) < IFNB <C>,< %'C==.-BEGIDT+1 > IFB <B>,< XWD I.SFN,S'A EXTERN S'A > IFNB <B>,< XWD I.SFN,B EXTERN B > IDSIX (A) > > BIFS
;ENTER BUILT-IN VALUES IF1,< DEFINE BIV(A,B) < IFNB <B>,<IF2,<IFNDEF B,<EXTERN B>>> XWD I.VAR,B %'A== .-BEGIDT IDSIX(A) > > BIVS IDTLEN==.-BEGIDT+1 ;INITIAL LENGTH OF IDT
;GENERATE THE INITIAL OPT CONTENTS %== 0 ;FOR UNDEFINED USES OF OPERATORS DEFINE OPD(OP,U,UP,B,BP,AS<0>) < $'U== <$'B==.-BEGOPT+1> ''OP'' XWD %'U,%'B XWD UP,BP!AS > BLKBGN B.OPT(SYSBIT),OPTP ;OPERATOR TABLE HEADER BEGOPT: OPS OPTLEN==.-BEGOPT+1 ;INITIAL SIZE OF OPT
;OTHER INITIAL DATA BLOCKS TO BE GENERATED WHEN PPL IS STARTED ; $STRING = [1: ] CHAR SSTRIN: BLKBGN B.VSEQ(SYSBIT),U.STRING(B) 1,, U.CHAR ; $TUPLE = [1: ] GENERAL STUPLE: BLKBGN B.VSEQ(SYSBIT),U.TUPLE(B) 1,, %GENERAL ; DEF.ASSOC _ "L" BLKBGN U.STRING,%DEF.AS(B) EXP 4 ;LENGTH ASCII /LEFT/ ;DEFAULT LEFT ASSOCIATIVITY ; TOP.PROMPT _ " " BLKBGN U.STRING,%TOP.PR(B) EXP 1 ;LENGTH OF STRING ASCII / / ;A SINGLE TAB ; SUSPEND.PROMPT _ " S> " BLKBGN U.STRING,%SUSPEND(B) EXP 8 ;LENGTH OF STRING ASCII / S> / ;5 SPACES, S>, ONE SPACE ; DEMAND.PROMPT _ " ? " BLKBGN U.STRING,%DEMAND(B) EXP 8 ;LENGTH OF STRING ASCII / ? / ;6 SPACES, ? , ONE SPACE ; NEWLINE _ STRING(CHAR(13),CHAR(10)) BLKBGN U.STRING,%NEWLINE(B) EXP 2 ;LENGTH OF STRING ASCII / / ;NEW LINE CHARACTERS INIEND: BLKEND ;END OF INITIAL DATA BLOCK TABLE
;UUO DEFINITIONS IF1,< ;THE 'UUO' MACRO DEFINES UUO NAME AND DISPATCH ADDRESS. DEFINE UUOS < UUO ERROR,SYSERR ;IRRECOVERABLE SYSTEM ERROR UUO TTI,TTYI ;TTY INPUT UUO TTO,TTYO ;TTY OUTPUT UUO TTOI,TTYOI ;TTY OUTPUT IMMEDIATE UUO TTOS,TTYOS ;TTY OUTPUT SIXBIT STRING UUO TTOA,TTYOA ;TTY OUTPUT ASCIZ STRING UUO LEXERR,LXERR ;ERROR DETECTED DURING LEXICAL ANALYSIS UUO SYNERR,XSYNER ;ERROR DETECTED DURING SYNTAX ANALYSIS UUO EDIERR,EDTERR ;ERROR DETECTED WITHIN EDITING UUO DFAD,XDFAD ;DOUBLE PRECISION FLOATING POINT UUO DFSB,XDFSB UUO DFMP,XDFMP UUO DFDV,XDFDV UUO SFNERR,XSFNERR ;ERROR DETECTED BY SYSTEM FUNCTION UUO SFNERP,XSFNEP ;SAME AS SFNERR EXCEPT RETURNS TO CALLER UUO EXERR,XEXERR ;MISCELLANEOUS EXECUTION ERROR UUO DEVERR,UDVERR ;I/O ERROR WITH FILE NOT NECESSARILY OPEN UUO DEVERP,UDVERP ;DEVERR BUT RETURNS TO CALLER AFTER MSG UUO FILERR,UFLERR ;I/O ERROR FILE OPEN UUO FILERP,UFLERP ;FILERR BUT RETURNS TO CALLER AFTER MSG. UUO WARNING,XWARN ;NON-FATAL WARNING MESSAGE IFN ARDS,< UUO ARDMODE,XARDM ;SET AN ARDS GRAPHICAL MODE > IFN FTSTAT,< UUO STAT,XSTAT ;RECORD STATISTICAL INFORMATION >> ;DEFINE THE NAMES UUON== 1 DEFINE UUO(A,B) < OPDEF A [<UUON>B8] UUON== UUON+1 > UUOS > END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search