650 lines
		
	
	
	
		
			26 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			650 lines
		
	
	
	
		
			26 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
| 01000 #include "rundecs.h"
 | |
| 01010     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
 | |
| 01020 (**)
 | |
| 01030 PROCEDURE CL68(PB: ASNAKED; RF: OBJECTP); EXTERN;
 | |
| 01040 (*+05() FUNCTION TIME: REAL; EXTERN; ()+05*)
 | |
| 01050 PROCEDURE ABORT; EXTERN;
 | |
| 01060 PROCEDURE ACLOSE(EFET: FETROOMP); EXTERN;
 | |
| 01070 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
 | |
| 01080 (**)
 | |
| 01090 (**)
 | |
| 01100 FUNCTION CRSTRUCT(TEMPLATE: DPOINT): OBJECTP; EXTERN;
 | |
| 01110 FUNCTION GETPROC(RN: OBJECTP): ASNAKED; EXTERN;
 | |
| 01120 (*+02() FUNCTION GETLINENO :INTEGER; EXTERN; ()+02*)
 | |
| 01130 (**)
 | |
| 01140 (**)
 | |
| 01150 PROCEDURE ERRORR(N :INTEGER); FORWARD;
 | |
| 01160 (**)
 | |
| 01170 (**)
 | |
| 01180 FUNCTION RELSUP(REF: OBJECTP): UNDRESSP;
 | |
| 01190 (*FINDS THE TRUE POINTER TO A REFERENCE VALUE*)
 | |
| 01200     BEGIN
 | |
| 01210     WITH REF^ DO
 | |
| 01220       CASE SORT OF
 | |
| 01230         REFSL1:
 | |
| 01240           RELSUP := INCPTR(ANCESTOR, OFFSET);
 | |
| 01250         REFSLN, UNDEF:
 | |
| 01260           ERRORR(IDREL);
 | |
| 01270         REF1, REF2, REFN, RECN, REFR, RECR, NILL:
 | |
| 01280           RELSUP := ASPTR(ORD(REF));
 | |
| 01290         CREF:
 | |
| 01300           RELSUP := IPTR;
 | |
| 01310         END;
 | |
| 01320     IF FPTST(REF^) THEN GARBAGE(REF)
 | |
| 01330     END;
 | |
| 01340 (**)
 | |
| 01350 (**)
 | |
| 01360 PROCEDURE ERRORR (*N: INTEGER*);
 | |
| 01370  TYPE BYTES = PACKED ARRAY [1..BYTESWIDTH] OF CHAR ;
 | |
| 01380   VAR RANGE: PRANGE;
 | |
| 01390       CURR: IPOINT;
 | |
| 01400       XCASE: 0..15;
 | |
| 01410       IDP: PIDBLK;
 | |
| 01420       RP,RQ : RECORD CASE SEVERAL OF
 | |
| 01430         1: ( PP : OBJECTPP ) ;
 | |
| 01440         2: ( PI : ^ INTEGER ) ;
 | |
| 01450         3: ( PR : ^ REAL ) ;
 | |
| 01460         4: ( PB : ^ BYTES ) ;
 | |
| 01470         5: ( PD : ^ INTEGER ) ;
 | |
| 01480         0 , 6 , 7 , 8 , 9 , 10 : () ;
 | |
| 01490         END ;
 | |
| 01500       INT: INTEGER ;
 | |
| 01510       POINT: OBJECTP ;
 | |
| 01520       PI1: ^INTEGER ;
 | |
| 01530       RANGECOUNT :INTEGER ; DECPOINT :OFFSETRANGE ; COUNT :INTEGER ;
 | |
| 01540       LOOPTYP : INTEGER ;
 | |
| 01550       THISWAS68: BOOLEAN ;
 | |
| 01560       PFET: FETROOMP;
 | |
| 01570 (*+02() LOCALRANGE :BOOLEAN ; ()+02*)
 | |
| 01580 (*+54() EXCEPT: UNDRESSP; IB: IPOINT; RG: PRANGE; ()+54*)
 | |
| 01590   PROCEDURE PRINTREAL(X: REAL);
 | |
| 01600     VAR RTG: REALTEGER;
 | |
| 01610       BEGIN WITH RTG DO
 | |
| 01620         BEGIN
 | |
| 01630         REA := X;
 | |
| 01640         IF (INT=INTUNDEF) (*+05()OR (INT2=INTUNDEF)()+05*) THEN WRITE(OUTPUT, ' UNDEFINED')
 | |
| 01650         ELSE WRITE(OUTPUT, X);
 | |
| 01660         END
 | |
| 01670       END;
 | |
| 01680   PROCEDURE PRINTSINGLE(II :INTEGER);
 | |
| 01690 (*+01()
 | |
| 01700     VAR RTG: PACKED RECORD CASE SEVERAL OF
 | |
| 01710           1: ( INT : INTEGER ) ;
 | |
| 01720           2: ( REA : REAL ) ;
 | |
| 01730           3: ( SIGN : BOOLEAN ; EXP : 0..3777B ; MANT : 0..7777777777777777B )
 | |
| 01740         END ;
 | |
| 01750       BEGIN WITH RTG DO
 | |
| 01760         BEGIN
 | |
| 01770         INT := II;
 | |
| 01780         IF II=INTUNDEF THEN WRITE('UNDEFINED')
 | |
| 01790         ELSE IF EXP=ORD(SIGN)*3777B THEN
 | |
| 01800           BEGIN WRITE(II:1);
 | |
| 01810           IF  (II<64) AND (II>=0)  THEN  WRITE(' (', CHR(II), ')');
 | |
| 01820           END
 | |
| 01830         ELSE WRITE(REA)
 | |
| 01840         END
 | |
| 01850       END;
 | |
| 01860 ()+01*)
 | |
