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