33000 (*+01()   (*$P+,T-+)   ()+01*)
33010  (*+25()   (*$P+,T-+)   ()+25*)
33020      (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
33030  (**)
33040  (**)
33050  (**)
33060  (*+83()
33070  (**)
33080  (**)
33090  PROCEDURE INITIALIZE;
33100  (*FUNCTION: COMPILER INITIALIZATION TO SET UP LEXEMES, PARSER,
33110      STANDARD-PRELUDE, ETC.  ULTIMATELY, THE COMPILER WILL BE FROZEN
33120      AFTER THE CALL OF INITIALIZE, AND HOPEFULLY THIS PROCEDURE CAN
33130      THEN BE MADE TO VANISH AWAY.
33140  *)
33150    VAR I: INTEGER;
33160      OTCOUNT: INTEGER;
33170  (*+84()
33180    (*MDMS*)
33190      MDVINT, MDVLINT, MDVREAL, MDVLREAL, MDVCHAR, MDVBITS, MDVBYTES, MDVSTRNG, MDVBOOL,
33200      MDVCHAN, MDVCOVER, MDVVOID, MDVSKIP, MDVJUMP, MDVNIL,
33210      MDVOUT, MDVIN, MDVOUTB, MDVINB, MDVNUMBER,
33220      MDVROWS, MDVBNDS, MDVABSENT, MDVERROR (*, MDVPROC, MDVREF, MDVSTRUCT, MDVROW*): MDM;
33230  ()+84*)
33240  (*+81()
33250    (*LXMS - NONTERMINALS*)
33260      LXVACTPL, LXVACTRL,
33270      LXVBOUNDS, LXVBRINPT, LXVBRTHPT,
33280      LXVCSTICK,
33290      LXVDCLL,
33300      LXVFLDSPL, LXVFORDCL, LXVFORRLB,
33310      LXVIDEFL,
33320      LXVLABSQ,
33330      LXVMOIDDR,
33340      LXVNONRDR,
33350      LXVODEFL, LXVOPRAND,
33360      LXVPRIM, LXVPRMDRL,
33370      LXVRIDEFL, LXVRODEFL, LXVRSPEC, LXVRVDEFL,
33380      LXVTERT, LXVTRMSCL,
33390      LXVUNLC, LXVUNLP, LXVUNSR,
33400      LXVVDEFL,
33410    (*LXMS - TERMINALS*)
33420      LXVAGAIN, LXVAT,
33430      LXVBECOM, LXVBEGIN, LXVBOOLDEN, LXVBUS, LXVBY,
33440      LXVCASE, LXVCLOSE, LXVCOLON, LXVCOMMA, LXVCMMENT,
33450      LXVDO,
33460      LXVELIF, LXVELSE, LXVEND, LXVEQUAL, LXVERROR, LXVESAC, LXVEXIT,
33470      LXVFI, LXVFOR, LXVFROM,
33480      LXVGO, LXVGOTO,
33490      LXVHEAP,
33500      LXVIDTY, LXVIF, LXVIN,
33510      LXVLOC, LXVLONG,
33520      (*LXVMDIND,*) LXVMODE,
33530      LXVNIL,
33540      LXVOD, LXVOF, LXVOP, LXVOPEN, (*LXVOPR,*) LXVOTHDR, LXVOUSE, LXVOUT,
33550      LXVPRAGMAT, (*LXVPRDEN,*) LXVPRDR, LXVPRIO, LXVPROC,
33560      LXVREF,
33570      LXVSEMIC, LXVSHORT, LXVSKIP, LXVSTART, LXVSTICK, LXVSTOP, (*LXVSTRGDEN*) LXVSTRUCT, LXVSUB,
33580      (*LXVTAB,*) (*LXVTAG,*) LXVTHEN, LXVTO,
33590      LXVVOID,
33600      LXVWHILE: LXM;
33610    (*PLEXES - NONTERMINALS*)
33620      LEXACTPL, LEXACTRL,
33630      LEXBOUNDS, LEXBRINPT, (*LEXBRTHPT,*)
33640      LEXCSTICK,
33650      LEXDCLL,
33660      LEXFLDSPL, LEXFORDCL, LEXFORRLB,
33670      LEXIDEFL,
33680      LEXLABSQ,
33690      LEXMOIDDR,
33700      LEXNONRDR,
33710      LEXODEFL, LEXOPRAND,
33720      LEXPRIM, LEXPRMDRL,
33730      LEXRIDEFL, LEXRODEFL, LEXRSPEC, LEXRVDEFL,
33740      LEXTERT, LEXTRMSCL,
33750      LEXUNLC, LEXUNLP, LEXUNSR,
33760      LEXVDEFL,
33770    (*PLEXES - TERMINALS*)
33780      LEXAGAIN, LEXAT, LEXATB,
33790      LEXBECOM, (*LEXBEGIN,*) LEXBUSB, LEXBY,
33800      (*LEXCASE,*) LEXCLOSE, LEXCOLON, LEXCOMMA, LEXCO, LEXCO2, LEXCMMENT,
33810      LEXDIV, LEXDO, LEXDVAB,
33820      LEXELIF, LEXELSE, LEXEMPTY, LEXEND, LEXEQUAL, (*LEXERROR,*) LEXESAC, LEXEXIT,
33830      (*LEXFALSE,*) LEXFI, LEXFLEX, LEXFOR, LEXFROM,
33840      LEXGE, LEXGO, LEXGOTO, LEXGT,
33850      LEXHEAP,
33860      (*LEXIF,*) LEXIN, LEXIS, LEXISB, LEXISNT, LEXISNTB,
33870      LEXLE, LEXLOC, LEXLONG, LEXLT,
33880      LEXMDAB, LEXMINUS, LEXMNAB, LEXMOD, LEXMODE,
33890      LEXNE, LEXNIL,
33900      LEXOD, LEXOF, LEXOP, (*LEXOPEN,*) LEXOUSE, LEXOUT, LEXOVAB, LEXOVER,
33910      LEXPAR, LEXPLAB, LEXPLTO, LEXPLUS, LEXPLITM, LEXPR, LEXPRAGMAT, LEXPRIO, LEXPROC,
33920      LEXREF,
33930      LEXSEMA, LEXSEMIC, LEXSHORT, LEXSKIP, (*LEXSTART,*) LEXSTICK, (*LEXLSTOP, LEXSTOP,*) LEXSTRUCT, LEXSUBB,
33940      LEXTHEN, LEXTIMES, LEXTMAB, LEXTO, (*LEXTRUE,*)
33950      LEXUP1, LEXUP2, LEXUNION,
33960      LEXVOID (*, LEXWHILE*)
33970         : PLEX;
33980  ()+81*)
33990    PROCEDURE LXVVAL(VAR LXVVAR: LXM; IO: LXIOTYPE; CL0: CL0TYPE; CL1: CL1TYPE; CL2: CL2TYPE);
34000      VAR WORD: RECORD CASE SEVERAL OF
34010    (*-02() (*-05()     1:(LXV: LXM); 2:(INT: INTEGER) END; ()-05*) ()-02*)
34020    (*+02()      1:(LXV:LXM); 2:(INT,INT2,INT3: INTEGER); 3,4,5,6,7,8,9,10:() END; ()+02*)
34030    (*+05()      1:(LXV:LXM); 2:(INT,INT2: INTEGER); 3,4,5,6,7,8,9,10:() END; ()+05*)
34040      BEGIN WORD.INT := 0; (*TO ENSURE THAT PARTS OF WORD NOT OCCUPIED BY THE LXM ARE CLEAR*)
34050  (*+02()   WORD.INT2 := 0; WORD.INT3 := 0;  ()+02*)
34060  (*+05()   WORD.INT2 := 0; ()+05*)
34070      WITH WORD.LXV DO
34080            BEGIN LXIO := IO; LXCLASS0 := CL0; LXCLASS1 := CL1; LXCLASS2 := CL2; LXPSTB := NIL END;
34090      LXVVAR := WORD.LXV
34100        END;
34110  (*+81()
34120    PROCEDURE LOCNDEX(VAR LEX: PLEX; LXV: LXM);
34130        BEGIN
34140        ENEW(LEX, LEX1SIZE);
34150        LEX^.LXV := LXV;
34160        LEX^.LXCOUNT := 0;
34170        END;
34180  ()+81*)
34190  (*+84()
34200    FUNCTION DEFPRC0(YIELD: MODE; CP: CODEPROC): MODE;
34210        BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
34220        FINDPRC(YIELD,0,CP); DEFPRC0 := SRSTK[SRSEMP].MD
34230        END;
34240    FUNCTION DEFPRC1(P1, YIELD: MODE; CP: CODEPROC): MODE;
34250        BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
34260        SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P1;
34270        FINDPRC(YIELD,1,CP); DEFPRC1 := SRSTK[SRSEMP].MD
34280        END;
34290    FUNCTION DEFPRC2(P1, P2, YIELD: MODE; CP: CODEPROC): MODE;
34300        BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
34310        SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P1;
34320        SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P2;
34330        FINDPRC(YIELD,2,CP); DEFPRC2 := SRSTK[SRSEMP].MD
34340        END;
34350  ()+84*)
34360  (*+81()
34370    PROCEDURE DEFSYMB(VAR LEX: PLEX; TLXV: LXM; SYMB: ALFA);
34380      VAR I: INTEGER;
34390        BEGIN WITH CURRENTLEX DO
34400          BEGIN
34410          LXV := TLXV; LXTOKEN := TKSYMBOL;
34420  (*+11() S10 := SYMB; LXCOUNT := 1; ()+11*)
34430  (*-11() STASHLEX(SYMB); ()-11*)
34440          ENEW(LEX, LEX1SIZE+LXCOUNT*SZWORD);
34450          FOR I := 1 TO LEX1SIZE DIV SZWORD + LXCOUNT DO
34460            LEX^.LEXWORDS[I] := LEXWORDS[I];
34470          END
34480        END;
34490  (**)
34500  ()+81*)
34510  (**)
34520    PROCEDURE INTAB(VAR LEX: PLEX; TAG: ALFA; LXVV: LXM);
34530     VAR I:  INTEGER;
34540        BEGIN WITH CURRENTLEX DO
34550            BEGIN
34560            LXV := LXVV;  LXTOKEN := TKBOLD;
34570  (*+11()  S10:=TAG; LXCOUNT:=1;   ()+11*)
34580  (*-11()  STASHLEX(TAG); ()-11*)
34590            END;
34600        LEX := HASHIN
34610        END;
34620  (*+84()
34630    FUNCTION DEFTAG(TAG: ALFA): PLEX;
34640        BEGIN WITH CURRENTLEX DO
34650          BEGIN
34660          LXV := LXVTAG;  LXTOKEN := TKTAG;
34670  (*+11()  S10:=TAG; LXCOUNT:=1;   ()+11*)
34680  (*-11() STASHLEX(TAG); ()-11*)
34690          END;
34700        DEFTAG := HASHIN
34710        END;
34720  ()+84*)
34730  (*+81()
34740    FUNCTION DEFLTAG(TAG1, TAG2: ALFA): PLEX;
34750        BEGIN WITH CURRENTLEX DO
34760          BEGIN
34770          LXV := LXVTAG; LXTOKEN := TKTAG;
34780  (*+11() S20 := TAG2; S10 := TAG1; LXCOUNT := 2;   ()+11*)
34790  (*-11() STASHLLEX(TAG1, TAG2); ()-11*)
34800          DEFLTAG := HASHIN;
34810          END
34820        END;
34830    PROCEDURE OTPAIR(OTCOUNT: OPCHTABBOUND; TCHAR: CHAR; TNEXT, TALT: OPCHTABBOUND; TLEX: PLEX);
34840        BEGIN WITH OPCHTABLE[OTCOUNT] DO
34850            BEGIN OTCHAR := TCHAR; OTNEXT := TNEXT; OTALT := TALT; OTLEX := TLEX;
34860             END
34870        END;
34880    PROCEDURE INITLEXES;
34890        BEGIN
34900    (*SET UP LXV VALUES - NONTERMINALS*)
34910      LXVVAL(LXVACTPL  , LXIOACTPL  , 0, 0, 00); (*ACTUAL PARAMETER LIST*)
34920      LXVVAL(LXVACTRL  , LXIOACTRL  , 0, 0, 00); (*ACTUAL ROWER LIST*)
34930      LXVVAL(LXVBOUNDS , LXIOBOUNDS , 0, 0, 00); (*BOUNDS*)
34940      LXVVAL(LXVBRINPT , LXIOBRINPT , 0, 0, 02); (*BRIEF IN PART*)
34950      LXVVAL(LXVBRTHPT , LXIOBRTHPT , 0, 0, 02); (*BRIEF THEN PART*)
34960      LXVVAL(LXVCSTICK , LXIOCSTICK , 0, 3, 09); (*STICK IN CASE-CLAUSE*)
34970      LXVVAL(LXVDCLL   , LXIODCLL   , 0, 0, 00); (*DECLARATION LIST*)
34980      LXVVAL(LXVFLDSPL , LXIOFLDSPL , 0, 0, 07); (*FIELD SPECIFICATION LIST*)
34990      LXVVAL(LXVFORDCL , LXIOFORDCL , 0, 0, 00); (*FORMAL DECLARATIVE LIST*)
35000      LXVVAL(LXVFORRLB , LXIOFORRLB , 0, 0, 00); (*FORMAL ROWER LIST BRACKET*)
35010      LXVVAL(LXVIDEFL  , LXIOIDEFL  , 0, 0, 00); (*IDENTITY DEFINITION LIST*)
35020      LXVVAL(LXVLABSQ  , LXIOLABSQ  , 0, 0, 00); (*LABEL SEQUENCE*)
35030      LXVVAL(LXVMOIDDR , LXIOMOIDDR , 0, 0, 00); (*MOID DECLARER*)
35040      LXVVAL(LXVNONRDR , LXIONONRDR , 0, 0, 00); (*NONROWED DECLARER*)
35050      LXVVAL(LXVODEFL  , LXIOODEFL  , 0, 0, 00); (*OPERATION DEFINITION LIST*)
35060      LXVVAL(LXVOPRAND , LXIOOPRAND , 0, 0, 00); (*OPERAND*)
35070      LXVVAL(LXVPRIM   , LXIOPRIM   , 0, 0, 00); (*PRIMARY*)
35080      LXVVAL(LXVPRMDRL , LXIOPRMDRL , 0, 0, 00); (*PARAMETER DECLARER LIST*)
35090      LXVVAL(LXVRIDEFL , LXIORIDEFL , 0, 0, 00); (*ROUTINE IDENTITY DEFINITION LIST*)
35100      LXVVAL(LXVRODEFL , LXIORODEFL , 0, 0, 00); (*ROUTINE OPERATION DEFINITION LIST*)
35110      LXVVAL(LXVRSPEC  , LXIORSPEC  , 0, 0, 00); (*ROUTINE SPECIFICATION*)
35120      LXVVAL(LXVRVDEFL , LXIORVDEFL , 0, 0, 00); (*ROUTINE VARIABLE DEFINITION LIST*)
35130      LXVVAL(LXVTERT   , LXIOTERT   , 0, 0, 00); (*TERTIARY*)
35140      LXVVAL(LXVTRMSCL , LXIOTRMSCL , 0, 0, 00); (*TRIMSCRIPT LIST*)
35150      LXVVAL(LXVUNLC   , LXIOUNLC   , 0, 0, 00); (*UNIT LIST PROPER IN COLLATERAL*)
35160      LXVVAL(LXVUNLP   , LXIOUNLP   , 0, 0, 00); (*UNIT LIST PROPER*)
35170      LXVVAL(LXVUNSR   , LXIOUNSR   , 0, 3, 00); (*UNIT SERIES*)
35180      LXVVAL(LXVVDEFL  , LXIOVDEFL  , 0, 0, 00); (*VARIABLE DEFINITION LIST*)
35190    (*SET UP LXV VALUES - TERMINALS*)
35200      LXVVAL(LXVAGAIN  , LXIOAGAIN  , 1, 3, 09);
35210      LXVVAL(LXVAT     , LXIOAT     , 1, 1, 05);
35220      LXVVAL(LXVBECOM  , LXIOBECOM  , 1, 0, 00);
35230      LXVVAL(LXVBEGIN  , LXIOBEGIN  , 0, 3, 02);
35240      LXVVAL(LXVBOOLDEN, LXIOBOOLDEN, 0, 0, 10);
35250      LXVBOOLDEN.LXPYPTR := 0;
35260      LXVVAL(LXVBUS    , LXIOBUS    , 1, 1, 00);
35270      LXVVAL(LXVBY     , LXIOBY     , 0, 0, 01);
35280      LXVVAL(LXVCASE   , LXIOCASE   , 0, 3, 02);
35290      LXVVAL(LXVCLOSE  , LXIOCLOSE  , 1, 1, 15);
35300      LXVVAL(LXVCOLON  , LXIOCOLON  , 1, 0, 05);
35310      LXVVAL(LXVCOMMA  , LXIOCOMMA  , 1, 1, 13);
35320      LXVVAL(LXVCMMENT , LXIOCMMENT , 0, 0, 00);
35330      LXVVAL(LXVDO     , LXIODO     , 0, 3, 01);
35340      LXVVAL(LXVELIF   , LXIOELIF   , 1, 3, 04);
35350      LXVVAL(LXVELSE   , LXIOELSE   , 1, 3, 04);
35360      LXVVAL(LXVEND    , LXIOEND    , 1, 0, 15);
35370      LXVVAL(LXVEQUAL  , LXIOEQUAL  , 0, 4, 00);
35380      LXVVAL(LXVERROR  , LXIOERROR  , 0, 0, 00);
35390      LXVVAL(LXVESAC   , LXIOESAC   , 1, 0, 15);
35400      LXVVAL(LXVEXIT   , LXIOEXIT   , 1, 0, 00);
35410      LXVVAL(LXVFI     , LXIOFI     , 1, 0, 15);
35420      LXVVAL(LXVFOR    , LXIOFOR    , 0, 0, 01);
35430      LXVVAL(LXVFROM   , LXIOFROM   , 0, 0, 01);
35440      LXVVAL(LXVGO     , LXIOGO     , 0, 0, 00);
35450      LXVVAL(LXVGOTO   , LXIOGOTO   , 0, 0, 00);
35460      LXVVAL(LXVHEAP   , LXIOHEAP   , 0, 0, 14);
35470      LXVVAL(LXVIDTY   , LXIOIDTY   , 1, 0, 00);
35480      LXVVAL(LXVIF     , LXIOIF     , 0, 3, 02);
35490      LXVVAL(LXVIN     , LXIOIN     , 1, 3, 00);
35500      LXVVAL(LXVLOC    , LXIOLOC    , 0, 0, 14);
35510      LXVVAL(LXVLONG   , LXIOLONG   , 0, 2, 00);
35520      LXVVAL(LXVMDIND  , LXIOMDIND  , 0, 2, 11);
35530      LXVVAL(LXVMODE   , LXIOMODE   , 0, 0, 00);
35540      LXVVAL(LXVNIL    , LXIONIL    , 0, 0, 00);
35550      LXVVAL(LXVOD     , LXIOOD     , 1, 0, 15);
35560      LXVVAL(LXVOF     , LXIOOF     , 1, 0, 00);
35570      LXVVAL(LXVOP     , LXIOOP     , 0, 0, 12);
35580      LXVVAL(LXVOPEN   , LXIOOPEN   , 0, 3, 06);
35590      LXVVAL(LXVOPR    , LXIOOPR    , 0, 4, 00);
35600      LXVVAL(LXVOTHDR  , LXIOOTHDR  , 0, 2, 08); (*DOESN'T SEEM TO BE USED ANYWHERE*)
35610      LXVVAL(LXVOUSE   , LXIOOUSE   , 1, 3, 03);
35620      LXVVAL(LXVOUT    , LXIOOUT    , 1, 3, 03);
35630      LXVVAL(LXVPRAGMAT, LXIOPRAGMAT, 0, 0, 00);
35640      LXVVAL(LXVPRDEN  , LXIOPRDEN  , 0, 0, 10);
35650      LXVPRDEN.LXPYPTR := 0;
35660      LXVVAL(LXVPRDR   , LXIOPRDR   , 0, 2, 08);
35670      LXVVAL(LXVPRIO   , LXIOPRIO   , 0, 0, 00);
35680      LXVVAL(LXVPROC   , LXIOPROC   , 0, 2, 12);
35690      LXVVAL(LXVREF    , LXIOREF    , 0, 2, 00);
35700      LXVVAL(LXVSEMIC  , LXIOSEMIC  , 1, 0, 13);
35710      LXVVAL(LXVSHORT  , LXIOSHORT  , 0, 2, 00);
35720      LXVVAL(LXVSKIP   , LXIOSKIP   , 0, 0, 00);
35730      LXVVAL(LXVSTART  , LXIOSTART  , 0, 0, 00);
35740      LXVVAL(LXVSTICK  , LXIOSTICK  , 1, 3, 09);
35750      LXVVAL(LXVSTOP   , LXIOSTOP   , 1, 0, 00);
35760      LXVVAL(LXVSTRGDEN, LXIOSTRGDEN, 0, 0, 10);
35770      LXVSTRGDEN.LXPYPTR := 0;
35780      LXVVAL(LXVSTRUCT , LXIOSTRUCT , 0, 2, 07);
35790      LXVVAL(LXVSUB    , LXIOSUB    , 0, 2, 06);
35800      LXVVAL(LXVTAB    , LXIOTAB    , 0, 4, 11);
35810      LXVVAL(LXVTAG    , LXIOTAG    , 0, 0, 00);
35820      LXVVAL(LXVTHEN   , LXIOTHEN   , 1, 3, 00);
35830      LXVVAL(LXVTO     , LXIOTO     , 0, 0, 01);
35840      LXVVAL(LXVVOID   , LXIOVOID   , 0, 0, 00);
35850      LXVVAL(LXVWHILE  , LXIOWHILE  , 0, 3, 01);
35860    (*SET UP LEX VALUES - NONTERMINALS*)
35870      LOCNDEX(LEXACTPL,  LXVACTPL);
35880      LOCNDEX(LEXACTRL,  LXVACTRL);
35890      LOCNDEX(LEXBOUNDS, LXVBOUNDS);
35900      LOCNDEX(LEXBRINPT, LXVBRINPT);
35910      LOCNDEX(LEXBRTHPT, LXVBRTHPT);
35920      LOCNDEX(LEXCSTICK, LXVCSTICK);
35930      LOCNDEX(LEXDCLL,   LXVDCLL);
35940      LOCNDEX(LEXFLDSPL, LXVFLDSPL);
35950      LOCNDEX(LEXFORDCL, LXVFORDCL);
35960      LOCNDEX(LEXFORRLB, LXVFORRLB);
35970      LOCNDEX(LEXIDEFL,  LXVIDEFL);
35980      LOCNDEX(LEXLABSQ,  LXVLABSQ);
35990      LOCNDEX(LEXMOIDDR, LXVMOIDDR);
36000      LOCNDEX(LEXNONRDR, LXVNONRDR);
36010      LOCNDEX(LEXODEFL,  LXVODEFL);
36020      LOCNDEX(LEXOPRAND, LXVOPRAND);
36030      LOCNDEX(LEXPRIM,   LXVPRIM);
36040      LOCNDEX(LEXPRMDRL, LXVPRMDRL);
36050      LOCNDEX(LEXRIDEFL, LXVRIDEFL);
36060      LOCNDEX(LEXRODEFL, LXVRODEFL);
36070      LOCNDEX(LEXRSPEC,  LXVRSPEC);
36080      LOCNDEX(LEXRVDEFL, LXVRVDEFL);
36090      LOCNDEX(LEXTERT,   LXVTERT);
36100      LOCNDEX(LEXTRMSCL, LXVTRMSCL);
36110      LOCNDEX(LEXUNLC, LXVUNLC);
36120      LOCNDEX(LEXUNLP, LXVUNLP);
36130      LOCNDEX(LEXUNSR, LXVUNSR);
36140      LOCNDEX(LEXVDEFL,  LXVVDEFL);
36150    (*SET UP LEX VALUES - BRIEF TERMINALS*)
36160      LOCNDEX(LEXAGAIN, LXVAGAIN);
36170      LOCNDEX(LEXAT,    LXVAT);
36180      LOCNDEX(LEXBECOM, LXVBECOM);
36190      LOCNDEX(LEXBUSB,  LXVBUS);
36200      LOCNDEX(LEXCLOSE, LXVCLOSE);
36210      LOCNDEX(LEXCOLON, LXVCOLON);
36220      LOCNDEX(LEXCOMMA, LXVCOMMA);
36230      DEFSYMB(LEXCO2,   LXVCMMENT, '#         ');
36240      DEFSYMB(LEXDIV,   LXVOPR,    '/         ');
36250      DEFSYMB(LEXDVAB,  LXVOPR,    '/:=       ');
36260      DEFSYMB(LEXEQUAL, LXVEQUAL,  '=         ');
36270      LOCNDEX(LEXERROR, LXVERROR);
36280      DEFSYMB(LEXGE,    LXVOPR,    '>=        ');
36290      DEFSYMB(LEXGT,    LXVOPR,    '>         ');
36300      LOCNDEX(LEXIS,    LXVIDTY);
36310      LEXIS^.LXV.LXP := 0;
36320      LOCNDEX(LEXISNT,  LXVIDTY);
36330      LEXISNT^.LXV.LXP := 1;
36340      DEFSYMB(LEXLE,    LXVOPR,    '<=        ');
36350      DEFSYMB(LEXLT,    LXVOPR,    '<         ');
36360      DEFSYMB(LEXMDAB,  LXVOPR,    '%*:=      ');
36370      DEFSYMB(LEXMINUS, LXVOPR,    '-         ');
36380      DEFSYMB(LEXMNAB,  LXVOPR,    '-:=       ');
36390      DEFSYMB(LEXMOD,   LXVOPR,    '%*        ');
36400      DEFSYMB(LEXNE,    LXVOPR,    '/=        ');
36410      LOCNDEX(LEXOPEN,  LXVOPEN);
36420      DEFSYMB(LEXOVAB,  LXVOPR,    '%:=       ');
36430      DEFSYMB(LEXOVER,  LXVOPR,    '%         ');
36440      DEFSYMB(LEXPLAB,  LXVOPR,    '+:=       ');
36450      DEFSYMB(LEXPLTO,  LXVOPR,    '+=:       ');
36460      DEFSYMB(LEXPLUS,  LXVOPR,    '+         ');
36470      DEFSYMB(LEXPLITM, LXVOPR,    '+*        ');
36480        (*LEXPR2 OMITTED*)
36490      LOCNDEX(LEXSEMIC, LXVSEMIC);
36500      LOCNDEX(LEXSTART, LXVSTART);
36510      LOCNDEX(LEXSTICK, LXVSTICK);
36520      LOCNDEX(LEXSTOP,  LXVSTOP);
36530      LOCNDEX(LEXSUBB,  LXVSUB);
36540      DEFSYMB(LEXTIMES, LXVOPR,    '*         ');
36550      DEFSYMB(LEXTMAB,  LXVOPR,    '*:=       ');
36560      DEFSYMB(LEXUP1,   LXVOPR,    '^         ');
36570      DEFSYMB(LEXUP2,   LXVOPR,    '**        ');
36580        END;
36590  (**)
36600    PROCEDURE MAKEPUSHTBL;
36610    (*SET UP PUSHTBL*)
36620      BEGIN
36630      PUSHTBL[LXIOACTPL]  := LEXACTPL;
36640      PUSHTBL[LXIOACTRL]  := LEXACTRL;
36650      PUSHTBL[LXIOBOUNDS] := LEXBOUNDS;
36660      PUSHTBL[LXIOBRINPT] := LEXBRINPT;
36670      PUSHTBL[LXIOBRTHPT] := LEXBRTHPT;
36680      PUSHTBL[LXIOCSTICK] := LEXCSTICK;
36690      PUSHTBL[LXIODCLL]   := LEXDCLL;
36700      PUSHTBL[LXIOFLDSPL] := LEXFLDSPL;
36710      PUSHTBL[LXIOFORDCL] := LEXFORDCL;
36720      PUSHTBL[LXIOFORRLB] := LEXFORRLB;
36730      PUSHTBL[LXIOIDEFL]  := LEXIDEFL;
36740      PUSHTBL[LXIOLABSQ]  := LEXLABSQ;
36750      PUSHTBL[LXIOMOIDDR] := LEXMOIDDR;
36760      PUSHTBL[LXIONONRDR] := LEXNONRDR;
36770      PUSHTBL[LXIOODEFL]  := LEXODEFL;
36780      PUSHTBL[LXIOOPRAND] := LEXOPRAND;
36790      PUSHTBL[LXIOPRIM]   := LEXPRIM;
36800      PUSHTBL[LXIOPRMDRL] := LEXPRMDRL;
36810      PUSHTBL[LXIORIDEFL] := LEXRIDEFL;
36820      PUSHTBL[LXIORODEFL] := LEXRODEFL;
36830      PUSHTBL[LXIORSPEC]  := LEXRSPEC;
36840      PUSHTBL[LXIORVDEFL] := LEXRVDEFL;
36850      PUSHTBL[LXIOTERT]   := LEXTERT;
36860      PUSHTBL[LXIOTRMSCL] := LEXTRMSCL;
36870      PUSHTBL[LXIOUNLC] := LEXUNLC;
36880      PUSHTBL[LXIOUNLP] := LEXUNLP;
36890      PUSHTBL[LXIOUNSR] := LEXUNSR;
36900      PUSHTBL[LXIOVDEFL]  := LEXVDEFL;
36910      END;
36920   PROCEDURE OTPAIRS;
36930    (*SET UP OPCHTABLE*)
36940      BEGIN
36950    (*THE INITIAL ENTRIES TO THIS TABLE (THE ONES LESS INDENTED) DEPEND UPON
36960      THE POSITION OF THE CHARACTER CONCERNED IN THE CHARACTER CODE*)
36970  (*+01() (*BUT ':' OCCUPIES THE POSITION OF '$'*) ()+01*)
36980  (*-01() (*BUT '[', ']' AND '^' OCCUPY THE POSITIONS OF '$', '&' AND ''''*) ()-01*)
36990  (*+01() (*CDC CODE*)
37000      OTPAIR( 0, '+', 37,  0, LEXPLUS);
37010      OTPAIR( 1, '-', 15,  0, LEXMINUS);
37020      OTPAIR( 2, '*', 45,  0, LEXTIMES);
37030      OTPAIR( 3, '/', 42,  0, LEXDIV);
37040      OTPAIR( 4, '(',  0,  0, LEXOPEN);
37050      OTPAIR( 5, ')',  0,  0, LEXCLOSE);
37060      OTPAIR( 6, ':', 27,  0, LEXCOLON);
37070      OTPAIR( 7, '=',  0,  0, LEXEQUAL);
37080        OTPAIR( 8, ':',  0,  0, LEXAGAIN);
37090      OTPAIR( 9, ',',  0,  0, LEXCOMMA);
37100        OTPAIR(10, '=',  0,  0, LEXLE);
37110      OTPAIR(11, '#',  0,  0, LEXCO2);
37120      OTPAIR(12, '[',  0,  0, LEXSUBB);
37130      OTPAIR(13, ']',  0,  0, LEXBUSB);
37140      OTPAIR(14, '%', 32,  0, LEXOVER);
37150        OTPAIR(15, ':', 16,  0, LEXERROR);
37160        OTPAIR(16, '=',  0,  0, LEXMNAB);
37170  (*-51()
37180      OTPAIR(17, '!',  8,  0, LEXSTICK);
37190  ()-51*)
37200  (*+51()
37210      OTPAIR(18, '&',  8,  0, LEXSTICK);
37220      OTPAIR(19, '''', 0,  0, LEXUP1);
37230  ()+51*)
37240      OTPAIR(20, '=',  0,  0, LEXTMAB);
37250      OTPAIR(21, '<', 10, 0, LEXLT);
37260      OTPAIR(22, '>', 24,  0, LEXGT);
37270      OTPAIR(23, '@',  0,  0, LEXAT);
37280        OTPAIR(24, '=',  0,  0, LEXGE);
37290  (*-51()
37300      OTPAIR(25, '^',  0,  0, LEXUP1);
37310  ()-51*)
37320      OTPAIR(26, ';',  0,  0, LEXSEMIC);
37330        OTPAIR(27, '=', 28, 29, LEXBECOM);
37340        OTPAIR(28, ':',  0,  0, LEXIS);
37350        OTPAIR(29, '/', 30,  0, LEXERROR);
37360        OTPAIR(30, '=', 31,  0, LEXERROR);
37370        OTPAIR(31, ':',  0,  0, LEXISNT);
37380   ()+01*)
37390  (*+25() (*CDC CODE*)
37400     OTPAIR( 0, '+', 37,  0, LEXPLUS);
37410      OTPAIR( 1, '-', 15,  0, LEXMINUS);
37420      OTPAIR( 2, '*', 45,  0, LEXTIMES);
37430      OTPAIR( 3, '/', 42,  0, LEXDIV);
37440      OTPAIR( 4, '(',  0,  0, LEXOPEN);
37450      OTPAIR( 5, ')',  0,  0, LEXCLOSE);
37460      OTPAIR( 6, ':', 27,  0, LEXCOLON);
37470      OTPAIR( 7, '=',  0,  0, LEXEQUAL);
37480        OTPAIR( 8, ':',  0,  0, LEXAGAIN);
37490      OTPAIR( 9, ',',  0,  0, LEXCOMMA);
37500        OTPAIR(10, '=',  0,  0, LEXLE);
37510      OTPAIR(11, '#',  0,  0, LEXCO2);
37520      OTPAIR(12, '[',  0,  0, LEXSUBB);
37530      OTPAIR(13, ']',  0,  0, LEXBUSB);
37540      OTPAIR(14, '%', 32,  0, LEXOVER);
37550        OTPAIR(15, ':', 16,  0, LEXERROR);
37560        OTPAIR(16, '=',  0,  0, LEXMNAB);
37570  (*-51()
37580      OTPAIR(17, '!',  8,  0, LEXSTICK);
37590  ()-51*)
37600  (*+51()
37610      OTPAIR(18, '&',  8,  0, LEXSTICK);
37620      OTPAIR(19, '''', 0,  0, LEXUP1);
37630  ()+51*)
37640      OTPAIR(20, '=',  0,  0, LEXTMAB);
37650      OTPAIR(21, '<', 10, 0, LEXLT);
37660      OTPAIR(22, '>', 24,  0, LEXGT);
37670      OTPAIR(23, '@',  0,  0, LEXAT);
37680        OTPAIR(24, '=',  0,  0, LEXGE);
37690  (*-51()
37700      OTPAIR(25, '^',  0,  0, LEXUP1);
37710  ()-51*)
37720      OTPAIR(26, ';',  0,  0, LEXSEMIC);
37730        OTPAIR(27, '=', 28, 29, LEXBECOM);
37740        OTPAIR(28, ':',  0,  0, LEXIS);
37750        OTPAIR(29, '/', 30,  0, LEXERROR);
37760        OTPAIR(30, '=', 31,  0, LEXERROR);
37770        OTPAIR(31, ':',  0,  0, LEXISNT);
37780   ()+25*)
37790  (*-01()  (*ASCII*)
37800  (*-25()
37810      OTPAIR( 0, '!',  1,  0, LEXSTICK); (*!*)
37820        OTPAIR( 1, ':',  0,  0, LEXAGAIN); (*!:*)
37830      OTPAIR( 2, '#',  0,  0, LEXCO2  ); (*#*)
37840      OTPAIR( 3, '[',  0,  0, LEXSUBB ); (*[*)
37850      OTPAIR( 4, '\',  0,  0, LEXSTICK); (*STICK*)
37860      OTPAIR( 5, ']',  0,  0, LEXBUSB ); (*]*)
37870      OTPAIR( 6, '^',  0,  0, LEXUP1  ); (*^*)
37880      OTPAIR( 7, '(',  0,  0, LEXOPEN ); (*(*)
37890      OTPAIR( 8, ')',  0,  0, LEXCLOSE); (*)*)
37900      OTPAIR( 9, '*', 45,  0, LEXTIMES); (***)
37910      OTPAIR(10, '+', 37,  0, LEXPLUS ); (*+*)
37920      OTPAIR(11, ',',  0,  0, LEXCOMMA); (*,*)
37930      OTPAIR(12, '-', 21,  0, LEXMINUS); (*-*)
37940        OTPAIR(13, '=',  0,  0, LEXLE   ); (*<=*)
37950      OTPAIR(14, '/', 42,  0, LEXDIV  ); (* / *)
37960        OTPAIR(15, '=', 16, 17, LEXBECOM);(*:=*)
37970        OTPAIR(16, ':',  0,  0, LEXIS   ); (*:=:*)
37980        OTPAIR(17, '/', 18,  0, LEXERROR);
37990        OTPAIR(18, '=', 19,  0, LEXERROR);
38000        OTPAIR(19, ':',  0,  0, LEXISNT ); (*:/=:*)
38010        OTPAIR(20, '=',  0,  0, LEXTMAB ); (**:=*)
38020        OTPAIR(21, ':', 22,  0, LEXERROR);
38030        OTPAIR(22, '=',  0,  0, LEXMNAB ); (*-:=*)
38040      OTPAIR(23, '%', 32,  0, LEXOVER ); (*%*)
38050        (*SPARE 24*)
38060      OTPAIR(25, ':', 15,  0, LEXCOLON); (*:*)
38070      OTPAIR(26, ';',  0,  0, LEXSEMIC); (*;*)
38080      OTPAIR(27, '<', 13,  0, LEXLT   ); (*<*)
38090      OTPAIR(28, '=',  0,  0, LEXEQUAL); (*=*)
38100      OTPAIR(29, '>', 30,  0, LEXGT   ); (*>*)
38110        OTPAIR(30, '=',  0,  0, LEXGE   ); (*>=*)
38120      OTPAIR(31, '@',  0,  0, LEXAT   ); (*@*)
38130   ()-25*)
38140   ()-01*)
38150        OTPAIR(32, '*', 33, 35, LEXMOD)  ; (*%**)
38160        OTPAIR(33, ':', 34,  0, LEXERROR);
38170        OTPAIR(34, '=',  0,  0, LEXMDAB ); (*%*:=*)
38180        OTPAIR(35, ':', 36,  0, LEXERROR);
38190        OTPAIR(36, '=',  0,  0, LEXOVAB ); (*%:=*)
38200        OTPAIR(37, '=', 38, 39, LEXERROR);
38210        OTPAIR(38, ':',  0,  0, LEXPLTO ); (*+=:*)
38220        OTPAIR(39, ':', 40, 41, LEXERROR);
38230        OTPAIR(40, '=',  0,  0, LEXPLAB ); (*+:=*)
38240        OTPAIR(41, '*',  0,  0, LEXPLITM); (*+**)
38250        OTPAIR(42, '=',  0, 43, LEXNE   ); (*/=*)
38260        OTPAIR(43, ':', 44,  0, LEXERROR);
38270        OTPAIR(44, '=',  0,  0, LEXDVAB ); (*/:=*)
38280        OTPAIR(45, '*',  0, 46, LEXUP2  ); (****)
38290        OTPAIR(46, ':', 20,  0, LEXERROR);
38300      END;
38310    PROCEDURE BOLDWORDS;
38320      BEGIN
38330      INTAB(LEXATB    , 'AT        ', LXVAT);
38340      INTAB(LEXBEGIN  , 'BEGIN     ', LXVBEGIN);
38350      INTAB(LEXBY     , 'BY        ', LXVBY);
38360      INTAB(LEXCASE   , 'CASE      ', LXVCASE);
38370      INTAB(LEXCO     , 'CO        ', LXVCMMENT);
38380      INTAB(LEXCMMENT, 'COMMENT   ', LXVCMMENT);
38390      INTAB(LEXDO     , 'DO        ', LXVDO);
38400      INTAB(LEXELIF   , 'ELIF      ', LXVELIF);
38410      INTAB(LEXELSE   , 'ELSE      ', LXVELSE);
38420      INTAB(LEXEMPTY  , 'EMPTY     ', LXVERROR);
38430      INTAB(LEXEND    , 'END       ', LXVEND);
38440      INTAB(LEXESAC   , 'ESAC      ', LXVESAC);
38450      INTAB(LEXEXIT   , 'EXIT      ', LXVEXIT);
38460      INTAB(LEXFALSE  , 'FALSE     ', LXVBOOLDEN);
38470      INTAB(LEXFI     , 'FI        ', LXVFI);
38480      INTAB(LEXFLEX   , 'FLEX      ', LXVERROR);
38490      INTAB(LEXFOR    , 'FOR       ', LXVFOR);
38500      INTAB(LEXFROM   , 'FROM      ', LXVFROM);
38510      INTAB(LEXGO     , 'GO        ', LXVGO);
38520      INTAB(LEXGOTO   , 'GOTO      ', LXVGOTO);
38530      INTAB(LEXHEAP   , 'HEAP      ', LXVHEAP);
38540      INTAB(LEXIF     , 'IF        ', LXVIF);
38550      INTAB(LEXIN     , 'IN        ', LXVIN);
38560      INTAB(LEXISB    , 'IS        ', LXVIDTY);
38570      INTAB(LEXISNTB  , 'ISNT      ', LXVIDTY);
38580      INTAB(LEXLOC    , 'LOC       ', LXVLOC);
38590      INTAB(LEXLONG   , 'LONG      ', LXVLONG);
38600      INTAB(LEXMODE   , 'MODE      ', LXVMODE);
38610      INTAB(LEXNIL    , 'NIL       ', LXVNIL);
38620      INTAB(LEXOD     , 'OD        ', LXVOD);
38630      INTAB(LEXOF     , 'OF        ', LXVOF);
38640      INTAB(LEXOP     , 'OP        ', LXVOP);
38650      INTAB(LEXOUSE   , 'OUSE      ', LXVOUSE);
38660      INTAB(LEXOUT    , 'OUT       ', LXVOUT);
38670      INTAB(LEXPAR    , 'PAR       ', LXVERROR);
38680      INTAB(LEXPR     , 'PR        ', LXVPRAGMAT);
38690      INTAB(LEXPRAGMAT, 'PRAGMAT   ', LXVPRAGMAT);
38700      INTAB(LEXPRIO   , 'PRIO      ', LXVPRIO);
38710      INTAB(LEXPROC   , 'PROC      ', LXVPROC);
38720      INTAB(LEXREF    , 'REF       ', LXVREF);
38730      INTAB(LEXSEMA   , 'SEMA      ', LXVERROR);
38740      INTAB(LEXSHORT  , 'SHORT     ', LXVSHORT);
38750      INTAB(LEXSKIP   , 'SKIP      ', LXVSKIP);
38760      INTAB(LEXSTRUCT , 'STRUCT    ', LXVSTRUCT);
38770      INTAB(LEXTHEN   , 'THEN      ', LXVTHEN);
38780      INTAB(LEXTO     , 'TO        ', LXVTO);
38790      INTAB(LEXTRUE   , 'TRUE      ', LXVBOOLDEN);
38800      INTAB(LEXUNION  , 'UNION     ', LXVERROR);
38810      INTAB(LEXVOID   , 'VOID      ', LXVVOID);
38820      INTAB(LEXWHILE  , 'WHILE     ', LXVWHILE);
38830      END;
38840  ()+81*)
38850  (*+84()
38860    PROCEDURE INITMODES;
38870      CONST SIMPLE=FALSE; PILE=TRUE; UNDRESSED=FALSE; DRESSED=TRUE; IO=TRUE;
38880          NOIO=FALSE; O=FALSE; SCOPE=TRUE;
38890      VAR I: INTEGER;
38900          PRFB: MODE;
38910          PLX: PLEX; LXEM: LXM; LX: LXM;
38920      PROCEDURE MDVVAL(VAR V: MDM; ID: MDIDTYPE; PILE, DRESSED, IO, SCOPE: BOOLEAN; LENGTH: INTEGER);
38930  (*+02() (*-25() VAR CLEAR: RECORD CASE BOOLEAN OF
38940                             TRUE: (V:MDM); FALSE: (A: ARRAY[1..MODE1SIZE] OF INTEGER) END
38950                      I: INTEGER; ()-25*) ()+02*)
38960        BEGIN
38970  (*+02() (*-25() WITH CLEAR DO FOR I:= 1 TO MODE1SIZE DIV SZWORD DO A[I] := 0;
38980                  V := CLEAR.V;
38990  ()-25*) ()+02*)
39000        WITH V DO
39010          BEGIN MDID := ID; MDLEN := LENGTH;
39020          MDDEPROC := FALSE; MDRECUR := FALSE;
39030          MDDRESSED := DRESSED; MDIO := IO; MDPILE := PILE; MDSCOPE := SCOPE; MDCNT := 0
39040          END
39050        END;
39060      PROCEDURE MDVAR(VAR V: MODE; MDV: MDM);
39070          BEGIN ENEW(V, MODE1SIZE); V^.MDV := MDV END;
39080      PROCEDURE MDIND(TAG: ALFA; M: MODE);
39090        VAR LEX: PLEX; STB: PSTB;
39100          BEGIN
39110          INTAB(LEX,TAG,LX);
39120          LEX^.LXV.LXPMD := M
39130          END;
39140      PROCEDURE PUTFIELD(M: MODE; L: PLEX);
39150          BEGIN
39152          SRSEMP := SRSEMP+2;
39154          SRSTK[SRSEMP-1].MD := M;
39156          SRSTK[SRSEMP].LEX := L ;
39158          END;
39160  (**)
39170        BEGIN
39180        REFL := NIL; ROWL := NIL; PROCL := NIL; PASCL := NIL; STRUCTL := NIL;
39190        MDVVAL(MDVINT   , MDIDINT   , SIMPLE, O        , IO  , O    , SZINT);
39200        MDVVAL(MDVLINT  , MDIDLINT  , SIMPLE, UNDRESSED, IO  , O    , SZLONG);
39210        MDVVAL(MDVREAL  , MDIDREAL  , SIMPLE, O        , IO  , O    , SZREAL);
39220        MDVVAL(MDVLREAL , MDIDLREAL , SIMPLE, UNDRESSED, IO  , O    , 2*SZREAL);
39230        MDVVAL(MDVCHAR  , MDIDCHAR  , SIMPLE, O        , IO  , O    , SZWORD);
39240        MDVVAL(MDVBITS  , MDIDBITS  , SIMPLE, O        , IO  , O    , SZINT);
39250        MDVVAL(MDVBYTES , MDIDBYTES , SIMPLE, O        , IO   ,O    , SZINT);
39260        MDVVAL(MDVSTRNG , MDIDSTRNG , PILE  , DRESSED  , IO  , O    , SZADDR);
39270        MDVVAL(MDVBOOL  , MDIDBOOL  , SIMPLE, O        , IO  , O    , SZWORD);
39280        MDVVAL(MDVCHAN  , MDIDCHAN  , SIMPLE, O        , NOIO, O    , SZPROC);
39290        MDVVAL(MDVCOVER , MDIDCOVER , PILE  , DRESSED  , NOIO, O    , SZADDR);
39300        MDVVAL(MDVVOID  , MDIDVOID  , O     , O        , NOIO, O    , 0);
39310        MDVVAL(MDVSKIP  , MDIDSKIP  , O     , O        , NOIO, O    , 0);
39320        MDVVAL(MDVJUMP  , MDIDJUMP  , O     , O        , NOIO, O    , 0);
39330        MDVVAL(MDVNIL   , MDIDNIL   , O     , O        , NOIO, O    , 0);
39340        MDVVAL(MDVOUT   , MDIDOUT   , O     , O        , O   , O    , SZWORD+SZINT);
39350        MDVVAL(MDVIN    , MDIDIN    , O     , O        , O   , SCOPE, 2*SZWORD+SZADDR);
39360        MDVVAL(MDVOUTB  , MDIDOUTB  , O     , O        , O   , O    , SZWORD+SZINT);
39370        MDVVAL(MDVINB   , MDIDINB   , O     , O        , O   , SCOPE, SZWORD+SZADDR);
39380        MDVVAL(MDVNUMBER, MDIDNUMBER, O     , O        , O   , O    , SZWORD+SZINT);
39390        MDVVAL(MDVROWS  , MDIDROWS  , PILE  , DRESSED  , O   , O    , SZADDR);
39400        MDVVAL(MDVBNDS  , MDIDBNDS  , PILE  , O        , NOIO, O    , SZADDR);
39410        MDVVAL(MDVABSENT, MDIDABSENT, SIMPLE, O        , O   , O    , SZWORD);
39420                     (*CAN BE USED TO MANUFACTURE UN-USER-FORGEABLE STRUCTURES*)
39430        MDVVAL(MDVERROR , MDIDERROR , SIMPLE, O        , O   , O    , SZWORD);
39440        MDVVAL(MDVPROC  , MDIDPROC  , PILE  , DRESSED  , NOIO, SCOPE, SZADDR);
39450        MDVVAL(MDVREF   , MDIDREF   , PILE  , DRESSED  , NOIO, SCOPE, SZADDR);
39460        MDVVAL(MDVSTRUCT, MDIDSTRUCT, PILE  , UNDRESSED, NOIO, SCOPE, 0);
39470        MDVVAL(MDVROW   , MDIDROW   , PILE  , O        , NOIO, SCOPE, 0);
39480        MDVVAL(MDVPASC  , MDIDPASC  , SIMPLE, O        , NOIO, O    , SZPROC);
39500      (*SET UP MD VALUES*)
39510        MDVAR(MDINT   , MDVINT);
39520        MDVAR(MDLINT  , MDVLINT);
39530        MDVAR(MDBITS  , MDVBITS);
39540        MDVAR(MDBYTES , MDVBYTES);
39550        MDVAR(MDREAL  , MDVREAL);
39560        MDVAR(MDLREAL , MDVLREAL);
39570        MDVAR(MDBOOL  , MDVBOOL);
39580        MDVAR(MDCHAN  , MDVCHAN);
39590        MDVAR(MDCHAR  , MDVCHAR);
39600        MDVAR(MDSTRNG, MDVSTRNG);
39610        MDVAR(MDCOVER , MDVCOVER);
39620        MDVAR(MDVOID  , MDVVOID);
39630        MDVAR(MDSKIP  , MDVSKIP);
39640        MDVAR(MDJUMP  , MDVJUMP);
39650        MDVAR(MDNIL   , MDVNIL);
39660        MDVAR(MDOUT   , MDVOUT);
39670        MDVAR(MDIN    , MDVIN);
39680        MDVAR(MDOUTB  , MDVOUTB);
39690        MDVAR(MDINB   , MDVINB);
39700        MDVAR(MDNUMBER, MDVNUMBER);
39710        MDVAR(MDROWS  , MDVROWS);
39720        MDVAR(MDBNDS  , MDVBNDS);
39730        MDVAR(MDABSENT, MDVABSENT);
39740        MDVAR(MDROUT  , MDVPROC);
39750        MDVAR(MDERROR , MDVERROR);
39760        INTAB(PLX,'GO        ',LXEM);
39770        PLX^.LXV.LXPMD := MDJUMP;
39780        INTAB(PLX,'GOTO      ',LXEM);
39790        PLX^.LXV.LXPMD := MDJUMP;
39800        INTAB(PLX,'IS        ',LXEM);
39810        PLX^.LXV.LXP := 0;
39820        INTAB(PLX,'ISNT      ',LXEM);
39830        PLX^.LXV.LXP := 1;
39840        INTAB(PLX,'NIL       ',LXEM);
39850        PLX^.LXV.LXPMD := MDNIL;
39860        INTAB(PLX,'SKIP      ',LXEM);
39870        PLX^.LXV.LXPMD := MDSKIP;
39880        INTAB(PLX,'VOID      ',LXEM);
39890        PLX^.LXV.LXPMD := MDVOID;
39900        MDREFERROR := FINDREF(MDERROR);
39910        PRCBNDS := DEFPRC0(MDBNDS, PROC);
39920        PRCERROR := DEFPRC0(MDERROR, PROC);
39930        SRSEMP := -1; SRSUBP := 0; SUBSAVE;
39940        PUTFIELD(MDREAL, DEFTAG('RE        '));
39950        PUTFIELD(MDREAL, DEFTAG('IM        '));
39960        FINSTRUCT(2); MDCOMPL := SRSTK[SRSEMP].MD;
39970        (*MDLCOMPL OUGHT TO BE DONE ONE OF THESE DAYS, TOO*)
39980        MDFILE := NIL; (*BECAUSE IT IS TO BE A RECURSIVE MODE*)
39990        PRFB := DEFPRC1(FINDREF(MDFILE), MDBOOL, PROC);
40000        SRSEMP := -1; SRSUBP := 0; SUBSAVE;
40010        FOR I := 1 TO 4 DO
40020          PUTFIELD(PRFB, LEXALEPH);
40030        PUTFIELD(MDCOVER, LEXALEPH);
40040        FOR I := 1 TO SZTERM DIV SZINT DO
40050          PUTFIELD(MDINT, LEXALEPH);
40060        FINSTRUCT(5+SZTERM DIV SZINT); MDFILE := SRSTK[SRSEMP].MD;
40070        PRCVF := DEFPRC1(FINDREF(MDFILE), MDVOID, PROC);
40080        PASCVF := DEFPRC1(FINDREF(MDFILE), MDVOID, PASC);
40090        ROWBOOL := FINDROW(MDBOOL,1);
40100        ROWCHAR := FINDROW(MDCHAR,1);
40110        ROWIN := FINDROW(MDIN,1);
40120        ROWINB := FINDROW(MDINB,1);
40130        REFSTRNG := FINDREF(MDSTRNG);
40140  (*+54()
40150        SRSEMP := -1; SRSUBP := 0; SUBSAVE;
40160        PUTFIELD(MDINT, DEFTAG('ALEPH     '));
40170        PUTFIELD(MDABSENT, LEXALEPH);
40180        FINSTRUCT(2); MDEXC := SRSTK[SRSEMP].MD;
40190  ()+54*)
40200      (*SET UP STANDARD-PRELUDE MODE-INDICATIONS*)
40210          LXVVAL(LX,LXIOPRDR,0,2,08);
40220        MDIND('INT       ', MDINT);
40230        MDIND('BITS      ', MDBITS);
40240        MDIND('BYTES     ', MDBYTES);
40250        MDIND('REAL      ', MDREAL);
40260        MDIND('BOOL      ', MDBOOL);
40270        MDIND('CHANNEL   ', MDCHAN);
40280        MDIND('CHAR      ', MDCHAR);
40290        MDIND('STRING    ', MDSTRNG);
40300        MDIND('FILE      ', MDFILE);
40310        MDIND('COMPL     ', MDCOMPL);
40320  (*+54() MDIND('EXCEPTION ', MDEXC); ()+54*)
40330        MODEID[MDIDINT]:=0;
40340        MODEID[MDIDLINT]:=1;
40350        MODEID[MDIDREAL]:=2;
40360        MODEID[MDIDLREAL]:=3;
40370        MODEID[MDIDCHAR]:=6;
40380        MODEID[MDIDBITS]:=9;
40390        MODEID[MDIDBYTES]:=10;
40400        MODEID[MDIDSTRNG]:=7;
40410        MODEID[MDIDBOOL]:=8;
40420        MODEID[MDIDCHAN]:=-1;
40430        MODEID[MDIDCOVER]:=-1;
40440        MODEID[MDIDVOID]:=-1;
40450        MODEID[MDIDSKIP]:=-1;
40460        MODEID[MDIDJUMP]:=-1;
40470        MODEID[MDIDNIL]:=-1;
40480        MODEID[MDIDOUT]:=-1;
40490        MODEID[MDIDIN]:=-1;
40500        MODEID[MDIDOUTB]:=-1;
40510        MODEID[MDIDINB]:=-1;
40520        MODEID[MDIDNUMBER]:=-1;
40530        MODEID[MDIDROWS]:=-1;
40540        MODEID[MDIDBNDS]:=-1;
40550        MODEID[MDIDABSENT]:=-1;
40560        MODEID[MDIDPROC]:=11;
40570        MODEID[MDIDREF]:=-1;
40580        MODEID[MDIDSTRUCT]:=12;  (*BUT NOT COMPL*)
40590        MODEID[MDIDROW]:=13;
40600        MODEID[MDIDPASC]:=14;
40620        XMODES[XINT] := MDINT;
40630        XMODES[XLINT] := MDLINT;
40640        XMODES[XREAL] := MDREAL;
40650        XMODES[XLREAL] := MDLREAL;
40660        XMODES[XCOMPL] := MDCOMPL;
40670  (*+61()
40680        XMODES[XLCOMPL] := MDLCOMPL;
40690  ()+61*)
40700        XMODES[XCHAR] := MDCHAR;
40710        XMODES[XSTRNG] := MDSTRNG;
40720        XMODES[XBOOL] := MDBOOL;
40730        XMODES[XBITS] := MDBITS;
40740        XMODES[XBYTES] := MDBYTES;
40750        END;
40760  (**)
40770  ()+84*)
40780  (**)
40790      BEGIN (*INITIALIZE*)
40800  (*+81()
40810      INITLEXES;
40820      MAKEPUSHTBL;
40830  (**)
40840      OTPAIRS;
40850      FOR I := 0 TO HTSIZE DO
40860        HT[I] := NIL;
40870      INPRAGMENT := FALSE;
40880      ENEW(LEXALEPH, LEX1SIZE); WITH LEXALEPH^ DO
40890        BEGIN LXV:=LXVTAG; LXCOUNT:=0; LXTOKEN:=TKTAG END;
40900        BOLDWORDS;
40910  ()+81*)
40920  (*+84() INITMODES; ()+84*)
40930  (*+84()
40940      ENEW(LEXONE, SZADDR+SZINT+LEX1SIZE); WITH LEXONE^ DO
40950        BEGIN LXV:=LXVPRDEN; LXCOUNT:= (SZADDR+SZINT) DIV SZWORD; LXTOKEN:=TKDENOT; LXDENRP:=1; LXDENMD:=MDINT END;
40960  ()+84*)
40970      END;
40980  (**)
40990  ()+83*)