| 01870 (*+02()
 | |
| 01880   BEGIN
 | |
| 01890     IF II = INTUNDEF THEN WRITE( OUTPUT , 'UNDEFINED' )
 | |
| 01900     ELSE
 | |
| 01910       BEGIN
 | |
| 01920         WRITE( OUTPUT , II : 1 ) ;
 | |
| 01930         IF ( II >= 32 ) AND ( II < 128 ) THEN WRITE( OUTPUT , ' (' , CHR( II ) , ')' )
 | |
| 01940       END
 | |
| 01950   END ;
 | |
| 01960 ()+02*)
 | |
| 01970 (*+05()
 | |
| 01980   BEGIN
 | |
| 01990     IF II = INTUNDEF THEN WRITE( OUTPUT , 'UNDEFINED' )
 | |
| 02000     ELSE
 | |
| 02010       BEGIN
 | |
| 02020         WRITE( OUTPUT , II : 1 ) ;
 | |
| 02030         IF ( II >= 32 ) AND ( II < 128 ) THEN WRITE( OUTPUT , ' (' , CHR( II ) , ')' )
 | |
| 02040       END
 | |
| 02050   END ;
 | |
| 02060 ()+05*)
 | |
| 02070   PROCEDURE PRINTDOUBLE( LV : A68LONG ) ;
 | |
| 02080 (*+01()
 | |
| 02090     BEGIN
 | |
| 02100     END ;
 | |
| 02110 ()+01*)
 | |
| 02120 (*+05()
 | |
| 02130     BEGIN
 | |
| 02140     PRINTREAL(LV);
 | |
| 02150     END ;
 | |
| 02160 ()+05*)
 | |
| 02170 (*+02()
 | |
| 02180 (*+12()
 | |
| 02190     BEGIN
 | |
| 02200     PRINTREAL(LV);
 | |
| 02210     END ;
 | |
| 02220 ()+12*)
 | |
| 02230 (*+13()
 | |
| 02240     BEGIN
 | |
| 02250     PRINTREAL(LV);
 | |
| 02260     END;
 | |
| 02270 ()+13*)
 | |
| 02280 ()+02*)
 | |
| 02290   PROCEDURE PRINTVAL(ANOBJECT :OBJECTP);FORWARD;
 | |
| 02300     PROCEDURE PRINTBIGD(ANOBJECT :OBJECTP; TEMPLATE :DPOINT; OFF :INTEGER);
 | |
| 02310       VAR I, J :INTEGER;
 | |
| 02320     PROCEDURE PRINTD(ANOBJECT :OBJECTP; TEMPLATE :DPOINT);
 | |
| 02330       LABEL 9;
 | |
| 02340       VAR TEMPOS, I :INTEGER;
 | |
| 02350         BEGIN
 | |
| 02360         RQ.PI := INCPTR(ANOBJECT, OFF) ;
 | |
| 02370         WITH RQ DO
 | |
| 02380         IF ORD(TEMPLATE)<=MAXSIZE THEN (*NOT STRUCT*)
 | |
| 02390           IF ORD(TEMPLATE)=0  THEN (*DRESSED*)
 | |
| 02400             IF PP ^ ^.SORT IN [REF1,REF2,CREF,REFSL1] THEN
 | |
| 02410               WRITE(OUTPUT , 'REF #', ORD( RELSUP(PP ^) ):(*-01()1()-01*)(*+01()6 OCT()+01*) )
 | |
| 02420             ELSE PRINTVAL(PP ^)
 | |
| 02430 (*-01()   ELSE IF ORD(TEMPLATE)>SZINT THEN PRINTDOUBLE(PR^) ()-01*)
 | |
| 02440           ELSE PRINTSINGLE( PI ^ )
 | |
| 02450         ELSE (*PART OF STRUCT*)
 | |
| 02460           BEGIN
 | |
| 02470           TEMPOS := 1;
 | |
| 02480           WHILE TEMPLATE^[TEMPOS]>=0 DO
 | |
| 02490             BEGIN
 | |
| 02500             IF TEMPLATE^[TEMPOS]=OFF THEN
 | |
| 02510               BEGIN
 | |
| 02520               IF PP ^ ^.SORT IN [REF1,CREF,REFSL1] THEN
 | |
| 02530                 WRITE(OUTPUT , 'REF #', ORD( RELSUP(PP ^) ):(*-01()1()-01*)(*+01()6 OCT()+01*) )
 | |
| 02540               ELSE PRINTVAL(PP ^);
 | |
| 02550               OFF := OFF+SZADDR;
 | |
| 02560               GOTO 9
 | |
| 02570               END;
 | |
| 02580             TEMPOS := TEMPOS+1
 | |
| 02590             END;
 | |
| 02600           INT := ORD( PI^ ) ;
 | |
| 02610           IF INT = INTUNDEF THEN
 | |
| 02620             BEGIN
 | |
| 02630               WRITE( OUTPUT , 'UNDEFINED' ) ;
 | |
| 02640               OFF := OFF + SZINT
 | |
| 02650             END
 | |
| 02660           ELSE CASE TEMPLATE^[TEMPOS+1+J] OF
 | |
| 02670             0: (*NO ACTION*);
 | |
| 02680             1: BEGIN WRITE( OUTPUT , PI ^ : 1 ); OFF := OFF+SZINT END;
 | |
| 02690             3: BEGIN WRITE( OUTPUT , PR ^ ); OFF := OFF+SZREAL END;
 | |
| 02700             5: BEGIN
 | |
| 02710                PRINTREAL(PR^); WRITE(OUTPUT, ' I'); OFF := OFF+SZREAL;
 | |
| 02720                PR := INCPTR(ANOBJECT, OFF);
 | |
| 02730                PRINTREAL(PR^);
 | |
| 02740                OFF := OFF+SZREAL;
 | |
