1262 lines
		
	
	
	
		
			52 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			1262 lines
		
	
	
	
		
			52 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
| 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 (**)
 |