00100 (*+01() (*$L-*)  ()+01*)
00110 (*+02() (*$I32*)(*$T-*)(*$W-*)(*$G-*)(*$D+*)(*$R-*)(*$L+*)(*$E+*) ()+02*)
00120                 (*LIST OF TAILORING OPTIONS*)
00130                 (***************************)
00140 (**)
00150 (*  1..9 DIFFERENT MACHINES
00160         01 = CDC
00170         02 = EM SYSTEM
00180         03 = NORD 100
00190         04 = POS PERQ
00200         05 = PNX PERQ
00210     11..19 DIFFERENT WORD LENGTHS
00220         11 = 60 BITS
00230         12 = 16 BITS
00240         13 = 32 BITS
00245         19 = 16 BITS WITH SZADDR=32 BITS (EG VAX2)
00250     21..29 DEBUGGING AIDS
00260         21 = MONITORING OF SEMANTIC ROUTINES
00270         22 = TIMING CHECK
00280         23 = TEMPORARY CODE EMITTER
00290         24 = EM CODE EMITTER
00300         25 = EM MACHINE ON CYBER
00310    31..39 PRAGMATS
00320         31 = CHECKS (RUN TIME) ON
00330         32 = ASSERTIONS (COMPILE TIME) CHECKED
00332         33 = GENERATE CODE FOR SYMBOLIC DEBUGGER
00340     41..49 DIFFERENT STACK STRATEGIES
00350         41 = STACK GROWS IN NEGATIVE DIRECTION
00360         42 = SEPARATE SPACES FOR CODE AND DATA
00370         43 = INTEGER LENGTH > MANTISSA LENGTH (E.G. CYBER OR NO FLOATING POINT)
00372         44 = FLOATING POINT NOT AVAILABLE
00380     50..59 SPECIAL OPTIONS
00390         50 = CDC CHARACTER CODE
00400         51 = UMRCC SPECIAL 7600 CODE
00410         52 = CDC 7600 (AS OPPOSED TO CYBER)
00420         53 = VERY LONG PROCEDURES SPLIT IN TWO TO HELP PASCAL COMPILER
00430         54 = EXPERIMENTAL ON ERROR FACILITY
00440         55 = REDUCED LISTING AND ERROR MESSAGES
00450     61..69 DIFFERENT LENGTH FEATURES
00460         61 = LONG WORDS
00470     (70..89 ARE ONLY RELEVANT FOR SEPARATE COMPILATION )
00480         70 = ALL DECLARATIONS
00490     71..79 UNIT INTERFACES
00500         71 = PROGRAM HEADING
00510         72 = A68 PARSER (PRODTABLE)
00520         73 = A68 LEXICAL (LXIO'S)
00530         75 = P-OPS FOR OPERATORS
00540         76 = OTHER P-OPS
00550         77 = A68 CODE EMITTER (RUN-TIME OBJECTS)
00560         78 = CODETABLE
00570         80 = GLOBAL UNIT
00580     81..89 UNIT IMPLEMENTATIONS
00590         81 = A68 LEXICAL  *
00600         82 = A68 PARSER  *
00610         83 = A68 LEXEME INITIALISATION  *
00620         84 = A68 MODE INITIALATION  *
00630         85 = A68 SEMANTICS  *
00640         86 = A68 CODE GENERATOR  *
00650         87 = A68 CODE EMITTER
00660 *)
00670 (*+01()    (*$G-+)    ()+01*)
00680 (*+01()    (*$W5750+)    ()+01*)
00690 (*+01()    (*$T-,P-+)    ()+01*)
00700 (*+25()    (*$G-+)    ()+25*)
00710 (*+25()    (*$W5750+)    ()+25*)
00720 (*+25()    (*$T-,P-+)    ()+25*)
00730     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
00740 (**)
00750 (*-03()
00760 (*+01() PROGRAM A68SCOM(SOURCDECS, OUTPUT+, LGO, LSTFILE, A68INIT ); ()+01*)
00770 (*-01() (*-05() (*+71()
00780 PROGRAM A68SCOM(SOURCDECS, LGO, LSTFILE, A68INIT, DUMPF, OUTPUT);
00790 ()+71*) ()-05*) ()-01*)
00800 (*+25() PROGRAM A68SCOM(SOURCDECS, OUTPUT, LGO, LSTFILE, A68INIT ); ()+25*)
00810 ()-03*)
00820 (*+04()
00830 EXPORTS
00840 IMPORTS HACKS FROM HACKS;
00850 IMPORTS A68SIN FROM A68SIN;
00860 IMPORTS A68S1 FROM A68S1;
00870 ()+04*)
00880 (**)
00890 (*+70()
00900 CONST (* CONST CONST CONST CONST CONST CONST CONST CONST CONST CONST CONST CONST CONST CONST CONST CONST*)
00910 (**)
00920                 (*ENVIRONMENT*)
00930                 (*************)
00940 (**)
00950   VERSIONNUM='(VERSION 2.2)';
00960 (*+01()
00970   ALG68NUM='ALG68S 2.2';
00980   NOSNUM='NOS    2.2';
00990 ()+01*)
01000 (*+11()
01010   MAXINT=7777777777777777B;
01040   MAXABSCHAR=63;
01070   MAXSIZE=110B; (*MAX SIZE OF NONSTOWED OBJECT*)
01080   TRUEVALUE=40000000000000000000B;
01090 ()+11*)
01100 (*+12()
01110   MAXINT=32767;
01120 (*+02() TRUEVALUE=1; ()+02*) (*SHOULD MATCH WITH RUN-TIME SYSTEM*)
01130 (*-02() TRUEVALUE=-32768; ()-02*)
01140   MAXSIZE=127;
01200   MAXABSCHAR=127;
01210 ()+12*)
01220 (*+13()
01230   MAXINT=2147483647;
01270   MAXABSCHAR=127;
01290   MAXSIZE=127;
01300 (*+02() TRUEVALUE=1; ()+02*)
01302 (*-02() TRUEVALUE=(*-2147483648*) -1; ()-02*)
01310 ()+13*)
01320 (*+01() RTNLENGTH=7; ()+01*) (*LENGTH OF PROCEDURE NAMES*)
01330 (*+02() RTNLENGTH=8; ()+02*) (*SHOULD MATCH WHAT YOUR PASCAL*)
01340 (*+03() RTNLENGTH=5; ()+03*) (*COMPILER PRODUCES*)
01350 (*+05() RTNLENGTH=7; ()+05*)
01370 (**)
01380                 (*LISTING*)
01390                 (*********)
01400 (**)
01410   CBUFSIZE=120;  (*SIZE OF OUTPUT BUFFERS*)
01420   HTSIZE=163;    (*HASH TABLE SIZE*)
01430 (*+01()   LEX1SIZE=1; ()+01*)
01440 (*+02() (*+12() (*-19() LEX1SIZE=10; ()-19*)
01445                 (*+19() LEX1SIZE=14; ()+19*) ()+12*)
01446         (*+13() LEX1SIZE=16; ()+13*)
01447 ()+02*)
01450 (*+03() LEX1SIZE=4; ()+03*)
01460 (*+04() LEX1SIZE=8; (*SIZE OF STATIC PART OF LEXEME*) ()+04*)
01470 (*+05() LEX1SIZE=8; ()+05*)
01480 (*+03()   LINESPERPAGE=54;  ()+03*)
01490 (*-03()   LINESPERPAGE=58;  ()-03*)
01500 (**)
01510 (**)
01520                 (*MODE HANDLING*)
01530                 (***************)
01540 (**)
01550 (*+01() MODE1SIZE=1; ()+01*)
01560 (*+02() MODE1SIZE=(*+12() (*-19() 14 ()-19*) (*+19() 18 ()+19*) ()+12*) (*+13() 20 ()+13*); ()+02*)
01570 (*+03() MODE1SIZE=4; ()+03*)
01580 (*+04() MODE1SIZE=8; ()+04*)
01590 (*+05() MODE1SIZE=10; ()+05*)
01600 (**)
01610 (**)
01620                 (*LEXICAL ANALYSIS*)
01630                 (******************)
01640 (*+11() TAXLEN=640; TAXLENWD=64; TAXLENWD2=128; CHARPERWORD=10; WORDSPERREAL=1; ()+11*)
01650 (*+12() TAXLEN=510; TAXLENWD=255; CHARPERWORD=2; WORDSPERREAL=(*+03()3()+03*)(*-03()4()-03*); ()+12*)
01660 (*+13() TAXLEN=508; TAXLENWD=127; CHARPERWORD=4; WORDSPERREAL=2; ()+13*)
01670 (*-73() LXIODUMMY=0; LXIOVDEFL=28; ()-73*)
01680 (**)
01690                 (*ERROR HANDLING*)
01700                 (****************)
01710   ELX=0; ESY=10; ESE=60; DUMMY=0; FINISH=9;
01720   ESY01=130; SR01=11;
01730 (**)
01740 (**)
01750                 (*CODE EMITTER*)
01760                 (**************)
01761 (*+02() OUTPUTEFET=38; 
01762        (*+12() (*-19() FIRSTIBOFFSET=30; ()-19*) (*+19() FIRSTIBOFFSET=50; ()+19*) ()+12*)
01763        (*+13() FIRSTIBOFFSET=52; ()+13*)
01765 (*PARAMS SZREAL+SZWORD+(2*SZADDR)+LINKS  (8*SZADDR) *)
01767         (* IF YOU CHANGE THIS YOU HAVE TO CHANGE FIRSTIBOFFSET IN E.H *)
01768         A68STAMP=13476; (* A HIGHLY IMPROBABLE NUMBER *)
01769 ()+02*)
01770 (*+77()
01780 (*+01()
01790   OUTPUTEFET=23B; (*OFFSET OF 'OUTPUT'*)
01800   FIRSTVAR=510B;  (*OFFSET OF FIRST PASCAL VAR; KNOWN TO A68SCOD*)
01810   FIRSTIBOFFSET=531B; (*IF YOU ALTER THIS, THERE ARE SOME CORRESPONDING CHANGES TO THE CODETABLE*)
01820 ()+01*)
01840 (*+03() OUTPUTEFET=9999; FIRSTIBOFFSET=9999; (*NEED FIXING*) ()+03*)
01850 (*+04() OUTPUTEFET=9999; FIRSTIBOFFSET=83; ()+04*)
01860 (*+05() OUTPUTEFET=9999; FIRSTIBOFFSET=0; ()+05*)
01870 ()+77*)
01880 (*+02()
01890 (**)
01891 (* CONSTANTS FOR PRODUCING COMPACT EM-1 CODE *)
01892 (*+24()
01893   ADF= 2; ADI= 3; ADP= 4; CAND=7; ASP= 8; BEQ=10; BGE=11; BGT=12; BLE=13; BLT=16; BNE=17; BRA=18;
01894   CAI=19; CAL=20; CFF=21; CIF=24; CIU=26; CMF=27; CMI=28; CMU=31; COM=32; CSA=33;
01895   DUP=42; DVF=44; DVI=45; EXG=47; GTO=51; INC=52; INL=54; IOR=56;
01896   LAE=57; LAL=58; LAR=59; LDC=60; LDE=61; LDF=62; LDL=63; LFR=64; LIL=65; LIN=67; LOC=69;
01897   LOE=70; LOF=71; LOI=72; LOL=73; LOR=74; LOS=75; LPB=76; LPI=77; LXA=78; LXL=79; 
01899   MLF=80; MLI=81; NGF=84; NGI=85; NOP=86; RET=88; ROL=91;
01900   SBF=95; SBI=96; SDE=99; SDF=100; SDL=101; CSET=102; SIL=104; STE=110; STF=111; STI=112; STL=113; STR=114;
01901   TEQ=116; TGE=117; TGT=118; TLE=119; TLT=120; TNE=121;
01902   XOR=123;
01903   ZEQ=124; ZER=125; ZGE=126; ZGT=127; ZNE=130; ZRF=132; ZRL=133;
01904 (*+78() BSS=150; CON=151; EEND=152; EXC=154; EXP=155; HOL=156; MES=159; PRO=160; ROM=161; ()+78*)
01907   EOOPNDS=255;
01908 ()+24*)
01909 (*-24()
01910   ADF='ADF';ADI='ADI';ADP='ADP';CAND='AND';ASP='ASP';BEQ='BEQ';BGE='BGE';BGT='BGT';BLE='BLE';BLT='BLT';BNE='BNE';BRA='BRA';
01911   CAI='CAI';CAL='CAL';CFF='CFF';CIF='CIF';CIU='CIU';CMF='CMF';CMI='CMI';CMU='CMU';COM='COM';CSA='CSA';
01912   DUP='DUP';DVF='DVF';DVI='DVI';EXG='EXG';GTO='GTO';INC='INC';INL='INL';IOR='IOR';
01913   LAE='LAE';LAL='LAL';LAR='LAR';LDC='LDC';LDE='LDE';LDF='LDF';LDL='LDL';LFR='LFR';LIL='LIL';LIN='LIN';LOC='LOC';
01914   LOE='LOE';LOF='LOF';LOI='LOI';LOL='LOL';LOR='LOR';LOS='LOS';LPB='LPB';LPI='LPI';LXA='LXA';LXL='LXL';
01915   MLF='MLF';MLI='MLI';NGF='NGF';NGI='NGI';NOP='NOP';RET='RET';ROL='ROL';
01916   SBF='SBF';SBI='SBI';SDE='SDE';SDF='SDF';SDL='SDL';CSET='SET';SIL='SIL';STE='STE';STR='STR';STF='STF';STI='STI';STL='STL';
01917   TEQ='TEQ';TGE='TGE';TGT='TGT';TLE='TLE';TLT='TLT';TNE='TNE';
01918   XOR='XOR';
01919   ZEQ='ZEQ';ZER='ZER';ZGE='ZGE';ZGT='ZGT';ZNE='ZNE';ZRF='ZRF';ZRL='ZRL';
01920   BSS='BSS';CON='CON';EEND='END';EXC='EXC';EXP='EXP';HOL='HOL';MES='MES';PRO='PRO';ROM='ROM';
01922   EOOPNDS='   ';
01923 ()-24*)
01924  (**)
01925  CPACTLCL=241; CPACTGBL=242; CPACTCONS=245; CPACTLBL=248; CPACTPNAM=249; CPACTSTRNG=250; CPACTINT=251; CPACTUNS=252; CPACTFLOAT=253;
01931 (*-19()
01932   LFC=LOC; LFL=LOL; LFE=LOE; LFF=LOF; SFL=STL; SFE=STE; SFF=STF;
01933 ()-19*)
01934 (*+19()
01935   LFC=LDC; LFL=LDL; LFE=LDE; LFF=LDF; SFL=SDL; SFE=SDE; SFF=SDF;
01936 ()+19*)
01990 ()+02*)
02000   PNOOP=0(*6*);
02010 (*+75()
02020   PADD(*6*)=-6; PSUB(*6*)=-12; PMUL(*6*)=-18; PDIV(*6*)=-24; POVER(*2*)=-30; PMOD(*2*)=-32;
02030   PEXP(*6*)=-34; PEQ(*6*)=-40; PEQCS(*2*)=-46; PEQB(*3*)=-48; PNE(*6*)=-51; PNECS(*2*)=-57; PNEB(*3*)=-59;
02040   PLT(*4*)=-62; PLTCS(*2*)=-66; PLTBY=-68; PLE(*4*)=-69; PLECS(*2*)=-73; PLEBT(*2*)=-75;
02050   PGT(*4*)=-77; PGTCS(*2*)=-81; PGTBY=-83; PGE(*4*)=-84; PGECS(*2*)=-88; PGEBT(*2*)=-90;
02060   PCAT(*2*)=-92; (*SEE LATER(2)=-94;*) PPLSAB(*6*)=-96; PPLSABS(*2*)=-102; PPLSTOCS(*2*)=-104;
02070   PMINUSAB(*6*)=-106; PTIMSAB(*6*)=-112; PTIMSABS=-118; PDIVAB(*4*)=-119; POVERAB(*2*)=-123;
02080   PMODAB(*2*)=-125; PANDB(*2*)=-127; PORB(*2*)=-129; PUPB=-131; PUPBM=-132; PUPBMSTR=-133;
02090   PLWB=-134; PLWBM=-135; PLWBMSTR=-136; PSHL=-137; PSHR=-138;
02100   PELMBT=-139; PELMBY=-140; PMULCI(*2*)=-141; PMULIC(*2*)=-143; PPLITM(*2*)=-145;
02110   PNEGI(*6*)=-147; PABSI(*6*)=-153; (*SPARE=-159;*) PABSB(*2*)=-160; PABSCH=-162;
02120   PNOTB(*2*)=-163; PARG(*2*)=-165; PCONJ(*2*)=-167; PENTI(*2*)=-169;
02130   PROUN(*2*)=-171; PODD(*2*)=-173; PLENGI=-175; PLENGR=-176; PLENGC=-177;
02140   PSHRTI=-178; PSHRTR=-179; PSHRTC=-180; PSGNI(*4*)=-181; PREPR=-185; PBIN=-186;
02150   PRE=-187; PIM=-188;
02160 ()+75*)
02170   PNONE=-189;
02180 (*+76()
02182   PDUP1PILE=-94; PDUP2PILE=-95; (* THESE SHOULD BE MOVED AT NEXT OPPORTUNITY*)
02190   PSELECT(*3*)=1; PSTRNGSLICE(*2*)=4; PSTARTSLICE=6; PSLICE1=7;
02200   PSLICE2=8; PSLICEN=9; PCASE=10; PJMPF=11; PLPINIT(*4*)=12;
02210   PRANGENT=16; PRANGEXT(*3*)=17;
02220   PSCOPEEXT=20; PACTDRMULT=21; PACTDRSTRUCT=22;
02230   PDCLINIT(*4*)=23; PCREATEREF(*4*)=27; PPARM=31; PCHECKDESC=32; PDCLSP(*4*)=33; PLOADRT=37;
02240   PBOUNDS=38; PENVCHAIN(*2*)=39; PVARLISTEND(*2*)=41; PCASJMP(*2*)=43; PSCOPETT(*5, BUT 1ST 2 NOT USED*)=43;
02250   PASSIGTT(*5*)=48; PSCOPETN=53; PASSIGTN=54; POUTJUMP=55; PSCOPENT(*5, BUT 1ST 2 NOT USED*)=55;
02260   PASSIGNT(*4*)=60; PRECGEN=64; PSCOPENN=65; PASSIGNN=66; PSCOPEVAR(*3*)=67; PLOADVAR(*3*)=70;
02270   PDUP1ST(*2*)=73; PDUP2ND(*4*)=75; PGETTOTAL(*5*)=79;
02280 ()+76*)
02290   PIDTYREL(*2*)=84; PDEREF(*5*)=86;
02300   PVOIDNAKED=91; PSKIP(*3*)=92; PSKIPSTRUCT=95; PNIL=96;
02310   PPUSH(*3*)=97; PVOIDNORMAL=100; PDATALIST=101; PWIDEN(*8*)=102;
02320   PROWNONMULT=110; PROWMULT=111;
02330 (*+76()
02340   PCALL=112; PRETURN=113;
02350   PRNSTART=114; PLPINCR(*2*)=115; PLPTEST=117; PGBSTK=118; PLEAPGEN(*6*)=119;
02360   PGETTOTCMN(*3*)=125; PSELECTROW=128; PHOIST=129; PPREPSTRDISP=130; PPREPROWDISP(*2*)=131;
02370   PCOLLTOTAL(*5*)=133; PCOLLNAKED=138; PCOLLCHECK=139; PPEND=140;
02380   PLINE=141; PENDSLICE=142; PTRIM(*10*)=143; PJMP=153; PGETOUT=154;
02390   PGETMULT(*2*)=155; PNAKEDPTR=157; PPBEGIN(*2*)=158; PCASCOUNT=160; PLOADRTP=161;
02400   PASGVART(*9*)=162; PPASC(*4*)=171;
02410   PPUSHIM(*4*)=175; PSETIB=179; PGETPROC(*2*)=180; PASP=182;
02420   PFIXRG(*2*)=183;PDECM(*2*)=185;PCALLA(*3*)=187;
02430 (*+02() PSWAP(*4*)=190; ()+02*)
02440 (*+05() PSWAP=190; PHEAVE=191; PSTKTOE(*3*)=192; PALIGN=195; PDISCARD=196; ()+05*)
02450 (*+01() PSWAP=190; PLOADX0IM(*2*)=191;PLOADX1IM(*2*)=193;PLOADX2IM(*2*)=195;PLOADX3IM(*2*)=197;PLOADX4IM(*2*)=199;
02460         PSTATICLINK=201; PPOP=202;
02470 ()+01*)
02480 ()+76*)
02490 (*+01()  (*-61() PLAST=363; ()-61*) (*+61() PLAST=419; ()+61*)  ()+01*)
02500 (*+02()  (*-61() PLAST=350; ()-61*) (*+61() PLAST=365; ()+61*)  ()+02*)
02504 (*+05()  PLAST=400; ()+05*)
02510 (**)
02520 (*-76() PENVCHAIN=39; PSWAP=129; PPEND=140; PJMP=153; PPUSHIM=175; ()-76*)
02530 (**)
02540 (*+01()
02550   LOADMARGIN=8; (*ALLOW ROOM ABOVE FIELDLENGTH NEEDED BY LOADER*)
02560   ABSMARGIN=500B; (*ADDITIONAL FL NEEDED BY ABSOLUTE LOAD OVER & ABOVE FL NEEDED BY RELOCATEABLE
02570                     LOAD OF THE SAME PROGRAM. 500B IS NEEDED BECAUSE OF APPARENT BUG IN NOS1.4-531*)
02580  ()+01*)
02590 (*+25()
02600   LOADMARGIN=8; (*ALLOW ROOM ABOVE FIELDLENGTH NEEDED BY LOADER*)
02610   ABSMARGIN=320; (*ADDITIONAL FL NEEDED BY ABSOLUTE LOAD OVER & ABOVE FL NEEDED BY RELOCATEABLE
02620                     LOAD OF THE SAME PROGRAM. 500B IS NEEDED BECAUSE OF APPARENT BUG IN NOS1.4-531*)
02630  ()+25*)
02640 (*+05() LASTRNLEVEL=9; ()+05*)
02650 (**)
02660                 (*SEMANTIC ROUTINES*)
02670                 (*******************)
02680 (**)
02690   SRSTKSIZE=40;             (*SIZE OF SEMANTIC STACK*)
02700 (*+01()
02710   SZWORD=1; SZADDR=1; SZINT=1; SZREAL=1; SZLONG=2; SZNAKED=1; SZDL=1; SZPROC=1; SZTERM=2;
02720      (*SIZES OF OBJECTS IN ADDRESSING UNITS*)
02730   SIZIBTOP=0;               (*SHOULD PROBABLY BE ABOLISHED*)
02740   SIZIBBASE=10;             (*SIZE OF INVBL BASE*)
02750   SIZLEBBASE=4;             (*SIZE OF LOCAL ENVIRONMENT BASE*)
02760   PARAMOFFSET=0;
02770   LOOPOFFSET=0;             (*OFFSET OF LOOPCOUNT WITHIN CURRENT RGBLOCK*)
02780   RGOFFSET=3;               (*OFFSET OF RGLASTUSED WITHIN CURRENT RGBLOCK*)
02790 ()+01*)
02800 (*+03()
02810   SZWORD=1; SZADDR=1; SZINT=1; SZREAL=3; (*SZLONG*) SZNAKED=3; SZDL=2; SZPROC=1; SZTERM=8;
02820      (*SIZE OF OBJECTS IN ADDRESSING UNITS*)
02830   SIZIBTOP=0;
02840   SIZIBBASE=20;
02850   SIZLEBBASE=6;
02860 ()+03*)
02870 (*+02() (*+12() (*-19()
02880   SZWORD=2; SZADDR=2; SZINT=2; SZREAL=8; SZLONG=4; SZNAKED=4; SZDL=2; SZPROC=4; SZTERM=16;
02890      (*SIZE OF OBJECTS IN ADDRESSING UNITS*)
02900   SIZIBTOP=0;
02910   SIZIBBASE=999;
02920   SIZLEBBASE=888;
02930 ()-19*)
02931 (*+19()
02932   SZWORD=2; SZADDR=4; SZINT=2; SZREAL=8; SZLONG=4; SZNAKED=8; SZDL=2; SZPROC=8; SZTERM=16;
02933   SIZIBTOP=0;
02934   SIZIBBASE=12;    (* SAME AS RUN TIME IBCONST *)
02935   SIZLEBBASE=20;   (* SIZE OF A RANGEBLOCK, SAME AS RUN TIME RGCONST *)
02936   RGOFFSET=4;      (* OFFSET TO RG(LASTUSED/NEXTFREE) FROM CURLEB *)
02937   LOOPOFFSET=20;   (* OFFSET TO LOOPCOUNT FROM CURLEB *)
02938   PARAMOFFSET=14;  (* AMOUNT TO ADD TO GET AT ACTUAL PARAMS, AFTER BITPATTERN *)
02939 ()+19*) ()+12*)
02940 (*+13()
02941   SZWORD=4; SZADDR=4; SZINT=4; SZREAL=8; SZLONG=4; SZNAKED=8; SZDL=4; SZPROC=8; SZTERM=16;
02942   SIZIBTOP=0;
02943   SIZIBBASE=20;
02944   SIZLEBBASE=24;
02945   RGOFFSET=4;
02946   LOOPOFFSET=24;
02947   PARAMOFFSET=16;
02948 ()+13*) ()+02*)
02949 (*+04()
02950   SZWORD=1; SZADDR=2; SZINT=2; SZREAL=4; SZLONG=2; SZNAKED=4; SZDL=3; SZPROC=1; SZTERM=8;
02960      (*SIZE OF OBJECTS IN ADDRESSING UNITS*)
02970   SIZIBTOP=0;
02980   SIZIBBASE=999;
02990   SIZLEBBASE=888;
03000 ()+04*)
03010 (*+05()
03020   SZWORD=2; SZADDR=2; SZINT=2; SZREAL=4; SZLONG=4; SZNAKED=4; SZDL=4; SZPROC=4; SZTERM=16;
03030   SIZIBTOP=0;
03040   SIZIBBASE=12;
03050   PARAMOFFSET=12;
03060   SIZLEBBASE=12;
03062   LOOPOFFSET=12;
03064   RGOFFSET=2;
03070 ()+05*)
03080 (*+76() DLACTION=4; DLUNITS=8; ()+76*) (*+74() DLVAREMPTY=1; DLSTRUCT=4; DLMULT=6; ()+74*)
03090         DLASCR=12; (* DLBNDS=10; DLDESC=11; *)
03100                             (*STATES*)
03110 (*+74()
03120   XINT=0; XLINT=1; XREAL=2; XLREAL=3; XCOMPL=4; XLCOMPL=5;
03130   XCHAR=6; XSTRNG=7;
03140   XBOOL=8; XBITS=9; XBYTES=10;
03150 ()+74*)
03160 (**)
03170 (**)
03180                 (*PARSING*)
03190                 (*********)
03200 (**)
03210   SRPLSTKSIZE=80;         (*SIZE OF PARSER STACK*)
03220   PRODLEN=407;
03230 (**)
03240 (**)
03250 TYPE (*TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE*)
03260 (**)
03270                 (*MISCELLANEOUS*)
03280                 (***************)
03290 (**)
03300 (*+01() A68INT=INTEGER; A68LONG = RECORD V1: INTEGER; V2: INTEGER END; ADDRINT=INTEGER; ()+01*)
03310 (*+02() (*+12()
03320 (*-19() A68INT=INTEGER; A68LONG=LONG; ADDRINT=INTEGER; ()-19*)
03325 (*+19() A68INT=INTEGER; A68LONG=LONG; ADDRINT=LONG; ()+19*) ()+12*)
03326 (*+13() A68INT=INTEGER; A68LONG=INTEGER; ADDRINT=INTEGER; ()+13*)
03330 ()+02*)
03340 (*+03() A68INT=INTEGER; A68LONG=REAL; ADDRINT=INTEGER; ()+03*)
03350 (*+04() A68INT=LONG;    A68LONG=LONG; ADDRINT=LONG; ()+04*)
03360 (*+05() A68INT=INTEGER; A68LONG=REAL; ADDRINT=INTEGER; ()+05*)
03370 (*+01()  DUMPOBJ=RECORD INT,MASK: INTEGER END;   (*FOR A68INIT FILE*) ()+01*)
03380 (*+25()  DUMPOBJ=RECORD INT,MASK: INTEGER END;   (*FOR A68INIT FILE*) ()+25*)
03390   PINTEGER=^INTEGER;
03400 (*-03()
03410   LOADFILE=(*+01()  SEGMENTED  ()+01*)  (*+25() SEGMENTED ()+25*)FILE OF ADDRINT;
03420 (*+01()  FYL = SEGMENTED FILE OF CHAR;  ()+01*)
03430 (*-01()  FYL = (*+25() SEGMENTED FILE OF CHAR ()+25*)  (*-25() TEXT ()-25*);  ()-01*)
03440 ()-03*)
03450 (*+03()
03460   LOADFILE=BYTES;
03470 ()+03*)
03480 (**)
03490   SEVERAL=1..10;
03500 (*+11() BYTE=0..63; ()+11*)
03510 (*-11() BYTE=0..255; ()-11*)
03520 (**)
03530                 (*LISTING*)
03540                 (*********)
03550 (**)
03560   BUFFER=ARRAY[0..CBUFSIZE] OF CHAR;
03570 (*+01()
03580   W66=PACKED RECORD
03590     FILL1: PACKED ARRAY [1..4] OF CHAR;
03600     JOPR: 0..7777B;
03610     FILL2: PACKED ARRAY [1..4] OF CHAR;
03620     END;
03630   PW66=^W66;
03640  ()+01*)
03650 (*+05() ARGSTRING=PACKED ARRAY [1..50] OF CHAR;
03652         TIMSTRING=PACKED ARRAY [1..26] OF CHAR;
03654 ()+05*)
03660                 (*MODE HANDLING*)
03670                 (***************)
03680 (**)
03690 (*+11()   LABL=-177777B..177777B;   ()+11*)
03700 (*+12()   LABL=-32767..32767;   ()+12*)
03710 (*+13()   LABL=-32767..32767;   ()+13*)
03720   MDIDTYPE=(MDIDINT, MDIDLINT, MDIDREAL, MDIDLREAL, MDIDCHAR, MDIDBITS, MDIDBYTES, MDIDSTRNG,
03730                      (*ALL THE ABOVE ARE WIDENABLE*)
03740             MDIDBOOL, MDIDCHAN, MDIDCOVER, MDIDVOID, MDIDSKIP, MDIDJUMP, MDIDNIL,
03750             MDIDOUT, MDIDIN, MDIDOUTB, MDIDINB, MDIDNUMBER, MDIDROWS,
03760                      (*ALL THE ABOVE ARE UNITED*)
03770             MDIDBNDS,
03780             MDIDABSENT, MDIDERROR, MDIDPROC, MDIDREF, MDIDSTRUCT, MDIDROW, MDIDPASC);
03790   CNTR=0..63;               (*POSSIBLE NUMBER OF FIELDS OR PARAMETERS*)
03800   MDM=PACKED RECORD
03810     MDID: MDIDTYPE;
03820     MDLEN: 0..127;        (*THE LENGTH OCCUPIED BY THE MODE WHEN IT IS A FIELD OF A STRUCTURE
03830                             - IE ITS UNDRESSED LENGTH*)
03840     MDDEPROC, MDRECUR, MDDRESSED, MDIO, MDPILE, MDSCOPE: BOOLEAN;
03850     MDCNT: CNTR;
03860     END;
03870   MODE=^MD;
03880   PLEX=^LEXEME;
03890   PSB=^SEMBLK;
03900   PSTB=^STBLOCK;
03910 (**)
03920   MD=PACKED RECORD          (*MODE TABLE ENTRY*)
03930     CASE SEVERAL OF
03940       1:(MDLINK: MODE;      (*CHAIN OF MODES OF SAME TYPE*)
03950          MDV: MDM;
03960          CASE SEVERAL OF
03970            1,2,3,6,7,8,9,10: ();
03980            4: (MDPRRMD: MODE;  (*FOR RESULT, REFED TO, OR ROWED MODE*)
03990 (*+11()                     (*SHOULD FIT INTO ONE WORD UP TO HERE*) ()+11*)
04000                MDPRCPRMS: ARRAY[CNTR] OF MODE);
04010            5: (MDSTRSDB: LABL;   (*PTR TO DBLOCK*)
04020 (*+11()                     (*SHOULD FIT INTO ONE WORD UP TO HERE*) ()+11*)
04030                MDSTRFLDS: ARRAY[CNTR] OF PACKED RECORD
04040                             MDSTRFMD: MODE;
04050                             MDSTRFLEX: PLEX;
04060                             END) );
04070       2:(MDWORDS: ARRAY[1..1] OF INTEGER);
04080                             (*FOR GETTING AT MDPRCPRMS AND MDSTRFLDS.
04090                               IT IS INTENDED THAT ONLY SUFFICIENT WORDS FOR THE PARTICULAR
04100                               MODE WILL BE ALLOCATED*)
04110       3,4,5,6,7,8,9,10: ()
04120     END;
04130 (**)
04140   STRTYP=(STRNONE, STREMPTY, STRSOFT, STRWEAK,STRMEEK,STRFIRM, STRSTRONG);
04150                             (*COERCION STRENGTHS*)
04160   CODEPROC=(PROC, PASC);   (*FOR PASCAL PROCEDURES OR OTHERWISE*)
04170 (**)
04180 (**)
04190                 (*CODES FOR SEMANTIC ROUTINES*)
04200                 (*****************************)
04210 (**)
04220   RTNTYPE = 0..245;
04230             (*  SEMANTICROUTINES  10..120,
04240                 ERRORTYPES
04250                   ELX  121..129,
04260                   ESY  130..172,
04270                   ESE  173..245   *)
04280 (**)
04290 (**)
04300                 (*LEXICAL ANALYSIS*)
04310                 (******************)
04320 (**)
04330 (*-01() ALFA=PACKED ARRAY [1..10] OF CHAR;()-01*)
04331   BIGALFA = PACKED RECORD
04332 (*+01()     CASE SEVERAL OF 1: ( ()+01*)
04335             ALF: ALFA; (*+01() ); 2: ( DUMMY: PACKED ARRAY[1..8] OF CHAR; ()+01*)
04336             IDSIZE:BYTE;
04337             XMODE:BYTE;
04338 (*+01()     ) ; 3,4,5,6,7,8,9,10 : (); ()+01*)
04339   END;
04340   CL0TYPE=0..1; CL1TYPE=0..4; CL2TYPE=0..15;
04350                            (*LEXEME CLASSES*)
04360 (*+73()
04370   LXIOTYPE=(LXIODUMMY,
04380       (*NONTERMINALS*)
04390             LXIOACTPL, LXIOACTRL,
04400             LXIOBOUNDS, LXIOBRINPT, LXIOBRTHPT,
04410             LXIOCSTICK,
04420             LXIODCLL,
04430             LXIOFLDSPL, LXIOFORDCL, LXIOFORRLB,
04440             LXIOIDEFL,
04450             LXIOLABSQ,
04460             LXIOMOIDDR,
04470             LXIONONRDR,
04480             LXIOODEFL, LXIOOPRAND,
04490             LXIOPRIM, LXIOPRMDRL,
04500             LXIORIDEFL, LXIORODEFL, LXIORSPEC, LXIORVDEFL,
04510             LXIOTERT, LXIOTRMSCL,
04520             LXIOUNLC, LXIOUNLP, LXIOUNSR,
04530             LXIOVDEFL,
04540       (*TERMINALS*)
04550             LXIOAGAIN, LXIOAT,
04560             LXIOBECOM, LXIOBEGIN, LXIOBOOLDEN, LXIOBY,
04570             LXIOCASE, LXIOCMMENT,
04580             LXIODO,
04590             LXIOELIF, LXIOELSE, LXIOEND, LXIOEQUAL, LXIOERROR, LXIOESAC, LXIOEXIT,
04600             LXIOFI, LXIOFOR, LXIOFROM,
04610             LXIOGO, LXIOGOTO,
04620             LXIOHEAP,
04630             LXIOIDTY, LXIOIF, LXIOIN,
04640             LXIOLOC,
04650             LXIOMODE,
04660             LXIONIL,
04670             LXIOOD, LXIOOF, LXIOOP, LXIOOPR, LXIOOUSE, LXIOOUT,
04680             LXIOPRAGMAT, LXIOPRDEN, LXIOPRIO,
04690             LXIOSEMIC, LXIOSKIP, LXIOSTART, LXIOSTOP, LXIOSTICK, LXIOSTRGDEN,
04700             LXIOTHEN, LXIOTO,
04710             LXIOWHILE,
04720             LXIOBUS, LXIOCLOSE, LXIOCOLON, LXIOCOMMA, LXIOLONG, LXIOMDIND, LXIOOPEN, LXIOOTHDR, LXIOPRDR,
04730                LXIOPROC, LXIOREF, LXIOSHORT, LXIOSTRUCT, LXIOSUB, LXIOTAB, LXIOTAG, LXIOVOID);
04740                 (*THOSE IN THE LAST TWO LINES ARE SPECIALLY SEGREGATED FOR AR2*)
04750 ()+73*)
04760 (*-73() LXIOTYPE=0..127; ()-73*)
04770   LXM=PACKED RECORD        (*SHOULD OCCUPY 1 WORD*)
04780     LXIO: LXIOTYPE;        (*LEXEME VALUE*)
04790     LXCLASS0: CL0TYPE; LXCLASS1: CL1TYPE; LXCLASS2: CL2TYPE;
04800    CASE SEVERAL OF
04810 (*+11()   1:(LXP: 0..777777B);   ()+11*)
04820 (*+12()   1:(LXP: 0..32767);   ()+12*)
04830 (*+13()   1:(LXP: 0..32767);   ()+13*)
04840       2:(LXPSTB: PSTB);
04850       3:(LXPSB: PSB);
04860       4:(LXPMD: MODE);
04870       5:(LXPYPTR: LABL);
04880       6:(LXPRTN: RTNTYPE);  (*FOR PARSER GENERATOR ONLY*)
04890       7:(LXPIO: LXIOTYPE);  (*FOR PARSER GENERATOR ONLY*)
04900  8,9,10:();
04910     END;
04920 (**)
04930   LEXEME=PACKED RECORD
04940     CASE SEVERAL OF
04950       1:(LXV: LXM;              (*THE ONLY FIELD FOR SIMPLE LEXEMES*)
04960          LXTOKEN: (TKTAG, TKBOLD, TKDENOT, TKSYMBOL);
04970                            (*MEANING OF STRING*)
04980          LXCOUNT: 0..TAXLENWD;  (*WORDS IN STRING*)
04990          LINK: PLEX;       (*HASH TABLE CHAINING*)
05000          CASE SEVERAL OF
05010             1:(WORD1:  A68INT );
05020             2:( S10,S20:  ALFA );
05030             4:(INTEGERS: ARRAY [1..TAXLENWD] OF A68INT);
05040 (*+11()     6:(FUDGE1, FUDGE2: 0..1073741823);
05050             7:(FUDGE: PACKED ARRAY [1..TAXLENWD2] OF 0..1073741823);
05060                            (*HALF WORDS FOR HASHING*)
05070 ()+11*)
05080 (*-11()     6,7: (); ()-11*)
05090             8:(STRNG: PACKED ARRAY [1..TAXLEN] OF CHAR);
05100                            (*AS SINGLE CHARS*)
05110             9:(LXDENMD:  MODE; LXDENRP: A68INT);
05120                            (*ANOTHER VIEW OF S1, FOR DENOTATIONS*)
05130            10:( INSTEADLXDENMD:  MODE ; LXDENRPREAL: REAL) ;
05140            3,5:() );
05150         2:(LEXWORDS: ARRAY [1..1] OF A68INT);  (*FOR COPYING WHOLE LEXEMES*)
05160         3,4,5,6,7,8,9,10:()
05170     END;
05180   HASHTAB=ARRAY [0..HTSIZE] OF PLEX;
05190   OPCHTABBOUND=0..46;      (*BOUNDS OF OPCHTABLE*)
05200 (*+72()   INDEXTYPE=(CONTROL, EOL, SPACE, ERRCH, DIGIT, POINT, QUOTE,
05210              PUNCT, PLSMIN, LETTER, STROP, EOFF, PRAG);  ()+72*)
05220 (*-72()   INDEXTYPE=0..12;  ()-72*)
05230   TYPETYPE=SET OF (HEX, LOWC, UPC, DIG);
05240 (**)
05250 (**)
05260                 (*CODE EMITTER*)
05270                 (**************)
05280 (**)
05290   PMARKCHAIN=^MARKCHAIN;
05300   STATE=0..32;      (*USED AS OPCOD OFFSETS*)
05310 (*+76()
05320   MARKCHAIN=PACKED RECORD
05330     MKXPTR: LABL;
05340     LINK: PMARKCHAIN
05350     END;
05360 ()+76*)
05370 (*-76() (*-02() MARKCHAIN = INTEGER; ()-02*)
05375         (*+02() MARKCHAIN = PACKED RECORD A:INTEGER;B:ADDRINT END; ()+02*) ()-76*)
05380   OLSTTYP=ARRAY[0..5] OF PACKED RECORD DP: BOOLEAN; OVAL: STATE END;
05390   POP=PNONE..PLAST;
05400 (**)
05410 (*+01()
05420   RELOCBASE=0..777B;
05430   CBUFPTRS=0..127;
05440   CODEBUF=RECORD
05450     BUFFER: ARRAY [CBUFPTRS] OF RECORD CASE SEVERAL OF
05460                                   1:(CODEWORD: INTEGER); 2:(ALFWORD: ALFA); 3,4,5,6,7,8,9,10:() END;
05470     FIRST, LAST: CBUFPTRS;
05480     RELOCATION: INTEGER;
05490     SEGLOC: LABL;
05500     FOUR: 1..5; FIFTEEN: 1..15;
05510     HEADERWORD: PACKED RECORD
05520         CASE INTEGER OF
05530           1: (TN, WC: 0..7777B;
05540               FILLER: 0..777B;
05550               R: RELOCBASE;
05560               S: 0..777777B);
05570           2: (WORD: INTEGER)
05580         END
05590     END;
05600 (**)
05610   PFILLCHAIN=^FILLCHAIN;
05620   FILLCHAIN=PACKED RECORD
05630     FSEGLOC: LABL;
05640     FFOUR: 1..4;
05650     COUNT: 0..31;
05660     LINK: PFILLCHAIN
05670     END;
05680   PFCHAIN=^FCHAIN;
05690   FCHAIN=PACKED RECORD
05700     FLAST: CBUFPTRS;
05710     FFOUR: 1..4; FFIFTEEN: 1..15;
05720     FSEGLOC, FLABL: LABL;
05730     LINK: PFCHAIN
05740     END;
05750 (**)
05760   SBTTYP=(SBTVOID,SBTID,SBTIDV,SBTLIT,SBTVAR,SBTDEN,SBTPROC,SBTRPROC,SBTSTK,(*+61()SBTSTK2,()+61*)SBTSTKN,SBTDL,
05770 (*+61()   SBTX12, SBTX45, ()+61*)
05780           SBTX5,SBTX6,SBTX0,SBTX1,SBTXN);
05790     (*SBTSTKN IS AN ARBITRARY STACK ITEM; STBXN IS AN ARBITRARY REGISTER(?) ITEM*)
05800     (*SBTDL IS FOR DATA LISTS, WHICH ARE REALLY ON THE STACK BUT MAY START IN A REGISTER*)
05810   SUBSBTTYP=SBTX5..SBTX1;
05820   REGUSETYP=SET OF SUBSBTTYP;
05830 ()+01*)
05840 (*+02()
05850     SBTTYP=(SBTVOID,SBTID,SBTIDV,SBTVAR,SBTLIT,SBTDEN,SBTPROC,SBTRPROC,SBTSTK,SBTSTK2,SBTSTK2A,SBTSTK4,SBTSTKN,SBTDL,
05860             SBTPR1,SBTPR2,SBTPRR,SBTXN);
05870 ()+02*)
05880 (*+03()
05890   SBTTYP=(SBTVOID,SBTID,SBTIDV,SBTVAR,SBTLIT,SBTDEN,SBTPROC,SBTRPROC,SBTSTK,SBTSTKN,SBTDL,SBTX0,SBTX1,SBTXN);
05900   SUBSBTTYP=SBTX0..SBTX1;
05910   REGUSETYP=SET OF SUBSBTTYP;
05920 ()+03*)
05930 (*+04()
05940   SBTTYP=(SBTVOID,SBTID,SBTIDV,SBTVAR,SBTLIT,SBTDEN,SBTPROC,SBTRPROC,SBTSTK,SBTSTKN,SBTDL,SBTXN);
05950 ()+04*)
05960 (*+05()
05970    SBTTYP=(SBTVOID,SBTID,SBTIDV,SBTVAR,SBTLIT,SBTDEN,SBTPROC,SBTRPROC,SBTSTK,SBTSTK4,SBTSTKR0,SBTSTKN,SBTDL,
05980            SBTPR1,SBTPR2,SBTE,SBTER0,SBTFPR0,SBTFPR1,SBTFPR2,SBTFPR3,SBTXN);
05990   SUBSBTTYP=SBTE..SBTFPR3;
06000   REGUSETYP=PACKED RECORD
06010             ECOUNT: 0..8;
06020             EEXTRA: 0..8;
06030             FPR: SET OF SUBSBTTYP
06040             END;
06050  ()+05*)
06060 (*-23()
06070 (*+01()
06080   CODETYP=PACKED RECORD
06090     P1, P2, PR : SBTTYP;
06100     CASE INLINE: BOOLEAN OF
06110       TRUE: (
06120         LEN: (F0, F15, F30, F30K);
06130         FMIJK: 0..7777777777B;
06140         REL: -177777B..177777B;  (*FOR RELATIVE JUMPS*)
06150         NEXT: POP);
06160       FALSE: (
06170         ROUTINE: PACKED ARRAY [1..RTNLENGTH] OF CHAR;
06180         LINKINS: PFILLCHAIN)
06190     END;
06200 ()+01*)
06210 (*+02()
06220 (*+24()  COMPACT = 0..161;  ()+24*)
06230 (*-24()  COMPACT = PACKED ARRAY [1..3] OF CHAR;   ()-24*)
06240 (*+78()PARAMTYPES = (OPX,ONX,OPL,ONL,LCX,GBX,WOP,WNP,WLB,NON,JMP,MOR,ACP,ANP,ACB,ACX,ANX,ACL,ANL);
06250   CODETYP = PACKED RECORD
06260             P1,P2,PR:SBTTYP;
06270             CASE INLINE:BOOLEAN OF
06280                  TRUE : (EMCOD : COMPACT;
06290                          PARTYP:PARAMTYPES;
06300                          NEXT : POP;
06310                          PARM : -32767..32767 );
06320                  FALSE: (ROUTINE : PACKED ARRAY [1..RTNLENGTH] OF CHAR);
06330            END; ()+78*)
06340 (*-78() (*-24() CODETYP=PACKED ARRAY [1..14] OF CHAR ; ()-24*)
06342         (*+24() CODETYP=PACKED ARRAY [1..12] OF CHAR ; ()+24*) ()-78*)
06350 ()+02*)
06360 (*+03()
06370   ROUTNAME=PACKED ARRAY [1..RTNLENGTH] OF CHAR;
06380   CODETYP=PACKED RECORD
06390             P1, P2, PR: SBTTYP;
06400             CASE INLINE: BOOLEAN OF
06410             TRUE:(NEXT: POP;
06420                   CASE SEVERAL OF
06430                   1: (FUN:INTEGER);
06440                   2: (FDISP: 0..127;
06450                       FSIGN: 0..1;
06460                       FMODE: 0..7;
06470                       FCODE: 0..31);
06480                   3: (FILL1: 0..63;
06490                       FBITS: 0..3;
06500                       FILL2: 0..255);
06510               4,5,6,7,8,9,10: ());
06520             FALSE:(ROUTINE: ROUTNAME)
06530           END;
06540  ()+03*)
06550  (*+05()
06560  (*-24() MNEMONICS = PACKED ARRAY[1..8] OF CHAR; ()-24*)
06570 (*+78()    PARAMTYPES = (OPX,ONX,LCX,GBX,WOP,WNP,NON,JMP,MOR,ANP,ACP,ACX,ANX);
06580   CODETYP = PACKED RECORD
06590             P1,P2,PR:SBTTYP;
06600             CASE INLINE:BOOLEAN OF
06610                   TRUE : (PERQCOD : MNEMONICS;
06620                          PARTYP:PARAMTYPES;
06630                          PARM : BYTE;
06640                          NEXT : POP; );
06650                  FALSE: (ROUTINE : PACKED ARRAY [1..RTNLENGTH] OF CHAR);
06660            END; ()+78*)
06670 (*-78() CODETYP =  ARRAY[1..4] OF INTEGER; ()-78*)
06680 ()+05*)
06690 ()-23*)
06700 (*+23()
06710   CODETYP=PACKED RECORD
06720             ROUTINE:ALFA;
06730             PR:SBTTYP
06740           END;
06750 ()+23*)
06760   SBTTYPSET=SET OF SBTTYP;
06770 (**)
06780 (**)
06790                 (*CODE GENERATOR*)
06800                 (****************)
06810 (**)
06820 (**)
06830   OPDTYP=(OCVNONE, OCVIMMED, OCVIMMLONG, OCVIMMPTR, OCVLCLGBL,
06835              OCVMEM, OCVEXT, OCVFREF, OCVLIT, OCVFIM, OCVRES, OCVSB, OCVSBP, OCVSBS);
06840 (**)
06850 (**)
06860                 (*SEMANTIC ROUTINES*)
06870                 (*******************)
06880 (**)
06890 (*+11()
06900   DEPTHR=0..4095;           (*DEPTH TO WHICH RANGES ETC. ARE NESTED*)
06910   OFFSETR=-4095..4096;      (*FOR OFFSETS WITHIN INVOCATION BLOCKS*)
06920 ()+11*)
06930 (*+12()
06940 (*-02()
06950   DEPTHR=0..127;
06960   OFFSETR=-256..255;
06970 ()-02*)
06980 (*+02()
06990   DEPTHR=0..255;
07000   OFFSETR=INTEGER;
07010 ()+02*)
07020 ()+12*)
07030 (*+13()
07040   DEPTHR=0..255;
07050   OFFSETR=-256..250;
07060 ()+13*)
07070 (*-61() STDOPTYP=0..70; ()-61*) (*FOR OPTABL*)
07080 (*+61() STDOPTYP=0..76; ()+61*)
07090   DEFTYP=                   (*PROPERTIES OF STBLOCK*)
07100     SET OF (STINIT, STVAR, STCONST, STRCONST, STRECUR, STUSED (*+05(),DUM6,DUM7,DUM8()+05*) );
07110   BLKTYP=                   (*TYPES OF STBLOCK*)
07120     (STBDEFID, STBDEFLAB, STBDEFMI, STBDEFPRIO, STBDEFOP,
07130      STBNONE,
07140      STBAPPID, STBAPPLAB, STBAPPMI,             STBAPPOP);
07150 (**)
07160   PROUTN=^ROUTN;
07170   ROUTN=(*-04()PACKED()-04*) RECORD       (*PROPERTIES OF CURRENT ROUTINE*)
07180     RNLINK: PROUTN;         (*TO PREVIOUS ROUTN*)
07190     RNLOCRG,                (*CURRENT DEPTH OF LOCAL RANGES WITHIN THIS ROUTINE*)
07200     RNLEVEL: DEPTHR;        (*DEPTH OF THIS ROUTINE*)
07210     RNNECLOCRG: DEPTHR;     (*LOCAL RANGE DEPTH WITHIN RNNECLEV OF NECESSARY ENVIRON*)
07220     RNNECLEV: DEPTHR;       (*ROUTINE DEPTH OF NECESSARY ENVIRON*)
07230     RNSTKDEPTH: OFFSETR;
07240     RNRTSTACK: PSB;         (*RTSTACK ON ROUTINE ENTRY*)
07250     RNCURID: OFFSETR;       (*FOR PREVIOUS ROUTN*)
07260     RNNONIC: DEPTHR;        (*NO. OF ROUTNCHAINS REFERRING TO THIS ROUTN*)
07270     RNLENSTK: OFFSETR;      (*MAXIMUM STACK DEPTH*)
07280     RNLENIDS: OFFSETR;      (*MAXIMUM SPACE FOR LOCALS*)
07290     RNMODE: MODE;           (*RESULT MODE*)
07300     RNPARAMS: OFFSETR;      (*SPACE OCCUPIED BY PARAMETERS*)
07302     RNIDBLK: LABL;          (*IDBLOCK FOR PARAMETERS RANGE*)
07304     RNLEX: PLEX;            (*IDENTIFIER OF ROUTINE (NIL IF ANONYMOUS)*)
07310     RNADDRESS: LABL;        (*ENTRY POINT*)
07320     RNPROCBLK: LABL;        (*ADDRESS OF PROCBLOCK*)
07330 (*-02()(*-04() RNREGSINUSE: REGUSETYP (*RESERVE STATE OF REGS BEFORE ROUTINE-TEXT*) ()-04*)()-02*)
07340     END;
07350 (**)
07360   PROUTNCHAIN=^ROUTNCHAIN;
07370   ROUTNCHAIN=PACKED(*PACKED*) RECORD  (*CHAIN OF ROUTNS STARTING FROM STROUTN OF AN STBLOCK*)
07380     DATA: PROUTN;
07390     LINK: PROUTNCHAIN
07400     END;
07410 (**)
07420   STBLOCK=(*-04()PACKED()-04*) RECORD     (*SYMBOL TABLE BLOCK*)
07430     STLINK: PSTB;       (*TO PREVIOUS INCARNATION OF INDICATOR*)
07440     STTHREAD: PSTB;     (*CHAIN OF STBLOCKS IN SAME RANGE*)
07450     STLEX: PLEX;            (*LEXEME FOR INDICATOR*)
07460     STDEFTYP: DEFTYP;
07470     STRANGE: DEPTHR;        (*DEPTH OF RANGE*)
07480     STLEVEL: DEPTHR;        (*DEPTH OF ROUTINE CONTAINING RANGE*)
07490     STLOCRG: DEPTHR;        (*DEPTH OF LOCAL RANGE WITHIN ROUTINE*)
07500     CASE STBLKTYP: BLKTYP OF
07510       STBNONE: ();
07520       STBDEFID, STBDEFMI, STBDEFOP:
07530         (STMODE: MODE;
07540          CASE SEVERAL OF
07550            1:(STPTR:LABL);
07560            2:(STOFFSET: OFFSETR);  (*OFFSET WITHIN INVBL*)
07570            3:(STVALUE: PLEX);  (*FOR CODE PROCS*)
07580            4,5,6,7,8,9,10:() );
07590       STBAPPID, STBAPPMI, STBAPPOP:
07600         (STDEFPTR: PSTB); (*PTR TO DEFINING OCCURRENCE*)
07610       STBDEFLAB, STBAPPLAB:
07620         (STROUTN: PROUTNCHAIN;
07630          STCURID: OFFSETR;  (*FOR PREVENTING JUMPS OVER DECLARATIONS*)
07640          STXPTR: PACKED ARRAY[0..1]OF LABL); (*0 FOR LABEL, 1 FOR JUMPS OUT OF ROUTINES TO IT*)
07650       STBDEFPRIO:
07660         (STDYPRIO: 1..11;   (*PRIORITY - 10 IS FOR MONADICS, 11 FOR UNDECLARED OPS*)
07670          STUSERLEX: PLEX;
07680          STSTDOP: STDOPTYP ) (*POINTER INTO OPTABL, FOR STD OPERATORS*)
07690     END;
07700 (**)
07710   DCLTYP=                   (*ATTRIBUTES OF RANGES*)
07720     (DCLCOLL, DCLLOCRNG, DCLPARM, DCLLABEL, DCLPILEDECS,
07730      DCLLOCGEN, DCLLOOP, DCLDELAY, DCLSAVEDESC, DCLACTDR, DCLPILE, DCLMODEDEF);
07740 (**)
07750   PRANGE=^RANGE;
07760   RANGE=(*-04()PACKED()-04*) RECORD       (*PRESERVES PROPERTIES OF PREVIOUS RANGE*)
07770     RGLINK: PRANGE;         (*TO PREVIOUS RANGE*)
07780     RGINF: SET OF DCLTYP;
07790     RGSTAT: STATE;
07800     RGDCIL: PSTB;       (*THREAD OF PREVIOUS RANGE*)
07810     RGLEB: OFFSETR;         (*LOCAL ENVIRONMENT BASE OF PREVIOUS LOCAL RANGE*)
07820     RGDEFN: DEFTYP;         (*FROM PREVIOUS LOCAL RANGE*)
07830     RGMODE, RGPRVMODE: MODE;(*DITTO*)
07840     RGTODOCOUNT, RGPSCOUNT: DEPTHR;   (*DITTO*)
07850     RGPSLABL: LABL;         (*DITTO*)
07860     RGRTSTACK: PSB;            (*RTSTACK ON RANGE ENTRY*)
07870     RGIDBLK: LABL;
07880     END;
07890 (**)
07900   PTRIMCHAIN=^TRIMCHAIN;
07910   TRIMCHAIN=PACKED(*PACKED*) RECORD
07920     TRTYPE: 0..9;
07930     LINK: PTRIMCHAIN
07940     END;
07950   SEMBLK=PACKED(*PACKED*) RECORD      (*SEMANTIC BLOCK*)
07960     SBTYP: SBTTYP;
07970     SBLEN: DEPTHR;           (*TO ACCOMODATE A REASONABLE DATA-LIST*)
07980     SBMODE: MODE;
07990      SBINF: SET OF (SBMORF, SBVOIDWARN, SBEMPTYBY, SBEMPTYTO, SBLEFTCOLL, SBPILEDECS,
08000                     SBWEAKREF, SBNOREF, SBSTKDELAY, SBNAKED, SBNAKROW, SBCOLL, SBUNION, SBSLN, SBLOCGEN);
08010     SBDELAYS: DEPTHR;
08020     SBRTSTK: PSB;
08030     CASE SEVERAL OF
08040        1:(SBXPTR: LABL;
08050           SBCNT: CNTR;       (*TO COUNT ACTUAL-PARAMETERS OF PROC*)
08060           CASE SEVERAL OF
08070            1:(SBLEX: PLEX);
08080            2:(SBVALUE: (*+01()LABL()+01*) (*+02()LONG()+02*)
08082                        (*-01()(*-02()A68INT()-02*)()-01*));
08090            3:(SBOFFSET: OFFSETR;
08100               SBLOCRG: DEPTHR;
08110               SBLEVEL: DEPTHR);
08120            4:(SBBALSTR: STRTYP);
08130            5,6,7,8,9,10:() );
08140       2: (SBTRIMS: PTRIMCHAIN;
08150           SBTRIMCNT,
08160           SBSLICEDIM: -63..63;
08170           SBPRIMDIM: 0..63;
08180           SBUNITS: 0..189);
08190       3,4,5,6,7,8,9,10:()
08200     END;
08210 (**)
08220   PMODECHAIN=^MODECHAIN;
08230   MODECHAIN=PACKED(*PACKED*) RECORD   (*CHAIN OF MODES STARTING AT SCL*)
08240     SCMODE: MODE;
08250     LINK: PMODECHAIN
08260     END;
08270 (**)
08280   XTYPE=-1..14;
08290 (*+74()
08300   OPIDNDXTYP=
08310       (IDIBRM,IDMON,IDMONL, (*MONADIC OPERATORS*)
08320        IDAA,   (*BOTH OPERANDS IN SAME GROUP (EG ARITHMETIC*)
08330        IDAAL,  (*AS IDAA, BUT RESULTMODE MAY BE LENGTHENED*)
08340        IDBB,   (*BOTH OPERANDS TO BE THE SAME*)
08350        IDBI,IDIB,(*ONE OPERAND IS .INT*)
08360        IDIBR,  (*.UPB AND .LWB*)
08370        IDSI,   (* *:= ON STRINGS*)
08380        IDSC,IDCS,(* +:= AND +=: ON STRINGS*)
08390        IDRA    (*ASSIGNING OPERATORS*) );
08400   OPIDBLK=PACKED RECORD
08410     OPIDNDX: OPIDNDXTYP;
08420     OPMORE: BOOLEAN; (*IF THERE ARE MORE DEFINITIONS OF THE SAME OPERATOR*)
08430     OPOPCOD: POP;
08440     OPMIN,OPMAX: XTYPE;  (*RANGE OF ACCEPTABLE MODES*)
08450     OPMODE: MODE;   (*RESULT MODE (MDABSENT IMPLIES RESULT MODE DEDUCED FROM OPERANDS)*)
08460     END;
08470 ()+74*)
08480 (*-74() (*+02() (*+12() (*-19() OPIDBLK=RECORD A,B:REAL (* FOUR WORDS *) END; ()-19*)
08485         (*+19() OPIDBLK=PACKED RECORD A,B,C,D,E:INTEGER (*5 WORDS?*) END; ()+19*) ()+12*)
08486         (*+13() OPIDBLK=PACKED RECORD A,B,C:INTEGER; (*THREE WORDS*) END; ()+13*) ()+02*)
08490         (*+05() OPIDBLK=RECORD A,B,C: INTEGER (*THREE WORDS*) END; ()+05*) ()-74*)
08500 (**)
08510 (**)
08520                 (*RUNTIME OBJECTS*)
08530                 (*****************)
08540 (**)
08550   BITMAP = PACKED RECORD CASE SEVERAL OF
08560     1: (
08570 (*+11()
08580         FILL: 0..77777777777777B;
08590         MASK: 0..37777B;
08600         COUNT: 0..15; );
08610 ()+11*)
08620 (*+12()
08630 (*+03() MASK: 0..7777B; (*DIFFICULTIES ON NORD*)
08640         COUNT: 0..15; ); ()+03*)
08641 (*+02() MASK :INTEGER;
08642         COUNT :INTEGER; ); ()+02*)
08643 (*-03() (*-02() MASK: -127..127;
08644         COUNT: 0..255; ); ()-02*) ()-03*)
08650 ()+12*)
08660 (*+13() MASK: -32768..32767;
08670         COUNT: -32768..32767; );
08680 ()+13*)
08690     2: (INT: (*-02()A68INT()-02*)(*+02()LONG()+02*); );
08700     3,4,5,6,7,8,9,10: ()
08710     END;
08720 (**)
08730 (*+77()
08731 (*+13() CCOUNTRANGE=0..32767; ()+13*)
08740   OBJECTP=^OBJECT;
08750   OBJECT=PACKED RECORD
08760     CASE SEVERAL OF
08770       1:(FIRSTWORD: INTEGER);
08780 (*+11()
08790       2:(PCOUNT: -1..4095;
08800          SORT: 0..31;
08820          OSCOPE: DEPTHR;
08830          LENGTH: 0..4095;
08832          FILLER: 0..1;
08835          DBLOCK: OBJECTP);
08840 ()+11*)
08850 (*+12()
08860       2:(PCOUNT: 0..2047;
08870          SORT: 0..31;
08880          OSCOPE: DEPTHR;
08890          LENGTH: 0..511;
08900          DBLOCK: OBJECTP);
08910 ()+12*)
08920 (*+13()
08930       2:(PCOUNT: 0..32767;
08940          SORT: 0..31;
08950          OSCOPE: DEPTHR;
08960          DBLOCK: OBJECTP
08961          ANCESTOR: OBJECTP;
08962          IHEAD: OBJECTP;
08963          DUMMY: CCOUNTRANGE;
08964          LENGTH: CCOUNTRANGE);
08990 ()+13*)
09000       3,4,5,6,7,8,9,10: ()
09010     END;
09020 (**)
09030 ()+77*)
09040 (**)
09050                 (*PARSING*)
09060                 (*********)
09070 (*+72()
09080   CONFIG=(S, C0, C1, C2, A, SSA);
09090                             (*METHODS OF MATCHING LXVS.
09100                              SSA IS A SPECIAL FRIG FOR MATCHING TWO STACK ITEMS*)
09110     SYLXVTYP = PACKED RECORD
09120       CASE BOOLEAN OF
09130       TRUE: (CASE SEVERAL OF
09140                1: (LX1IO: LXIOTYPE);
09150                2: (LX1CL0: CL0TYPE);
09160                3: (LX1CL1: CL1TYPE);
09170                4: (LX1CL2: CL2TYPE);
09180                5,6,7,8,9,10: () );
09190       FALSE:(FILLER: 0..127;
09200              CASE SEVERAL OF
09210                1: (LX2IO: LXIOTYPE);
09220                2: (LX2CL0: CL0TYPE);
09230                3: (LX2CL1: CL1TYPE);
09240                4: (LX2CL2: CL2TYPE);
09250                5,6,7,8,9,10: () )
09260       END;
09270   PROD= PACKED RECORD
09280         PRSTKA: 0..3;
09290         PRSTKC: S..C2;
09300         PRINPC: CONFIG;
09310         RTN: RTNTYPE;
09320         SYLXV: SYLXVTYP;
09330         SEXIT: 0..PRODLEN;
09340         PRPUSH: LXIODUMMY..LXIOVDEFL;   (*A SUBRANGE OF LXIOTYPE*)
09350         PRSKIP: BOOLEAN;
09360         FEXIT: 0..PRODLEN;
09370         PRPOP:  0..5;
09380         PRSCAN: 0..2;
09390         END;
09400   PLEXQ=^LEXQ;
09410   LEXQ=PACKED RECORD     (*CHAIN OF LEXEMES STARTING AT PLINPQ*)
09420     DATA1: PLEX;
09430     LINK: PLEXQ
09440     END;
09450 ()+72*)
09460 (**)
09470 (*-72() (*+02() (*+12() PROD=RECORD A,B,C,D,E,F,G: INTEGER (*SEVEN WORDS*)  END;  ()+12*)
09471                 (*+13() PROD=RECORD A,B,C,D:INTEGER (*FOUR WORDS*) END; ()+13*) ()+02*)
09480         (*+05() PROD=RECORD A,B,C,D: INTEGER (*FOUR WORDS*) END; ()+05*) ()-72*)
09490 (*-72() PLEXQ=^INTEGER; ()-72*)
09500 (**)
09510                 (*ERROR HANDLING*)
09520                 (****************)
09530 (**)
09540   ERRLEV=(ERRORR, WARNING);
09550 (**)
09560 (**)
09570 (*+01()   MESS=PACKED ARRAY [1..50] OF CHAR; (*FOR PASCPMD*)  ()+01*)
09580 (*+02()   MESS=PACKED ARRAY [1..50] OF CHAR; (*FOR PASCPMD*)  ()+02*)
09590 VAR (*VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR*)
09600 (**)
09610                 (*FILES*)
09620                 (*******)
09630 (**)
09640 (*+01() (*THE FILES MUST BE THE FIRST THINGS DECLARED ON THE STACK,FOR THE BENEFIT OF DUMP*) ()+01*)
09650   SOURCDECS: TEXT;
09660   LSTFILE: FYL;         (*FILE FOR PROGRAM LISTING, IF ANY*)
09670   LGO: (*-05() (*-02()LOADFILE; ()-02*) ()-05*)
09680        (*+02() (*+24() FILE OF BYTE; ()+24*)
09681                (*-24() TEXT; ()-24*) ()+02*)
09690        (*+05() ARRAY[0..LASTRNLEVEL] OF TEXT; ()+05*)
09700 (*+01()
09710   (*REMARKS: TEXT;*)          (*FILE FOR TEMPORARY MONITORING*)
09720   A68INIT: LOADFILE;  (*FOR INITIALIZATION*)
09730  ()+01*)
09740  (*+02()  A68INIT:LOADFILE ;
09745           DUMPF : LOADFILE ; ()+02*)
09750 (*+03()
09760   OUTPUT: TEXT;
09770   CPUCLK: INTEGER;
09780 ()+03*)
09790 (*+04() OUTPUT: TEXT; ()+04*)
09800 (*+05() A68INIT: LOADFILE; ()+05*)
09810 (**)
09820 (**)
09830 (*+01()
09840   CPUCLK: INTEGER;
09850 (*+22()
09860   PARSCLK, LXCLOCK, SEMCLK, EMITCLK: INTEGER;
09870   CPUCLKS, PARSCLKS, LXCLOCKS, SEMCLKS, EMITCLKS: INTEGER;
09880 ()+22*)
09890   DUMPED, HEAPSTART, FIELDLENGTH: INTEGER;   (*USED BY INITINIT AND RESTORE*)
09900   FIRSTSTACK: INTEGER;    (*TO MARK THE START OF THE DUMPABLE STACK*)
09910 (**)
09920 (**)
09930 ()+01*)
09940 (*+25()
09950   DUMPED, HEAPSTART, FIELDLENGTH: INTEGER;   (*USED BY INITINIT AND RESTORE*)
09960   FIRSTSTACK: INTEGER;    (*TO MARK THE START OF THE DUMPABLE STACK*)
09970 ()+25*)
09980 (*+02() (*-25() FIRSTSTACK:INTEGER; ()-25*) ()+02*)
09990 (*+05() (*-25() FIRSTSTACK:INTEGER; ()-25*) ()+05*)
10000                 (*LISTING*)
10010                 (*********)
10020 (**)
10030   LSTLINE, LEXLINE, PREVLINE: INTEGER;  (*SOURCE LINE NUMBER*)
10040   SRCBUF, ERRBUF: BUFFER;
10050              (*BUFFERS FOR SOURCE LINE AND ERROR MARKER LINE*)
10060   SRCPTR, ERRPTR: -1..CBUFSIZE;
10070                            (*POINTERS INTO SRCBUF AND ERRBUF*)
10080   ONLINE: BOOLEAN;
10090   LSTCNT: 0..101;          (*LISTING LINE NUMBER*)
10100   LSTPAGE: INTEGER;        (*LISTING PAGE NUMBER*)
10110 (*+01() DAT, TIM: ALFA;    (*DATE AND TIME*) ()+01*)
10112 (*+03() DAT, TIM: ALFA;    (*DATE AND TIME*) ()+03*)
10114 (*+05() TIM: TIMSTRING;    (*DATE AND TIME*) ()+05*)
10120 (*+23()   NUMPARAMS:0..5; ()+23*)
10130 (**)
10140 (**)
10150                 (*MODE HANDLING*)
10160                 (***************)
10170 (**)
10180   REFL, ROWL, PROCL, PASCL, STRUCTL: MODE;
10190                             (*START OF CHAINS OF MODES OF EACH TYPE*)
10200   MDVREF, MDVROW, MDVPROC, MDVPASC, MDVSTRUCT: MDM;
10210                             (*FOR OTHER MDVS SEE INITIALIZE*)
10220   MDINT, MDLINT, MDBITS, MDBYTES, MDREAL, MDLREAL, MDBOOL, MDCHAN, MDCHAR,
10230     MDSTRNG, MDFILE, MDVOID, MDSKIP, MDJUMP, MDNIL, MDCOMPL, MDLCOMPL, MDCOVER,
10240     MDOUT, MDIN, MDOUTB, MDINB, MDNUMBER, MDROUT, MDROWS, MDBNDS, MDABSENT ,MDERROR, MDREFERROR: MODE;
10250 (*+54() MDEXC: MODE; ()+54*)
10260   MODEID: ARRAY[MDIDTYPE] OF -1..14;
10270   PRCBNDS, PRCVF, PASCVF, PRCERROR: MODE;
10280               (*PROC RETURNING BOUNDS, PROC(REF FILE) VOID, CODE(REF FILE) VOID, PROC MDERROR*)
10290   LASTPREF, LASTPROC: MODE;
10300   LHMODE, RHMODE, LHFIRM, RHFIRM: MODE;   (*USED IN OPERATOR IDENTIFICATION*)
10310   REFSTRNG, ROWBOOL, ROWCHAR, ROWIN, ROWINB: MODE;
10320   COERCLEN: INTEGER;
10330   BALSTR, M1COERC, M2COERC: STRTYP;  (*USED IN BALANCING*)
10340 (**)
10350 (**)
10360                 (*LEXICAL ANALYSIS*)
10370                 (******************)
10380 (**)
10390   PRAGFLGS: SET OF (PRGPOINT, PRGUPPER, PRGLIST, PRGWARN,
10400                     PRGMACH, PRGGO, LINENUMBERS);
10410                            (*FLAGS SET BY PRAGMATS*)
10420   CHA: CHAR;               (*CURRENT INPUT CHARACTER*)
10430   INDEX: INDEXTYPE;        (*INDEX TYPE OF CHA*)
10440   TYP, TTYPE: TYPETYPE;   (*TYPE TYPE OF CHA*)
10450   CHAC: LOWC..UPC;        (*UPPER/LOWER CASE INDICATOR*)
10460   SRCSTCH: CHAR;           (*INDICATES WHETHER IN MIDDLE OF
10470                              PRAGMENT, STRING-DENOTATION, ETC*)
10480   SRCSTAT: CHAR;           (*VALUE OF SRCSTCH AT START OF LINE*)
10490   HT: HASHTAB;
10500                            (*HASH TABLE*)
10510   CURRENTLEX: LEXEME;
10520   INPRAGMENT: BOOLEAN;
10530   OPCHTABLE: ARRAY [OPCHTABBOUND] OF PACKED RECORD
10540                        OTCHAR: CHAR; OTNEXT, OTALT: OPCHTABBOUND; OTLEX: PLEX END;
10550                            (*TBALE USED BY GETOPR IN LX*)
10560   LONGSCNT: INTEGER;        (*NO OF SUCCESIVE LONGS OR SHORTS*)
10570   LEXTRUE, LEXFALSE: PLEX;
10580   LEXBEGIN, LEXOPEN, LEXIF, LEXCASE, LEXWHILE, LEXBRTHPT: PLEX;
10590   LEXERROR, LEXSTART, LEXLSTOP, LEXSTOP: PLEX;
10600                            (*GLOBAL LEXEMES. FOR OTHER LEXEMES SEE INITIALIZE*)
10610   LEXALEPH, LEXONE: PLEX;
10620    LXVTAG, LXVTAB, LXVOPR, LXVMDIND, LXVPRDEN, LXVSTRGDEN: LXM;
10630                             (*GLOBAL LXVS. FOR OTHER LXVS SEE INITIALIZE*)
10640   PUSHTBL: ARRAY [LXIODUMMY..LXIOVDEFL] OF PLEX;
10650                            (*TABLE OF LEXEMES STACKABLE BY PARSER*)
10660 (**)
10670 (**)
10680                 (*ERROR HANDLING*)
10690                 (****************)
10700 (**)
10710   ERRS, SEMERRS, WARNS: INTEGER;   (*NUMBER OF ERRORS, ETC DETECTED*)
10720   ERRCHAR: CHAR;           (*CHAR TO BE WRITTEN TO ERRBUF,
10730                              USUALLY BLANK*)
10740   ERRNONBLANK: BOOLEAN;    (*TRUE IF ERRBUF CONTAINS ANY
10750                              NON-BLANKS*)
10760   ERRDEV: BOOLEAN;         (*TRUE IF LINE TO BE OUTPUT TO ERROR
10770                              DEVICE*)
10780   ERRLXPTR: 0..CBUFSIZE;       (* ??? *)
10790 (**)
10800 (**)
10810                 (*CODE EMITTER*)
10820                 (**************)
10830 (**)
10860   OPRAND: ADDRINT;
10870   OCV: OPDTYP;
10872   LCLGBL: INTEGER;
10874 (*+01()
10876   XSEG: CODEBUF;
10880   TPFCHAIN: PFCHAIN;
10890   TPFILLCHAIN: PFILLCHAIN;
10900 ()+01*)
10910   MARKPTR: PMARKCHAIN;
10920   NEXTLABEL: LABL;
10930   GENDPOCV: OPDTYP; GENDPVAL: INTEGER;  (*GLOBAL OUTPUTS OF GENDP*)
10940   NEEDDP: BOOLEAN;
10950   OLIST1, OLIST2, OLIST3, OLIST4, OLIST5, OLIST6: OLSTTYP;
10960   CODETABLE: ARRAY[POP] OF CODETYP;
10970   LENARRAY : ARRAY [SBTTYP] OF 0..MAXSIZE;
10980   (*WORDS: 0..777777B;*)  (*STACK/HEAP SPACE FOR OBJECT PROGRAM*)
10990 (*+01()
11000   REGSINUSE : SET OF SUBSBTTYP;
11010   REGISTERS:ARRAY [SBTTYP] OF SET OF SUBSBTTYP;
11020   POPARRAY  : ARRAY [SBTSTK..SBTX1,SBTVOID..SBTX1] OF POP;
11030 ()+01*)
11040   NEXTREG : INTEGER;
11050   ADJUSTSP: INTEGER;
11060 (*+02()
11070   POPARRAY : ARRAY [SBTSTK..SBTDL,SBTVOID..SBTPRR] OF POP;
11080   NUMBYTES : 0..31;
11110   DATASTATE: (STARTDATA,INDATA,ENDDATA,OUTDATA);
11111   HOLTOP,HOLBOTTOM: LABL;
11120 ()+02*)
11130 (*+03()
11140   REGSINUSE: SET OF SUBSBTTYP;
11150   REGISTERS: ARRAY [SBTTYP] OF SET OF SUBSBTTYP;
11160 ()+03*)
11170 (*+05()
11180    POPARRAY : ARRAY [SBTSTK..SBTFPR3,SBTVOID..SBTFPR3] OF POP;
11190    APARAMS: INTEGER;
11220    DATASTATE : (STARTDATA,INDATA,ENDDATA,OUTDATA);
11230    REGSINUSE: REGUSETYP;
11240 ()+05*)
11250 (**)
11260 (**)
11270                 (*CODE GENERATOR*)
11280                 (****************)
11290 (**)
11300   RTSTACK: PSB;
11310   RTSTKDEPTH: DEPTHR;
11320 (**)
11330                 (*SEMANTIC ROUTINES*)
11340                 (*******************)
11350 (**)
11360   SRSTK: ARRAY [0..SRSTKSIZE] OF RECORD
11370       CASE SEVERAL OF
11380         1:(SB: PSB);
11390         2:(STB: PSTB);
11400         3:(MD: MODE);
11410         4:(LEX: PLEX);
11420         5:(SUBP: -1..SRSTKSIZE);
11430         6,7,8,9,10: ()
11440         END;                (*SEMANTIC STACK*)
11450 (**)
11460   SRSEMP: -1..SRSTKSIZE;    (*POINTS TO TOP ITEM OF SRSTK*)
11470   SRSUBP: 0..SRSTKSIZE;
11480   OPCOD: PSTB;  (*USED IN OPIDUSER*)
11490 (*CURRENT ROUTINE*)
11500   ROUTNL: PROUTN;
11510 (*PROPERTIES OF CURRENT RANGE*)
11520   RANGEL: PRANGE;
11530   RGINFO: SET OF DCLTYP;
11540   RGSTATE: STATE;
11550   DCIL: PSTB;           (*START OF THREAD*)
11560   RGLEV: DEPTHR;            (*DEPTH OF RANGE*)
11570 (*PROPERTIES OF CURRENT LOCAL RANGE*)
11580   CURLEB: OFFSETR;          (*BASE OF CURRENT LOCAL ENVIRONMENT*)
11590   DCLDEFN: DEFTYP;
11600   DCLMODE: MODE;
11610   DCLPRVMODE: MODE;
11620   TODOCOUNT, PSCOUNT: DEPTHR;
11640 (**)
11650   CURID: OFFSETR;           (*CURRENT IDENTIFIER OFFSET*)
11660   SCL: PMODECHAIN;
11670   BALFLAG: BOOLEAN;         (*INDICATES WHETHER THE SUBSTACK CONTAINS A SINGLE UNIT OR A BALANCE*)
11680 (**)
11690   OPTABL: ARRAY[STDOPTYP] OF OPIDBLK;
11700   XMODES: ARRAY[XTYPE] OF MODE;  (*TO CONVERT XTYPES INTP GENUINE MODES*)
11710   COMMX: XTYPE;    (*FOR COMMUNICATION BETWEEN OPIDSTD AND OPDOSTD*)
11720   OPBLK: -1..70;    (*LIKEWISE*)
11730 (**)
11740   MONADUMMY, DYADUMMY: PSTB;  (*FOR UNDEFINED OPERATORS*)
11750   BALANLEN: 0..MAXSIZE; (*COMMUNICATION BETWEEN UNITEDBALAND CGBALB*)
11760 (**)
11770                 (*PARSING*)
11780                 (*********)
11790 (**)
11800   SRPLSTK: ARRAY [0..SRPLSTKSIZE] OF PLEX;
11810                            (*PARSER STACK*)
11820   PLSTKP: 0..SRPLSTKSIZE;  (*POINTS TO TOP ITEM OF PLSTK*)
11830   PLINPQ: PLEXQ;           (*START OF LOOKED-AHEAD LEXEME CHAIN*)
11840   PRODTBL: ARRAY [1..PRODLEN] OF PROD;
11850                            (*TABLE OF PRODUCTION RULES*)
11860   PLPTR: 1..PRODLEN;       (*POINTER INTO PRODTBL*)
11870   INP: PLEX;               (*CURRENT LEXEME*)
11880   ENDOFPROG: BOOLEAN;
11890 (*+02() (*-25() LASTSTACK: INTEGER; ()-25*) ()+02*)
11900 (*+05() LASTSTACK: INTEGER; ()+05*)
11910 ()+70*)
11920 (**)
11930 (**)