| 02750                END;
 | |
| 02760             7: BEGIN WRITE(OUTPUT , '"', CHR( PI ^ ) , '"'); OFF := OFF+SZINT END;
 | |
| 02770             9: BEGIN
 | |
| 02780 (*+01()        IF PI^<0  THEN ()+01*)
 | |
| 02790 (*-01()        IF PI^<>0 THEN ()-01*)
 | |
| 02800                  WRITE(OUTPUT , '.TRUE') ELSE WRITE(OUTPUT , '.FALSE'); OFF := OFF+SZINT
 | |
| 02810                END;
 | |
| 02820             10: BEGIN WRITE( OUTPUT , PI ^ : (*-01()1()-01*)(*+01()20 OCT()+01*) ); OFF := OFF+SZINT END;
 | |
| 02830             11: BEGIN
 | |
| 02840                 (*+05() RQ.PI := ASPTR( ORD( PI ) * 2 ) ; ()+05*)
 | |
| 02850                 WRITE( OUTPUT , '"', (*+05()RQ.()+05*)PB ^ , '"') ;
 | |
| 02860                 OFF := OFF + SZINT
 | |
| 02870                 END ;
 | |
| 02880             12: BEGIN WRITE( OUTPUT , 'PROC'); OFF := OFF+1; OFF := OFF+SZADDR END;
 | |
| 02890             END;
 | |
| 02900       9: J := J+1;
 | |
| 02910           END
 | |
| 02920         END;
 | |
| 02930         BEGIN (* OF PRINTBIGD *)
 | |
| 02940         J := 0; I := OFF;
 | |
| 02950         IF ORD(TEMPLATE)>MAXSIZE THEN (*COMPLETE STRUCT*)
 | |
| 02960           BEGIN WRITE( OUTPUT , '(');
 | |
| 02970           WHILE OFF-I<TEMPLATE^[0] DO
 | |
| 02980             BEGIN IF J<>0 THEN WRITE( OUTPUT , ', '); PRINTD(ANOBJECT, TEMPLATE) END;
 | |
| 02990           WRITE( OUTPUT , ')')
 | |
| 03000           END
 | |
| 03010         ELSE PRINTD(ANOBJECT, TEMPLATE)
 | |
| 03020         END;
 | |
| 03030   PROCEDURE PRINTVAL;
 | |
| 03040     VAR I, K :INTEGER;
 | |
| 03050         ELEMENTS :OBJECTP;
 | |
| 03060       BEGIN (*OF PRINTVAL*)
 | |
| 03070       WITH ANOBJECT^ DO
 | |
| 03080         CASE SORT OF
 | |
| 03090           STRING:
 | |
| 03100             BEGIN
 | |
| 03110               WRITE( OUTPUT , ' STRING "');
 | |
| 03120               FOR I := 1 TO STRLENGTH DO WRITE( OUTPUT , CHARVEC[I]);
 | |
| 03130               WRITE( OUTPUT , '"')
 | |
| 03140             END;
 | |
| 03150           ROUTINE:
 | |
| 03160             BEGIN WRITE( OUTPUT , ' PROC   ');
 | |
| 03170                   WRITE( OUTPUT , PROCBL^.ROUTNAME.ALF, ' ', ENVCHAIN:(*-01()1()-01*)(*+01()6 OCT()+01*) ) END;
 | |
| 03180           STRUCT:
 | |
| 03190             BEGIN WRITE( OUTPUT , ' STRUCT');
 | |
| 03200             PRINTBIGD(INCPTR(ANOBJECT, STRUCTCONST), DBLOCK,  0)
 | |
| 03210             END;
 | |
| 03220           COVER:
 | |
| 03230             BEGIN
 | |
| 03240             IF (OPENED IN STATUS) AND NOT ASSOC THEN
 | |
| 03250               BEGIN
 | |
| 03260               ACLOSE(BOOK);
 | |
| 03270               IF NOT(STARTUP IN STATUS) THEN BEGIN PFET := BOOK;
 | |
| 03280                 DISPOSE(PFET) END;
 | |
| 03290               STATUS := STATUS-[OPENED];
 | |
| 03300               END;
 | |
| 03310             WRITE( OUTPUT , ' (', POFCPOS:1, ',', LOFCPOS:1, ',', COFCPOS:1, ')');
 | |
| 03320             END;
 | |
| 03330           REF1:
 | |
| 03340             PRINTSINGLE(VALUE);
 | |
| 03350 (*-01()   REF2:
 | |
| 03360             PRINTDOUBLE( LONGVALUE ) ; ()-01*)
 | |
| 03370           REFSL1:
 | |
| 03380             PRINTBIGD(ANCESTOR^.PVALUE, DBLOCK, OFFSET);
 | |
| 03390           CREF:
 | |
| 03400             PRINTSINGLE(IPTR^.FIRSTWORD);
 | |
| 03410           RECN, REFN:
 | |
