651 lines
26 KiB
OpenEdge ABL
651 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*)
|