598 lines
26 KiB
OpenEdge ABL
598 lines
26 KiB
OpenEdge ABL
42000 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
|
42010 (**)
|
|
42020 (**)
|
|
42030 (*+85()
|
|
42040 (**)
|
|
42050 PROCEDURE STANDARDPRELUDE;
|
|
42060 FUNCTION DEFPRC0(YIELD: MODE; CP: CODEPROC): MODE;
|
|
42070 BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
|
|
42080 FINDPRC(YIELD,0,CP); DEFPRC0 := SRSTK[SRSEMP].MD
|
|
42090 END;
|
|
42100 FUNCTION DEFPRC1(P1, YIELD: MODE; CP: CODEPROC): MODE;
|
|
42110 BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
|
|
42120 SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P1;
|
|
42130 FINDPRC(YIELD,1,CP); DEFPRC1 := SRSTK[SRSEMP].MD
|
|
42140 END;
|
|
42150 FUNCTION DEFPRC2(P1, P2, YIELD: MODE; CP: CODEPROC): MODE;
|
|
42160 BEGIN SRSEMP := -1; SRSUBP := 0; SUBSAVE;
|
|
42170 SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P1;
|
|
42180 SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := P2;
|
|
42190 FINDPRC(YIELD,2,CP); DEFPRC2 := SRSTK[SRSEMP].MD
|
|
42200 END;
|
|
42210 PROCEDURE INTAB(VAR LEX: PLEX; TAG: ALFA; LXVV: LXM);
|
|
42220 VAR I: INTEGER;
|
|
42230 BEGIN WITH CURRENTLEX DO
|
|
42240 BEGIN
|
|
42250 LXV := LXVV; LXTOKEN := TKBOLD;
|
|
42260 (*+11() S10:=TAG; LXCOUNT:=1; ()+11*)
|
|
42270 (*-11() STASHLEX(TAG); ()-11*)
|
|
42280 END;
|
|
42290 LEX := HASHIN
|
|
42300 END;
|
|
42310 FUNCTION DEFTAG(TAG: ALFA): PLEX;
|
|
42320 VAR I: INTEGER;
|
|
42330 BEGIN WITH CURRENTLEX DO
|
|
42340 BEGIN
|
|
42350 LXV := LXVTAG; LXTOKEN := TKTAG;
|
|
42360 (*+11() S10:=TAG; LXCOUNT:=1; ()+11*)
|
|
42370 (*-11() STASHLEX(TAG); ()-11*)
|
|
42380 END;
|
|
42390 DEFTAG := HASHIN
|
|
42400 END;
|
|
42410 FUNCTION DEFLTAG(TAG1, TAG2: ALFA): PLEX;
|
|
42420 VAR I: INTEGER;
|
|
42430 BEGIN WITH CURRENTLEX DO
|
|
42440 BEGIN
|
|
42450 LXV := LXVTAG; LXTOKEN := TKTAG;
|
|
42460 (*+11() S20 := TAG2; S10 := TAG1; LXCOUNT := 2; ()+11*)
|
|
42470 (*-11() STASHLLEX(TAG1, TAG2); ()-11*)
|
|
42480 DEFLTAG := HASHIN
|
|
42490 END
|
|
42500 END;
|
|
42510 FUNCTION GETSTB(LEX: PLEX; DEF: DEFTYP; BLK: BLKTYP): PSTB;
|
|
42520 (*FUNCTION: CREATE A NEW STBLOCK FOR LEX*)
|
|
42530 VAR STB: PSTB;
|
|
42540 BEGIN
|
|
42550 NEW(STB); WITH STB^, LEX^.LXV DO
|
|
42560 BEGIN
|
|
42570 STLINK := LXPSTB; LXPSTB := STB;
|
|
42580 STLEX := LEX;
|
|
42590 STTHREAD := DCIL; DCIL := STB;
|
|
42600 STDEFTYP := DEF; STBLKTYP := BLK;
|
|
42610 STRANGE := 0;
|
|
42620 STLEVEL := 0; STLOCRG := 0;
|
|
42630 GETSTB := STB
|
|
42640 END
|
|
42650 END;
|
|
42660 (**)
|
|
42670 (**)
|
|
42680 PROCEDURE INITSTDIDS;
|
|
42690 (*CREATE STBLOCKS FOR STANDARD-PRELUDE IDENTIFIERS*)
|
|
42700 VAR PRCRR,PRCON, REFFILE: MODE;
|
|
42710 PROCEDURE DEFSTID(MD: MODE; LX: PLEX);
|
|
42720 VAR STB: PSTB; THIS:MODE; LENGTH:INTEGER;
|
|
42722 (*+05() LEX: PLEX; I: INTEGER; ()+05*)
|
|
42730 BEGIN STB := GETSTB(LX, [STVAR], STBDEFID);
|
|
42740 WITH STB^ DO
|
|
42750 BEGIN STMODE := MD;
|
|
42760 IF NOT(STMODE^.MDV.MDID IN [MDIDCHAN,MDIDPASC]) THEN
|
|
42762 BEGIN
|
|
42764 THIS:=MD;
|
|
42766 IF THIS^.MDV.MDID=MDIDREF THEN THIS:=THIS^.MDPRRMD;
|
|
42767 IF THIS^.MDV.MDPILE THEN LENGTH:=SZADDR
|
|
42768 ELSE LENGTH:=THIS^.MDV.MDLEN;
|
|
42770 (*-41() STOFFSET := CURID; CURID := CURID+LENGTH ()-41*)
|
|
42780 (*+41() CURID := CURID+LENGTH; STOFFSET := CURID ()+41*)
|
|
42782 IF MD^.MDV.MDID<>MDIDREF THEN STDEFTYP := [STINIT];
|
|
42785 END
|
|
42790 ELSE
|
|
42800 (*-05() BEGIN STVALUE := LX; STDEFTYP := [STCONST] END; ()-05*)
|
|
42801 (*+05() BEGIN
|
|
42802 ENEW(LEX, LEX1SIZE + LX^.LXCOUNT*SZWORD);
|
|
42803 FOR I := 1 TO LEX1SIZE DIV SZWORD + LX^.LXCOUNT DO
|
|
42804 LEX^.LEXWORDS[I] := LX^.LEXWORDS[I];
|
|
42805 STVALUE := LEX;
|
|
42806 STDEFTYP := [STCONST];
|
|
42807 END;
|
|
42808 ()+05*)
|
|
42810 END
|
|
42820 END;
|
|
42830 PROCEDURE DEFSTID1(TAG: ALFA; MD: MODE);
|
|
42840 BEGIN DEFSTID(MD, DEFTAG(TAG)) END;
|
|
42850 PROCEDURE DEFSTID2(TAG1, TAG2: ALFA; MD: MODE);
|
|
42860 BEGIN DEFSTID(MD, DEFLTAG(TAG1, TAG2)) END;
|
|
42870 PROCEDURE DEFCONST(TAG: ALFA; MD: MODE; VALUE: A68INT);
|
|
42880 VAR STB: PSTB;
|
|
42890 LX: PLEX;
|
|
42900 BEGIN STB := GETSTB(DEFTAG(TAG), [STCONST], STBDEFID);
|
|
42910 WITH STB^ DO
|
|
42920 BEGIN
|
|
42930 STMODE := MD;
|
|
42940 ENEW(LX, SZADDR+SZINT+LEX1SIZE); WITH LX^ DO
|
|
42950 BEGIN LXV := LXVPRDEN; LXCOUNT := (SZADDR+SZINT) DIV SZWORD;
|
|
42960 LXTOKEN := TKDENOT; LXDENRP := VALUE; LXDENMD := MD END;
|
|
42970 STVALUE := LX
|
|
42980 END
|
|
42990 END;
|
|
43000 PROCEDURE DEFREAL(TAG:ALFA;MD:MODE;VALUE1(*-01(), VALUE2(*+03(), VALUE3()+03*)()-01*): INTEGER);
|
|
43010 VAR STB:PSTB;
|
|
43020 LX:PLEX;
|
|
43021 TEMP: RECORD CASE SEVERAL OF
|
|
43022 1: (REA: REAL);
|
|
43023 2: (INT1: INTEGER;
|
|
43024 (*-01() INT2: INTEGER;
|
|
43025 (*+03() INT3: INTEGER; ()+03*)
|
|
43026 ()-01*) ) ;
|
|
43027 3,4,5,6,7,8,9,10: ();
|
|
43028 END;
|
|
43030 BEGIN
|
|
43040 STB:=GETSTB(DEFTAG(TAG),[STCONST],STBDEFID);
|
|
43050 WITH STB^ DO
|
|
43060 BEGIN
|
|
43070 STMODE:=MD;
|
|
43080 ENEW(LX,SZADDR+SZREAL+LEX1SIZE);
|
|
43090 WITH LX^ DO
|
|
43100 BEGIN
|
|
43110 LXV:=LXVPRDEN; LXCOUNT:=(SZADDR+SZREAL) DIV SZWORD; LXTOKEN:=TKDENOT;
|
|
43112 TEMP.INT1 := VALUE1;
|
|
43114 (*-01() TEMP.INT2 := VALUE2;
|
|
43116 (*+03() TEMP.INT3 := VALUE3; ()+03*)
|
|
43118 ()-01*)
|
|
43120 LXDENRPREAL := TEMP.REA; LXDENMD:=MD
|
|
43130 END;
|
|
43140 STVALUE:=LX
|
|
43150 END
|
|
43160 END;
|
|
43170 BEGIN
|
|
43180 (**)
|
|
43190 DEFCONST('MAXINT ', MDINT, MAXINT);
|
|
43200 (*+01()
|
|
43210 DEFREAL('MAXREAL ', MDREAL, 37767777777777777777B);
|
|
43220 DEFREAL('SMALLREAL ', MDREAL, 16414000000000000000B);
|
|
43222 DEFREAL('PI ', MDREAL, 17216220773250420551B);
|
|
43230 ()+01*)
|
|
43240 (*+05()
|
|
43250 DEFREAL('MAXREAL ', MDREAL, 2147483647, -1);
|
|
43260 DEFREAL('SMALLREAL ', MDREAL, 1017118720, 0);
|
|
43270 DEFREAL('PI ', MDREAL, 1074340347, 1413754136);
|
|
43280 ()+05*)
|
|
43290 DEFCONST('MAXABSCHAR', MDINT, MAXABSCHAR);
|
|
43300 DEFSTID1('BITSPACK ', DEFPRC1(FINDROW(MDBOOL,1),MDBITS, PASC));
|
|
43310 DEFSTID1('BYTESPACK ', DEFPRC1(MDSTRNG,MDBYTES, PASC));
|
|
43407 PRCRR := DEFPRC1(MDREAL,MDREAL, PASC);
|
|
43410 DEFSTID1('SQRT ', PRCRR);
|
|
43420 DEFSTID1('EXP ', PRCRR);
|
|
43430 DEFSTID1('LN ', PRCRR);
|
|
43440 DEFSTID1('COS ', PRCRR);
|
|
43450 DEFSTID1('ARCCOS ', PRCRR);
|
|
43460 DEFSTID1('SIN ', PRCRR);
|
|
43470 DEFSTID1('ARCSIN ', PRCRR);
|
|
43480 DEFSTID1('TAN ', PRCRR);
|
|
43490 DEFSTID1('ARCTAN ', PRCRR);
|
|
43500 DEFSTID1('NEXTRANDOM', DEFPRC1(FINDREF(MDINT),MDREAL, PASC));
|
|
43510 DEFSTID2('STANDINCHA','NNEL ', MDCHAN);
|
|
43520 DEFSTID2('STANDOUTCH','ANNEL ', MDCHAN);
|
|
43530 DEFSTID2('STANDBACKC','HANNEL ', MDCHAN);
|
|
43540 REFFILE := FINDREF(MDFILE);
|
|
43550 DEFSTID1('CHAN ', DEFPRC1(REFFILE,MDCHAN, PASC));
|
|
43560 DEFSTID1('MAKETERM ', DEFPRC2(REFFILE,MDSTRNG,MDVOID, PASC));
|
|
43570 PRCON := DEFPRC2(REFFILE,DEFPRC1(REFFILE,MDBOOL,PROC),MDVOID,PASC);
|
|
43580 DEFSTID2('ONLOGICALF','ILEEND ', PRCON);
|
|
43590 DEFSTID2('ONPHYSICAL','FILEEND ', PRCON);
|
|
43600 DEFSTID1('ONPAGEEND ', PRCON);
|
|
43610 DEFSTID1('ONLINEEND ', PRCON);
|
|
43620 SRSEMP := -1; SRSUBP := 0; SUBSAVE; SRSEMP := SRSEMP+6;
|
|
43630 SRSTK[SRSEMP-5].MD := REFFILE; SRSTK[SRSEMP-4].MD := MDSTRNG;
|
|
43640 SRSTK[SRSEMP-3].MD := MDCHAN; SRSTK[SRSEMP-2].MD := MDINT;
|
|
43650 SRSTK[SRSEMP-1].MD := MDINT; SRSTK[SRSEMP].MD := MDINT;
|
|
43660 FINDPRC(MDINT,6,PASC);
|
|
43670 DEFSTID1('ESTABLISH ', SRSTK[SRSEMP].MD);
|
|
43680 SRSEMP := -1; SRSUBP := 0; SUBSAVE; SRSEMP := SRSEMP+3;
|
|
43690 SRSTK[SRSEMP-2].MD := REFFILE; SRSTK[SRSEMP-1].MD := MDSTRNG;
|
|
43700 SRSTK[SRSEMP].MD := MDCHAN;
|
|
43710 FINDPRC(MDINT,3,PASC);
|
|
43720 DEFSTID1('OPEN ', SRSTK[SRSEMP].MD);
|
|
43730 DEFSTID1('ASSOCIATE ', DEFPRC2(REFFILE,FINDREF(FINDROW(MDCHAR,1)),MDVOID, PASC));
|
|
43740 DEFSTID1('CLOSE ', PASCVF);
|
|
43750 DEFSTID1('CHARNUMBER', DEFPRC1(REFFILE,MDINT, PASC));
|
|
43760 DEFSTID1('LINENUMBER', DEFPRC1(REFFILE,MDINT, PASC));
|
|
43770 DEFSTID1('PAGENUMBER', DEFPRC1(REFFILE,MDINT, PASC));
|
|
43780 DEFSTID1('SPACE ', PASCVF);
|
|
43790 DEFSTID1('NEWLINE ', PASCVF);
|
|
43800 DEFSTID1('NEWPAGE ', PASCVF);
|
|
43810 SRSEMP := -1; SRSUBP := 0; SUBSAVE; SRSEMP := SRSEMP+4;
|
|
43820 SRSTK[SRSEMP-3].MD := REFFILE; SRSTK[SRSEMP-2].MD := MDINT;
|
|
43830 SRSTK[SRSEMP-1].MD := MDINT; SRSTK[SRSEMP].MD := MDINT;
|
|
43840 FINDPRC(MDVOID,4,PASC);
|
|
43850 DEFSTID1('SET ', SRSTK[SRSEMP].MD);
|
|
43860 DEFSTID1('RESET ', PASCVF);
|
|
43870 DEFSTID1('WHOLE ', DEFPRC2(MDNUMBER,MDINT,MDSTRNG, PASC));
|
|
43880 SRSEMP := -1; SRSUBP := 0; SUBSAVE; SRSEMP := SRSEMP+3;
|
|
43890 SRSTK[SRSEMP-2].MD := MDNUMBER; SRSTK[SRSEMP-1].MD := MDINT;
|
|
43900 SRSTK[SRSEMP].MD := MDINT;
|
|
43910 FINDPRC(MDSTRNG,3,PASC);
|
|
43920 DEFSTID1('FIXED ', SRSTK[SRSEMP].MD);
|
|
43930 SRSEMP := -1; SRSUBP := 0; SUBSAVE; SRSEMP := SRSEMP+4;
|
|
43940 SRSTK[SRSEMP-3].MD := MDNUMBER; SRSTK[SRSEMP-2].MD := MDINT;
|
|
43950 SRSTK[SRSEMP-1].MD := MDINT; SRSTK[SRSEMP].MD := MDINT;
|
|
43960 FINDPRC(MDSTRNG,4,PASC);
|
|
43970 DEFSTID1('FLOAT ', SRSTK[SRSEMP].MD);
|
|
43980 DEFSTID1('PUT ', DEFPRC2(REFFILE,FINDROW(MDOUT,1),MDVOID, PASC));
|
|
43990 DEFSTID1('GET ', DEFPRC2(REFFILE,FINDROW(MDIN,1),MDVOID, PASC));
|
|
44000 DEFSTID1('PUTBIN ', DEFPRC2(REFFILE,FINDROW(MDOUTB,1),MDVOID, PASC));
|
|
44010 DEFSTID1('GETBIN ', DEFPRC2(REFFILE,FINDROW(MDINB,1),MDVOID, PASC));
|
|
44020 DEFSTID1('LASTRANDOM', FINDREF(MDINT));
|
|
44030 DEFSTID1('RANDOM ', DEFPRC0(MDREAL, PASC));
|
|
44040 DEFSTID1('STANDIN ', REFFILE);
|
|
44050 DEFSTID1('STANDOUT ', REFFILE);
|
|
44060 DEFSTID1('STANDBACK ', REFFILE);
|
|
44070 DEFSTID1('PRINT ', DEFPRC1(FINDROW(MDOUT,1),MDVOID, PASC));
|
|
44080 DEFSTID1('WRITE ', DEFPRC1(FINDROW(MDOUT,1),MDVOID, PASC));
|
|
44090 DEFSTID1('READ ', DEFPRC1(FINDROW(MDIN,1),MDVOID, PASC));
|
|
44100 DEFSTID1('WRITEBIN ', DEFPRC1(FINDROW(MDOUTB,1),MDVOID, PASC));
|
|
44110 DEFSTID1('READBIN ', DEFPRC1(FINDROW(MDINB,1),MDVOID,PASC));
|
|
44120 LEXLSTOP := DEFTAG('STOP ');
|
|
44121 (*-01() (*-05()
|
|
44122 DEFSTID1('MAXREAL ', MDREAL);
|
|
44124 DEFSTID1('SMALLREAL ', MDREAL);
|
|
44126 DEFSTID1('PI ', MDREAL);
|
|
44128 ()-05*) ()-01*)
|
|
44130 (*+54()
|
|
44140 DEFSTID1('ONERROR ', DEFPRC1(DEFPRC1(MDEXC,MDVOID,PROC),MDVOID,PASC));
|
|
44150 DEFSTID2('MAKEXCEPTI','ON ', DEFPRC1(MDINT,MDEXC,PASC));
|
|
44160 DEFSTID1('ERROR ', DEFPRC1(MDINT,MDVOID,PASC));
|
|
44170 DEFSTID1('OFFERROR ', DEFPRC0(MDVOID,PASC));
|
|
44180 ()+54*)
|
|
44190 (**)
|
|
44200 (**)
|
|
44210 (**)
|
|
44220 END;
|
|
44230 (**)
|
|
44240 (**)
|
|
44250 PROCEDURE INITOPS;
|
|
44260 VAR OBABS, OBAND, OBARG, OBBIN, OBCONJ, OBDIV, OBDVAB, OBELEM, OBENTI, OBEQ,
|
|
44270 OBGE, OBGT, OBLE, OBLENG, OBLT, OBLWB, OBMDAB, OBMNAB, OBMINUS, OBMOD, OBNE, OBNOT,
|
|
44280 OBODD, OBOR, OBOVAB, OBOVER, OBPLAB, OBPLTO, OBPLITM, OBPLUS, OBREPR, OBROUN, OBSHL,
|
|
44290 OBSHR, OBSHRT, OBSIGN, OBTIMES, OBTMAB, OBUP, OBUPB, OBRE, OBIM: INTEGER;
|
|
44300 CURROB, THISOB, PREVOB: INTEGER;
|
|
44310 PROCEDURE NOB(VAR OB: INTEGER);
|
|
44320 BEGIN OB := CURROB; THISOB := OB END;
|
|
44330 PROCEDURE OPTAB(IDNDX: OPIDNDXTYP; OPCOD: POP; MIN,MAX: XTYPE; RESMD: MODE);
|
|
44340 BEGIN
|
|
44350 IF THISOB=PREVOB THEN OPTABL[CURROB-1].OPMORE := TRUE;
|
|
44360 PREVOB := THISOB;
|
|
44370 WITH OPTABL[CURROB] DO
|
|
44380 BEGIN OPIDNDX := IDNDX; OPOPCOD := OPCOD; OPMIN := MIN; OPMAX := MAX;
|
|
44390 OPMODE := RESMD; OPMORE := FALSE END;
|
|
44400 CURROB := CURROB+1
|
|
44410 END;
|
|
44420 PROCEDURE DEFSTOP(LX: PLEX; PRIO: INTEGER; OB: INTEGER);
|
|
44430 VAR STB: PSTB;
|
|
44440 BEGIN STB := GETSTB(LX, [], STBDEFPRIO); WITH STB^ DO
|
|
44450 BEGIN STDYPRIO := PRIO; STUSERLEX := NIL; STSTDOP := OB END
|
|
44460 END;
|
|
44470 PROCEDURE DEFSTOP1(TAB: ALFA; PRIO: INTEGER; OB: INTEGER);
|
|
44480 VAR LX: PLEX;
|
|
44490 BEGIN INTAB(LX, TAB, LXVOPR); DEFSTOP(LX, PRIO, OB) END;
|
|
44500 PROCEDURE DEFSTOP2(PUNCT: ALFA; PRIO: INTEGER; OB: INTEGER);
|
|
44510 VAR S, I: INTEGER;
|
|
44520 CHA: CHAR;
|
|
44530 LEX: PLEX;
|
|
44540 PROCEDURE NEXTCH; BEGIN CHA := PUNCT[I]; I := I+1 END;
|
|
44550 BEGIN
|
|
44560 I := 1; NEXTCH;
|
|
44570 (*+01() IF CHA=':' THEN S := ORD('$')-ORD('+') ELSE S := ORD(CHA)-ORD('+'); ()+01*)
|
|
44580 (*+25() IF CHA=':' THEN S := ORD('$')-ORD('+') ELSE S := ORD(CHA)-ORD('+'); ()+25*)
|
|
44590 (*-01() (*-25() S := ORD(CHA)-ORD('!'); (*ASCII VERSION*)
|
|
44592 IF CHA='%' THEN S := 23
|
|
44600 ELSE IF CHA IN ['[', ']', '^','\'] THEN S := S-55; ()-25*) ()-01*)
|
|
44610 NEXTCH;
|
|
44620 WITH OPCHTABLE[S] DO
|
|
44630 BEGIN
|
|
44640 LEX := OTLEX;
|
|
44650 S := OTNEXT
|
|
44660 END;
|
|
44670 WHILE S<>0 DO
|
|
44680 WITH OPCHTABLE[S] DO
|
|
44690 IF CHA=OTCHAR THEN
|
|
44700 BEGIN
|
|
44710 NEXTCH;
|
|
44720 LEX := OTLEX;
|
|
44730 S := OTNEXT
|
|
44740 END
|
|
44750 ELSE S := OTALT;
|
|
44760 DEFSTOP(LEX, PRIO, OB)
|
|
44770 END;
|
|
44780 BEGIN
|
|
44790 CURROB := 1; PREVOB := 0;
|
|
44800 (**)
|
|
44810 NOB(OBABS);
|
|
44820 OPTAB(IDMON , PABSI , XINT,XLREAL , MDABSENT);
|
|
44830 OPTAB(IDMONL, PABSI-4 , XCOMPL,XLCOMPL, MDREAL);
|
|
44840 OPTAB(IDMON , PABSB , XBOOL,XBITS , MDINT);
|
|
44850 OPTAB(IDMON , PABSCH , XCHAR,XCHAR , MDINT);
|
|
44860 NOB(OBAND);
|
|
44870 OPTAB(IDBB , PANDB , XBOOL,XBITS , MDABSENT);
|
|
44880 NOB(OBARG);
|
|
44890 OPTAB(IDMONL, PARG , XCOMPL,XLCOMPL, MDREAL);
|
|
44900 NOB(OBBIN);
|
|
44910 OPTAB(IDMON , PBIN , XINT,XINT , MDBITS);
|
|
44920 NOB(OBCONJ);
|
|
44930 OPTAB(IDMON , PCONJ , XCOMPL,XLCOMPL, MDABSENT);
|
|
44940 NOB(OBDIV);
|
|
44950 OPTAB(IDAAL , PDIV , XINT,XLINT , MDREAL);
|
|
44960 OPTAB(IDAA , PDIV , XINT,XLCOMPL , MDABSENT);
|
|
44970 NOB(OBDVAB);
|
|
44980 OPTAB(IDRA , PDIVAB , XREAL,XLCOMPL , MDABSENT);
|
|
44990 NOB(OBELEM);
|
|
45000 OPTAB(IDIB , PELMBT , XBITS,XBITS , MDBOOL);
|
|
45010 OPTAB(IDIB , PELMBY , XBYTES,XBYTES , MDCHAR);
|
|
45020 NOB(OBENTI);
|
|
45030 OPTAB(IDMONL, PENTI , XREAL,XLREAL , MDINT);
|
|
45040 NOB(OBEQ);
|
|
45050 OPTAB(IDAA , PEQ , XINT,XLCOMPL , MDBOOL);
|
|
45060 OPTAB(IDAA , PEQCS , XCHAR,XSTRNG , MDBOOL);
|
|
45070 OPTAB(IDBB , PEQB , XBOOL,XBYTES , MDBOOL);
|
|
45080 NOB(OBGE);
|
|
45090 OPTAB(IDAA , PGE , XINT,XLREAL , MDBOOL);
|
|
45100 OPTAB(IDAA , PGECS , XCHAR,XSTRNG , MDBOOL);
|
|
45110 OPTAB(IDBB , PGEBT , XBITS,XBYTES , MDBOOL);
|
|
45120 NOB(OBGT);
|
|
45130 OPTAB(IDAA , PGT , XINT,XLREAL , MDBOOL);
|
|
45140 OPTAB(IDAA , PGTCS , XCHAR,XSTRNG , MDBOOL);
|
|
45150 OPTAB(IDBB , PGTBY , XBYTES,XBYTES , MDBOOL);
|
|
45160 NOB(OBIM);
|
|
45170 OPTAB(IDMONL, PIM , XCOMPL,XLCOMPL,MDREAL);
|
|
45180 NOB(OBLE);
|
|
45190 OPTAB(IDAA , PLE , XINT,XLREAL , MDBOOL);
|
|
45200 OPTAB(IDAA , PLECS , XCHAR,XSTRNG , MDBOOL);
|
|
45210 OPTAB(IDBB , PLEBT , XBITS,XBYTES , MDBOOL);
|
|
45220 (*+61()
|
|
45230 NOB(OBLENG);
|
|
45240 OPTAB(IDMON , PLENGI , XINT,XINT , MDLINT);
|
|
45250 OPTAB(IDMON , PLENGR , XREAL,XREAL , MDLREAL);
|
|
45260 OPTAB(IDMON , PLENGC , XCOMPL,XCOMPL , MDLCOMPL);
|
|
45270 ()+61*)
|
|
45280 NOB(OBLT);
|
|
45290 OPTAB(IDAA , PLT , XINT,XLREAL , MDBOOL);
|
|
45300 OPTAB(IDAA , PLTCS , XCHAR,XSTRNG , MDBOOL);
|
|
45310 OPTAB(IDBB , PLTBY , XBYTES,XBYTES , MDBOOL);
|
|
45320 NOB(OBLWB);
|
|
45330 OPTAB(IDIBRM, PLWBM , -1,-1 , MDINT);
|
|
45340 OPTAB(IDIBR , PLWB , XINT,XINT , MDINT);
|
|
45350 OPTAB(IDMON , PLWBMSTR, XSTRNG,XSTRNG, MDINT);
|
|
45360 NOB(OBMDAB);
|
|
45370 OPTAB(IDRA , PMODAB , XINT,XLINT , MDABSENT);
|
|
45380 NOB(OBMNAB);
|
|
45390 OPTAB(IDRA , PMINUSAB, XINT,XLCOMPL , MDABSENT);
|
|
45400 NOB(OBMINUS);
|
|
45410 OPTAB(IDAA , PSUB , XINT,XLCOMPL , MDABSENT);
|
|
45420 OPTAB(IDMON , PNEGI , XINT,XLCOMPL , MDABSENT);
|
|
45430 NOB(OBMOD);
|
|
45440 OPTAB(IDAAL , PMOD , XINT,XLINT , MDINT);
|
|
45450 NOB(OBNE);
|
|
45460 OPTAB(IDAA , PNE , XINT,XLCOMPL , MDBOOL);
|
|
45470 OPTAB(IDAA , PNECS , XCHAR,XSTRNG , MDBOOL);
|
|
45480 OPTAB(IDBB , PNEB , XBOOL,XBYTES , MDBOOL);
|
|
45490 NOB(OBNOT);
|
|
45500 OPTAB(IDMON , PNOTB , XBOOL,XBITS , MDABSENT);
|
|
45510 NOB(OBODD);
|
|
45520 OPTAB(IDMON , PODD , XINT,XLINT , MDBOOL);
|
|
45530 NOB(OBOR);
|
|
45540 OPTAB(IDBB , PORB , XBOOL,XBITS , MDABSENT);
|
|
45550 NOB(OBOVAB);
|
|
45560 OPTAB(IDRA , POVERAB , XINT,XLINT , MDABSENT);
|
|
45570 NOB(OBOVER);
|
|
45580 OPTAB(IDAAL , POVER , XINT,XLINT , MDINT);
|
|
45590 NOB(OBPLAB);
|
|
45600 OPTAB(IDRA , PPLSAB , XINT,XLCOMPL , MDABSENT);
|
|
45610 OPTAB(IDSC , PPLSABS,XCHAR,XSTRNG, REFSTRNG);
|
|
45620 NOB(OBPLITM);
|
|
45630 OPTAB(IDAAL , PPLITM+2, XINT,XLREAL , MDCOMPL);
|
|
45640 (*BECAUSE THERE ARE NO POPS FOR XINT AND XLINT*)
|
|
45650 NOB(OBPLTO);
|
|
45660 OPTAB(IDCS , PPLSTOCS,XCHAR,XSTRNG, REFSTRNG);
|
|
45670 NOB(OBPLUS);
|
|
45680 OPTAB(IDAA , PADD , XINT,XLCOMPL , MDABSENT);
|
|
45690 OPTAB(IDAA , PCAT , XCHAR,XSTRNG, MDSTRNG);
|
|
45700 OPTAB(IDMON , PNOOP , XINT,XLCOMPL , MDABSENT);
|
|
45710 NOB(OBRE);
|
|
45720 OPTAB(IDMONL, PRE , XCOMPL,XLCOMPL,MDREAL);
|
|
45730 NOB(OBREPR);
|
|
45740 OPTAB(IDMON , PREPR , XINT,XINT , MDCHAR);
|
|
45750 NOB(OBROUN);
|
|
45760 OPTAB(IDMONL, PROUN , XREAL,XLREAL , MDINT);
|
|
45770 NOB(OBSHL);
|
|
45780 OPTAB(IDBI , PSHL , XBITS,XBITS , MDABSENT);
|
|
45790 NOB(OBSHR);
|
|
45800 OPTAB(IDBI , PSHR , XBITS,XBITS , MDABSENT);
|
|
45810 (*+61()
|
|
45820 NOB(OBSHRT);
|
|
45830 OPTAB(IDMON , PSHRTI , XLINT,XLINT , MDINT);
|
|
45840 OPTAB(IDMON , PSHRTR , XLREAL,XLREAL, MDREAL);
|
|
45850 OPTAB(IDMON , PSHRTC , XLCOMPL,XLCOMPL, MDCOMPL);
|
|
45860 ()+61*)
|
|
45870 NOB(OBSIGN);
|
|
45880 OPTAB(IDMON , PSGNI , XINT,XLREAL , MDINT);
|
|
45890 NOB(OBTIMES);
|
|
45900 OPTAB(IDAA , PMUL , XINT,XLCOMPL , MDABSENT);
|
|
45910 OPTAB(IDIB , PMULIC , XCHAR,XSTRNG, MDSTRNG);
|
|
45920 OPTAB(IDBI , PMULCI , XCHAR,XSTRNG, MDSTRNG);
|
|
45930 NOB(OBTMAB);
|
|
45940 OPTAB(IDRA , PTIMSAB, XINT,XLCOMPL , MDABSENT);
|
|
45950 OPTAB(IDSI , PTIMSABS,XSTRNG,XSTRNG,REFSTRNG);
|
|
45960 NOB(OBUP);
|
|
45970 OPTAB(IDBI , PEXP , XINT,XLCOMPL , MDABSENT);
|
|
45980 NOB(OBUPB);
|
|
45990 OPTAB(IDIBRM, PUPBM , -1,-1 , MDINT);
|
|
46000 OPTAB(IDIBR , PUPB , XINT,XINT , MDINT);
|
|
46010 OPTAB(IDMON , PUPBMSTR, XSTRNG,XSTRNG, MDINT);
|
|
46020 DEFSTOP1('ABS ',10, OBABS);
|
|
46030 DEFSTOP1('ARG ',10, OBARG);
|
|
46040 DEFSTOP1('BIN ',10, OBBIN);
|
|
46050 DEFSTOP1('CONJ ',10, OBCONJ);
|
|
46060 DEFSTOP1('ENTIER ',10, OBENTI);
|
|
46070 (*+61()
|
|
46080 DEFSTOP1('LENG ',10, OBLENG);
|
|
46090 ()+61*)
|
|
46100 DEFSTOP1('NOT ',10, OBNOT);
|
|
46110 DEFSTOP1('ODD ',10, OBODD);
|
|
46120 DEFSTOP1('REPR ',10, OBREPR);
|
|
46130 DEFSTOP1('ROUND ',10, OBROUN);
|
|
46140 (*+61()
|
|
46150 DEFSTOP1('SHORTEN ',10, OBSHRT);
|
|
46160 ()+61*)
|
|
46170 DEFSTOP1('SIGN ',10, OBSIGN);
|
|
46180 DEFSTOP1('RE ',10, OBRE);
|
|
46190 DEFSTOP1('IM ',10, OBIM);
|
|
46200 DEFSTOP1('DIVAB ', 1, OBDVAB);
|
|
46210 DEFSTOP2('/:= ', 1, OBDVAB);
|
|
46220 DEFSTOP1('MINUSAB ', 1, OBMNAB);
|
|
46230 DEFSTOP2('-:= ', 1, OBMNAB);
|
|
46240 DEFSTOP1('MODAB ', 1, OBMDAB);
|
|
46250 DEFSTOP2('%*:= ', 1, OBMDAB);
|
|
46260 DEFSTOP1('OVERAB ', 1, OBOVAB);
|
|
46270 DEFSTOP2('%:= ', 1, OBOVAB);
|
|
46280 DEFSTOP1('PLUSAB ', 1, OBPLAB);
|
|
46290 DEFSTOP2('+:= ', 1, OBPLAB);
|
|
46300 DEFSTOP1('PLUSTO ', 1, OBPLTO);
|
|
46310 DEFSTOP2('+=: ', 1, OBPLTO);
|
|
46320 DEFSTOP1('TIMESAB ', 1, OBTMAB);
|
|
46330 DEFSTOP2('*:= ', 1, OBTMAB);
|
|
46340 DEFSTOP1('OR ', 2, OBOR);
|
|
46350 DEFSTOP1('AND ', 3, OBAND);
|
|
46360 DEFSTOP1('EQ ', 4, OBEQ);
|
|
46370 DEFSTOP2('= ', 4, OBEQ);
|
|
46380 DEFSTOP1('NE ', 4, OBNE);
|
|
46390 DEFSTOP2('/= ', 4, OBNE);
|
|
46400 DEFSTOP1('GE ', 5, OBGE);
|
|
46410 DEFSTOP2('>= ', 5, OBGE);
|
|
46420 DEFSTOP1('GT ', 5, OBGT);
|
|
46430 DEFSTOP2('> ', 5, OBGT);
|
|
46440 DEFSTOP1('LE ', 5, OBLE);
|
|
46450 DEFSTOP2('<= ', 5, OBLE);
|
|
46460 DEFSTOP1('LT ', 5, OBLT);
|
|
46470 DEFSTOP2('< ', 5, OBLT);
|
|
46480 DEFSTOP2('+ ', 6, OBPLUS);
|
|
46490 DEFSTOP2('- ', 6, OBMINUS);
|
|
46500 DEFSTOP1('ELEM ', 7, OBELEM);
|
|
46510 DEFSTOP2('* ', 7, OBTIMES);
|
|
46520 DEFSTOP2('/ ', 7, OBDIV);
|
|
46530 DEFSTOP1('MOD ', 7, OBMOD);
|
|
46540 DEFSTOP2('%* ', 7, OBMOD);
|
|
46550 DEFSTOP1('OVER ', 7, OBOVER);
|
|
46560 DEFSTOP2('% ', 7, OBOVER);
|
|
46570 (*-51()
|
|
46580 DEFSTOP2('^ ', 8, OBUP);
|
|
46590 ()-51*)
|
|
46600 (*+51()
|
|
46610 DEFSTOP2(''' ', 8, OBUP);
|
|
46620 ()+51*)
|
|
46630 DEFSTOP2('** ', 8, OBUP);
|
|
46640 DEFSTOP1('LWB ', 8, OBLWB);
|
|
46650 DEFSTOP1('UPB ', 8, OBUPB);
|
|
46660 DEFSTOP1('SHL ', 8, OBSHL);
|
|
46670 DEFSTOP1('SHR ', 8, OBSHR);
|
|
46680 DEFSTOP1('I ', 9, OBPLITM);
|
|
46690 DEFSTOP2('+* ', 9, OBPLITM);
|
|
46700 END;
|
|
46710 BEGIN (*STANDARDPRELUDE*)
|
|
46720 DCIL := NIL; SRSUBP := 0; SRSEMP := -1;
|
|
46730 CURID := SIZIBBASE+SIZLEBBASE;
|
|
46740 INITSTDIDS;
|
|
46750 INITOPS;
|
|
46760 NEW(MONADUMMY); WITH MONADUMMY^ DO
|
|
46770 BEGIN STLINK := NIL; STLEX := NIL; STTHREAD := NIL; STDEFTYP := [STINIT]; STBLKTYP := STBDEFOP;
|
|
46780 STRANGE := 0; STOFFSET := 0; STLEVEL := 0; STLOCRG := 0;
|
|
46790 STMODE := DEFPRC1(MDERROR, MDERROR, PROC) END;
|
|
46800 NEW(DYADUMMY); DYADUMMY^ := MONADUMMY^; DYADUMMY^.STMODE := DEFPRC2(MDERROR, MDERROR, MDERROR, PROC);
|
|
46810 END;
|
|
46820 (**)
|
|
46830 ()+85*)
|
|
46840 (**)
|
|
46850 (*+01()
|
|
46860 PROCEDURE INITBEGIN;
|
|
46870 (*FILLS XSEG.BUFFER WITH WORDS TO BE OUTPUT BY EMITBEG*)
|
|
46880 VAR COUNT: INTEGER;
|
|
46890 PROCEDURE INTWD(INT: INTEGER);
|
|
46900 BEGIN
|
|
46910 XSEG.BUFFER[COUNT].CODEWORD := INT;
|
|
46920 COUNT := COUNT+1
|
|
46930 END;
|
|
46940 PROCEDURE ALFWD(ALF: ALFA);
|
|
46950 VAR X: RECORD CASE INTEGER OF
|
|
46960 1: (I: INTEGER);
|
|
46970 2: (A: ALFA)
|
|
46980 END;
|
|
46990 BEGIN WITH X DO
|
|
47000 BEGIN
|
|
47010 A := ALF;
|
|
47020 XSEG.BUFFER[COUNT].CODEWORD := I;
|
|
47030 COUNT := COUNT+1
|
|
47040 END;
|
|
47050 END;
|
|
47060 BEGIN
|
|
47070 COUNT := 1;
|
|
47080 INTWD(77000007000000000000B); (*PRFX TABLE*)
|
|
47090 ALFWD('A68PROG:::');
|
|
47100 INTWD(0); (*FOR DAT*)
|
|
47110 INTWD(0); (*FOR TIM*)
|
|
47120 ALFWD(NOSNUM);
|
|
47130 ALFWD(ALG68NUM);
|
|
47140 ALFWD(' ');
|
|
47150 ALFWD(' I ');
|
|
47160 (*LDSET TABLE - LIB, MAP, ERR*)
|
|
47170 (*-52()
|
|
47180 INTWD(70000004000000000000B);
|
|
47190 INTWD(00100001000000000000B);
|
|
47200 ALFWD('A68SLIB:::');
|
|
47210 INTWD(00110000000000000002B);
|
|
47220 INTWD(00130000000000000000B);
|
|
47230 ()-52*)
|
|
47240 (*+52()
|
|
47250 INTWD(70000002000000000000B);
|
|
47260 INTWD(00100001000000000000B);
|
|
47270 ALFWD('A68SLIB:::');
|
|
47280 ()+52*)
|
|
47290 INTWD(34000002000000000000B); (*PIDL TABLE*)
|
|
47300 ALFWD('A68PROG:::');
|
|
47310 INTWD(55555555555555003400B); (*3400B WORDS OF STACK/HEAP SPACE*)
|
|
47320 INTWD(36000002000000000000B); (*ENTR TABLE*)
|
|
47330 ALFWD('P.MAIN::::');
|
|
47340 INTWD(00000000000001000003B);
|
|
47350 INTWD(46000001000000000000B); (*XFER TABLE*)
|
|
47360 ALFWD('P.MAIN::::');
|
|
47370 XSEG.BUFFER[0].CODEWORD := COUNT-1;
|
|
47380 END;
|
|
47390 ()+01*)
|
|
47400 (**)
|
|
47410 (**)
|
|
47420 (**)
|
|
47430 (**)
|
|
47440 (**)
|
|
47450 (**)
|
|
47460 (*+85()
|
|
47470 (**)
|
|
47480 PROCEDURE INITSEMANTICS;
|
|
47490 VAR I : INTEGER;
|
|
47500 PROCEDURE SETOLIST(VAR OLIST: OLSTTYP; A,B,C,D,E,F: STATE);
|
|
47510 VAR I: INTEGER;
|
|
47520 BEGIN FOR I:=0 TO 5 DO OLIST[I].DP:=FALSE;
|
|
47530 OLIST[0].OVAL:=A; OLIST[1].OVAL:=B;OLIST[2].OVAL:=C;
|
|
47540 OLIST[3].OVAL:=D; OLIST[4].OVAL:=E; OLIST[5].OVAL:=F;
|
|
47550 END;
|
|
47560 (**)
|
|
47570 (**)
|
|
47580 BEGIN (*INITSEMANTICS*)
|
|
47590 (*SIMPLE,SPECIAL,WEAKREF,ROWED,DRESSED,UNDRESSED*)
|
|
47600 SETOLIST(OLIST1, 0 ,1 ,4 ,2 ,2 ,3);OLIST1[2].DP:=TRUE;OLIST1[5].DP:=TRUE;
|
|
47610 SETOLIST(OLIST2, 0 ,3 ,6 ,6 ,6 ,6);
|
|
47620 SETOLIST(OLIST3, 0 ,1 ,2 ,4 ,2 ,3);
|
|
47630 SETOLIST(OLIST4, 4 ,1 ,11 ,4 ,4 ,3);
|
|
47640 FOR I := 0 TO 5 DO OLIST4[I].DP:=TRUE; OLIST4[1].DP:=FALSE;
|
|
47650 SETOLIST(OLIST5, 11 ,11 ,11 ,11 ,11 ,0);OLIST5[5].DP:=TRUE;
|
|
47660 SETOLIST(OLIST6, 0 ,1 ,2 ,4 ,2 ,3);OLIST6[5].DP:=TRUE;
|
|
47670 (**)
|
|
47680 END;
|
|
47690 ()+85*)
|