| 03420             WRITE( OUTPUT , ' REF    #', ORD(ANOBJECT):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO STRUCT');
 | |
| 03430           REFR, RECR:
 | |
| 03440             WRITE( OUTPUT , ' REF    #', ORD(ANOBJECT):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ARRAY');
 | |
| 03450           REFSLN:
 | |
| 03460             WRITE( OUTPUT , ' REF         TO SLICE');
 | |
| 03470           NILL:
 | |
| 03480             WRITE( OUTPUT , ' NIL');
 | |
| 03490           UNDEF:
 | |
| 03500             WRITE( OUTPUT , ' UNDEFINED');
 | |
| 03510           END;
 | |
| 03520       END;  (* OF PRINTVAL *)
 | |
| 03530   PROCEDURE PRINTMULT(ANOBJECT:OBJECTP);
 | |
| 03540     VAR I, K :INTEGER;
 | |
| 03550         ELEMENTS:OBJECTP;
 | |
| 03560       BEGIN
 | |
| 03570       WITH ANOBJECT^ DO
 | |
| 03580         BEGIN
 | |
| 03590         IF SORT<>REFSLN THEN BEGIN WRITE( OUTPUT , ' ARRAY  '); ELEMENTS := PVALUE END
 | |
| 03600         ELSE BEGIN WRITE( OUTPUT , ' SLICE  '); ELEMENTS := ANCESTOR^.PVALUE END;
 | |
| 03610         WRITE( OUTPUT , '[');
 | |
| 03620         FOR I := ROWS DOWNTO 0 DO WITH DESCVEC[I] DO
 | |
| 03630           BEGIN WRITE( OUTPUT , LI:1, ':', UI:1); IF I>0 THEN WRITE( OUTPUT , ', ') END;
 | |
| 03640         WRITE( OUTPUT , ']');
 | |
| 03650         IF ROWS=0 THEN (*1 DIMENSION ONLY*) WITH DESCVEC[0] DO
 | |
| 03660           BEGIN
 | |
| 03670           FOR I := LI TO LI+2 DO IF I<=UI THEN
 | |
| 03680             BEGIN WRITELN( OUTPUT ) ; WRITE( OUTPUT , '            ');
 | |
| 03690             PRINTBIGD(INCPTR(ELEMENTS, DI*I-LBADJ), MDBLOCK, 0) END;
 | |
| 03700           IF UI-LI>5 THEN
 | |
| 03710             BEGIN WRITELN( OUTPUT ); WRITE( OUTPUT , '            ...'); K := UI-2 END
 | |
| 03720           ELSE K := LI + 3 ;
 | |
| 03730           FOR I := K TO UI DO
 | |
| 03740             BEGIN WRITELN( OUTPUT ); WRITE( OUTPUT , '            ');
 | |
| 03750             PRINTBIGD(INCPTR(ELEMENTS, DI*I-LBADJ), MDBLOCK, 0) END
 | |
| 03760           END
 | |
| 03770         END
 | |
| 03780       END;
 | |
| 03790     BEGIN (*OF ERROR*)
 | |
| 03800 (*+02()LOCALRANGE := TRUE;()+02*)
 | |
| 03810     CURR := DYNAMIC(ME);
 | |
| 03820 (*+54()
 | |
| 03830     IB := CURR;
 | |
| 03840     REPEAT
 | |
| 03850       SETMYSTATIC(IB);
 | |
| 03860       IF ISA68(IB) THEN
 | |
| 03870         BEGIN
 | |
| 03880         RG := FIRSTRG.RIBOFFSET;
 | |
| 03890         WHILE (RG^.FIRSTW.TRACESAVE=NIL) AND (RG^.RIBOFFSET<>FIRSTRG.RIBOFFSET) DO
 | |
| 03900           RG := RG^.RIBOFFSET;
 | |
| 03910         END;
 | |
| 03920       IB := DYNAMIC(IB);
 | |
| 03930     UNTIL (SCOPE=1) OR (RG^.FIRSTW.TRACESAVE<>NIL);
 | |
| 03940     WITH RG^ DO
 | |
| 03950       IF (FIRSTW.TRACESAVE<>NIL) AND (N<>0) THEN
 | |
| 03960         BEGIN
 | |
| 03970         SETMYSTATIC(CURR);
 | |
| 03980         EXCEPT := INCPTR(CRSTRUCT(EXCEPTDB), STRUCTCONST);
 | |
| 03990         EXCEPT^.FIRSTWORD := N;
 | |
| 04000         CL68(GETPROC(FIRSTW.TRACESAVE), INCPTR(EXCEPT, -STRUCTCONST));
 | |
| 04010         END;
 | |
| 04020 ()+54*)
 | |
| 04030     WRITELN( OUTPUT );
 | |
| 04040     WRITELN( OUTPUT , ' RUN-TIME ERROR');
 | |
| 04050     WRITE( OUTPUT , ' ');
 | |
| 04060     IF (N>56) OR (N<0) THEN WRITE( OUTPUT , (*+54()'USER DEFINED ',()+54*) 'ERROR NO. ', N:1)
 | |
| 04070     ELSE
 | |
| 04080     CASE N OF
 | |
| 04090 (*+05()
 | |
| 04100       -16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1: (* SYSTEM INTERRUPTS *)
 | |
| 04110         WRITE( OUTPUT ,  'SIGNAL NUMBER ' , -N:1 ) ;
 | |
| 04120 ()+05*)
 | |
| 04130       0: (*NO FURTHER ACTION*);
 | |
| 04140       1: (*RASSIG*)
 | |
| 04150         WRITE( OUTPUT ,  'ASSIGNATION TO UNDEFINED NAME');
 | |
| 04160       2: (*RSEL*)
 | |
| 04170         WRITE( OUTPUT ,  'SELECTION FROM UNDEFINED STRUCTURE');
 | |
| 04180       3: (*RDEREF*)
 | |
| 04190         WRITE( OUTPUT ,  'DEREFERENCING UNDEFINED NAME');
 | |
| 04200       4: (*RASSIGNIL*)
 | |
| 04210         WRITE( OUTPUT ,  'ASSIGNATION TO .NIL');
 | |
| 04220       5: (*RSELNIL*)
 | |
| 04230         WRITE( OUTPUT ,  'SELECTION FROM .NIL');
 | |
| 04240       6: (*RDEREFNIL*)
 | |
| 04250         WRITE( OUTPUT ,  'DEREFERENCING .NIL');
 | |
| 04260       7: (*IDREL*)
 | |
| 04270         WRITE( OUTPUT ,  'IDENTITY-RELATION INVOLVING UNDEFINED NAME, OR NAME OF SLICE');
 | |
| 04280       8: (*RPOWNEG*)
 | |
| 04290         WRITE( OUTPUT ,  'RAISING AN .INT TO A -VE POWER');
 | |
| 04300       9: (*RBYTESPACK*)
 | |
| 04310         WRITE( OUTPUT ,  'BYTESPACK ON .STRING LONGER THAN BYTES WIDTH');
 | |
| 04320       13: (*RCLOWER*)
 | |
| 04330         WRITE( OUTPUT ,  'UNDEFINED LOWER-BOUND IN ACTUAL-DECLARER');
 | |
| 04340       14: (*RCUPPER*)
 | |
| 04350         WRITE( OUTPUT ,  'UNDEFINED UPPER-BOUND IN ACTUAL-DECLARER');
 | |
| 04360       15: (*RLWUPB*)
 | |
| 04370         WRITE( OUTPUT ,  'LEFT OPERAND OF .LWB OR .UPB OUT OF RANGE');
 | |
| 04380       16: (*RSL1ERROR*)
 | |
| 04390         WRITE( OUTPUT , 'SUBSCRIPT (OR LOWER-BOUND) TOO LOW');
 | |
| 04400       17: (*RSL2ERROR*)
 | |
| 04410         WRITE( OUTPUT , 'SUBSCRIPT (OR UPPER-BOUND) TOO HIGH');
 | |
| 04420       18: (*RSLICE*)
 | |
| 04430         WRITE( OUTPUT , 'SLICE FROM UNDEFINED ARRAY');
 | |
| 04440       19: (*RSLICENIL*)
 | |
| 04450         WRITE( OUTPUT , 'SLICE FROM .NIL');
 | |
| 04460       20: (*RMULASS*)
 | |
| 04470         WRITE( OUTPUT , 'BOUNDS MISMATCH IN ASSIGNATION OF ARRAY');
 | |
| 04480       21: (*RROUTN*)
 | |
| 04490         WRITE( OUTPUT , 'CALL OF UNDEFINED ROUTINE');
 | |
| 04500       22: (*RCHARERROR*)
 | |
| 04510         WRITE( OUTPUT , 'PRINTING NON-EXISTENT .CHAR');
 | |
| 04520       23: (*RSCOPE*)
 | |
| 04530         WRITE( OUTPUT , 'SCOPE VIOLATION');
 | |
| 04540       24: (*RARG*)
 | |
| 04550         WRITE( OUTPUT , 'ARGUMENT OF ZERO IS IMPOSSIBLE');
 | |
| 04560       RDUMMY:
 | |
| 04570         WRITE( OUTPUT , 'FEATURE NOT IMPLEMENTED YET');
 | |
| 04580       NOREAD,NOWRITE,NOBIN,NORESET,NOSET,NOESTAB:
 | |
| 04590         WRITE( OUTPUT , 'IMPOSSIBLE TRANSPUT OPERATION');
 | |
| 04600       NOTOPEN:
 | |
| 04610         WRITE( OUTPUT , 'FILE NOT OPEN');
 | |
| 04620       NOPHYSICAL:
 | |
| 04630         WRITE( OUTPUT , 'PHYSICAL END OF FILE REACHED');
 | |
| 04640       NOLOGICAL:
 | |
| 04650         WRITE( OUTPUT , 'LOGICAL END OF FILE REACHED');
 | |
| 04660       NOMOOD:
 | |
| 04670         WRITE( OUTPUT , 'NOT KNOWN WHETHER READING OR WRITING');
 | |
| 04680       POSMIN:
 | |
| 04690         WRITE( OUTPUT , '(P,L,C) < (1,1,1)');
 | |
| 04700       POSMAX:
 | |
| 04710         WRITE( OUTPUT , '(P,L,C) > PHYSICAL FILE SIZE');
 | |
| 04720       SMALLLINE:
 | |
| 04730         WRITE( OUTPUT , 'LINE TOO SHORT FOR VALUE');
 | |
| 04740       WRONGCHAR:
 | |
| 04750         WRITE( OUTPUT , 'UNACCEPTABLE CHARACTER READ');
 | |
| 04760       NODIGIT:
 | |
| 04770         WRITE( OUTPUT , 'DIGIT EXPECTED');
 | |
| 04780       WRONGVAL:
 | |
| 04790         WRITE( OUTPUT , 'VALUE OUT OF RANGE');
 | |
| 04800       WRONGMULT:
 | |
| 04810         WRITE( OUTPUT , 'LOWER BOUND OF ASSOCIATED ARRAY /= 1');
 | |
| 04820       NOALTER,NOSHIFT:
 | |
| 04830         WRITE( OUTPUT , 'ILLEGAL CHANGE TO/FROM BINARY TRANSPUT');
 | |
| 04840       END;
 | |
| 04850     WRITE( OUTPUT , ', DETECTED IN ');
 | |
| 04860     THISWAS68 := FALSE ;
 | |
| 04870     REPEAT
 | |
| 04880       SETMYSTATIC(CURR);
 | |
| 04890       IF ISA68(CURR) THEN
 | |
| 04900       BEGIN
 | |
| 04910       THISWAS68 := TRUE ;
 | |
| 04920 (*+02()IF LOCALRANGE THEN
 | |
| 04930           BEGIN
 | |
| 04940           WRITE(OUTPUT, 'LINE ', GETLINENO:1);
 | |
| 04950           LOCALRANGE := FALSE;
 | |
| 04960           END
 | |
| 04970        ELSE ()+02*)
 | |
| 04980             WRITE( OUTPUT , 'LINE ', LINENO:1);
 | |
| 04990       IF SCOPE<>1 THEN
 | |
| 05000         WRITELN( OUTPUT ,' OF PROCEDURE ', PROCBL^.ROUTNAME.ALF)
 | |
| 05010       ELSE WRITELN( OUTPUT , ' OF MAIN PROGRAM');
 | |
| 05020       RANGE := FIRSTRG.RIBOFFSET; RANGECOUNT := 0;
 | |
| 05030       REPEAT WITH RANGE^ DO
 | |
| 05040         WITH FIRSTW , RP  DO
 | |
| 05050         BEGIN
 | |
| 05060         WRITELN( OUTPUT );
 | |
| 05070         IF RIBOFFSET<>FIRSTRG.RIBOFFSET THEN
 | |
| 05080           BEGIN WRITE( OUTPUT , ' RANGE ', RANGECOUNT:2); IDP := RGIDBLK;
 | |
| 05090           (*-41() PP := INCPTR ( RANGE , RGCONST ) ; ()-41*)
 | |
| 05100           (*+41() PP := ASPTR ( ORD( RANGE ) ) ; ()+41*)
 | |
| 05110           END
 | |
| 05120         ELSE IF SCOPE<>1 THEN
 | |
| 05130           BEGIN WRITE( OUTPUT , ' PARAMETERS'); IDP := RGIDBLK;
 | |
| 05140           (*-41() PP :=ASPTR(CURR-PARAMOFFSET-PROCBL^.PARAMS) ()-41*)
 | |
| 05150           (*+41() PP :=ASPTR((*+02()ARGBASE()+02*)(CURR)-PARAMOFFSET+PROCBL^.PARAMS) ()+41*)
 | |
| 05160           END
 | |
| 05170         ELSE IDP := NIL;
 | |
| 05180         IF IDP<>NIL THEN
 | |
| 05190           BEGIN
 | |
| 05200           RANGECOUNT := RANGECOUNT-1;
 | |
| 05210           (*-41() WHILE ORD ( PP ) < ORD ( RGNEXTFREE ) DO ()-41*)
 | |
| 05220           (*+41() WHILE ORD ( PP ) > ORD ( RGLASTUSED ) DO ()+41*)
 | |
| 05230             BEGIN
 | |
| 05240               IDP := INCPTR(IDP, -SZIDBLOCK);
 | |
| 05250               WITH IDP ^ DO
 | |
| 05260                 BEGIN
 | |
| 05270                   (*+41()
 | |
| 05280                   IF IDSIZE <> 0 THEN
 | |
| 05290                     PP := INCPTR( PP , - IDSIZE )
 | |
| 05300                   ELSE
 | |
| 05310                     PP := INCPTR( PP , - SZADDR ) ;
 | |
| 05320                   ()+41*)
 | |
| 05330                 WRITELN( OUTPUT ); WRITE( OUTPUT , ' ', ALF);
 | |
| 05340                 IF XMODE>=16 THEN
 | |
| 05350                   BEGIN WRITE( OUTPUT , ' LOC'); XCASE := XMODE-16 END
 | |
| 05360                 ELSE BEGIN WRITE( OUTPUT , '    '); XCASE := XMODE END;
 | |
| 05370                 INT := ORD (PI^) ;
 | |
| 05380                 IF INT=INTUNDEF THEN WRITE( OUTPUT , '        UNDEFINED')
 | |
| 05390                 ELSE CASE XCASE OF
 | |
| 05400                   0: (*REF*)
 | |
| 05410                     WITH PP ^ ^ DO
 | |
| 05420                   CASE SORT OF
 | |
| 05430                     REF1, REF2, CREF, REFSL1:
 | |
| 05440                       BEGIN
 | |
| 05450                         WRITE( OUTPUT , ' REF    #', ORD(RELSUP(PP ^)):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ') ;
 | |
| 05460                         PRINTVAL(PP ^)
 | |
| 05470                       END;
 | |
| 05480                     RECN, REFN:
 | |
| 05490                       BEGIN
 | |
| 05500                         WRITE( OUTPUT , ' REF   #', ORD(PP ^):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ') ;
 | |
| 05510                         PRINTVAL(PVALUE)
 | |
| 05520                       END;
 | |
| 05530                     RECR, REFR:
 | |
| 05540                       BEGIN
 | |
| 05550                         WRITE( OUTPUT , ' REF   #', ORD(PP ^):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ') ;
 | |
| 05560                         PRINTMULT(PP ^)
 | |
| 05570                       END;
 | |
| 05580                     REFSLN:
 | |
| 05590                       BEGIN WRITE( OUTPUT , ' REF           TO '); PRINTMULT(PP ^) END;
 | |
| 05600                     NILL:
 | |
| 05610                       WRITE( OUTPUT , ' REF    NIL');
 | |
| 05620                     UNDEF:
 | |
| 05630                       WRITE( OUTPUT , ' REF    UNDEFINED');
 | |
| 05640                     END;
 | |
| 05650                   1: (*INT*)
 | |
| 05660                     WRITE( OUTPUT , ' INT    ', PI ^ :1);
 | |
| 05670                   3: (*REAL*)
 | |
| 05680                     WRITE( OUTPUT , ' REAL   ', PR ^ );
 | |
| 05690                   5: (*COMPL*)
 | |
| 05700                     BEGIN
 | |
| 05710                       IF XMODE>=16 THEN POINT := PP ^ ^.PVALUE ELSE POINT := PP ^ ;
 | |
| 05720                       WITH POINT ^ DO
 | |
| 05730                        BEGIN WRITE(OUTPUT, ' COMPL  '); PRINTREAL(RE); WRITE(OUTPUT, ' I'); PRINTREAL(IM); END
 | |
| 05740                     END;
 | |
| 05750                   7: (*CHAR*)
 | |
| 05760                     WRITE( OUTPUT , ' CHAR   "', CHR( PI ^ ) , '"');
 | |
| 05770                   8: (*STRING*)
 | |
| 05780                     IF PP^=UNDEFIN THEN WRITE( OUTPUT , ' STRING ""')
 | |
| 05790                     ELSE PRINTVAL(PP^);
 | |
| 05800                   9: (*BOOL*)
 | |
| 05810 (*+01()             IF PI^<0  THEN ()+01*)
 | |
| 05820 (*-01()             IF PI^<>0 THEN ()-01*)
 | |
| 05830                       WRITE( OUTPUT , ' BOOL   .TRUE') ELSE WRITE( OUTPUT , ' BOOL   .FALSE');
 | |
| 05840                   10: (*BITS*)
 | |
| 05850                     WRITE( OUTPUT , ' BITS   ', PI ^ : (*-01()1()-01*)(*+01()20 OCT()+01*) );
 | |
| 05860                   11: (*BYTES*)
 | |
| 05870                     BEGIN
 | |
| 05880                     (*+05() RQ.PI := ASPTR( ORD( PI ) * 2 ) ; ()+05*)
 | |
| 05890                     WRITE( OUTPUT , ' BYTES  "', (*+05()RQ.()+05*)PB ^ , '"' )
 | |
| 05900                     END ;
 | |
| 05910                   12: (*PROC*)
 | |
| 05920                     PRINTVAL(PP ^);
 | |
| 05930                   13: (*STRUCT*)
 | |
| 05940                     BEGIN IF XMODE>=16 THEN POINT := PP ^ ^.PVALUE ELSE POINT := PP ^ ;  PRINTVAL(POINT) END;
 | |
| 05950                   14: (*ROW*)
 | |
| 05960                     PRINTMULT(PP ^);
 | |
| 05970                   END ;
 | |
| 05980                   (*-41()
 | |
| 05990                   IF IDSIZE<>0 THEN
 | |
| 06000                     PP := INCPTR ( PP , IDSIZE )
 | |
| 06010                   ELSE
 | |
| 06020                     PP := INCPTR ( PP , SZADDR )
 | |
| 06030                   ()-41*)
 | |
| 06040                 END
 | |
| 06050               END;
 | |
| 06060             END;
 | |
| 06070             IF (RIBOFFSET=FIRSTRG.RIBOFFSET) AND (SCOPE <> 1) THEN (*PARAMS*)
 | |
| 06080               PP:=(*+41() ASPTR(ORD(RANGE))       ()+41*)
 | |
| 06090                   (*-41() INCPTR(RANGE,RGCONST)   ()-41*)
 | |
| 06100             ELSE
 | |
| 06110               PP := (*+41() INCPTR(RGLASTUSED, -SZINT ); ()+41*)
 | |
| 06120                     (*-41() ASPTR(ORD(RGNEXTFREE))     ; ()-41*)
 | |
| 06130             LOOPTYP := PD^ ;
 | |
| 06140             FOR COUNT := 1 TO LOOPCOUNT DO
 | |
| 06150               BEGIN
 | |
| 06160               WRITELN( OUTPUT ) ;
 | |
| 06170               CASE LOOPTYP OF
 | |
| 06180                1: BEGIN
 | |
| 06190                   PI1 := INCPTR( PI , 2 * STACKSZINT ) ;
 | |
| 06200                   WRITELN( OUTPUT , '.FOR ', PI1 ^ :1);
 | |
| 06210                   PI1 := INCPTR( PI , STACKSZINT ) ;
 | |
| 06220                   WRITELN( OUTPUT , '.BY  ', PI1 ^ :1);
 | |
| 06230                   PI1 := INCPTR( PI , 3 * STACKSZINT ) ;
 | |
| 06240                   WRITE  ( OUTPUT , '.TO  ', PI1 ^ :1);
 | |
| 06250                   PD := INCPTR( PD , 4 * STACKSZINT )
 | |
| 06260                   END;
 | |
| 06270                2: BEGIN
 | |
| 06280                   PI1 := INCPTR( PI , STACKSZINT ) ;
 | |
| 06290                   WRITELN( OUTPUT , '.FOR ', PI1 ^ :1);
 | |
| 06300                   PI1 := INCPTR( PI , 2 * STACKSZINT ) ;
 | |
| 06310                   WRITE  ( OUTPUT , '.TO  ', PI1 ^  :1);
 | |
| 06320                   PD := INCPTR( PD , 3 * STACKSZINT )
 | |
| 06330                   END;
 | |
| 06340                3: BEGIN
 | |
| 06350                   PI1 := INCPTR( PI , 2 * STACKSZINT ) ;
 | |
| 06360                   WRITELN( OUTPUT , '.FOR ', PI1 ^ :1);
 | |
| 06370                   PI1 := INCPTR( PI , STACKSZINT ) ;
 | |
| 06380                   WRITE  ( OUTPUT , '.BY  ', PI1 ^ :1);
 | |
| 06390                   PD := INCPTR( PD , 3 * STACKSZINT )
 | |
| 06400                   END;
 | |
| 06410                4: BEGIN
 | |
| 06420                   PI1 := INCPTR( PI , STACKSZINT ) ;
 | |
| 06430                   WRITE  ( OUTPUT , '.FOR ', PI1 ^ :1);
 | |
| 06440                   PD := INCPTR( PD , 2 * STACKSZINT )
 | |
| 06450                   END
 | |
| 06460               END;
 | |
| 06470               LOOPTYP := PD^
 | |
| 06480             END;
 | |
| 06490           RANGE := RIBOFFSET;
 | |
| 06500           WRITELN( OUTPUT )
 | |
| 06510         END
 | |
| 06520       UNTIL RANGE=FIRSTRG.RIBOFFSET;
 | |
| 06530       WRITELN( OUTPUT );
 | |
| 06540       WRITE( OUTPUT , ' WHICH WAS CALLED FROM ')
 | |
| 06550       END
 | |
| 06560      ELSE THISWAS68 := FALSE ;
 | |
| 06570       CURR := DYNAMIC(CURR);
 | |
| 06580     UNTIL (SCOPE=1) AND THISWAS68 ;
 | |
| 06590    WRITELN( OUTPUT , 'STANDARD-PRELUDE');
 | |
| 06600 (*+01()
 | |
| 06610     WRITELN(' CPU ', (CPUCLOCK+CLOCK)/1000:6:3);
 | |
| 06620     MESSAGE(' RUN ABORTED');
 | |
| 06630 ()+01*)
 | |
| 06640 (*+05()
 | |
| 06650     WRITELN(ERROR, ' RUN ABORTED');
 | |
| 06660     WRITELN(ERROR, ' CPU ', TIME :5:2);
 | |
| 06670 ()+05*)
 | |
| 06680     ABORT
 | |
| 06690     END;
 | |
| 06700 (**)
 | |
| 06710 (**)
 | |
| 06720 (*+01()
 | |
| 06730 PROCEDURE PDERR(VAR A: INTEGER; J,K,L,M: INTEGER; N: BOOLEAN;
 | |
| 06740                   VAR F: TEXT; VAR MSG: MESS);
 | |
| 06750 (*TO CATCH NOS- AND PASCAL-DETECTED ERRORS*)
 | |
| 06760   VAR I: INTEGER;
 | |
| 06770     BEGIN
 | |
| 06780     SETMYSTATIC(DYNAMIC(ME));
 | |
| 06790     WRITELN(F);
 | |
| 06800     I := 1;
 | |
| 06810     REPEAT
 | |
| 06820       WRITE(F, MSG[I]); I := I+1
 | |
| 06830     UNTIL ORD(MSG[I])=0;
 | |
| 06840     WRITELN(F);
 | |
| 06850     ERRORR(0);
 | |
| 06860     END;
 | |
| 06870 ()+01*)
 | |
| 06880 (**)
 | |
| 06890 (**)
 | |
| 06900 (*+54()
 | |
| 06910 PROCEDURE OFFERROR;
 | |
| 06920   VAR CURR, IB: IPOINT; RG: PRANGE;
 | |
| 06930     BEGIN
 | |
| 06940     CURR := STATIC(ME);
 | |
| 06950     IB := CURR;
 | |
| 06960     REPEAT
 | |
| 06970       SETMYSTATIC(IB);
 | |
| 06980       IF ISA68(IB) THEN
 | |
| 06990         BEGIN
 | |
| 07000         RG := FIRSTRG.RIBOFFSET;
 | |
| 07010         WHILE (RG^.FIRSTW.TRACESAVE=NIL) AND (RG^.RIBOFFSET<>FIRSTRG.RIBOFFSET) DO
 | |
| 07020           RG := RG^.RIBOFFSET;
 | |
| 07030         END;
 | |
| 07040       IB := DYNAMIC(IB);
 | |
| 07050     UNTIL (SCOPE=1) OR (RG^.FIRSTW.TRACESAVE<>NIL);
 | |
| 07060     WITH RG^.FIRSTW DO WITH TRACESAVE ^ DO
 | |
| 07070       IF TRACESAVE<>NIL THEN
 | |
| 07080       BEGIN
 | |
| 07090       FDEC; IF FTST THEN GARBAGE(TRACESAVE);
 | |
| 07100       TRACESAVE := NIL;
 | |
| 07110       END;
 | |
| 07120     SETMYSTATIC(CURR);
 | |
| 07130     END;
 | |
| 07140 (**)
 | |
| 07150 (**)
 | |
| 07160 PROCEDURE ONERROR(R: OBJECTP);
 | |
| 07170   VAR LOCRG: DEPTHRANGE;
 | |
| 07180       RG: PRANGE;
 | |
| 07190     BEGIN
 | |
| 07200     LOCRG := 0;
 | |
| 07210     RG := FIRSTRG.RIBOFFSET;
 | |
| 07220     WHILE RG^.RIBOFFSET<>FIRSTRG.RIBOFFSET DO
 | |
| 07230       BEGIN RG := RG^.RIBOFFSET; LOCRG := LOCRG+1 END;
 | |
| 07240     IF SCOPE+LOCRG<R^.OSCOPE THEN ERRORR(RSCOPE);
 | |
| 07250     WITH FIRSTRG.RIBOFFSET^ DO
 | |
| 07260       BEGIN
 | |
| 07270       IF FIRSTW.TRACESAVE<>NIL THEN WITH FIRSTW.TRACESAVE^ DO
 | |
| 07280         BEGIN FDEC; IF FTST THEN GARBAGE(FIRSTW.TRACESAVE) END;
 | |
| 07290       FIRSTW.TRACESAVE := R;
 | |
| 07300       FPINC(R^);
 | |
| 07310       END;
 | |
| 07320     END;
 | |
| 07330 (**)
 | |
| 07340 (**)
 | |
| 07350 FUNCTION MAKEXCE(N: INTEGER): OBJECTP;
 | |
| 07360   VAR NEWSTRUCT: UNDRESSP;
 | |
| 07370     BEGIN
 | |
| 07380     NEWSTRUCT := INCPTR(CRSTRUCT(EXCEPTDB), STRUCTCONST);
 | |
| 07390     NEWSTRUCT^.FIRSTWORD := N;
 | |
| 07400     MAKEXCE := INCPTR(NEWSTRUCT, -STRUCTCONST);
 | |
| 07410     END;
 | |
| 07420 (**)
 | |
| 07430 (**)
 | |
| 07440 ()+54*)
 | |
| 07450 (*-02() BEGIN END ; ()-02*)
 | |
| 07460 (*+01()
 | |
| 07470 BEGIN (*OF MAIN PROGRAM*)
 | |
| 07480 END (*OF EVERYTHING*).
 | |
| 07490 ()+01*)
 |