1060 lines
		
	
	
	
		
			40 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			1060 lines
		
	
	
	
		
			40 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
| 82000              (*    COPYRIGHT 1983 C.H.LINDSEY,  UNIVERSITY OF MANCHESTER  *)
 | |
| 82010 (*+83()
 | |
| 82020 (**)
 | |
| 82030 (*+21()
 | |
| 82040 PROCEDURE MONITORSEMANTIC(SRTN: RTNTYPE);
 | |
| 82050     BEGIN
 | |
| 82060     WRITE(OUTPUT, LSTLINE:5, PLSTKP:3, RTSTKDEPTH:4, ' S ', SRTN:3);
 | |
| 82070 (*+01() WRITELN(OUTPUT, SRSEMP:4,SRSUBP:4,' ', ORD(SRSTK[SRSEMP].SB):6OCT, ' ', ORD(RTSTACK):6OCT) ()+01*)
 | |
| 82080 (*-01() IF SRSEMP<0 THEN WRITELN(OUTPUT)
 | |
| 82090         ELSE WRITELN(OUTPUT, SRSEMP:4,SRSUBP:4,' ',ORD(SRSTK[SRSEMP].SB):6,' ',ORD(RTSTACK):6) ()-01*)
 | |
| 82100     END;
 | |
| 82110 ()+21*)
 | |
| 82120 (**)
 | |
| 82130 (**)
 | |
| 82140 PROCEDURE SEMANTICROUTINE(SRTN: RTNTYPE);
 | |
| 82150 (*FUNCTION: CALLS THE SEMANTIC ROUTINE SPECIFIED BY THE PARSER*)
 | |
| 82160 (*-53()
 | |
| 82170   LABEL 759;
 | |
| 82180 ()-53*)
 | |
| 82190   VAR STB1: PSTB;
 | |
| 82200       LEX1: PLEX;
 | |
| 82210       SB, SBB: PSB;
 | |
| 82220       R: PRANGE;
 | |
| 82230       M, FLDM: MODE;
 | |
| 82240       SECDRY: 0..3;
 | |
| 82250       OFFST: OFFSETR;
 | |
| 82260       ROWCOUNT: CNTR;
 | |
| 82270       I, J: INTEGER;
 | |
| 82280       L: LABL;
 | |
| 82290       PTR: PTRIMCHAIN;
 | |
| 82300       REFED: BOOLEAN;
 | |
| 82310 (*+53()
 | |
| 82320   PROCEDURE MONITOR1;
 | |
| 82330     VAR I: INTEGER;
 | |
| 82340 ()+53*)
 | |
| 82350     BEGIN
 | |
| 82360     IF SRTN>=ESY01 THEN
 | |
| 82370       BEGIN
 | |
| 82380       FOR I := ERRPTR+1 TO ERRLXPTR-1 DO ERRBUF[I] := ERRCHAR;
 | |
| 82390       IF ERRPTR<ERRLXPTR THEN ERRPTR := ERRLXPTR-1;
 | |
| 82400       OUTERR(SRTN-ESY01+ESY+1, ERRORR, NIL);
 | |
| 82410       END
 | |
| 82420     ELSE BEGIN
 | |
| 82430 (*+21()
 | |
| 82440     MONITORSEMANTIC(SRTN);
 | |
| 82450 ()+21*)
 | |
| 82460     CASE SRTN OF
 | |
| 82470 (**)
 | |
| 82480       10: (*SR01*)
 | |
| 82490         BEGIN SRSEMP := SRSEMP+1; SRSTK[SRSEMP].SB := SRPLSTK[PLSTKP]^.LXV.LXPSB END;
 | |
| 82500 (**)
 | |
| 82510       11: (*SR02*)
 | |
| 82520       (*LONG/SHORT*)
 | |
| 82530         SRSTK[SRSEMP].MD := LENGTHEN(INP^.LXV.LXPMD, SRSTK[SRSEMP].SUBP);
 | |
| 82540 (**)
 | |
| 82550       12: (*SR03A*)
 | |
| 82560       (*LONG*)
 | |
| 82570         BEGIN SRSEMP := SRSEMP+1; SRSTK[SRSEMP].SUBP := 1 END;
 | |
| 82580 (**)
 | |
| 82590       13: (*SR03B*)
 | |
| 82600       (*SHORT*)
 | |
| 82610       BEGIN SRSEMP := SRSEMP+1; SRSTK[SRSEMP].SUBP := -1 END;
 | |
| 82620 (**)
 | |
| 82630       14: (*SR04A*)
 | |
| 82640       (*LONG AND FORMAL-ROWERS*)
 | |
| 82650         WITH SRSTK[SRSEMP] DO SUBP := SUBP+1;
 | |
| 82660 (**)
 | |
| 82670       15: (*SR04B*)
 | |
| 82680       (*SHORT*)
 | |
| 82690         WITH SRSTK[SRSEMP] DO SUBP := SUBP-1;
 | |
| 82700 (**)
 | |
| 82710       16: (*SR05*)
 | |
| 82720       (*FUNCTION:  CREATES A MODE TABLE ENTRY HAVING PARSED A .REF TO MODE DECLARATOR*)
 | |
| 82730         WITH SRSTK[SRSEMP] DO MD := FINDREF(MD);
 | |
| 82740 (**)
 | |
| 82750       17: (*SR06*)
 | |
| 82760       (*FUNCTION: EXECUTED AFTER ROUTINE-SPECIFICATION OF ROUTINE-TEXT WITHOUT PARAMETERS*)
 | |
| 82770         BEGIN
 | |
| 82780         ROUTNNT;
 | |
| 82790         CGRTA;
 | |
| 82800         M := SRPOPMD;
 | |
| 82810         SUBSAVE (*BECAUSE FINDPRC DOES A SUBREST*);
 | |
| 82820         FINDPRC(M, 0, PROC);
 | |
| 82830         END;
 | |
| 82840 (**)
 | |
| 82850       18: (*SR07A*)
 | |
| 82860       (*FIRST FIELD-SELECTOR AFTER DECLARER*)
 | |
| 82870         NEWFIELD(SRPLSTK[PLSTKP]);
 | |
| 82880 (**)
 | |
| 82890       19: (*SR07B*)
 | |
| 82900       (*SUBSEQUENT FIELD-SELECTORS*)
 | |
| 82910         BEGIN
 | |
| 82920         SRSTK[SRSEMP+1] := SRSTK[SRSEMP-1]; SRSEMP := SRSEMP+1;
 | |
| 82930         NEWFIELD(INP)
 | |
| 82940         END;
 | |
| 82950 (**)
 | |
| 82960       20: (*SR08A*)
 | |
| 82970         BEGIN
 | |
| 82980         DCLMODE := SRSTK[SRSEMP].MD;
 | |
| 82990         DCLDEFN := [STINIT (*FOR STDIDTY*)];
 | |
| 83000         DEFID(SRPLSTK[PLSTKP])
 | |
| 83010         END;
 | |
| 83020 (**)
 | |
| 83030       21: (*SR08B*)
 | |
| 83040         BEGIN
 | |
| 83050         SRSEMP := SRSEMP+1; SRSTK[SRSEMP] := SRSTK[SRSEMP-1];
 | |
| 83060         DEFID(INP)
 | |
| 83070         END;
 | |
| 83080 (**)
 | |
| 83090       22: (*SR10*)
 | |
| 83100         (*FUNCTION: BEFORE FIELD(PARAMETER) OF .STRUCT (.PROC) DECLARER*)
 | |
| 83110         SUBSAVE;
 | |
| 83120 (**)
 | |
| 83130       23: (*SR11*)
 | |
| 83140       (*FUNCTION: CREATES A MODE TABLE ENTRY HAVING PARSED A STRUCTURED
 | |
| 83150           WITH FIELDS MODE DECLARATOR
 | |
| 83160       *)
 | |
| 83170         FINSTRUCT((SRSEMP-SRSUBP) DIV 2);
 | |
| 83180 (**)
 | |
| 83190       24: (*SR12*)
 | |
| 83200       (*FUNCTION: START ROWED-ACTUAL-DECLARER IN VARIABLE-DECLARATION OR SOME GENERATORS*)
 | |
| 83210         BEGIN BRKASCR; SB:=MAKESUBSTACK(0, MDBNDS) END;
 | |
| 83220 (**)
 | |
| 83230       25: (*SR14A*)
 | |
| 83240       (*FORMAL*)
 | |
| 83250         BEGIN SRSEMP := SRSEMP-1; SRSTK[SRSEMP].MD := FINDROW(SRSTK[SRSEMP+1].MD, SRSTK[SRSEMP].SUBP) END;
 | |
| 83260 (**)
 | |
| 83270       26: (*SR14B*)
 | |
| 83280       (*FUNCTION: EXECUTED AFTER AN ACTUAL-ROWER-LIST-BRACKET*)
 | |
| 83290         BEGIN
 | |
| 83300         J := (SRSEMP-SRSUBP) DIV 2;
 | |
| 83310         CGACTBNDS(SRSTK[SRSUBP-1].SB,J);    (*LOADS BOUNDS INTO SB*)
 | |
| 83320         POPUNITS
 | |
| 83330         END;
 | |
| 83340 (**)
 | |
| 83350       27: (*SR14C*)
 | |
| 83360       (*FUNCTION: EXECUTED AFTER AN ACTUAL-DECLARER*)
 | |
| 83370         WITH SRSTK[SRSEMP] DO
 | |
| 83380           MD := FINDROW(MD, SRSTK[SRSEMP-1].SB^.SBLOCRG);
 | |
| 83390 (**)
 | |
| 83400       28: (*SR15*)
 | |
| 83410       (*FUNCTION: CREATES A MODE TABLE ENTRY HAVING PARSED A PROCEDURE DECLARATOR*)
 | |
| 83420         BEGIN
 | |
| 83430         M := SRPOPMD;
 | |
| 83440         FINDPRC(M, SRSEMP-SRSUBP, PROC);
 | |
| 83450         END;
 | |
| 83460 (**)
 | |
| 83470       29: (*SR16A*)
 | |
| 83480         BEGIN DCLMODE := SRPOPMD; DCLDEFN := [STINIT (*FOR STDIDTY*)] END;
 | |
| 83490 (**)
 | |
| 83500       30: (*SR16B*)
 | |
| 83510         (*FUNCTION: EXECUTED AFTER DECLARER IN VARIABLE-DECLARATION*)
 | |
| 83520         BEGIN DCLMODE := SRPOPMD; DCLDEFN := [STVAR] END;
 | |
| 83530 (**)
 | |
| 83540       31: (*SR16C*)
 | |
| 83550         BEGIN DCLMODE := MDROUT; DCLDEFN := [STINIT (*FOR STDIDTY*)] END;
 | |
| 83560 (**)
 | |
| 83570       32: (*SR16D*)
 | |
| 83580         BEGIN DCLMODE := PRCBNDS; DCLDEFN := [STINIT (*FOR STDIDTY*)] END;
 | |
| 83590 (**)
 | |
| 83600       33: (*SR17*)
 | |
| 83610       (*FUNCTION: EXECUTED WHEN A VARIABLE-DEFINITION IS NOT PRECEDED BY .LOC*)
 | |
| 83620           OUTERR(ESE+73, WARNING, NIL);
 | |
| 83630 (**)
 | |
| 83640       34: (*SR20A*)
 | |
| 83650       (*FUNCTION: EXECUTED AT THE BEGINNING OF ANY RANGE EXCEPT A ROUTINE-TEXT.
 | |
| 83660           PERFORMS RANGE ENTRY FUNCTIONS. MARKS STACK FOR BEGINNING OF A BALANCE.
 | |
| 83670           THE BALANCE IS THE ESTABLISHING-CLAUSE WHICH STARTS ALL SUCH RANGES.
 | |
| 83680       *)
 | |
| 83690         BEGIN RANGENT; SUBSAVE END;
 | |
| 83700 (**)
 | |
| 83710       35: (*SR20B*)
 | |
| 83720       (*FUNCTION: EXECUTED AT THE END OF A CONDITIONAL- OR CASE-CHOOSER*)
 | |
| 83730         BEGIN RGINFO := RGINFO+[DCLDELAY]; RANGEXT; SEMANTICROUTINE(43) (*SR22A*) END;
 | |
| 83740 (**)
 | |
| 83750       36: (*SR20C*)
 | |
| 83760       (*FUNCTION: EXECUTED WHEN AN ELSE-PART-OPTION OR OUT-PART-OPTION IS EMPTY.
 | |
| 83770           THE NET EFFECT IS TO ACT AS THOUGH THE OMITTED OPTION WAS .SKIP.
 | |
| 83780       *)
 | |
| 83790         BEGIN  SB := PUSHSB(MDSKIP);
 | |
| 83800         SEMANTICROUTINE(43) (*SR22A*)
 | |
| 83810         END;
 | |
| 83820 (**)
 | |
| 83830       37: (*SR20DB*)
 | |
| 83840       (*FUNCTION: EXECUTED AFTER ENQUIRY-CLAUSE OF CONDITIONAL-CHOOSER*)
 | |
| 83850         BEGIN
 | |
| 83860         IF DCLLABEL IN RGINFO THEN SEMERR(ESE+02);
 | |
| 83870         MEEKLOAD(MDBOOL, ESE+34);
 | |
| 83880         CGIFA;
 | |
| 83890         DISPOSE(SRSTK[SRSEMP].SB); SRSEMP := SRSEMP-1; SUBSAVE;
 | |
| 83900         SEMANTICROUTINE(34) (*SR20A*)
 | |
| 83910         END;
 | |
| 83920 (**)
 | |
| 83930       38: (*SR20DI*)
 | |
| 83940       (*FUNCTION: EXECUTED AFTER ENQUIRY-CLAUSE OF CASE-CHOOSER*)
 | |
| 83950         BEGIN
 | |
| 83960         IF DCLLABEL IN RGINFO THEN SEMERR(ESE+02);
 | |
| 83970         MEEKLOAD(MDINT, ESE+35);
 | |
| 83980         CGCASA;
 | |
| 83990         DISPOSE(SRSTK[SRSEMP].SB); SRSEMP := SRSEMP-1; SUBSAVE;
 | |
| 84000       (*SEMANTICROUTINE(34) (*SR20A *)
 | |
| 84010         END;
 | |
| 84020 (**)
 | |
| 84030       39: (*SR20EB*)
 | |
| 84040       (*FUNCTION: EXECUTED AFTER A THEN-PART OF A CONDITIONAL-ALTERNATIVES*)
 | |
| 84050         BEGIN
 | |
| 84060         RGINFO := RGINFO+[DCLDELAY]; RANGEXT;
 | |
| 84070         INNERBAL;
 | |
| 84080         ASSIGNFLAD;
 | |
| 84090         CGFLINE;
 | |
| 84100         SEMANTICROUTINE(34) (*SR20A*)
 | |
| 84110         END;
 | |
| 84120 (**)
 | |
| 84130       40: (*SR20EI*)
 | |
| 84140         (*FUNCTION: START ROWED-ACTUAL-DECLARER IN GENERATOR*)
 | |
| 84150         SB:=MAKESUBSTACK(0, MDBNDS);
 | |
| 84160 (**)
 | |
| 84170       41: (*SR20F*)
 | |
| 84180       (*FUNCTION: EXECUTED AFTER EACH UNIT IN THE IN-PART OF A CASE-ALTERNATIVES*)
 | |
| 84190         BEGIN INNERBAL; MARK(FIXUPM); CGFLINE END;
 | |
| 84200 (**)
 | |
| 84210       42: (*SR20G*)
 | |
| 84220       (*FUNCTION: PERFORMS FINAL PROCESSING OF CASE-CLAUSE*)
 | |
| 84230         BEGIN SEMANTICROUTINE(35) (*SR20B*); CGCASC END;
 | |
| 84240 (**)
 | |
| 84250       43: (*SR22A*)
 | |
| 84260       (*FUNCTION: EXECUTED AFTER PROCESSING THE LAST UNIT OF A BALANCE.
 | |
| 84270           NOTE THAT HERE BALANCES INCLUDE CONDITIONAL-, CASE- AND ESTABLISHING-CLAUSES.
 | |
| 84280           AN ENQUIRY-CLAUSE DOES NOT REALLY REQUIRE BALANCING BUT THE PARSER DOES NOT DISTINGUISH
 | |
| 84290           BETWEEN THE TWO KINDS OF ESTABLISHING-CLAUSES (ENQUIRY- AND SERIAL-).
 | |
| 84300           THUS, ENQUIRY-CLAUSES ARE TREATED AS SERIAL-CLAUSES EVEN THOUGH THE YIELD IS
 | |
| 84310           ALWAYS THE LAST UNIT.
 | |
| 84320       *)
 | |
| 84330         BEGIN LASTIBAL; SETBALFLAG END;
 | |
| 84340 (**)
 | |
| 84350       44: (*SR22B*)
 | |
| 84360       (*FUNCTION: EXECUTED AFTER ENCLOSED-CLAUSE OF PROGRAM OR PRIMARY.
 | |
| 84370       *)
 | |
| 84380         BEGIN RGINFO := RGINFO+[DCLDELAY]; RANGEXT END;
 | |
| 84390 (**)
 | |
| 84400       45: (*SR23*)
 | |
| 84410       (*FUNCTION: EXECUTED AFTER ENCLOSED-CLAUSE OF A CAST*)
 | |
| 84420         BEGIN STRONG;
 | |
| 84430         WITH SRSTK[SRSEMP].SB^ DO SBINF := SBINF-[SBMORF, SBVOIDWARN, SBCOLL];
 | |
| 84440         RANGEXT
 | |
| 84450         END;
 | |
| 84460 (**)
 | |
| 84470       46: (*SR24*)
 | |
| 84480       (*FUNCTION: EXECUTED AFTER UNIT FOLLOWED BY A COMPLETER IN A SERIAL-CLAUSE*)
 | |
| 84490         INNERBAL;
 | |
| 84500 (**)
 | |
| 84510       47: (*SR25A1*)
 | |
| 84520       (*FUNCTION: EXECUTED AFTER NON-EMPTY FOR-PART.*)
 | |
| 84530         PUTLOOP(INP);
 | |
| 84540 (**)
 | |
| 84550       48: (*25A2*)
 | |
| 84560       (*FUNCTION: EXECUTED AFTER EMPTY FOR-PART WHEN COUNTING-PART IS NON-EMPTY.*)
 | |
| 84570         PUTLOOP(LEXALEPH);
 | |
| 84580 (**)
 | |
| 84590       49: (*SR25B1*)
 | |
| 84600       (*FUNCTION: EXECUTED AFTER NON-EMPTY FROM- BY- OR TO-PART.*)
 | |
| 84610         MEEKLOAD(MDINT, ESE+39);
 | |
| 84620 (**)
 | |
| 84630       50: (*SR25B2*)
 | |
| 84640       (*FUNCTION: EXECUTED AFTER EMPTY FROM-PART WHEN COUNTING-PART IS NON-EMPTY.*)
 | |
| 84650         BEGIN PUTDEN(LEXONE); SEMANTICROUTINE(49) (*SR25B1*) END;
 | |
| 84660 (**)
 | |
| 84670       51: (*SPARE*);
 | |
| 84680 (**)
 | |
| 84690       52: (*SR25B3*)
 | |
| 84700       (*FUNCTION: EXECUTED AFTER EMPTY TO-PART WHEN COUNTING PART IS NON-EMPTY*)
 | |
| 84710         BEGIN
 | |
| 84720         WITH SRSTK[SRSUBP-1].SB^ DO SBINF := SBINF+[SBEMPTYTO]
 | |
| 84730         END;
 | |
| 84740 (**)
 | |
| 84750       53: (*SR25B5*)
 | |
| 84760       (*FUNCTION: EXECUTED AFTER EMPTY BY-PART WHEN COUNTING PART IS NON-EMPTY*)
 | |
| 84770         WITH SRSTK[SRSUBP-1].SB^ DO SBINF := SBINF+[SBEMPTYBY];
 | |
| 84780 (**)
 | |
| 84790       54: (*SR26A*)
 | |
| 84800       (*FUNCTION: EXECUTED BEFORE WHILE-PART, OR BEFORE DO-PART IF NONE.*)
 | |
| 84810         BEGIN WITH SRSTK[SRSUBP-1] DO WITH SB^ DO
 | |
| 84820           BEGIN
 | |
| 84830           RANGENT;  (*START RANGE OF LOOPCLAUSE - MATCHED IN S-44*)
 | |
| 84840           LEX1 := SBLEX;
 | |
| 84850           IF LEX1<>NIL THEN
 | |
| 84860             BEGIN
 | |
| 84870             RGINFO := RGINFO+[DCLLOOP];
 | |
| 84880             CGFIXRG;
 | |
| 84890             SBOFFSET := ALLOC(SZWORD);  (*DECMARKER*)
 | |
| 84900             IF NOT(SBEMPTYBY IN SBINF) THEN I := ALLOC(SZINT);  (*BY PART*)
 | |
| 84910             STB1 := GETSTB(LEX1, [STINIT (*FOR STDIDTY*)], STBDEFID);
 | |
| 84920             WITH STB1^ DO
 | |
| 84930               BEGIN STMODE := MDINT; STOFFSET := ALLOC(SZINT); (*FROM PART*)
 | |
| 84932 (*+41()       SBOFFSET := STOFFSET+SZINT; (*OFFSET OF 'TO' PART*) ()+41*)
 | |
| 84940               IF SBEMPTYTO IN SBINF THEN
 | |
| 84950                 CGLPC(SB)
 | |
| 84960               ELSE
 | |
| 84970                 BEGIN I := ALLOC(SZINT) (*TO PART*); CGLPB(SB) END
 | |
| 84980               END
 | |
| 84990             END
 | |
| 85000           ELSE CGLPA(SB);
 | |
| 85010           POPUNITS;
 | |
| 85020           CGFLINE;
 | |
| 85030           SEMANTICROUTINE(34) (*SR20A*) (*START RANGE OF WHILE-PART ( OR DO-PART ) *)
 | |
| 85040           END
 | |
| 85050         END;
 | |
| 85060 (**)
 | |
| 85070       55: (*SR26B*)
 | |
| 85080       (*FUNCTION: EXECUTED BEFORE WHILE-PART AFTER EMPTY COUNTING-PART.*)
 | |
| 85090         BEGIN PUTLOOP(NIL); SEMANTICROUTINE(54) (*SR26A*) END;
 | |
| 85100 (**)
 | |
| 85110       56: (*SR26C*)
 | |
| 85120       (*FUNCTION: EXECUTED AFTER WHILE-DO-PART WITH NON-EMPTY WHILE-PART.*)
 | |
| 85130         BEGIN ASSIGNFLAD; RANGEXT END;  (*END RANGE OF WHILE-PART*)
 | |
| 85140 (**)
 | |
| 85150       57: (*SR27A*)
 | |
| 85160       (*FUNCTION: EXECUTED BEFORE DO-PART AFTER NON-EMPTY WHILE-PART.*)
 | |
| 85170         BEGIN
 | |
| 85180         IF DCLLABEL IN RGINFO THEN SEMERR(ESE+02);
 | |
| 85190         MEEKLOAD(MDBOOL, ESE+36);
 | |
| 85200         CGLPD;
 | |
| 85210         DISPOSE(SRSTK[SRSEMP].SB); SRSEMP := SRSEMP-1;
 | |
| 85220         SCPUSH(MDVOID);
 | |
| 85230         SEMANTICROUTINE(34) (*SR20A*) (*START RANGE OF DO-PART*)
 | |
| 85240         END;
 | |
| 85250 (**)
 | |
| 85260       58: (*SR27B1*)
 | |
| 85270       (*FUNCTION: EXECUTED BEFORE DO-PART AFTER EMPTY WHILE-PART AND NON-EMPTY COUNTING-PART.*)
 | |
| 85280         BEGIN SEMANTICROUTINE(54) (*SR26A*); SCPUSH(MDVOID) END;
 | |
| 85290 (**)
 | |
| 85300       59: (*SR27B2*)
 | |
| 85310       (*FUNCTION: EXECUTED BEFORE DO-PART AFTER EMPTY-WHILE-PART AND EMPTY COUNTING-PART.*)
 | |
| 85320         BEGIN PUTLOOP(NIL); SEMANTICROUTINE(58) (*SR27B1*) END;
 | |
| 85330 (**)
 | |
| 85340       60: (*SR27C*)
 | |
| 85350       (*FUNCTION: EXECUTED AFTER DO-PART.*)
 | |
| 85360         BEGIN
 | |
| 85370         STRONG; RANGEXT; (*END RANGE OF DO-PART*)
 | |
| 85380         UNSTACKSB;
 | |
| 85390         DISPOSE(SRSTK[SRSEMP].SB); SRSEMP := SRSEMP-1;
 | |
| 85400         CGLPE;
 | |
| 85405         SRSTK[SRSEMP].SB^.SBMODE:=MDVOID;
 | |
| 85410         STACKSB(SRSTK[SRSEMP].SB); (*THE .VOID RESULT OF THE DO-PART*)
 | |
| 85420         END;
 | |
| 85430 (**)
 | |
| 85440 (*+53()
 | |
| 85450     END;
 | |
| 85460     END END;
 | |
| 85470   PROCEDURE MONITOR2;
 | |
| 85480     LABEL 759;
 | |
| 85490     VAR I: INTEGER;
 | |
| 85500     BEGIN
 | |
| 85510 (*+21() MONITORSEMANTIC(SRTN); ()+21*)
 | |
| 85520     CASE SRTN OF
 | |
| 85530 ()+53*)
 | |
| 85540       61: (*SR28*)
 | |
| 85550       (*FUNCTION: EXECUTED AFTER LOOP-CLAUSE*)
 | |
| 85560         WITH SRSTK[SRSEMP].SB^ DO
 | |
| 85570           IF SBLEX<>NIL THEN
 | |
| 85580             BEGIN CURID := CURID-SZWORD-(3-ORD(SBEMPTYBY IN SBINF)-ORD(SBEMPTYTO IN SBINF))*SZINT;
 | |
| 85590             IF NOT(SBEMPTYTO IN SBINF) THEN ASSIGNFLAD;
 | |
| 85600             CGLPG
 | |
| 85610             END;
 | |
| 85620 (**)
 | |
| 85630       62: (*SR29*)
 | |
| 85640       (*FUNCTION: VOIDS A UNIT FOLLOWED BY A SEMICOLON IN AN ESTABLISHING-CLAUSE.*)
 | |
| 85650         BEGIN
 | |
| 85660         SCPUSH(MDVOID); STRONG;
 | |
| 85670         UNSTACKSB;
 | |
| 85680         DISPOSE(SRSTK[SRSEMP].SB); SRSEMP := SRSEMP-1;
 | |
| 85690         END;
 | |
| 85700 (**)
 | |
| 85710       63: (*SR33*)
 | |
| 85720       (*APPLIED-LABEL*)
 | |
| 85730         STB1 := APPLAB(SRPLSTK[PLSTKP]);
 | |
| 85740 (**)
 | |
| 85750       64: (*SR34A*)
 | |
| 85760       (*FUNCTION: EXECUTED WHEN APPLIED-IDENTIFIER IS FOUND.
 | |
| 85770           PLACES SEMANTIC BLOCK FOR THE IDENTIFIER ON THE STACK.
 | |
| 85780       *)
 | |
| 85790         PUTIND(APPID(SRPLSTK[PLSTKP]));
 | |
| 85800 (**)
 | |
| 85810       65: (*SR34B1*)
 | |
| 85820       (*FUNCTION: EXECUTED WHEN DENOTATION IS ENCOUNTERED.
 | |
| 85830           PLACES SEMANTIC BLOCK FOR THE DENOTATION ON THE STACK.
 | |
| 85840       *)
 | |
| 85850         BEGIN PUTDEN(SRPLSTK[PLSTKP]) END;
 | |
| 85860 (**)
 | |
| 85870       66: (*SR34B2*)
 | |
| 85880       (*FUNCTION: AS SR34B1, BUT TAKES DENOTATION FROM INP*)
 | |
| 85890         BEGIN SRSEMP := SRSEMP-1; PUTDEN(INP) END;
 | |
| 85900 (**)
 | |
| 85910       67: (*SR34C*)
 | |
| 85920       (*FUNCTION: EXECUTED WHEN A HIP IS ENCOUNTERED.
 | |
| 85930           PLACES SEMANTIC BLOCK FOR IT ON STACK.
 | |
| 85940       *)
 | |
| 85950         SB := PUSHSB(SRPLSTK[PLSTKP]^.LXV.LXPMD); (*COMORF*)
 | |
| 85960 (**)
 | |
| 85970       68: (*SR35*)
 | |
| 85980       (*FUNCTION: EXECUTED AT START OF MODE-DEFINITION*)
 | |
| 85990         BEGIN
 | |
| 86000         DEFMI(SRPLSTK[PLSTKP]);
 | |
| 86010         END;
 | |
| 86020 (**)
 | |
| 86030       69: (*SR36*)
 | |
| 86040       (*FUNCTION: EXECUTED AT START OF ACTUAL-ROWED-DECLARER IN MODE-DEFINITION*)
 | |
| 86050         BEGIN
 | |
| 86060         ROUTNNT;
 | |
| 86070         CGRTA;
 | |
| 86080         SRSEMP := SRSEMP+1; SRSTK[SRSEMP].MD := PRCBNDS;
 | |
| 86090         SEMANTICROUTINE(100) (*SR63B*);
 | |
| 86100         SB:=MAKESUBSTACK(0,MDBNDS)
 | |
| 86110         END;
 | |
| 86120 (**)
 | |
| 86130       70: (*SR37A*)
 | |
| 86140       (*FUNCTION: EXECUTED WHEN "ROWED" MODE-INDICATION IS APPLIED IN AN ACTUAL-DECLARER
 | |
| 86150           IN A GENERATOR.
 | |
| 86160       *)
 | |
| 86170         BEGIN
 | |
| 86180         SRSEMP := SRSEMP-1;
 | |
| 86190         ELABMI(SRPLSTK[PLSTKP]);
 | |
| 86200         END;
 | |
| 86210 (**)
 | |
| 86220       71: (*SR37B*)
 | |
| 86230       (*FUNCTION: EXECUTED WHEN A "ROWED" MODE-INDICATION ISAPPLIED IN AN ACTUAL-DECLARER
 | |
| 86240           IN A VARIABLE-DEFINITION OR SOME GENERATORS.
 | |
| 86250       *)
 | |
| 86260         BEGIN
 | |
| 86270         SRSEMP := SRSEMP-1;
 | |
| 86280         BRKASCR;
 | |
| 86290         ELABMI(SRPLSTK[PLSTKP + ORD(SRPLSTK[PLSTKP]^.LXV.LXIO<>LXIOMDIND)]);
 | |
| 86300         END;
 | |
| 86310 (**)
 | |
| 86320       72: (*SR38A*)
 | |
| 86330       (*FUNCTION: EXECUTED WHEN MODE-DEFINITION IS COMPLETED BY ASCRIBING
 | |
| 86340           A USER DEFINED "ROWED" MODE-INDICATION.
 | |
| 86350       *)
 | |
| 86360         BEGIN
 | |
| 86370         STB1 := SRPLSTK[PLSTKP+1]^.LXV.LXPSTB;
 | |
| 86380         FILLSTB(STB1); STB1^.STMODE := SRPOPMD;
 | |
| 86390         NECENV(SRPLSTK[PLSTKP]^.LXV.LXPSTB);
 | |
| 86400         PUTIND(SRPLSTK[PLSTKP]^.LXV.LXPSTB);
 | |
| 86410         CGFIRM
 | |
| 86420         END;
 | |
| 86430 (**)
 | |
| 86440       73: (*SR38B*)
 | |
| 86450       (*FUNCTION: EXECUTED AFTER MODE-DEFINITION IN CASES NOT COVERED BY SR38A.*)
 | |
| 86460         BEGIN
 | |
| 86470         M := SRPOPMD;
 | |
| 86480         STB1 := SRPLSTK[PLSTKP+1]^.LXV.LXPSTB;
 | |
| 86490         IF M=NIL THEN M := MDERROR; (*FOR .MODE .A = .A*)
 | |
| 86500         IF M=NIL THEN M:=MDERROR;
 | |
| 86510         WITH STB1^, SRSTK[SRSEMP].SB^ DO
 | |
| 86520           BEGIN
 | |
| 86530           IF M^.MDV.MDID=MDIDROW THEN (*ROWED MODE*)
 | |
| 86540              BEGIN
 | |
| 86550              UNSTACKSB;
 | |
| 86560              STPTR := SBXPTR ; STLEVEL := SBLEVEL;
 | |
| 86570              RGSTATE := 13;
 | |
| 86580              END;
 | |
| 86590           STDEFTYP := STDEFTYP+[STCONST];
 | |
| 86600           IF STRECUR IN STDEFTYP THEN RECURFIX(M);
 | |
| 86610           STMODE := M;
 | |
| 86620           END;
 | |
| 86630        END;
 | |
| 86640 (**)
 | |
| 86650 (**)
 | |
| 86660       74: (*SR39*)
 | |
| 86670       (*FUNCTION: EXECUTED AFTER DEFINING-LABEL*)
 | |
| 86680         BEGIN
 | |
| 86690         DEFLAB(SRPLSTK[PLSTKP]);
 | |
| 86700         CGFLINE
 | |
| 86710         END;
 | |
| 86720 (**)
 | |
| 86730       75: (*SR41*)
 | |
| 86740       (*FUNCTION: EXECUTED AFTER SECONDARY OF SELECTION*)
 | |
| 86750         BEGIN
 | |
| 86760         M := WEAK;
 | |
| 86770         SECDRY := 0;
 | |
| 86780         WITH M^ DO IF MDV.MDID=MDIDREF THEN
 | |
| 86790           BEGIN M := MDPRRMD; SECDRY := 1 END;
 | |
| 86800         WITH M^ DO IF MDV.MDID=MDIDROW THEN
 | |
| 86810           BEGIN ROWCOUNT := MDV.MDCNT; M := MDPRRMD; SECDRY := SECDRY+2 END;
 | |
| 86820         IF M^.MDV.MDID<>MDIDSTRUCT THEN SEMERR(ESE+43)
 | |
| 86830         ELSE WITH M^ DO
 | |
| 86840           BEGIN OFFST := 0;
 | |
| 86850           LEX1 := SRPLSTK[PLSTKP+2];
 | |
| 86860           FOR I := 0 TO MDV.MDCNT-1 DO WITH MDSTRFLDS[I] DO
 | |
| 86870             BEGIN
 | |
| 86880             FLDM := MDSTRFMD;
 | |
| 86890             IF MDSTRFLEX=LEX1 THEN GOTO 759;
 | |
| 86900             OFFST := OFFST+FLDM^.MDV.MDLEN
 | |
| 86910             END;
 | |
| 86920           SEMERRP(ESE+44, LEX1);
 | |
| 86930      759: CGSELECT(OFFST, FLDM, SECDRY);
 | |
| 86940           WITH SRSTK[SRSEMP].SB^ DO
 | |
| 86950             BEGIN
 | |
| 86960             IF SECDRY>=2 THEN FLDM := FINDROW(FLDM, ROWCOUNT);
 | |
| 86970             IF ODD(SECDRY) THEN SBMODE := FINDREF(FLDM)
 | |
| 86980             ELSE SBMODE := FLDM;
 | |
| 86990             SBINF := SBINF+[SBMORF,SBVOIDWARN];
 | |
| 87000             END;
 | |
| 87010           END
 | |
| 87020         END;
 | |
| 87030 (**)
 | |
| 87040 (**)
 | |
| 87050       76: (*SR42*)
 | |
| 87060       (*FUNCTION: EXECUTED AFTER PRIMARY OF CALL*)
 | |
| 87070         BEGIN
 | |
| 87080         M := MEEK;
 | |
| 87090         SBB := MAKESUBSTACK(1,M^.MDPRRMD);
 | |
| 87100         WITH M^, SRSTK[SRSEMP] DO WITH SB^ DO BEGIN
 | |
| 87102 (*-02()   CGFIRM; (*LOAD ANY DELAYED STUFF*)
 | |
| 87104           SBINF := SBINF-[SBSTKDELAY]; (*BUT NOT NECESSARILY THIS STUFF*)
 | |
| 87106 ()-02*)
 | |
| 87110           IF (MDV.MDID=MDIDPASC) AND (SBTYP<>SBTDEN) THEN M := COERCE(COFIRM(M, NIL));
 | |
| 87120           IF NOT (SBTYP IN [SBTDEN,SBTPROC,SBTRPROC]) THEN LOADSTK(RTSTACK);
 | |
| 87130           IF NOT (MDV.MDID IN [MDIDPASC,MDIDPROC]) THEN
 | |
| 87140             BEGIN MODERR(M, ESE+25); SBMODE := PRCERROR END;
 | |
| 87150           UNSTACKSB; (*PRIMARY OF CALL*)
 | |
| 87160           RANGENT; (*FOR PARAMETERS*)
 | |
| 87170           STACKSB(SB); (*SO IT IS PART OF THE PARAMETERS RANGE*)
 | |
| 87171 (*+05()
 | |
| 87172           IF M^.MDV.MDID<>MDIDPASC THEN
 | |
| 87173             BEGIN
 | |
| 87174             OFFST := 0;
 | |
| 87175             FOR I := 0 TO MDV.MDCNT-1 DO WITH MDPRCPRMS[I]^ DO
 | |
| 87178               IF MDV.MDPILE THEN OFFST := OFFST+SZADDR ELSE OFFST := OFFST+MDV.MDLEN;
 | |
| 87179             CLEAR(RTSTACK);
 | |
| 87180             ADJUSTSP := 0; HOIST(0, OFFST, FALSE);
 | |
| 87182             IF ADJUSTSP<>0 THEN FILL(SBTSTK, PUSHSB(MDINT));
 | |
| 87183             END;
 | |
| 87184 ()+05*)
 | |
| 87186           RGINFO := RGINFO+[DCLLOCRNG];
 | |
| 87190           WITH ROUTNL^ DO RNLOCRG := RNLOCRG+1;
 | |
| 87200           SBCNT := 0;
 | |
| 87210           PARMSC
 | |
| 87220           END
 | |
| 87230         END;
 | |
| 87240 (**)
 | |
| 87250       77: (*SR43*)
 | |
| 87260       (*FUNCTION: EXECUTED FOR EVERY OPERAND WHICH MAY POSSIBLY BE A LEFT-DYADIC-OPERAND.
 | |
| 87270           CHECKS THAT THE OPERATOR TO THE RIGHT OF THE OPERAND IS A LEGAL DYADIC-OPERATOR.
 | |
| 87280       *)
 | |
| 87290         WITH INP^.LXV DO
 | |
| 87300           IF LXPSTB<>NIL THEN
 | |
| 87310             IF LXPSTB^.STDYPRIO=10 THEN SEMERRP(ESE+22, INP);
 | |
| 87320 (**)
 | |
| 87330       78: (*SR44*)
 | |
| 87340       (*FUNCTION: AFTER MONADIC-OPERATOR*)
 | |
| 87350         BEGIN OPDSAVE(FIRMBAL); OPIDENT(TRUE) END;
 | |
| 87360 (**)
 | |
| 87370       79: (*SR45*)
 | |
| 87380       (*FUNCTION: EXECUTED IN ORDER TO REDUCE  OPRAND OPR OPRAND  TO  OPRAND*)
 | |
| 87390         BEGIN OPDSAVE(FIRMBAL); OPIDENT(FALSE) ;
 | |
| 87400         END;
 | |
| 87410 (**)
 | |
| 87420       80: (*SR46*)
 | |
| 87430       (*FUNCTION: EXECUTED FOR EACH LEFT-HAND-OPERAND OF A DYADIC-OPERATOR*)
 | |
| 87440         BEGIN
 | |
| 87450         M := FIRMBAL;
 | |
| 87460         IF BALFLAG OR (SRSTK[SRSEMP].SB^.SBDELAYS<>0) THEN LHOPBAL(M);
 | |
| 87470         OPDSAVE(M)
 | |
| 87480         END;
 | |
| 87490 (**)
 | |
| 87500 (**)
 | |
| 87510       81: (*SR48A*)
 | |
| 87520       (*FUNCTION: EXECUTED AFTER LEFT HAND TERTIARY OF IDENTITY-RELATION*)
 | |
| 87530         BEGIN
 | |
| 87540         M := BALANCE(STRSTRONG);
 | |
| 87550         IF BALFLAG OR (SRSTK[SRSEMP].SB^.SBDELAYS<>0) THEN LHOPBAL(M);
 | |
| 87560         OPDSAVE(M)
 | |
| 87570         END;
 | |
| 87580 (**)
 | |
| 87590       82: (*SR48B*)
 | |
| 87600       (*FUNCTION: EXECUTED AFTER RIGHT HAND TERTIARY OF IDENTITY-RELTION*)
 | |
| 87610         BEGIN
 | |
| 87620         OPDSAVE(BALANCE(STRSTRONG));
 | |
| 87630         IF SRSTK[SRSEMP].SB^.SBBALSTR=STRNONE THEN SB := SRSTK[SRSEMP-2].SB
 | |
| 87640         ELSE SB := SRSTK[SRSUBP-1].SB;
 | |
| 87650           (*SB IS RESULT OF BALANCING LHS*)
 | |
| 87660         M := BALMOIDS(SRSTK[SRSEMP].SB^.SBMODE, SB^.SBMODE);
 | |
| 87670         WITH SRSTK[SRSEMP].SB^ DO
 | |
| 87680           IF SBBALSTR>M1COERC THEN M1COERC := SBBALSTR;
 | |
| 87690         WITH SB^ DO
 | |
| 87700           IF SBBALSTR>M2COERC THEN M2COERC := SBBALSTR;
 | |
| 87710         IF (M1COERC>STRSOFT) AND (M2COERC>STRSOFT) THEN SEMERR(ESE+26)
 | |
| 87720         ELSE IF M^.MDV.MDID<>MDIDREF THEN MODERR(M, ESE+57);
 | |
| 87730         LHFIRM := NIL;  (*SO THAT PUTMD AND BALOPR DO NOT THINK IT IS MONADIC*)
 | |
| 87740         PUTMD(M, M);
 | |
| 87750         BALOPR;
 | |
| 87760         CGOPR(PIDTYREL+SRPLSTK[PLSTKP+1]^.LXV.LXP, MDBOOL, TRUE);
 | |
| 87770         DISPOSE(SRSTK[SRSEMP].SB); SRSEMP := SRSEMP-1;
 | |
| 87780         WITH SRSTK[SRSEMP].SB^ DO SBINF := SBINF+[SBMORF,SBVOIDWARN]
 | |
| 87790         END;
 | |
| 87800 (**)
 | |
| 87810 (**)
 | |
| 87820       83: (*SR49A*)
 | |
| 87830       (*FUNCTION: EXECUTED AFTER DESTINATION OF ASSIGNATION.*)
 | |
| 87840         BEGIN M := SOFT;
 | |
| 87850         WITH M^ DO
 | |
| 87860           BEGIN
 | |
| 87870           IF MDV.MDID<>MDIDREF THEN
 | |
| 87880             BEGIN MODERR(M, ESE+20); SRSTK[SRSEMP].SB^.SBMODE := MDREFERROR; SCPUSH(MDERROR) END
 | |
| 87890           ELSE SCPUSH(MDPRRMD);
 | |
| 87900           CGDEST;
 | |
| 87910           END
 | |
| 87920         END;
 | |
| 87930 (**)
 | |
| 87940 (**)
 | |
| 87950       84: (*SR49B*)
 | |
| 87960       (*FUNCTION: EXECUTED AFTER SOURCE OF ASSIGNATION.*)
 | |
| 87970         BEGIN
 | |
| 87980         STRONG; CGASSIGN; DISPOSE(SRSTK[SRSEMP].SB);SRSEMP := SRSEMP-1;
 | |
| 87990         WITH SRSTK[SRSEMP].SB^ DO SBINF := SBINF-[SBMORF,SBVOIDWARN]
 | |
| 88000         END;
 | |
| 88010 (**)
 | |
| 88020       85: (*SR50*)
 | |
| 88030       (*FUNCTION: EXECUTED AFTER PRIMARY OF SLICE*)
 | |
| 88040         BEGIN M:= WEAK;
 | |
| 88050         WITH M^ DO IF MDV.MDID=MDIDREF THEN M := MDPRRMD;
 | |
| 88060         WITH M^ DO
 | |
| 88070           IF M=MDSTRNG THEN BEGIN FLDM := COERCE(M); ROWCOUNT := 1 END
 | |
| 88080           ELSE IF MDV.MDID=MDIDROW THEN ROWCOUNT:=MDV.MDCNT
 | |
| 88090           ELSE BEGIN MODERR(M, ESE+47); ROWCOUNT := 63 (*MAX CNTR*) END;
 | |
| 88100         SBB := MAKESUBSTACK(1, M);
 | |
| 88110         WITH SBB^ DO
 | |
| 88120           BEGIN
 | |
| 88130           SBTRIMCNT := ROWCOUNT; SBSLICEDIM := ROWCOUNT; SBPRIMDIM := ROWCOUNT;
 | |
| 88140           SBTRIMS := NIL; SBUNITS := 0 END;
 | |
| 88150         CGFIRM;
 | |
| 88160         SEMANTICROUTINE(86) (*SR51*)
 | |
| 88170         END;
 | |
| 88180 (**)
 | |
| 88190       86: (*SR51*)
 | |
| 88200       (*FUNCTION: EXECUTED AT START OF NEW TRIMSCRIPT*)
 | |
| 88210         BEGIN
 | |
| 88220         SB := SRSTK[SRSUBP-1].SB;
 | |
| 88230         WITH SB^ DO
 | |
| 88240           BEGIN
 | |
| 88250           IF SBTRIMCNT=0 THEN SEMERR(ESE+48); (*TOO MANY TRIMSCRIPTS*)
 | |
| 88260           SBTRIMCNT := SBTRIMCNT-1;
 | |
| 88270           NEW(PTR); WITH PTR^ DO BEGIN LINK := SBTRIMS; TRTYPE := 0 END;
 | |
| 88280           SBTRIMS := PTR
 | |
| 88290           END
 | |
| 88300         END;
 | |
| 88310 (**)
 | |
| 88320       87: (*SR52*)
 | |
| 88330       (*FUNCTION: EXECUTED AFTER LOWER-BOUND OF TRIMMER*)
 | |
| 88340         WITH SRSTK[SRSUBP-1].SB^ DO
 | |
| 88350           BEGIN SBUNITS := SBUNITS+1; WITH SBTRIMS^ DO TRTYPE := TRTYPE+4 END;
 | |
| 88360 (**)
 | |
| 88370       88: (*SR53*)
 | |
| 88380       (*FUNCTION: EXECUTED AFTER UPPER-BOUND OF TRIMMER*)
 | |
| 88390         WITH SRSTK[SRSUBP-1].SB^ DO
 | |
| 88400           BEGIN SBUNITS := SBUNITS+1; WITH SBTRIMS^ DO TRTYPE := TRTYPE+2 END;
 | |
| 88410 (**)
 | |
| 88420       89: (*SR54A*)
 | |
| 88430       (*FUNCTION: EXECUTED BEFORE UNIT IN REVISED-LOWER-BOUND*)
 | |
| 88440         IF SRSTK[SRSUBP-1].SB^.SBMODE=MDSTRNG THEN SEMERR(ESE+32);
 | |
| 88450 (**)
 | |
| 88460       90: (*SR54B*)
 | |
| 88470       (*FUNCTION: EXECUTED AFTER REVISED-LOWER-BOUND OF TRIMMER*)
 | |
| 88480         BEGIN
 | |
| 88490         MEEKLOAD(MDINT, ESE+50);
 | |
| 88494         WITH SRSTK[SRSUBP-1].SB^ DO
 | |
| 88500           BEGIN SBUNITS := SBUNITS+1; WITH SBTRIMS^ DO TRTYPE := TRTYPE+1 END;
 | |
| 88510         END;
 | |
| 88520 (**)
 | |
| 88530 (*+53()
 | |
| 88540         END END ;
 | |
| 88550      PROCEDURE MONITOR3;
 | |
| 88560        VAR I: INTEGER;
 | |
| 88570        BEGIN
 | |
| 88580 (*+21() MONITORSEMANTIC(SRTN); ()+21*)
 | |
| 88590        CASE SRTN OF
 | |
| 88600 ()+53*)
 | |
| 88610       91: (*SR55*)
 | |
| 88620       (*FUNCTION: EXECUTED WHEN DEFAULT TRIMMER IS ENCOUNTERED.
 | |
| 88630             A DEFAULT TRIMMER CONSISTS OF A COLON (NO UMITS) *)
 | |
| 88640         WITH SRSTK[SRSUBP-1].SB^.SBTRIMS^ DO TRTYPE := TRTYPE+8;
 | |
| 88650 (**)
 | |
| 88660       92: (*SR56*)
 | |
| 88670       (*FUNCTION: EXECUTED AFTER SUBSCRIPT*)
 | |
| 88672         BEGIN
 | |
| 88674         IF BALFLAG THEN I := SRSTK[SRSUBP].SUBP ELSE I := SRSUBP;
 | |
| 88680         WITH SRSTK[I-1].SB^ DO
 | |
| 88690           BEGIN
 | |
| 88700           IF (SBSLICEDIM=1) AND (SBPRIMDIM<3) THEN WITH SRSTK[I+1].SB^ DO
 | |
| 88710             SBINF := SBINF-[SBSTKDELAY]; (*TO SAVE UNNECESSARY STACKING*)
 | |
| 88720           MEEKLOAD(MDINT, ESE+51);
 | |
| 88730           SBSLICEDIM := SBSLICEDIM-1;
 | |
| 88740           SBUNITS := SBUNITS+1; WITH SBTRIMS^ DO TRTYPE := TRTYPE+9
 | |
| 88750           END;
 | |
| 88752         END;
 | |
| 88760 (**)
 | |
| 88770       93: (*SR57*)
 | |
| 88780       (*FUNCTION: EXECUTED AFTER SLICE*)
 | |
| 88790         BEGIN
 | |
| 88800         SB := SRSTK[SRSUBP-1].SB;
 | |
| 88810         WITH SB^ DO
 | |
| 88820           BEGIN
 | |
| 88830           M := SRSTK[SRSUBP+1].SB^.SBMODE;
 | |
| 88840           IF SBTRIMCNT>0 THEN MODERR(M, ESE+49); (*TOO FEW TRIMSCRIPTS*)
 | |
| 88850           WITH M^ DO
 | |
| 88860             BEGIN REFED := MDV.MDID=MDIDREF; IF REFED THEN M := MDPRRMD END;
 | |
| 88870           WITH M^ DO
 | |
| 88880             IF MDV.MDID=MDIDROW THEN
 | |
| 88890               BEGIN M := FINDROW(MDPRRMD, SBSLICEDIM);
 | |
| 88900               IF REFED THEN M := FINDREF(M)
 | |
| 88910               END
 | |
| 88920             ELSE IF SBSLICEDIM=0 THEN
 | |
| 88930               M := MDCHAR;
 | |
| 88940           CGSLICE(SB, REFED);
 | |
| 88950           POPUNITS;
 | |
| 88960           SBMODE := M; SBINF := SBINF+[SBMORF,SBVOIDWARN];
 | |
| 88970           END
 | |
| 88980         END;
 | |
| 88990 (**)
 | |
| 89000 (**)
 | |
| 89010 (**)
 | |
| 89020 (**)
 | |
| 89030       94: (*SR58*)
 | |
| 89040       (*FUNCTION: EXECUTED AFTER LOWER-BOUND OF TRIMMER OR ACTUAL-ROWER.*)
 | |
| 89050         MEEKLOAD(MDINT, ESE+52);
 | |
| 89060 (**)
 | |
| 89070       95: (*SR59*)
 | |
| 89080       (*FUNCTION: EXECUTED AFTER UPPER-BOUND OF TRIMMER OR ACTUAL-ROWER.*)
 | |
| 89090         MEEKLOAD(MDINT, ESE+53);
 | |
| 89100 (**)
 | |
| 89110       96: (*SR60*)
 | |
| 89120       (*FUNCTION: EXECUTED AFTER ALL BUT LAST ACTUAL-PARAMETER IN ACTUAL-PARAMETER-LIST.*)
 | |
| 89130         BEGIN STRONG;
 | |
| 89140         CGFIRM;
 | |
| 89150         PARMSC
 | |
| 89160         END;
 | |
| 89170 (**)
 | |
| 89180       97: (*SR61*)
 | |
| 89190       (*FUNCTION: EXECUTED AFTER A CALL*)
 | |
| 89200         BEGIN
 | |
| 89210         STRONG;
 | |
| 89220         SB := SRSTK[SRSUBP+1].SB;
 | |
| 89230         WITH SB^.SBMODE^ DO
 | |
| 89240           BEGIN
 | |
| 89250 (*+01()   IF (MDV.MDID=MDIDPASC) AND (SB^.SBCNT<3) THEN
 | |
| 89260             BEGIN
 | |
| 89270             IF SB^.SBCNT>1 THEN WITH SRSTK[SRSEMP-1].SB^ DO SBINF := SBINF-[SBSTKDELAY];
 | |
| 89280             GETTOTAL(SRSTK[SRSEMP].SB)
 | |
| 89290             END
 | |
| 89300           ELSE
 | |
| 89310 ()+01*)
 | |
| 89320           CGFIRM;
 | |
| 89330           IF SB^.SBCNT<SB^.SBMODE^.MDV.MDCNT THEN SEMERR(ESE+72);
 | |
| 89340           SBB := SRSTK[SRSUBP-1].SB; (*FOR RESULT*)
 | |
| 89350           IF MDV.MDID=MDIDPROC THEN CGCALL(SB, SBB)
 | |
| 89360           ELSE (*MDV.MDID=MDIDPASC*) CGPASC(SB, SBB);
 | |
| 89370           IF SBB^.SBMODE=MDVOID THEN FILL(SBTVOID, SBB);
 | |
| 89380           POPUNITS;
 | |
| 89390           UNSTACKSB;
 | |
| 89400           WITH ROUTNL^ DO RNLOCRG := RNLOCRG-1;
 | |
| 89410           RGINFO := RGINFO-[DCLLOCRNG];
 | |
| 89420           SB := PUSHSB(MDVOID); (*RANGEXT EXPECTS SBB FOR ITS YIELD*)
 | |
| 89430           RANGEXT; (*FROM PARAMETERS RANGE*)
 | |
| 89440           UNSTACKSB; DISPOSE(SRSTK[SRSEMP].SB);SRSEMP := SRSEMP-1;
 | |
| 89450           STACKSB(SBB);
 | |
| 89460           SBB^.SBINF := SBB^.SBINF+[SBMORF]-[SBVOIDWARN]
 | |
| 89470           END
 | |
| 89480         END;
 | |
| 89490 (**)
 | |
| 89500       98: (*SR62*)
 | |
| 89510       (*FUNCTION: EXECUTED AFTER LEAP-GENERATOR.*)
 | |
| 89520         BEGIN
 | |
| 89530         M := SRPOPMD;
 | |
| 89540         IF M^.MDV.MDID=MDIDROW THEN
 | |
| 89550           SRSTK[SRSEMP].SB^.SBMODE := FINDREF(M)
 | |
| 89560         ELSE BEGIN SB := PUSHSB(FINDREF(M)); UNSTACKSB END;
 | |
| 89570         IF SRPLSTK[PLSTKP+1]^.LXV.LXIO=LXIOLOC THEN
 | |
| 89580           BEGIN
 | |
| 89590           RGINFO := RGINFO+[DCLLOCGEN];
 | |
| 89600           CGLEAPGEN(FALSE)
 | |
| 89610           END
 | |
| 89620         ELSE CGLEAPGEN(TRUE);
 | |
| 89630         WITH SRSTK[SRSEMP].SB^ DO SBINF := SBINF+[SBMORF,SBVOIDWARN]
 | |
| 89640         END;
 | |
| 89650 (**)
 | |
| 89660       99: (*SR63A*)
 | |
| 89670       (*FUNCTION: EXECUTED AT THE BEGINNING OF ROUTINE-TEXT WITH A NON-EMPTY
 | |
| 89680           FORMAL-DECLARATIVE-PACK-OPTION.
 | |
| 89690       *)
 | |
| 89700         BEGIN
 | |
| 89710         ROUTNNT;
 | |
| 89720         CGRTA;
 | |
| 89730         SUBSAVE
 | |
| 89740         END;
 | |
| 89750 (**)
 | |
| 89760       100: (*SR63B*)
 | |
| 89770       (*FUNCTION: EXECUTED AFTER ROUTINE-SPECIFICATION IN A ROUTINE-TEXT.
 | |
| 89780           SAVES THE MODE OF THE ROUTINE-TEXT AND ESTABLISHES THE MODE OF THE
 | |
| 89790           STRONG CONTEXT OF THE UNIT WHICH FOLLOWS.
 | |
| 89800       *)
 | |
| 89810         BEGIN
 | |
| 89820         ROUTNL^.RNPARAMS:=CURID;
 | |
| 89830         STB1:=DCIL;
 | |
| 89840         WHILE STB1<>NIL DO
 | |
| 89850           WITH ROUTNL^ ,STB1^ DO
 | |
| 89860            BEGIN
 | |
| 89870              IF STBLKTYP=STBDEFID THEN
 | |
| 89880                BEGIN
 | |
| 89890                STOFFSET := STOFFSET -PARAMOFFSET -RNPARAMS;
 | |
| 89910                CGPARM(STB1);
 | |
| 89920                END;
 | |
| 89930              STB1:=STTHREAD
 | |
| 89940            END;
 | |
| 89950         CURID:=0;I:=ALLOC(SIZIBBASE+SIZLEBBASE);
 | |
| 89960         CGFLINE;
 | |
| 89970         SCPUSH(SRSTK[SRSEMP].MD^.MDPRRMD);
 | |
| 89980         ROUTNL^.RNMODE := SRPOPMD
 | |
| 89990         END;
 | |
| 90000 (**)
 | |
| 90010       101: (*SR63C*)
 | |
| 90020       (*FUNCTION: EXECUTED AFTER ROUTINE-TEXT.*)
 | |
| 90030         BEGIN
 | |
| 90040         STRONG;
 | |
| 90050         RANGEXT;
 | |
| 90060         CGRTB;
 | |
| 90070         (*CURRENTLY, SRSTK[SRSEMP].SB REPRESENTS THE FINAL UNIT OF THE ROUTINE-TEXT, AND ITS
 | |
| 90080           YIELD SITS UPON THE CONCEPTUAL RTSTACK. NOW, SRSTK[SRSEMP].SB IS MODIFIED TO REPRESENT
 | |
| 90090           THE ROUTINE-TEXT ITSELF.
 | |
| 90100         *)
 | |
| 90102         WITH SRSTK[SRSEMP] DO WITH SB^, ROUTNL^ DO
 | |
| 90104           BEGIN
 | |
| 90110           IF ((RGSTATE MOD 16)=0) OR (STVAR IN DCLDEFN) THEN (*ANONYMOUS ROUTINE*) RNLEX := NIL
 | |
| 90120           ELSE WITH DCIL^ DO
 | |
| 90130             IF STBLKTYP=STBDEFOP THEN RNLEX := STLEX^.LINK
 | |
| 90140             ELSE RNLEX := STLEX;
 | |
| 90142           CGRTC;
 | |
| 90150           UNSTACKSB;
 | |
| 90180           SBMODE := RNMODE; SBINF := SBINF+[SBMORF,SBVOIDWARN];
 | |
| 90190           IF (RNNONIC=1) OR (RGLEV=2) THEN
 | |
| 90200              BEGIN
 | |
| 90210              SBXPTR := RNPROCBLK;
 | |
| 90220              SBLEVEL:=RNNECLEV;
 | |
| 90230              SBOFFSET:=0;
 | |
| 90240              SBLEN := SZADDR;
 | |
| 90250              SBTYP:=SBTPROC;
 | |
| 90260              ROUTNXT;
 | |
| 90270              STACKSB(SB);
 | |
| 90280 (*-05()(*-02()ASSIGNFLAD; ()-02*) ()-05*)
 | |
| 90290              END
 | |
| 90300           ELSE
 | |
| 90310              BEGIN
 | |
| 90320              ROUTNXT;
 | |
| 90330              CGRTD(RNPROCBLK);
 | |
| 90340              END
 | |
| 90350           END
 | |
| 90360         END;
 | |
| 90370 (**)
 | |
| 90380       102: (*SR65A*)
 | |
| 90390       (*FUNCTION: EXECUTED AFTER DEFINING-IDENTIFIER IN ROUTINE-IDENTITY-DEFINITION.*)
 | |
| 90400         BEGIN DEFID(SRPLSTK[PLSTKP]); SRSEMP := SRSEMP+1; SRSTK[SRSEMP].STB := DCIL END;
 | |
| 90410 (**)
 | |
| 90420       103: (*SR65B*)
 | |
| 90430       (*FUNCTION: EXECUTED AFTER DEFINING-IDENTIFIER IN ROUTINE-VARIABLE-DEFINITION.*)
 | |
| 90440         BEGIN DCLDEFN := [STVAR,STINIT]; SEMANTICROUTINE(102) (*SR65A*) END;
 | |
| 90450 (**)
 | |
| 90460       104: (*SR65C*)
 | |
| 90470       (*FUNCTION: EXECUTED AFTER DEFINING-OPERATOR IN ROUTINE-OPERATION-DEFINITION*)
 | |
| 90480         BEGIN DEFOP(SRPLSTK[PLSTKP]); SRSEMP := SRSEMP+1; SRSTK[SRSEMP].STB := DCIL END;
 | |
| 90490 (**)
 | |
| 90500       105: (*SR66A*)
 | |
| 90510       (*FUNCTION: EXECUTED AFTER ROUTINE-SPECIFICATION IN ROUTINE-IDENTITY-DEFINITION
 | |
| 90520           OR ROUTINE-VARIABLE-DEFINITION.*)
 | |
| 90530         BEGIN
 | |
| 90540         SEMANTICROUTINE(100) (*SR63B*);
 | |
| 90550         STB1 := SRSTK[SRSEMP].STB; SRSEMP := SRSEMP-1;
 | |
| 90560         WITH STB1^ DO
 | |
| 90570           IF STMODE=MDROUT THEN
 | |
| 90580             BEGIN
 | |
| 90590             IF RGLEV=3 THEN
 | |
| 90600               BEGIN
 | |
| 90610               STPTR := ROUTNL^.RNPROCBLK ;
 | |
| 90620               STLEVEL :=0 ; STDEFTYP := STDEFTYP+[STRCONST,STCONST];
 | |
| 90630               END;
 | |
| 90640             STMODE := ROUTNL^.RNMODE
 | |
| 90650             END
 | |
| 90660           ELSE STMODE := FINDREF(ROUTNL^.RNMODE)
 | |
| 90670         END;
 | |
| 90680 (**)
 | |
| 90690       106: (*SR66C*)
 | |
| 90700       (*FUNCTION: EXECUTED AFTER ROUTINE-SPECIFICATION IN ROUTINE-OPERATION-DEFINITION*)
 | |
| 90710         BEGIN
 | |
| 90720         SEMANTICROUTINE(100) (*SR63B*);
 | |
| 90730         STB1 := SRSTK[SRSEMP].STB; SRSEMP := SRSEMP-1;
 | |
| 90740         DEFOPM(STB1, ROUTNL^.RNMODE)
 | |
| 90750         END;
 | |
| 90760 (**)
 | |
| 90770       107: (*SR67A*)
 | |
| 90780       (*FUNCTION: EXECUTED AFTER DEFINING-IDENTIFIER IN A VARIABLE-DEFINITION WHICH HAS NO INITIALIZING UNIT.*)
 | |
| 90790         BEGIN DCLDEFN := [STVAR]; DEFID(SRPLSTK[PLSTKP]) END;
 | |
| 90800 (**)
 | |
| 90810       108: (*SR67B*)
 | |
| 90820       (*FUNCTION: EXECUTED AFTER DEFINING-IDENTIFIER IN AN IDENTITY-DEFINITION OR A VARIABLE-DEFINITION
 | |
| 90830           WHICH INCLUDES AN INITIALIZING UNIT. ENTERS THE IDENTIFIER IN THE SYMBOL TABLE AND
 | |
| 90840           ESTABLISHES THE MODE OF THE STRONG CONTEXT OF THE UNIT WHICH FOLLOWS.
 | |
| 90850       *)
 | |
| 90860         BEGIN SCPUSH(DCLMODE); DCLDEFN := DCLDEFN+[STINIT]; DEFID(SRPLSTK[PLSTKP]) END;
 | |
| 90870 (**)
 | |
| 90880       109: (*SR67C*)
 | |
| 90890       (*FUNCTION: EXECUTED AFTER THE DEFINING-OPERATOR IN AN OPERATION-DEFINITION*)
 | |
| 90900         BEGIN
 | |
| 90910         SCPUSH(DCLMODE);
 | |
| 90920         DEFOP(SRPLSTK[PLSTKP]);
 | |
| 90930         DEFOPM(DCIL, DCLMODE)
 | |
| 90940         END;
 | |
| 90950 (**)
 | |
| 90960       110: (*SR68A*)
 | |
| 90970       (*FUNCTION: EXECUTED AFTER UNIT IN IDENTITY- OR VARIABLE-DEFINITION*)
 | |
| 90980         BEGIN STRONG;
 | |
| 90990         WITH SRSTK[SRSEMP].SB^ DO
 | |
| 91000         IF NOT(STVAR IN DCLDEFN) AND
 | |
| 91010           ((SBTYP=SBTDEN) AND NOT(STUSED IN DCIL^.STDEFTYP)
 | |
| 91020          OR ((SBTYP=SBTPROC) AND (NOT(STUSED IN DCIL^.STDEFTYP) OR (ROUTNL^.RNLEVEL=0))))
 | |
| 91030         THEN
 | |
| 91040            DISALLOCIND
 | |
| 91050         ELSE CGFIRM;
 | |
| 91060         END;
 | |
| 91070 (**)
 | |
| 91080       111: (*SR68B*)
 | |
| 91090       (*FUNCTION: EXECUTED AFTER ROUTINE-TEXT IN ROUTINE-IDENTITY,
 | |
| 91100           -VARIABLE OR -OPERATION DEFINITION.
 | |
| 91110       *)
 | |
| 91120        WITH SRSTK[SRSEMP].SB^ DO
 | |
| 91130        IF NOT(STVAR IN DCLDEFN) AND ((SBTYP=SBTPROC) AND (NOT(STUSED IN DCIL^.STDEFTYP) OR (RGLEV=2)))
 | |
| 91140        THEN
 | |
| 91150           DISALLOCIND
 | |
| 91160        ELSE  CGFIRM;
 | |
| 91170 (**)
 | |
| 91180       112: (*SR69*)
 | |
| 91190       (*FUNCTION: EXECUTED AFTER A DECLARATION-LIST.*)
 | |
| 91200         BEGIN
 | |
| 91210         BRKASCR;CGFIXRG;
 | |
| 91220         END;
 | |
| 91230 (**)
 | |
| 91240       113: (*SR70*)
 | |
| 91250       (*FUNCTION: EXECUTED AFTER FIRST UNIT OF COLLATERAL-CLAUSE*)
 | |
| 91260         BEGIN
 | |
| 91270         RGINFO := RGINFO+[DCLCOLL];
 | |
| 91280         (*FINDTOPCOLL*)
 | |
| 91290         J := PLSTKP+2;
 | |
| 91300         R := RANGEL;
 | |
| 91310         WHILE (SRPLSTK[J]=LEXBEGIN) OR (SRPLSTK[J]=LEXOPEN) DO
 | |
| 91320           BEGIN
 | |
| 91330           J := J+1;
 | |
| 91340           WITH R^ DO
 | |
| 91350             BEGIN RGINF := RGINF+[DCLCOLL]; R := RGLINK END
 | |
| 91360           END;
 | |
| 91370         I := J-PLSTKP-1;
 | |
| 91380         (*FINDCOLLM*)
 | |
| 91390         M := SCL^.SCMODE;
 | |
| 91400         WITH M^ DO
 | |
| 91410           IF MDV.MDID=MDIDROW THEN
 | |
| 91420             BEGIN
 | |
| 91430             I := I-MDV.MDCNT;
 | |
| 91440             IF I>0 THEN M := MDPRRMD
 | |
| 91450             ELSE M := FINDROW(MDPRRMD, -I+1)
 | |
| 91460             END;
 | |
| 91470         WHILE I>0 DO WITH M^ DO
 | |
| 91480           BEGIN
 | |
| 91490           I := I-1;
 | |
| 91500           IF MDV.MDID<>MDIDSTRUCT THEN SEMERR(ESE+60)
 | |
| 91510           ELSE IF I>0 THEN M := MDSTRFLDS[0].MDSTRFMD
 | |
| 91520           END;
 | |
| 91530         NEW(SB);
 | |
| 91540         WITH SB^ DO
 | |
| 91550           BEGIN SBMODE := M; SBLEVEL := 0; SBDELAYS := 0; SBTYP := SBTVOID; SBINF := [SBCOLL] END;
 | |
| 91560         COLLSC(SB); STRONG;
 | |
| 91570         (*AT THIS POINT, THERE IS AN UNWANTED SUBSTACK MARKER AS SRSEMP-1, PUT THERE
 | |
| 91580           BY S-34. WE SHALL INSERT SB BELOW IT*)
 | |
| 91590         SRSTK[SRSEMP+1].SB := SRSTK[SRSEMP].SB; SRSEMP := SRSEMP+1;
 | |
| 91600         SRSTK[SRSUBP+1].SUBP := SRSTK[SRSUBP].SUBP; SRSUBP := SRSUBP+1;
 | |
| 91610         SRSTK[SRSUBP-1].SB := SB;
 | |
| 91620         IF NOT (DCLCOLL IN R^.RGINF) OR (SRPLSTK[J]^.LXV.LXIO<>LXIOUNLC) THEN CGLEFTCOLL(SB);
 | |
| 91630         CGCOLLUNIT;
 | |
| 91640         COLLSC(SB)
 | |
| 91650         END;
 | |
| 91660 (**)
 | |
| 91670       114: (*SR71*)
 | |
| 91680       (*FUNCTION: EXECUTED AFTER MIDDLE UNITS OF COLLATERAL-CLAUSE*)
 | |
| 91690         BEGIN STRONG; CGCOLLUNIT; COLLSC(SRSTK[SRSUBP-1].SB) END;
 | |
| 91700 (**)
 | |
| 91710       115: (*SR72*)
 | |
| 91720       (*FUNCTION: EXECUTED AFTER LAST UNIT OF COLLATERAL-CLAUSE*)
 | |
| 91730         BEGIN
 | |
| 91740         STRONG;
 | |
| 91750         CGCOLLUNIT;
 | |
| 91760         WITH SRSTK[SRSUBP-1].SB^ DO WITH SBMODE^ DO
 | |
| 91770           IF MDV.MDID=MDIDSTRUCT THEN
 | |
| 91780             IF MDV.MDCNT>SBLEVEL THEN SEMERR(ESE+58);
 | |
| 91790         J := PLSTKP+2; I := 0;
 | |
| 91800         WHILE (SRPLSTK[J]=LEXBEGIN) OR (SRPLSTK[J]=LEXOPEN) OR (SRPLSTK[J]^.LXV.LXIO=LXIOUNLC) DO
 | |
| 91810           BEGIN I := I+ORD(SRPLSTK[J]^.LXV.LXIO<>LXIOUNLC); J := J+1 END;
 | |
| 91820         CGFINCOLL(I);
 | |
| 91830         END;
 | |
| 91840 (**)
 | |
| 91850       116: (*SR73*)
 | |
| 91860       (*FUNCTION: EXECUTED AFTER MOID-DECLARER OF CAST*)
 | |
| 91870         SCPUSH(SRPOPMD);
 | |
| 91880 (**)
 | |
| 91890       117: (*SR74*)
 | |
| 91900       (*FUNCTION: EXECUTED AFTER A PRIORITY-DEFINITION*)
 | |
| 91910         BEGIN DEFPRIO(SRPLSTK[PLSTKP+1], SRPLSTK[PLSTKP]) END;
 | |
| 91920 (**)
 | |
| 91930       118: (*SR80*)
 | |
| 91940         BEGIN
 | |
| 91950         SEMANTICROUTINE(62) (*SR29*);
 | |
| 91960         DEFLAB(LEXLSTOP);
 | |
| 91970         STB1 := DCIL;
 | |
| 91980         WHILE STB1<>NIL DO WITH STB1^ DO
 | |
| 91990           BEGIN
 | |
| 92000           IF STBLKTYP=STBAPPLAB THEN SEMERRP(ESE+38, STLEX);
 | |
| 92010           STB1 := STTHREAD
 | |
| 92020           END;
 | |
| 92030         SBB := PUSHSB(MDVOID);(*RANGEXT EXPECTS IT*)
 | |
| 92040         RANGEXT;
 | |
| 92050         CGEND;
 | |
| 92060         ROUTNXT
 | |
| 92070         END;
 | |
| 92080 (**)
 | |
| 92090       119: (*SR81*)
 | |
| 92100       (*FUNCTION: EXECUTED AFTER SYNTACTIC ERROR, BEFORE START OF IGNORED SYMBOLS*)
 | |
| 92110         BEGIN
 | |
| 92120         ERRCHAR := '=';
 | |
| 92130         END;
 | |
| 92140 (**)
 | |
| 92150       120: (*SR00*)
 | |
| 92160         BEGIN
 | |
| 92170         I := CURID;
 | |
| 92180         ROUTNNT;
 | |
| 92190         CURID := I;
 | |
| 92200         ROUTNL^.RNLEVEL := 0;
 | |
| 92210         ROUTNL^.RNLENIDS := CURID;
 | |
| 92220         CGINIT;
 | |
| 92230         CGFLINE
 | |
| 92240         END;
 | |
| 92250 (**)
 | |
| 92252       121: (*FINISH*) (*INVOKED: AFTER END OF PROGRAM TO INDICATE TO THE PARSER THAT
 | |
| 92254                   ITS JOB IS DONE*)
 | |
| 92256         ENDOFPROG := TRUE;
 | |
| 92260       END
 | |
| 92270     END
 | |
| 92280 (*+53()
 | |
| 92290     ; BEGIN
 | |
| 92300     IF (SRTN>120) OR (SRTN<61) THEN MONITOR1
 | |
| 92310       ELSE IF SRTN<91 THEN MONITOR2
 | |
| 92320       ELSE MONITOR3
 | |
| 92330 ()+53*)
 | |
| 92340     END;
 | |
| 92350 (**)
 | |
| 92360 ()+83*)
 |