mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-13 15:17:03 +00:00
2. Commit listings and updated compiler source from running PASCAL.PATCHES.card under Mark XV system software. See README.txt for details. 3. Minor change to HMMS2.TEST.card and .lst to reflect symmetry in the chimney temperature profile.
7256 lines
700 KiB
Plaintext
7256 lines
700 KiB
Plaintext
LABEL 000000000LINE 00186197?EXECUTE PATCH/MERGE PATCH /MERGE
|
||
|
||
|
||
|
||
|
||
|
||
BURROUGHS B-5700 PATCH/MERGE PROGRAM MARK XV.3.00 WEDNESDAY, 07/16/86, 11:45 AM.
|
||
|
||
|
||
|
||
|
||
|
||
INPUT
|
||
********** **********************************************************************************
|
||
|
||
|
||
|
||
$. 39 PATCHES FOR PASCAL WITH CONFLICTS
|
||
$*COMPILE PASCAL/NEW XALGOL LIBRARY
|
||
$*XALGOL STACK=800
|
||
$*XALGOL FILE TAPE=SYMBOL/PASCAL SERIAL
|
||
$*XALGOL FILE NEWTAPE=SYMNEW/PASCAL SERIAL
|
||
$*XALGOL FILE LINE=LINE PRINT
|
||
$*DATA CARD
|
||
$- DOLLAR CARDS FOR COMPILATION
|
||
$ TAPE LIST SINGLE SEQXEQ NEW TAPE
|
||
|
||
|
||
|
||
|
||
$# PATCH 1 FOR PASCAL.XVI.O CONTAINS 10 CARDS. CORRECT SPELLING & TABULATION C 001
|
||
|
||
|
||
$: PATCH TO CORRECT SPELLING IN SOME ERROR MESSAGES, CURRECT TABULATION OF CODE C 001
|
||
$: OR COMMENTS, AND TO CORRECT THE CALL ON THE PROCEDURE TO GIVE A NEW PAGE. C 001
|
||
$: *** NOTE THAT ERROR(71) IS NOW NO LONGER USED - SEE PATCH 513. C 001
|
||
$: IS WAS USED ONCE, BUT INCORRECTLY. ERROR(63) IS CALLED IN ITS PLACE. C 001
|
||
$: *** NOTE THAT THE ALGOL CODE FILE "PASCRUN"/"DISK" HAS BEEN RENAMED C 001
|
||
$: "PASCAL"/"PRELUDE". IT IS NO LONGER REFERENCED DIRECTLY IN THIS COMPILER C 001
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 001
|
||
$: C 001
|
||
BEGIN ; % NULL %*** 4) REWRITE 50203000 C 001
|
||
GEN("PUT",3,5); %*** 5) PAGE 50204000 C 001
|
||
GEN("PPAGE",5,3); % 50208000 C 001
|
||
BLOCK; %*** COMPILE PROCEDURE BODY *** 80646000 C 001
|
||
COMPSTAT; %*** COMPILE STATEMENT PART *** 80691000 C 001
|
||
(" 41 ALFA CONSTANTS MAY NOT BE LONGER THAN 7 CHARACTERS."), 91045000 C 001
|
||
(" 55 PROCEDURE NESTING DEPTH + NO OF RECORDS IS TOO GREAT."), 91060000 C 001
|
||
(" 87 END-OF-INPUT ENCOUNTERED UNEXPECTEDLY."), 91094000 C 001
|
||
(" 97 TOO MANY FILES IN USE."), 91104000 C 001
|
||
END OF B5700 PASCAL COMPILER............................................99001000 C 001
|
||
|
||
|
||
|
||
|
||
$# PATCH 2 FOR PASCAL CONTAINS 171 CARDS. C 002
|
||
|
||
|
||
$: PATCH TO MERGE DAG LANGMYHRS PPP10 TO PPP11 COSY PATCHES C 002
|
||
$: WITH NILS OTTES MODIFIED PPP10 SOURCE. C 002
|
||
$: DAVID A COOPER , HERIOT-WATT UNIVERSITY, JANUARY 1978. C 002
|
||
$: C 002
|
||
FILE CARD "SOURCE" (1,10,30); % SOURCE CODE FILE 10035000 C 002
|
||
FILE LINES 1 (1,17); % PRINT FILE 10036000 C 002
|
||
FILE PASCALGOL DISK SERIAL [20:600] (1,10,30,SAVE 0); % CODE FILE 10037000 C 002
|
||
ARRAY PARAMTAB, FORWPARAM1, FORWPARAM2[0:MAXPARAMS]; 10109000 C 002
|
||
FILE XREFFILE DISK SERIAL [20:3000] (1,3,30); 10137000 C 002
|
||
ALPHA ARRAY XBUFF[0:2]; 10138500 C 002
|
||
BOOLEAN XINB; 10138550 C 002
|
||
INTEGER ARRAY SYMKIND[0:62]; %USED IN ERROR RECOVERY. 10149000 C 002
|
||
ERROR100MESS (//"100 ILLEGAL SAVE CONSTANT IN """""S""""" OPTION10188500 C 002
|
||
. THE VALUE 07 IS SUBSTITUTED"/" SO THIS ERROR DOES NOT INCREMENT TH10188600 C 002
|
||
E COMPILATION ERRORS COUNT."//),% 10188700 C 002
|
||
PACKEDSY=61#, ASSERTSY=62#; 10211000 C 002
|
||
% 20181500 C 002
|
||
% 20181550 C 002
|
||
IF ERRNUM=100 20181600 C 002
|
||
THEN NUMERRS:=NUMERRS-1;% * ERROR NUMBER 100 ALONE SHOULD NOT 20181650 C 002
|
||
% * PREVENT THE XALGOL COMPILATION BEING 20181700 C 002
|
||
% * ZIPPED AS THE VALUE 7 IS SUBSTITUTED 20181750 C 002
|
||
% * FOR A BAD SAVE CONSTANT IN AN "S" 20181800 C 002
|
||
% * OPTION. 20181850 C 002
|
||
% 20181900 C 002
|
||
% 20181950 C 002
|
||
7(INITIAL),MIDDLE,INITIAL; 20308000 C 002
|
||
"400READ", "6READLN", "50RESET", "6UNPACK", "50WRITE", 20373000 C 002
|
||
"6QQJZXL" DO 20373500 C 002
|
||
IF DECL THEN AX := -AX; 20520000 C 002
|
||
ABS(A[2]) LEQ ABS(B[2]); 20539000 C 002
|
||
% 20541100 C 002
|
||
% 20541150 C 002
|
||
% 20541200 C 002
|
||
BOOLEAN PROCEDURE XREFINPUT(A); 20541250 C 002
|
||
ARRAY A[0]; 20541300 C 002
|
||
BEGIN 20541350 C 002
|
||
LABEL EOF; 20541400 C 002
|
||
INTEGER I; 20541450 C 002
|
||
% 20541500 C 002
|
||
READ(XREFFILE,3,XBUFF[*])[EOF]; 20541550 C 002
|
||
FOR I:=0,1,2 DO 20541600 C 002
|
||
A[I] := XBUFF[I]; 20541650 C 002
|
||
IF FALSE THEN EOF: BEGIN 20541700 C 002
|
||
CLOSE(XREFFILE,RELEASE); 20541750 C 002
|
||
XINB := TRUE; 20541800 C 002
|
||
END; 20541850 C 002
|
||
XREFINPUT := XINB; 20541900 C 002
|
||
% 20541950 C 002
|
||
END OF XREFINPUT; 20541960 C 002
|
||
A2 := -A2; 20570000 C 002
|
||
BOOLEAN LPARFOUND,SAVEXREFOPT; 20842000 C 002
|
||
SAVEXREFOPT := XREFOPTION; XREFOPTION := FALSE; 20847500 C 002
|
||
IF SAVEXREFOPT THEN NEWXREF(CURNAME1,CURNAME2,THISLEVEL, 20861500 C 002
|
||
FALSE); 20861550 C 002
|
||
XREFOPTION := SAVEXREFOPT; 20868500 C 002
|
||
% ASSERT 62 ASSERTSY INITIAL 30075500 C 002
|
||
IF CURNAME1="6ASSERT" THEN ASSERTSY ELSE 30165500 C 002
|
||
END% 30280000 C 002
|
||
% 30280025 C 002
|
||
% 30280050 C 002
|
||
% THE FOLLOWING LINES DECODE ANY OCCURRENCE OF THE "S" OPTION AND 30280075 C 002
|
||
% SETS THE GLOBAL INTEGER VARIABLE "SAVEFACTOR" WHICH CONTROLS THE 30280100 C 002
|
||
% TYPE OF COMPILATION INITIATED BY THE ZIP. THERE ARE THREE LEGAL FORMS 30280125 C 002
|
||
% OF THE "S" OPTION AS FOLLOWS.- 30280150 C 002
|
||
% 30280175 C 002
|
||
% "S-" WILL GIVE NO ZIP IE. PASCAL SYNTAX CHECK ONLY 30280200 C 002
|
||
% "S+" WILL GIVE A ZIP FOR COMPILE AND GO 30280225 C 002
|
||
% "S??" WILL GIVE A ZIP FOR COMPILE TO LIBRARY 30280250 C 002
|
||
% WHERE ?? IS THE TWO DIGIT DECIMAL SAVE 30280275 C 002
|
||
% CONSTANT GIVEN THE OBJECT CODE FILE 30280300 C 002
|
||
% NB. IF THE SAVE CONSTANT IS TO BE 30280325 C 002
|
||
% LESS THAN 10 THE FIRST DIGIT 30280350 C 002
|
||
% MUST BE INCLUDED IE. A "0". 30280375 C 002
|
||
% 30280400 C 002
|
||
% 30280425 C 002
|
||
ELSE 30280450 C 002
|
||
IF CX="S" THEN 30280475 C 002
|
||
BEGIN 30280500 C 002
|
||
IF C="-" THEN SAVEFACTOR:=-1 ELSE 30280525 C 002
|
||
IF C="+" THEN SAVEFACTOR:= 0 ELSE 30280550 C 002
|
||
IF C LEQ 9 THEN 30280575 C 002
|
||
BEGIN 30280600 C 002
|
||
SAVEFACTOR := 10 × C; NEXTCHAR; 30280625 C 002
|
||
SAVEFACTOR := SAVEFACTOR + C; 30280650 C 002
|
||
IF C GTR 9 THEN ERROR(100); 30280675 C 002
|
||
END 30280700 C 002
|
||
ELSE 30280720 C 002
|
||
BEGIN 30280735 C 002
|
||
ERROR(100); 30280750 C 002
|
||
SAVEFACTOR := 7; 30280765 C 002
|
||
END; 30280780 C 002
|
||
END; 30280800 C 002
|
||
% 30280825 C 002
|
||
% 30280850 C 002
|
||
% 30280875 C 002
|
||
INTEGER EXPRLEVEL,TX,EXPINVARCNT;% 40018000 C 002
|
||
BOOLEAN INBRACKET,INRECORD,SIMPLEVAR; 40087000 C 002
|
||
SIMPLEVAR := FALSE; 40099000 C 002
|
||
CURTYPE := THISID.TYPE; SIMPLEVAR := TRUE; 40104000 C 002
|
||
SIMPLEVAR := FALSE; 40109000 C 002
|
||
EXPINVARCNT:=EXPINVARCNT+1;% 40120500 C 002
|
||
EXPINVARCNT:=EXPINVARCNT-1;% 40121500 C 002
|
||
SIMPLEVARIABLE := SIMPLEVAR; 40199500 C 002
|
||
IF EXPINVARCNT=0 THEN WRITEEXPR; % 40751000 C 002
|
||
LABEL EFH; 50201500 C 002
|
||
%*** 6) OPEN & CLOSE (INPUT) FOR 50204500 C 002
|
||
% CUMULATIVE FREQUENCY COUNT50204550 C 002
|
||
BEGIN 50208100 C 002
|
||
GEN("QQJZXL",6,2); 50208200 C 002
|
||
INSYMBOL; 50208300 C 002
|
||
GO TO EFH; % 50208400 C 002
|
||
END; 50208500 C 002
|
||
EFH: 50219500 C 002
|
||
EXPRLEVEL := 1; 60346500 C 002
|
||
IF THISID.IDCLASS=VAR OR 60354000 C 002
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN % 60354500 C 002
|
||
EXPRLEVEL := 0; 60383500 C 002
|
||
PROCEDURE ASSERTSTAT; 60391100 C 002
|
||
BEGIN 60391200 C 002
|
||
GEN("IF NOT(",7,1); 60391400 C 002
|
||
INSYMBOL; BOOLEXPR; 60391500 C 002
|
||
GEN(") THEN",7,2); GEN("RUNERR(",7,1); GEN("7,",2,6); 60391600 C 002
|
||
GENINT(CARDCNT); GEN(")",1,7); 60391700 C 002
|
||
END OF ASSERTSTAT; 60391800 C 002
|
||
IF CURNAME1="6QQJZXL" THEN FILEHANDLING(6) ELSE 60443500 C 002
|
||
IF CURSY=ASSERTSY THEN ASSERTSTAT ELSE 60457500 C 002
|
||
IF PARAM THEN GEN("0",1,7) ELSE BEGIN 80129000 C 002
|
||
GEN("0:",2,6); 80129100 C 002
|
||
GENINT(RECSIZE-1); 80129200 C 002
|
||
END 80129300 C 002
|
||
FORWPARAM1[NUMPARAMS] := CURNAME1; 80177500 C 002
|
||
FORWPARAM2[NUMPARAMS] := CURNAME2; 80177600 C 002
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS, T, TX, I; 80403000 C 002
|
||
ALPHA T3; 80403500 C 002
|
||
LABEL LL1; % 80447010 C 002
|
||
LABEL LL2; % 80496010 C 002
|
||
LABEL LL3; % 80542010 C 002
|
||
IF CURLEVEL GEQ MAXTABLES THEN ERROR(101) ELSE 80543500 C 002
|
||
BLOCKTAB[CURLEVEL+1] := NUMBLOCKS := NUMBLOCKS + 1; 80543600 C 002
|
||
NAMETAB3[CURLEVEL,THISINDEX].FORWARDDEF := 0; 80553000 C 002
|
||
T := NAMETAB3[CURLEVEL,THISINDEX].INFO; 80554500 C 002
|
||
TX := T + PARAMTAB[T]; 80554600 C 002
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO 80554700 C 002
|
||
NEWNAME(FORWPARAM1[I],FORWPARAM2[I],CURLEVEL+1); 80554800 C 002
|
||
REPLACE POINTER(NAMETAB1[CURLEVEL+1,*]) BY 0 80637500 C 002
|
||
FOR MAXNAMES+1 WORDS; 80637600 C 002
|
||
IF CURLEVEL GEQ LASTREC THEN ERROR(101); % 80643000 C 002
|
||
% 90014100 C 002
|
||
% 90014200 C 002
|
||
SAVEFACTOR:=0;% * DEFAULT ZIP IS COMPILE AND GO UNLESS 90014300 C 002
|
||
% * CHANGED BY THE USE OF THE "S" OPTION 90014400 C 002
|
||
% 90014500 C 002
|
||
% 90014600 C 002
|
||
% 90042100 C 002
|
||
% THE FOLLOWING LINES ADD A "0" ONTO THE FRONT OF THE PROGRAM NAME OR90042200 C 002
|
||
% THE FIRST SIX CHARACTERS THEREOF IF IT IS LONGER THAN SIX CHARACTERS 90042300 C 002
|
||
% THUS GIVING THE NAME OF THE XALGOL OBJECT CODE FILE PRODUCED. 90042400 C 002
|
||
% 90042500 C 002
|
||
PROGNAME := CURNAME1.[35:36]; PROGNAMELENGTH := MIN(6,CURLENGTH)+1;90042600 C 002
|
||
% 90042700 C 002
|
||
% 90042800 C 002
|
||
BEGIN% 90090400 C 002
|
||
WRITE(LINE ,NOERRORS);% 90090500 C 002
|
||
IF ERR[100]% 90090600 C 002
|
||
THEN WRITE(LINE ,ERROR100MESS);% 90090700 C 002
|
||
IF SAVEFACTOR≥0 THEN% *A ZIP IS REQUIRED 90090800 C 002
|
||
$VOIDT 90111000 C 002
|
||
END% 90129500 C 002
|
||
("100 ILLEGAL SAVE CONSTANT IN """""S""""" OPTION. THE VALUE 07 IS91106500 C 002
|
||
SUBSTITUTED"/" SO THIS ERROR DOES NOT INCREMENT THE COMPILATION ERRO91106600 C 002
|
||
RS COUNT."),% 91106700 C 002
|
||
("101 PROCEDURES/FUNCTIONS NESTED TOO DEEP."), 91106800 C 002
|
||
REWIND(XREFFILE); 92003500 C 002
|
||
SORT(PRINTXREF,XREFINPUT,0,XREFMAX,XREFCOMPARE,3,1000,6000); 92005000 C 002
|
||
|
||
|
||
|
||
|
||
$# PATCH 500 FOR PASCAL.XVI.O CONTAINS 5 CARDS. PRT CELLS 25 TO 30 C 500
|
||
|
||
|
||
$: THIS PATCH CORRECTS THE DOCUMENTATION FOR THE COMPILERS PRT CELLS 25 TO 27 C 500
|
||
$: (NOT 21 TO 23). FURTHERMORE. IT USES PRT CELL 30 FOR THE CARD COUNT (IN PLACE C 500
|
||
$: OF 27) TO BE CONSISTANT WITH THE OTHER SYSTEM COMPILERS. PRT CELL 27 IS USED C 500
|
||
$: FOR THE PAGE COUNT FORMERLY AT SEQUENCE 10134000. C 500
|
||
$: NILS OTTE, UNIVERISTY OF NATAL, DURBAN. AUG - NOV 1977. C 500
|
||
$: C 500
|
||
INTEGER NUMERRS, % @R+25: NUMBER OF ERRORS IN PROGRAM. 10029000 C 500
|
||
SAVEFACTOR, % @R+26: SAVEFACTOR FOR CODE FILE. 10030000 C 500
|
||
PAGECNT, % @R+27: NUMBER OF PAGES PRINTED. 10033800 C 500
|
||
CARDCNT; % @R+30: NUMBER OF CARDS READ. 10034000 C 500
|
||
INTEGER LINECNT, ERRINX; % PAGECNT @ PRT+27 10134000 C 500
|
||
|
||
|
||
|
||
|
||
$# PATCH 501 FOR PASCAL.XVI.O CONTAINS 3 CARDS. "PRT25" FOR USER-S PASCAL PROG. C 501
|
||
|
||
|
||
$: THIS PATCH INCORPORATES THE PRE-DEFINED IDENTIFIER "PRT25" LOCATED C 501
|
||
$: AT PRT CELL 25 AS PER DOCUMENTATION. (THE DOCUMENTATION MUST BE C 501
|
||
$: AMENDED TO DELETE PRT26 AND PRT27 FROM THE PRE-DEFINED IDENTIFIER LIST.) C 501
|
||
$: ** NOTE THAT FILE PASCAL/PRELUDE MUST BE UPDATED FOR "PRT25". C 501
|
||
$: THE VARIABLE "PRT25" MAY BE SET BY THE Q COMMON = N CONTROL CARD. C 501
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 501
|
||
$: C 501
|
||
NEWNAME("50PRT25",0,0); %*** "PRT25" *** 20369100 C 501
|
||
T3:=INTTYPE; T3.IDCLASS:=VAR; % GLOBAL INTEGER VARIABLE 20369200 C 501
|
||
NAMETAB3[0,THISINDEX] := T3; 20369300 C 501
|
||
|
||
|
||
|
||
|
||
$# PATCH 502 FOR PASCAL.XVI.O CONTAINS 3 CARDS. LINE COUNT WHEN DEBUGGING C 502
|
||
|
||
|
||
$: TO CORRECT THE LINE COUNT WHEN THE DEBUGGING OPTION TO LIST THE ALGOL C 502
|
||
$: CODE GENERATED IS SET (*$D+ *), OTHERWISE LINES PER PAGE GOES WRONG. C 502
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 502
|
||
$: C 502
|
||
DEFINE LINESPERPAGE = 60 #, 10038000 C 502
|
||
IF DUMPOPTION THEN BEGIN IF (LINECNT:=LINECNT+1)≥LINESPERPAGE 20149000 C 502
|
||
THEN HEADING; WRITE(LINE,10,ALGOLCARD[*]) END; 20149100 C 502
|
||
|
||
|
||
|
||
|
||
$# PATCH 503 FOR PASCAL.XVI.O CONTAINS 9 CARDS. INTEGER TO REAL FOR TYPETAB1 C 503
|
||
|
||
|
||
$: WHEN MORE THAN 63 ENTRIES WERE ENTERED IN THE "TYPETAB*" ARRAYS, THE C 503
|
||
$: PASCAL COMPILER WAS DISCONTINUED DUE TO INTEGER OVERFLOW, WHICH COULD OCCUR C 503
|
||
$: IN A NUMBER OF PROCEDURES AS A RESULT OF ASSIGNING TO AN INTEGER AN ARRAY C 503
|
||
$: ELEMENT WHOSE EXPONENT FIELD WAS NOT ZERO. THE FIELD "ARRTYPE" IS C 503
|
||
$: [43:10] AND HAS THE 4 HIGH ORDER BITS IN THE EXPONENT FIELD. THIS PATCH C 503
|
||
$: ALTERS THE DECLARATIONS OF ALL IDENTIFIER TO WHICH "TYPETAB1" MAY BE C 503
|
||
$: ASSIGNED FROM INTEGER TO REAL TO CORRECT THIS ERROR. C 503
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 503
|
||
$: C 503
|
||
INTEGER IT; REAL T; 50225000 C 503
|
||
INTEGER IT; REAL T; 50285000 C 503
|
||
INTEGER CASETYPE,ADDR,MAXADDR,INDEX,CTYPE,TX,SX, T3,LLIM,ULIM,I; 70244000 C 503
|
||
REAL T1, CVAL; 70246000 C 503
|
||
INTEGER LEVEL1000, TYP, NAM, NAMTAB, I, J, RECSIZE; 80020000 C 503
|
||
ALPHA T1, FNAME; 80022000 C 503
|
||
INTEGER FIRSTPARAM, CURKIND, P1, PX, I, T3; REAL T; 80148000 C 503
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS, T3, TX, I; 80403000 C 503
|
||
REAL T, CVAL; 80404000 C 503
|
||
|
||
|
||
|
||
|
||
$# PATCH 504 FOR PASCAL.XVI.O CONTAINS 23 CARDS. IMPLEMENT FORWARD DECLARATIONS C 504
|
||
|
||
|
||
$: FORWARD DECLARATIONS OF PROCEDURES ENDED IN CHAOS DUE TO THE PARAMETERS AND C 504
|
||
$: THEIR TYPES NOT BEING KEPT, RESULTING IN GLOBALS BEING REFERENCED WHERE C 504
|
||
$: POSSIBLE, AND FORWARD DECLARATIONS OF FUNCTIONS DID NOT WORK AT ALL. C 504
|
||
$: THE PROBLEM WAS THAT THE INFORMATION ON THE PARAMETERS WAS BEING STORED C 504
|
||
$: IN THE "NAMETAB*" ROWS FOR THE CURRENT LEVEL, WHICH WERE BEING SET TO ZERO C 504
|
||
$: ON EXIT FROM PROCEDURE BLOCKS AT THAT LEVEL THEREAFTER. C 504
|
||
$: THIS PATCH CORRECTS THE ERROR BY MARKING THE ENTRIES FOR PARAMETERS OF C 504
|
||
$: FORWARD PROCEDURES AND FUNCTIONS, SETTING TO ZERO ONLY THOSE ELEMENTS WHICH C 504
|
||
$: ARE NOT SO MARKED ON EXIT FROM A BLOCK, AND UNMARKING THE RELEVANT PARAMETERS C 504
|
||
$: WHEN THE PROCEDURE OR FUNCTION IS DEFINED. THE MARKING OF THE PARAMETERS C 504
|
||
$: IS DONE IN SUCH A WAY THAT THE SAME IDENTIFIER NAME MAY BE USED AT THE SAME C 504
|
||
$: LEVEL WITHOUT SYNTAX ERROR 2 TO REPORT THAT THE IDENTIFIER IS ALREADY DEFINED C 504
|
||
$: THE UNMARKING REPLACES THE IDENTIFIER NAME IN "NAMETAB*" TO ALLOW FOR THE C 504
|
||
$: SAME NAME OR ONE THAT HASHES TO THE SAME PLACE TO HAVE BEEN USED PREVIOUSLY C 504
|
||
$: AND NOW DELETED. C 504
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 504
|
||
IF FOUND AND THISID.IDCLASS≥FUNC THEN 80548000 C 504
|
||
NAMETAB3[CURLEVEL,THISINDEX].FORWARDDEF:=0; 80553000 C 504
|
||
(THISID.IDCLASS=FUNC AND NOT FUN) THEN ERROR(43); 80555100 C 504
|
||
TX:=(T:=THISID.INFO)+PARAMTAB[T]; % UNMARK FORWARD PARMS 80556000 C 504
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO % TO ALLOW REFERENCE 80557000 C 504
|
||
BEGIN T3:=PARAMTAB[I].PARAMNAME; 80558000 C 504
|
||
CURNAME1:=ABS(NAMETAB1[CURLEVEL+1,T3]); 80559000 C 504
|
||
CURNAME2:= NAMETAB2[CURLEVEL+1,T3]; 80560000 C 504
|
||
NAMETAB1[CURLEVEL+1,T3]:=0; 80561000 C 504
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL+1); 80562000 C 504
|
||
IF T3≠THISINDEX THEN BEGIN 80563000 C 504
|
||
PARAMTAB[I].PARAMNAME:=THISINDEX; 80564000 C 504
|
||
NAMETAB3[CURLEVEL+1,THISINDEX] := 80565000 C 504
|
||
NAMETAB3[CURLEVEL+1,T3]; 80565010 C 504
|
||
END END; % OF UNMARKING FORWARD PARAMETERS. 80566000 C 504
|
||
TX:=(T:=NAMETAB3[CURLEVEL,INDEX].INFO)+PARAMTAB[T]; 80636100 C 504
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO % MARK FORWARD PARAMETERS 80636200 C 504
|
||
NAMETAB1[CURLEVEL+1,PARAMTAB[I].PARAMNAME].[46:1] := 1; 80636210 C 504
|
||
TX:=CURFUNC; CURFUNC:=IF FUN THEN INDEX ELSE -1; 80645000 C 504
|
||
FOR I:=0 STEP 1 UNTIL MAXNAMES DO % LEAVE FORWARD PARAMETERS 80647000 C 504
|
||
IF NAMETAB1[CURLEVEL,I]>0 THEN NAMETAB1[CURLEVEL,I]:=0; 80648000 C 504
|
||
CURLEVEL:=CURLEVEL-1; CURFUNC:=TX; 80649000 C 504
|
||
FOR I:=LASTREC STEP 1 UNTIL TOPREC-1 DO % CLEAR RECORD DECS 80693000 C 504
|
||
|
||
|
||
|
||
|
||
$# PATCH 505 FOR PASCAL.XVI.O CONTAINS 9 CARDS. CHECK FOR HASH TABLE FULL C 505
|
||
|
||
|
||
$: WHEN THERE ARE "MAXNAMES" IDENTIFIERS AT ONE LEVEL, THE "NAMETAB*" ROWS C 505
|
||
$: BECOME FULL AND THIS USED TO PUT THE COMPILER INTO AN INFINITE LOOP, C 505
|
||
$: EITHER IN "NEWNAME" OR "SEARCHTAB". THIS PATCH INSERTS TEST FOR WRAP AROUND C 505
|
||
$: LEADING BACK TO THE HASHED STARTING POINT, FOR WHICH IT GIVES SYNTAX ERROR C 505
|
||
$: 40, TOO MANY IDENTIFIERS DECLARED. C 505
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 505
|
||
$: C 505
|
||
DEFINE HASH(HASH1) = ENTIER((HASH1) MOD MAXNAMES) #; 20202000 C 505
|
||
BEGIN ALPHA TNAME; INTEGER WRAPAROUND; 20209000 C 505
|
||
WRAPAROUND:=THISINDEX:=HASH(CURNAME1); 20210000 C 505
|
||
IF THISINDEX=WRAPAROUND THEN TNAME:=0; % TABLE IS FULL 20216100 C 505
|
||
ALPHA TNAME; INTEGER WRAPAROUND; 20237100 C 505
|
||
WRAPAROUND:=THISINDEX:=HASH(NAME1); 20238000 C 505
|
||
IF THISINDEX=WRAPAROUND THEN % TABLE AT THIS LEVEL IS FULL 20244100 C 505
|
||
BEGIN ERROR(40); NAME1:=TNAME; NAME2:=NAMETAB2[TAB,THISINDEX]20244200 C 505
|
||
END; 20244300 C 505
|
||
|
||
|
||
|
||
|
||
$# PATCH 506 FOR PASCAL.XVI.O CONTAINS 2 CARDS. RESERVED WORD ENDING AT CC 80 C 506
|
||
|
||
|
||
$: IF A RESERVED WORD ENDED AT CARD COLUMN 79 OR 80 AND IF THE "BOLDFACE" FOR C 506
|
||
$: RESERVED WORDS OPTION IS SET (*$R+ *), AN INVALID INDEX OCCURRED IN THE C 506
|
||
$: SCANNER "INSYMBOL". THE PROBLEM IS CURED BY CORRECTLY COMPUTING THE STARTING C 506
|
||
$: AND ENDING POINT OF THE RESERVED WORDS. C 506
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 506
|
||
$: C 506
|
||
BEGIN T1 := CARDLENGTH-CHARCNT-CURLENGTH-1; 30178000 C 506
|
||
FOR CURLENGTH+REAL(CHARCNT=0); 30181000 C 506
|
||
|
||
|
||
|
||
|
||
$# PATCH 507 FOR PASCAL.XVI.O CONTAINS 5 CARDS. "VARIABLE", "SIMPLEVARIABLE" C 507
|
||
|
||
|
||
$: IN PROCEDURE "VARIABLE", "SIMPLEVARIABLE" IS SET TRUE IF A SUBSCRIPT IS C 507
|
||
$: SIMPLE, RESULTING IN ALGOL CODE BEING WRITTEN PREMATURELY DURING RECURSIVE C 507
|
||
$: CALLS ON PROCEDURE "EXPRESSION", WHICH IN SOME CASES LEAD TO ALGOL SYNTAX C 507
|
||
$: ERRORS. SINCE WRITING THE ALGOL CODE IS DEPENDANT ON "EXPRLEVEL" BEING ZERO, C 507
|
||
$: THIS PATCH BUMPS ITS VALUE PRIOR TO ANALYSING THE SUBSCRIPT, AND SETS C 507
|
||
$: "SIMPLEVARIABLE" FALSE AFTERWARDS. C 507
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 507
|
||
$: C 507
|
||
EXPRLEVEL := EXPRLEVEL+1; % DO NOT "WRITEEXPR" YET 40120900 C 507
|
||
EXPRLEVEL := EXPRLEVEL-1; 40121100 C 507
|
||
SIMPLEVARIABLE := FALSE; % RECURSION ON "VARIABLE" 40121200 C 507
|
||
EXPRLEVEL := EXPRLEVEL+1; 60063900 C 507
|
||
EXPRLEVEL := EXPRLEVEL-1; 60065100 C 507
|
||
|
||
|
||
|
||
|
||
$# PATCH 509 FOR PASCAL.XVI.O CONTAINS 1 CARD. "CONCAT" A FUNCTION OF ANY TYPE C 509
|
||
|
||
|
||
$: THE INTRINSIC FUNCTION "CONCAT" COULD ONLY BE ASSIGNED TO A VARIABLE DECLARED C 509
|
||
$: "REAL" TO AVOID TYPE CONFLICT SYNTAX ERRORS. THIS PATCH MAKES "CONCAT" C 509
|
||
$: TYPELESS. C 509
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 509
|
||
$: C 509
|
||
CURTYPE := 0; % ALFATYPE OR REALTYPE 50050000 C 509
|
||
|
||
|
||
|
||
|
||
$# PATCH 511 FOR PASCAL.XVI.O CONTAINS 7 CARDS. ALLOW UP-LEVEL ADDRESSING C 511
|
||
|
||
|
||
$: TO ALLOW UP-LEVEL IDENTIFIER REFERENCES. FORMERLY, REFERENCES TO GLOBAL C 511
|
||
$: IDENTIFIERS WHICH WERE NOT IN THE OUTER BLOCK WERE FLAGGED BY SYNTAX ERROR C 511
|
||
$: 5, UP-LEVEL ADDRESSING NOT IMPLEMENTED DUE TO HARDWARE RESTRICTION. C 511
|
||
$: ALTHOUGH THE RESTRICTION EXISTS IN EXTENDED ALGOL, IT IS NOT TRUE THAT THE C 511
|
||
$: RESTRICTION IS DUE TO HARDWARE, FOR UP-LEVEL ADDRESSING IS ALLOWED IN C 511
|
||
$: COMPATIBLE ALGOL WITH THE CAUTION THAT IT IS INEFFICIENT (THE IMPLEMENTATION C 511
|
||
$: IS SIMILAR TO AN ARRAY ELEMENT REFERENCE). C 511
|
||
$: THIS PATCH PERMITS SUCH GOBAL REFERENCES, EXCEPT C 511
|
||
$: (1) THAT IF THE CONTROL VARIABLE OF A FOR STATEMENT IS NOT LOCAL OR IN THE C 511
|
||
$: OUTER BLOCK (PTR) A WARNING IS ISSUED (IN THE FORM OF A SYNTAX ERROR, C 511
|
||
$: BUT THE ERROR COUNT IS NOT INCREMENTED), AND C 511
|
||
$: (2) THE RESTRICTION IS STILL APPLIED TO FUNCTION NAMES. THE MESSAGE FOR C 511
|
||
$: SYNTAX ERROR IS AMENDED ACCORDINGLY. C 511
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 511
|
||
$: C 511
|
||
IF ERRNUM<0 THEN ERRNUM:=ABS(ERRNUM) ELSE 20180900 C 511
|
||
$ %IF THISLEVEL>1 AND THISLEVEL<CURLEVEL THEN ERROR5; 40103000 C 511
|
||
$ %IF THISLEVEL>1 AND THISLEVEL≠CURLEVEL THEN ERROR5; 50244000 C 511
|
||
$ %IF THISLEVEL>1 AND THISLEVEL≠CURLEVEL THEN ERROR5; 50306000 C 511
|
||
IF THISLEVEL≠CURLEVEL-1 OR THISINDEX≠CURFUNC THEN ERROR(5); 60091000 C 511
|
||
IF THISLEVEL>1 AND THISLEVEL<CURLEVEL THEN ERROR(-5); 60276000 C 511
|
||
(" 5 FUNCTION NAME NOT ACCESSIBLE AT THIS LEVEL."), 91009000 C 511
|
||
|
||
|
||
|
||
|
||
$# PATCH 512 FOR PASCAL.XVI.O CONTAINS 24 CARDS. IMPLEMENT STRUCTURED ASSIGNMENT C 512
|
||
|
||
|
||
$: TO ALLOW STRUCTURED ASSIGNMENT. FORMERLY, AN ASSIGNMENT OF A STRUCTURE C 512
|
||
$: WAS NOT IMPLEMENTED, EG A, B: RECORD ... END; A := B;. C 512
|
||
$: THIS PATCH ATTEMPTS TO IMPLEMENT ASSIGNMENT OF STRUCTURES OF ANY KIND, C 512
|
||
$: BUT IT WOULD FAIL IF THE STRUCTURE WERE TRANSLATED INTO A MULTI-DIMENSIONAL C 512
|
||
$: ALGOL ARRAY. THIS IMPLEMENTATION DOES WORK FOR ARRAYS, RECORDS, C 512
|
||
$: SUBSTRUCTURES, AND FOR STRUCTURES ALLOCATED IN THE HEAP. C 512
|
||
$: THIS PATCH NEEDS PATH 507 IN ORDER TO SUCCEED. C 512
|
||
$: FOR THIS IMPLEMENTATION, THE FOLLOWING DEFINE IS REQUIRED IN THE FILE C 512
|
||
$: PASCAL/PRELUDE: DEFINE ASSIGN(DEST, SOURCE, LENGTH) = REPLACE POINTER(DEST) C 512
|
||
$: BY POINTER(SOURCE) FOR LENGTH WORDS #; C 512
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 512
|
||
$: C 512
|
||
60020000 C 512
|
||
PROCEDURE WRITESEXPR; %*** FIX STRUCTURE FOR ASSIGNMENT 60021000 C 512
|
||
BEGIN % USED ONLY IN ASSIGNMENT OF STRUCTURES 60022000 C 512
|
||
IF INSIDEBRACKETS THEN IF SYMTAB[NUMSYMS] = "100000," 60023000 C 512
|
||
THEN SYMTAB[NUMSYMS] := ", 0 ] " ELSE PUTSYM("]"); 60024000 C 512
|
||
WHILE NUMPOINTERS>0 DO 60025000 C 512
|
||
BEGIN NUMPOINTERS := NUMPOINTERS-1; 60026000 C 512
|
||
IF NUMSYMS+4 ≥ MAXSYMS THEN WRITEEXPR; 60027000 C 512
|
||
REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY 60028000 C 512
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; 60029000 C 512
|
||
NUMSYMS := NUMSYMS+4; 60030000 C 512
|
||
END; % OF WHILE 60031000 C 512
|
||
WRITEEXPR; GEN( ",", 1,7 ); 60032000 C 512
|
||
END WRITESEXPR; 60033000 C 512
|
||
60034000 C 512
|
||
%ERROR(95); % STRUCTURED ASSIGNMENT NOT IMPLEMENTED. 60063000 C 512
|
||
GEN("ASSIGN(",7,1); WRITESEXPR; 60064000 C 512
|
||
EXPRESSION; WRITESEXPR; 60065000 C 512
|
||
GENINT(TYPETAB1[LEFTTYPE].SIZE); GEN(")",1,7); 60066000 C 512
|
||
IF TYPETAB1[LEFTTYPE].SIZE≠TYPETAB1[CURTYPE].SIZE 60067000 C 512
|
||
THEN ERROR(95); 60068000 C 512
|
||
END; 60087000 C 512
|
||
CHECKTYPES( LEFTTYPE, CURTYPE ); 60088000 C 512
|
||
(" 95 SIZE OF STRUCTURES IN ASSIGNMENT ARE NOT THE SAME."), 91102000 C 512
|
||
|
||
|
||
|
||
|
||
$# PATCH 513 FOR PASCAL.XVI.O CONTAINS 16 CARDS. FIX POINTERS VIA POINTERS C 513
|
||
|
||
|
||
$: TO CORRECT THE CODE GENERATED FOR CHAINED REFERENCES THROUGH THE HEAP, C 513
|
||
$: IE FOR POINTERS TO POINTERS. THE OFFSET FOR COMPONENTS WITHIN RECORDS C 513
|
||
$: WAS INCORRECTLY BEING ADDED TO THE RECORD IN THE LEFTMOST REFERENCE, IE THE C 513
|
||
$: INNERMOST, INSTEAD OF AT THE EXPECTED LEVEL. C 513
|
||
$: FOR EXAMPLE, THE FOLLOWING TWO REFERENCES WOULD BOTH BE TRANSLATED TO C 513
|
||
$: THE SAME ALGOL CODE EQUIVALENT TO HEAP[HEAP[ID+IPART+ICOMP]]; C 513
|
||
$: ID@.PART@.COMP, ID@.PART.COMP@, C 513
|
||
$: WHEN THE FIRST SHOULD HAVE BEEN: HEAP[HEAP[ID+IPART]+ICOMP]. C 513
|
||
$: IN ADDITION, THIS PATCH IMPROVES THE COMPILERS CODE FOR GENERATING THE C 513
|
||
$: "MEM" ARRAY SUBSCRIPT. C 513
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. 1977-11-14 C 513
|
||
$: C 513
|
||
IF NUMSYMS+6 ≤ MAXSYMS THEN 40175000 C 513
|
||
NUMSYMS := NUMSYMS+2; 40180400 C 513
|
||
IF NUMPOINTERS > 0 % POINTER VIA POINTER 40180500 C 513
|
||
THEN BEGIN REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY 40180600 C 513
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; 40180700 C 513
|
||
NUMSYMS := NUMSYMS+4; 40180800 C 513
|
||
END 40180900 C 513
|
||
ELSE NUMPOINTERS := 1; 40181000 C 513
|
||
% INBRACKET := FALSE; 40191100 C 513
|
||
BEGIN NUMPOINTERS := NUMPOINTERS-1; 40193000 C 513
|
||
IF NUMSYMS+4 ≤ MAXSYMS 40194000 C 513
|
||
THEN BEGIN REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY 40194100 C 513
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; 40194200 C 513
|
||
NUMSYMS := NUMSYMS+4; 40194300 C 513
|
||
END 40194400 C 513
|
||
ELSE ERROR(63); % EXPRESSION IS TOO LONG FOR SYMTAB[*] 40195000 C 513
|
||
|
||
|
||
|
||
|
||
$# PATCH 514 FOR PASCAL.XVI.O CONTAINS 2 CARDS. PROCESS TIME FUNCTION FOR RUN C 514
|
||
|
||
|
||
$: PATCH TO CHANGE THE NAME OF THE FUNCTION ON THE B5700 VERSION WHICH SUPPLIES C 514
|
||
$: THE PROCESS TIME USED BY THE PASCAL PROGRAM ON THE CURRENT RUN FROM "ELAPSED" C 514
|
||
$: WHICH MEANS PLATFORM TIME, TO "CPUTIME" WHICH IS THE WIDELY ACCEPTED TERM C 514
|
||
$: FOR THIS QUANTITY. C 514
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 514
|
||
$: C 514
|
||
NEWNAME("7CPUTIM","E",0); NAMETAB3[0,THISINDEX]:=T3; 20390000 C 514
|
||
IF CURNAME1="7CPUTIM" AND CURNAME2="E" THEN % "CPUTIME" 40452000 C 514
|
||
|
||
|
||
|
||
|
||
$# PATCH 516 FOR PASCAL.XVI.O. CONTAINS 2 CARDS. CORRECT "NO LISTING" ERROR C 516
|
||
|
||
|
||
$: THIS PATCH CORRECTS AN ERROR WHEREBY IF LISTING WAS TURNED OFF C 516
|
||
$: AND PAGE THROW WAS INVOKED, A HEADING WAS PRINTED REGARDLESS. C 516
|
||
$: DAVID A COOPER, HERIOT-WATT UNIVERSITY.....JUNE, 1978. C 516
|
||
$: C 516
|
||
IF CX="L" THEN IF C=1 THEN 30264000 C 516
|
||
IF LISTOPTION THEN HEADING ELSE 30264500 C 516
|
||
|
||
|
||
|
||
|
||
$# PATCH 517 FOR PASCAL.XVI.O. CONTAINS 2 CARD. C 517
|
||
|
||
|
||
$: THIS PATCH CORRECTS AN ERROR THAT CAUSED A FILE DECLARATION C 517
|
||
$: TO HAVE ITS NAME STRING SPLIT OVER TWO LINES IN THE GENERATED XALGOL. C 517
|
||
$: ALSO CHANGES SYMTAB FORM TYPE REAL TO TYPE ALPHA. C 517
|
||
$: DAVID A COOPER, HERIOT-WATT UNIVERSITY.....JUNE, 1978. C 517
|
||
$: C 517
|
||
ALPHA ARRAY SYMTAB[0:MAXSYMS]; % USED BY "EXPRESSION". 10144000 C 517
|
||
IF ALGOLCNT LSS 14 THEN WRITEALGOL; 80103000 C 517
|
||
|
||
|
||
|
||
|
||
$# PATCH 518 FOR PASCAL.XVI.O. CONTAINS 224 CARDS. C 518
|
||
|
||
|
||
$: THIS PATCH CHANGES THE WAY THAT MULTI-DIMENSION ARRAYS C 518
|
||
$: REPRESENTING RECORDS ARE DECLARED. PREVIOSLY THEY WRE DECLARED C 518
|
||
$: THE WRONG WAY ROUND FOR XALGOL. THIS PATCH SORTS THE DIMENSIONS C 518
|
||
$: INTO ASCENDING ORDER FORM LEFT TO RIGHT AND GENERATES APPROPRIATE C 518
|
||
$: DEFINES AND CODE FOR HANDLING THE ARRAYS. C 518
|
||
$: STUART ANDERSON, COMPUTER SCIENCE, HERIOT-WATT UNIVERSITY, JUNE.....1978. C 518
|
||
$: C 518
|
||
DEFINE 10156200 C 518
|
||
PERMSUB = 0 #, MAXTOTALSUBSCRS = 100#, 10156300 C 518
|
||
ARRNAM = 1 #; 10156400 C 518
|
||
ARRAY ARRSUBPERMTAB[0:1,0:MAXTOTALSUBSCRS]; 10156500 C 518
|
||
INTEGER PASSPERMTAB, MAXPERMTAB, REMEMBERPOSN; 10156600 C 518
|
||
$ 40080000 C 518
|
||
BOOLEAN SIMPLEVARIABLE,INSIDEBRACKETS,INSIDEPARENS; 40080100 C 518
|
||
$ 40105000 C 518
|
||
IF INSIDEPARENS AND TYPETAB1[CURTYPE].STRUCT > 0 AND 40105100 C 518
|
||
TYPETAB1[CURTYPE].FORM < FILES THEN 40105200 C 518
|
||
PUTID("H",1000×THISLEVEL+THISINDEX,5) 40105300 C 518
|
||
ELSE 40105400 C 518
|
||
PUTID("V",1000×THISLEVEL+THISINDEX,5); 40105500 C 518
|
||
INSIDEPARENS := TRUE; 40258100 C 518
|
||
INSIDEPARENS := FALSE; 40259100 C 518
|
||
$ 50243000 C 518
|
||
GENID("H",1000×THISLEVEL+THISINDEX,5); 50243100 C 518
|
||
$ 50307000 C 518
|
||
GENID("H",1000×THISLEVEL+THISINDEX,5); 50307100 C 518
|
||
$SET VOIDT 80052000 C 518
|
||
$POP VOIDT 80064000 C 518
|
||
DEFINE 80064005 C 518
|
||
LOWSUBS = 0 #, 80064010 C 518
|
||
HISUBS = 1 #, 80064015 C 518
|
||
NEXTSUBS= 2 #, 80064020 C 518
|
||
MAXNOOFSUBSCRIPTS = 20 #, 80064025 C 518
|
||
STOPPERSUBTAB = 21 #; 80064030 C 518
|
||
ARRAY ARRSUBSCRIPTRANGE[0:2,0:MAXNOOFSUBSCRIPTS]; 80064035 C 518
|
||
INTEGER FIRSTRANGE, NEXTFREEENTRY, PASSSUBRANGE, PREVPASS, 80064040 C 518
|
||
MP, POSNO, SUBDIFF; 80064045 C 518
|
||
IF ARRAYVAR THEN GEN(";",1,7) ELSE ARRAYVAR := TRUE; 80064050 C 518
|
||
IF NOT PARAM THEN 80064055 C 518
|
||
BEGIN 80064060 C 518
|
||
GEN("DEFINE",7,2); 80064065 C 518
|
||
GENID("V",LEVEL1000+NAM,5); 80064070 C 518
|
||
GEN("[",1,7); 80064075 C 518
|
||
END; 80064080 C 518
|
||
FIRSTRANGE := STOPPERSUBTAB; NEXTFREEENTRY := 0; 80064085 C 518
|
||
POSNO := 1; 80064090 C 518
|
||
MP := 10; FIRSTDIM := TRUE; 80064095 C 518
|
||
DO 80064100 C 518
|
||
BEGIN 80064105 C 518
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE 80064110 C 518
|
||
BEGIN 80064111 C 518
|
||
IF NOT PARAM THEN GEN(",",1,7); 80064112 C 518
|
||
END; 80064113 C 518
|
||
IF NOT PARAM THEN GENID("V",(LEVEL1000+NAM)×MP+POSNO,IF MP=10 80064115 C 518
|
||
THEN 6 ELSE 7); POSNO := POSNO + 1; 80064120 C 518
|
||
IF POSNO = MP THEN MP := MP×10; 80064125 C 518
|
||
IF NEXTFREEENTRY = STOPPERSUBTAB THEN 80064130 C 518
|
||
BEGIN 80064135 C 518
|
||
ERROR(0); 80064140 C 518
|
||
END 80064145 C 518
|
||
ELSE 80064150 C 518
|
||
BEGIN 80064155 C 518
|
||
ARRSUBSCRIPTRANGE[LOWSUBS,NEXTFREEENTRY]:=TYPETAB2[TYP]; 80064160 C 518
|
||
ARRSUBSCRIPTRANGE[HISUBS,NEXTFREEENTRY] := TYPETAB3[TYP]; 80064165 C 518
|
||
END; 80064170 C 518
|
||
SUBDIFF := TYPETAB3[TYP] - TYPETAB2[TYP]; 80064175 C 518
|
||
IF FIRSTRANGE = STOPPERSUBTAB THEN 80064180 C 518
|
||
BEGIN 80064185 C 518
|
||
FIRSTRANGE := NEXTFREEENTRY; 80064190 C 518
|
||
NEXTFREEENTRY := NEXTFREEENTRY + 1; 80064195 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,FIRSTRANGE] := STOPPERSUBTAB; 80064200 C 518
|
||
END 80064205 C 518
|
||
ELSE 80064210 C 518
|
||
BEGIN 80064215 C 518
|
||
PASSSUBRANGE := FIRSTRANGE; 80064220 C 518
|
||
PREVPASS := STOPPERSUBTAB; NEXTFREEENTRY:=NEXTFREEENTRY+1;80064225 C 518
|
||
WHILE(SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE] 80064230 C 518
|
||
-ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE]) AND 80064235 C 518
|
||
(ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] ≠ 80064240 C 518
|
||
STOPPERSUBTAB) DO 80064245 C 518
|
||
BEGIN 80064250 C 518
|
||
PREVPASS := PASSSUBRANGE; 80064255 C 518
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS, 8006426 C 518
|
||
PASSSUBRANGE]; 80064265 C 518
|
||
END; 80064270 C 518
|
||
IF PREVPASS = STOPPERSUBTAB THEN 80064275 C 518
|
||
BEGIN 80064280 C 518
|
||
IF SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS, 80064285 C 518
|
||
PASSSUBRANGE] - 80064290 C 518
|
||
ARRSUBSCRIPTRANGE[LOWSUBS, 80064295 C 518
|
||
PASSSUBRANGE] THEN 80064300 C 518
|
||
BEGIN 80064305 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] := 80064310 C 518
|
||
NEXTFREEENTRY - 1; 80064315 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := 80064320 C 518
|
||
STOPPERSUBTAB; 80064325 C 518
|
||
END 80064330 C 518
|
||
ELSE 80064335 C 518
|
||
BEGIN 80064340 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := 80064345 C 518
|
||
FIRSTRANGE; 80064350 C 518
|
||
FIRSTRANGE := NEXTFREEENTRY-1; 80064355 C 518
|
||
END 80064360 C 518
|
||
END 80064365 C 518
|
||
ELSE 80064370 C 518
|
||
BEGIN 80064375 C 518
|
||
IF SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE] - 80064380 C 518
|
||
ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE] 80064385 C 518
|
||
THEN 80064390 C 518
|
||
BEGIN 80064395 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] := 80064400 C 518
|
||
NEXTFREEENTRY - 1; 80064405 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := 80064410 C 518
|
||
STOPPERSUBTAB; 80064415 C 518
|
||
END 80064420 C 518
|
||
ELSE 80064425 C 518
|
||
BEGIN 80064430 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PREVPASS] := 80064435 C 518
|
||
NEXTFREEENTRY -1; 80064440 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := 80064445 C 518
|
||
PASSSUBRANGE; 80064450 C 518
|
||
END 80064455 C 518
|
||
END 80064460 C 518
|
||
END;TYP:=IF T1.FORM = ARRAYS THEN T1.ARRTYPE ELSE REALTYPE; 80064465 C 518
|
||
T1 := TYPETAB1[TYP]; 80064470 C 518
|
||
END UNTIL T1.STRUCT = 0 ; 80064475 C 518
|
||
IF NOT PARAM THEN 80064480 C 518
|
||
BEGIN 80064485 C 518
|
||
GEN("]=",2,6); 80064490 C 518
|
||
GENID("H",LEVEL1000+NAM,5); 80064495 C 518
|
||
GEN("[",1,7); 80064500 C 518
|
||
PASSSUBRANGE:= FIRSTRANGE; FIRSTDIM := TRUE; 80064505 C 518
|
||
WHILE PASSSUBRANGE ≠ STOPPERSUBTAB DO 80064510 C 518
|
||
BEGIN 80064515 C 518
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE GEN(",",1,7); 80064520 C 518
|
||
GENID("V",(LEVEL1000+NAM)×(IF PASSSUBRANGE>9 THEN 100 ELSE 8006453 C 518
|
||
10)+PASSSUBRANGE+1,IF PASSSUBRANGE>9 THEN 7 ELSE 6); 80064535 C 518
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE]; 80064540 C 518
|
||
END; 80064545 C 518
|
||
GEN("]#;",3,5); 80064550 C 518
|
||
END; 80064555 C 518
|
||
PASSSUBRANGE := FIRSTRANGE; 80064560 C 518
|
||
FIRSTDIM := TRUE; GEN("ARRAY",6,3); GENID("H",LEVEL1000+NAM,5); 80064565 C 518
|
||
GEN("[",1,7); 80064570 C 518
|
||
WHILE PASSSUBRANGE ≠ STOPPERSUBTAB DO 80064575 C 518
|
||
BEGIN 80064580 C 518
|
||
IF MAXPERMTAB LEQ MAXTOTALSUBSCRS AND PARAM THEN 80064585 C 518
|
||
BEGIN 80064590 C 518
|
||
ARRSUBPERMTAB[ARRNAM,MAXPERMTAB] := 80064595 C 518
|
||
IF FIRSTDIM THEN NAM ELSE -1; 80064600 C 518
|
||
ARRSUBPERMTAB[PERMSUB,MAXPERMTAB] := PASSSUBRANGE; 80064605 C 518
|
||
MAXPERMTAB := MAXPERMTAB + 1; 80064610 C 518
|
||
END 80064615 C 518
|
||
ELSE 80064620 C 518
|
||
BEGIN 80064625 C 518
|
||
IF MAXPERMTAB > MAXTOTALSUBSCRS THEN ERROR(0); 80064630 C 518
|
||
END; 80064640 C 518
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE GEN(",",1,7); 80064645 C 518
|
||
GENINT(ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE]); 80064650 C 518
|
||
IF NOT PARAM THEN 80064655 C 518
|
||
BEGIN 80064660 C 518
|
||
GEN(":",1,7); 80064665 C 518
|
||
GENINT(ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE]); 80064670 C 518
|
||
END; 80064675 C 518
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE]; 80064680 C 518
|
||
END; 80064685 C 518
|
||
GEN("]",1,7); 80064950 C 518
|
||
$ 80421000 C 518
|
||
IF CURLEVEL > 1 THEN 80421010 C 518
|
||
BEGIN 80421020 C 518
|
||
INTEGER NAMOFTHING,DIFF; 80421030 C 518
|
||
BOOLEAN FIRSTTIME; 80421040 C 518
|
||
GEN("BEGIN",6,3); 80421050 C 518
|
||
IF MAXPERMTAB > 0 THEN 80421060 C 518
|
||
BEGIN 80421070 C 518
|
||
PASSPERMTAB := 0; 80421080 C 518
|
||
DO 80421090 C 518
|
||
BEGIN 80421100 C 518
|
||
REMEMBERPOSN := PASSPERMTAB; 80421110 C 518
|
||
GEN("DEFINE",7,2); 80421120 C 518
|
||
NAMOFTHING := ARRSUBPERMTAB[ARRNAM,PASSPERMTAB]; 80421130 C 518
|
||
GENID("V",1000×CURLEVEL+NAMOFTHING,5); 80421140 C 518
|
||
GEN("[",1,7); 80421150 C 518
|
||
FIRSTTIME := TRUE; 80421160 C 518
|
||
DO 80421170 C 518
|
||
BEGIN 80421180 C 518
|
||
IF FIRSTTIME THEN FIRSTTIME := FALSE ELSE GEN(",",180421190 C 518
|
||
,7);80421200 C 518
|
||
DIFF := PASSPERMTAB-REMEMBERPOSN+1; 80421210 C 518
|
||
GENID("V",(1000+CURLEVEL+NAMOFTHING)×(IF DIFF>9 THEN 100 ELSE 80421220 C 518
|
||
10)+DIFF,(IF DIFF > 9 THEN 7 ELSE 6)); 80421230 C 518
|
||
PASSPERMTAB := PASSPERMTAB + 1; END 80421270 C 518
|
||
UNTIL PASSPERMTAB = MAXPERMTAB OR 80421280 C 518
|
||
ARRSUBPERMTAB[ARRNAM,PASSPERMTAB] ≠ -1; 80421290 C 518
|
||
GEN("]",1,7); 80421300 C 518
|
||
GEN("=",1,7); 80421310 C 518
|
||
GENID("H",1000×CURLEVEL+NAMOFTHING,5); 80421320 C 518
|
||
GEN("[",1,7); 80421340 C 518
|
||
PASSPERMTAB := REMEMBERPOSN; FIRSTTIME := TRUE; 80421350 C 518
|
||
DO 80421360 C 518
|
||
BEGIN 80421370 C 518
|
||
IF FIRSTTIME THEN FIRSTTIME := FALSE ELSE GEN(",", 80421380 C 518
|
||
1,7);80421390 C 518
|
||
DIFF := ARRSUBPERMTAB[PERMSUB,PASSPERMTAB]+1; 80421400 C 518
|
||
GENID("V",(1000×CURLEVEL+NAMOFTHING)×(IF DIFF>9 THEN80421410 C 518
|
||
100 ELSE 10)+DIFF,(IF DIFF>9 THEN 7 ELSE 6)); 80421420 C 518
|
||
PASSPERMTAB := PASSPERMTAB +1; 80421430 C 518
|
||
END 80421440 C 518
|
||
UNTIL PASSPERMTAB = MAXPERMTAB OR 80421450 C 518
|
||
ARRSUBPERMTAB[ARRNAM,PASSPERMTAB] ≠ -1; 80421460 C 518
|
||
GEN("]#;",3,5); 80421470 C 518
|
||
END 80421480 C 518
|
||
UNTIL PASSPERMTAB = MAXPERMTAB; 80421490 C 518
|
||
MAXPERMTAB := 0; 80421500 C 518
|
||
END 80421510 C 518
|
||
END; 80421520 C 518
|
||
$ 80608000 C 518
|
||
BEGIN 80608010 C 518
|
||
BEGIN 80608020 C 518
|
||
INTEGER NAM,T1,SCRATCH; 80608030 C 518
|
||
NAM := PARAMTAB[I].[9:10]; 80608040 C 518
|
||
SCRATCH := NAMETAB3[CURLEVEL+1,NAM]; 80608050 C 518
|
||
SCRATCH := SCRATCH.TYPE; 80608060 C 518
|
||
T1 := TYPETAB1[SCRATCH]; 80608070 C 518
|
||
IF T1.STRUCT ≠ 0 AND T1.FORM < FILES THEN 80608080 C 518
|
||
GENID("H",1000×(CURLEVEL+1)+NAM,5) 80608090 C 518
|
||
ELSE 80608100 C 518
|
||
GENID("V",1000×(CURLEVEL+1)+NAM,5); 80608110 C 518
|
||
END; 80608120 C 518
|
||
MAXPERMTAB := 0; 90070100 C 518
|
||
INSIDEPARENS := FALSE; 90070200 C 518
|
||
|
||
|
||
|
||
|
||
$# PATCH 519 FOR PASCAL.XVI.O. CONTAINS 1 CARDS. INCREASE RUNTIME STACK. C 519
|
||
|
||
|
||
$: C 519
|
||
" XALGOL STACK = 2048; STACK = 1024; END."; % 90120500 C 519
|
||
|
||
|
||
|
||
|
||
$# PATCH 600 FOR PASCAL.XVI.O. CONTAINS 22 CARDS. DAGS DEC77 PATCHES. C 600
|
||
|
||
|
||
$: PATCHES RECEIVED FROM D.LANGMYHR AND TRANSPOSED FROM COSY FORMAT BY C 600
|
||
$: DAVID A COOPER. FEBRUARY 1978. C 600
|
||
$: C 600
|
||
IF(F1 NEQ SET OR RT NEQ EMPTYSET) % 20813000 C 600
|
||
AND % 20813050 C 600
|
||
(F2 NEQ SET OR LT NEQ EMPTYSET) THEN % 20813100 C 600
|
||
IF(F1 NEQ POINTERS OR RT NEQ NILTYPE) % 20814000 C 600
|
||
AND % 20814050 C 600
|
||
(F2 NEQ POINTERS OR LT NEQ NILTYPE) THEN % 20814100 C 600
|
||
BEGIN ERROR(63); % 40023000 C 600
|
||
$ 50059000 C 600
|
||
GEN("PREAD(",6,2); WRITEEXPR; GEN(",",1,7); % 50079000 C 600
|
||
$ 50080000 C 600
|
||
$ 50081000 C 600
|
||
GENID("F",FILEID,5); GEN(",",1,7); % 50082000 C 600
|
||
IF F=NUMERIC THEN % 50086010 C 600
|
||
BEGIN % 50086050 C 600
|
||
GEN(",",1,7); GENINT(TYPETAB2[CURTYPE]); % 50086100 C 600
|
||
GEN(",",1,7); GENINT(TYPETAB3[CURTYPE]); % 50086150 C 600
|
||
END ELSE GEN(",0,0,",4,4); % 50086200 C 600
|
||
$ SET VOIDT 50088000 C 600
|
||
$ POP VOIDT 50093000 C 600
|
||
IF NAMTAB.IDCLASS=FUNC THEN GEN("FUNCTN",7,2) % 80037000 C 600
|
||
ELSE GEN("PROCEDU",8,1); % 80038000 C 600
|
||
IF FOUND AND (THISID.IDCLASS=PROC OR THISID.IDCLASS=FUNC) THEN 80548000 C 600
|
||
|
||
|
||
|
||
|
||
$#PATCH 601 FOR PASCAL.XVI.O.CONTAINS 147 CARDS. EXTENDE SET MODS. C 601
|
||
|
||
|
||
$: PATCHES RECEIVED FROM D.LANGMYHR AND TRANSPOSED FROM COSY FORMAT BY C 601
|
||
$: DAVID A COOPER. FEBRUARY 1978. C 601
|
||
$: THIS PATCH MODIFIES THE SET HANDLING ROUTINES TO ALLOW SETS OF 0..93 C 601
|
||
$: ELEMENTS C 601
|
||
$: NB. THE RUN TIME SYSTEM MUST BE CHANGED ACCORDINGLY..... C 601
|
||
$: --- --- ---- ------ ---- -- ------- ---------------- C 601
|
||
% 40052050 C 601
|
||
% 40052055 C 601
|
||
PROCEDURE SPLIT(SPLITINX,WIDTH); % 40052100 C 601
|
||
VALUE SPLITINX, WIDTH; % 40052150 C 601
|
||
INTEGER SPLITINX, WIDTH ; % 40052200 C 601
|
||
BEGIN % 40052250 C 601
|
||
INTEGER I; % 40052300 C 601
|
||
% 40052350 C 601
|
||
IF NUMSYMS+WIDTH LEQ MAXSYMS THEN % 40052400 C 601
|
||
BEGIN % 40052450 C 601
|
||
FOR I:=NUMSYMS STEP -1 UNTIL SPLITINX DO % 40052500 C 601
|
||
SYMTAB[I+WIDTH] := SYMTAB[I]; % 40052550 C 601
|
||
FOR I:=1 STEP 1 UNTIL WIDTH DO % 40052600 C 601
|
||
SYMTAB[SPLITINX+I-1] := "3000000"; % 40052650 C 601
|
||
NUMSYMS := NUMSYMS + WIDTH; % 40052700 C 601
|
||
END % 40052750 C 601
|
||
ELSE 40052800 C 601
|
||
BEGIN % 40052830 C 601
|
||
ERROR(63); % 40052860 C 601
|
||
NUMSYMS := 1; % 40052890 C 601
|
||
END; % 40052900 C 601
|
||
END OF SPLIT; % 40052950 C 601
|
||
% 40052960 C 601
|
||
% 40052965 C 601
|
||
END; % 40188005 C 601
|
||
IF TYPETAB1[CURTYPE].FORM=SET THEN % *** SET VARIABLES 40188010 C 601
|
||
BEGIN % --- --- --------- 40188025 C 601
|
||
INTEGER THISSYML, I; % 40188050 C 601
|
||
% 40188075 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SLOAD("; % 40188100 C 601
|
||
IF SIMPLEVAR THEN % 40188125 C 601
|
||
BEGIN % 40188150 C 601
|
||
PUTSYM(","); % 40188175 C 601
|
||
PUTID("W",1000×THISLEVEL+THISINDEX,5); % 40188200 C 601
|
||
END % 40188225 C 601
|
||
ELSE % 40188250 C 601
|
||
IF INBRACKET AND NOT INRECORD THEN % 40188275 C 601
|
||
BEGIN % 40188300 C 601
|
||
PUTSYM(","); THISSYML := NUMSYMS; % 40188325 C 601
|
||
PUTCONST(0); PUTSYM(" "); PUTSYM(","); % 40188350 C 601
|
||
FOR I:=STARTSYM+1 STEP 1 UNTIL THISSYML DO % 40188375 C 601
|
||
PUTTEXT(SYMTAB[I]); 40188400 C 601
|
||
PUTTEXT(" 1] "); % 40188425 C 601
|
||
END % 40188450 C 601
|
||
ELSE % 40188475 C 601
|
||
BEGIN % 40188500 C 601
|
||
THISSYML := NUMSYMS; % 40188525 C 601
|
||
IF INBRACKET THEN PUTSYM("]"); % 40188550 C 601
|
||
FOR I:=1 STEP 1 UNTIL NUMPOINTERS DO % 40188575 C 601
|
||
BEGIN % 40188600 C 601
|
||
PUTTEXT("-1)DIV"); PUTTEXT(" 1022,"); % 40188625 C 601
|
||
PUTTEXT(" T MOD"); PUTTEXT(" 1022]"); % 40188650 C 601
|
||
END; % 40188675 C 601
|
||
PUTSYM(","); % 40188700 C 601
|
||
FOR I:=STARTSYM+1 STEP 1 UNTIL THISSYML DO % 40188725 C 601
|
||
PUTTEXT(SYMTAB[I]); % 40188775 C 601
|
||
PUTTEXT(" +1 "); % 40188800 C 601
|
||
IF INBRACKET THEN PUTSYM("]"); % 40188825 C 601
|
||
FOR I:=1 STEP 1 UNTIL NUMPOINTERS DO % 40188850 C 601
|
||
BEGIN % 40188875 C 601
|
||
PUTTEXT("-1)DIV"); PUTTEXT(" 1022,"); % 40188900 C 601
|
||
PUTTEXT(" T MOD"); PUTTEXT(" 1022]"); % 40188915 C 601
|
||
END; % 40188930 C 601
|
||
NUMPOINTERS := 0; % 40188945 C 601
|
||
END; 40188960 C 601
|
||
PUTSYM(","); PUTCONST(CARDCNT); PUTSYM(")"); % 40188975 C 601
|
||
END OF SET VARIABLES; % 40188990 C 601
|
||
$ 40198000 C 601
|
||
IF TYPETAB1[THISID.TYPE].FORM=SET THEN 40274200 C 601
|
||
BEGIN % 40274220 C 601
|
||
GEN(",",1,7); % 40274240 C 601
|
||
GENID("W",1000×THISLEVEL+THISINDEX,5); % 40274260 C 601
|
||
END; % 40274280 C 601
|
||
BOOLEAN FIRST, SPLITTED; % 40296000 C 601
|
||
PUTTEXT("SETBS("); PUTTEXT(" 3,2,"); PUTCONST(CARDCNT); % 40529000 C 601
|
||
PUTSYM(")"); % 40529300 C 601
|
||
CURTYPE := EMPTYSET; CURMODE := NUMBER; % 40529600 C 601
|
||
STARTSYM := NUMSYMS + 1; % 40533500 C 601
|
||
PUTTEXT(" SETB("); % 40536000 C 601
|
||
PUTSYM(","); SYMTAB[STARTSYM] := "SETBS("; % 40544000 C 601
|
||
IF SPLITTED THEN PUTSYM(")"); % 40551500 C 601
|
||
IF CURSY=COMMA THEN % 40552000 C 601
|
||
BEGIN % 40552200 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SUNIO("; % 40552400 C 601
|
||
PUTSYM(","); % 40552600 C 601
|
||
SPLITTED := TRUE; % 40552800 C 601
|
||
END; % 40552850 C 601
|
||
NEWTYPE; T1 := SET; T1.SIZE := 2; T1.STRUCT := 0; % 40558000 C 601
|
||
CURMODE := NUMBER; % 40561000 C 601
|
||
IF CURTYPE=BOOLTYPE THEN % 40587000 C 601
|
||
IF CURSY NEQ ANDSY THEN ERROR(64); 40593000 C 601
|
||
END ELSE % 40593100 C 601
|
||
IF F=SET THEN % 40593200 C 601
|
||
BEGIN % 40593300 C 601
|
||
IF CURSY=ASTERISK THEN % 40593400 C 601
|
||
BEGIN % 40593500 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SINTS("; % 40593600 C 601
|
||
PUTSYM(","); % 40593700 C 601
|
||
END ELSE ERROR(64); % 40593800 C 601
|
||
MODE := NUMBER; % 40593900 C 601
|
||
IF F=SET THEN PUTSYM(")"); % 40608500 C 601
|
||
SPLIT(STARTSYM,1); % 40650000 C 601
|
||
IF CURSY=PLUS THEN SYMTAB[STARTSYM] := "SUNIO(" ELSE % 40651000 C 601
|
||
IF CURSY=MINUS THEN SYMTAB[STARTSYM] := "SDIFF(" ELSE % 40652000 C 601
|
||
ERROR(64); % 40653000 C 601
|
||
PUTSYM(","); MODE := NUMBER; % 40654000 C 601
|
||
$ 40655000 C 601
|
||
IF F=SET THEN PUTSYM(")"); % 40668500 C 601
|
||
$ 40688000 C 601
|
||
IF CURSY=EQLSY THEN SYMTAB[STARTSYM] := "SEQUA(" % 40713000 C 601
|
||
ELSE 40713150 C 601
|
||
IF CURSY=NEQSY THEN % 40713300 C 601
|
||
BEGIN % 40714000 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM]:= " NOT "; % 40714150 C 601
|
||
SYMTAB[STARTSYM+1] := "SEQUA("; % 40714300 C 601
|
||
IF TYPETAB1[LEFTTYPE].FORM=SET THEN % 60080100 C 601
|
||
BEGIN % 60080200 C 601
|
||
SYMTAB[1] := "SSTOR("; NUMSYMS := NUMSYMS - 3; % 60080300 C 601
|
||
EXPRESSION; % 60080400 C 601
|
||
PUTSYM(")"); CHECKTYPES(LEFTTYPE,CURTYPE); % 60080500 C 601
|
||
WRITEEXPR; % 60080600 C 601
|
||
END ELSE % 60080700 C 601
|
||
IF TYPETAB2[TX] LSS 0 OR TYPETAB3[TX] GTR 93 THEN ERROR(51); 70210000 C 601
|
||
T1.SIZE := TSIZE := 2; TYPETAB1[TYPEINDEX] := T1; % 70214000 C 601
|
||
IF T1.FORM=SET THEN % 80046200 C 601
|
||
BEGIN % 80046400 C 601
|
||
GEN(",",1,7); GENID("W",LEVEL1000+NAM,5); % 80046600 C 601
|
||
END; % 80046800 C 601
|
||
IF T1.FORM=SET THEN % 80064700 C 601
|
||
BEGIN % 80064750 C 601
|
||
GEN(",0",2,6); % 80064800 C 601
|
||
IF NOT PARAM THEN GEN(":1",2,6); % 80064850 C 601
|
||
END; % 80064900 C 601
|
||
BEGIN % 80608105 C 601
|
||
IF T1.FORM=SET THEN % 80608111 C 601
|
||
BEGIN % 80608113 C 601
|
||
GEN(",",1,7); % 80608115 C 601
|
||
GENID("W",1000×(CURLEVEL+1)+NAM,5); % 80608117 C 601
|
||
END; 80608118 C 601
|
||
END; % 80608119 C 601
|
||
IF TYPETAB1[NAMETAB3[CURLEVEL+1,PARAMTAB[I].PARAMNAME].TYPE80627200 C 601
|
||
].FORM=SET 80627205 C 601
|
||
THEN BEGIN % 80627400 C 601
|
||
GEN(",",1,7); % 80627600 C 601
|
||
GENID("W",1000×(CURLEVEL+1)+PARAMTAB[I].PARAMNAME 80627800 C 601
|
||
,5); % 80627801 C 601
|
||
END; 80627850 C 601
|
||
|
||
|
||
|
||
|
||
$#PATCH 602 FOR PASCAL.XVI./ CONTAINS 5 CARDS. CORRECT REPRESENTATION OF "NIL". C 602
|
||
|
||
|
||
$: RECEIVED FROM DAG LANGHYMR ON 6/07/78. C 602
|
||
$: DAVID A COOPER , HERIOT-WATT UNIVERSITY... JULY 1978. C 602
|
||
NILTYPE := 6; %*** TYPE OF "NIL" *** 20363000 C 602
|
||
T1.FORM := POINTERS; TYPETAB1[6] := T1; 20364000 C 602
|
||
EMPTYSET := 7; % 20364500 C 602
|
||
T1.FORM := SET; TYPETAB1[7] := T1; 20365000 C 602
|
||
NUMTYPES := 7; % 20365500 C 602
|
||
|
||
|
||
|
||
|
||
$# PATCH 603 FOR PASCAL XVI.O CONTAINS 6 CARDS. CORRECT TO PATCH 601 C 603
|
||
|
||
|
||
$: DAVID A COOPER & S O ANDERSON, HERIOT-WATT UNIVERSITY. UST AUGUST 1978 C 603
|
||
$: C 603
|
||
INTEGER STARTSYM,FIRSTSYM,MODE,TYPE1,F; 40618000 C 603
|
||
PUTDUMMY; STARTSYM := FIRSTSYM := NUMSYMS; 40621000 C 603
|
||
SPLIT(FIRSTSYM,1); 40650000 C 603
|
||
IF CURSY = PLUS THEN SYMTAB[FIRSTSYM] := "SUNIO(" ELSE 40651000 C 603
|
||
IF CURSY = MINUS THEN SYMTAB[FIRSTSYM] := "SDIFF(" ELSE 40652000 C 603
|
||
ERROR(64); 40653000 C 603
|
||
|
||
|
||
|
||
|
||
$# PATCH 615 FOR PASCAL.XVI.O. CONTAINS 7 CARDS. C 615
|
||
|
||
|
||
$ 40105100 C 615
|
||
$ 40105200 C 615
|
||
$ 40105300 C 615
|
||
$ 40105400 C 615
|
||
IF INSIDEPARENS AND SIMPLEVAR AND TYPETAB1[CURTYPE].STRUCT > 0 AND 40198500 C 615
|
||
TYPETAB1[CURTYPE].FORM < FILES THEN SYMTAB[STARTSYM].[35:6] := 40198600 C 615
|
||
"H"; 40198700 C 615
|
||
|
||
|
||
|
||
|
||
$# PATCH 700 FOR PASCAL.XVI.O HAS 179 CARDS. REDUCE THRASHING BY CODE CHANGE C 700
|
||
|
||
|
||
$: TO IMPROVE RUN TIME EFFICIENCY BY REAARRANGING THE THE COMPILERS CODE. C 700
|
||
$: THE COMPILER HAD A HIGH OVERLAY I/O TIME AND HIGH ELAPSED TIME IN RELATION C 700
|
||
$: TO THE PROCESS TIME, AND OBSERVATION OF THE B5700 CONFIRMED THAT IT WAS C 700
|
||
$: THRASHING IN 32K. THIS PATCH ATTEMPTS TO REDUCE THE CORE REQUIREMENT BY C 700
|
||
$: REARRANGING THE SEGMENTATION OF THE CODE. LARGE SEGMENTS ARE ELIMINATED C 700
|
||
$: SO AS TO AVOID PULLING CODE THAT WILL NOT BE EXECUTED INTO CORE AND TO C 700
|
||
$: RELEASE CODE SEGMENTS AS SO AS EXECUTION HAS PASSED. FOR EXAMPLE, THE C 700
|
||
$: CROSS REFERENCE ROUTINES WERE ALL CONTAINED IN THE LARGE OUTER BLOCK CODE C 700
|
||
$: SEGMENT WHICH INCLUDED VARIOUS UTILITY ROUTINES. C 700
|
||
$: A FEATURE WHICH CONTRIBUTED SIGNIFICANTLY TO LARGE SEGMENTS WAS THE HIGH C 700
|
||
$: NUMBER OF "DEFINES" WHICH RESULTED IN SIZEABLE SECTIONS OF CODE BEING C 700
|
||
$: GENERATED IN-LINE, SOMETIMES MANY TIMES IN ONE SEGMENT. THESE "DEFINES" C 700
|
||
$: WERE READILY CHANGED INTO PROCEDURES. (A SIDE EFFECT OF VIRTUALLY ELIMINATING C 700
|
||
$: DEFINES FOR CODE IS THAT THE "BEND" OPTION NO LONGER RESULTS IN NUMEROUS C 700
|
||
$: BLANK LINES REPEATING THE SAME SEQUENCE NUMBER FOR EVERY "END" IN THE NESTED C 700
|
||
$: DEFINES.) C 700
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN AUG - NOV 1977. C 700
|
||
$: C 700
|
||
$ 10167000 C 700
|
||
$ 10168000 C 700
|
||
$ 10169000 C 700
|
||
VALUE NAME1,NAME2,TABLE,DECL; 20016000 C 700
|
||
REAL NAME1,NAME2; 20017000 C 700
|
||
INTEGER TABLE; BOOLEAN DECL; 20018000 C 700
|
||
FORWARD; 20019000 C 700
|
||
PROCEDURE PRINTERRORS; FORWARD; 20020000 C 700
|
||
PROCEDURE HEADING; %*** PRINTS A HEADING AT START OF NEW PAGE.20026000 C 700
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; 20027000 C 700
|
||
END OF HEADING; 20033000 C 700
|
||
PROCEDURE PRINTLINE; %*** PRINTS A PASCAL SOURCE CODE LINE 20036000 C 700
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; 20037000 C 700
|
||
END OF PRINTLINE; 20047000 C 700
|
||
PROCEDURE NEWCARD; %*** READS A NEW PASCAL SOURCE CODE CARD 20050000 C 700
|
||
BEGIN DEFINE RESULT = ICARD[*], ETC #; 20051000 C 700
|
||
REPLACE XLINEPNT BY " " FOR 16 WORDS; 20056000 C 700
|
||
REPLACE LINEPNT BY CARDPNT FOR 10 WORDS, XLINEPNT FOR 6 WORDS; 20057000 C 700
|
||
END OF NEWCARD; 20061000 C 700
|
||
DEFINE GEN(GEN1,GEN2,GEN3) = GENI(TRUE,GEN1,GEN3,GEN2) #, 20063100 C 700
|
||
GENID(GENID1,GENID2,GENID3)= GENI(FALSE,GENID1,GENID2,GENID3) #; 20063200 C 700
|
||
20063300 C 700
|
||
PROCEDURE GENI(GENT, TXT, NUM, N ); 20063400 C 700
|
||
VALUE GENT, TXT, NUM, N; 20063500 C 700
|
||
BOOLEAN GENT; ALPHA TXT; INTEGER NUM, N; 20063600 C 700
|
||
BEGIN DEFINE START = NUM #, NDIG = N #; 20063700 C 700
|
||
20063800 C 700
|
||
IF GENT THEN %*** GENERATE A TEXT "TXT", CONSISTING OF 20064000 C 700
|
||
TEXT[0] := TXT; 20067000 C 700
|
||
END 20070000 C 700
|
||
ELSE %*** GENERATE AN ALGOL IDENTIFIER. 20073000 C 700
|
||
CH[0] := TXT; 20076000 C 700
|
||
END END GENI; 20079000 C 700
|
||
PROCEDURE GENINT( N ); 20082000 C 700
|
||
VALUE N; INTEGER N; 20083000 C 700
|
||
BEGIN DEFINE RESULT = ALGOL CODE #; 20084000 C 700
|
||
INTEGER NABS, NSIZE; 20085000 C 700
|
||
END OF GENINT; 20097000 C 700
|
||
PROCEDURE WRITEALGOL; %*** WRITES A COMPLETED ALGOL CARD TO 20145000 C 700
|
||
DEFINE NEWSEGMENT = HERE #; 20146100 C 700
|
||
DEFINE NEWSEGMENT = HERE #; 20168100 C 700
|
||
DEFINE NEWSEGMENT = HERE #; 20180100 C 700
|
||
DEFINE NEWSEGMENT = HERE #; 20193100 C 700
|
||
ALPHA THISID, CURNAME1, CURNAME2; % USED IN SCANNER 20205000 C 700
|
||
PROCEDURE SEARCHTAB( TAB ); %*** SEARCH NAME TABLE "TAB" FOR THE 20208000 C 700
|
||
VALUE TAB; INTEGER TAB; %*** IDENTIFIER JUST READ. 20208100 C 700
|
||
END OF SEARCHTAB; 20221000 C 700
|
||
PROCEDURE SEARCH; %*** SEARCH ALL TABLES CURRENTLY IN USE. 20223000 C 700
|
||
BEGIN DEFINE RESULT = THISID #; 20224000 C 700
|
||
END OF SEARCH; 20233000 C 700
|
||
PROCEDURE NEWNAME( NAME1,NAME2, TAB ); 20236000 C 700
|
||
VALUE NAME1, NAME2, TAB; 20236100 C 700
|
||
ALPHA NAME1, NAME2; INTEGER TAB; 20236200 C 700
|
||
END OF NEWNAME; 20250000 C 700
|
||
DEFINE NEWSEGMENT = HERE #; 20515100 C 700
|
||
DEFINE NEWSEGMENT = HERE #; 20533100 C 700
|
||
DEFINE NEWSEGMENT = HERE #; 20546100 C 700
|
||
PROCEDURE CHECKTYPES( LEFTTYPE, RIGHTTYPE ); 20802000 C 700
|
||
VALUE LEFTTYPE, RIGHTTYPE; INTEGER LEFTTYPE, RIGHTTYPE; 20803000 C 700
|
||
BEGIN 20804000 C 700
|
||
REAL TT1, TT2; INTEGER F1, F2, LT, RT; 20805000 C 700
|
||
END OF CHECKTYPES; 20838000 C 700
|
||
PROCEDURE FILEPARAM( DEFAULTFILE ); %*** CHECKS THE FIRST PARAMETER 20844000 C 700
|
||
VALUE DEFAULTFILE; INTEGER DEFAULTFILE;%*** TO SEE IF IT IS A FILE. 20844100 C 700
|
||
BEGIN DEFINE RESULTS = FILENAME & LPARFOUND #; 20845000 C 700
|
||
END OF FILEPARAM; 20869000 C 700
|
||
REAL CURVAL; INTEGER CURLENGTH; 20872000 C 700
|
||
20873000 C 700
|
||
PROCEDURE CONSTANT( CVAL, CTYPE ); 20874000 C 700
|
||
REAL CVAL; INTEGER CTYPE; 20875000 C 700
|
||
BEGIN 20876000 C 700
|
||
INTEGER TFORM; BOOLEAN SIGNED, NEGATIVE; 20876100 C 700
|
||
END OF CONSTANT; 20921000 C 700
|
||
$ 30082000 C 700
|
||
ALPHA C, CX; %( CURNAME1 & CURNAME2 MOVED TO 20205000 ) 30083000 C 700
|
||
INTEGER LASTCHARPOS; %( CURVAL, CURLENGTH MOVED TO 20872000 ) 30084000 C 700
|
||
PROCEDURE INSYMBOL; %*** IDENTIFIES THE NEXT SYMBOL ****** 30087000 C 700
|
||
BEGIN 30087100 C 700
|
||
30087200 C 700
|
||
PROCEDURE NEXTCHAR; %*** GETS THE NEXT CHARACTER. 30088000 C 700
|
||
END OF NEXTCHAR; 30093000 C 700
|
||
$ SET VOIDT 30095000 C 700
|
||
$ POP VOIDT 30098000 C 700
|
||
DEFINE T1 = EXP #; % USED AT 30178000 30099100 C 700
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; 30261100 C 700
|
||
END NEWSEGEMENT; 30282200 C 700
|
||
$ 40016000 C 700
|
||
$ 40017000 C 700
|
||
INTEGER EXPRLEVEL; 40018000 C 700
|
||
DEFINE PUTSYM(S) = PUTTEXT( (S)&1[41:5:6] ) #; 40029000 C 700
|
||
$ SET VOIDT 40029900 C 700
|
||
$ POP VOIDT 40033000 C 700
|
||
DEFINE PUTDUMMY = PUTTEXT("3000000") #; 40041000 C 700
|
||
$ SET VOIDT 40042000 C 700
|
||
$ POP VOIDT 40044000 C 700
|
||
PROCEDURE WRITEEXPR; %*** WRITE GENERATED ALGOL EXPRESSION 40053000 C 700
|
||
REAL SX; INTEGER T1, TX; 40054100 C 700
|
||
END OF WRITEEXPR; 40066000 C 700
|
||
PROCEDURE CHECKEXPR( LLIM, ULIM ); %*** WRITE CODE TO CHECK VALUE 40069000 C 700
|
||
VALUE LLIM, ULIM; INTEGER LLIM, ULIM; 40069100 C 700
|
||
BEGIN DEFINE CHECK = VALUE #; 40070000 C 700
|
||
END OF CHECKEXPR; 40077000 C 700
|
||
INTEGER T1, T5; % USED ONCE EACH 40086100 C 700
|
||
T1:=T.FIRSTWITHSYM; T5:=T.LASTWITHSYM; 40094000 C 700
|
||
FOR T1:=T1 STEP 1 UNTIL T5 DO PUTTEXT(WITHTAB[T1]); 40095000 C 700
|
||
DEFINE T1 = T #; % USED AT 40558000 40298000 C 700
|
||
$ SET VOIDT 40299000 C 700
|
||
$ POP VOIDT 40309000 C 700
|
||
40331000 C 700
|
||
PROCEDURE PARAMETER; %*** CHECK THAT THE FUNCTION HAS 1 PARAM.40332000 C 700
|
||
BEGIN 40333000 C 700
|
||
INSYMBOL; 40334000 C 700
|
||
IF CURSY=LPAR 40335000 C 700
|
||
THEN BEGIN 40336000 C 700
|
||
PUTSYM("("); INSYMBOL; EXPRESSION; 40337000 C 700
|
||
IF TYPETAB1[CURTYPE].FORM=NUMERIC THEN CURTYPE:=INTTYPE; 40338000 C 700
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(3); SKIP(RPAR) END; 40339000 C 700
|
||
PUTSYM(")"); IF CURSY=RPAR THEN INSYMBOL; 40340000 C 700
|
||
END ELSE ERROR(3); % OR ERROR(58) 40341000 C 700
|
||
END OF PARAMETER; 40342000 C 700
|
||
40350000 C 700
|
||
$ 60396000 C 700
|
||
BEGIN LABEL LABFOUND; 60399000 C 700
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) OR 60423000 C 700
|
||
THISID.IDCLASS=FUNC 60423200 C 700
|
||
THEN ASSIGNMENT ELSE 60424000 C 700
|
||
$ SET VOIDT 70013000 C 700
|
||
$ POP VOIDT 70016000 C 700
|
||
VALUE RECTAB,FIRSTADDR; 70018000 C 700
|
||
INTEGER RECTAB,FIRSTADDR,LASTADDR; 70019000 C 700
|
||
$ SET VOIDT 70022000 C 700
|
||
$ POP VOIDT 70034000 C 700
|
||
70035000 C 700
|
||
PROCEDURE TYPEDECL( TTYPE, TSIZE ); %***** TYPE DECLARATION ***** 70036000 C 700
|
||
INTEGER TTYPE, TSIZE; %**************************** 70037000 C 700
|
||
BEGIN 70038000 C 700
|
||
INTEGER RECINX, ARRSTRUCT, TX, SX, T, N; REAL T1, T2, T3; 70039000 C 700
|
||
BOOLEAN FIRST, PACKED; 70040000 C 700
|
||
70041000 C 700
|
||
$ 70042000 C 700
|
||
END TYPERR; 70048000 C 700
|
||
PROCEDURE SUBRANGE; %*** SUBRANGE DECLARATION *** 70050000 C 700
|
||
BEGIN %**************************** 70051000 C 700
|
||
REAL VALX1, VALX2, T1; 70052000 C 700
|
||
INTEGER TYPEX1, TYPEX2; 70053000 C 700
|
||
70054000 C 700
|
||
CONSTANT(VALX1,TYPEX1); 70055000 C 700
|
||
IF TYPETAB1[TYPEX1].FORM>CHAR THEN ERROR(11); 70056000 C 700
|
||
IF CURSY≠DOUBLEDOT THEN ERROR(53); 70057000 C 700
|
||
INSYMBOL; 70058000 C 700
|
||
CONSTANT(VALX2,TYPEX2); 70059000 C 700
|
||
IF TYPEX1>0 AND TYPEX2>0 THEN 70060000 C 700
|
||
IF TYPEX1≠TYPEX2 THEN ERROR(11) ELSE 70061000 C 700
|
||
IF VALX1>VALX2 THEN ERROR(54); 70062000 C 700
|
||
IF (T1:=TYPETAB1[TYPEX1].FORM) = SYMBOLIC THEN T1:=SUBTYPE; 70063000 C 700
|
||
NEWTYPE; TTYPE:=TYPEINDEX; 70064000 C 700
|
||
T1.SIZE:=TSIZE:=1; T1.STRUCT:=0; T1.MAINTYPE:=TYPEX1; 70065000 C 700
|
||
TYPETAB1[TYPEINDEX]:=T1; 70066000 C 700
|
||
TYPETAB2[TYPEINDEX]:=VALX1; TYPETAB3[TYPEINDEX]:=VALX2; 70067000 C 700
|
||
END OF SUBRANGE; 70068000 C 700
|
||
70069000 C 700
|
||
DEFINE DEC = POINTER #; 70117100 C 700
|
||
DEFINE DEC = ARRAY #; 70143100 C 700
|
||
DEFINE DEC = FILE #; 70180100 C 700
|
||
DEFINE DEC = SET #; 70200100 C 700
|
||
DEFINE DEC = RECORD #; 70220100 C 700
|
||
LABEL CASEPART, EXIT; 70247000 C 700
|
||
BEGIN DEFINE DEC = VARIANT #; 70285100 C 700
|
||
LABEL CASETYPEID; 70285200 C 700
|
||
END; 70349100 C 700
|
||
DEFINE DEC = FILE #; 80066100 C 700
|
||
GEN(""/",2,6); 80107000 C 700
|
||
DEFINE DEC = LABEL #; 80424100 C 700
|
||
DEFINE DEC = CONST #; 80447100 C 700
|
||
DEFINE DEC = TYPE #; 80475100 C 700
|
||
DEFINE DEC = VAR #; 80496100 C 700
|
||
IF CURSY=FUNCSY OR CURSY=PROCSY % 80540900 C 700
|
||
THEN BEGIN DEFINE DEC = CODE #; 80540910 C 700
|
||
END OF SEGMENT FOR PROCEDURE DECLARATIONS; 80658100 C 700
|
||
|
||
|
||
|
||
|
||
$# PATCH 701 FOR PASCAL.XVI.O CONTAINS 14 CARDS. REDUCE THRASHING BY ARRAY CUTS C 701
|
||
|
||
|
||
$: TO IMPROVE RUN TIME EFFICIENCY BY REDUCING ARRAY SIZES. THE MOST SIGNIFICANT C 701
|
||
$: CONTRIBUTION TO THE COMPILERS THRASHING BEHAVIOUR WAS THE EXCESSIVELY LARGE C 701
|
||
$: DATA ARRAYS. THIS PATCH SUCCEEDS IN DRASTICALLY REDUCING THE CORE REQUIREMENT C 701
|
||
$: OF THE COMPILER BY MAKING MOST OF THE LARGE ARRAYS MUCH SMALLER WITHOUT C 701
|
||
$: IMPOSING UNREASONABLE RESTRICTIONS. IN PARTICULAR, THE THREE ARRAYS, C 701
|
||
$: NAMETAB1, NAMETAB2, NAMETAB3 WERE EACH [0:50, 0:1022], AND HAVE BEEN REDUCED C 701
|
||
$: TO [0:30, 0:307]. THESE REDUCTIONS HAVE NOT PREVENTED THE COMPILATION OF C 701
|
||
$: A LARGE PASCAL PROGRAM OF ABOUT 4000 LINES, NAMELY THE P4 PASCAL COMPILER C 701
|
||
$: FROM ZURICH. IN FACT, PRIOR TO THE CHANGES INTRODUCED BY PATCHES 700 & 701, C 701
|
||
$: THE P4 PASCAL COMPILER TOOK 60 MINUTES ELAPSED TIME TO COMPILE, WHICH WAS C 701
|
||
$: REDUCED TO 9 MINUTES BY THESE PATCHES, WHILE THE PROCESS TIME HAS REMAINED C 701
|
||
$: CONSTANT AT 9 MINUTES. C 701
|
||
$:**** NOTE THAT IF "MAXNAMES" IS CHANGED THEN THERE ARE 7 DEFINES IN THE FILE C 701
|
||
$: PASCAL/PRELUDE THAT MUST ALSO BE CHANGED. C 701
|
||
$: "MAXNAMES" IS CHOSEN AS A PRIME NUMBER AS IT IS USED AS A MODULUS FOR A HASH C 701
|
||
$: FUNCTION. THE PASCAL IDENTIFIERS ARE TRANSLATED TO ALGOL NAMES USING LEVEL C 701
|
||
$: AND HASH INDEX. HENCE CHANGING "MAXNAMES" CHANGES THE ALGOL NAMES FOR C 701
|
||
$: "INPUT", "OUTPUT", & "PRT25". C 701
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN AUG - NOV 1977. C 701
|
||
$: C 701
|
||
DEFINE MAXTABLES = 30 #, %MAX NUMBER OF LEVELS IN IDENTIFIER TABLE.10042000 C 701
|
||
MAXNAMES =307 #, %MAX NAMES IN EACH ROW OF IDENTIFIER TABLE.10043000 C 701
|
||
% ONLY USED IN WITH STATEMENT TO TEST 10044001 C 701
|
||
MAXCASES =64 #, %MAX LABELS IN A CASE-STATEMENT. 10045000 C 701
|
||
MAXLABS =50 #, %MAX NUMBER OF IN PROGRAM LABELS. 10046000 C 701
|
||
MAXPARAMS =200 #, %MAX NUMBER OF PARAMETERS IN WHOLE PROGRAM.10047000 C 701
|
||
MAXTYPES =250 #, %MAX NUMBER OF DIFFERENT TYPES. 10048000 C 701
|
||
MAXCONSTS =100 #, %SIZE OF TABLE FOR CONSTANTS. 10049000 C 701
|
||
MAXWITHSYMS= 70 #, %MAX NUMBER OF SYMBOLS USED BY WITH-STATMS.10051000 C 701
|
||
MAXSYMS =200 #, %MAX NUMBER OF SYMBOLS IN ONE EXPRESSION. 10052000 C 701
|
||
LISTLENGTH =100 #, %MAX LENGTH OF VAR AND PARAM LISTS. 10053000 C 701
|
||
MAXEXTFILES=10 #, %MAX NUMBER OF EXTERNAL FILES. 10054000 C 701
|
||
MAXFILES =10 #, %MAX NUMBER OF FILES DECLARED AT ONE TIME. 10055000 C 701
|
||
MAXPNTRS =10 #; %MAX NUMBER OF UNDECLARED POINTERS (FORWD).10056000 C 701
|
||
|
||
|
||
|
||
|
||
$# PATCH 702 FOR PASCAL.XVI.O CONTAINS 4 CARDS. BOOLEAN ARRAY "ERR" 120 TO 4 C 702
|
||
|
||
|
||
$: TO EXTEND THE REDUCTIONS OF PATCH 701 TO THE BOOLEAN ARRAY "ERR" FOR NOTING C 702
|
||
$: THE SYNTAX ERRORS THAT HAVE OCCURRED. THIS PATCH COMPRESSES THE ARRAY FROM C 702
|
||
$: 120 WORDS TO 4 WORDS BY USING 32 BITS IN EACH WORD. C 702
|
||
$: IN ADDITION, THIS PATCH INSERTS THE ERROR COUNT ON THE LEFT OF THE LINE C 702
|
||
$: WHICH REPORTS THE SYNTAX ERRORS. C 702
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 702
|
||
$: C 702
|
||
ARRAY ERRP[0:3]; % HOLDS 128 BITS % RECORDS ERROR MESSAGES USED. 10156000 C 702
|
||
DEFINE ERR[ERR1] = BOOLEAN(0&ERRP[ERR1.[6:2]][0:ERR1.[4:5]:1]) #; 10156100 C 702
|
||
ERRP[ERRNUM.[6:2]]:=ERRP[ERRNUM.[6:2]] & 1[ERRNUM.[4:5]:0:1]; 20182000 C 702
|
||
REPLACE POINTER(ERRLINE[0])+4 BY NUMERRS FOR 4 DIGITS; 20194900 C 702
|
||
|
||
|
||
|
||
|
||
$# PATCH 703 FOR PASCAL.XVI.O CONTAINS 6 CARDS. REDUCE THRASHING BY SAVE CORE C 703
|
||
|
||
|
||
$: TO IMPROVE RUN-TIME EFFICIENCY BY REDUCING NON-OVERLAYABLE AREAS. C 703
|
||
$: THIS PATCH REDUCES THE SAVE CORE REQUIREMENTS BY DECREASING THE FILE BLOCK C 703
|
||
$: SIZES AND ALSO THE NUMBER OF BUFFERS WITHOUT UNDULY RETARDING THE COMPILATION C 703
|
||
$: SPEED. THE SIZE OF THE DISK AREAS IS KEPT A MULTIPLE OF THE ORIGINAL BLOCK C 703
|
||
$: SIZE WHERE RELEVANT TO AVOID INCOMPATIBILITY PROBLEMS. COMPARABLE REDUCTIONS C 703
|
||
$: IN BLOCK SIZES OF THE OBJECT PROGRAM ARE ALSO MADE. C 703
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 703
|
||
$: C 703
|
||
FILE CARD "SOURCE" (1,10,30); % PASCAL SOURCE CODE INPUT FILE 10035000 C 703
|
||
FILE PASCALGOL DISK SERIAL [20:300] (1,10,30,SAVE 0); % ALGOL CODE FILE10037000 C 703
|
||
FILE XREFFILE DISK SERIAL [20:3000] (1,3,30); % FOR CROSS REFERENCE 10137000 C 703
|
||
IF RECSIZE=1 OR RECSIZE=10 THEN GENINT(30) 80119000 C 703
|
||
GEN(",SAVE",6,3); 80122000 C 703
|
||
GEN("30);", 4,4); 80123000 C 703
|
||
|
||
|
||
|
||
|
||
$# PATCH 704 FOR PASCAL.XVI.O HAS 8 CARDS. REDUCE OVERHEADS IN COPYING FILE C 704
|
||
|
||
|
||
$: TO REDUCE THE COMPILER-S OVERHEADS. FIRSTLY, THE ALGOL CODE FILE C 704
|
||
$: PASCRUN/DISK IS RENAMED PASCAL/PRELUDE. ORIGINALLY, THE COMPILER COPIED C 704
|
||
$: THE PASCAL/PRELUDE FILE INTO THE GENERATED CODE FILE BEFORE STARTING TO C 704
|
||
$: TRANSLATE THE PASCAL PROGRAM. THIS PATCH SAVES THE 3 SECONDS OR SO REQUIRED C 704
|
||
$: FOR THIS BY SETTING THE "TAPE" OPTION FOR THE ALGOL COMPILER AND LABEL C 704
|
||
$: EQUATING THE TAPE FILE TO PASCAL/PRELUDE. THE OVERHEAD TO THE ALGOL COMPILER C 704
|
||
$: IS NEGLIGIBLE. THE ADVANTAGE IS EVEN GREATER IF THE PROGRAM FAILS TO C 704
|
||
$: COMPILE SYNTAX FREE. THE FILE PASCAL/PRELUDE IS NO LONGER REFERENCED C 704
|
||
$: DIRECTLY IN THE PASCAL COMPILER. C 704
|
||
$: SEE PATCH 711. THIS NEEDS PATCH 705. C 704
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 704
|
||
$: C 704
|
||
ERRORS (I5," ERRORS DETECTED ",20("#") /), 10188000 C 704
|
||
ALIST ("$ SET LIST "), 10189000 C 704
|
||
MERGE ("$ SET TAPE RESET $" / 10190100 C 704
|
||
"$ RESET TAPE", T73,"99000000" ), 10190200 C 704
|
||
TERMMESS ("**** COMPILATION TERMINATED."); 10192000 C 704
|
||
WRITE(PASCALGOL,MERGE); % ALGOL MUST COMPILE PRELUDE FIRST 90022000 C 704
|
||
$ SET VOIDT 90023000 C 704
|
||
$ POP VOIDT 90032000 C 704
|
||
$: "; ALGOL FILE TAPE= PASCAL/PRELUDE SERIAL; ALGOL FILE CARD=", 90119000 C 704
|
||
|
||
|
||
|
||
|
||
$# PATCH 705 FOR PASCAL.XVI.O CONTAINS 21 CARDS. GENERATE A BETTER ZIP C 705
|
||
|
||
|
||
$: THIS PATCH TIDIES UP THE CODE THAT GENERATES THE ZIP TO PASS CONTROL TO THE C 705
|
||
$: COMPATABLE ALGOL COMPILER. C 705
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 705
|
||
$: C 705
|
||
$ 90013000 C 705
|
||
PROGNAME := IF CURLENGTH < 7 90042000 C 705
|
||
THEN " "&CURNAME1[41:6×CURLENGTH-1:6×CURLENGTH] 90042010 C 705
|
||
ELSE CURNAME2.[5:6]&CURNAME1[41:35:36]; 90042020 C 705
|
||
$: ARRAY ZIPARRAY[0:16]; 90092000 C 705
|
||
DEFINE PPROGNAME = 13 #, PALGOLNAME = 14 #, 90095000 C 705
|
||
PLIBRARY = 15 #, PUSER = 16 #, 90096000 C 705
|
||
P(P1) = POINTER(ZIPARRAY[P1])+1 FOR 7 #; 90097000 C 705
|
||
$ SET VOIDT 90098000 C 705
|
||
$ POP VOIDT 90104000 C 705
|
||
$ 90109000 C 705
|
||
ZIPARRAY[PPROGNAME]:=PROGNAME; ZIPARRAY[PALGOLNAME]:=ALGOLNAME; 90112000 C 705
|
||
ZIPARRAY[PLIBRARY]:= IF SAVEFACTOR>0 THEN "LIBRARY" ELSE 90113000 C 705
|
||
IF SAVEFACTOR<0 THEN " SYNTAX" ELSE " & RUN "; 90114000 C 705
|
||
ZIPARRAY[PUSER]:=USER; 90115000 C 705
|
||
REPLACE POINTER(ZIPARRAY[*]) BY "CC COMPILE ", 90116000 C 705
|
||
P(PPROGNAME), "/", P(PUSER), 90117000 C 705
|
||
" XALGOL ", P(PLIBRARY), 90118000 C 705
|
||
"; ALGOL FILE TAPE= PASCAL/PRELUDE SERIAL; ALGOL FILE CARD=", 90119000 C 705
|
||
P(PALGOLNAME), "/", P(PUSER), " SERIAL; END."; 90120000 C 705
|
||
$ SET VOIDT 90121000 C 705
|
||
$ POP VOIDT 90128000 C 705
|
||
|
||
|
||
|
||
|
||
$# PATCH 708 FOR PASCAL.XVI.O CONTAINS 25 CARDS. LINE PRINT FILE MAY BE DISK C 708
|
||
|
||
|
||
$: TO ENABLE THE COMPILER-S PRINT FILE TO BE LABEL EQUATED TO DISK AS FOR OTHER C 708
|
||
$: B5700 COMPILERS. IN PARTICULAR, THIS PATCH CHANGES THE NAME TO LINE TO BE C 708
|
||
$: CONSISTENT WITH ALL THE SYSTEM COMPILERS. THE ABILITY TO LABEL EQUATE FILE C 708
|
||
$: "LINE" TO DISK IS NECESSARY IF THE COMPILER IS TO BE USED FROM A TERMINAL. C 708
|
||
$: NOTE THAT A BLOCKED FILE SHOULD NOT HAVE VARIABLE LENGTH RECORDS IF IT IS C 708
|
||
$: TO BE LABEL EQUATED TO A PRINTER. IF LESS THAN A THE MAX NUMBER OF WORDS PER C 708
|
||
$: RECORD IS WRITTEN, THE BALANCE OF THE RECORD REMAINS UNCHANGED FROM WHAT WAS C 708
|
||
$: LAST IN THE FILE BUFFER, SO THAT ON BEING PRINTED "GARBAGE", APPEARS AT THE C 708
|
||
$: END OF SUCH LINES. C 708
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 708
|
||
$: C 708
|
||
SAVE FILE OUT LINE DISK SERIAL [20:1200] (1,17,90,SAVE 1); % PRINT FILE 10036000 C 708
|
||
% AVOID BLOCKING RECORDS OF VARIABLE LENGTH 10036001 C 708
|
||
ARRAY ICARD, ALGOLCARD[0:9], LINES, XLINE[0:16]; 10130000 C 708
|
||
% AVOID BLOCKING VARIABLE LENGTH RECORDS 10130001 C 708
|
||
ARRAY HEADTEXT, ERRLINE[0:16]; 10133000 C 708
|
||
WRITE( LINE[NO],17,XLINE[*]); 20042000 C 708
|
||
WRITE( LINE[NO],17,XLINE[*]); 20043000 C 708
|
||
WRITE(LINE, 17,LINES[*]); 20045000 C 708
|
||
WRITE(LINE, 17,ERRLINE[*]); 20195000 C 708
|
||
LINEPNT :=POINTER(LINES[1]); 20315000 C 708
|
||
REPLACE LINEPNT-8 BY " " FOR 17 WORDS; 20317000 C 708
|
||
REPLACE XLINEPNT-8 BY LINEPNT-8 FOR 17 WORDS; 20318000 C 708
|
||
REPLACE POINTER(ERRLINE[*]) BY "**** ", LINEPNT FOR 16 WORDS; 20319000 C 708
|
||
REPLACE ALGOLPNT BY LINEPNT FOR 9 WORDS; 20321000 C 708
|
||
REPLACE POINTER(HEADTEXT[*]) BY LINEPNT FOR 10 WORDS, "PAGE 1 ", 20326000 C 708
|
||
LINEPNT FOR 6 WORDS; 20326100 C 708
|
||
WRITE(LINE, 17,XREFLINE[*]); 20549000 C 708
|
||
LOCK( LINE, * ); % & CRUNCH 20550000 C 708
|
||
WRITE(LINE, 17,XREFLINE[*]); LINECNT:=LINECNT+1; 20560000 C 708
|
||
WRITE(LINE, 17,XREFLINE[*]); LINECNT:=LINECNT+1; 20571000 C 708
|
||
WRITE(LINE, TERMMESS); 90084000 C 708
|
||
WRITE(LINE, NOERRORS); 90111000 C 708
|
||
WRITE(LINE, ERRORS,NUMERRS); 91110000 C 708
|
||
WRITE(LINE, ERRORMESS1[I]); 91112000 C 708
|
||
WRITE(LINE, ERRORMESS2[I-60]); 91114000 C 708
|
||
|
||
|
||
|
||
|
||
$# PATCH 709 FOR PASCAL.XVI.O CONTAINS 17 CARDS. NO PRINT IF NO LIST & NO ERRORS C 709
|
||
|
||
|
||
$: TO OPEN THE PRINT FILE ONLY IF THE LIST OPTION IS SET OR IF SYNTAX ERRORS C 709
|
||
$: ARE DETECTED. IF THE FIRST CARD IN THE PASCAL SOURCE RESETS THE LIST OPTION C 709
|
||
$: (*$L- *) AND NO SYNTAX ERRORS ARE DETECTED, THEN THE PRINT FILE WILL NOT BE C 709
|
||
$: CREATED (EVEN FOR THE HEADING) AS FOR OTHER COMPILERS. IN PARTICULAR, THIS C 709
|
||
$: IMPLEMENTATION DOES NOT REQUIRE A TEST PRIOR TO PRINTING EACH LINE TO C 709
|
||
$: DETERMINE WHETHER A HEADING HAS BEEN PRINTED. IT ONLY DOES THIS TEST WHEN C 709
|
||
$: THE LIST OPTION IS SET AFTER THE FIRST CARD OR EXPLICITLY THEREAFTER, OR C 709
|
||
$: IN THE "PRINTERRORS" ROUTINE. C 709
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 709
|
||
$: C 709
|
||
IF PAGECNT=1 THEN WRITE(LINE[NO],17,HEADTEXT[*]) ELSE 20029900 C 709
|
||
WRITE( LINE[PAGE]); 20030000 C 709
|
||
WRITE( LINE[DBL],17,HEADTEXT[*]); 20031000 C 709
|
||
IF NOT LISTOPTION THEN 20194000 C 709
|
||
BEGIN IF PAGECNT=0 THEN HEADING; PRINTLINE END; 20194100 C 709
|
||
REPLACE POINTER(HEADTEXT[*])+45 BY TEXTPNT+5 FOR 2,"/", 20329000 C 709
|
||
TEXTPNT+1 FOR 2, "/", TEXTPNT+3 FOR 2; 20330000 C 709
|
||
NEWCARD; LISTOPTION:=CHECKOPTION:=TRUE; % DEFAULT 20402100 C 709
|
||
INSYMBOL; % ANALYSING FIRST CARD MAY CHANGE DEFAULT LIST OPTN 20402200 C 709
|
||
IF LISTOPTION AND PAGECNT=0 THEN HEADING; % ON FIRST PAGE. 20402300 C 709
|
||
IF LISTOPTION THEN IF PAGECNT=0 THEN HEADING; % ON FIRST PAGE30282100 C 709
|
||
C := " "; % TO INITIALIZE "INSYMBOL" 90034000 C 709
|
||
INITIALIZE; % COMPILER TABLES, NEWCARD, INSYMBOL 90035000 C 709
|
||
$ 90036000 C 709
|
||
IF PAGECNT > 0 % THERE HAS BEEN SOME LISTING 90088000 C 709
|
||
THEN BEGIN WRITE( LINE[DBL] ); WRITE( LINE[DBL] ) END; 90089000 C 709
|
||
IF PAGECNT>0 THEN % THERE HAS BEEN LISTING 90110000 C 709
|
||
|
||
|
||
|
||
|
||
$# PATCH 710 FOR PASCAL.XVI.0 CONTAINS 4 CARDS. NO OVERPRINTING WITH BLANK LINE C 710
|
||
|
||
|
||
$: TO PREVENT OVERPRINTING WITH BLANK LINES. IF THE OPTION FOR "BOLDFACE" C 710
|
||
$: PRINTING OF RESERVED WORDS IS SET (*$R+ *) THEN EACH LINE IS CONSTRUCTED BY C 710
|
||
$: 2 OVERPRINTS FOR THE RESERVED WORDS ONLY, THEN ONE PRINT OF THE FULL TEXT. C 710
|
||
$: THE AIM OF THIS PATCH IS TO SKIP THE OVERPRINTING FOR ALL THOSE LINES IN C 710
|
||
$: WHICH NO RESERVED WORDS OCCUR. C 710
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 710
|
||
$: C 710
|
||
DEFINE RESWORDPRESENT = RESWORDOPTION.[1:1] #; 10159100 C 710
|
||
IF REAL(RESWORDOPTION) = 3 THEN % RESERVED WORD IS PRESENT 20040000 C 710
|
||
RESWORDOPTION := RESWORDOPTION AND TRUE; % RESET RESWORDPRESENT 20057100 C 710
|
||
RESWORDOPTION := BOOLEAN(3); % SET RESWORDPRESENT BIT 30179000 C 710
|
||
|
||
|
||
|
||
|
||
$# PATCH 711 FOR PASCAL.XVI.O CONTAINS 10 CARDS. PASC001/USERCODE UNIQUE NAME C 711
|
||
|
||
|
||
$: TO GENERATE A UNIQUE FILE NAME IN THE DISK DIRECTORY. THIS PATCH CHANGES THE C 711
|
||
$: METHOD FOR GENERATING A UNIQUE FILE NAME FOR THE ALGOL SOURCE CODE OUTPUT OF C 711
|
||
$: THE COMPILER. FORMERLY, THIS WAS DONE USING THE TIME FUNCTION TO OBTAIN C 711
|
||
$: SOME RANDOM DIGITS. THE METHOD USED IN PATCH/MERGE IS ADOPTED HERE, NAMELY C 711
|
||
$: STARTING WITH THE PREFIX (MFID) "PASC001", A SEARCH IS PERFORMED TO DETERMINE C 711
|
||
$: WHETHER SUCH A FILE NAME IS ALREADY CATALOGUED. IF SO, 1 IS ADDED AND THE C 711
|
||
$: SEARCH REPEATED. IN ADDITION, THE FILE IS CREATED WITH A SAVE FACTOR C 711
|
||
$: (RETENTION PERIOD) OF ZERO DAYS SO THAT A HALT-LOAD WILL REMOVE THE FILE C 711
|
||
$: AUTOMATICALLY. C 711
|
||
$: SEE PATCH 704. C 711
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 711
|
||
$: C 711
|
||
PROCEDURE SEARCHDISKDIRECTORY( F, A ); FILE F; ARRAY A[0]; 20222100 C 711
|
||
SEARCH( F, A[*] ); % END OF SEARCHDISKDIRECTORY; 20222200 C 711
|
||
20222300 C 711
|
||
CHARPNT := POINTER(CH[0])+7; CH[0] := " "; 20322000 C 711
|
||
CH[0] := "PASC000"; CHARPNT := POINTER(CH[0])+5; 90016000 C 711
|
||
PASCALGOL.FID := USER := TIME(-1); 90017000 C 711
|
||
DO BEGIN C:=C+1; REPLACE CHARPNT BY C FOR 3 DIGITS; 90018000 C 711
|
||
PASCALGOL.MFID := ALGOLNAME := CH[0]; 90019000 C 711
|
||
SEARCHDISKDIRECTORY( PASCALGOL, LINES[*] ); 90020000 C 711
|
||
END UNTIL LINES[0]=-1; % FILE NOT ON DISK 90021000 C 711
|
||
|
||
|
||
|
||
|
||
$# PATCH 712 FOR PASCAL.XVI.O CONTAINS 2 CARDS. MARK PROCEDURE LEVELS IN MARGIN C 712
|
||
|
||
|
||
$: PATCH TO MARK THE START AND END OF PROCEDURES AND FUNCTIONS BY ANNOTATING THE C 712
|
||
$: MARGIN WITH THE SYMBOLS "+P" & "-P" FOLLOWED BY THE LEVEL NUMBER. C 712
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 712
|
||
$: C 712
|
||
MARGIN("+P",CURLEVEL); % MARK PROCEDURE LEVEL 80420100 C 712
|
||
MARGIN("-P",CURLEVEL); % MARK END OF PROCEDURE 80702100 C 712
|
||
|
||
|
||
|
||
|
||
$# PATCH 713 FOR PASCAL.XVI.O. CONTAINS 14 CARDS.CORRECTS ERROR MESSAGE ETC. C 713
|
||
|
||
|
||
$: CORRECTS THE DOUBLE "NO ERRORS" MESSAGE AND THE OUTPUT OF HEADINGS C 713
|
||
$: WHEN L1 IS SET AFTER L-. C 713
|
||
$: ALSO CORRECTS THE SCANNING PROBLEM WHEN COMPILER OPTIONS ARE INCORRECT. C 713
|
||
$: DAVID A COOPER, HERIOT-WATT UNIVERISTY ...... AUGUST 1978 C 713
|
||
$: C 713
|
||
ERROR102MESS(//"102 *** WARNING ONLY, ILLEGAL COMPILER OPTION.")10188750 C 713
|
||
, % 10188751 C 713
|
||
IF ERRNUM=100 OR ERRNUM=102 20181600 C 713
|
||
THEN NUMERRS := NUMERRS - 1; %*ERROR NUMBER 102 IS ONLY AN ILLEGAL 20181610 C 713
|
||
% * DOLLAR OPTION WARNING & 20181620 C 713
|
||
% *ERROR NUMBER 100 ALONE SHOULD NOT 20181650 C 713
|
||
ELSE LISTOPTION := C="+" ELSE 30265000 C 713
|
||
END 30280800 C 713
|
||
ELSE ERROR(102); 30280810 C 713
|
||
IF ERR(102) THEN 90090710 C 713
|
||
WRITE(LINE,ERROR102MESS); 90090720 C 713
|
||
$ 90110000 C 713
|
||
$ 90111000 C 713
|
||
("102 ***WARNING ONLY, ILLEGAL DOLLAR OPTION."), 91106900 C 713
|
||
|
||
|
||
|
||
|
||
$# PATCH 800 FOR PASCAL.XVI.O.CONTAINS 10 CARDS. C 800
|
||
|
||
|
||
$: TO REMOVE CONFLICTS BETWEEN HERIOT-WATT & NATAL EXISTING PATCHES. C 800
|
||
$: C 800
|
||
MAXSYMS = 800#, %MAX NUMBER OF SYMBOLS IN ONE EXPRESSION. 10052000 C 800
|
||
MAXPNTRS = 25#; %MAX NUMBER OF UNDECLARED POINTERS(FORWD). 10056000 C 800
|
||
DEFINE ERR(ERR1) = BOOLEAN(0&ERRP[(ERR1).[6:2]][0:((ERR1).[4:5]):1])#; 10156100 C 800
|
||
INTEGER EXPRLEVEL, EXPINVARCNT; % 40018000 C 800
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS,TX, I; % 80403000 C 800
|
||
INTEGER PROGNAMELENGTH; % 90013900 C 800
|
||
IF ERR(100) % 90090600 C 800
|
||
"; ALGOL FILE TAPE=PASCRUN/DISK SERIAL; ALGOL FILE CARD=", 90119000 C 800
|
||
P(PALGOLNAME),"/",P(PUSER)," SERIAL;", % 90120000 C 800
|
||
" XALGOL STACK = 2048; END."; % 90120500 C 800
|
||
|
||
|
||
|
||
|
||
$# PATCH 998 FOR PASCAL.XVI.O CONTAINS 10 CARDS. INSERT PAGE THROWS AT DESIRED C 998
|
||
|
||
|
||
$: PATCH TO INSERT PAGE THROWS AT DESIRED POINTS IN THE SOURCE TO PRODUCE A C 998
|
||
$: NICELY LAID OUT LISTING. C 998
|
||
$: C 998
|
||
$ PAGE 19000000 C 998
|
||
$ PAGE 20290000 C 998
|
||
$ PAGE 29000000 C 998
|
||
$ PAGE 39000000 C 998
|
||
$ PAGE 49000000 C 998
|
||
$ PAGE 59000000 C 998
|
||
$ PAGE 69000000 C 998
|
||
$ PAGE 79000000 C 998
|
||
$ PAGE 89000000 C 998
|
||
$ PAGE 90070999 C 998
|
||
$: NILS A OTTE, UNIVERSITY OF NATAL, DURBAN. AUG - NOV 1977. C 998
|
||
$: C 998
|
||
|
||
|
||
|
||
|
||
$# PATCH 999 FOR PASCAL.XVI.O. CONTAINS 1 CARDS. VERISON NUMBER. C 999
|
||
|
||
|
||
$: C 999
|
||
DEFINE EDITION = "4.4"#;%AUGUST 1978...DAVID A COOPER... 10028000 C 999
|
||
|
||
CONFLICTS
|
||
********** **********************************************************************************
|
||
|
||
|
||
|
||
|
||
|
||
FILE CARD "SOURCE" (1,10,30); % PASCAL SOURCE CODE INPUT FILE 10035000 C 703 CONFLICTED WITH:
|
||
FILE CARD "SOURCE" (1,10,30); % SOURCE CODE FILE 10035000 C 002 DISCARDED
|
||
|
||
|
||
SAVE FILE OUT LINE DISK SERIAL [20:1200] (1,17,90,SAVE 1); % PRINT FILE 10036000 C 708 CONFLICTED WITH:
|
||
FILE LINES 1 (1,17); % PRINT FILE 10036000 C 002 DISCARDED
|
||
|
||
|
||
FILE PASCALGOL DISK SERIAL [20:300] (1,10,30,SAVE 0); % ALGOL CODE FILE10037000 C 703 CONFLICTED WITH:
|
||
FILE PASCALGOL DISK SERIAL [20:600] (1,10,30,SAVE 0); % CODE FILE 10037000 C 002 DISCARDED
|
||
|
||
|
||
MAXSYMS = 800#, %MAX NUMBER OF SYMBOLS IN ONE EXPRESSION. 10052000 C 800 CONFLICTED WITH:
|
||
MAXSYMS =200 #, %MAX NUMBER OF SYMBOLS IN ONE EXPRESSION. 10052000 C 701 DISCARDED
|
||
|
||
|
||
MAXPNTRS = 25#; %MAX NUMBER OF UNDECLARED POINTERS(FORWD). 10056000 C 800 CONFLICTED WITH:
|
||
MAXPNTRS =10 #; %MAX NUMBER OF UNDECLARED POINTERS (FORWD).10056000 C 701 DISCARDED
|
||
|
||
|
||
FILE XREFFILE DISK SERIAL [20:3000] (1,3,30); % FOR CROSS REFERENCE 10137000 C 703 CONFLICTED WITH:
|
||
FILE XREFFILE DISK SERIAL [20:3000] (1,3,30); 10137000 C 002 DISCARDED
|
||
|
||
|
||
DEFINE ERR(ERR1) = BOOLEAN(0&ERRP[(ERR1).[6:2]][0:((ERR1).[4:5]):1])#; 10156100 C 800 CONFLICTED WITH:
|
||
DEFINE ERR[ERR1] = BOOLEAN(0&ERRP[ERR1.[6:2]][0:ERR1.[4:5]:1]) #; 10156100 C 702 DISCARDED
|
||
|
||
|
||
IF ERRNUM=100 OR ERRNUM=102 20181600 C 713 CONFLICTED WITH:
|
||
IF ERRNUM=100 20181600 C 002 DISCARDED
|
||
|
||
|
||
% *ERROR NUMBER 100 ALONE SHOULD NOT 20181650 C 713 CONFLICTED WITH:
|
||
THEN NUMERRS:=NUMERRS-1;% * ERROR NUMBER 100 ALONE SHOULD NOT 20181650 C 002 DISCARDED
|
||
|
||
|
||
END 30280800 C 713 CONFLICTED WITH:
|
||
END; 30280800 C 002 DISCARDED
|
||
|
||
|
||
INTEGER EXPRLEVEL, EXPINVARCNT; % 40018000 C 800 CONFLICTED WITH:
|
||
INTEGER EXPRLEVEL; 40018000 C 700 DISCARDED
|
||
INTEGER EXPRLEVEL,TX,EXPINVARCNT;% 40018000 C 002 DISCARDED
|
||
|
||
|
||
$ 40105100 C 615 CONFLICTED WITH:
|
||
IF INSIDEPARENS AND TYPETAB1[CURTYPE].STRUCT > 0 AND 40105100 C 518 DISCARDED
|
||
|
||
|
||
$ 40105200 C 615 CONFLICTED WITH:
|
||
TYPETAB1[CURTYPE].FORM < FILES THEN 40105200 C 518 DISCARDED
|
||
|
||
|
||
$ 40105300 C 615 CONFLICTED WITH:
|
||
PUTID("H",1000×THISLEVEL+THISINDEX,5) 40105300 C 518 DISCARDED
|
||
|
||
|
||
$ 40105400 C 615 CONFLICTED WITH:
|
||
ELSE 40105400 C 518 DISCARDED
|
||
|
||
|
||
SPLIT(FIRSTSYM,1); 40650000 C 603 CONFLICTED WITH:
|
||
SPLIT(STARTSYM,1); % 40650000 C 601 DISCARDED
|
||
|
||
|
||
IF CURSY = PLUS THEN SYMTAB[FIRSTSYM] := "SUNIO(" ELSE 40651000 C 603 CONFLICTED WITH:
|
||
IF CURSY=PLUS THEN SYMTAB[STARTSYM] := "SUNIO(" ELSE % 40651000 C 601 DISCARDED
|
||
|
||
|
||
IF CURSY = MINUS THEN SYMTAB[FIRSTSYM] := "SDIFF(" ELSE 40652000 C 603 CONFLICTED WITH:
|
||
IF CURSY=MINUS THEN SYMTAB[STARTSYM] := "SDIFF(" ELSE % 40652000 C 601 DISCARDED
|
||
|
||
|
||
ERROR(64); 40653000 C 603 CONFLICTED WITH:
|
||
ERROR(64); % 40653000 C 601 DISCARDED
|
||
|
||
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS,TX, I; % 80403000 C 800 CONFLICTED WITH:
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS, T3, TX, I; 80403000 C 503 DISCARDED
|
||
|
||
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS,TX, I; % 80403000 C 800 CONFLICTED WITH:
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS, T, TX, I; 80403000 C 002 DISCARDED
|
||
|
||
|
||
IF FOUND AND (THISID.IDCLASS=PROC OR THISID.IDCLASS=FUNC) THEN 80548000 C 600 CONFLICTED WITH:
|
||
IF FOUND AND THISID.IDCLASS≥FUNC THEN 80548000 C 504 DISCARDED
|
||
|
||
|
||
NAMETAB3[CURLEVEL,THISINDEX].FORWARDDEF:=0; 80553000 C 504 CONFLICTED WITH:
|
||
NAMETAB3[CURLEVEL,THISINDEX].FORWARDDEF := 0; 80553000 C 002 DISCARDED
|
||
|
||
|
||
IF ERR(100) % 90090600 C 800 CONFLICTED WITH:
|
||
IF ERR[100]% 90090600 C 002 DISCARDED
|
||
|
||
|
||
$ 90110000 C 713 CONFLICTED WITH:
|
||
IF PAGECNT>0 THEN % THERE HAS BEEN LISTING 90110000 C 709 DISCARDED
|
||
|
||
|
||
$ 90111000 C 713 CONFLICTED WITH:
|
||
WRITE(LINE, NOERRORS); 90111000 C 708 DISCARDED
|
||
$VOIDT 90111000 C 002 DISCARDED
|
||
|
||
|
||
"; ALGOL FILE TAPE=PASCRUN/DISK SERIAL; ALGOL FILE CARD=", 90119000 C 800 CONFLICTED WITH:
|
||
"; ALGOL FILE TAPE= PASCAL/PRELUDE SERIAL; ALGOL FILE CARD=", 90119000 C 705 DISCARDED
|
||
|
||
|
||
P(PALGOLNAME),"/",P(PUSER)," SERIAL;", % 90120000 C 800 CONFLICTED WITH:
|
||
P(PALGOLNAME), "/", P(PUSER), " SERIAL; END."; 90120000 C 705 DISCARDED
|
||
|
||
|
||
" XALGOL STACK = 2048; END."; % 90120500 C 800 CONFLICTED WITH:
|
||
" XALGOL STACK = 2048; STACK = 1024; END."; % 90120500 C 519 DISCARDED
|
||
|
||
|
||
|
||
GENERATED OUTPUT
|
||
********** **********************************************************************************
|
||
|
||
|
||
|
||
? COMPILE PASCAL/NEW XALGOL LIBRARY 00000001
|
||
? XALGOL STACK=800 00000002
|
||
? XALGOL FILE TAPE=SYMBOL/PASCAL SERIAL 00000003
|
||
? XALGOL FILE NEWTAPE=SYMNEW/PASCAL SERIAL 00000004
|
||
? XALGOL FILE LINE=LINE PRINT 00000005
|
||
? DATA CARD 000000≥
|
||
$ TAPE LIST SINGLE SEQXEQ NEW TAPE
|
||
DEFINE EDITION = "4.4"#;%AUGUST 1978...DAVID A COOPER... %999-10028000 C 999
|
||
INTEGER NUMERRS, % @R+25: NUMBER OF ERRORS IN PROGRAM. %500-10029000 C 500
|
||
SAVEFACTOR, % @R+26: SAVEFACTOR FOR CODE FILE. %500-10030000 C 500
|
||
PAGECNT, % @R+27: NUMBER OF PAGES PRINTED. %500-10033800 C 500
|
||
CARDCNT; % @R+30: NUMBER OF CARDS READ. %500-10034000 C 500
|
||
FILE CARD "SOURCE" (1,10,30); % PASCAL SOURCE CODE INPUT FILE %703-10035000 C 703
|
||
SAVE FILE OUT LINE DISK SERIAL [20:1200] (1,17,90,SAVE 1); % PRINT FILE 10036000 C 708
|
||
% AVOID BLOCKING RECORDS OF VARIABLE LENGTH%708-10036001 C 708
|
||
FILE PASCALGOL DISK SERIAL [20:300] (1,10,30,SAVE 0); % ALGOL CODE FILE10037000 C 703
|
||
DEFINE LINESPERPAGE = 60 #, %502-10038000 C 502
|
||
DEFINE MAXTABLES = 30 #, %MAX NUMBER OF LEVELS IN IDENTIFIER TABLE.10042000 C 701
|
||
MAXNAMES =307 #, %MAX NAMES IN EACH ROW OF IDENTIFIER TABLE.10043000 C 701
|
||
% ONLY USED IN WITH STATEMENT TO TEST %701-10044001 C 701
|
||
MAXCASES =64 #, %MAX LABELS IN A CASE-STATEMENT. %701-10045000 C 701
|
||
MAXLABS =50 #, %MAX NUMBER OF IN PROGRAM LABELS. %701-10046000 C 701
|
||
MAXPARAMS =200 #, %MAX NUMBER OF PARAMETERS IN WHOLE PROGRAM.10047000 C 701
|
||
MAXTYPES =250 #, %MAX NUMBER OF DIFFERENT TYPES. %701-10048000 C 701
|
||
MAXCONSTS =100 #, %SIZE OF TABLE FOR CONSTANTS. %701-10049000 C 701
|
||
MAXWITHSYMS= 70 #, %MAX NUMBER OF SYMBOLS USED BY WITH-STATMS.10051000 C 701
|
||
MAXSYMS = 800#, %MAX NUMBER OF SYMBOLS IN ONE EXPRESSION. 10052000 C 800
|
||
LISTLENGTH =100 #, %MAX LENGTH OF VAR AND PARAM LISTS. %701-10053000 C 701
|
||
MAXEXTFILES=10 #, %MAX NUMBER OF EXTERNAL FILES. %701-10054000 C 701
|
||
MAXFILES =10 #, %MAX NUMBER OF FILES DECLARED AT ONE TIME. 10055000 C 701
|
||
MAXPNTRS = 25#; %MAX NUMBER OF UNDECLARED POINTERS(FORWD). 10056000 C 800
|
||
ARRAY PARAMTAB, FORWPARAM1, FORWPARAM2[0:MAXPARAMS]; %002-10109000 C 002
|
||
ARRAY ICARD, ALGOLCARD[0:9], LINES, XLINE[0:16]; %708-10130000 C 708
|
||
% AVOID BLOCKING VARIABLE LENGTH RECORDS 10130001 C 708
|
||
ARRAY HEADTEXT, ERRLINE[0:16]; %708-10133000 C 708
|
||
INTEGER LINECNT, ERRINX; % PAGECNT @ PRT+27 %500-10134000 C 500
|
||
FILE XREFFILE DISK SERIAL [20:3000] (1,3,30); % FOR CROSS REFERENCE 10137000 C 703
|
||
ALPHA ARRAY XBUFF[0:2]; %002-10138500 C 002
|
||
BOOLEAN XINB; %002-10138550 C 002
|
||
ALPHA ARRAY SYMTAB[0:MAXSYMS]; % USED BY "EXPRESSION". %517-10144000 C 517
|
||
INTEGER ARRAY SYMKIND[0:62]; %USED IN ERROR RECOVERY. %002-10149000 C 002
|
||
ARRAY ERRP[0:3]; % HOLDS 128 BITS % RECORDS ERROR MESSAGES USED. 10156000 C 702
|
||
DEFINE ERR(ERR1) = BOOLEAN(0&ERRP[(ERR1).[6:2]][0:((ERR1).[4:5]):1])#; 10156100 C 800
|
||
DEFINE %518-10156200 C 518
|
||
PERMSUB = 0 #, MAXTOTALSUBSCRS = 100#, %518-10156300 C 518
|
||
ARRNAM = 1 #; %518-10156400 C 518
|
||
ARRAY ARRSUBPERMTAB[0:1,0:MAXTOTALSUBSCRS]; %518-10156500 C 518
|
||
INTEGER PASSPERMTAB, MAXPERMTAB, REMEMBERPOSN; %518-10156600 C 518
|
||
DEFINE RESWORDPRESENT = RESWORDOPTION.[1:1] #; %710-10159100 C 710
|
||
$ %700-10167000 C 700
|
||
$ %700-10168000 C 700
|
||
$ %700-10169000 C 700
|
||
ERRORS (I5," ERRORS DETECTED ",20("#") /), %704-10188000 C 704
|
||
ERROR100MESS (//"100 ILLEGAL SAVE CONSTANT IN """""S""""" OPTION10188500 C 002
|
||
. THE VALUE 07 IS SUBSTITUTED"/" SO THIS ERROR DOES NOT INCREMENT TH10188600 C 002
|
||
E COMPILATION ERRORS COUNT."//),% %002-10188700 C 002
|
||
ERROR102MESS(//"102 *** WARNING ONLY, ILLEGAL COMPILER OPTION.")10188750 C 713
|
||
, % %713-10188751 C 713
|
||
ALIST ("$ SET LIST "), %704-10189000 C 704
|
||
MERGE ("$ SET TAPE RESET $" / %704-10190100 C 704
|
||
"$ RESET TAPE", T73,"99000000" ), %704-10190200 C 704
|
||
TERMMESS ("**** COMPILATION TERMINATED."); %704-10192000 C 704
|
||
PACKEDSY=61#, ASSERTSY=62#; %002-10211000 C 002
|
||
$ PAGE %998-19000000 C 998
|
||
VALUE NAME1,NAME2,TABLE,DECL; %700-20016000 C 700
|
||
REAL NAME1,NAME2; %700-20017000 C 700
|
||
INTEGER TABLE; BOOLEAN DECL; %700-20018000 C 700
|
||
FORWARD; %700-20019000 C 700
|
||
PROCEDURE PRINTERRORS; FORWARD; %700-20020000 C 700
|
||
PROCEDURE HEADING; %*** PRINTS A HEADING AT START OF NEW PAGE.20026000 C 700
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; %700-20027000 C 700
|
||
IF PAGECNT=1 THEN WRITE(LINE[NO],17,HEADTEXT[*]) ELSE %709-20029900 C 709
|
||
WRITE( LINE[PAGE]); %709-20030000 C 709
|
||
WRITE( LINE[DBL],17,HEADTEXT[*]); %709-20031000 C 709
|
||
END OF HEADING; %700-20033000 C 700
|
||
PROCEDURE PRINTLINE; %*** PRINTS A PASCAL SOURCE CODE LINE %700-20036000 C 700
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; %700-20037000 C 700
|
||
IF REAL(RESWORDOPTION) = 3 THEN % RESERVED WORD IS PRESENT %710-20040000 C 710
|
||
WRITE( LINE[NO],17,XLINE[*]); %708-20042000 C 708
|
||
WRITE( LINE[NO],17,XLINE[*]); %708-20043000 C 708
|
||
WRITE(LINE, 17,LINES[*]); %708-20045000 C 708
|
||
END OF PRINTLINE; %700-20047000 C 700
|
||
PROCEDURE NEWCARD; %*** READS A NEW PASCAL SOURCE CODE CARD 20050000 C 700
|
||
BEGIN DEFINE RESULT = ICARD[*], ETC #; %700-20051000 C 700
|
||
REPLACE XLINEPNT BY " " FOR 16 WORDS; %700-20056000 C 700
|
||
REPLACE LINEPNT BY CARDPNT FOR 10 WORDS, XLINEPNT FOR 6 WORDS;%700-20057000 C 700
|
||
RESWORDOPTION := RESWORDOPTION AND TRUE; % RESET RESWORDPRESENT 20057100 C 710
|
||
END OF NEWCARD; %700-20061000 C 700
|
||
DEFINE GEN(GEN1,GEN2,GEN3) = GENI(TRUE,GEN1,GEN3,GEN2) #, %700-20063100 C 700
|
||
GENID(GENID1,GENID2,GENID3)= GENI(FALSE,GENID1,GENID2,GENID3) #; %700-20063200 C 700
|
||
%700-20063300 C 700
|
||
PROCEDURE GENI(GENT, TXT, NUM, N ); %700-20063400 C 700
|
||
VALUE GENT, TXT, NUM, N; %700-20063500 C 700
|
||
BOOLEAN GENT; ALPHA TXT; INTEGER NUM, N; %700-20063600 C 700
|
||
BEGIN DEFINE START = NUM #, NDIG = N #; %700-20063700 C 700
|
||
%700-20063800 C 700
|
||
IF GENT THEN %*** GENERATE A TEXT "TXT", CONSISTING OF 20064000 C 700
|
||
TEXT[0] := TXT; %700-20067000 C 700
|
||
END %700-20070000 C 700
|
||
ELSE %*** GENERATE AN ALGOL IDENTIFIER. %700-20073000 C 700
|
||
CH[0] := TXT; %700-20076000 C 700
|
||
END END GENI; %700-20079000 C 700
|
||
PROCEDURE GENINT( N ); %700-20082000 C 700
|
||
VALUE N; INTEGER N; %700-20083000 C 700
|
||
BEGIN DEFINE RESULT = ALGOL CODE #; %700-20084000 C 700
|
||
INTEGER NABS, NSIZE; %700-20085000 C 700
|
||
END OF GENINT; %700-20097000 C 700
|
||
PROCEDURE WRITEALGOL; %*** WRITES A COMPLETED ALGOL CARD TO%700-20145000 C 700
|
||
DEFINE NEWSEGMENT = HERE #; %700-20146100 C 700
|
||
IF DUMPOPTION THEN BEGIN IF (LINECNT:=LINECNT+1)≥LINESPERPAGE %502-20149000 C 502
|
||
THEN HEADING; WRITE(LINE,10,ALGOLCARD[*]) END; %502-20149100 C 502
|
||
DEFINE NEWSEGMENT = HERE #; %700-20168100 C 700
|
||
DEFINE NEWSEGMENT = HERE #; %700-20180100 C 700
|
||
IF ERRNUM<0 THEN ERRNUM:=ABS(ERRNUM) ELSE %511-20180900 C 511
|
||
% %002-20181500 C 002
|
||
% %002-20181550 C 002
|
||
IF ERRNUM=100 OR ERRNUM=102 %713-20181600 C 713
|
||
THEN NUMERRS := NUMERRS - 1; %*ERROR NUMBER 102 IS ONLY AN ILLEGAL 20181610 C 713
|
||
% * DOLLAR OPTION WARNING & %713-20181620 C 713
|
||
% *ERROR NUMBER 100 ALONE SHOULD NOT %713-20181650 C 713
|
||
% * PREVENT THE XALGOL COMPILATION BEING 20181700 C 002
|
||
% * ZIPPED AS THE VALUE 7 IS SUBSTITUTED 20181750 C 002
|
||
% * FOR A BAD SAVE CONSTANT IN AN "S"%002-20181800 C 002
|
||
% * OPTION. %002-20181850 C 002
|
||
% %002-20181900 C 002
|
||
% %002-20181950 C 002
|
||
ERRP[ERRNUM.[6:2]]:=ERRP[ERRNUM.[6:2]] & 1[ERRNUM.[4:5]:0:1]; %702-20182000 C 702
|
||
DEFINE NEWSEGMENT = HERE #; %700-20193100 C 700
|
||
IF NOT LISTOPTION THEN %709-20194000 C 709
|
||
BEGIN IF PAGECNT=0 THEN HEADING; PRINTLINE END; %709-20194100 C 709
|
||
REPLACE POINTER(ERRLINE[0])+4 BY NUMERRS FOR 4 DIGITS; %702-20194900 C 702
|
||
WRITE(LINE, 17,ERRLINE[*]); %708-20195000 C 708
|
||
DEFINE HASH(HASH1) = ENTIER((HASH1) MOD MAXNAMES) #; %505-20202000 C 505
|
||
ALPHA THISID, CURNAME1, CURNAME2; % USED IN SCANNER %700-20205000 C 700
|
||
PROCEDURE SEARCHTAB( TAB ); %*** SEARCH NAME TABLE "TAB" FOR THE %700-20208000 C 700
|
||
VALUE TAB; INTEGER TAB; %*** IDENTIFIER JUST READ. %700-20208100 C 700
|
||
BEGIN ALPHA TNAME; INTEGER WRAPAROUND; %505-20209000 C 505
|
||
WRAPAROUND:=THISINDEX:=HASH(CURNAME1); %505-20210000 C 505
|
||
IF THISINDEX=WRAPAROUND THEN TNAME:=0; % TABLE IS FULL %505-20216100 C 505
|
||
END OF SEARCHTAB; %700-20221000 C 700
|
||
PROCEDURE SEARCHDISKDIRECTORY( F, A ); FILE F; ARRAY A[0]; %711-20222100 C 711
|
||
SEARCH( F, A[*] ); % END OF SEARCHDISKDIRECTORY; %711-20222200 C 711
|
||
%711-20222300 C 711
|
||
PROCEDURE SEARCH; %*** SEARCH ALL TABLES CURRENTLY IN USE. 20223000 C 700
|
||
BEGIN DEFINE RESULT = THISID #; %700-20224000 C 700
|
||
END OF SEARCH; %700-20233000 C 700
|
||
PROCEDURE NEWNAME( NAME1,NAME2, TAB ); %700-20236000 C 700
|
||
VALUE NAME1, NAME2, TAB; %700-20236100 C 700
|
||
ALPHA NAME1, NAME2; INTEGER TAB; %700-20236200 C 700
|
||
ALPHA TNAME; INTEGER WRAPAROUND; %505-20237100 C 505
|
||
WRAPAROUND:=THISINDEX:=HASH(NAME1); %505-20238000 C 505
|
||
IF THISINDEX=WRAPAROUND THEN % TABLE AT THIS LEVEL IS FULL 20244100 C 505
|
||
BEGIN ERROR(40); NAME1:=TNAME; NAME2:=NAMETAB2[TAB,THISINDEX]20244200 C 505
|
||
END; %505-20244300 C 505
|
||
END OF NEWNAME; %700-20250000 C 700
|
||
$ PAGE %998-20290000 C 998
|
||
7(INITIAL),MIDDLE,INITIAL; %002-20308000 C 002
|
||
LINEPNT :=POINTER(LINES[1]); %708-20315000 C 708
|
||
REPLACE LINEPNT-8 BY " " FOR 17 WORDS; %708-20317000 C 708
|
||
REPLACE XLINEPNT-8 BY LINEPNT-8 FOR 17 WORDS; %708-20318000 C 708
|
||
REPLACE POINTER(ERRLINE[*]) BY "**** ", LINEPNT FOR 16 WORDS; 20319000 C 708
|
||
REPLACE ALGOLPNT BY LINEPNT FOR 9 WORDS; %708-20321000 C 708
|
||
CHARPNT := POINTER(CH[0])+7; CH[0] := " "; %711-20322000 C 711
|
||
REPLACE POINTER(HEADTEXT[*]) BY LINEPNT FOR 10 WORDS, "PAGE 1 ", 20326000 C 708
|
||
LINEPNT FOR 6 WORDS; %708-20326100 C 708
|
||
REPLACE POINTER(HEADTEXT[*])+45 BY TEXTPNT+5 FOR 2,"/", %709-20329000 C 709
|
||
TEXTPNT+1 FOR 2, "/", TEXTPNT+3 FOR 2; %709-20330000 C 709
|
||
NILTYPE := 6; %*** TYPE OF "NIL" *** %602-20363000 C 602
|
||
T1.FORM := POINTERS; TYPETAB1[6] := T1; %602-20364000 C 602
|
||
EMPTYSET := 7; % %602-20364500 C 602
|
||
T1.FORM := SET; TYPETAB1[7] := T1; %602-20365000 C 602
|
||
NUMTYPES := 7; % %602-20365500 C 602
|
||
NEWNAME("50PRT25",0,0); %*** "PRT25" *** %501-20369100 C 501
|
||
T3:=INTTYPE; T3.IDCLASS:=VAR; % GLOBAL INTEGER VARIABLE %501-20369200 C 501
|
||
NAMETAB3[0,THISINDEX] := T3; %501-20369300 C 501
|
||
"400READ", "6READLN", "50RESET", "6UNPACK", "50WRITE", %002-20373000 C 002
|
||
"6QQJZXL" DO %002-20373500 C 002
|
||
NEWNAME("7CPUTIM","E",0); NAMETAB3[0,THISINDEX]:=T3; %514-20390000 C 514
|
||
NEWCARD; LISTOPTION:=CHECKOPTION:=TRUE; % DEFAULT %709-20402100 C 709
|
||
INSYMBOL; % ANALYSING FIRST CARD MAY CHANGE DEFAULT LIST OPTN 20402200 C 709
|
||
IF LISTOPTION AND PAGECNT=0 THEN HEADING; % ON FIRST PAGE. %709-20402300 C 709
|
||
DEFINE NEWSEGMENT = HERE #; %700-20515100 C 700
|
||
IF DECL THEN AX := -AX; %002-20520000 C 002
|
||
DEFINE NEWSEGMENT = HERE #; %700-20533100 C 700
|
||
ABS(A[2]) LEQ ABS(B[2]); %002-20539000 C 002
|
||
% %002-20541100 C 002
|
||
% %002-20541150 C 002
|
||
% %002-20541200 C 002
|
||
BOOLEAN PROCEDURE XREFINPUT(A); %002-20541250 C 002
|
||
ARRAY A[0]; %002-20541300 C 002
|
||
BEGIN %002-20541350 C 002
|
||
LABEL EOF; %002-20541400 C 002
|
||
INTEGER I; %002-20541450 C 002
|
||
% %002-20541500 C 002
|
||
READ(XREFFILE,3,XBUFF[*])[EOF]; %002-20541550 C 002
|
||
FOR I:=0,1,2 DO %002-20541600 C 002
|
||
A[I] := XBUFF[I]; %002-20541650 C 002
|
||
IF FALSE THEN EOF: BEGIN %002-20541700 C 002
|
||
CLOSE(XREFFILE,RELEASE); %002-20541750 C 002
|
||
XINB := TRUE; %002-20541800 C 002
|
||
END; %002-20541850 C 002
|
||
XREFINPUT := XINB; %002-20541900 C 002
|
||
% %002-20541950 C 002
|
||
END OF XREFINPUT; %002-20541960 C 002
|
||
DEFINE NEWSEGMENT = HERE #; %700-20546100 C 700
|
||
WRITE(LINE, 17,XREFLINE[*]); %708-20549000 C 708
|
||
LOCK( LINE, * ); % & CRUNCH %708-20550000 C 708
|
||
WRITE(LINE, 17,XREFLINE[*]); LINECNT:=LINECNT+1; %708-20560000 C 708
|
||
A2 := -A2; %002-20570000 C 002
|
||
WRITE(LINE, 17,XREFLINE[*]); LINECNT:=LINECNT+1; %708-20571000 C 708
|
||
PROCEDURE CHECKTYPES( LEFTTYPE, RIGHTTYPE ); %700-20802000 C 700
|
||
VALUE LEFTTYPE, RIGHTTYPE; INTEGER LEFTTYPE, RIGHTTYPE; %700-20803000 C 700
|
||
BEGIN %700-20804000 C 700
|
||
REAL TT1, TT2; INTEGER F1, F2, LT, RT; %700-20805000 C 700
|
||
IF(F1 NEQ SET OR RT NEQ EMPTYSET) % %600-20813000 C 600
|
||
AND % %600-20813050 C 600
|
||
(F2 NEQ SET OR LT NEQ EMPTYSET) THEN % %600-20813100 C 600
|
||
IF(F1 NEQ POINTERS OR RT NEQ NILTYPE) % %600-20814000 C 600
|
||
AND % %600-20814050 C 600
|
||
(F2 NEQ POINTERS OR LT NEQ NILTYPE) THEN % %600-20814100 C 600
|
||
END OF CHECKTYPES; %700-20838000 C 700
|
||
BOOLEAN LPARFOUND,SAVEXREFOPT; %002-20842000 C 002
|
||
PROCEDURE FILEPARAM( DEFAULTFILE ); %*** CHECKS THE FIRST PARAMETER 20844000 C 700
|
||
VALUE DEFAULTFILE; INTEGER DEFAULTFILE;%*** TO SEE IF IT IS A FILE.%700-20844100 C 700
|
||
BEGIN DEFINE RESULTS = FILENAME & LPARFOUND #; %700-20845000 C 700
|
||
SAVEXREFOPT := XREFOPTION; XREFOPTION := FALSE; %002-20847500 C 002
|
||
IF SAVEXREFOPT THEN NEWXREF(CURNAME1,CURNAME2,THISLEVEL, 20861500 C 002
|
||
FALSE); %002-20861550 C 002
|
||
XREFOPTION := SAVEXREFOPT; %002-20868500 C 002
|
||
END OF FILEPARAM; %700-20869000 C 700
|
||
REAL CURVAL; INTEGER CURLENGTH; %700-20872000 C 700
|
||
%700-20873000 C 700
|
||
PROCEDURE CONSTANT( CVAL, CTYPE ); %700-20874000 C 700
|
||
REAL CVAL; INTEGER CTYPE; %700-20875000 C 700
|
||
BEGIN %700-20876000 C 700
|
||
INTEGER TFORM; BOOLEAN SIGNED, NEGATIVE; %700-20876100 C 700
|
||
END OF CONSTANT; %700-20921000 C 700
|
||
$ PAGE %998-29000000 C 998
|
||
% ASSERT 62 ASSERTSY INITIAL %002-30075500 C 002
|
||
$ %700-30082000 C 700
|
||
ALPHA C, CX; %( CURNAME1 & CURNAME2 MOVED TO 20205000 ) %700-30083000 C 700
|
||
INTEGER LASTCHARPOS; %( CURVAL, CURLENGTH MOVED TO 20872000 ) %700-30084000 C 700
|
||
PROCEDURE INSYMBOL; %*** IDENTIFIES THE NEXT SYMBOL ******%700-30087000 C 700
|
||
BEGIN %700-30087100 C 700
|
||
%700-30087200 C 700
|
||
PROCEDURE NEXTCHAR; %*** GETS THE NEXT CHARACTER. %700-30088000 C 700
|
||
END OF NEXTCHAR; %700-30093000 C 700
|
||
$ SET VOIDT 30095000 C 700
|
||
$ POP VOIDT 30098000 C 700
|
||
DEFINE T1 = EXP #; % USED AT 30178000 %700-30099100 C 700
|
||
IF CURNAME1="6ASSERT" THEN ASSERTSY ELSE %002-30165500 C 002
|
||
BEGIN T1 := CARDLENGTH-CHARCNT-CURLENGTH-1; %506-30178000 C 506
|
||
RESWORDOPTION := BOOLEAN(3); % SET RESWORDPRESENT BIT 30179000 C 710
|
||
FOR CURLENGTH+REAL(CHARCNT=0); %506-30181000 C 506
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; %700-30261100 C 700
|
||
IF CX="L" THEN IF C=1 THEN %516-30264000 C 516
|
||
IF LISTOPTION THEN HEADING ELSE %516-30264500 C 516
|
||
ELSE LISTOPTION := C="+" ELSE %713-30265000 C 713
|
||
END% %002-30280000 C 002
|
||
% %002-30280025 C 002
|
||
% %002-30280050 C 002
|
||
% THE FOLLOWING LINES DECODE ANY OCCURRENCE OF THE "S" OPTION AND 30280075 C 002
|
||
% SETS THE GLOBAL INTEGER VARIABLE "SAVEFACTOR" WHICH CONTROLS THE %002-30280100 C 002
|
||
% TYPE OF COMPILATION INITIATED BY THE ZIP. THERE ARE THREE LEGAL FORMS 30280125 C 002
|
||
% OF THE "S" OPTION AS FOLLOWS.- %002-30280150 C 002
|
||
% %002-30280175 C 002
|
||
% "S-" WILL GIVE NO ZIP IE. PASCAL SYNTAX CHECK ONLY %002-30280200 C 002
|
||
% "S+" WILL GIVE A ZIP FOR COMPILE AND GO %002-30280225 C 002
|
||
% "S??" WILL GIVE A ZIP FOR COMPILE TO LIBRARY %002-30280250 C 002
|
||
% WHERE ?? IS THE TWO DIGIT DECIMAL SAVE %002-30280275 C 002
|
||
% CONSTANT GIVEN THE OBJECT CODE FILE %002-30280300 C 002
|
||
% NB. IF THE SAVE CONSTANT IS TO BE %002-30280325 C 002
|
||
% LESS THAN 10 THE FIRST DIGIT %002-30280350 C 002
|
||
% MUST BE INCLUDED IE. A "0". %002-30280375 C 002
|
||
% %002-30280400 C 002
|
||
% %002-30280425 C 002
|
||
ELSE %002-30280450 C 002
|
||
IF CX="S" THEN %002-30280475 C 002
|
||
BEGIN %002-30280500 C 002
|
||
IF C="-" THEN SAVEFACTOR:=-1 ELSE %002-30280525 C 002
|
||
IF C="+" THEN SAVEFACTOR:= 0 ELSE %002-30280550 C 002
|
||
IF C LEQ 9 THEN %002-30280575 C 002
|
||
BEGIN %002-30280600 C 002
|
||
SAVEFACTOR := 10 × C; NEXTCHAR; %002-30280625 C 002
|
||
SAVEFACTOR := SAVEFACTOR + C; %002-30280650 C 002
|
||
IF C GTR 9 THEN ERROR(100); %002-30280675 C 002
|
||
END %002-30280700 C 002
|
||
ELSE %002-30280720 C 002
|
||
BEGIN %002-30280735 C 002
|
||
ERROR(100); %002-30280750 C 002
|
||
SAVEFACTOR := 7; %002-30280765 C 002
|
||
END; %002-30280780 C 002
|
||
END %713-30280800 C 713
|
||
ELSE ERROR(102); %713-30280810 C 713
|
||
% %002-30280825 C 002
|
||
% %002-30280850 C 002
|
||
% %002-30280875 C 002
|
||
IF LISTOPTION THEN IF PAGECNT=0 THEN HEADING; % ON FIRST PAGE30282100 C 709
|
||
END NEWSEGEMENT; %700-30282200 C 700
|
||
$ PAGE %998-39000000 C 998
|
||
$ %700-40016000 C 700
|
||
$ %700-40017000 C 700
|
||
INTEGER EXPRLEVEL, EXPINVARCNT; % %800-40018000 C 800
|
||
BEGIN ERROR(63); % %600-40023000 C 600
|
||
DEFINE PUTSYM(S) = PUTTEXT( (S)&1[41:5:6] ) #; %700-40029000 C 700
|
||
$ SET VOIDT 40029900 C 700
|
||
$ POP VOIDT 40033000 C 700
|
||
DEFINE PUTDUMMY = PUTTEXT("3000000") #; %700-40041000 C 700
|
||
$ SET VOIDT 40042000 C 700
|
||
$ POP VOIDT 40044000 C 700
|
||
% %601-40052050 C 601
|
||
% %601-40052055 C 601
|
||
PROCEDURE SPLIT(SPLITINX,WIDTH); % %601-40052100 C 601
|
||
VALUE SPLITINX, WIDTH; % %601-40052150 C 601
|
||
INTEGER SPLITINX, WIDTH ; % %601-40052200 C 601
|
||
BEGIN % %601-40052250 C 601
|
||
INTEGER I; % %601-40052300 C 601
|
||
% %601-40052350 C 601
|
||
IF NUMSYMS+WIDTH LEQ MAXSYMS THEN % %601-40052400 C 601
|
||
BEGIN % %601-40052450 C 601
|
||
FOR I:=NUMSYMS STEP -1 UNTIL SPLITINX DO % %601-40052500 C 601
|
||
SYMTAB[I+WIDTH] := SYMTAB[I]; % %601-40052550 C 601
|
||
FOR I:=1 STEP 1 UNTIL WIDTH DO % %601-40052600 C 601
|
||
SYMTAB[SPLITINX+I-1] := "3000000"; % %601-40052650 C 601
|
||
NUMSYMS := NUMSYMS + WIDTH; % %601-40052700 C 601
|
||
END % %601-40052750 C 601
|
||
ELSE %601-40052800 C 601
|
||
BEGIN % %601-40052830 C 601
|
||
ERROR(63); % %601-40052860 C 601
|
||
NUMSYMS := 1; % %601-40052890 C 601
|
||
END; % %601-40052900 C 601
|
||
END OF SPLIT; % %601-40052950 C 601
|
||
% %601-40052960 C 601
|
||
% %601-40052965 C 601
|
||
PROCEDURE WRITEEXPR; %*** WRITE GENERATED ALGOL EXPRESSION %700-40053000 C 700
|
||
REAL SX; INTEGER T1, TX; %700-40054100 C 700
|
||
END OF WRITEEXPR; %700-40066000 C 700
|
||
PROCEDURE CHECKEXPR( LLIM, ULIM ); %*** WRITE CODE TO CHECK VALUE 40069000 C 700
|
||
VALUE LLIM, ULIM; INTEGER LLIM, ULIM; %700-40069100 C 700
|
||
BEGIN DEFINE CHECK = VALUE #; %700-40070000 C 700
|
||
END OF CHECKEXPR; %700-40077000 C 700
|
||
$ %518-40080000 C 518
|
||
BOOLEAN SIMPLEVARIABLE,INSIDEBRACKETS,INSIDEPARENS; %518-40080100 C 518
|
||
INTEGER T1, T5; % USED ONCE EACH %700-40086100 C 700
|
||
BOOLEAN INBRACKET,INRECORD,SIMPLEVAR; %002-40087000 C 002
|
||
T1:=T.FIRSTWITHSYM; T5:=T.LASTWITHSYM; %700-40094000 C 700
|
||
FOR T1:=T1 STEP 1 UNTIL T5 DO PUTTEXT(WITHTAB[T1]); %700-40095000 C 700
|
||
SIMPLEVAR := FALSE; %002-40099000 C 002
|
||
$ %IF THISLEVEL>1 AND THISLEVEL<CURLEVEL THEN ERROR5; %511-40103000 C 511
|
||
CURTYPE := THISID.TYPE; SIMPLEVAR := TRUE; %002-40104000 C 002
|
||
$ %518-40105000 C 518
|
||
$ %615-40105100 C 615
|
||
$ %615-40105200 C 615
|
||
$ %615-40105300 C 615
|
||
$ %615-40105400 C 615
|
||
PUTID("V",1000×THISLEVEL+THISINDEX,5); %518-40105500 C 518
|
||
SIMPLEVAR := FALSE; %002-40109000 C 002
|
||
EXPINVARCNT:=EXPINVARCNT+1;% %002-40120500 C 002
|
||
EXPRLEVEL := EXPRLEVEL+1; % DO NOT "WRITEEXPR" YET %507-40120900 C 507
|
||
EXPRLEVEL := EXPRLEVEL-1; %507-40121100 C 507
|
||
SIMPLEVARIABLE := FALSE; % RECURSION ON "VARIABLE" %507-40121200 C 507
|
||
EXPINVARCNT:=EXPINVARCNT-1;% %002-40121500 C 002
|
||
IF NUMSYMS+6 ≤ MAXSYMS THEN %513-40175000 C 513
|
||
NUMSYMS := NUMSYMS+2; %513-40180400 C 513
|
||
IF NUMPOINTERS > 0 % POINTER VIA POINTER %513-40180500 C 513
|
||
THEN BEGIN REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY %513-40180600 C 513
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; %513-40180700 C 513
|
||
NUMSYMS := NUMSYMS+4; %513-40180800 C 513
|
||
END %513-40180900 C 513
|
||
ELSE NUMPOINTERS := 1; %513-40181000 C 513
|
||
END; % %601-40188005 C 601
|
||
IF TYPETAB1[CURTYPE].FORM=SET THEN % *** SET VARIABLES %601-40188010 C 601
|
||
BEGIN % --- --- --------- %601-40188025 C 601
|
||
INTEGER THISSYML, I; % %601-40188050 C 601
|
||
% %601-40188075 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SLOAD("; % %601-40188100 C 601
|
||
IF SIMPLEVAR THEN % %601-40188125 C 601
|
||
BEGIN % %601-40188150 C 601
|
||
PUTSYM(","); % %601-40188175 C 601
|
||
PUTID("W",1000×THISLEVEL+THISINDEX,5); % %601-40188200 C 601
|
||
END % %601-40188225 C 601
|
||
ELSE % %601-40188250 C 601
|
||
IF INBRACKET AND NOT INRECORD THEN % %601-40188275 C 601
|
||
BEGIN % %601-40188300 C 601
|
||
PUTSYM(","); THISSYML := NUMSYMS; % %601-40188325 C 601
|
||
PUTCONST(0); PUTSYM(" "); PUTSYM(","); % %601-40188350 C 601
|
||
FOR I:=STARTSYM+1 STEP 1 UNTIL THISSYML DO % %601-40188375 C 601
|
||
PUTTEXT(SYMTAB[I]); %601-40188400 C 601
|
||
PUTTEXT(" 1] "); % %601-40188425 C 601
|
||
END % %601-40188450 C 601
|
||
ELSE % %601-40188475 C 601
|
||
BEGIN % %601-40188500 C 601
|
||
THISSYML := NUMSYMS; % %601-40188525 C 601
|
||
IF INBRACKET THEN PUTSYM("]"); % %601-40188550 C 601
|
||
FOR I:=1 STEP 1 UNTIL NUMPOINTERS DO % %601-40188575 C 601
|
||
BEGIN % %601-40188600 C 601
|
||
PUTTEXT("-1)DIV"); PUTTEXT(" 1022,"); % %601-40188625 C 601
|
||
PUTTEXT(" T MOD"); PUTTEXT(" 1022]"); % %601-40188650 C 601
|
||
END; % %601-40188675 C 601
|
||
PUTSYM(","); % %601-40188700 C 601
|
||
FOR I:=STARTSYM+1 STEP 1 UNTIL THISSYML DO % %601-40188725 C 601
|
||
PUTTEXT(SYMTAB[I]); % %601-40188775 C 601
|
||
PUTTEXT(" +1 "); % %601-40188800 C 601
|
||
IF INBRACKET THEN PUTSYM("]"); % %601-40188825 C 601
|
||
FOR I:=1 STEP 1 UNTIL NUMPOINTERS DO % %601-40188850 C 601
|
||
BEGIN % %601-40188875 C 601
|
||
PUTTEXT("-1)DIV"); PUTTEXT(" 1022,"); % %601-40188900 C 601
|
||
PUTTEXT(" T MOD"); PUTTEXT(" 1022]"); % %601-40188915 C 601
|
||
END; % %601-40188930 C 601
|
||
NUMPOINTERS := 0; % %601-40188945 C 601
|
||
END; %601-40188960 C 601
|
||
PUTSYM(","); PUTCONST(CARDCNT); PUTSYM(")"); % %601-40188975 C 601
|
||
END OF SET VARIABLES; % %601-40188990 C 601
|
||
% INBRACKET := FALSE; %513-40191100 C 513
|
||
BEGIN NUMPOINTERS := NUMPOINTERS-1; %513-40193000 C 513
|
||
IF NUMSYMS+4 ≤ MAXSYMS %513-40194000 C 513
|
||
THEN BEGIN REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY %513-40194100 C 513
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; %513-40194200 C 513
|
||
NUMSYMS := NUMSYMS+4; %513-40194300 C 513
|
||
END %513-40194400 C 513
|
||
ELSE ERROR(63); % EXPRESSION IS TOO LONG FOR SYMTAB[*] 40195000 C 513
|
||
$ %601-40198000 C 601
|
||
IF INSIDEPARENS AND SIMPLEVAR AND TYPETAB1[CURTYPE].STRUCT > 0 AND 40198500 C 615
|
||
TYPETAB1[CURTYPE].FORM < FILES THEN SYMTAB[STARTSYM].[35:6] := 40198600 C 615
|
||
"H"; %615-40198700 C 615
|
||
SIMPLEVARIABLE := SIMPLEVAR; %002-40199500 C 002
|
||
INSIDEPARENS := TRUE; %518-40258100 C 518
|
||
INSIDEPARENS := FALSE; %518-40259100 C 518
|
||
IF TYPETAB1[THISID.TYPE].FORM=SET THEN %601-40274200 C 601
|
||
BEGIN % %601-40274220 C 601
|
||
GEN(",",1,7); % %601-40274240 C 601
|
||
GENID("W",1000×THISLEVEL+THISINDEX,5); % %601-40274260 C 601
|
||
END; % %601-40274280 C 601
|
||
BOOLEAN FIRST, SPLITTED; % %601-40296000 C 601
|
||
DEFINE T1 = T #; % USED AT 40558000 %700-40298000 C 700
|
||
$ SET VOIDT 40299000 C 700
|
||
$ POP VOIDT 40309000 C 700
|
||
%700-40331000 C 700
|
||
PROCEDURE PARAMETER; %*** CHECK THAT THE FUNCTION HAS 1 PARAM.40332000 C 700
|
||
BEGIN %700-40333000 C 700
|
||
INSYMBOL; %700-40334000 C 700
|
||
IF CURSY=LPAR %700-40335000 C 700
|
||
THEN BEGIN %700-40336000 C 700
|
||
PUTSYM("("); INSYMBOL; EXPRESSION; %700-40337000 C 700
|
||
IF TYPETAB1[CURTYPE].FORM=NUMERIC THEN CURTYPE:=INTTYPE; 40338000 C 700
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(3); SKIP(RPAR) END; %700-40339000 C 700
|
||
PUTSYM(")"); IF CURSY=RPAR THEN INSYMBOL; %700-40340000 C 700
|
||
END ELSE ERROR(3); % OR ERROR(58) %700-40341000 C 700
|
||
END OF PARAMETER; %700-40342000 C 700
|
||
%700-40350000 C 700
|
||
IF CURNAME1="7CPUTIM" AND CURNAME2="E" THEN % "CPUTIME" 40452000 C 514
|
||
PUTTEXT("SETBS("); PUTTEXT(" 3,2,"); PUTCONST(CARDCNT); % 40529000 C 601
|
||
PUTSYM(")"); % %601-40529300 C 601
|
||
CURTYPE := EMPTYSET; CURMODE := NUMBER; % %601-40529600 C 601
|
||
STARTSYM := NUMSYMS + 1; % %601-40533500 C 601
|
||
PUTTEXT(" SETB("); % %601-40536000 C 601
|
||
PUTSYM(","); SYMTAB[STARTSYM] := "SETBS("; % %601-40544000 C 601
|
||
IF SPLITTED THEN PUTSYM(")"); % %601-40551500 C 601
|
||
IF CURSY=COMMA THEN % %601-40552000 C 601
|
||
BEGIN % %601-40552200 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SUNIO("; % %601-40552400 C 601
|
||
PUTSYM(","); % %601-40552600 C 601
|
||
SPLITTED := TRUE; % %601-40552800 C 601
|
||
END; % %601-40552850 C 601
|
||
NEWTYPE; T1 := SET; T1.SIZE := 2; T1.STRUCT := 0; % %601-40558000 C 601
|
||
CURMODE := NUMBER; % %601-40561000 C 601
|
||
IF CURTYPE=BOOLTYPE THEN % %601-40587000 C 601
|
||
IF CURSY NEQ ANDSY THEN ERROR(64); %601-40593000 C 601
|
||
END ELSE % %601-40593100 C 601
|
||
IF F=SET THEN % %601-40593200 C 601
|
||
BEGIN % %601-40593300 C 601
|
||
IF CURSY=ASTERISK THEN % %601-40593400 C 601
|
||
BEGIN % %601-40593500 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SINTS("; % %601-40593600 C 601
|
||
PUTSYM(","); % %601-40593700 C 601
|
||
END ELSE ERROR(64); % %601-40593800 C 601
|
||
MODE := NUMBER; % %601-40593900 C 601
|
||
IF F=SET THEN PUTSYM(")"); % %601-40608500 C 601
|
||
INTEGER STARTSYM,FIRSTSYM,MODE,TYPE1,F; %603-40618000 C 603
|
||
PUTDUMMY; STARTSYM := FIRSTSYM := NUMSYMS; %603-40621000 C 603
|
||
SPLIT(FIRSTSYM,1); %603-40650000 C 603
|
||
IF CURSY = PLUS THEN SYMTAB[FIRSTSYM] := "SUNIO(" ELSE %603-40651000 C 603
|
||
IF CURSY = MINUS THEN SYMTAB[FIRSTSYM] := "SDIFF(" ELSE %603-40652000 C 603
|
||
ERROR(64); %603-40653000 C 603
|
||
PUTSYM(","); MODE := NUMBER; % %601-40654000 C 601
|
||
$ %601-40655000 C 601
|
||
IF F=SET THEN PUTSYM(")"); % %601-40668500 C 601
|
||
$ %601-40688000 C 601
|
||
IF CURSY=EQLSY THEN SYMTAB[STARTSYM] := "SEQUA(" % %601-40713000 C 601
|
||
ELSE %601-40713150 C 601
|
||
IF CURSY=NEQSY THEN % %601-40713300 C 601
|
||
BEGIN % %601-40714000 C 601
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM]:= " NOT "; % %601-40714150 C 601
|
||
SYMTAB[STARTSYM+1] := "SEQUA("; % %601-40714300 C 601
|
||
IF EXPINVARCNT=0 THEN WRITEEXPR; % %002-40751000 C 002
|
||
$ PAGE %998-49000000 C 998
|
||
CURTYPE := 0; % ALFATYPE OR REALTYPE %509-50050000 C 509
|
||
$ %600-50059000 C 600
|
||
GEN("PREAD(",6,2); WRITEEXPR; GEN(",",1,7); % %600-50079000 C 600
|
||
$ %600-50080000 C 600
|
||
$ %600-50081000 C 600
|
||
GENID("F",FILEID,5); GEN(",",1,7); % %600-50082000 C 600
|
||
IF F=NUMERIC THEN % %600-50086010 C 600
|
||
BEGIN % %600-50086050 C 600
|
||
GEN(",",1,7); GENINT(TYPETAB2[CURTYPE]); % %600-50086100 C 600
|
||
GEN(",",1,7); GENINT(TYPETAB3[CURTYPE]); % %600-50086150 C 600
|
||
END ELSE GEN(",0,0,",4,4); % %600-50086200 C 600
|
||
$ SET VOIDT %600-50088000 C 600
|
||
$ POP VOIDT %600-50093000 C 600
|
||
LABEL EFH; %002-50201500 C 002
|
||
BEGIN ; % NULL %*** 4) REWRITE %001-50203000 C 001
|
||
GEN("PUT",3,5); %*** 5) PAGE %001-50204000 C 001
|
||
%*** 6) OPEN & CLOSE (INPUT) FOR 50204500 C 002
|
||
% CUMULATIVE FREQUENCY COUNT50204550 C 002
|
||
GEN("PPAGE",5,3); % %001-50208000 C 001
|
||
BEGIN %002-50208100 C 002
|
||
GEN("QQJZXL",6,2); %002-50208200 C 002
|
||
INSYMBOL; %002-50208300 C 002
|
||
GO TO EFH; % %002-50208400 C 002
|
||
END; %002-50208500 C 002
|
||
EFH: %002-50219500 C 002
|
||
INTEGER IT; REAL T; %503-50225000 C 503
|
||
$ %518-50243000 C 518
|
||
GENID("H",1000×THISLEVEL+THISINDEX,5); %518-50243100 C 518
|
||
$ %IF THISLEVEL>1 AND THISLEVEL≠CURLEVEL THEN ERROR5; %511-50244000 C 511
|
||
INTEGER IT; REAL T; %503-50285000 C 503
|
||
$ %IF THISLEVEL>1 AND THISLEVEL≠CURLEVEL THEN ERROR5; %511-50306000 C 511
|
||
$ %518-50307000 C 518
|
||
GENID("H",1000×THISLEVEL+THISINDEX,5); %518-50307100 C 518
|
||
$ PAGE %998-59000000 C 998
|
||
%512-60020000 C 512
|
||
PROCEDURE WRITESEXPR; %*** FIX STRUCTURE FOR ASSIGNMENT %512-60021000 C 512
|
||
BEGIN % USED ONLY IN ASSIGNMENT OF STRUCTURES 60022000 C 512
|
||
IF INSIDEBRACKETS THEN IF SYMTAB[NUMSYMS] = "100000," %512-60023000 C 512
|
||
THEN SYMTAB[NUMSYMS] := ", 0 ] " ELSE PUTSYM("]"); %512-60024000 C 512
|
||
WHILE NUMPOINTERS>0 DO %512-60025000 C 512
|
||
BEGIN NUMPOINTERS := NUMPOINTERS-1; %512-60026000 C 512
|
||
IF NUMSYMS+4 ≥ MAXSYMS THEN WRITEEXPR; %512-60027000 C 512
|
||
REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY %512-60028000 C 512
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; %512-60029000 C 512
|
||
NUMSYMS := NUMSYMS+4; %512-60030000 C 512
|
||
END; % OF WHILE %512-60031000 C 512
|
||
WRITEEXPR; GEN( ",", 1,7 ); %512-60032000 C 512
|
||
END WRITESEXPR; %512-60033000 C 512
|
||
%512-60034000 C 512
|
||
%ERROR(95); % STRUCTURED ASSIGNMENT NOT IMPLEMENTED. %512-60063000 C 512
|
||
EXPRLEVEL := EXPRLEVEL+1; %507-60063900 C 507
|
||
GEN("ASSIGN(",7,1); WRITESEXPR; %512-60064000 C 512
|
||
EXPRESSION; WRITESEXPR; %512-60065000 C 512
|
||
EXPRLEVEL := EXPRLEVEL-1; %507-60065100 C 507
|
||
GENINT(TYPETAB1[LEFTTYPE].SIZE); GEN(")",1,7); %512-60066000 C 512
|
||
IF TYPETAB1[LEFTTYPE].SIZE≠TYPETAB1[CURTYPE].SIZE %512-60067000 C 512
|
||
THEN ERROR(95); %512-60068000 C 512
|
||
IF TYPETAB1[LEFTTYPE].FORM=SET THEN % %601-60080100 C 601
|
||
BEGIN % %601-60080200 C 601
|
||
SYMTAB[1] := "SSTOR("; NUMSYMS := NUMSYMS - 3; % %601-60080300 C 601
|
||
EXPRESSION; % %601-60080400 C 601
|
||
PUTSYM(")"); CHECKTYPES(LEFTTYPE,CURTYPE); % %601-60080500 C 601
|
||
WRITEEXPR; % %601-60080600 C 601
|
||
END ELSE % %601-60080700 C 601
|
||
END; %512-60087000 C 512
|
||
CHECKTYPES( LEFTTYPE, CURTYPE ); %512-60088000 C 512
|
||
IF THISLEVEL≠CURLEVEL-1 OR THISINDEX≠CURFUNC THEN ERROR(5);%511-60091000 C 511
|
||
IF THISLEVEL>1 AND THISLEVEL<CURLEVEL THEN ERROR(-5); %511-60276000 C 511
|
||
EXPRLEVEL := 1; %002-60346500 C 002
|
||
IF THISID.IDCLASS=VAR OR %002-60354000 C 002
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN %%002-60354500 C 002
|
||
EXPRLEVEL := 0; %002-60383500 C 002
|
||
PROCEDURE ASSERTSTAT; %002-60391100 C 002
|
||
BEGIN %002-60391200 C 002
|
||
GEN("IF NOT(",7,1); %002-60391400 C 002
|
||
INSYMBOL; BOOLEXPR; %002-60391500 C 002
|
||
GEN(") THEN",7,2); GEN("RUNERR(",7,1); GEN("7,",2,6); %002-60391600 C 002
|
||
GENINT(CARDCNT); GEN(")",1,7); %002-60391700 C 002
|
||
END OF ASSERTSTAT; %002-60391800 C 002
|
||
$ %700-60396000 C 700
|
||
BEGIN LABEL LABFOUND; %700-60399000 C 700
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) OR %700-60423000 C 700
|
||
THISID.IDCLASS=FUNC %700-60423200 C 700
|
||
THEN ASSIGNMENT ELSE %700-60424000 C 700
|
||
IF CURNAME1="6QQJZXL" THEN FILEHANDLING(6) ELSE %002-60443500 C 002
|
||
IF CURSY=ASSERTSY THEN ASSERTSTAT ELSE %002-60457500 C 002
|
||
$ PAGE %998-69000000 C 998
|
||
$ SET VOIDT 70013000 C 700
|
||
$ POP VOIDT 70016000 C 700
|
||
VALUE RECTAB,FIRSTADDR; %700-70018000 C 700
|
||
INTEGER RECTAB,FIRSTADDR,LASTADDR; %700-70019000 C 700
|
||
$ SET VOIDT 70022000 C 700
|
||
$ POP VOIDT 70034000 C 700
|
||
%700-70035000 C 700
|
||
PROCEDURE TYPEDECL( TTYPE, TSIZE ); %***** TYPE DECLARATION ***** 70036000 C 700
|
||
INTEGER TTYPE, TSIZE; %**************************** 70037000 C 700
|
||
BEGIN %700-70038000 C 700
|
||
INTEGER RECINX, ARRSTRUCT, TX, SX, T, N; REAL T1, T2, T3; %700-70039000 C 700
|
||
BOOLEAN FIRST, PACKED; %700-70040000 C 700
|
||
%700-70041000 C 700
|
||
$ %700-70042000 C 700
|
||
END TYPERR; %700-70048000 C 700
|
||
PROCEDURE SUBRANGE; %*** SUBRANGE DECLARATION *** 70050000 C 700
|
||
BEGIN %**************************** 70051000 C 700
|
||
REAL VALX1, VALX2, T1; %700-70052000 C 700
|
||
INTEGER TYPEX1, TYPEX2; %700-70053000 C 700
|
||
%700-70054000 C 700
|
||
CONSTANT(VALX1,TYPEX1); %700-70055000 C 700
|
||
IF TYPETAB1[TYPEX1].FORM>CHAR THEN ERROR(11); %700-70056000 C 700
|
||
IF CURSY≠DOUBLEDOT THEN ERROR(53); %700-70057000 C 700
|
||
INSYMBOL; %700-70058000 C 700
|
||
CONSTANT(VALX2,TYPEX2); %700-70059000 C 700
|
||
IF TYPEX1>0 AND TYPEX2>0 THEN %700-70060000 C 700
|
||
IF TYPEX1≠TYPEX2 THEN ERROR(11) ELSE %700-70061000 C 700
|
||
IF VALX1>VALX2 THEN ERROR(54); %700-70062000 C 700
|
||
IF (T1:=TYPETAB1[TYPEX1].FORM) = SYMBOLIC THEN T1:=SUBTYPE; %700-70063000 C 700
|
||
NEWTYPE; TTYPE:=TYPEINDEX; %700-70064000 C 700
|
||
T1.SIZE:=TSIZE:=1; T1.STRUCT:=0; T1.MAINTYPE:=TYPEX1; %700-70065000 C 700
|
||
TYPETAB1[TYPEINDEX]:=T1; %700-70066000 C 700
|
||
TYPETAB2[TYPEINDEX]:=VALX1; TYPETAB3[TYPEINDEX]:=VALX2; %700-70067000 C 700
|
||
END OF SUBRANGE; %700-70068000 C 700
|
||
%700-70069000 C 700
|
||
DEFINE DEC = POINTER #; %700-70117100 C 700
|
||
DEFINE DEC = ARRAY #; %700-70143100 C 700
|
||
DEFINE DEC = FILE #; %700-70180100 C 700
|
||
DEFINE DEC = SET #; %700-70200100 C 700
|
||
IF TYPETAB2[TX] LSS 0 OR TYPETAB3[TX] GTR 93 THEN ERROR(51); 70210000 C 601
|
||
T1.SIZE := TSIZE := 2; TYPETAB1[TYPEINDEX] := T1; % %601-70214000 C 601
|
||
DEFINE DEC = RECORD #; %700-70220100 C 700
|
||
INTEGER CASETYPE,ADDR,MAXADDR,INDEX,CTYPE,TX,SX, T3,LLIM,ULIM,I; 70244000 C 503
|
||
REAL T1, CVAL; %503-70246000 C 503
|
||
LABEL CASEPART, EXIT; %700-70247000 C 700
|
||
BEGIN DEFINE DEC = VARIANT #; %700-70285100 C 700
|
||
LABEL CASETYPEID; %700-70285200 C 700
|
||
END; %700-70349100 C 700
|
||
$ PAGE %998-79000000 C 998
|
||
INTEGER LEVEL1000, TYP, NAM, NAMTAB, I, J, RECSIZE; %503-80020000 C 503
|
||
ALPHA T1, FNAME; %503-80022000 C 503
|
||
IF NAMTAB.IDCLASS=FUNC THEN GEN("FUNCTN",7,2) % %600-80037000 C 600
|
||
ELSE GEN("PROCEDU",8,1); % %600-80038000 C 600
|
||
IF T1.FORM=SET THEN % %601-80046200 C 601
|
||
BEGIN % %601-80046400 C 601
|
||
GEN(",",1,7); GENID("W",LEVEL1000+NAM,5); % %601-80046600 C 601
|
||
END; % %601-80046800 C 601
|
||
$SET VOIDT %518-80052000 C 518
|
||
$POP VOIDT %518-80064000 C 518
|
||
DEFINE %518-80064005 C 518
|
||
LOWSUBS = 0 #, %518-80064010 C 518
|
||
HISUBS = 1 #, %518-80064015 C 518
|
||
NEXTSUBS= 2 #, %518-80064020 C 518
|
||
MAXNOOFSUBSCRIPTS = 20 #, %518-80064025 C 518
|
||
STOPPERSUBTAB = 21 #; %518-80064030 C 518
|
||
ARRAY ARRSUBSCRIPTRANGE[0:2,0:MAXNOOFSUBSCRIPTS]; %518-80064035 C 518
|
||
INTEGER FIRSTRANGE, NEXTFREEENTRY, PASSSUBRANGE, PREVPASS, %518-80064040 C 518
|
||
MP, POSNO, SUBDIFF; %518-80064045 C 518
|
||
IF ARRAYVAR THEN GEN(";",1,7) ELSE ARRAYVAR := TRUE; %518-80064050 C 518
|
||
IF NOT PARAM THEN %518-80064055 C 518
|
||
BEGIN %518-80064060 C 518
|
||
GEN("DEFINE",7,2); %518-80064065 C 518
|
||
GENID("V",LEVEL1000+NAM,5); %518-80064070 C 518
|
||
GEN("[",1,7); %518-80064075 C 518
|
||
END; %518-80064080 C 518
|
||
FIRSTRANGE := STOPPERSUBTAB; NEXTFREEENTRY := 0; %518-80064085 C 518
|
||
POSNO := 1; %518-80064090 C 518
|
||
MP := 10; FIRSTDIM := TRUE; %518-80064095 C 518
|
||
DO %518-80064100 C 518
|
||
BEGIN %518-80064105 C 518
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE %518-80064110 C 518
|
||
BEGIN %518-80064111 C 518
|
||
IF NOT PARAM THEN GEN(",",1,7); %518-80064112 C 518
|
||
END; %518-80064113 C 518
|
||
IF NOT PARAM THEN GENID("V",(LEVEL1000+NAM)×MP+POSNO,IF MP=10 80064115 C 518
|
||
THEN 6 ELSE 7); POSNO := POSNO + 1; %518-80064120 C 518
|
||
IF POSNO = MP THEN MP := MP×10; %518-80064125 C 518
|
||
IF NEXTFREEENTRY = STOPPERSUBTAB THEN %518-80064130 C 518
|
||
BEGIN %518-80064135 C 518
|
||
ERROR(0); %518-80064140 C 518
|
||
END %518-80064145 C 518
|
||
ELSE %518-80064150 C 518
|
||
BEGIN %518-80064155 C 518
|
||
ARRSUBSCRIPTRANGE[LOWSUBS,NEXTFREEENTRY]:=TYPETAB2[TYP]; 80064160 C 518
|
||
ARRSUBSCRIPTRANGE[HISUBS,NEXTFREEENTRY] := TYPETAB3[TYP]; 80064165 C 518
|
||
END; %518-80064170 C 518
|
||
SUBDIFF := TYPETAB3[TYP] - TYPETAB2[TYP]; %518-80064175 C 518
|
||
IF FIRSTRANGE = STOPPERSUBTAB THEN %518-80064180 C 518
|
||
BEGIN %518-80064185 C 518
|
||
FIRSTRANGE := NEXTFREEENTRY; %518-80064190 C 518
|
||
NEXTFREEENTRY := NEXTFREEENTRY + 1; %518-80064195 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,FIRSTRANGE] := STOPPERSUBTAB; 80064200 C 518
|
||
END %518-80064205 C 518
|
||
ELSE %518-80064210 C 518
|
||
BEGIN %518-80064215 C 518
|
||
PASSSUBRANGE := FIRSTRANGE; %518-80064220 C 518
|
||
PREVPASS := STOPPERSUBTAB; NEXTFREEENTRY:=NEXTFREEENTRY+1;80064225 C 518
|
||
WHILE(SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE] %518-80064230 C 518
|
||
-ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE]) AND 80064235 C 518
|
||
(ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] ≠ %518-80064240 C 518
|
||
STOPPERSUBTAB) DO %518-80064245 C 518
|
||
BEGIN %518-80064250 C 518
|
||
PREVPASS := PASSSUBRANGE; %518-80064255 C 518
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS, %518-8006426 C 518
|
||
PASSSUBRANGE]; 80064265 C 518
|
||
END; %518-80064270 C 518
|
||
IF PREVPASS = STOPPERSUBTAB THEN %518-80064275 C 518
|
||
BEGIN %518-80064280 C 518
|
||
IF SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS, %518-80064285 C 518
|
||
PASSSUBRANGE] - %518-80064290 C 518
|
||
ARRSUBSCRIPTRANGE[LOWSUBS, %518-80064295 C 518
|
||
PASSSUBRANGE] THEN%518-80064300 C 518
|
||
BEGIN %518-80064305 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] := %518-80064310 C 518
|
||
NEXTFREEENTRY - 1; %518-80064315 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] :=%518-80064320 C 518
|
||
STOPPERSUBTAB; %518-80064325 C 518
|
||
END %518-80064330 C 518
|
||
ELSE %518-80064335 C 518
|
||
BEGIN %518-80064340 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] :=%518-80064345 C 518
|
||
FIRSTRANGE; %518-80064350 C 518
|
||
FIRSTRANGE := NEXTFREEENTRY-1; %518-80064355 C 518
|
||
END %518-80064360 C 518
|
||
END %518-80064365 C 518
|
||
ELSE %518-80064370 C 518
|
||
BEGIN %518-80064375 C 518
|
||
IF SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE] - 80064380 C 518
|
||
ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE] 80064385 C 518
|
||
THEN %518-80064390 C 518
|
||
BEGIN %518-80064395 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] := %518-80064400 C 518
|
||
NEXTFREEENTRY - 1; %518-80064405 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := %518-80064410 C 518
|
||
STOPPERSUBTAB; %518-80064415 C 518
|
||
END %518-80064420 C 518
|
||
ELSE %518-80064425 C 518
|
||
BEGIN %518-80064430 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PREVPASS] := %518-80064435 C 518
|
||
NEXTFREEENTRY -1; %518-80064440 C 518
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := %518-80064445 C 518
|
||
PASSSUBRANGE; %518-80064450 C 518
|
||
END %518-80064455 C 518
|
||
END %518-80064460 C 518
|
||
END;TYP:=IF T1.FORM = ARRAYS THEN T1.ARRTYPE ELSE REALTYPE; 80064465 C 518
|
||
T1 := TYPETAB1[TYP]; %518-80064470 C 518
|
||
END UNTIL T1.STRUCT = 0 ; %518-80064475 C 518
|
||
IF NOT PARAM THEN %518-80064480 C 518
|
||
BEGIN %518-80064485 C 518
|
||
GEN("]=",2,6); %518-80064490 C 518
|
||
GENID("H",LEVEL1000+NAM,5); %518-80064495 C 518
|
||
GEN("[",1,7); %518-80064500 C 518
|
||
PASSSUBRANGE:= FIRSTRANGE; FIRSTDIM := TRUE; %518-80064505 C 518
|
||
WHILE PASSSUBRANGE ≠ STOPPERSUBTAB DO %518-80064510 C 518
|
||
BEGIN %518-80064515 C 518
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE GEN(",",1,7); 80064520 C 518
|
||
GENID("V",(LEVEL1000+NAM)×(IF PASSSUBRANGE>9 THEN 100 ELSE 8006453 C 518
|
||
10)+PASSSUBRANGE+1,IF PASSSUBRANGE>9 THEN 7 ELSE 6); 80064535 C 518
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE]; 80064540 C 518
|
||
END; %518-80064545 C 518
|
||
GEN("]#;",3,5); %518-80064550 C 518
|
||
END; %518-80064555 C 518
|
||
PASSSUBRANGE := FIRSTRANGE; %518-80064560 C 518
|
||
FIRSTDIM := TRUE; GEN("ARRAY",6,3); GENID("H",LEVEL1000+NAM,5); 80064565 C 518
|
||
GEN("[",1,7); %518-80064570 C 518
|
||
WHILE PASSSUBRANGE ≠ STOPPERSUBTAB DO %518-80064575 C 518
|
||
BEGIN %518-80064580 C 518
|
||
IF MAXPERMTAB LEQ MAXTOTALSUBSCRS AND PARAM THEN %518-80064585 C 518
|
||
BEGIN %518-80064590 C 518
|
||
ARRSUBPERMTAB[ARRNAM,MAXPERMTAB] := %518-80064595 C 518
|
||
IF FIRSTDIM THEN NAM ELSE -1; %518-80064600 C 518
|
||
ARRSUBPERMTAB[PERMSUB,MAXPERMTAB] := PASSSUBRANGE; %518-80064605 C 518
|
||
MAXPERMTAB := MAXPERMTAB + 1; %518-80064610 C 518
|
||
END %518-80064615 C 518
|
||
ELSE %518-80064620 C 518
|
||
BEGIN %518-80064625 C 518
|
||
IF MAXPERMTAB > MAXTOTALSUBSCRS THEN ERROR(0); %518-80064630 C 518
|
||
END; %518-80064640 C 518
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE GEN(",",1,7); %518-80064645 C 518
|
||
GENINT(ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE]); %518-80064650 C 518
|
||
IF NOT PARAM THEN %518-80064655 C 518
|
||
BEGIN %518-80064660 C 518
|
||
GEN(":",1,7); %518-80064665 C 518
|
||
GENINT(ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE]); %518-80064670 C 518
|
||
END; %518-80064675 C 518
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE]; %518-80064680 C 518
|
||
END; %518-80064685 C 518
|
||
IF T1.FORM=SET THEN % %601-80064700 C 601
|
||
BEGIN % %601-80064750 C 601
|
||
GEN(",0",2,6); % %601-80064800 C 601
|
||
IF NOT PARAM THEN GEN(":1",2,6); % %601-80064850 C 601
|
||
END; % %601-80064900 C 601
|
||
GEN("]",1,7); %518-80064950 C 518
|
||
DEFINE DEC = FILE #; %700-80066100 C 700
|
||
IF ALGOLCNT LSS 14 THEN WRITEALGOL; %517-80103000 C 517
|
||
GEN(""/",2,6); %700-80107000 C 700
|
||
IF RECSIZE=1 OR RECSIZE=10 THEN GENINT(30) %703-80119000 C 703
|
||
GEN(",SAVE",6,3); %703-80122000 C 703
|
||
GEN("30);", 4,4); %703-80123000 C 703
|
||
IF PARAM THEN GEN("0",1,7) ELSE BEGIN %002-80129000 C 002
|
||
GEN("0:",2,6); %002-80129100 C 002
|
||
GENINT(RECSIZE-1); %002-80129200 C 002
|
||
END %002-80129300 C 002
|
||
INTEGER FIRSTPARAM, CURKIND, P1, PX, I, T3; REAL T; %503-80148000 C 503
|
||
FORWPARAM1[NUMPARAMS] := CURNAME1; %002-80177500 C 002
|
||
FORWPARAM2[NUMPARAMS] := CURNAME2; %002-80177600 C 002
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS,TX, I; % %800-80403000 C 800
|
||
ALPHA T3; %002-80403500 C 002
|
||
REAL T, CVAL; %503-80404000 C 503
|
||
MARGIN("+P",CURLEVEL); % MARK PROCEDURE LEVEL %712-80420100 C 712
|
||
$ %518-80421000 C 518
|
||
IF CURLEVEL > 1 THEN %518-80421010 C 518
|
||
BEGIN %518-80421020 C 518
|
||
INTEGER NAMOFTHING,DIFF; %518-80421030 C 518
|
||
BOOLEAN FIRSTTIME; %518-80421040 C 518
|
||
GEN("BEGIN",6,3); %518-80421050 C 518
|
||
IF MAXPERMTAB > 0 THEN %518-80421060 C 518
|
||
BEGIN %518-80421070 C 518
|
||
PASSPERMTAB := 0; %518-80421080 C 518
|
||
DO %518-80421090 C 518
|
||
BEGIN %518-80421100 C 518
|
||
REMEMBERPOSN := PASSPERMTAB; %518-80421110 C 518
|
||
GEN("DEFINE",7,2); %518-80421120 C 518
|
||
NAMOFTHING := ARRSUBPERMTAB[ARRNAM,PASSPERMTAB]; %518-80421130 C 518
|
||
GENID("V",1000×CURLEVEL+NAMOFTHING,5); %518-80421140 C 518
|
||
GEN("[",1,7); %518-80421150 C 518
|
||
FIRSTTIME := TRUE; %518-80421160 C 518
|
||
DO %518-80421170 C 518
|
||
BEGIN %518-80421180 C 518
|
||
IF FIRSTTIME THEN FIRSTTIME := FALSE ELSE GEN(",",180421190 C 518
|
||
,7);80421200 C 518
|
||
DIFF := PASSPERMTAB-REMEMBERPOSN+1; %518-80421210 C 518
|
||
GENID("V",(1000+CURLEVEL+NAMOFTHING)×(IF DIFF>9 THEN 100 ELSE 80421220 C 518
|
||
10)+DIFF,(IF DIFF > 9 THEN 7 ELSE 6)); %518-80421230 C 518
|
||
PASSPERMTAB := PASSPERMTAB + 1; END %518-80421270 C 518
|
||
UNTIL PASSPERMTAB = MAXPERMTAB OR %518-80421280 C 518
|
||
ARRSUBPERMTAB[ARRNAM,PASSPERMTAB] ≠ -1; %518-80421290 C 518
|
||
GEN("]",1,7); %518-80421300 C 518
|
||
GEN("=",1,7); %518-80421310 C 518
|
||
GENID("H",1000×CURLEVEL+NAMOFTHING,5); %518-80421320 C 518
|
||
GEN("[",1,7); %518-80421340 C 518
|
||
PASSPERMTAB := REMEMBERPOSN; FIRSTTIME := TRUE; %518-80421350 C 518
|
||
DO %518-80421360 C 518
|
||
BEGIN %518-80421370 C 518
|
||
IF FIRSTTIME THEN FIRSTTIME := FALSE ELSE GEN(",", 80421380 C 518
|
||
1,7);80421390 C 518
|
||
DIFF := ARRSUBPERMTAB[PERMSUB,PASSPERMTAB]+1; %518-80421400 C 518
|
||
GENID("V",(1000×CURLEVEL+NAMOFTHING)×(IF DIFF>9 THEN80421410 C 518
|
||
100 ELSE 10)+DIFF,(IF DIFF>9 THEN 7 ELSE 6)); 80421420 C 518
|
||
PASSPERMTAB := PASSPERMTAB +1; %518-80421430 C 518
|
||
END %518-80421440 C 518
|
||
UNTIL PASSPERMTAB = MAXPERMTAB OR %518-80421450 C 518
|
||
ARRSUBPERMTAB[ARRNAM,PASSPERMTAB] ≠ -1; %518-80421460 C 518
|
||
GEN("]#;",3,5); %518-80421470 C 518
|
||
END %518-80421480 C 518
|
||
UNTIL PASSPERMTAB = MAXPERMTAB; %518-80421490 C 518
|
||
MAXPERMTAB := 0; %518-80421500 C 518
|
||
END %518-80421510 C 518
|
||
END; %518-80421520 C 518
|
||
DEFINE DEC = LABEL #; %700-80424100 C 700
|
||
LABEL LL1; % %002-80447010 C 002
|
||
DEFINE DEC = CONST #; %700-80447100 C 700
|
||
DEFINE DEC = TYPE #; %700-80475100 C 700
|
||
LABEL LL2; % %002-80496010 C 002
|
||
DEFINE DEC = VAR #; %700-80496100 C 700
|
||
IF CURSY=FUNCSY OR CURSY=PROCSY % %700-80540900 C 700
|
||
THEN BEGIN DEFINE DEC = CODE #; %700-80540910 C 700
|
||
LABEL LL3; % %002-80542010 C 002
|
||
IF CURLEVEL GEQ MAXTABLES THEN ERROR(101) ELSE %002-80543500 C 002
|
||
BLOCKTAB[CURLEVEL+1] := NUMBLOCKS := NUMBLOCKS + 1; %002-80543600 C 002
|
||
IF FOUND AND (THISID.IDCLASS=PROC OR THISID.IDCLASS=FUNC) THEN %600-80548000 C 600
|
||
NAMETAB3[CURLEVEL,THISINDEX].FORWARDDEF:=0; %504-80553000 C 504
|
||
T := NAMETAB3[CURLEVEL,THISINDEX].INFO; %002-80554500 C 002
|
||
TX := T + PARAMTAB[T]; %002-80554600 C 002
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO %002-80554700 C 002
|
||
NEWNAME(FORWPARAM1[I],FORWPARAM2[I],CURLEVEL+1); %002-80554800 C 002
|
||
(THISID.IDCLASS=FUNC AND NOT FUN) THEN ERROR(43); %504-80555100 C 504
|
||
TX:=(T:=THISID.INFO)+PARAMTAB[T]; % UNMARK FORWARD PARMS 80556000 C 504
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO % TO ALLOW REFERENCE 80557000 C 504
|
||
BEGIN T3:=PARAMTAB[I].PARAMNAME; %504-80558000 C 504
|
||
CURNAME1:=ABS(NAMETAB1[CURLEVEL+1,T3]); %504-80559000 C 504
|
||
CURNAME2:= NAMETAB2[CURLEVEL+1,T3]; %504-80560000 C 504
|
||
NAMETAB1[CURLEVEL+1,T3]:=0; %504-80561000 C 504
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL+1); %504-80562000 C 504
|
||
IF T3≠THISINDEX THEN BEGIN %504-80563000 C 504
|
||
PARAMTAB[I].PARAMNAME:=THISINDEX; %504-80564000 C 504
|
||
NAMETAB3[CURLEVEL+1,THISINDEX] := %504-80565000 C 504
|
||
NAMETAB3[CURLEVEL+1,T3]; %504-80565010 C 504
|
||
END END; % OF UNMARKING FORWARD PARAMETERS. %504-80566000 C 504
|
||
$ %518-80608000 C 518
|
||
BEGIN %518-80608010 C 518
|
||
BEGIN %518-80608020 C 518
|
||
INTEGER NAM,T1,SCRATCH; %518-80608030 C 518
|
||
NAM := PARAMTAB[I].[9:10]; %518-80608040 C 518
|
||
SCRATCH := NAMETAB3[CURLEVEL+1,NAM]; %518-80608050 C 518
|
||
SCRATCH := SCRATCH.TYPE; %518-80608060 C 518
|
||
T1 := TYPETAB1[SCRATCH]; %518-80608070 C 518
|
||
IF T1.STRUCT ≠ 0 AND T1.FORM < FILES THEN %518-80608080 C 518
|
||
GENID("H",1000×(CURLEVEL+1)+NAM,5) %518-80608090 C 518
|
||
ELSE %518-80608100 C 518
|
||
BEGIN % %601-80608105 C 601
|
||
GENID("V",1000×(CURLEVEL+1)+NAM,5); %518-80608110 C 518
|
||
IF T1.FORM=SET THEN % %601-80608111 C 601
|
||
BEGIN % %601-80608113 C 601
|
||
GEN(",",1,7); % %601-80608115 C 601
|
||
GENID("W",1000×(CURLEVEL+1)+NAM,5); % %601-80608117 C 601
|
||
END; %601-80608118 C 601
|
||
END; % %601-80608119 C 601
|
||
END; %518-80608120 C 518
|
||
IF TYPETAB1[NAMETAB3[CURLEVEL+1,PARAMTAB[I].PARAMNAME].TYPE80627200 C 601
|
||
].FORM=SET %601-80627205 C 601
|
||
THEN BEGIN % %601-80627400 C 601
|
||
GEN(",",1,7); % %601-80627600 C 601
|
||
GENID("W",1000×(CURLEVEL+1)+PARAMTAB[I].PARAMNAME 80627800 C 601
|
||
,5); % %601-80627801 C 601
|
||
END; %601-80627850 C 601
|
||
TX:=(T:=NAMETAB3[CURLEVEL,INDEX].INFO)+PARAMTAB[T]; %504-80636100 C 504
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO % MARK FORWARD PARAMETERS 80636200 C 504
|
||
NAMETAB1[CURLEVEL+1,PARAMTAB[I].PARAMNAME].[46:1] := 1; 80636210 C 504
|
||
REPLACE POINTER(NAMETAB1[CURLEVEL+1,*]) BY 0 %002-80637500 C 002
|
||
FOR MAXNAMES+1 WORDS; %002-80637600 C 002
|
||
IF CURLEVEL GEQ LASTREC THEN ERROR(101); % %002-80643000 C 002
|
||
TX:=CURFUNC; CURFUNC:=IF FUN THEN INDEX ELSE -1; %504-80645000 C 504
|
||
BLOCK; %*** COMPILE PROCEDURE BODY *** 80646000 C 001
|
||
FOR I:=0 STEP 1 UNTIL MAXNAMES DO % LEAVE FORWARD PARAMETERS 80647000 C 504
|
||
IF NAMETAB1[CURLEVEL,I]>0 THEN NAMETAB1[CURLEVEL,I]:=0; 80648000 C 504
|
||
CURLEVEL:=CURLEVEL-1; CURFUNC:=TX; %504-80649000 C 504
|
||
END OF SEGMENT FOR PROCEDURE DECLARATIONS; %700-80658100 C 700
|
||
COMPSTAT; %*** COMPILE STATEMENT PART *** 80691000 C 001
|
||
FOR I:=LASTREC STEP 1 UNTIL TOPREC-1 DO % CLEAR RECORD DECS %504-80693000 C 504
|
||
MARGIN("-P",CURLEVEL); % MARK END OF PROCEDURE %712-80702100 C 712
|
||
$ PAGE %998-89000000 C 998
|
||
$ %705-90013000 C 705
|
||
INTEGER PROGNAMELENGTH; % %800-90013900 C 800
|
||
% %002-90014100 C 002
|
||
% %002-90014200 C 002
|
||
SAVEFACTOR:=0;% * DEFAULT ZIP IS COMPILE AND GO UNLESS %002-90014300 C 002
|
||
% * CHANGED BY THE USE OF THE "S" OPTION %002-90014400 C 002
|
||
% %002-90014500 C 002
|
||
% %002-90014600 C 002
|
||
CH[0] := "PASC000"; CHARPNT := POINTER(CH[0])+5; %711-90016000 C 711
|
||
PASCALGOL.FID := USER := TIME(-1); %711-90017000 C 711
|
||
DO BEGIN C:=C+1; REPLACE CHARPNT BY C FOR 3 DIGITS; %711-90018000 C 711
|
||
PASCALGOL.MFID := ALGOLNAME := CH[0]; %711-90019000 C 711
|
||
SEARCHDISKDIRECTORY( PASCALGOL, LINES[*] ); %711-90020000 C 711
|
||
END UNTIL LINES[0]=-1; % FILE NOT ON DISK %711-90021000 C 711
|
||
WRITE(PASCALGOL,MERGE); % ALGOL MUST COMPILE PRELUDE FIRST %704-90022000 C 704
|
||
$ SET VOIDT 90023000 C 704
|
||
$ POP VOIDT 90032000 C 704
|
||
C := " "; % TO INITIALIZE "INSYMBOL" %709-90034000 C 709
|
||
INITIALIZE; % COMPILER TABLES, NEWCARD, INSYMBOL %709-90035000 C 709
|
||
$ %709-90036000 C 709
|
||
PROGNAME := IF CURLENGTH < 7 %705-90042000 C 705
|
||
THEN " "&CURNAME1[41:6×CURLENGTH-1:6×CURLENGTH] 90042010 C 705
|
||
ELSE CURNAME2.[5:6]&CURNAME1[41:35:36]; %705-90042020 C 705
|
||
% %002-90042100 C 002
|
||
% THE FOLLOWING LINES ADD A "0" ONTO THE FRONT OF THE PROGRAM NAME OR90042200 C 002
|
||
% THE FIRST SIX CHARACTERS THEREOF IF IT IS LONGER THAN SIX CHARACTERS 90042300 C 002
|
||
% THUS GIVING THE NAME OF THE XALGOL OBJECT CODE FILE PRODUCED. %002-90042400 C 002
|
||
% %002-90042500 C 002
|
||
PROGNAME := CURNAME1.[35:36]; PROGNAMELENGTH := MIN(6,CURLENGTH)+1;90042600 C 002
|
||
% %002-90042700 C 002
|
||
% %002-90042800 C 002
|
||
MAXPERMTAB := 0; %518-90070100 C 518
|
||
INSIDEPARENS := FALSE; %518-90070200 C 518
|
||
$ PAGE %998-90070999 C 998
|
||
WRITE(LINE, TERMMESS); %708-90084000 C 708
|
||
IF PAGECNT > 0 % THERE HAS BEEN SOME LISTING %709-90088000 C 709
|
||
THEN BEGIN WRITE( LINE[DBL] ); WRITE( LINE[DBL] ) END; %709-90089000 C 709
|
||
BEGIN% %002-90090400 C 002
|
||
WRITE(LINE ,NOERRORS);% %002-90090500 C 002
|
||
IF ERR(100) % %800-90090600 C 800
|
||
THEN WRITE(LINE ,ERROR100MESS);% %002-90090700 C 002
|
||
IF ERR(102) THEN %713-90090710 C 713
|
||
WRITE(LINE,ERROR102MESS); %713-90090720 C 713
|
||
IF SAVEFACTOR≥0 THEN% *A ZIP IS REQUIRED %002-90090800 C 002
|
||
DEFINE PPROGNAME = 13 #, PALGOLNAME = 14 #, %705-90095000 C 705
|
||
PLIBRARY = 15 #, PUSER = 16 #, %705-90096000 C 705
|
||
P(P1) = POINTER(ZIPARRAY[P1])+1 FOR 7 #; %705-90097000 C 705
|
||
$ SET VOIDT 90098000 C 705
|
||
$ POP VOIDT 90104000 C 705
|
||
$ %705-90109000 C 705
|
||
$ %713-90110000 C 713
|
||
$ %713-90111000 C 713
|
||
ZIPARRAY[PPROGNAME]:=PROGNAME; ZIPARRAY[PALGOLNAME]:=ALGOLNAME; 90112000 C 705
|
||
ZIPARRAY[PLIBRARY]:= IF SAVEFACTOR>0 THEN "LIBRARY" ELSE %705-90113000 C 705
|
||
IF SAVEFACTOR<0 THEN " SYNTAX" ELSE " & RUN "; 90114000 C 705
|
||
ZIPARRAY[PUSER]:=USER; %705-90115000 C 705
|
||
REPLACE POINTER(ZIPARRAY[*]) BY "CC COMPILE ", %705-90116000 C 705
|
||
P(PPROGNAME), "/", P(PUSER), %705-90117000 C 705
|
||
" XALGOL ", P(PLIBRARY), %705-90118000 C 705
|
||
"; ALGOL FILE TAPE=PASCRUN/DISK SERIAL; ALGOL FILE CARD=", %800-90119000 C 800
|
||
P(PALGOLNAME),"/",P(PUSER)," SERIAL;", % %800-90120000 C 800
|
||
" XALGOL STACK = 2048; END."; % %800-90120500 C 800
|
||
$ SET VOIDT 90121000 C 705
|
||
$ POP VOIDT 90128000 C 705
|
||
END% %002-90129500 C 002
|
||
(" 5 FUNCTION NAME NOT ACCESSIBLE AT THIS LEVEL."), %511-91009000 C 511
|
||
(" 41 ALFA CONSTANTS MAY NOT BE LONGER THAN 7 CHARACTERS."),%001-91045000 C 001
|
||
(" 55 PROCEDURE NESTING DEPTH + NO OF RECORDS IS TOO GREAT."), 91060000 C 001
|
||
(" 87 END-OF-INPUT ENCOUNTERED UNEXPECTEDLY."), %001-91094000 C 001
|
||
(" 95 SIZE OF STRUCTURES IN ASSIGNMENT ARE NOT THE SAME."), %512-91102000 C 512
|
||
(" 97 TOO MANY FILES IN USE."), %001-91104000 C 001
|
||
("100 ILLEGAL SAVE CONSTANT IN """""S""""" OPTION. THE VALUE 07 IS91106500 C 002
|
||
SUBSTITUTED"/" SO THIS ERROR DOES NOT INCREMENT THE COMPILATION ERRO91106600 C 002
|
||
RS COUNT."),% %002-91106700 C 002
|
||
("101 PROCEDURES/FUNCTIONS NESTED TOO DEEP."), %002-91106800 C 002
|
||
("102 ***WARNING ONLY, ILLEGAL DOLLAR OPTION."), %713-91106900 C 713
|
||
WRITE(LINE, ERRORS,NUMERRS); %708-91110000 C 708
|
||
WRITE(LINE, ERRORMESS1[I]); %708-91112000 C 708
|
||
WRITE(LINE, ERRORMESS2[I-60]); %708-91114000 C 708
|
||
REWIND(XREFFILE); %002-92003500 C 002
|
||
SORT(PRINTXREF,XREFINPUT,0,XREFMAX,XREFCOMPARE,3,1000,6000); %002-92005000 C 002
|
||
END OF B5700 PASCAL COMPILER............................................99001000 C 001
|
||
%001-99999999 C 001
|
||
? END. 000000≥
|
||
|
||
|
||
|
||
|
||
|
||
|
||
NUMBER OF ERRORS DETECTED = 0.
|
||
PROCESSOR TIME = 46 SECONDS.
|
||
I/O TIME = 115 SECONDS.
|
||
|
||
|
||
|
||
LABEL 000000000LINE 00186197?EXECUTE PATCH/MERGE PATCH /MERGE
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
LABEL 000000000LINE 00186197? COMPILE PASCAL/NEW XALGOL LIBRARY XALGOL /PASCAL
|
||
|
||
|
||
|
||
|
||
|
||
BURROUGHS B-5700 XALGOL COMPILER MARK XV.3.00 WEDNESDAY, 07/16/86, 11:50 AM.
|
||
|
||
|
||
|
||
PASCAL /NEW
|
||
===============
|
||
|
||
|
||
10001000 T 0000
|
||
10002000 T 0000
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10003000 T 0000
|
||
% % 10004000 T 0000
|
||
% % 10005000 T 0000
|
||
% * * % 10006000 T 0000
|
||
% * P A S C A L C O M P I L E R * % 10007000 T 0000
|
||
% *********************************** % 10008000 T 0000
|
||
% % 10009000 T 0000
|
||
% % 10010000 T 0000
|
||
% WRITTEN 1975 BY % 10011000 T 0000
|
||
% DAG F. LANGMYHR, % 10012000 T 0000
|
||
% HERIOT-WATT UNIVERSITY, % 10013000 T 0000
|
||
% EDINBURGH. % 10014000 T 0000
|
||
% % 10015000 T 0000
|
||
% % 10016000 T 0000
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10017000 T 0000
|
||
% % 10018000 T 0000
|
||
% % 10019000 T 0000
|
||
% PART 1: DECLARATIONS. % 10020000 T 0000
|
||
% ------------- % 10021000 T 0000
|
||
% % 10022000 T 0000
|
||
% % 10023000 T 0000
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10024000 T 0000
|
||
10025000 T 0000
|
||
10026000 T 0000
|
||
BEGIN 10027000 T 0000
|
||
START OF SEGMENT ********** 2
|
||
DEFINE EDITION = "4.4"#;%AUGUST 1978...DAVID A COOPER... %999- 10028000 P 0000
|
||
INTEGER NUMERRS, % @R+25: NUMBER OF ERRORS IN PROGRAM. %500- 10029000 P 0000
|
||
SAVEFACTOR, % @R+26: SAVEFACTOR FOR CODE FILE. %500- 10030000 P 0000
|
||
% >0 COMPILE TO LIBRARY. 10031000 T 0000
|
||
% =0 COMPILE AND RUN. 10032000 T 0000
|
||
% <0 COMPILE FOR SYNTAX. 10033000 T 0000
|
||
PAGECNT, % @R+27: NUMBER OF PAGES PRINTED. %500- 10033800 C 0000
|
||
CARDCNT; % @R+30: NUMBER OF CARDS READ. %500- 10034000 P 0000
|
||
FILE CARD "SOURCE" (1,10,30); % PASCAL SOURCE CODE INPUT FILE %703- 10035000 P 0000
|
||
SAVE FILE OUT LINE DISK SERIAL [20:1200] (1,17,90,SAVE 1); % PRINT FILE 10036000 P 0003
|
||
% AVOID BLOCKING RECORDS OF VARIABLE LENGTH%708- 10036001 C 0009
|
||
FILE PASCALGOL DISK SERIAL [20:300] (1,10,30,SAVE 0); % ALGOL CODE FILE 10037000 P 0009
|
||
DEFINE LINESPERPAGE = 60 #, %502- 10038000 P 0016
|
||
MAXINT=549755813887#; 10039000 T 0016
|
||
10040000 T 0016
|
||
%*** COMPILER CONSTANTS *** 10041000 T 0016
|
||
DEFINE MAXTABLES = 30 #, %MAX NUMBER OF LEVELS IN IDENTIFIER TABLE. 10042000 P 0016
|
||
MAXNAMES =307 #, %MAX NAMES IN EACH ROW OF IDENTIFIER TABLE. 10043000 P 0016
|
||
MAXLEVEL =15#, %MAX DEPTH OF PROCEDURE DECLARATIONS. 10044000 T 0016
|
||
% ONLY USED IN WITH STATEMENT TO TEST %701- 10044001 C 0016
|
||
MAXCASES =64 #, %MAX LABELS IN A CASE-STATEMENT. %701- 10045000 P 0016
|
||
MAXLABS =50 #, %MAX NUMBER OF IN PROGRAM LABELS. %701- 10046000 P 0016
|
||
MAXPARAMS =200 #, %MAX NUMBER OF PARAMETERS IN WHOLE PROGRAM. 10047000 P 0016
|
||
MAXTYPES =250 #, %MAX NUMBER OF DIFFERENT TYPES. %701- 10048000 P 0016
|
||
MAXCONSTS =100 #, %SIZE OF TABLE FOR CONSTANTS. %701- 10049000 P 0016
|
||
MAXTEMPS =5#, %NUMBER OF EXTRA VARS IN EACH PROCEDURE. 10050000 T 0016
|
||
MAXWITHSYMS= 70 #, %MAX NUMBER OF SYMBOLS USED BY WITH-STATMS. 10051000 P 0016
|
||
MAXSYMS = 800#, %MAX NUMBER OF SYMBOLS IN ONE EXPRESSION. 10052000 P 0016
|
||
LISTLENGTH =100 #, %MAX LENGTH OF VAR AND PARAM LISTS. %701- 10053000 P 0016
|
||
MAXEXTFILES=10 #, %MAX NUMBER OF EXTERNAL FILES. %701- 10054000 P 0016
|
||
MAXFILES =10 #, %MAX NUMBER OF FILES DECLARED AT ONE TIME. 10055000 P 0016
|
||
MAXPNTRS = 25#; %MAX NUMBER OF UNDECLARED POINTERS(FORWD). 10056000 P 0016
|
||
10057000 T 0016
|
||
%*** NAME TABLES *** 10058000 T 0016
|
||
ARRAY NAMETAB1,NAMETAB2,NAMETAB3[0:MAXTABLES,0:MAXNAMES]; 10059000 T 0016
|
||
DEFINE NAMELENGTH =[41:6]#, 10060000 T 0018
|
||
TYPE =[9:10]#, 10061000 T 0018
|
||
IDCLASS =[12:3]#, 10062000 T 0018
|
||
VAR =0#, 10063000 T 0018
|
||
CONST=1#, 10064000 T 0018
|
||
FUNC =2#, 10065000 T 0018
|
||
PROC =3#, 10066000 T 0018
|
||
TYPES=4#, 10067000 T 0018
|
||
INFO =[23:11]#, 10068000 T 0018
|
||
FORMAL =[24:1]#, 10069000 T 0018
|
||
FORWARDDEF =[25:1]#, 10070000 T 0018
|
||
EXTERNALFILE=[26:1]#; 10071000 T 0018
|
||
10072000 T 0018
|
||
%*** DISPLAY VECTOR *** 10073000 T 0018
|
||
ARRAY DISPLAY[0:MAXLEVEL]; 10074000 T 0018
|
||
DEFINE RECTYPE =[9:10]#, 10075000 T 0020
|
||
FIRSTWITHSYM =[19:10]#, 10076000 T 0020
|
||
LASTWITHSYM =[29:10]#, 10077000 T 0020
|
||
NUMPNTRSINWITH=[35:6]#, 10078000 T 0020
|
||
BRACKETSINWITH=[36:1]#, 10079000 T 0020
|
||
NAMETAB =[46:7]#; 10080000 T 0020
|
||
10081000 T 0020
|
||
%*** TYPE TABLES *** 10082000 T 0020
|
||
ARRAY TYPETAB1,TYPETAB2,TYPETAB3[0:MAXTYPES]; 10083000 T 0020
|
||
DEFINE FORM =[3:4]#, 10084000 T 0022
|
||
NUMERIC =0#, 10085000 T 0022
|
||
SYMBOLIC=1#, 10086000 T 0022
|
||
SUBTYPE =2#, 10087000 T 0022
|
||
MAINTYPE=[33:10]#, 10088000 T 0022
|
||
CHAR =3#, 10089000 T 0022
|
||
FLOATING=4#, 10090000 T 0022
|
||
ALFA =5#, 10091000 T 0022
|
||
SET =6#, 10092000 T 0022
|
||
SETTYPE =[33:10]#, 10093000 T 0022
|
||
POINTERS=7#, 10094000 T 0022
|
||
POINTTYPE=[33:10]#, 10095000 T 0022
|
||
ARRAYS =8#, 10096000 T 0022
|
||
INXTYPE =[33:10]#, 10097000 T 0022
|
||
ARRTYPE =[43:10]#, 10098000 T 0022
|
||
RECORD =9#, 10099000 T 0022
|
||
RECTAB =[33:10]#, 10100000 T 0022
|
||
FILES =10#, 10101000 T 0022
|
||
FILETYPE=[33:10]#, 10102000 T 0022
|
||
TEXTFILE=11#, 10103000 T 0022
|
||
SIZE =[15:12]#, 10104000 T 0022
|
||
STRUCT=[23:8]#; 10105000 T 0022
|
||
INTEGER NUMTYPES; 10106000 T 0022
|
||
10107000 T 0022
|
||
%*** PARAMETER TABLE *** 10108000 T 0022
|
||
ARRAY PARAMTAB, FORWPARAM1, FORWPARAM2[0:MAXPARAMS]; %002- 10109000 P 0022
|
||
DEFINE PARAMNAME =[9:10]#, 10110000 T 0024
|
||
PARAMKIND =[13:4]#, 10111000 T 0024
|
||
PARAMLEVEL=[23:10]#, 10112000 T 0024
|
||
PARAMTYPE =[33:10]#, 10113000 T 0024
|
||
PARAMFILE =[34:1]#; 10114000 T 0024
|
||
INTEGER NUMPARAMS; 10115000 T 0024
|
||
10116000 T 0024
|
||
%*** CONSTANT TABLE *** 10117000 T 0024
|
||
ARRAY CONSTTAB[0:MAXCONSTS]; 10118000 T 0024
|
||
INTEGER NUMCONSTS; 10119000 T 0026
|
||
10120000 T 0026
|
||
%*** LABEL TABLE *** 10121000 T 0026
|
||
ARRAY LABTAB[0:MAXLABS]; 10122000 T 0026
|
||
DEFINE LABVAL=[14:15]#, 10123000 T 0028
|
||
LABDEF=[15:1]#; 10124000 T 0028
|
||
INTEGER NUMLABS,FIRSTLAB; 10125000 T 0028
|
||
10126000 T 0028
|
||
%*** TABLES FOR I/O AND CHARACTER HANDLING *** 10127000 T 0028
|
||
ARRAY CH[0:0], TEXT[0:1], STRING[0:11]; 10128000 T 0028
|
||
POINTER CHARPNT,TEXTPNT,TEXTPNT0,STRINGPNT; 10129000 T 0033
|
||
ARRAY ICARD, ALGOLCARD[0:9], LINES, XLINE[0:16]; %708- 10130000 P 0033
|
||
% AVOID BLOCKING VARIABLE LENGTH RECORDS 10130001 C 0037
|
||
POINTER CARDPNT,LINEPNT,XLINEPNT,ALGOLPNT; 10131000 T 0037
|
||
INTEGER CHARCNT,ALGOLCNT,MARGINCNT; 10132000 T 0037
|
||
ARRAY HEADTEXT, ERRLINE[0:16]; %708- 10133000 P 0037
|
||
INTEGER LINECNT, ERRINX; % PAGECNT @ PRT+27 %500- 10134000 P 0039
|
||
10135000 T 0039
|
||
%*** XREF FILE AND TABLE *** 10136000 T 0039
|
||
FILE XREFFILE DISK SERIAL [20:3000] (1,3,30); % FOR CROSS REFERENCE 10137000 P 0039
|
||
ARRAY BLOCKTAB[0:MAXTABLES], XREFLINE[0:16]; 10138000 T 0043
|
||
ALPHA ARRAY XBUFF[0:2]; %002- 10138500 C 0046
|
||
BOOLEAN XINB; %002- 10138550 C 0048
|
||
INTEGER NUMXREF,NUMBLOCKS; POINTER XREFPNT; 10139000 T 0048
|
||
% 10140000 T 0048
|
||
%*** OTHER TABLES *** 10141000 T 0048
|
||
INTEGER ARRAY VARLIST[0:LISTLENGTH]; % TEMPORARY LIST OF VARIABLES. 10142000 T 0048
|
||
INTEGER VARINDEX,FIRSTVAR; 10143000 T 0050
|
||
ALPHA ARRAY SYMTAB[0:MAXSYMS]; % USED BY "EXPRESSION". %517- 10144000 P 0050
|
||
INTEGER NUMSYMS; 10145000 T 0051
|
||
ARRAY WITHTAB[0:MAXWITHSYMS]; % USED BY "WITHSTAT". 10146000 T 0051
|
||
INTEGER NWITHSYMS; 10147000 T 0053
|
||
INTEGER ARRAY SYMBOL[0:64]; % USED BY "INSYMBOL". 10148000 T 0053
|
||
INTEGER ARRAY SYMKIND[0:62]; %USED IN ERROR RECOVERY. %002- 10149000 P 0055
|
||
ARRAY PNTRTAB1,PNTRTAB2,PNTRTAB3[0:MAXPNTRS];% USED FOR FORWARD POINTERS 10150000 T 0057
|
||
INTEGER NUMPNTRS; 10151000 T 0059
|
||
ARRAY EXTFILETAB[0:MAXEXTFILES]; % EXTERNAL FILES. 10152000 T 0059
|
||
INTEGER NUMEXTFILES; 10153000 T 0061
|
||
ARRAY FILETAB[0:MAXFILES]; % FILES IN USE. 10154000 T 0061
|
||
INTEGER NUMFILES; 10155000 T 0062
|
||
ARRAY ERRP[0:3]; % HOLDS 128 BITS % RECORDS ERROR MESSAGES USED. 10156000 P 0062
|
||
DEFINE ERR(ERR1) = BOOLEAN(0&ERRP[(ERR1).[6:2]][0:((ERR1).[4:5]):1])#; 10156100 C 0064
|
||
DEFINE %518- 10156200 C 0064
|
||
PERMSUB = 0 #, MAXTOTALSUBSCRS = 100#, %518- 10156300 C 0064
|
||
ARRNAM = 1 #; %518- 10156400 C 0064
|
||
ARRAY ARRSUBPERMTAB[0:1,0:MAXTOTALSUBSCRS]; %518- 10156500 C 0064
|
||
INTEGER PASSPERMTAB, MAXPERMTAB, REMEMBERPOSN; %518- 10156600 C 0066
|
||
10157000 T 0066
|
||
%*** COMPILE TIME OPTIONS *** 10158000 T 0066
|
||
BOOLEAN LISTOPTION,RESWORDOPTION,CHECKOPTION,DUMPOPTION,XREFOPTION; 10159000 T 0066
|
||
DEFINE RESWORDPRESENT = RESWORDOPTION.[1:1] #; %710- 10159100 C 0066
|
||
INTEGER CARDLENGTH; 10160000 T 0066
|
||
10161000 T 0066
|
||
%*** INTRINSIC TYPES *** 10162000 T 0066
|
||
INTEGER INTTYPE,REALTYPE,ALFATYPE,CHARTYPE,BOOLTYPE,NILTYPE,TEXTTYPE, 10163000 T 0066
|
||
INPUTFILE,OUTPUTFILE,EMPTYSET; 10164000 T 0066
|
||
BOOLEAN INPUTDECL,OUTPUTDECL; 10165000 T 0066
|
||
10166000 T 0066
|
||
%*** OTHER VARIABLES *** 10170000 T 0066
|
||
ALPHA USER; % THE USER NUMBER FOUND ON THE USER CARD. 10171000 T 0066
|
||
10172000 T 0066
|
||
INTEGER CURLEVEL, % CURRENT PROCEDURE LEVEL. 10173000 T 0066
|
||
TOPLEVEL, % TOP LEVEL IN DISPLAY VECTOR. 10174000 T 0066
|
||
NUMBEGINS, % NUMBER OF "BEGIN"S IN THE PROGRAM. 10175000 T 0066
|
||
NUMCASES, % NUMBER OF CASE-STATEMENTS IN PROGRAM. 10176000 T 0066
|
||
NUMREPS, % NUMBER OF REPEAT-STATEMENTS IN PROGRAM. 10177000 T 0066
|
||
NUMTEMPS, % NUMBER OF TEMPORARY VARIABLES IN USE. 10178000 T 0066
|
||
CURFUNC, % INDEX OF FUNCTION CURRENTLY COMPILED. 10179000 T 0066
|
||
CURSY, % LAST SYMBOL READ BY SCANNER. 10180000 T 0066
|
||
CURTYPE, % TYPE OF ENTITY LAST COMPILED. 10181000 T 0066
|
||
CURMODE, % CURRENT EXPRESSION MODE. 10182000 T 0066
|
||
LASTREC; % LAST RECORD TABLE DEFINED. 10183000 T 0066
|
||
10184000 T 0066
|
||
LABEL ENDOFINPUT; 10185000 T 0066
|
||
10186000 T 0066
|
||
FORMAT NOERRORS ("NO ERRORS DETECTED."), 10187000 T 0066
|
||
START OF SEGMENT ********** 3
|
||
ERRORS (I5," ERRORS DETECTED ",20("#") /), %704- 10188000 P 0066
|
||
ERROR100MESS (//"100 ILLEGAL SAVE CONSTANT IN """""S""""" OPTION 10188500 C 0066
|
||
. THE VALUE 07 IS SUBSTITUTED"/" SO THIS ERROR DOES NOT INCREMENT TH 10188600 C 0066
|
||
E COMPILATION ERRORS COUNT."//),% %002- 10188700 C 0066
|
||
ERROR102MESS(//"102 *** WARNING ONLY, ILLEGAL COMPILER OPTION.") 10188750 C 0066
|
||
, % %713- 10188751 C 0066
|
||
ALIST ("$ SET LIST "), %704- 10189000 P 0066
|
||
NOALIST ("$ RESET LIST"), 10190000 T 0066
|
||
MERGE ("$ SET TAPE RESET $" / %704- 10190100 C 0066
|
||
"$ RESET TAPE", T73,"99000000" ), %704- 10190200 C 0066
|
||
LASTLINE ("; TERMINATE: END OF PASCAL PROGRAM."), 10191000 T 0066
|
||
TERMMESS ("**** COMPILATION TERMINATED."); %704- 10192000 P 0066
|
||
3 IS 106 LONG, NEXT SEG 2
|
||
MONITOR EXPOVR:=REALOVERFLOW; 10193000 T 0066
|
||
10194000 T 0069
|
||
%*** SCANNER SYMBOLS *** 10195000 T 0069
|
||
DEFINE IDENTIFIER=1#, INTCONST=2#, REALCONST=3#, ALFACONST=4#, 10196000 T 0069
|
||
CHARCONST=5#, NOTSY=6#, ASTERISK=7#, SLASH=8#, 10197000 T 0069
|
||
ANDSY=9#, DIVSY=10#, MODSY=11#, PLUS=12#, 10198000 T 0069
|
||
MINUS=13#, ORSY=14#, LSSSY=15#, LEQSY=16#, 10199000 T 0069
|
||
GEQSY=17#, GTRSY=18#, NEQSY=19#, EQLSY=20#, 10200000 T 0069
|
||
INSY=21#, LPAR=22#, RPAR=23#, LBRACKET=24#, 10201000 T 0069
|
||
RBRACKET=25#, DOUBLEDOT=26#, COMMA=27#, SEMICOLON=28#, 10202000 T 0069
|
||
DOT=29#, ARROW=30#, COLON=31#, ASSIGNSY=32#, 10203000 T 0069
|
||
BEGINSY=33#, ENDSY=34#, IFSY=35#, THENSY=36#, 10204000 T 0069
|
||
ELSESY=37#, CASESY=38#, OFSY=39#, REPEATSY=40#, 10205000 T 0069
|
||
UNTILSY=41#, WHILESY=42#, DOSY=43#, FORSY=44#, 10206000 T 0069
|
||
TOSY=45#, DOWNTOSY=46#, GOTOSY=47#, NILSY=48#, 10207000 T 0069
|
||
TYPESY=49#, ARRAYSY=50#, RECORDSY=51#, FILESY=52#, 10208000 T 0069
|
||
SETSY=53#, CONSTSY=54#, VARSY=55#, LABELSY=56#, 10209000 T 0069
|
||
FUNCSY=57#, PROCSY=58#, WITHSY=59#, PROGRAMSY=60#, 10210000 T 0069
|
||
PACKEDSY=61#, ASSERTSY=62#; %002- 10211000 P 0069
|
||
10212000 T 0069
|
||
DEFINE INITIAL=0#, MIDDLE=1#, TERMINAL=2#; 10213000 T 0069
|
||
DEFINE NUMBER=0#, BITPATTERN=1#; 10214000 T 0069
|
||
|
||
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20001000 T 0069
|
||
% % 20002000 T 0069
|
||
% % 20003000 T 0069
|
||
% % 20004000 T 0069
|
||
% PART 2: COMPILER UTILITY ROUTINES. % 20005000 T 0069
|
||
% -------------------------- % 20006000 T 0069
|
||
% % 20007000 T 0069
|
||
% % 20008000 T 0069
|
||
% % 20009000 T 0069
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20010000 T 0069
|
||
20011000 T 0069
|
||
20012000 T 0069
|
||
PROCEDURE INSYMBOL; FORWARD; 20013000 T 0069
|
||
PROCEDURE WRITEALGOL; FORWARD; 20014000 T 0073
|
||
PROCEDURE NEWXREF(NAME1,NAME2,TABLE,DECL); 20015000 T 0073
|
||
VALUE NAME1,NAME2,TABLE,DECL; %700- 20016000 P 0073
|
||
REAL NAME1,NAME2; %700- 20017000 P 0073
|
||
INTEGER TABLE; BOOLEAN DECL; %700- 20018000 P 0073
|
||
FORWARD; %700- 20019000 P 0073
|
||
PROCEDURE PRINTERRORS; FORWARD; %700- 20020000 P 0073
|
||
20021000 T 0073
|
||
DEFINE NDIGITS(N)= 20022000 T 0073
|
||
IF N≤ 9 THEN 1 ELSE 20023000 T 0073
|
||
IF N≤99 THEN 2 ELSE 3 DIGITS#; 20024000 T 0073
|
||
20025000 T 0073
|
||
PROCEDURE HEADING; %*** PRINTS A HEADING AT START OF NEW PAGE. 20026000 P 0073
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; %700- 20027000 P 0073
|
||
START OF SEGMENT ********** 4
|
||
PAGECNT:=PAGECNT+1; 20028000 T 0000
|
||
REPLACE POINTER(HEADTEXT[*])+85 BY PAGECNT FOR NDIGITS(PAGECNT); 20029000 T 0001
|
||
IF PAGECNT=1 THEN WRITE(LINE[NO],17,HEADTEXT[*]) ELSE %709- 20029900 C 0011
|
||
WRITE( LINE[PAGE]); %709- 20030000 P 0017
|
||
WRITE( LINE[DBL],17,HEADTEXT[*]); %709- 20031000 P 0021
|
||
LINECNT:=2; 20032000 T 0025
|
||
END OF HEADING; %700- 20033000 P 0026
|
||
4 IS 27 LONG, NEXT SEG 2
|
||
20034000 T 0073
|
||
20035000 T 0073
|
||
PROCEDURE PRINTLINE; %*** PRINTS A PASCAL SOURCE CODE LINE %700- 20036000 P 0073
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; %700- 20037000 P 0073
|
||
START OF SEGMENT ********** 5
|
||
REPLACE LINEPNT-8 BY CARDCNT FOR 5 DIGITS; 20038000 T 0000
|
||
IF LINECNT≥LINESPERPAGE THEN HEADING; 20039000 T 0005
|
||
IF REAL(RESWORDOPTION) = 3 THEN % RESERVED WORD IS PRESENT %710- 20040000 P 0007
|
||
BEGIN 20041000 T 0008
|
||
WRITE( LINE[NO],17,XLINE[*]); %708- 20042000 P 0008
|
||
WRITE( LINE[NO],17,XLINE[*]); %708- 20043000 P 0012
|
||
END; 20044000 T 0017
|
||
WRITE(LINE, 17,LINES[*]); %708- 20045000 P 0017
|
||
LINECNT:=LINECNT+1; 20046000 T 0021
|
||
END OF PRINTLINE; %700- 20047000 P 0022
|
||
5 IS 23 LONG, NEXT SEG 2
|
||
20048000 T 0073
|
||
20049000 T 0073
|
||
PROCEDURE NEWCARD; %*** READS A NEW PASCAL SOURCE CODE CARD 20050000 P 0073
|
||
BEGIN DEFINE RESULT = ICARD[*], ETC #; %700- 20051000 P 0073
|
||
START OF SEGMENT ********** 6
|
||
IF LISTOPTION THEN PRINTLINE; 20052000 T 0000
|
||
IF ERRINX>0 THEN PRINTERRORS; 20053000 T 0001
|
||
READ(CARD,10,ICARD[*]) [ENDOFINPUT]; 20054000 T 0003
|
||
CARDPNT:=POINTER(ICARD[*]); 20055000 T 0008
|
||
REPLACE XLINEPNT BY " " FOR 16 WORDS; %700- 20056000 P 0009
|
||
REPLACE LINEPNT BY CARDPNT FOR 10 WORDS, XLINEPNT FOR 6 WORDS;%700- 20057000 P 0013
|
||
RESWORDOPTION := RESWORDOPTION AND TRUE; % RESET RESWORDPRESENT 20057100 C 0018
|
||
CHARCNT:=CARDLENGTH; 20058000 T 0019
|
||
MARGINCNT:=85; 20059000 T 0020
|
||
CARDCNT:=CARDCNT+1; 20060000 T 0021
|
||
END OF NEWCARD; %700- 20061000 P 0022
|
||
6 IS 27 LONG, NEXT SEG 2
|
||
20062000 T 0073
|
||
20063000 T 0073
|
||
DEFINE GEN(GEN1,GEN2,GEN3) = GENI(TRUE,GEN1,GEN3,GEN2) #, %700- 20063100 C 0073
|
||
GENID(GENID1,GENID2,GENID3)= GENI(FALSE,GENID1,GENID2,GENID3) #; %700- 20063200 C 0073
|
||
%700- 20063300 C 0073
|
||
PROCEDURE GENI(GENT, TXT, NUM, N ); %700- 20063400 C 0073
|
||
VALUE GENT, TXT, NUM, N; %700- 20063500 C 0073
|
||
BOOLEAN GENT; ALPHA TXT; INTEGER NUM, N; %700- 20063600 C 0073
|
||
BEGIN DEFINE START = NUM #, NDIG = N #; %700- 20063700 C 0073
|
||
START OF SEGMENT ********** 7
|
||
%700- 20063800 C 0000
|
||
IF GENT THEN %*** GENERATE A TEXT "TXT", CONSISTING OF 20064000 P 0000
|
||
BEGIN %*** "N" LETTERS, STARTING AT "START". 20065000 T 0000
|
||
IF ALGOLCNT<N THEN WRITEALGOL; 20066000 T 0000
|
||
TEXT[0] := TXT; %700- 20067000 P 0002
|
||
REPLACE ALGOLPNT:ALGOLPNT BY TEXTPNT0+START FOR N; 20068000 T 0003
|
||
ALGOLCNT:=ALGOLCNT-N; 20069000 T 0008
|
||
END %700- 20070000 P 0009
|
||
20071000 T 0009
|
||
20072000 T 0009
|
||
ELSE %*** GENERATE AN ALGOL IDENTIFIER. %700- 20073000 P 0009
|
||
BEGIN 20074000 T 0009
|
||
IF ALGOLCNT≤NDIG THEN WRITEALGOL; 20075000 T 0010
|
||
CH[0] := TXT; %700- 20076000 P 0012
|
||
REPLACE ALGOLPNT:ALGOLPNT BY CHARPNT FOR 1, NUM FOR NDIG DIGITS; 20077000 T 0013
|
||
ALGOLCNT:=ALGOLCNT-NDIG-1; 20078000 T 0020
|
||
END END GENI; %700- 20079000 P 0021
|
||
7 IS 22 LONG, NEXT SEG 2
|
||
20080000 T 0073
|
||
20081000 T 0073
|
||
PROCEDURE GENINT( N ); %700- 20082000 P 0073
|
||
VALUE N; INTEGER N; %700- 20083000 P 0073
|
||
BEGIN DEFINE RESULT = ALGOL CODE #; %700- 20084000 P 0073
|
||
START OF SEGMENT ********** 8
|
||
INTEGER NABS, NSIZE; %700- 20085000 P 0000
|
||
NABS:=ABS(N); IF N<0 THEN GEN("-",1,7); 20086000 T 0000
|
||
NSIZE:=IF NABS≤ 9 THEN 1 ELSE 20087000 T 0003
|
||
IF NABS≤ 999 THEN 3 ELSE 20088000 T 0005
|
||
IF NABS≤ 99999 THEN 5 ELSE 20089000 T 0007
|
||
IF NABS≤99999999 THEN 8 ELSE 12; 20090000 T 0009
|
||
IF ALGOLCNT<NSIZE THEN WRITEALGOL; 20091000 T 0012
|
||
IF NSIZE=12 THEN 20092000 T 0014
|
||
REPLACE ALGOLPNT:ALGOLPNT BY (NABS DIV 1000000) FOR 6 DIGITS, 20093000 T 0015
|
||
ENTIER(NABS MOD 1000000) FOR 6 DIGITS ELSE 20094000 T 0020
|
||
REPLACE ALGOLPNT:ALGOLPNT BY NABS FOR NSIZE DIGITS; 20095000 T 0025
|
||
ALGOLCNT:=ALGOLCNT-NSIZE; 20096000 T 0033
|
||
END OF GENINT; %700- 20097000 P 0034
|
||
8 IS 38 LONG, NEXT SEG 2
|
||
20098000 T 0073
|
||
20099000 T 0073
|
||
PROCEDURE GENREAL(X); 20100000 T 0073
|
||
VALUE X; REAL X; 20101000 T 0073
|
||
BEGIN 20102000 T 0073
|
||
REAL ABSX; 20103000 T 0073
|
||
START OF SEGMENT ********** 9
|
||
INTEGER POWER,V1,V2; 20104000 T 0000
|
||
20105000 T 0000
|
||
IF X.[46:5]=0 THEN 20106000 T 0000
|
||
BEGIN 20107000 T 0001
|
||
IF ALGOLCNT<9 THEN WRITEALGOL; 20108000 T 0001
|
||
TEXT[0]:=X; 20109000 T 0003
|
||
REPLACE ALGOLPNT:ALGOLPNT BY """, TEXTPNT FOR 7, """; 20110000 T 0004
|
||
ALGOLCNT:=ALGOLCNT-9; 20111000 T 0013
|
||
END ELSE 20112000 T 0015
|
||
BEGIN 20113000 T 0015
|
||
IF ALGOLCNT<22 THEN WRITEALGOL; 20114000 T 0015
|
||
IF X<0 THEN GEN("(-",2,6); 20115000 T 0017
|
||
ABSX:=ABS(X); 20116000 T 0020
|
||
IF ABSX> 0 THEN 20117000 T 0021
|
||
BEGIN 20118000 T 0021
|
||
WHILE ABSX≥1@7 DO BEGIN ABSX:=ABSX/10; POWER:=POWER+1; END; 20119000 T 0022
|
||
WHILE ABSX<1@6 DO BEGIN ABSX:=ABSX×10; POWER:=POWER-1; END; 20120000 T 0030
|
||
V1:=ENTIER(ABSX); 20121000 T 0036
|
||
V2:=ENTIER((ABSX-V1)×1000000); 20122000 T 0037
|
||
REPLACE ALGOLPNT:ALGOLPNT BY V1 FOR 7 DIGITS, ".", 20123000 T 0040
|
||
V2 FOR 6 DIGITS, "@"; 20124000 T 0047
|
||
ALGOLCNT:=ALGOLCNT-15; 20125000 T 0053
|
||
IF POWER<0 THEN GEN("-",1,7); 20126000 T 0054
|
||
POWER:=ABS(POWER); 20127000 T 0057
|
||
REPLACE ALGOLPNT:ALGOLPNT BY POWER FOR 2 DIGITS; 20128000 T 0058
|
||
ALGOLCNT:=ALGOLCNT-2; 20129000 T 0062
|
||
END ELSE GEN("0",1,7); 20130000 T 0063
|
||
IF X<0 THEN GEN(")",1,7); 20131000 T 0067
|
||
END; 20132000 T 0070
|
||
END OF GENREAL; 20133000 T 0070
|
||
9 IS 74 LONG, NEXT SEG 2
|
||
20134000 T 0073
|
||
20135000 T 0073
|
||
INTEGER TYPEINDEX; 20136000 T 0073
|
||
20137000 T 0073
|
||
DEFINE NEWTYPE= 20138000 T 0073
|
||
BEGIN 20139000 T 0073
|
||
IF NUMTYPES≥MAXTYPES THEN BEGIN ERROR(45);NUMTYPES:=MAXTYPES-20 END; 20140000 T 0073
|
||
TYPEINDEX:=NUMTYPES:=NUMTYPES+1; 20141000 T 0073
|
||
END #; 20142000 T 0073
|
||
20143000 T 0073
|
||
20144000 T 0073
|
||
PROCEDURE WRITEALGOL; %*** WRITES A COMPLETED ALGOL CARD TO%700- 20145000 P 0073
|
||
BEGIN %*** THE FILE. 20146000 T 0073
|
||
DEFINE NEWSEGMENT = HERE #; %700- 20146100 C 0073
|
||
START OF SEGMENT ********** 10
|
||
REPLACE POINTER(ALGOLCARD[9]) BY CARDCNT FOR 8 DIGITS; 20147000 T 0000
|
||
WRITE(PASCALGOL,10,ALGOLCARD[*]); 20148000 T 0005
|
||
IF DUMPOPTION THEN BEGIN IF (LINECNT:=LINECNT+1)≥LINESPERPAGE %502- 20149000 P 0010
|
||
THEN HEADING; WRITE(LINE,10,ALGOLCARD[*]) END; %502- 20149100 C 0012
|
||
ALGOLPNT:=POINTER(ALGOLCARD[*]); ALGOLCNT:=71; 20150000 T 0017
|
||
REPLACE ALGOLPNT BY " " FOR 9 WORDS; 20151000 T 0020
|
||
END OF WRITEALGOL; 20152000 T 0023
|
||
10 IS 24 LONG, NEXT SEG 2
|
||
20153000 T 0073
|
||
20154000 T 0073
|
||
DEFINE MARGIN(LETTER,NUM)= 20155000 T 0073
|
||
BEGIN COMMENT *** PLACES INFORMATION IN THE MARGIN. ; 20156000 T 0073
|
||
IF MARGINCNT≤118 THEN 20157000 T 0073
|
||
BEGIN TEXT[0]:=LETTER; 20158000 T 0073
|
||
REPLACE LINEPNT+MARGINCNT BY TEXTPNT+5 FOR 2, 20159000 T 0073
|
||
NUM FOR NDIGITS(NUM); 20160000 T 0073
|
||
MARGINCNT:=MARGINCNT+6; 20161000 T 0073
|
||
END; 20162000 T 0073
|
||
END OF MARGIN#; 20163000 T 0073
|
||
20164000 T 0073
|
||
20165000 T 0073
|
||
PROCEDURE SKIP(SYMBOL); %*** SKIP SYMBOLS TO RECOVER FROM ERROR 20166000 T 0073
|
||
VALUE SYMBOL; INTEGER SYMBOL; %*** CONDITION. 20167000 T 0073
|
||
BEGIN 20168000 T 0073
|
||
DEFINE NEWSEGMENT = HERE #; %700- 20168100 C 0073
|
||
START OF SEGMENT ********** 11
|
||
WHILE CURSY≠SYMBOL AND SYMKIND[CURSY]=MIDDLE DO 20169000 T 0000
|
||
IF CURSY=RECORDSY THEN 20170000 T 0002
|
||
BEGIN DO BEGIN INSYMBOL; 20171000 T 0003
|
||
SKIP(99); 20172000 T 0004
|
||
END UNTIL CURSY≠SEMICOLON AND CURSY≠CASESY; 20173000 T 0005
|
||
END ELSE INSYMBOL; 20174000 T 0007
|
||
END OF SKIP; 20175000 T 0009
|
||
11 IS 10 LONG, NEXT SEG 2
|
||
20176000 T 0073
|
||
20177000 T 0073
|
||
PROCEDURE ERROR(ERRNUM); 20178000 T 0073
|
||
VALUE ERRNUM; INTEGER ERRNUM; 20179000 T 0073
|
||
BEGIN COMMENT *** ARRANGE ERROR INDICATOR. ; 20180000 T 0073
|
||
DEFINE NEWSEGMENT = HERE #; %700- 20180100 C 0073
|
||
START OF SEGMENT ********** 12
|
||
IF ERRNUM<0 THEN ERRNUM:=ABS(ERRNUM) ELSE %511- 20180900 C 0000
|
||
NUMERRS:=NUMERRS+1; 20181000 T 0002
|
||
% %002- 20181500 C 0004
|
||
% %002- 20181550 C 0004
|
||
IF ERRNUM=100 OR ERRNUM=102 %713- 20181600 C 0004
|
||
THEN NUMERRS := NUMERRS - 1; %*ERROR NUMBER 102 IS ONLY AN ILLEGAL 20181610 C 0005
|
||
% * DOLLAR OPTION WARNING & %713- 20181620 C 0007
|
||
% *ERROR NUMBER 100 ALONE SHOULD NOT %713- 20181650 C 0007
|
||
% * PREVENT THE XALGOL COMPILATION BEING 20181700 C 0007
|
||
% * ZIPPED AS THE VALUE 7 IS SUBSTITUTED 20181750 C 0007
|
||
% * FOR A BAD SAVE CONSTANT IN AN "S"%002- 20181800 C 0007
|
||
% * OPTION. %002- 20181850 C 0007
|
||
% %002- 20181900 C 0007
|
||
% %002- 20181950 C 0007
|
||
ERRP[ERRNUM.[6:2]]:=ERRP[ERRNUM.[6:2]] & 1[ERRNUM.[4:5]:0:1]; %702- 20182000 P 0007
|
||
ERRINX:=MAX(ERRINX,CARDLENGTH-2-CHARCNT); 20183000 T 0013
|
||
IF ERRINX≤115 THEN 20184000 T 0017
|
||
BEGIN REPLACE POINTER(ERRLINE[1])+ERRINX BY "×", 20185000 T 0017
|
||
ERRNUM FOR NDIGITS(ERRNUM); 20186000 T 0026
|
||
ERRINX:=ERRINX+(IF ERRNUM≤ 9 THEN 2 ELSE 20187000 T 0032
|
||
IF ERRNUM≤99 THEN 3 ELSE 4); 20188000 T 0035
|
||
END END OF ERROR; 20189000 T 0038
|
||
12 IS 39 LONG, NEXT SEG 2
|
||
20190000 T 0073
|
||
20191000 T 0073
|
||
PROCEDURE PRINTERRORS; 20192000 T 0073
|
||
BEGIN COMMENT *** PRINT ERROR INDICATORS. ; 20193000 T 0073
|
||
DEFINE NEWSEGMENT = HERE #; %700- 20193100 C 0073
|
||
START OF SEGMENT ********** 13
|
||
IF NOT LISTOPTION THEN %709- 20194000 P 0000
|
||
BEGIN IF PAGECNT=0 THEN HEADING; PRINTLINE END; %709- 20194100 C 0000
|
||
REPLACE POINTER(ERRLINE[0])+4 BY NUMERRS FOR 4 DIGITS; %702- 20194900 C 0003
|
||
WRITE(LINE, 17,ERRLINE[*]); %708- 20195000 P 0011
|
||
LINECNT:=LINECNT+1; 20196000 T 0015
|
||
REPLACE POINTER(ERRLINE[1]) BY " " FOR 16 WORDS; 20197000 T 0016
|
||
ERRINX:=0; 20198000 T 0022
|
||
END OF PRINT ERRORS; 20199000 T 0023
|
||
13 IS 24 LONG, NEXT SEG 2
|
||
20200000 T 0073
|
||
20201000 T 0073
|
||
DEFINE HASH(HASH1) = ENTIER((HASH1) MOD MAXNAMES) #; %505- 20202000 P 0073
|
||
20203000 T 0073
|
||
INTEGER THISLEVEL,THISTAB,THISINDEX; 20204000 T 0073
|
||
ALPHA THISID, CURNAME1, CURNAME2; % USED IN SCANNER %700- 20205000 P 0073
|
||
BOOLEAN FOUND; 20206000 T 0073
|
||
20207000 T 0073
|
||
PROCEDURE SEARCHTAB( TAB ); %*** SEARCH NAME TABLE "TAB" FOR THE %700- 20208000 P 0073
|
||
VALUE TAB; INTEGER TAB; %*** IDENTIFIER JUST READ. %700- 20208100 C 0073
|
||
BEGIN ALPHA TNAME; INTEGER WRAPAROUND; %505- 20209000 P 0073
|
||
START OF SEGMENT ********** 14
|
||
WRAPAROUND:=THISINDEX:=HASH(CURNAME1); %505- 20210000 P 0000
|
||
TNAME:=NAMETAB1[TAB,THISINDEX]; 20211000 T 0002
|
||
WHILE (IF TNAME=CURNAME1 THEN NAMETAB2[TAB,THISINDEX]≠CURNAME2 20212000 T 0004
|
||
ELSE TNAME≠0) DO 20213000 T 0007
|
||
BEGIN 20214000 T 0009
|
||
THISINDEX:=IF THISINDEX=0 THEN MAXNAMES ELSE THISINDEX-1; 20215000 T 0009
|
||
TNAME:=NAMETAB1[TAB,THISINDEX]; 20216000 T 0013
|
||
IF THISINDEX=WRAPAROUND THEN TNAME:=0; % TABLE IS FULL %505- 20216100 C 0014
|
||
END; 20217000 T 0016
|
||
FOUND:=TNAME≠0; 20218000 T 0019
|
||
IF XREFOPTION THEN 20219000 T 0020
|
||
IF FOUND THEN NEWXREF(CURNAME1,CURNAME2,TAB,FALSE); % 20220000 T 0020
|
||
END OF SEARCHTAB; %700- 20221000 P 0023
|
||
14 IS 27 LONG, NEXT SEG 2
|
||
20222000 T 0073
|
||
PROCEDURE SEARCHDISKDIRECTORY( F, A ); FILE F; ARRAY A[0]; %711- 20222100 C 0073
|
||
SEARCH( F, A[*] ); % END OF SEARCHDISKDIRECTORY; %711- 20222200 C 0073
|
||
%711- 20222300 C 0075
|
||
PROCEDURE SEARCH; %*** SEARCH ALL TABLES CURRENTLY IN USE. 20223000 P 0075
|
||
BEGIN DEFINE RESULT = THISID #; %700- 20224000 P 0075
|
||
START OF SEGMENT ********** 15
|
||
THISLEVEL:=TOPLEVEL+1; 20225000 T 0000
|
||
DO BEGIN 20226000 T 0001
|
||
THISLEVEL:=THISLEVEL-1; 20227000 T 0002
|
||
THISTAB:=IF THISLEVEL≤CURLEVEL THEN THISLEVEL 20228000 T 0003
|
||
ELSE DISPLAY[THISLEVEL].NAMETAB; 20229000 T 0004
|
||
SEARCHTAB(THISTAB); 20230000 T 0006
|
||
END UNTIL FOUND OR THISLEVEL=0; 20231000 T 0007
|
||
THISID:=NAMETAB3[THISTAB,THISINDEX]; 20232000 T 0009
|
||
END OF SEARCH; %700- 20233000 P 0011
|
||
15 IS 12 LONG, NEXT SEG 2
|
||
20234000 T 0075
|
||
20235000 T 0075
|
||
PROCEDURE NEWNAME( NAME1,NAME2, TAB ); %700- 20236000 P 0075
|
||
VALUE NAME1, NAME2, TAB; %700- 20236100 C 0075
|
||
ALPHA NAME1, NAME2; INTEGER TAB; %700- 20236200 C 0075
|
||
BEGIN %*** ENTER A NEW NAME INTO THE NAME TABLE "TAB". 20237000 T 0075
|
||
ALPHA TNAME; INTEGER WRAPAROUND; %505- 20237100 C 0075
|
||
START OF SEGMENT ********** 16
|
||
WRAPAROUND:=THISINDEX:=HASH(NAME1); %505- 20238000 P 0000
|
||
TNAME:=NAMETAB1[TAB,THISINDEX]; 20239000 T 0002
|
||
WHILE(IF TNAME=NAME1 THEN NAMETAB2[TAB,THISINDEX]≠NAME2 20240000 T 0004
|
||
ELSE TNAME≠0) DO 20241000 T 0007
|
||
BEGIN 20242000 T 0009
|
||
THISINDEX:=IF THISINDEX=0 THEN MAXNAMES ELSE THISINDEX-1; 20243000 T 0009
|
||
TNAME:=NAMETAB1[TAB,THISINDEX]; 20244000 T 0013
|
||
IF THISINDEX=WRAPAROUND THEN % TABLE AT THIS LEVEL IS FULL 20244100 C 0014
|
||
BEGIN ERROR(40); NAME1:=TNAME; NAME2:=NAMETAB2[TAB,THISINDEX] 20244200 C 0015
|
||
END; %505- 20244300 C 0018
|
||
END; 20245000 T 0019
|
||
IF TNAME≠0 THEN ERROR(2); 20246000 T 0021
|
||
NAMETAB1[TAB,THISINDEX]:=NAME1; 20247000 T 0023
|
||
NAMETAB2[TAB,THISINDEX]:=NAME2; 20248000 T 0025
|
||
IF XREFOPTION THEN NEWXREF(NAME1,NAME2,TAB,TRUE); 20249000 T 0027
|
||
END OF NEWNAME; %700- 20250000 P 0029
|
||
16 IS 33 LONG, NEXT SEG 2
|
||
20251000 T 0075
|
||
|
||
|
||
|
||
|
||
|
||
|
||
20300000 T 0075
|
||
PROCEDURE INITIALIZE; %*** INITIALIZATION *** 20301000 T 0075
|
||
BEGIN %********************** 20302000 T 0075
|
||
INTEGER T1,T3; 20303000 T 0075
|
||
START OF SEGMENT ********** 17
|
||
ALPHA A; 20304000 T 0000
|
||
FILL SYMKIND[*] WITH 28(MIDDLE),TERMINAL,4(MIDDLE),INITIAL,TERMINAL, 20305000 T 0000
|
||
START OF SEGMENT ********** 18
|
||
INITIAL,MIDDLE,TERMINAL,INITIAL,MIDDLE,INITIAL,TERMINAL,INITIAL, 20306000 T 0001
|
||
MIDDLE,INITIAL,2(MIDDLE),INITIAL,MIDDLE,INITIAL,4(MIDDLE), 20307000 T 0001
|
||
7(INITIAL),MIDDLE,INITIAL; %002- 20308000 P 0001
|
||
18 IS 63 LONG, NEXT SEG 17
|
||
20309000 T 0001
|
||
FILL SYMBOL[*] WITH 10(0),0,ARROW,0,COLON,GTRSY,GEQSY,PLUS,9(0), 20310000 T 0001
|
||
START OF SEGMENT ********** 19
|
||
DOT,LBRACKET,ANDSY,LPAR,LSSSY,ARROW,0,9(0),0,ASTERISK,MINUS, 20311000 T 0003
|
||
RPAR,SEMICOLON,LEQSY,0,SLASH,8(0),COMMA,0,NEQSY,EQLSY,RBRACKET, 20312000 T 0003
|
||
0,DOUBLEDOT; 20313000 T 0003
|
||
19 IS 65 LONG, NEXT SEG 17
|
||
20314000 T 0003
|
||
LINEPNT :=POINTER(LINES[1]); %708- 20315000 P 0003
|
||
XLINEPNT:=POINTER(XLINE[1]); 20316000 T 0006
|
||
REPLACE LINEPNT-8 BY " " FOR 17 WORDS; %708- 20317000 P 0009
|
||
REPLACE XLINEPNT-8 BY LINEPNT-8 FOR 17 WORDS; %708- 20318000 P 0015
|
||
REPLACE POINTER(ERRLINE[*]) BY "**** ", LINEPNT FOR 16 WORDS; 20319000 P 0021
|
||
ALGOLPNT:=POINTER(ALGOLCARD[*]); ALGOLCNT:=71; 20320000 T 0028
|
||
REPLACE ALGOLPNT BY LINEPNT FOR 9 WORDS; %708- 20321000 P 0030
|
||
CHARPNT := POINTER(CH[0])+7; CH[0] := " "; %711- 20322000 P 0033
|
||
TEXTPNT:=POINTER(TEXT[*])+1; TEXTPNT0:=TEXTPNT-1; 20323000 T 0039
|
||
REPLACE TEXTPNT BY " " FOR 15; 20324000 T 0046
|
||
STRINGPNT:=POINTER(STRING[*]); 20325000 T 0049
|
||
REPLACE POINTER(HEADTEXT[*]) BY LINEPNT FOR 10 WORDS, "PAGE 1 ", 20326000 P 0051
|
||
LINEPNT FOR 6 WORDS; %708- 20326100 C 0059
|
||
REPLACE POINTER(HEADTEXT[*]) BY "PASCAL(", EDITION, ")/B-5700"; 20327000 T 0061
|
||
TEXT[0]:=TIME(5); 20328000 T 0072
|
||
REPLACE POINTER(HEADTEXT[*])+45 BY TEXTPNT+5 FOR 2,"/", %709- 20329000 P 0073
|
||
TEXTPNT+1 FOR 2, "/", TEXTPNT+3 FOR 2; %709- 20330000 P 0084
|
||
T1:=TIME(1)/3600; 20331000 T 0095
|
||
REPLACE POINTER(HEADTEXT[*])+57 BY (T1 DIV 60) FOR 2 DIGITS, ":", 20332000 T 0097
|
||
ENTIER(T1 MOD 60) FOR 2 DIGITS; 20333000 T 0107
|
||
HEADING; 20334000 T 0111
|
||
20335000 T 0112
|
||
%*** INITIALIZE INTRINSIC TYPES, CONSTANTS ETC. *** 20336000 T 0112
|
||
20337000 T 0112
|
||
INTTYPE:=T3:=1; %*** "INTEGER" *** 20338000 T 0112
|
||
T1:=NUMERIC; T1.SIZE:=1; T1.STRUCT:=0; 20339000 T 0113
|
||
TYPETAB1[1]:=T1; TYPETAB2[1]:=-MAXINT; TYPETAB3[1]:=MAXINT; 20340000 T 0117
|
||
NEWNAME("7INTEGE","R",0); T3.IDCLASS:=TYPES; 20341000 T 0121
|
||
NAMETAB3[0,THISINDEX]:=T3; 20342000 T 0124
|
||
REALTYPE:=T3:=2; %*** "REAL" *** 20343000 T 0126
|
||
T1.FORM:=FLOATING; TYPETAB1[2]:=T1; 20344000 T 0128
|
||
NEWNAME("400REAL",0,0); T3.IDCLASS:=TYPES; 20345000 T 0131
|
||
NAMETAB3[0,THISINDEX]:=T3; 20346000 T 0134
|
||
ALFATYPE:=T3:=3; %*** "ALFA" *** 20347000 T 0136
|
||
T1.FORM:=ALFA; TYPETAB1[3]:=T1; 20348000 T 0137
|
||
NEWNAME("400ALFA",0,0); T3.IDCLASS:=TYPES; 20349000 T 0140
|
||
NAMETAB3[0,THISINDEX]:=T3; 20350000 T 0143
|
||
BOOLTYPE:=T3:=4; %*** "BOOLEAN" *** 20351000 T 0145
|
||
T1.FORM:=SYMBOLIC; TYPETAB1[4]:=T1; TYPETAB3[4]:=1; 20352000 T 0146
|
||
NEWNAME("7BOOLEA","N",0); T3.IDCLASS:=TYPES; 20353000 T 0150
|
||
NAMETAB3[0,THISINDEX]:=T3; 20354000 T 0153
|
||
CHARTYPE:=T3:=5; %*** "CHAR" *** 20355000 T 0155
|
||
T1.FORM:=CHAR; TYPETAB1[5]:=T1; TYPETAB3[5]:=63; 20356000 T 0157
|
||
NEWNAME("400CHAR",0,0); T3.IDCLASS:=TYPES; 20357000 T 0161
|
||
NAMETAB3[0,THISINDEX]:=T3; 20358000 T 0164
|
||
T3:=BOOLTYPE; T3.IDCLASS:=CONST; %*** "FALSE" *** 20359000 T 0177
|
||
NEWNAME("50FALSE",0,0); NAMETAB3[0,THISINDEX]:=T3; 20360000 T 0179
|
||
T3.INFO:=1; %*** "TRUE" *** 20361000 T 0182
|
||
NEWNAME("400TRUE",0,0); NAMETAB3[0,THISINDEX]:=T3; 20362000 T 0184
|
||
NILTYPE := 6; %*** TYPE OF "NIL" *** %602- 20363000 P 0187
|
||
T1.FORM := POINTERS; TYPETAB1[6] := T1; %602- 20364000 P 0188
|
||
EMPTYSET := 7; % %602- 20364500 C 0191
|
||
T1.FORM := SET; TYPETAB1[7] := T1; %602- 20365000 P 0192
|
||
NUMTYPES := 7; % %602- 20365500 C 0195
|
||
NEWNAME("6MAXINT",0,0); T3:=INTTYPE; %*** "MAXINT" *** 20366000 T 0196
|
||
T3.IDCLASS:=CONST; T3.INFO:=1024; 20367000 T 0198
|
||
NAMETAB3[0,THISINDEX]:=T3; 20368000 T 0201
|
||
NUMCONSTS:=1; CONSTTAB[1]:=MAXINT; 20369000 T 0203
|
||
NEWNAME("50PRT25",0,0); %*** "PRT25" *** %501- 20369100 C 0205
|
||
T3:=INTTYPE; T3.IDCLASS:=VAR; % GLOBAL INTEGER VARIABLE %501- 20369200 C 0206
|
||
NAMETAB3[0,THISINDEX] := T3; %501- 20369300 C 0209
|
||
20370000 T 0211
|
||
T3:=0; T3.IDCLASS:=PROC; %*** PROCEDURES *** 20371000 T 0211
|
||
FOR A:="3000GET", "3000NEW", "400PACK", "400PAGE", "3000PUT", 20372000 T 0213
|
||
"400READ", "6READLN", "50RESET", "6UNPACK", "50WRITE", %002- 20373000 P 0223
|
||
"6QQJZXL" DO %002- 20373500 C 0233
|
||
BEGIN 20374000 T 0236
|
||
NEWNAME(A,0,0); NAMETAB3[0,THISINDEX]:=T3; 20375000 T 0236
|
||
END; 20376000 T 0239
|
||
NEWNAME("7DISPOS","E",0); NAMETAB3[0,THISINDEX]:=T3; 20377000 T 0257
|
||
NEWNAME("7REWRIT","E",0); NAMETAB3[0,THISINDEX]:=T3; 20378000 T 0260
|
||
NEWNAME("7WRITEL","N",0); NAMETAB3[0,THISINDEX]:=T3; 20379000 T 0263
|
||
20380000 T 0266
|
||
T3.IDCLASS:=FUNC; %*** FUNCTIONS *** 20381000 T 0266
|
||
FOR A:="3000ABS", "6ARCTAN", "3000CHR", "3000COS", "3000EOF", 20382000 T 0268
|
||
"400EOLN", "3000EXP", "20000LN", "3000ODD", "400PRED", 20383000 T 0278
|
||
"400SUCC", "50ROUND", "3000SIN", "3000SQR", "400SQRT", 20384000 T 0288
|
||
"50TRUNC", "6CONCAT", "400TIME", "400DATE", "6IOTIME", 20385000 T 0298
|
||
"400USER", "3000ORD" 20386000 T 0308
|
||
DO BEGIN 20387000 T 0311
|
||
NEWNAME(A,0,0); NAMETAB3[0,THISINDEX]:=T3; 20388000 T 0313
|
||
END; 20389000 T 0316
|
||
NEWNAME("7CPUTIM","E",0); NAMETAB3[0,THISINDEX]:=T3; %514- 20390000 P 0342
|
||
NEWNAME("7WEEKDA","Y",0); NAMETAB3[0,THISINDEX]:=T3; 20391000 T 0345
|
||
20392000 T 0348
|
||
TEXTTYPE:=T3:=NUMTYPES:=NUMTYPES+1; %*** "TEXT" *** 20393000 T 0348
|
||
T1 := TEXTFILE; T1.STRUCT := 1; TYPETAB1[TEXTTYPE] := T1; % 20394000 T 0350
|
||
T3.IDCLASS := TYPES; % 20395000 T 0354
|
||
NEWNAME("400TEXT",0,0); NAMETAB3[0,THISINDEX]:=T3; 20396000 T 0356
|
||
T3:=TEXTTYPE; T3.IDCLASS:=VAR; %*** "INPUT" *** 20397000 T 0359
|
||
T3.EXTERNALFILE:=1; 20398000 T 0362
|
||
NEWNAME("50INPUT",0,0); INPUTFILE:=THISINDEX; 20399000 T 0363
|
||
NAMETAB3[0,THISINDEX]:=T3; 20400000 T 0365
|
||
NEWNAME("6OUTPUT",0,0); %*** "OUTPUT" *** 20401000 T 0367
|
||
NAMETAB3[0,THISINDEX]:=T3; OUTPUTFILE:=THISINDEX; 20402000 T 0369
|
||
NEWCARD; LISTOPTION:=CHECKOPTION:=TRUE; % DEFAULT %709- 20402100 C 0371
|
||
INSYMBOL; % ANALYSING FIRST CARD MAY CHANGE DEFAULT LIST OPTN 20402200 C 0373
|
||
IF LISTOPTION AND PAGECNT=0 THEN HEADING; % ON FIRST PAGE. %709- 20402300 C 0374
|
||
END OF INTIALIZED; 20403000 T 0376
|
||
17 IS 385 LONG, NEXT SEG 2
|
||
20404000 T 0075
|
||
20500000 T 0075
|
||
20501000 T 0075
|
||
%*** XREF ROUTINES *** 20502000 T 0075
|
||
%********************** 20503000 T 0075
|
||
20504000 T 0075
|
||
DEFINE XREFCARD=[16:17]#, 20505000 T 0075
|
||
XREFBLOCK=[26:10]#; 20506000 T 0075
|
||
REAL A0,B0,A1,B1,LASTA0,LASTA1; 20507000 T 0075
|
||
INTEGER NL,LASTBLOCK,A2,AX; 20508000 T 0075
|
||
20509000 T 0075
|
||
PROCEDURE NEWXREF(NAME1,NAME2,TABLE,DECL); 20510000 T 0075
|
||
VALUE NAME1,NAME2,TABLE,DECL; 20511000 T 0075
|
||
REAL NAME1,NAME2; 20512000 T 0075
|
||
INTEGER TABLE; 20513000 T 0075
|
||
BOOLEAN DECL; 20514000 T 0075
|
||
BEGIN 20515000 T 0075
|
||
DEFINE NEWSEGMENT = HERE #; %700- 20515100 C 0075
|
||
START OF SEGMENT ********** 20
|
||
NL:=NAME1.NAMELENGTH; 20516000 T 0000
|
||
IF NL<7 THEN NAME1:=0&NAME1[41:41:6]&NAME1[35:6×NL-1:6×NL] 20517000 T 0001
|
||
ELSE NAME2:=0&NAME2[35:6×(NL-6)-1:6×(NL-6)]; 20518000 T 0008
|
||
AX:=CARDCNT; AX.XREFBLOCK:=BLOCKTAB[TABLE]; 20519000 T 0015
|
||
IF DECL THEN AX := -AX; %002- 20520000 P 0017
|
||
WRITE(XREFFILE,*,NAME1,NAME2,AX); 20521000 T 0019
|
||
END OF NEWXREF; 20522000 T 0030
|
||
20 IS 31 LONG, NEXT SEG 2
|
||
20523000 T 0075
|
||
PROCEDURE XREFMAX(A); 20524000 T 0075
|
||
ARRAY A[0]; 20525000 T 0075
|
||
BEGIN 20526000 T 0075
|
||
A[0]:="AZZZZZZ"; A[1]:="ZZZZZZ"; A[2]:=9999999999; 20527000 T 0075
|
||
END OF XREFMAX; 20528000 T 0078
|
||
20529000 T 0082
|
||
20530000 T 0082
|
||
BOOLEAN PROCEDURE XREFCOMPARE(A,B); 20531000 T 0082
|
||
ARRAY A,B[0]; 20532000 T 0082
|
||
BEGIN 20533000 T 0082
|
||
DEFINE NEWSEGMENT = HERE #; %700- 20533100 C 0082
|
||
START OF SEGMENT ********** 21
|
||
A0:=A[0]; B0:=B[0]; A1:=A[1]; B1:=B[1]; 20534000 T 0000
|
||
XREFCOMPARE:= 20535000 T 0004
|
||
IF A0.[35:36]≠B0.[35:36] THEN A0.[35:36]<B0.[35:36] ELSE 20536000 T 0004
|
||
IF A1≠B1 THEN A1<B1 ELSE 20537000 T 0008
|
||
IF A0≠B0 THEN A0.NAMELENGTH<B0.NAMELENGTH ELSE 20538000 T 0011
|
||
ABS(A[2]) LEQ ABS(B[2]); %002- 20539000 P 0014
|
||
END OF XREFCOMPARE; 20540000 T 0016
|
||
21 IS 20 LONG, NEXT SEG 2
|
||
20541000 T 0082
|
||
% %002- 20541100 C 0082
|
||
% %002- 20541150 C 0082
|
||
% %002- 20541200 C 0082
|
||
BOOLEAN PROCEDURE XREFINPUT(A); %002- 20541250 C 0082
|
||
ARRAY A[0]; %002- 20541300 C 0082
|
||
BEGIN %002- 20541350 C 0082
|
||
LABEL EOF; %002- 20541400 C 0082
|
||
START OF SEGMENT ********** 22
|
||
INTEGER I; %002- 20541450 C 0000
|
||
% %002- 20541500 C 0000
|
||
READ(XREFFILE,3,XBUFF[*])[EOF]; %002- 20541550 C 0000
|
||
FOR I:=0,1,2 DO %002- 20541600 C 0005
|
||
A[I] := XBUFF[I]; %002- 20541650 C 0011
|
||
IF FALSE THEN EOF: BEGIN %002- 20541700 C 0013
|
||
CLOSE(XREFFILE,RELEASE); %002- 20541750 C 0015
|
||
XINB := TRUE; %002- 20541800 C 0016
|
||
END; %002- 20541850 C 0017
|
||
XREFINPUT := XINB; %002- 20541900 C 0017
|
||
% %002- 20541950 C 0018
|
||
END OF XREFINPUT; %002- 20541960 C 0018
|
||
22 IS 24 LONG, NEXT SEG 2
|
||
20542000 T 0082
|
||
PROCEDURE PRINTXREF(FINIS,A); 20543000 T 0082
|
||
VALUE FINIS; BOOLEAN FINIS; 20544000 T 0082
|
||
ARRAY A[0]; 20545000 T 0082
|
||
BEGIN 20546000 T 0082
|
||
DEFINE NEWSEGMENT = HERE #; %700- 20546100 C 0082
|
||
START OF SEGMENT ********** 23
|
||
IF FINIS THEN 20547000 T 0000
|
||
BEGIN 20548000 T 0000
|
||
WRITE(LINE, 17,XREFLINE[*]); %708- 20549000 P 0000
|
||
LOCK( LINE, * ); % & CRUNCH %708- 20550000 P 0005
|
||
CLOSE(XREFFILE); 20551000 T 0006
|
||
END 20552000 T 0008
|
||
ELSE 20553000 T 0008
|
||
BEGIN 20554000 T 0008
|
||
A0:=A[0]; A1:=A[1]; A2:=A[2]; 20555000 T 0009
|
||
IF A0=LASTA0 AND A1=LASTA1 AND A2.XREFBLOCK=LASTBLOCK THEN 20556000 T 0012
|
||
BEGIN 20557000 T 0015
|
||
IF NUMXREF=15 THEN 20558000 T 0015
|
||
BEGIN 20559000 T 0016
|
||
WRITE(LINE, 17,XREFLINE[*]); LINECNT:=LINECNT+1; %708- 20560000 P 0017
|
||
IF LINECNT>LINESPERPAGE THEN HEADING; 20561000 T 0022
|
||
XREFPNT:=POINTER(XREFLINE[*]); NUMXREF:=0; 20562000 T 0024
|
||
REPLACE XREFPNT BY " " FOR 17 WORDS; XREFPNT:=XREFPNT+24; 20563000 T 0026
|
||
END; 20564000 T 0032
|
||
REPLACE XREFPNT BY A2.XREFCARD FOR 5 DIGITS; 20565000 T 0032
|
||
XREFPNT:=XREFPNT+7; NUMXREF:=NUMXREF+1; 20566000 T 0036
|
||
END ELSE 20567000 T 0040
|
||
IF A2<0 THEN 20568000 T 0040
|
||
BEGIN 20569000 T 0042
|
||
A2 := -A2; %002- 20570000 P 0042
|
||
WRITE(LINE, 17,XREFLINE[*]); LINECNT:=LINECNT+1; %708- 20571000 P 0043
|
||
IF LINECNT>LINESPERPAGE THEN HEADING; 20572000 T 0049
|
||
XREFPNT:=POINTER(XREFLINE[*]); NUMXREF:=0; 20573000 T 0050
|
||
REPLACE XREFPNT BY " " FOR 17 WORDS; 20574000 T 0053
|
||
TEXT[0]:=A0.[35:36]; LASTA0:=A0; 20575000 T 0056
|
||
REPLACE XREFPNT BY TEXTPNT+1 FOR A0.NAMELENGTH; 20576000 T 0059
|
||
TEXT[0]:=LASTA1:=A1; 20577000 T 0064
|
||
IF A0.NAMELENGTH>6 THEN 20578000 T 0066
|
||
REPLACE XREFPNT+6 BY TEXTPNT+1 FOR A0.NAMELENGTH-6; 20579000 T 0067
|
||
REPLACE XREFPNT+17 BY A2.XREFCARD FOR 5 DIGITS; 20580000 T 0075
|
||
XREFPNT:=XREFPNT+24; LASTBLOCK:=A2.XREFBLOCK; 20581000 T 0081
|
||
END; 20582000 T 0085
|
||
END; 20583000 T 0085
|
||
END OF PRINTXREF; 20584000 T 0085
|
||
23 IS 86 LONG, NEXT SEG 2
|
||
20585000 T 0082
|
||
20800000 T 0082
|
||
20801000 T 0082
|
||
PROCEDURE CHECKTYPES( LEFTTYPE, RIGHTTYPE ); %700- 20802000 P 0082
|
||
VALUE LEFTTYPE, RIGHTTYPE; INTEGER LEFTTYPE, RIGHTTYPE; %700- 20803000 P 0082
|
||
BEGIN %700- 20804000 P 0082
|
||
REAL TT1, TT2; INTEGER F1, F2, LT, RT; %700- 20805000 P 0082
|
||
START OF SEGMENT ********** 24
|
||
IF LEFTTYPE>0 AND RIGHTTYPE>0 THEN 20806000 T 0000
|
||
IF LEFTTYPE≠RIGHTTYPE THEN 20807000 T 0001
|
||
BEGIN 20808000 T 0003
|
||
LT:=LEFTTYPE; RT:=RIGHTTYPE; 20809000 T 0003
|
||
TT1:=TYPETAB1[LT]; TT2:=TYPETAB1[RT]; 20810000 T 0005
|
||
F1:=TT1.FORM; F2:=TT2.FORM; 20811000 T 0007
|
||
IF LT≠REALTYPE OR F2≠NUMERIC THEN 20812000 T 0009
|
||
IF(F1 NEQ SET OR RT NEQ EMPTYSET) % %600- 20813000 P 0011
|
||
AND % %600- 20813050 C 0013
|
||
(F2 NEQ SET OR LT NEQ EMPTYSET) THEN % %600- 20813100 C 0013
|
||
IF(F1 NEQ POINTERS OR RT NEQ NILTYPE) % %600- 20814000 P 0015
|
||
AND % %600- 20814050 C 0017
|
||
(F2 NEQ POINTERS OR LT NEQ NILTYPE) THEN % %600- 20814100 C 0017
|
||
BEGIN 20815000 T 0019
|
||
IF F1=SET AND F2=SET THEN 20816000 T 0020
|
||
BEGIN 20817000 T 0022
|
||
LT:=TT1.SETTYPE; RT:=TT2.SETTYPE; 20818000 T 0022
|
||
TT1:=TYPETAB1[LT]; TT2:=TYPETAB1[RT]; 20819000 T 0025
|
||
F1:=TT1.FORM; F2:=TT2.FORM; 20820000 T 0027
|
||
END; 20821000 T 0029
|
||
IF F1=POINTERS AND F2=POINTERS THEN 20822000 T 0029
|
||
BEGIN 20823000 T 0031
|
||
LT:=TT1.POINTTYPE; RT:=TT2.POINTTYPE; 20824000 T 0031
|
||
TT1:=TYPETAB1[LT]; TT2:=TYPETAB1[RT]; 20825000 T 0034
|
||
F1:=TT1.FORM; F2:=TT2.FORM; 20826000 T 0036
|
||
END; 20827000 T 0038
|
||
WHILE F1=SUBTYPE DO 20828000 T 0038
|
||
BEGIN LT:=TT1.MAINTYPE; TT1:=TYPETAB1[LT]; F1:=TT1.FORM END; 20829000 T 0040
|
||
WHILE F2=SUBTYPE DO 20830000 T 0044
|
||
BEGIN RT:=TT2.MAINTYPE; TT2:=TYPETAB1[RT]; F2:=TT2.FORM END; 20831000 T 0046
|
||
IF LT>0 AND RT>0 THEN 20832000 T 0050
|
||
IF LT≠RT THEN 20833000 T 0052
|
||
IF F1≠NUMERIC OR F2≠NUMERIC THEN 20834000 T 0053
|
||
IF F1≠CHAR OR F2≠CHAR THEN ERROR(17); 20835000 T 0055
|
||
END; 20836000 T 0059
|
||
END; 20837000 T 0059
|
||
END OF CHECKTYPES; %700- 20838000 P 0059
|
||
24 IS 64 LONG, NEXT SEG 2
|
||
20839000 T 0082
|
||
20840000 T 0082
|
||
INTEGER FILENAME; 20841000 T 0082
|
||
BOOLEAN LPARFOUND,SAVEXREFOPT; %002- 20842000 P 0082
|
||
20843000 T 0082
|
||
PROCEDURE FILEPARAM( DEFAULTFILE ); %*** CHECKS THE FIRST PARAMETER 20844000 P 0082
|
||
VALUE DEFAULTFILE; INTEGER DEFAULTFILE;%*** TO SEE IF IT IS A FILE.%700- 20844100 C 0082
|
||
BEGIN DEFINE RESULTS = FILENAME & LPARFOUND #; %700- 20845000 P 0082
|
||
START OF SEGMENT ********** 25
|
||
INSYMBOL; FILENAME:=CURTYPE:=0; 20846000 T 0000
|
||
LPARFOUND:=CURSY=LPAR; 20847000 T 0001
|
||
SAVEXREFOPT := XREFOPTION; XREFOPTION := FALSE; %002- 20847500 C 0003
|
||
IF LPARFOUND THEN 20848000 T 0004
|
||
BEGIN 20849000 T 0004
|
||
INSYMBOL; 20850000 T 0005
|
||
IF CURSY=IDENTIFIER THEN 20851000 T 0005
|
||
BEGIN 20852000 T 0006
|
||
SEARCH; 20853000 T 0007
|
||
IF FOUND THEN 20854000 T 0007
|
||
BEGIN 20855000 T 0007
|
||
IF THISID.IDCLASS=VAR THEN 20856000 T 0008
|
||
BEGIN 20857000 T 0009
|
||
CURTYPE:=THISID.TYPE; 20858000 T 0010
|
||
IF TYPETAB1[CURTYPE].FORM≥FILES THEN 20859000 T 0011
|
||
BEGIN 20860000 T 0012
|
||
FILENAME:=1000×THISLEVEL+THISINDEX; 20861000 T 0013
|
||
IF SAVEXREFOPT THEN NEWXREF(CURNAME1,CURNAME2,THISLEVEL, 20861500 C 0015
|
||
FALSE); %002- 20861550 C 0016
|
||
INSYMBOL; 20862000 T 0017
|
||
END END END END; 20863000 T 0017
|
||
IF SYMKIND[CURSY]=TERMINAL THEN ERROR(46); 20864000 T 0017
|
||
END; 20865000 T 0020
|
||
IF FILENAME=0 THEN FILENAME:=DEFAULTFILE; 20866000 T 0020
|
||
IF (FILENAME=INPUTFILE AND NOT INPUTDECL) OR 20867000 T 0022
|
||
(FILENAME=OUTPUTFILE AND NOT OUTPUTDECL) THEN ERROR(96); 20868000 T 0023
|
||
XREFOPTION := SAVEXREFOPT; %002- 20868500 C 0026
|
||
END OF FILEPARAM; %700- 20869000 P 0027
|
||
25 IS 28 LONG, NEXT SEG 2
|
||
20870000 T 0082
|
||
20871000 T 0082
|
||
REAL CURVAL; INTEGER CURLENGTH; %700- 20872000 P 0082
|
||
%700- 20873000 P 0082
|
||
PROCEDURE CONSTANT( CVAL, CTYPE ); %700- 20874000 P 0082
|
||
REAL CVAL; INTEGER CTYPE; %700- 20875000 P 0082
|
||
BEGIN %700- 20876000 P 0082
|
||
INTEGER TFORM; BOOLEAN SIGNED, NEGATIVE; %700- 20876100 C 0082
|
||
START OF SEGMENT ********** 26
|
||
IF CURSY=MINUS OR CURSY=PLUS THEN 20877000 T 0000
|
||
BEGIN SIGNED:=TRUE; NEGATIVE:=CURSY=MINUS; 20878000 T 0001
|
||
INSYMBOL; 20879000 T 0004
|
||
END ELSE SIGNED:=NEGATIVE:=FALSE; 20880000 T 0004
|
||
IF CURSY=INTCONST THEN 20881000 T 0006
|
||
BEGIN CTYPE:=INTTYPE; 20882000 T 0007
|
||
CVAL:=IF NEGATIVE THEN -CURVAL ELSE CURVAL; 20883000 T 0008
|
||
END ELSE 20884000 T 0011
|
||
IF CURSY=CHARCONST THEN 20885000 T 0011
|
||
BEGIN IF SIGNED THEN ERROR(29); 20886000 T 0012
|
||
CTYPE:=CHARTYPE; CVAL:=CURVAL; 20887000 T 0014
|
||
END ELSE 20888000 T 0016
|
||
IF CURSY=REALCONST THEN 20889000 T 0016
|
||
BEGIN CTYPE:=REALTYPE; 20890000 T 0018
|
||
CVAL:=IF NEGATIVE THEN -CURVAL ELSE CURVAL; 20891000 T 0019
|
||
END ELSE 20892000 T 0022
|
||
IF CURSY=ALFACONST THEN 20893000 T 0022
|
||
BEGIN IF SIGNED THEN ERROR(29); 20894000 T 0023
|
||
IF CURLENGTH>7 THEN ERROR(41); 20895000 T 0025
|
||
CTYPE:=ALFATYPE; CVAL:=CURVAL; 20896000 T 0027
|
||
END ELSE 20897000 T 0029
|
||
IF CURSY=IDENTIFIER THEN 20898000 T 0029
|
||
BEGIN 20899000 T 0030
|
||
SEARCH; 20900000 T 0031
|
||
IF FOUND THEN 20901000 T 0031
|
||
BEGIN 20902000 T 0032
|
||
IF THISID.IDCLASS=CONST AND NOT BOOLEAN(THISID.FORMAL) THEN 20903000 T 0032
|
||
BEGIN 20904000 T 0035
|
||
IF TYPETAB1[THISID.TYPE].FORM≤ALFA THEN 20905000 T 0035
|
||
BEGIN 20906000 T 0037
|
||
CVAL:=THISID.INFO; 20907000 T 0038
|
||
IF CVAL>1023 THEN CVAL:=CONSTTAB[CVAL-1023]; 20908000 T 0039
|
||
CTYPE:=THISID.TYPE; 20909000 T 0042
|
||
IF SIGNED THEN 20910000 T 0044
|
||
BEGIN 20911000 T 0044
|
||
TFORM:=TYPETAB1[THISID.TYPE].FORM; 20912000 T 0044
|
||
IF TFORM≠NUMERIC AND TFORM≠FLOATING THEN ERROR(29) ELSE 20913000 T 0046
|
||
IF NEGATIVE THEN CVAL:=-CVAL; 20914000 T 0049
|
||
END; 20915000 T 0052
|
||
END ELSE BEGIN ERROR(48); CVAL:=CTYPE:=0 END; 20916000 T 0052
|
||
END ELSE BEGIN ERROR(32); CVAL:=CTYPE:=0 END; 20917000 T 0055
|
||
END ELSE BEGIN ERROR(1); CVAL:=CTYPE:=0 END; 20918000 T 0058
|
||
END ELSE BEGIN ERROR(32); CVAL:=CTYPE:=0 END; 20919000 T 0061
|
||
INSYMBOL; 20920000 T 0064
|
||
END OF CONSTANT; %700- 20921000 P 0064
|
||
26 IS 68 LONG, NEXT SEG 2
|
||
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 30001000 T 0082
|
||
% % 30002000 T 0082
|
||
% % 30003000 T 0082
|
||
% % 30004000 T 0082
|
||
% PART 3: THE SCANNER. % 30005000 T 0082
|
||
% ------------ % 30006000 T 0082
|
||
% % 30007000 T 0082
|
||
% % 30008000 T 0082
|
||
% % 30009000 T 0082
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 30010000 T 0082
|
||
30011000 T 0082
|
||
% INTERNAL INTERNAL SYMBOL 30012000 T 0082
|
||
% SYMBOL NUMBER NAME KIND 30013000 T 0082
|
||
% 30014000 T 0082
|
||
% IDENTIFIER 1 IDENTIFIER MIDDLE 30015000 T 0082
|
||
% 122 2 INTCONST MIDDLE 30016000 T 0082
|
||
% 2.5 3 REALCONST MIDDLE 30017000 T 0082
|
||
% "ABCD" 4 ALFACONST MIDDLE 30018000 T 0082
|
||
% "C" 5 CHARCONST MIDDLE 30019000 T 0082
|
||
% NOT 6 NOTSY MIDDLE 30020000 T 0082
|
||
% * 7 ASTERISK MIDDLE 30021000 T 0082
|
||
% / 8 SLASH MIDDLE 30022000 T 0082
|
||
% & AND 9 ANDSY MIDDLE 30023000 T 0082
|
||
% DIV 10 DIVSY MIDDLE 30024000 T 0082
|
||
% MOD 11 MODSY MIDDLE 30025000 T 0082
|
||
% + 12 PLUS MIDDLE 30026000 T 0082
|
||
% - 13 MINUS MIDDLE 30027000 T 0082
|
||
% OR 14 ORSY MIDDLE 30028000 T 0082
|
||
% < LSS 15 LSSSY MIDDLE 30029000 T 0082
|
||
% <= LEQ ≤ 16 LEQSY MIDDLE 30030000 T 0082
|
||
% >= GEQ ≥ 17 GEQSY MIDDLE 30031000 T 0082
|
||
% > GTR 18 GTRSY MIDDLE 30032000 T 0082
|
||
% <> NEQ ≠ 19 NEQSY MIDDLE 30033000 T 0082
|
||
% = EQL 30 EQLSY MIDDLE 30034000 T 0082
|
||
% IN 21 INSY MIDDLE 30035000 T 0082
|
||
% ( 22 LPAR MIDDLE 30036000 T 0082
|
||
% ) 23 RPAR MIDDLE 30037000 T 0082
|
||
% [ 24 LBRACKET MIDDLE 30038000 T 0082
|
||
% ] 25 RBRACKET MIDDLE 30039000 T 0082
|
||
% .. 26 DOUBLEDOT MIDDLE 30040000 T 0082
|
||
% , 27 COMMA MIDDLE 30041000 T 0082
|
||
% ; 28 SEMICOLON TERMINAL 30042000 T 0082
|
||
% . 29 DOT MIDDLE 30043000 T 0082
|
||
% ← @ 30 ARROW MIDDLE 30044000 T 0082
|
||
% : 31 COLON MIDDLE 30045000 T 0082
|
||
% := 32 ASSIGNSY MIDDLE 30046000 T 0082
|
||
% BEGIN 33 BEGINSY INITIAL 30047000 T 0082
|
||
% END 34 ENDSY TERMINAL 30048000 T 0082
|
||
% IF 35 IFSY INITIAL 30049000 T 0082
|
||
% THEN 36 THENSY MIDDLE 30050000 T 0082
|
||
% ELSE 37 ELSESY TERMINAL 30051000 T 0082
|
||
% CASE 38 CASESY INITIAL 30052000 T 0082
|
||
% OF 39 OFSY MIDDLE 30053000 T 0082
|
||
% REPEAT 40 REPEATSY INITIAL 30054000 T 0082
|
||
% UNTIL 41 UNTILSY TERMINAL 30055000 T 0082
|
||
% WHILE 42 WHILESY INITIAL 30056000 T 0082
|
||
% DO 43 DOSY MIDDLE 30057000 T 0082
|
||
% FOR 44 FORSY INITIAL 30058000 T 0082
|
||
% TO 45 TOSY MIDDLE 30059000 T 0082
|
||
% DOWNTO 46 DOWNTOSY MIDDLE 30060000 T 0082
|
||
% GOTO 47 GOTOSY INITIAL 30061000 T 0082
|
||
% NIL 48 NILSY MIDDLE 30062000 T 0082
|
||
% TYPE 49 TYPESY INITIAL 30063000 T 0082
|
||
% ARRAY 50 ARRAYSY MIDDLE 30064000 T 0082
|
||
% RECORD 51 RECORDSY MIDDLE 30065000 T 0082
|
||
% FILE 52 FILESY MIDDLE 30066000 T 0082
|
||
% SET 53 SETSY MIDDLE 30067000 T 0082
|
||
% CONST 54 CONSTSY INITIAL 30068000 T 0082
|
||
% VAR 55 VARSY INITIAL 30069000 T 0082
|
||
% LABEL 56 LABELSY INITIAL 30070000 T 0082
|
||
% FUNCTION 57 FUNCSY INITIAL 30071000 T 0082
|
||
% PROCEDURE 58 PROCSY INITIAL 30072000 T 0082
|
||
% WITH 59 WITHSY INITIAL 30073000 T 0082
|
||
% PROGRAM 60 PROGRAMSY INITIAL 30074000 T 0082
|
||
% PACKED 61 PACKEDSY MIDDLE 30075000 T 0082
|
||
% ASSERT 62 ASSERTSY INITIAL %002- 30075500 C 0082
|
||
30076000 T 0082
|
||
30077000 T 0082
|
||
DEFINE BLANK=48#, EQUAL=61#, QUOTES=63#, DOLLAR=42#, 30078000 T 0082
|
||
LETTER(C)=(17≤C AND C≤25)OR(33≤C AND C≤41)OR(50≤C AND C≤57)#, 30079000 T 0082
|
||
ALFANUM(C)=(LETTER(C) OR C≤9)#; 30080000 T 0082
|
||
30081000 T 0082
|
||
ALPHA C, CX; %( CURNAME1 & CURNAME2 MOVED TO 20205000 ) %700- 30083000 P 0082
|
||
INTEGER LASTCHARPOS; %( CURVAL, CURLENGTH MOVED TO 20872000 ) %700- 30084000 P 0082
|
||
BOOLEAN FINIS; 30085000 T 0082
|
||
30086000 T 0082
|
||
PROCEDURE INSYMBOL; %*** IDENTIFIES THE NEXT SYMBOL ******%700- 30087000 P 0082
|
||
BEGIN %700- 30087100 C 0082
|
||
%700- 30087200 C 0082
|
||
PROCEDURE NEXTCHAR; %*** GETS THE NEXT CHARACTER. %700- 30088000 P 0082
|
||
START OF SEGMENT ********** 27
|
||
IF CHARCNT=0 THEN C:=BLANK ELSE 30089000 T 0000
|
||
BEGIN 30090000 T 0002
|
||
REPLACE CHARPNT BY CARDPNT:CARDPNT FOR 1; 30091000 T 0002
|
||
C:=CH[0]; CHARCNT:=CHARCNT-1; 30092000 T 0005
|
||
END OF NEXTCHAR; %700- 30093000 P 0007
|
||
30094000 T 0007
|
||
INTEGER SCALE,EXP; 30099000 T 0007
|
||
DEFINE T1 = EXP #; % USED AT 30178000 %700- 30099100 C 0007
|
||
BOOLEAN NEGEXP; 30100000 T 0007
|
||
LABEL START,OVERFLOW; 30101000 T 0007
|
||
30102000 T 0007
|
||
START: 30103000 T 0007
|
||
IF C=BLANK THEN 30104000 T 0008
|
||
BEGIN SCAN CARDPNT:CARDPNT FOR CHARCNT:CHARCNT WHILE =" "; 30105000 T 0008
|
||
IF CHARCNT=0 THEN BEGIN NEWCARD; GO TO START END; 30106000 T 0011
|
||
NEXTCHAR; 30107000 T 0013
|
||
END; 30108000 T 0014
|
||
IF LETTER(C) THEN 30109000 T 0014
|
||
BEGIN 30110000 T 0020
|
||
CURLENGTH:=1; CURNAME1:=C; CURNAME2:=0; 30111000 T 0020
|
||
NEXTCHAR; 30112000 T 0023
|
||
WHILE ALFANUM(C) AND CURLENGTH<6 DO 30113000 T 0024
|
||
BEGIN CURNAME1:=C&CURNAME1[35:29:30]; 30114000 T 0032
|
||
CURLENGTH:=CURLENGTH+1; NEXTCHAR; 30115000 T 0034
|
||
END; 30116000 T 0036
|
||
IF CURLENGTH=6 THEN 30117000 T 0036
|
||
BEGIN 30118000 T 0037
|
||
WHILE ALFANUM(C) AND CURLENGTH<12 DO 30119000 T 0038
|
||
BEGIN CURNAME2:=C&CURNAME2[35:29:30]; 30120000 T 0046
|
||
CURLENGTH:=CURLENGTH+1; NEXTCHAR; 30121000 T 0048
|
||
END; 30122000 T 0050
|
||
WHILE ALFANUM(C) DO NEXTCHAR; 30123000 T 0050
|
||
END; 30124000 T 0059
|
||
CURNAME1.NAMELENGTH:=CURLENGTH; 30125000 T 0059
|
||
CASE CURLENGTH OF 30126000 T 0061
|
||
BEGIN ; 30127000 T 0061
|
||
CURSY:=IDENTIFIER; 30128000 T 0062
|
||
CURSY:=IF CURNAME1="20000IF" THEN IFSY ELSE 30129000 T 0063
|
||
IF CURNAME1="20000DO" THEN DOSY ELSE 30130000 T 0065
|
||
IF CURNAME1="20000TO" THEN TOSY ELSE 30131000 T 0067
|
||
IF CURNAME1="20000OR" THEN ORSY ELSE 30132000 T 0069
|
||
IF CURNAME1="20000OF" THEN OFSY ELSE 30133000 T 0071
|
||
IF CURNAME1="20000IN" THEN INSY ELSE IDENTIFIER; 30134000 T 0073
|
||
CURSY:=IF CURNAME1="3000END" THEN ENDSY ELSE 30135000 T 0076
|
||
IF CURNAME1="3000FOR" THEN FORSY ELSE 30136000 T 0078
|
||
IF CURNAME1="3000DIV" THEN DIVSY ELSE 30137000 T 0080
|
||
IF CURNAME1="3000MOD" THEN MODSY ELSE 30138000 T 0082
|
||
IF CURNAME1="3000NIL" THEN NILSY ELSE 30139000 T 0084
|
||
IF CURNAME1="3000AND" THEN ANDSY ELSE 30140000 T 0086
|
||
IF CURNAME1="3000NOT" THEN NOTSY ELSE 30141000 T 0088
|
||
IF CURNAME1="3000VAR" THEN VARSY ELSE 30142000 T 0090
|
||
IF CURNAME1="3000SET" THEN SETSY ELSE 30143000 T 0092
|
||
IF CURNAME1="3000LSS" THEN LSSSY ELSE 30144000 T 0094
|
||
IF CURNAME1="3000LEQ" THEN LEQSY ELSE 30145000 T 0096
|
||
IF CURNAME1="3000GEQ" THEN GEQSY ELSE 30146000 T 0098
|
||
IF CURNAME1="3000GTR" THEN GTRSY ELSE 30147000 T 0100
|
||
IF CURNAME1="3000NEQ" THEN NEQSY ELSE 30148000 T 0102
|
||
IF CURNAME1="3000EQL" THEN EQLSY ELSE IDENTIFIER; 30149000 T 0104
|
||
CURSY:=IF CURNAME1="400THEN" THEN THENSY ELSE 30150000 T 0108
|
||
IF CURNAME1="400ELSE" THEN ELSESY ELSE 30151000 T 0110
|
||
IF CURNAME1="400WITH" THEN WITHSY ELSE 30152000 T 0112
|
||
IF CURNAME1="400CASE" THEN CASESY ELSE 30153000 T 0114
|
||
IF CURNAME1="400GOTO" THEN GOTOSY ELSE 30154000 T 0116
|
||
IF CURNAME1="400TYPE" THEN TYPESY ELSE 30155000 T 0118
|
||
IF CURNAME1="400FILE" THEN FILESY ELSE IDENTIFIER; 30156000 T 0120
|
||
CURSY:=IF CURNAME1="50BEGIN" THEN BEGINSY ELSE 30157000 T 0123
|
||
IF CURNAME1="50WHILE" THEN WHILESY ELSE 30158000 T 0125
|
||
IF CURNAME1="50UNTIL" THEN UNTILSY ELSE 30159000 T 0127
|
||
IF CURNAME1="50ARRAY" THEN ARRAYSY ELSE 30160000 T 0129
|
||
IF CURNAME1="50CONST" THEN CONSTSY ELSE 30161000 T 0131
|
||
IF CURNAME1="50LABEL" THEN LABELSY ELSE IDENTIFIER; 30162000 T 0133
|
||
CURSY:=IF CURNAME1="6REPEAT" THEN REPEATSY ELSE 30163000 T 0136
|
||
IF CURNAME1="6DOWNTO" THEN DOWNTOSY ELSE 30164000 T 0138
|
||
IF CURNAME1="6RECORD" THEN RECORDSY ELSE 30165000 T 0140
|
||
IF CURNAME1="6ASSERT" THEN ASSERTSY ELSE %002- 30165500 C 0142
|
||
IF CURNAME1="6PACKED" THEN PACKEDSY ELSE IDENTIFIER; 30166000 T 0144
|
||
CURSY:=IF CURNAME1="7PROGRA" AND CURNAME2="M" THEN PROGRAMSY 30167000 T 0147
|
||
ELSE IDENTIFIER; 30168000 T 0150
|
||
CURSY:=IF CURNAME1="8FUNCTI" AND CURNAME2="ON" THEN FUNCSY 30169000 T 0152
|
||
ELSE IDENTIFIER; 30170000 T 0154
|
||
CURSY:=IF CURNAME1="9PROCED" AND CURNAME2="URE" THEN PROCSY 30171000 T 0156
|
||
ELSE IDENTIFIER; 30172000 T 0158
|
||
CURSY:=IDENTIFIER; % 10 CHARACTERS. 30173000 T 0160
|
||
CURSY:=IDENTIFIER; % 11 CHARACTERS. 30174000 T 0161
|
||
CURSY:=IDENTIFIER; % 12 CHARACTERS. 30175000 T 0163
|
||
END OF CASE; 30176000 T 0164
|
||
START OF SEGMENT ********** 28
|
||
28 IS 14 LONG, NEXT SEG 27
|
||
IF RESWORDOPTION AND CURSY≠IDENTIFIER THEN 30177000 T 0209
|
||
BEGIN T1 := CARDLENGTH-CHARCNT-CURLENGTH-1; %506- 30178000 P 0210
|
||
RESWORDOPTION := BOOLEAN(3); % SET RESWORDPRESENT BIT 30179000 P 0213
|
||
REPLACE XLINEPNT+T1 BY CARDPNT-(CURLENGTH+1) 30180000 T 0214
|
||
FOR CURLENGTH+REAL(CHARCNT=0); %506- 30181000 P 0218
|
||
END; 30182000 T 0222
|
||
END OF LETTER ELSE 30183000 T 0222
|
||
IF C≤9 THEN 30184000 T 0222
|
||
BEGIN 30185000 T 0223
|
||
CURVAL:=C; CURSY:=INTCONST; 30186000 T 0224
|
||
NEXTCHAR; 30187000 T 0225
|
||
WHILE C≤9 DO BEGIN CURVAL:=10×CURVAL+C; NEXTCHAR END; 30188000 T 0226
|
||
IF C="." THEN 30189000 T 0231
|
||
BEGIN 30190000 T 0232
|
||
NEXTCHAR; 30191000 T 0232
|
||
IF C≤9 THEN 30192000 T 0233
|
||
BEGIN CURSY:=REALCONST; 30193000 T 0234
|
||
DO BEGIN CURVAL:=10×CURVAL+C; 30194000 T 0235
|
||
SCALE:=SCALE-1; NEXTCHAR; 30195000 T 0237
|
||
END UNTIL C>9; 30196000 T 0240
|
||
END ELSE IF C="." THEN C:=64 % SPECIAL MARK FOR ".." 30197000 T 0241
|
||
ELSE ERROR(4); 30198000 T 0243
|
||
END; 30199000 T 0245
|
||
IF C="E" THEN 30200000 T 0245
|
||
BEGIN 30201000 T 0245
|
||
CURSY:=REALCONST; NEXTCHAR; 30202000 T 0246
|
||
IF C="+" OR C="-" THEN BEGIN NEGEXP:=C="-"; NEXTCHAR END; 30203000 T 0248
|
||
IF C≤9 THEN 30204000 T 0252
|
||
BEGIN EXP:=C; NEXTCHAR; 30205000 T 0253
|
||
WHILE C≤9 DO BEGIN EXP:=10×EXP+C; NEXTCHAR END; 30206000 T 0255
|
||
IF NEGEXP THEN EXP:=-EXP; 30207000 T 0260
|
||
END ELSE ERROR(4); 30208000 T 0262
|
||
SCALE:=SCALE+EXP; 30209000 T 0263
|
||
END; 30210000 T 0264
|
||
IF CURSY=REALCONST THEN 30211000 T 0264
|
||
BEGIN 30212000 T 0265
|
||
REALOVERFLOW:=OVERFLOW; 30213000 T 0266
|
||
CURVAL:=CURVAL×10*SCALE; 30214000 T 0267
|
||
REALOVERFLOW:=0; 30215000 T 0271
|
||
END ELSE 30216000 T 0271
|
||
IF CURVAL>MAXINT THEN 30217000 T 0271
|
||
BEGIN 30218000 T 0273
|
||
OVERFLOW: ERROR(14); CURVAL:=0; REALOVERFLOW:=0; 30219000 T 0273
|
||
END; 30220000 T 0276
|
||
END OF DIGIT ELSE 30221000 T 0276
|
||
IF C=QUOTES THEN 30222000 T 0276
|
||
BEGIN 30223000 T 0278
|
||
CURSY:=ALFACONST; CURLENGTH:=0; NEXTCHAR; 30224000 T 0279
|
||
FINIS:=FALSE; 30225000 T 0281
|
||
DO BEGIN 30226000 T 0282
|
||
IF C=QUOTES THEN BEGIN NEXTCHAR; FINIS:=C≠QUOTES END ELSE 30227000 T 0283
|
||
IF CHARCNT=0 THEN BEGIN ERROR(6); FINIS:=TRUE END; 30228000 T 0286
|
||
IF NOT FINIS THEN 30229000 T 0289
|
||
BEGIN 30230000 T 0290
|
||
REPLACE STRINGPNT+CURLENGTH BY CHARPNT FOR 1; 30231000 T 0290
|
||
CURLENGTH:=CURLENGTH+1; 30232000 T 0295
|
||
NEXTCHAR; 30233000 T 0296
|
||
END END UNTIL FINIS; 30234000 T 0297
|
||
IF CURLENGTH=0 THEN ERROR(4) ELSE 30235000 T 0298
|
||
IF CURLENGTH=1 THEN 30236000 T 0300
|
||
BEGIN CURSY:=CHARCONST; 30237000 T 0301
|
||
REPLACE CHARPNT BY STRINGPNT FOR 1; CURVAL:=CH[0]; 30238000 T 0303
|
||
END ELSE 30239000 T 0306
|
||
IF CURLENGTH≤7 THEN 30240000 T 0306
|
||
BEGIN TEXT[0]:=" "; 30241000 T 0308
|
||
REPLACE TEXTPNT BY STRINGPNT FOR CURLENGTH; 30242000 T 0309
|
||
CURVAL:=TEXT[0]; 30243000 T 0312
|
||
END; 30244000 T 0313
|
||
END OF STRINGS ELSE 30245000 T 0313
|
||
BEGIN 30246000 T 0313
|
||
CURSY:=SYMBOL[C]; NEXTCHAR; 30247000 T 0315
|
||
IF CURSY=COLON AND C=EQUAL THEN 30248000 T 0317
|
||
BEGIN CURSY:=ASSIGNSY; NEXTCHAR END ELSE 30249000 T 0318
|
||
IF CURSY=DOT AND C="." THEN 30250000 T 0321
|
||
BEGIN CURSY:=DOUBLEDOT; NEXTCHAR END ELSE 30251000 T 0323
|
||
IF CURSY=LSSSY AND C=EQUAL THEN 30252000 T 0325
|
||
BEGIN CURSY:=LEQSY; NEXTCHAR END ELSE 30253000 T 0327
|
||
IF CURSY=LSSSY AND C=">" THEN 30254000 T 0330
|
||
BEGIN CURSY:=NEQSY; NEXTCHAR END ELSE 30255000 T 0332
|
||
IF CURSY=GTRSY AND C=EQUAL THEN 30256000 T 0334
|
||
BEGIN CURSY:=GEQSY; NEXTCHAR END ELSE 30257000 T 0336
|
||
IF CURSY=LPAR AND C="*" THEN 30258000 T 0339
|
||
BEGIN % *** COMMENT *** 30259000 T 0341
|
||
NEXTCHAR; 30260000 T 0341
|
||
IF C=DOLLAR THEN % DOLLAR INDICATES COMPILER OPTIONS. 30261000 T 0342
|
||
BEGIN DEFINE NEWSEGMENT = HERE #; %700- 30261100 C 0343
|
||
START OF SEGMENT ********** 29
|
||
DO BEGIN 30262000 T 0000
|
||
NEXTCHAR; CX:=C; NEXTCHAR; 30263000 T 0000
|
||
IF CX="L" THEN IF C=1 THEN %516- 30264000 P 0002
|
||
IF LISTOPTION THEN HEADING ELSE %516- 30264500 C 0004
|
||
ELSE LISTOPTION := C="+" ELSE %713- 30265000 P 0006
|
||
IF CX="R" THEN RESWORDOPTION:=C="+" ELSE 30266000 T 0008
|
||
IF CX="C" THEN CHECKOPTION:=C="+" ELSE 30267000 T 0011
|
||
IF CX="D" THEN DUMPOPTION:=C="+" ELSE 30268000 T 0014
|
||
IF CX="X" THEN XREFOPTION:=C="+" ELSE 30269000 T 0017
|
||
IF CX="A" THEN 30270000 T 0020
|
||
IF C="+" THEN WRITE(PASCALGOL,ALIST) 30271000 T 0022
|
||
ELSE WRITE(PASCALGOL,NOALIST) ELSE 30272000 T 0026
|
||
IF CX="T" THEN 30273000 T 0030
|
||
BEGIN LASTCHARPOS := CHARCNT - CARDLENGTH; 30274000 T 0031
|
||
CARDLENGTH:=10×C; 30275000 T 0033
|
||
NEXTCHAR; CARDLENGTH:=CARDLENGTH+C; 30276000 T 0034
|
||
IF CARDLENGTH≤9 OR CARDLENGTH>80 THEN 30277000 T 0036
|
||
BEGIN ERROR(14); CARDLENGTH:=72 END; 30278000 T 0038
|
||
CHARCNT:=MAX(0,LASTCHARPOS+CARDLENGTH-1); 30279000 T 0040
|
||
END% %002- 30280000 P 0044
|
||
% %002- 30280025 C 0044
|
||
% %002- 30280050 C 0044
|
||
% THE FOLLOWING LINES DECODE ANY OCCURRENCE OF THE "S" OPTION AND 30280075 C 0044
|
||
% SETS THE GLOBAL INTEGER VARIABLE "SAVEFACTOR" WHICH CONTROLS THE %002- 30280100 C 0044
|
||
% TYPE OF COMPILATION INITIATED BY THE ZIP. THERE ARE THREE LEGAL FORMS 30280125 C 0044
|
||
% OF THE "S" OPTION AS FOLLOWS.- %002- 30280150 C 0044
|
||
% %002- 30280175 C 0044
|
||
% "S-" WILL GIVE NO ZIP IE. PASCAL SYNTAX CHECK ONLY %002- 30280200 C 0044
|
||
% "S+" WILL GIVE A ZIP FOR COMPILE AND GO %002- 30280225 C 0044
|
||
% "S??" WILL GIVE A ZIP FOR COMPILE TO LIBRARY %002- 30280250 C 0044
|
||
% WHERE ?? IS THE TWO DIGIT DECIMAL SAVE %002- 30280275 C 0044
|
||
% CONSTANT GIVEN THE OBJECT CODE FILE %002- 30280300 C 0044
|
||
% NB. IF THE SAVE CONSTANT IS TO BE %002- 30280325 C 0044
|
||
% LESS THAN 10 THE FIRST DIGIT %002- 30280350 C 0044
|
||
% MUST BE INCLUDED IE. A "0". %002- 30280375 C 0044
|
||
% %002- 30280400 C 0044
|
||
% %002- 30280425 C 0044
|
||
ELSE %002- 30280450 C 0044
|
||
IF CX="S" THEN %002- 30280475 C 0044
|
||
BEGIN %002- 30280500 C 0045
|
||
IF C="-" THEN SAVEFACTOR:=-1 ELSE %002- 30280525 C 0046
|
||
IF C="+" THEN SAVEFACTOR:= 0 ELSE %002- 30280550 C 0048
|
||
IF C LEQ 9 THEN %002- 30280575 C 0051
|
||
BEGIN %002- 30280600 C 0052
|
||
SAVEFACTOR := 10 × C; NEXTCHAR; %002- 30280625 C 0052
|
||
SAVEFACTOR := SAVEFACTOR + C; %002- 30280650 C 0055
|
||
IF C GTR 9 THEN ERROR(100); %002- 30280675 C 0056
|
||
END %002- 30280700 C 0058
|
||
ELSE %002- 30280720 C 0058
|
||
BEGIN %002- 30280735 C 0058
|
||
ERROR(100); %002- 30280750 C 0058
|
||
SAVEFACTOR := 7; %002- 30280765 C 0059
|
||
END; %002- 30280780 C 0060
|
||
END %713- 30280800 C 0060
|
||
ELSE ERROR(102); %713- 30280810 C 0060
|
||
% %002- 30280825 C 0061
|
||
% %002- 30280850 C 0061
|
||
% %002- 30280875 C 0061
|
||
NEXTCHAR; 30281000 T 0061
|
||
END UNTIL C≠","; 30282000 T 0062
|
||
IF LISTOPTION THEN IF PAGECNT=0 THEN HEADING; % ON FIRST PAGE 30282100 C 0063
|
||
END NEWSEGEMENT; %700- 30282200 C 0066
|
||
29 IS 70 LONG, NEXT SEG 27
|
||
FINIS:=FALSE; 30283000 T 0345
|
||
DO BEGIN 30284000 T 0345
|
||
IF C≠"*" THEN 30285000 T 0346
|
||
SCAN CARDPNT:CARDPNT FOR CHARCNT:CHARCNT UNTIL ="*"; 30286000 T 0346
|
||
IF CHARCNT=0 THEN NEWCARD ELSE 30287000 T 0349
|
||
BEGIN NEXTCHAR; 30288000 T 0351
|
||
WHILE C="*" DO NEXTCHAR; 30289000 T 0352
|
||
FINIS:=C=")"; 30290000 T 0355
|
||
END END UNTIL FINIS; 30291000 T 0357
|
||
NEXTCHAR; 30292000 T 0357
|
||
GO TO START; 30293000 T 0358
|
||
END OF COMMENT; 30294000 T 0359
|
||
END; 30295000 T 0359
|
||
END OF INSYMBOL; 30296000 T 0359
|
||
27 IS 367 LONG, NEXT SEG 2
|
||
|
||
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 40001000 T 0082
|
||
% % 40002000 T 0082
|
||
% % 40003000 T 0082
|
||
% % 40004000 T 0082
|
||
% PART 4: EXPRESSION PARSER. % 40005000 T 0082
|
||
% ------------------ % 40006000 T 0082
|
||
% % 40007000 T 0082
|
||
% % 40008000 T 0082
|
||
% % 40009000 T 0082
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 40010000 T 0082
|
||
40011000 T 0082
|
||
40012000 T 0082
|
||
PROCEDURE EXPRESSION; FORWARD; 40013000 T 0082
|
||
PROCEDURE CONCAT; FORWARD; 40014000 T 0082
|
||
40015000 T 0082
|
||
INTEGER EXPRLEVEL, EXPINVARCNT; % %800- 40018000 P 0082
|
||
40019000 T 0082
|
||
DEFINE PUTTEXT(T)= 40020000 T 0082
|
||
BEGIN 40021000 T 0082
|
||
IF NUMSYMS=MAXSYMS THEN 40022000 T 0082
|
||
BEGIN ERROR(63); % %600- 40023000 P 0082
|
||
NUMSYMS:=1; 40024000 T 0082
|
||
END ELSE NUMSYMS:=NUMSYMS+1; 40025000 T 0082
|
||
SYMTAB[NUMSYMS]:=T; 40026000 T 0082
|
||
END OF PUTTEXT #; 40027000 T 0082
|
||
40028000 T 0082
|
||
DEFINE PUTSYM(S) = PUTTEXT( (S)&1[41:5:6] ) #; %700- 40029000 P 0082
|
||
40034000 T 0082
|
||
DEFINE PUTCONST(VAL)= 40035000 T 0082
|
||
BEGIN 40036000 T 0082
|
||
PUTTEXT("2000000"); 40037000 T 0082
|
||
PUTTEXT(VAL); 40038000 T 0082
|
||
END OF PUTCONST #; 40039000 T 0082
|
||
40040000 T 0082
|
||
DEFINE PUTDUMMY = PUTTEXT("3000000") #; %700- 40041000 P 0082
|
||
40045000 T 0082
|
||
DEFINE PUTID(L,NUM,NUMDIG)= 40046000 T 0082
|
||
BEGIN 40047000 T 0082
|
||
TEXT[0]:=" " & L [35:5:6]; 40048000 T 0082
|
||
REPLACE TEXTPNT+2 BY NUM FOR NUMDIG DIGITS; 40049000 T 0082
|
||
PUTTEXT(TEXT[0]); 40050000 T 0082
|
||
END OF PUTID#; 40051000 T 0082
|
||
40052000 T 0082
|
||
% %601- 40052050 C 0082
|
||
% %601- 40052055 C 0082
|
||
PROCEDURE SPLIT(SPLITINX,WIDTH); % %601- 40052100 C 0082
|
||
VALUE SPLITINX, WIDTH; % %601- 40052150 C 0082
|
||
INTEGER SPLITINX, WIDTH ; % %601- 40052200 C 0082
|
||
BEGIN % %601- 40052250 C 0082
|
||
INTEGER I; % %601- 40052300 C 0082
|
||
START OF SEGMENT ********** 30
|
||
% %601- 40052350 C 0000
|
||
IF NUMSYMS+WIDTH LEQ MAXSYMS THEN % %601- 40052400 C 0000
|
||
BEGIN % %601- 40052450 C 0001
|
||
FOR I:=NUMSYMS STEP -1 UNTIL SPLITINX DO % %601- 40052500 C 0001
|
||
SYMTAB[I+WIDTH] := SYMTAB[I]; % %601- 40052550 C 0003
|
||
FOR I:=1 STEP 1 UNTIL WIDTH DO % %601- 40052600 C 0007
|
||
SYMTAB[SPLITINX+I-1] := "3000000"; % %601- 40052650 C 0008
|
||
NUMSYMS := NUMSYMS + WIDTH; % %601- 40052700 C 0012
|
||
END % %601- 40052750 C 0013
|
||
ELSE %601- 40052800 C 0013
|
||
BEGIN % %601- 40052830 C 0013
|
||
ERROR(63); % %601- 40052860 C 0016
|
||
NUMSYMS := 1; % %601- 40052890 C 0016
|
||
END; % %601- 40052900 C 0017
|
||
END OF SPLIT; % %601- 40052950 C 0017
|
||
30 IS 20 LONG, NEXT SEG 2
|
||
% %601- 40052960 C 0082
|
||
% %601- 40052965 C 0082
|
||
PROCEDURE WRITEEXPR; %*** WRITE GENERATED ALGOL EXPRESSION %700- 40053000 P 0082
|
||
BEGIN 40054000 T 0082
|
||
REAL SX; INTEGER T1, TX; %700- 40054100 C 0082
|
||
START OF SEGMENT ********** 31
|
||
FOR T1:=1 STEP 1 UNTIL NUMSYMS DO 40055000 T 0000
|
||
BEGIN 40056000 T 0001
|
||
SX:=SYMTAB[T1]; TX:=SX.[41:6]; 40057000 T 0001
|
||
IF TX=0 THEN GEN(SX,7,2) ELSE 40058000 T 0003
|
||
IF TX=3 THEN ELSE 40059000 T 0006
|
||
IF TX=1 THEN GEN(SX,1,7) ELSE 40060000 T 0007
|
||
BEGIN 40061000 T 0011
|
||
T1:=T1+1; SX:=SYMTAB[T1]; 40062000 T 0011
|
||
IF SX.[44:6]=0 THEN GENINT(SX) ELSE GENREAL(SX); 40063000 T 0013
|
||
END END; 40064000 T 0017
|
||
NUMSYMS:=0; 40065000 T 0019
|
||
END OF WRITEEXPR; %700- 40066000 P 0020
|
||
31 IS 24 LONG, NEXT SEG 2
|
||
40067000 T 0082
|
||
40068000 T 0082
|
||
PROCEDURE CHECKEXPR( LLIM, ULIM ); %*** WRITE CODE TO CHECK VALUE 40069000 P 0082
|
||
VALUE LLIM, ULIM; INTEGER LLIM, ULIM; %700- 40069100 C 0082
|
||
BEGIN DEFINE CHECK = VALUE #; %700- 40070000 P 0082
|
||
START OF SEGMENT ********** 32
|
||
PUTTEXT("CHECK("); 40071000 T 0000
|
||
EXPRESSION; 40072000 T 0005
|
||
PUTSYM(","); PUTCONST(LLIM); 40073000 T 0006
|
||
PUTSYM(","); PUTCONST(ULIM); 40074000 T 0027
|
||
PUTSYM(","); PUTCONST(CARDCNT); 40075000 T 0047
|
||
PUTSYM(")"); 40076000 T 0067
|
||
END OF CHECKEXPR; %700- 40077000 P 0074
|
||
32 IS 75 LONG, NEXT SEG 2
|
||
40078000 T 0082
|
||
40079000 T 0082
|
||
BOOLEAN SIMPLEVARIABLE,INSIDEBRACKETS,INSIDEPARENS; %518- 40080100 C 0082
|
||
INTEGER NUMPOINTERS; 40081000 T 0082
|
||
40082000 T 0082
|
||
PROCEDURE VARIABLE; 40083000 T 0082
|
||
BEGIN 40084000 T 0082
|
||
INTEGER STARTSYM,LLIM,ULIM; 40085000 T 0082
|
||
START OF SEGMENT ********** 33
|
||
REAL T; 40086000 T 0000
|
||
INTEGER T1, T5; % USED ONCE EACH %700- 40086100 C 0000
|
||
BOOLEAN INBRACKET,INRECORD,SIMPLEVAR; %002- 40087000 P 0000
|
||
LABEL ADDADDR; 40088000 T 0000
|
||
40089000 T 0000
|
||
STARTSYM:=NUMSYMS+1; 40090000 T 0000
|
||
IF THISLEVEL>CURLEVEL THEN % VARIABLE IN FIELD LIST OF 40091000 T 0001
|
||
BEGIN % RECORD USED IN WITH-STATEMENT. 40092000 T 0002
|
||
T:=DISPLAY[THISLEVEL]; 40093000 T 0002
|
||
T1:=T.FIRSTWITHSYM; T5:=T.LASTWITHSYM; %700- 40094000 P 0003
|
||
FOR T1:=T1 STEP 1 UNTIL T5 DO PUTTEXT(WITHTAB[T1]); %700- 40095000 P 0006
|
||
INRECORD:=TRUE; 40096000 T 0015
|
||
INBRACKET:=BOOLEAN(T.BRACKETSINWITH); 40097000 T 0016
|
||
NUMPOINTERS:=NUMPOINTERS+T.NUMPNTRSINWITH; 40098000 T 0017
|
||
SIMPLEVAR := FALSE; %002- 40099000 P 0019
|
||
CURTYPE:=T.RECTYPE; T:=TYPETAB1[CURTYPE]; 40100000 T 0019
|
||
GO TO ADDADDR; 40101000 T 0022
|
||
END; 40102000 T 0022
|
||
CURTYPE := THISID.TYPE; SIMPLEVAR := TRUE; %002- 40104000 P 0022
|
||
PUTID("V",1000×THISLEVEL+THISINDEX,5); %518- 40105500 C 0024
|
||
INSYMBOL; 40106000 T 0040
|
||
IF CURSY=LBRACKET OR CURSY=DOT OR CURSY=ARROW THEN 40107000 T 0041
|
||
BEGIN 40108000 T 0044
|
||
SIMPLEVAR := FALSE; %002- 40109000 P 0044
|
||
DO BEGIN 40110000 T 0045
|
||
IF CURSY=LBRACKET THEN 40111000 T 0046
|
||
BEGIN 40112000 T 0046
|
||
IF NOT(INBRACKET OR INRECORD) THEN 40113000 T 0047
|
||
BEGIN PUTSYM("["); INBRACKET:=TRUE END; 40114000 T 0048
|
||
DO BEGIN 40115000 T 0056
|
||
T:=TYPETAB1[CURTYPE]; 40116000 T 0057
|
||
LLIM:=TYPETAB2[CURTYPE]; ULIM:=TYPETAB3[CURTYPE]; 40117000 T 0058
|
||
IF T.FORM≠ARRAYS THEN ERROR(12); 40118000 T 0060
|
||
IF INRECORD THEN PUTTEXT(" +("); 40119000 T 0062
|
||
INSYMBOL; 40120000 T 0069
|
||
EXPINVARCNT:=EXPINVARCNT+1;% %002- 40120500 C 0069
|
||
EXPRLEVEL := EXPRLEVEL+1; % DO NOT "WRITEEXPR" YET %507- 40120900 C 0070
|
||
IF CHECKOPTION THEN CHECKEXPR(LLIM,ULIM) ELSE EXPRESSION; 40121000 T 0072
|
||
EXPRLEVEL := EXPRLEVEL-1; %507- 40121100 C 0076
|
||
SIMPLEVARIABLE := FALSE; % RECURSION ON "VARIABLE" %507- 40121200 C 0077
|
||
EXPINVARCNT:=EXPINVARCNT-1;% %002- 40121500 C 0078
|
||
CHECKTYPES(T.INXTYPE,CURTYPE); 40122000 T 0079
|
||
CURTYPE:=T.ARRTYPE; 40123000 T 0081
|
||
IF INRECORD THEN 40124000 T 0082
|
||
BEGIN 40125000 T 0082
|
||
IF LLIM<0 THEN BEGIN PUTSYM("+"); PUTCONST(-LLIM) END ELSE 40126000 T 0083
|
||
IF LLIM>0 THEN BEGIN PUTSYM("-"); PUTCONST( LLIM) END; 40127000 T 0104
|
||
PUTSYM(")"); 40128000 T 0126
|
||
IF TYPETAB1[CURTYPE].SIZE>1 THEN 40129000 T 0133
|
||
BEGIN PUTSYM("×"); PUTCONST(TYPETAB1[CURTYPE].SIZE) END; 40130000 T 0134
|
||
END ELSE IF TYPETAB1[CURTYPE].STRUCT>0 THEN PUTSYM(","); 40131000 T 0155
|
||
END UNTIL CURSY≠COMMA; 40132000 T 0164
|
||
IF CURSY≠RBRACKET THEN 40133000 T 0165
|
||
BEGIN ERROR(59); SKIP(RBRACKET); 40134000 T 0166
|
||
IF CURSY=RBRACKET THEN INSYMBOL; 40135000 T 0168
|
||
END ELSE INSYMBOL; 40136000 T 0170
|
||
END OF BRACKETS ELSE 40137000 T 0171
|
||
IF CURSY=DOT THEN 40138000 T 0171
|
||
BEGIN 40139000 T 0172
|
||
IF NOT(INBRACKET OR INRECORD) THEN 40140000 T 0173
|
||
BEGIN PUTSYM("["); INBRACKET:=TRUE END; 40141000 T 0174
|
||
T:=TYPETAB1[CURTYPE]; 40142000 T 0182
|
||
IF T.FORM≠RECORD THEN ERROR(12); 40143000 T 0183
|
||
INSYMBOL; 40144000 T 0185
|
||
IF CURSY=IDENTIFIER THEN 40145000 T 0186
|
||
BEGIN 40146000 T 0186
|
||
SEARCHTAB(T.RECTAB); 40147000 T 0187
|
||
IF FOUND THEN 40148000 T 0188
|
||
BEGIN 40149000 T 0188
|
||
THISID:=NAMETAB3[T.RECTAB,THISINDEX]; 40150000 T 0189
|
||
ADDADDR: PUTSYM("+"); 40151000 T 0191
|
||
PUTCONST(THISID.INFO); CURTYPE:=THISID.TYPE; 40152000 T 0198
|
||
END ELSE BEGIN ERROR(1); CURTYPE:=0 END; 40153000 T 0213
|
||
END ELSE BEGIN ERROR(9); CURTYPE:=0 END; 40154000 T 0215
|
||
INRECORD:=TRUE; 40155000 T 0217
|
||
INSYMBOL; 40156000 T 0218
|
||
END OF DOT ELSE 40157000 T 0218
|
||
BEGIN % CURSY=ARROW 40158000 T 0218
|
||
T:=TYPETAB1[CURTYPE]; 40159000 T 0219
|
||
IF T.FORM=FILES THEN 40160000 T 0220
|
||
BEGIN 40161000 T 0221
|
||
CURTYPE:=T.FILETYPE; 40162000 T 0221
|
||
IF TYPETAB1[CURTYPE].STRUCT=0 THEN PUTTEXT(" [0]"); 40163000 T 0223
|
||
END ELSE 40164000 T 0230
|
||
IF T.FORM=TEXTFILE THEN 40165000 T 0230
|
||
BEGIN 40166000 T 0234
|
||
SYMTAB[NUMSYMS]:=SYMTAB[NUMSYMS] & "I" [35:5:6]; 40167000 T 0234
|
||
PUTSYM("."); PUTTEXT("LASTCH"); 40168000 T 0237
|
||
CURTYPE:=CHARTYPE; 40169000 T 0249
|
||
END ELSE 40170000 T 0250
|
||
IF T.FORM=POINTERS THEN 40171000 T 0250
|
||
BEGIN 40172000 T 0253
|
||
IF INBRACKET THEN PUTSYM("]"); 40173000 T 0253
|
||
INBRACKET:=FALSE; 40174000 T 0261
|
||
IF NUMSYMS+6 ≤ MAXSYMS THEN %513- 40175000 P 0262
|
||
BEGIN 40176000 T 0263
|
||
FOR T1:=NUMSYMS STEP -1 UNTIL STARTSYM DO 40177000 T 0263
|
||
SYMTAB[T1+2]:=SYMTAB[T1]; 40178000 T 0265
|
||
SYMTAB[STARTSYM]:=" MEM["; 40179000 T 0269
|
||
SYMTAB[STARTSYM+1]:=" (T:="; 40180000 T 0270
|
||
NUMSYMS := NUMSYMS+2; %513- 40180400 C 0272
|
||
IF NUMPOINTERS > 0 % POINTER VIA POINTER %513- 40180500 C 0273
|
||
THEN BEGIN REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY %513- 40180600 C 0273
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; %513- 40180700 C 0278
|
||
NUMSYMS := NUMSYMS+4; %513- 40180800 C 0282
|
||
END %513- 40180900 C 0283
|
||
ELSE NUMPOINTERS := 1; %513- 40181000 P 0283
|
||
INRECORD:=TRUE; 40182000 T 0286
|
||
END ELSE ERROR(63); 40183000 T 0287
|
||
CURTYPE:=T.POINTTYPE; 40184000 T 0288
|
||
END ELSE BEGIN ERROR(12); CURTYPE:=0 END; 40185000 T 0290
|
||
INSYMBOL; 40186000 T 0292
|
||
END OF ARROW; 40187000 T 0292
|
||
END UNTIL CURSY≠LBRACKET AND CURSY≠DOT AND CURSY≠ARROW; 40188000 T 0292
|
||
END; % %601- 40188005 C 0295
|
||
IF TYPETAB1[CURTYPE].FORM=SET THEN % *** SET VARIABLES %601- 40188010 C 0295
|
||
BEGIN % --- --- --------- %601- 40188025 C 0297
|
||
INTEGER THISSYML, I; % %601- 40188050 C 0297
|
||
START OF SEGMENT ********** 34
|
||
% %601- 40188075 C 0000
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SLOAD("; % %601- 40188100 C 0000
|
||
IF SIMPLEVAR THEN % %601- 40188125 C 0002
|
||
BEGIN % %601- 40188150 C 0002
|
||
PUTSYM(","); % %601- 40188175 C 0003
|
||
PUTID("W",1000×THISLEVEL+THISINDEX,5); % %601- 40188200 C 0011
|
||
END % %601- 40188225 C 0027
|
||
ELSE % %601- 40188250 C 0027
|
||
IF INBRACKET AND NOT INRECORD THEN % %601- 40188275 C 0027
|
||
BEGIN % %601- 40188300 C 0029
|
||
PUTSYM(","); THISSYML := NUMSYMS; % %601- 40188325 C 0029
|
||
PUTCONST(0); PUTSYM(" "); PUTSYM(","); % %601- 40188350 C 0037
|
||
FOR I:=STARTSYM+1 STEP 1 UNTIL THISSYML DO % %601- 40188375 C 0064
|
||
PUTTEXT(SYMTAB[I]); %601- 40188400 C 0068
|
||
PUTTEXT(" 1] "); % %601- 40188425 C 0074
|
||
END % %601- 40188450 C 0080
|
||
ELSE % %601- 40188475 C 0080
|
||
BEGIN % %601- 40188500 C 0080
|
||
THISSYML := NUMSYMS; % %601- 40188525 C 0082
|
||
IF INBRACKET THEN PUTSYM("]"); % %601- 40188550 C 0082
|
||
FOR I:=1 STEP 1 UNTIL NUMPOINTERS DO % %601- 40188575 C 0090
|
||
BEGIN % %601- 40188600 C 0091
|
||
PUTTEXT("-1)DIV"); PUTTEXT(" 1022,"); % %601- 40188625 C 0091
|
||
PUTTEXT(" T MOD"); PUTTEXT(" 1022]"); % %601- 40188650 C 0103
|
||
END; % %601- 40188675 C 0117
|
||
PUTSYM(","); % %601- 40188700 C 0119
|
||
FOR I:=STARTSYM+1 STEP 1 UNTIL THISSYML DO % %601- 40188725 C 0127
|
||
PUTTEXT(SYMTAB[I]); % %601- 40188775 C 0131
|
||
PUTTEXT(" +1 "); % %601- 40188800 C 0138
|
||
IF INBRACKET THEN PUTSYM("]"); % %601- 40188825 C 0144
|
||
FOR I:=1 STEP 1 UNTIL NUMPOINTERS DO % %601- 40188850 C 0152
|
||
BEGIN % %601- 40188875 C 0154
|
||
PUTTEXT("-1)DIV"); PUTTEXT(" 1022,"); % %601- 40188900 C 0154
|
||
PUTTEXT(" T MOD"); PUTTEXT(" 1022]"); % %601- 40188915 C 0166
|
||
END; % %601- 40188930 C 0180
|
||
NUMPOINTERS := 0; % %601- 40188945 C 0182
|
||
END; %601- 40188960 C 0183
|
||
PUTSYM(","); PUTCONST(CARDCNT); PUTSYM(")"); % %601- 40188975 C 0183
|
||
END OF SET VARIABLES; % %601- 40188990 C 0211
|
||
34 IS 212 LONG, NEXT SEG 33
|
||
IF TYPETAB1[CURTYPE].STRUCT=0 THEN 40189000 T 0299
|
||
BEGIN 40190000 T 0300
|
||
IF INBRACKET THEN PUTSYM("]"); 40191000 T 0301
|
||
% INBRACKET := FALSE; %513- 40191100 C 0308
|
||
WHILE NUMPOINTERS>0 DO 40192000 T 0308
|
||
BEGIN NUMPOINTERS := NUMPOINTERS-1; %513- 40193000 P 0310
|
||
IF NUMSYMS+4 ≤ MAXSYMS %513- 40194000 P 0311
|
||
THEN BEGIN REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY %513- 40194100 C 0312
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; %513- 40194200 C 0317
|
||
NUMSYMS := NUMSYMS+4; %513- 40194300 C 0320
|
||
END %513- 40194400 C 0321
|
||
ELSE ERROR(63); % EXPRESSION IS TOO LONG FOR SYMTAB[*] 40195000 P 0321
|
||
END; 40196000 T 0323
|
||
END; 40197000 T 0323
|
||
IF INSIDEPARENS AND SIMPLEVAR AND TYPETAB1[CURTYPE].STRUCT > 0 AND 40198500 C 0323
|
||
TYPETAB1[CURTYPE].FORM < FILES THEN SYMTAB[STARTSYM].[35:6] := 40198600 C 0326
|
||
"H"; %615- 40198700 C 0329
|
||
INSIDEBRACKETS:=INBRACKET; 40199000 T 0330
|
||
SIMPLEVARIABLE := SIMPLEVAR; %002- 40199500 C 0331
|
||
CURMODE:=NUMBER; 40200000 T 0332
|
||
END OF VARIABLE; 40201000 T 0333
|
||
33 IS 339 LONG, NEXT SEG 2
|
||
40202000 T 0082
|
||
40203000 T 0082
|
||
PROCEDURE PASSPARAMS; 40204000 T 0082
|
||
BEGIN 40205000 T 0082
|
||
INTEGER NPARS,PARAM,PTYPE,P,FIRSTSYM; 40206000 T 0082
|
||
START OF SEGMENT ********** 35
|
||
BOOLEAN FORMALPROC,CHECK; 40207000 T 0000
|
||
LABEL EXIT; 40208000 T 0000
|
||
40209000 T 0000
|
||
PUTID("V",1000×THISLEVEL+THISINDEX,5); 40210000 T 0000
|
||
P:=THISID.INFO; 40211000 T 0015
|
||
FORMALPROC:=BOOLEAN(THISID.FORMAL); 40212000 T 0017
|
||
NPARS:=PARAMTAB[P]; P:=P+1; 40213000 T 0018
|
||
IF FORMALPROC THEN NPARS:=9999; 40214000 T 0020
|
||
INSYMBOL; 40215000 T 0022
|
||
IF CURSY=LPAR THEN 40216000 T 0022
|
||
BEGIN 40217000 T 0023
|
||
PUTSYM("("); 40218000 T 0023
|
||
DO BEGIN 40219000 T 0031
|
||
INSYMBOL; 40220000 T 0032
|
||
IF NPARS=0 THEN BEGIN ERROR(3); SKIP(RPAR); GO TO EXIT END; 40221000 T 0032
|
||
PARAM:=PARAMTAB[P]; P:=P+1; 40222000 T 0035
|
||
PTYPE:=PARAM.PARAMTYPE; 40223000 T 0038
|
||
IF PARAM.PARAMKIND=CONST THEN 40224000 T 0039
|
||
BEGIN 40225000 T 0040
|
||
CHECK:=CHECKOPTION AND TYPETAB1[PTYPE].FORM LEQ CHAR; 40226000 T 0041
|
||
IF CHECK THEN PUTTEXT("CHECK("); 40227000 T 0043
|
||
PUTDUMMY; FIRSTSYM:=NUMSYMS; 40228000 T 0050
|
||
EXPRLEVEL:=EXPRLEVEL+1; 40229000 T 0058
|
||
EXPRESSION; EXPRLEVEL:=EXPRLEVEL-1; 40230000 T 0059
|
||
IF CURMODE=BITPATTERN THEN 40231000 T 0061
|
||
BEGIN SYMTAB[FIRSTSYM]:=" REAL("; PUTSYM(")"); END; 40232000 T 0062
|
||
IF CHECK THEN 40233000 T 0072
|
||
BEGIN 40234000 T 0072
|
||
PUTSYM(","); PUTCONST(TYPETAB2[PTYPE]); 40235000 T 0073
|
||
PUTSYM(","); PUTCONST(TYPETAB3[PTYPE]); 40236000 T 0092
|
||
PUTSYM(","); PUTCONST(CARDCNT); PUTSYM(")"); 40237000 T 0112
|
||
END; 40238000 T 0139
|
||
END ELSE 40239000 T 0139
|
||
IF PARAM.PARAMKIND=VAR THEN 40240000 T 0139
|
||
BEGIN 40241000 T 0141
|
||
IF CURSY=IDENTIFIER THEN 40242000 T 0141
|
||
BEGIN 40243000 T 0142
|
||
SEARCH; 40244000 T 0142
|
||
IF FOUND THEN 40245000 T 0143
|
||
BEGIN 40246000 T 0143
|
||
IF THISID.IDCLASS=VAR OR 40247000 T 0144
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN 40248000 T 0145
|
||
BEGIN 40249000 T 0147
|
||
IF PARAM.PARAMFILE=1 THEN 40250000 T 0148
|
||
BEGIN 40251000 T 0149
|
||
CURTYPE:=THISID.TYPE; 40252000 T 0150
|
||
PUTID("V",1000×THISLEVEL+THISINDEX,5); PUTSYM(","); 40253000 T 0151
|
||
PUTID("F",1000×THISLEVEL+THISINDEX,5); PUTSYM(","); 40254000 T 0174
|
||
PUTID("I",1000×THISLEVEL+THISINDEX,5); 40255000 T 0197
|
||
INSYMBOL; 40256000 T 0213
|
||
END ELSE 40257000 T 0214
|
||
BEGIN 40258000 T 0214
|
||
INSIDEPARENS := TRUE; %518- 40258100 C 0214
|
||
VARIABLE; 40259000 T 0215
|
||
INSIDEPARENS := FALSE; %518- 40259100 C 0216
|
||
IF TYPETAB1[CURTYPE].STRUCT>0 THEN 40260000 T 0216
|
||
IF NOT SIMPLEVARIABLE THEN ERROR(92); 40261000 T 0218
|
||
END; 40262000 T 0220
|
||
END ELSE BEGIN ERROR(8); CURTYPE:=0 END; 40263000 T 0220
|
||
END ELSE BEGIN ERROR(1); CURTYPE:=0 END; 40264000 T 0222
|
||
END ELSE BEGIN ERROR(9); CURTYPE:=0 END; 40265000 T 0224
|
||
END ELSE 40266000 T 0226
|
||
BEGIN 40267000 T 0226
|
||
IF CURSY=IDENTIFIER THEN 40268000 T 0227
|
||
BEGIN 40269000 T 0227
|
||
SEARCH; 40270000 T 0228
|
||
IF FOUND THEN 40271000 T 0228
|
||
BEGIN 40272000 T 0229
|
||
IF THISID.IDCLASS≠PARAM.PARAMKIND THEN ERROR(91); 40273000 T 0229
|
||
PUTID("V",1000×THISLEVEL+THISINDEX,5); 40274000 T 0232
|
||
IF TYPETAB1[THISID.TYPE].FORM=SET THEN %601- 40274200 C 0248
|
||
BEGIN % %601- 40274220 C 0250
|
||
GEN(",",1,7); % %601- 40274240 C 0251
|
||
GENID("W",1000×THISLEVEL+THISINDEX,5); % %601- 40274260 C 0252
|
||
END; % %601- 40274280 C 0255
|
||
CURTYPE:=IF THISID.IDCLASS=FUNC THEN THISID.TYPE ELSE 0; 40275000 T 0255
|
||
INSYMBOL; 40276000 T 0259
|
||
END ELSE BEGIN ERROR(1); CURTYPE:=0 END; 40277000 T 0259
|
||
END ELSE BEGIN ERROR(9); CURTYPE:=0 END; 40278000 T 0261
|
||
END; 40279000 T 0263
|
||
CHECKTYPES(PTYPE,CURTYPE); 40280000 T 0263
|
||
NPARS:=NPARS-1; 40281000 T 0264
|
||
IF CURSY=COMMA THEN PUTSYM(","); 40282000 T 0265
|
||
END UNTIL CURSY≠COMMA; 40283000 T 0273
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(89); SKIP(RPAR) END; 40284000 T 0275
|
||
EXIT: PUTSYM(")"); 40285000 T 0277
|
||
IF CURSY=RPAR THEN INSYMBOL; 40286000 T 0284
|
||
END; 40287000 T 0286
|
||
IF NPARS>0 AND NOT FORMALPROC THEN ERROR(3); 40288000 T 0286
|
||
CURMODE:=NUMBER; 40289000 T 0289
|
||
END OF PASSPARAMS; 40290000 T 0290
|
||
35 IS 297 LONG, NEXT SEG 2
|
||
40291000 T 0082
|
||
40292000 T 0082
|
||
PROCEDURE FACTOR; %*** FACTOR *** 40293000 T 0082
|
||
BEGIN %************** 40294000 T 0082
|
||
INTEGER STARTSYM,STYPE,T; 40295000 T 0082
|
||
START OF SEGMENT ********** 36
|
||
BOOLEAN FIRST, SPLITTED; % %601- 40296000 P 0000
|
||
REAL VAL; 40297000 T 0000
|
||
DEFINE T1 = T #; % USED AT 40558000 %700- 40298000 P 0000
|
||
40310000 T 0000
|
||
CURMODE:=NUMBER; 40311000 T 0000
|
||
IF CURSY=IDENTIFIER THEN 40312000 T 0000
|
||
BEGIN 40313000 T 0001
|
||
SEARCH; 40314000 T 0002
|
||
IF FOUND THEN 40315000 T 0002
|
||
BEGIN 40316000 T 0002
|
||
IF THISID.IDCLASS=VAR OR 40317000 T 0003
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) 40318000 T 0004
|
||
THEN VARIABLE ELSE 40319000 T 0005
|
||
IF THISID.IDCLASS=CONST THEN 40320000 T 0008
|
||
BEGIN 40321000 T 0009
|
||
IF THISID.INFO≤1023 THEN PUTCONST(THISID.INFO) 40322000 T 0010
|
||
ELSE PUTCONST(CONSTTAB[THISID.INFO-1023]); 40323000 T 0011
|
||
CURTYPE:=THISID.TYPE; CURMODE:=NUMBER; 40324000 T 0039
|
||
INSYMBOL; 40325000 T 0041
|
||
END ELSE 40326000 T 0042
|
||
IF THISID.IDCLASS=FUNC THEN 40327000 T 0042
|
||
BEGIN 40328000 T 0044
|
||
IF THISTAB=0 THEN %*** INTRINSIC FUNCTION *** 40329000 T 0044
|
||
BEGIN 40330000 T 0045
|
||
%700- 40331000 C 0045
|
||
PROCEDURE PARAMETER; %*** CHECK THAT THE FUNCTION HAS 1 PARAM. 40332000 C 0045
|
||
START OF SEGMENT ********** 37
|
||
BEGIN %700- 40333000 C 0000
|
||
INSYMBOL; %700- 40334000 C 0000
|
||
IF CURSY=LPAR %700- 40335000 C 0000
|
||
THEN BEGIN %700- 40336000 C 0000
|
||
PUTSYM("("); INSYMBOL; EXPRESSION; %700- 40337000 C 0001
|
||
IF TYPETAB1[CURTYPE].FORM=NUMERIC THEN CURTYPE:=INTTYPE; 40338000 C 0009
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(3); SKIP(RPAR) END; %700- 40339000 C 0012
|
||
PUTSYM(")"); IF CURSY=RPAR THEN INSYMBOL; %700- 40340000 C 0015
|
||
END ELSE ERROR(3); % OR ERROR(58) %700- 40341000 C 0023
|
||
END OF PARAMETER; %700- 40342000 C 0024
|
||
%700- 40350000 P 0025
|
||
IF CURNAME1="3000ABS" THEN % "ABS" 40351000 T 0025
|
||
BEGIN 40352000 T 0025
|
||
PUTTEXT(" ABS"); PARAMETER; 40353000 T 0026
|
||
IF CURTYPE≠REALTYPE AND CURTYPE≠INTTYPE THEN ERROR(67); 40354000 T 0034
|
||
END ELSE 40355000 T 0037
|
||
IF CURNAME1="3000CHR" THEN % "CHR" 40356000 T 0037
|
||
BEGIN 40357000 T 0039
|
||
INSYMBOL; 40358000 T 0040
|
||
IF CURSY=LPAR THEN 40359000 T 0040
|
||
BEGIN INSYMBOL; CHECKEXPR(0,63); 40360000 T 0041
|
||
IF TYPETAB1[CURTYPE].FORM≠NUMERIC THEN ERROR(67); 40361000 T 0043
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 40362000 T 0046
|
||
IF CURSY=RPAR THEN INSYMBOL; 40363000 T 0049
|
||
END ELSE ERROR(58); 40364000 T 0050
|
||
CURTYPE:=CHARTYPE; 40365000 T 0053
|
||
END ELSE 40366000 T 0054
|
||
IF CURNAME1="3000EOF" OR % "EOF"/"EOLN" 40367000 T 0054
|
||
CURNAME1="400EOLN" THEN 40368000 T 0055
|
||
BEGIN 40369000 T 0056
|
||
FIRST:=CURNAME1="3000EOF"; 40370000 T 0057
|
||
FILEPARAM(INPUTFILE); 40371000 T 0058
|
||
PUTID("I",FILENAME,5); 40372000 T 0059
|
||
PUTTEXT(IF FIRST THEN " .EOF" ELSE " .EOLN"); 40373000 T 0076
|
||
IF LPARFOUND THEN 40374000 T 0084
|
||
BEGIN 40375000 T 0084
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 40376000 T 0084
|
||
IF CURSY=RPAR THEN INSYMBOL; 40377000 T 0087
|
||
END; 40378000 T 0089
|
||
CURTYPE:=BOOLTYPE; 40379000 T 0089
|
||
END ELSE 40380000 T 0090
|
||
IF CURNAME1="3000ODD" THEN % "ODD" 40381000 T 0090
|
||
BEGIN 40382000 T 0093
|
||
PUTTEXT(" ODD"); PARAMETER; 40383000 T 0094
|
||
IF CURTYPE≠INTTYPE THEN ERROR(67); 40384000 T 0102
|
||
CURTYPE:=BOOLTYPE; CURMODE:=BITPATTERN; 40385000 T 0104
|
||
END ELSE 40386000 T 0106
|
||
IF CURNAME1="3000ORD" THEN % "ORD" 40387000 T 0106
|
||
BEGIN 40388000 T 0108
|
||
PUTSYM("("); INSYMBOL; 40389000 T 0109
|
||
IF CURSY=LPAR THEN 40390000 T 0118
|
||
BEGIN 40391000 T 0118
|
||
INSYMBOL; EXPRESSION; 40392000 T 0119
|
||
IF TYPETAB1[CURTYPE].FORM>CHAR THEN ERROR(67); 40393000 T 0120
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 40394000 T 0123
|
||
INSYMBOL; 40395000 T 0125
|
||
END ELSE ERROR(58); 40396000 T 0126
|
||
CURTYPE:=INTTYPE; PUTSYM(")"); 40397000 T 0127
|
||
END ELSE 40398000 T 0135
|
||
IF CURNAME1="400PRED" OR % "PRED"/"SUCC" 40399000 T 0135
|
||
CURNAME1="400SUCC" THEN 40400000 T 0136
|
||
BEGIN 40401000 T 0137
|
||
FIRST:=CURNAME1="400PRED"; 40402000 T 0137
|
||
PUTTEXT("CHECK("); INSYMBOL; 40403000 T 0139
|
||
IF CURSY=LPAR THEN 40404000 T 0148
|
||
BEGIN 40405000 T 0148
|
||
INSYMBOL; EXPRESSION; 40406000 T 0149
|
||
PUTSYM(IF FIRST THEN "-" ELSE "+"); PUTSYM("1"); 40407000 T 0150
|
||
IF TYPETAB1[CURTYPE].FORM>CHAR THEN ERROR(67); 40408000 T 0166
|
||
PUTSYM(","); PUTCONST(TYPETAB2[CURTYPE]); 40409000 T 0169
|
||
PUTSYM(","); PUTCONST(TYPETAB3[CURTYPE]); 40410000 T 0189
|
||
PUTSYM(","); PUTCONST(CARDCNT); 40411000 T 0209
|
||
PUTSYM(")"); 40412000 T 0229
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 40413000 T 0236
|
||
IF CURSY=RPAR THEN INSYMBOL; 40414000 T 0239
|
||
END ELSE BEGIN ERROR(58); CURTYPE:=0 END; 40415000 T 0240
|
||
END ELSE 40416000 T 0242
|
||
IF CURNAME1="50ROUND" THEN % "ROUND" 40417000 T 0242
|
||
BEGIN 40418000 T 0244
|
||
PUTTEXT(" ROUND"); PARAMETER; 40419000 T 0244
|
||
IF CURTYPE≠REALTYPE THEN ERROR(67); 40420000 T 0252
|
||
NUMSYMS:=NUMSYMS-1; PUTSYM(","); 40421000 T 0254
|
||
PUTCONST(CARDCNT); PUTSYM(")"); 40422000 T 0263
|
||
CURTYPE:=INTTYPE; 40423000 T 0283
|
||
END ELSE 40424000 T 0284
|
||
IF CURNAME1="3000SQR" THEN % "SQR" 40425000 T 0284
|
||
BEGIN 40426000 T 0285
|
||
PUTTEXT(" SQR"); PARAMETER; 40427000 T 0285
|
||
NUMSYMS:=NUMSYMS-1; PUTSYM(","); 40428000 T 0293
|
||
PUTCONST(CARDCNT); PUTSYM(")"); 40429000 T 0302
|
||
IF CURTYPE≠REALTYPE AND CURTYPE≠INTTYPE THEN ERROR(67); 40430000 T 0322
|
||
END ELSE 40431000 T 0325
|
||
IF CURNAME1="50TRUNC" THEN % "TRUNC" 40432000 T 0325
|
||
BEGIN 40433000 T 0326
|
||
PUTTEXT(" TRUNC"); PARAMETER; 40434000 T 0327
|
||
NUMSYMS:=NUMSYMS-1; PUTSYM(","); 40435000 T 0335
|
||
PUTCONST(CARDCNT); PUTSYM(")"); 40436000 T 0344
|
||
IF CURTYPE≠REALTYPE THEN ERROR(67); 40437000 T 0364
|
||
CURTYPE:=INTTYPE; 40438000 T 0366
|
||
END ELSE 40439000 T 0367
|
||
IF CURNAME1="6CONCAT" THEN % "CONCAT" 40440000 T 0367
|
||
CONCAT ELSE 40441000 T 0368
|
||
IF CURNAME1="400TIME" THEN % "TIME" 40442000 T 0369
|
||
BEGIN 40443000 T 0371
|
||
PUTTEXT("(TIME("); PUTTEXT("1)/60)"); 40444000 T 0372
|
||
CURTYPE:=REALTYPE; INSYMBOL 40445000 T 0386
|
||
END ELSE 40446000 T 0387
|
||
IF CURNAME1="400DATE" THEN % "DATE" 40447000 T 0387
|
||
BEGIN 40448000 T 0390
|
||
PUTTEXT("CURDAT"); 40449000 T 0391
|
||
CURTYPE:=ALFATYPE; INSYMBOL; 40450000 T 0398
|
||
END ELSE 40451000 T 0399
|
||
IF CURNAME1="7CPUTIM" AND CURNAME2="E" THEN % "CPUTIME" 40452000 P 0399
|
||
BEGIN 40453000 T 0403
|
||
PUTTEXT("(TIME("); PUTTEXT("2)/60)"); 40454000 T 0404
|
||
CURTYPE:=REALTYPE; INSYMBOL; 40455000 T 0418
|
||
END ELSE 40456000 T 0419
|
||
IF CURNAME1="6IOTIME" THEN % "IOTIME" 40457000 T 0419
|
||
BEGIN 40458000 T 0422
|
||
PUTTEXT("(TIME("); PUTTEXT("3)/60)"); 40459000 T 0423
|
||
CURTYPE:=REALTYPE; INSYMBOL; 40460000 T 0437
|
||
END ELSE 40461000 T 0438
|
||
IF CURNAME1="7WEEKDA" AND CURNAME2="Y" THEN % "WEEKDAY" 40462000 T 0438
|
||
BEGIN 40463000 T 0442
|
||
PUTTEXT("WEEKDA"); 40464000 T 0443
|
||
CURTYPE:=ALFATYPE; INSYMBOL; 40465000 T 0450
|
||
END ELSE IF CURNAME1="400USER" THEN % "USER" 40466000 T 0451
|
||
BEGIN 40467000 T 0454
|
||
PUTTEXT(" TIME"); PUTTEXT(" (-1)"); 40468000 T 0455
|
||
CURTYPE:=ALFATYPE; INSYMBOL; 40469000 T 0469
|
||
END ELSE % "SIN","COS" ETC. 40470000 T 0470
|
||
BEGIN 40471000 T 0470
|
||
PUTTEXT(IF CURNAME1="3000SIN" THEN " SIN" ELSE 40472000 T 0473
|
||
IF CURNAME1="3000COS" THEN " COS" ELSE 40473000 T 0473
|
||
IF CURNAME1="6ARCTAN" THEN "ARCTAN" ELSE 40474000 T 0473
|
||
IF CURNAME1="400SQRT" THEN " SQRT" ELSE 40475000 T 0473
|
||
IF CURNAME1="3000EXP" THEN " EXP" ELSE 40476000 T 0473
|
||
" LN"); 40477000 T 0473
|
||
PARAMETER; 40478000 T 0488
|
||
IF CURTYPE≠REALTYPE AND CURTYPE≠INTTYPE THEN ERROR(67); 40479000 T 0489
|
||
CURTYPE:=REALTYPE; 40480000 T 0492
|
||
END; 40481000 T 0493
|
||
END OF INTRINSIC FUNCTIONS ELSE 40482000 T 0493
|
||
37 IS 517 LONG, NEXT SEG 36
|
||
BEGIN 40483000 T 0047
|
||
T:=THISID.TYPE; 40484000 T 0047
|
||
PASSPARAMS; 40485000 T 0048
|
||
CURTYPE:=T; 40486000 T 0049
|
||
END; 40487000 T 0050
|
||
END OF FUNCTIONS ELSE 40488000 T 0050
|
||
IF THISID.IDCLASS=PROC THEN 40489000 T 0050
|
||
BEGIN 40490000 T 0051
|
||
ERROR(68); PASSPARAMS; 40491000 T 0052
|
||
CURTYPE:=0; 40492000 T 0053
|
||
END ELSE BEGIN ERROR(69); CURTYPE:=0; INSYMBOL END; 40493000 T 0054
|
||
END ELSE BEGIN ERROR(1); CURTYPE:=0; INSYMBOL END; 40494000 T 0056
|
||
END OF IDENTIFIER ELSE 40495000 T 0059
|
||
IF CURSY≤CHARCONST THEN 40496000 T 0059
|
||
BEGIN 40497000 T 0060
|
||
CONSTANT(VAL,CURTYPE); PUTCONST(VAL); 40498000 T 0061
|
||
END ELSE 40499000 T 0074
|
||
IF CURSY=NOTSY THEN 40500000 T 0074
|
||
BEGIN 40501000 T 0075
|
||
PUTTEXT(" NOT "); PUTDUMMY; STARTSYM:=NUMSYMS; 40502000 T 0076
|
||
INSYMBOL; FACTOR; 40503000 T 0090
|
||
IF CURTYPE>0 THEN 40504000 T 0091
|
||
IF CURTYPE≠BOOLTYPE THEN BEGIN ERROR(17); CURTYPE:=0 END; 40505000 T 0092
|
||
IF CURMODE=NUMBER THEN 40506000 T 0095
|
||
BEGIN SYMTAB[STARTSYM]:=" B("; PUTSYM(")"); 40507000 T 0096
|
||
CURMODE:=BITPATTERN; 40508000 T 0106
|
||
END; 40509000 T 0107
|
||
END ELSE 40510000 T 0107
|
||
IF CURSY=NILSY THEN 40511000 T 0107
|
||
BEGIN 40512000 T 0108
|
||
PUTCONST(0); CURTYPE:=NILTYPE; 40513000 T 0109
|
||
INSYMBOL; 40514000 T 0122
|
||
END ELSE 40515000 T 0122
|
||
IF CURSY=LPAR THEN 40516000 T 0122
|
||
BEGIN 40517000 T 0124
|
||
PUTSYM("("); 40518000 T 0124
|
||
INSYMBOL; EXPRESSION; 40519000 T 0131
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 40520000 T 0132
|
||
PUTSYM(")"); 40521000 T 0135
|
||
INSYMBOL; 40522000 T 0141
|
||
END ELSE 40523000 T 0142
|
||
IF CURSY=LBRACKET THEN %*** SET CONSTANT *** 40524000 T 0142
|
||
BEGIN 40525000 T 0143
|
||
INSYMBOL; 40526000 T 0144
|
||
IF CURSY=RBRACKET THEN 40527000 T 0144
|
||
BEGIN 40528000 T 0145
|
||
PUTTEXT("SETBS("); PUTTEXT(" 3,2,"); PUTCONST(CARDCNT); % 40529000 P 0145
|
||
PUTSYM(")"); % %601- 40529300 C 0172
|
||
CURTYPE := EMPTYSET; CURMODE := NUMBER; % %601- 40529600 C 0179
|
||
INSYMBOL; 40530000 T 0180
|
||
END ELSE 40531000 T 0181
|
||
BEGIN 40532000 T 0181
|
||
FIRST:=TRUE; 40533000 T 0181
|
||
STARTSYM := NUMSYMS + 1; % %601- 40533500 C 0182
|
||
DO BEGIN 40534000 T 0183
|
||
IF FIRST THEN FIRST:=FALSE ELSE INSYMBOL; 40535000 T 0184
|
||
PUTTEXT(" SETB("); % %601- 40536000 P 0186
|
||
EXPRESSION; 40537000 T 0192
|
||
IF STYPE=0 THEN 40538000 T 0192
|
||
BEGIN STYPE:=CURTYPE; 40539000 T 0193
|
||
IF TYPETAB1[CURTYPE].FORM>CHAR THEN ERROR(72); 40540000 T 0194
|
||
END ELSE CHECKTYPES(STYPE,CURTYPE); 40541000 T 0197
|
||
IF CURSY=DOUBLEDOT THEN 40542000 T 0200
|
||
BEGIN 40543000 T 0200
|
||
PUTSYM(","); SYMTAB[STARTSYM] := "SETBS("; % %601- 40544000 P 0201
|
||
INSYMBOL; EXPRESSION; 40545000 T 0209
|
||
IF STYPE=0 THEN 40546000 T 0210
|
||
BEGIN STYPE:=CURTYPE; 40547000 T 0211
|
||
IF TYPETAB1[CURTYPE].FORM>CHAR THEN ERROR(72); 40548000 T 0212
|
||
END ELSE CHECKTYPES(STYPE,CURTYPE); 40549000 T 0215
|
||
END; 40550000 T 0218
|
||
PUTSYM(","); PUTCONST(CARDCNT); PUTSYM(")"); 40551000 T 0218
|
||
IF SPLITTED THEN PUTSYM(")"); % %601- 40551500 C 0244
|
||
IF CURSY=COMMA THEN % %601- 40552000 P 0251
|
||
BEGIN % %601- 40552200 C 0252
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SUNIO("; % %601- 40552400 C 0253
|
||
PUTSYM(","); % %601- 40552600 C 0255
|
||
SPLITTED := TRUE; % %601- 40552800 C 0263
|
||
END; % %601- 40552850 C 0264
|
||
END UNTIL CURSY≠COMMA; 40553000 T 0264
|
||
IF CURSY≠RBRACKET THEN 40554000 T 0265
|
||
BEGIN ERROR(59); SKIP(RBRACKET); 40555000 T 0266
|
||
IF CURSY=RBRACKET THEN INSYMBOL; 40556000 T 0268
|
||
END ELSE INSYMBOL; 40557000 T 0270
|
||
NEWTYPE; T1 := SET; T1.SIZE := 2; T1.STRUCT := 0; % %601- 40558000 P 0271
|
||
T1.SETTYPE:=STYPE; TYPETAB1[TYPEINDEX]:=T1; 40559000 T 0280
|
||
CURTYPE:=TYPEINDEX; 40560000 T 0283
|
||
CURMODE := NUMBER; % %601- 40561000 P 0284
|
||
END; 40562000 T 0284
|
||
END OF SET CONSTANT ELSE BEGIN ERROR(99); INSYMBOL END; 40563000 T 0284
|
||
END OF FACTOR; 40564000 T 0286
|
||
36 IS 292 LONG, NEXT SEG 2
|
||
40565000 T 0082
|
||
40566000 T 0082
|
||
PROCEDURE TERM; %*** TERM *** 40567000 T 0082
|
||
BEGIN %************ 40568000 T 0082
|
||
INTEGER STARTSYM,MODE,TYPE1,MULOPTR,F; 40569000 T 0082
|
||
START OF SEGMENT ********** 38
|
||
PUTDUMMY; STARTSYM:=NUMSYMS; 40570000 T 0000
|
||
FACTOR; 40571000 T 0006
|
||
MODE:=CURMODE; 40572000 T 0007
|
||
WHILE CURSY≥ASTERISK AND CURSY≤MODSY DO % "*","/","DIV","MOD","AND" 40573000 T 0007
|
||
BEGIN 40574000 T 0010
|
||
TYPE1:=CURTYPE; MULOPTR:=CURSY; 40575000 T 0010
|
||
F:=TYPETAB1[TYPE1].FORM; 40576000 T 0011
|
||
IF F=NUMERIC OR F=FLOATING THEN 40577000 T 0013
|
||
BEGIN 40578000 T 0015
|
||
MODE:=NUMBER; 40579000 T 0015
|
||
IF CURSY=ASTERISK THEN PUTSYM("×") ELSE 40580000 T 0016
|
||
IF CURSY=SLASH THEN PUTSYM("/") ELSE 40581000 T 0025
|
||
IF CURSY=ANDSY THEN ERROR(64) ELSE 40582000 T 0034
|
||
BEGIN 40583000 T 0036
|
||
IF F=FLOATING THEN ERROR(64); 40584000 T 0037
|
||
IF CURSY=DIVSY THEN PUTTEXT(" DIV") ELSE PUTTEXT(" MOD"); 40585000 T 0039
|
||
END END ELSE 40586000 T 0053
|
||
IF CURTYPE=BOOLTYPE THEN % %601- 40587000 P 0053
|
||
BEGIN 40588000 T 0056
|
||
MODE:=BITPATTERN; 40589000 T 0057
|
||
IF CURMODE≠MODE THEN 40590000 T 0058
|
||
BEGIN SYMTAB[STARTSYM]:=" B("; PUTSYM(")") END; 40591000 T 0058
|
||
PUTTEXT(" AND "); 40592000 T 0068
|
||
IF CURSY NEQ ANDSY THEN ERROR(64); %601- 40593000 P 0074
|
||
END ELSE % %601- 40593100 C 0076
|
||
IF F=SET THEN % %601- 40593200 C 0076
|
||
BEGIN % %601- 40593300 C 0078
|
||
IF CURSY=ASTERISK THEN % %601- 40593400 C 0079
|
||
BEGIN % %601- 40593500 C 0080
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM] := "SINTS("; % %601- 40593600 C 0080
|
||
PUTSYM(","); % %601- 40593700 C 0082
|
||
END ELSE ERROR(64); % %601- 40593800 C 0090
|
||
MODE := NUMBER; % %601- 40593900 C 0091
|
||
END ELSE ERROR(64); 40594000 T 0092
|
||
PUTDUMMY; STARTSYM:=NUMSYMS; 40595000 T 0093
|
||
INSYMBOL; FACTOR; 40596000 T 0100
|
||
IF CURTYPE>0 AND TYPE1>0 THEN 40597000 T 0101
|
||
BEGIN 40598000 T 0103
|
||
IF CURTYPE≠TYPE1 THEN 40599000 T 0103
|
||
BEGIN 40600000 T 0104
|
||
IF TYPETAB1[TYPE1].FORM≠NUMERIC OR CURTYPE≠REALTYPE THEN 40601000 T 0104
|
||
CHECKTYPES(TYPE1,CURTYPE); 40602000 T 0107
|
||
IF TYPE1=REALTYPE THEN CURTYPE:=REALTYPE; 40603000 T 0108
|
||
END; 40604000 T 0110
|
||
IF CURTYPE=REALTYPE AND MULOPTR≥DIVSY THEN ERROR(65); 40605000 T 0110
|
||
END; 40606000 T 0113
|
||
IF MULOPTR=SLASH THEN CURTYPE:=REALTYPE; 40607000 T 0113
|
||
IF CURTYPE=0 THEN CURTYPE:=TYPE1; 40608000 T 0115
|
||
IF F=SET THEN PUTSYM(")"); % %601- 40608500 C 0117
|
||
END OF WHILE LOOP; 40609000 T 0127
|
||
IF MODE=BITPATTERN AND CURMODE≠MODE THEN 40610000 T 0128
|
||
BEGIN SYMTAB[STARTSYM]:=" B("; PUTSYM(")") END; 40611000 T 0129
|
||
CURMODE:=MODE; 40612000 T 0139
|
||
END OF TERM; 40613000 T 0140
|
||
38 IS 144 LONG, NEXT SEG 2
|
||
40614000 T 0082
|
||
40615000 T 0082
|
||
PROCEDURE SIMPLEEXPRESSION; %*** SIMPLE EXPRESSION *** 40616000 T 0082
|
||
BEGIN %************************* 40617000 T 0082
|
||
INTEGER STARTSYM,FIRSTSYM,MODE,TYPE1,F; %603- 40618000 P 0082
|
||
START OF SEGMENT ********** 39
|
||
BOOLEAN SIGNED; 40619000 T 0000
|
||
40620000 T 0000
|
||
PUTDUMMY; STARTSYM := FIRSTSYM := NUMSYMS; %603- 40621000 P 0000
|
||
IF CURSY=PLUS OR CURSY=MINUS THEN 40622000 T 0007
|
||
BEGIN SIGNED:=TRUE; 40623000 T 0008
|
||
PUTSYM(IF CURSY=PLUS THEN"+" ELSE "-"); 40624000 T 0010
|
||
INSYMBOL; 40625000 T 0020
|
||
END; 40626000 T 0021
|
||
TERM; 40627000 T 0021
|
||
MODE:=CURMODE; 40628000 T 0021
|
||
IF SIGNED THEN 40629000 T 0022
|
||
BEGIN F:=TYPETAB1[CURTYPE].FORM; 40630000 T 0022
|
||
IF F≠NUMERIC AND F≠FLOATING THEN ERROR(29); 40631000 T 0024
|
||
END; 40632000 T 0027
|
||
WHILE CURSY≥PLUS AND CURSY≤ORSY DO % "+","-","OR" 40633000 T 0027
|
||
BEGIN 40634000 T 0030
|
||
TYPE1:=CURTYPE; F:=TYPETAB1[TYPE1].FORM; 40635000 T 0030
|
||
IF F=NUMERIC OR F=FLOATING THEN 40636000 T 0032
|
||
BEGIN MODE:=NUMBER; 40637000 T 0034
|
||
IF CURSY=PLUS THEN PUTSYM("+") ELSE 40638000 T 0035
|
||
IF CURSY=MINUS THEN PUTSYM("-") ELSE ERROR(64); 40639000 T 0043
|
||
END ELSE 40640000 T 0053
|
||
IF CURTYPE=BOOLTYPE THEN 40641000 T 0053
|
||
BEGIN 40642000 T 0054
|
||
MODE:=BITPATTERN; 40643000 T 0055
|
||
IF CURMODE≠MODE THEN 40644000 T 0055
|
||
BEGIN SYMTAB[STARTSYM]:=" B("; PUTSYM(")") END; 40645000 T 0056
|
||
IF CURSY=ORSY THEN PUTTEXT(" OR") ELSE ERROR(64); 40646000 T 0066
|
||
END ELSE 40647000 T 0075
|
||
IF F=SET THEN 40648000 T 0075
|
||
BEGIN 40649000 T 0077
|
||
SPLIT(FIRSTSYM,1); %603- 40650000 P 0077
|
||
IF CURSY = PLUS THEN SYMTAB[FIRSTSYM] := "SUNIO(" ELSE %603- 40651000 P 0078
|
||
IF CURSY = MINUS THEN SYMTAB[FIRSTSYM] := "SDIFF(" ELSE %603- 40652000 P 0081
|
||
ERROR(64); %603- 40653000 P 0085
|
||
PUTSYM(","); MODE := NUMBER; % %601- 40654000 P 0087
|
||
END ELSE ERROR(64); 40656000 T 0095
|
||
INSYMBOL; 40657000 T 0096
|
||
PUTDUMMY; STARTSYM:=NUMSYMS; 40658000 T 0097
|
||
TERM; 40659000 T 0103
|
||
IF CURTYPE>0 AND TYPE1>0 THEN 40660000 T 0104
|
||
BEGIN 40661000 T 0105
|
||
IF CURTYPE≠TYPE1 THEN 40662000 T 0106
|
||
BEGIN 40663000 T 0107
|
||
IF TYPETAB1[TYPE1].FORM≠NUMERIC OR CURTYPE≠REALTYPE THEN 40664000 T 0107
|
||
CHECKTYPES(TYPE1,CURTYPE); 40665000 T 0110
|
||
IF TYPE1=REALTYPE THEN CURTYPE:=REALTYPE; 40666000 T 0111
|
||
END END; 40667000 T 0113
|
||
IF CURTYPE=0 THEN CURTYPE:=TYPE1; 40668000 T 0113
|
||
IF F=SET THEN PUTSYM(")"); % %601- 40668500 C 0115
|
||
END OF WHILE LOOP; 40669000 T 0124
|
||
IF MODE=BITPATTERN AND CURMODE≠BITPATTERN THEN 40670000 T 0125
|
||
BEGIN SYMTAB[STARTSYM]:=" B("; PUTSYM(")") END; 40671000 T 0126
|
||
CURMODE:=MODE; 40672000 T 0136
|
||
END OF SIMPLEEXPRESSION; 40673000 T 0137
|
||
39 IS 142 LONG, NEXT SEG 2
|
||
40674000 T 0082
|
||
40675000 T 0082
|
||
PROCEDURE EXPRESSION; %*** EXPRESSION *** 40676000 T 0082
|
||
BEGIN %****************** 40677000 T 0082
|
||
INTEGER STARTSYM,FIRSTSYM,TYPE1,RELOPTR,F; 40678000 T 0082
|
||
START OF SEGMENT ********** 40
|
||
BOOLEAN CALLGEN; 40679000 T 0000
|
||
40680000 T 0000
|
||
EXPRLEVEL:=EXPRLEVEL+1; 40681000 T 0000
|
||
IF EXPRLEVEL = 1 THEN 40682000 T 0001
|
||
BEGIN 40683000 T 0002
|
||
PUTDUMMY; 40684000 T 0002
|
||
FIRSTSYM := NUMSYMS; 40685000 T 0008
|
||
END; 40686000 T 0009
|
||
PUTDUMMY; STARTSYM:=NUMSYMS; 40687000 T 0009
|
||
SIMPLEEXPRESSION; 40689000 T 0017
|
||
IF CURSY≥LSSSY AND CURSY≤INSY THEN % "<","≤","≥",">","=","≠","IN" 40690000 T 0017
|
||
BEGIN 40691000 T 0019
|
||
TYPE1:=CURTYPE; F:=TYPETAB1[TYPE1].FORM; 40692000 T 0020
|
||
RELOPTR:=CURSY; 40693000 T 0022
|
||
IF F≤ALFA THEN 40694000 T 0023
|
||
BEGIN 40695000 T 0023
|
||
IF CURMODE=BITPATTERN THEN 40696000 T 0024
|
||
BEGIN SYMTAB[STARTSYM]:=" REAL("; PUTSYM(")") END; 40697000 T 0025
|
||
IF CURSY=LSSSY THEN PUTSYM("<") ELSE 40698000 T 0035
|
||
IF CURSY=LEQSY THEN PUTSYM("≤") ELSE 40699000 T 0043
|
||
IF CURSY=GEQSY THEN PUTSYM("≥") ELSE 40700000 T 0052
|
||
IF CURSY=GTRSY THEN PUTSYM(">") ELSE 40701000 T 0060
|
||
IF CURSY=EQLSY THEN PUTSYM("=") ELSE 40702000 T 0069
|
||
IF CURSY=NEQSY THEN PUTSYM("≠") ELSE 40703000 T 0077
|
||
BEGIN 40704000 T 0086
|
||
IF F≥FLOATING THEN ERROR(64); 40705000 T 0086
|
||
SYMTAB[STARTSYM]:="INTST("; PUTSYM(","); CALLGEN:=TRUE; 40706000 T 0088
|
||
END; 40707000 T 0098
|
||
END ELSE 40708000 T 0098
|
||
IF F=SET THEN 40709000 T 0098
|
||
BEGIN 40710000 T 0099
|
||
IF CURMODE=BITPATTERN THEN 40711000 T 0100
|
||
BEGIN SYMTAB[STARTSYM+1]:=" REAL("; PUTSYM(")") END; 40712000 T 0100
|
||
IF CURSY=EQLSY THEN SYMTAB[STARTSYM] := "SEQUA(" % %601- 40713000 P 0111
|
||
ELSE %601- 40713150 C 0113
|
||
IF CURSY=NEQSY THEN % %601- 40713300 C 0114
|
||
BEGIN % %601- 40714000 P 0116
|
||
SPLIT(STARTSYM,1); SYMTAB[STARTSYM]:= " NOT "; % %601- 40714150 C 0117
|
||
SYMTAB[STARTSYM+1] := "SEQUA("; % %601- 40714300 C 0119
|
||
END ELSE 40715000 T 0121
|
||
BEGIN 40716000 T 0121
|
||
IF CURSY=LEQSY THEN SYMTAB[STARTSYM]:="INCL1(" ELSE 40717000 T 0124
|
||
IF CURSY=GEQSY THEN SYMTAB[STARTSYM]:="INCL2(" ELSE ERROR(64); 40718000 T 0126
|
||
PUTSYM(","); CALLGEN:=TRUE; 40719000 T 0132
|
||
END END ELSE 40720000 T 0140
|
||
IF F=POINTERS THEN 40721000 T 0140
|
||
BEGIN 40722000 T 0141
|
||
IF CURSY=EQLSY THEN PUTSYM("=") ELSE 40723000 T 0142
|
||
IF CURSY=NEQSY THEN PUTSYM("≠") ELSE ERROR(64); 40724000 T 0150
|
||
END ELSE ERROR(64); 40725000 T 0159
|
||
INSYMBOL; 40726000 T 0161
|
||
PUTDUMMY; STARTSYM:=NUMSYMS; 40727000 T 0161
|
||
SIMPLEEXPRESSION; 40728000 T 0168
|
||
IF CURTYPE>0 AND TYPE1>0 THEN 40729000 T 0168
|
||
IF CURTYPE≠TYPE1 THEN 40730000 T 0170
|
||
IF RELOPTR≠INSY THEN 40731000 T 0171
|
||
BEGIN 40732000 T 0172
|
||
IF TYPETAB1[TYPE1].FORM≠NUMERIC OR CURTYPE≠REALTYPE THEN 40733000 T 0173
|
||
CHECKTYPES(TYPE1,CURTYPE); 40734000 T 0175
|
||
END ELSE 40735000 T 0177
|
||
IF TYPETAB1[CURTYPE].FORM≠SET THEN ERROR(66) 40736000 T 0177
|
||
ELSE CHECKTYPES(TYPE1,TYPETAB1[CURTYPE].SETTYPE); 40737000 T 0181
|
||
IF CURMODE=BITPATTERN THEN 40738000 T 0184
|
||
BEGIN SYMTAB[STARTSYM]:=" REAL("; PUTSYM(")") END; 40739000 T 0184
|
||
IF CALLGEN THEN PUTSYM(")"); 40740000 T 0194
|
||
CURTYPE:=BOOLTYPE; CURMODE:=BITPATTERN; 40741000 T 0202
|
||
END; 40742000 T 0203
|
||
EXPRLEVEL:=EXPRLEVEL-1; 40743000 T 0203
|
||
IF EXPRLEVEL=0 THEN 40744000 T 0204
|
||
BEGIN 40745000 T 0205
|
||
IF CURMODE=BITPATTERN THEN 40746000 T 0206
|
||
BEGIN 40747000 T 0206
|
||
SYMTAB[FIRSTSYM] := " REAL("; 40748000 T 0207
|
||
PUTSYM(")"); 40749000 T 0208
|
||
END; 40750000 T 0216
|
||
IF EXPINVARCNT=0 THEN WRITEEXPR; % %002- 40751000 P 0216
|
||
END; 40752000 T 0218
|
||
END OF EXPRESSION; 40753000 T 0218
|
||
40 IS 223 LONG, NEXT SEG 2
|
||
40754000 T 0082
|
||
40755000 T 0082
|
||
DEFINE BOOLEXPR= 40756000 T 0082
|
||
BEGIN 40757000 T 0082
|
||
PUTDUMMY; EXPRLEVEL:=1; EXPRESSION; 40758000 T 0082
|
||
IF CURTYPE>0 THEN IF CURTYPE≠BOOLTYPE THEN ERROR(17); 40759000 T 0082
|
||
IF CURMODE≠BITPATTERN THEN 40760000 T 0082
|
||
BEGIN SYMTAB[1]:=" B("; PUTSYM(")") END; 40761000 T 0082
|
||
EXPRLEVEL:=0; WRITEEXPR; 40762000 T 0082
|
||
END OF BOOLEAN#; 40763000 T 0082
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50001000 T 0082
|
||
% % 50002000 T 0082
|
||
% % 50003000 T 0082
|
||
% % 50004000 T 0082
|
||
% PART 5: INTRINSIC ROUTINES. % 50005000 T 0082
|
||
% ------------------- % 50006000 T 0082
|
||
% % 50007000 T 0082
|
||
% % 50008000 T 0082
|
||
% % 50009000 T 0082
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50010000 T 0082
|
||
50011000 T 0082
|
||
50012000 T 0082
|
||
PROCEDURE CONCAT; %*** "CONCAT" *** 50013000 T 0082
|
||
BEGIN %**************** 50014000 T 0082
|
||
DEFINE INTEXPR= 50015000 T 0082
|
||
START OF SEGMENT ********** 41
|
||
BEGIN INSYMBOL; EXPRESSION; 50016000 T 0000
|
||
IF CURTYPE>0 THEN 50017000 T 0000
|
||
IF TYPETAB1[CURTYPE].FORM≠NUMERIC THEN ERROR(17); 50018000 T 0000
|
||
END #; 50019000 T 0000
|
||
50020000 T 0000
|
||
PUTTEXT("CONCAT"); PUTSYM("("); 50021000 T 0000
|
||
INSYMBOL; 50022000 T 0013
|
||
IF CURSY=LPAR THEN 50023000 T 0014
|
||
BEGIN 50024000 T 0014
|
||
INSYMBOL; EXPRESSION; 50025000 T 0015
|
||
IF CURTYPE>0 THEN 50026000 T 0016
|
||
IF TYPETAB1[CURTYPE].FORM>ALFA THEN ERROR(17); 50027000 T 0017
|
||
IF CURSY=COMMA THEN 50028000 T 0020
|
||
BEGIN 50029000 T 0021
|
||
PUTSYM(","); INSYMBOL; EXPRESSION; 50030000 T 0021
|
||
IF CURTYPE>0 THEN 50031000 T 0029
|
||
IF TYPETAB1[CURTYPE].FORM>ALFA THEN ERROR(17); 50032000 T 0030
|
||
IF CURSY=COMMA THEN 50033000 T 0033
|
||
BEGIN 50034000 T 0034
|
||
PUTSYM(","); INTEXPR; 50035000 T 0034
|
||
IF CURSY=COMMA THEN 50036000 T 0046
|
||
BEGIN 50037000 T 0047
|
||
PUTSYM(","); INTEXPR; 50038000 T 0047
|
||
IF CURSY=COMMA THEN 50039000 T 0059
|
||
BEGIN 50040000 T 0060
|
||
PUTSYM(","); INTEXPR; 50041000 T 0060
|
||
PUTSYM(","); PUTCONST(CARDCNT); 50042000 T 0072
|
||
PUTSYM(")"); 50043000 T 0091
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(3); SKIP(RPAR) END; 50044000 T 0098
|
||
END ELSE BEGIN ERROR(3); SKIP(RPAR) END; 50045000 T 0101
|
||
END ELSE BEGIN ERROR(3); SKIP(RPAR) END; 50046000 T 0103
|
||
END ELSE BEGIN ERROR(3); SKIP(RPAR) END; 50047000 T 0105
|
||
END ELSE BEGIN ERROR(3); SKIP(RPAR) END; 50048000 T 0107
|
||
END ELSE BEGIN ERROR(3); SKIP(RPAR) END; 50049000 T 0109
|
||
CURTYPE := 0; % ALFATYPE OR REALTYPE %509- 50050000 P 0111
|
||
IF CURSY=RPAR THEN INSYMBOL; 50051000 T 0111
|
||
END OF CONCAT; 50052000 T 0113
|
||
41 IS 114 LONG, NEXT SEG 2
|
||
50053000 T 0082
|
||
50054000 T 0082
|
||
PROCEDURE PREAD(CHANGELINE); 50055000 T 0082
|
||
VALUE CHANGELINE; BOOLEAN CHANGELINE; 50056000 T 0082
|
||
BEGIN 50057000 T 0082
|
||
INTEGER FILEID,F; 50058000 T 0082
|
||
START OF SEGMENT ********** 42
|
||
GEN(" BEGIN",7,2); 50060000 T 0000
|
||
FILEPARAM(INPUTFILE); FILEID:=FILENAME; 50061000 T 0001
|
||
IF TYPETAB1[CURTYPE].FORM=FILES THEN ERROR(85); 50062000 T 0003
|
||
IF SYMKIND[CURSY]≠TERMINAL THEN 50063000 T 0005
|
||
BEGIN 50064000 T 0006
|
||
IF CURSY NEQ RPAR THEN 50065000 T 0007
|
||
DO BEGIN 50066000 T 0008
|
||
WHILE CURSY=COMMA DO INSYMBOL; 50067000 T 0009
|
||
IF CURSY=IDENTIFIER THEN 50068000 T 0013
|
||
BEGIN 50069000 T 0013
|
||
SEARCH; 50070000 T 0014
|
||
IF FOUND THEN 50071000 T 0014
|
||
BEGIN 50072000 T 0015
|
||
IF THISID.IDCLASS=VAR OR 50073000 T 0015
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN 50074000 T 0016
|
||
BEGIN 50075000 T 0019
|
||
VARIABLE; F:=TYPETAB1[CURTYPE].FORM; 50076000 T 0019
|
||
IF F=NUMERIC OR F=FLOATING OR F=CHAR THEN 50077000 T 0021
|
||
BEGIN 50078000 T 0024
|
||
GEN("PREAD(",6,2); WRITEEXPR; GEN(",",1,7); % %600- 50079000 P 0025
|
||
GENID("F",FILEID,5); GEN(",",1,7); % %600- 50082000 P 0028
|
||
GENID("V",FILEID,5); GEN(",",1,7); 50083000 T 0031
|
||
GENID("I",FILEID,5); GEN(",",1,7); 50084000 T 0034
|
||
IF F=NUMERIC THEN GENINT(2) ELSE 50085000 T 0037
|
||
IF F=FLOATING THEN GENINT(3) ELSE GENINT(1); 50086000 T 0039
|
||
IF F=NUMERIC THEN % %600- 50086010 C 0044
|
||
BEGIN % %600- 50086050 C 0045
|
||
GEN(",",1,7); GENINT(TYPETAB2[CURTYPE]); % %600- 50086100 C 0045
|
||
GEN(",",1,7); GENINT(TYPETAB3[CURTYPE]); % %600- 50086150 C 0048
|
||
END ELSE GEN(",0,0,",4,4); % %600- 50086200 C 0050
|
||
GEN(",",1,7); GENINT(CARDCNT); GEN(")",1,7); 50087000 T 0052
|
||
END ELSE BEGIN ERROR(82); INSYMBOL END; 50094000 T 0056
|
||
END ELSE BEGIN ERROR(8); INSYMBOL END; 50095000 T 0059
|
||
END ELSE BEGIN ERROR(1); INSYMBOL END; 50096000 T 0061
|
||
END ELSE ERROR(9); 50097000 T 0062
|
||
GEN(";",1,7); 50098000 T 0064
|
||
END UNTIL CURSY≠COMMA; 50099000 T 0065
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 50100000 T 0066
|
||
IF CURSY=RPAR THEN INSYMBOL; 50101000 T 0069
|
||
END; 50102000 T 0071
|
||
IF CHANGELINE THEN 50103000 T 0071
|
||
BEGIN 50104000 T 0071
|
||
GEN("RLINE(",6,2); GENID("F",FILEID,5); GEN(",",1,7); 50105000 T 0072
|
||
GENID("V",FILEID,5); GEN(",",1,7); 50106000 T 0076
|
||
GENID("I",FILEID,5); GEN(")",1,7); 50107000 T 0079
|
||
END; 50108000 T 0082
|
||
GEN("END",4,5); 50109000 T 0082
|
||
END OF PREAD; 50110000 T 0084
|
||
42 IS 90 LONG, NEXT SEG 2
|
||
50111000 T 0082
|
||
50112000 T 0082
|
||
PROCEDURE PWRITE(LINEFEED); 50113000 T 0082
|
||
VALUE LINEFEED; BOOLEAN LINEFEED; 50114000 T 0082
|
||
BEGIN 50115000 T 0082
|
||
INTEGER FILEID,F,I,LASTSY; 50116000 T 0082
|
||
START OF SEGMENT ********** 43
|
||
POINTER P; 50117000 T 0000
|
||
GEN(" BEGIN",7,2); 50118000 T 0000
|
||
FILEPARAM(OUTPUTFILE); FILEID:=FILENAME; 50119000 T 0001
|
||
IF TYPETAB1[CURTYPE].FORM=FILES THEN ERROR(85); 50120000 T 0003
|
||
IF SYMKIND[CURSY]≠TERMINAL THEN 50121000 T 0005
|
||
BEGIN 50122000 T 0006
|
||
IF CURSY NEQ RPAR THEN 50123000 T 0007
|
||
DO BEGIN 50124000 T 0008
|
||
WHILE CURSY=COMMA DO INSYMBOL; 50125000 T 0009
|
||
IF CURSY=ALFACONST AND CURLENGTH>7 THEN 50126000 T 0013
|
||
BEGIN 50127000 T 0014
|
||
GEN("WALFA(",6,2); GENID("F",FILEID,5); GEN(",",1,7); 50128000 T 0015
|
||
GENID("V",FILEID,5); GEN(",",1,7); 50129000 T 0019
|
||
GENID("I",FILEID,5); GEN(",",1,7); 50130000 T 0022
|
||
P:=STRINGPNT; 50131000 T 0025
|
||
FOR I:=1 STEP 7 UNTIL 80 DO 50132000 T 0026
|
||
IF I≤CURLENGTH THEN 50133000 T 0029
|
||
BEGIN 50134000 T 0029
|
||
IF ALGOLCNT<10 THEN WRITEALGOL; 50135000 T 0030
|
||
REPLACE ALGOLPNT:ALGOLPNT BY """, P:P FOR 7, """, ","; 50136000 T 0032
|
||
ALGOLCNT:=ALGOLCNT-10; 50137000 T 0043
|
||
END ELSE GEN("0,",2,6); 50138000 T 0045
|
||
GENINT(CURLENGTH); GEN(",",1,7); 50139000 T 0049
|
||
GENINT(CARDCNT); GEN(")",1,7); 50140000 T 0051
|
||
INSYMBOL; 50141000 T 0053
|
||
END OF ALFACONST ELSE 50142000 T 0054
|
||
BEGIN 50143000 T 0054
|
||
GEN("PWRITE(",7,1); GENID("F",FILEID,5); GEN(",",1,7); 50144000 T 0054
|
||
GENID("V",FILEID,5); GEN(",",1,7); 50145000 T 0059
|
||
GENID("I",FILEID,5); GEN(",",1,7); 50146000 T 0062
|
||
LASTSY:=CURSY; 50147000 T 0065
|
||
EXPRESSION; F:=TYPETAB1[CURTYPE].FORM; 50148000 T 0066
|
||
GEN(",",1,7); 50149000 T 0068
|
||
IF F=NUMERIC OR F=FLOATING OR F=CHAR OR F=ALFA OR 50150000 T 0069
|
||
CURTYPE=BOOLTYPE THEN 50151000 T 0073
|
||
BEGIN 50152000 T 0074
|
||
IF F=NUMERIC THEN GENINT(1) ELSE 50153000 T 0074
|
||
IF F=FLOATING THEN GENINT(2) ELSE 50154000 T 0076
|
||
IF F=ALFA THEN GENINT(5) ELSE 50155000 T 0081
|
||
IF F=CHAR THEN GENINT(4) ELSE GENINT(3); 50156000 T 0083
|
||
GEN(",",1,7); 50157000 T 0087
|
||
IF CURSY=COLON THEN 50158000 T 0088
|
||
BEGIN 50159000 T 0089
|
||
INSYMBOL; EXPRESSION; 50160000 T 0090
|
||
IF TYPETAB1[CURTYPE].FORM NEQ NUMERIC THEN ERROR(17); 50161000 T 0091
|
||
GEN(",",1,7); 50162000 T 0093
|
||
IF CURSY=COLON THEN 50163000 T 0095
|
||
BEGIN 50164000 T 0096
|
||
IF F≠FLOATING THEN ERROR(4); 50165000 T 0096
|
||
INSYMBOL; EXPRESSION; 50166000 T 0098
|
||
IF TYPETAB1[CURTYPE].FORM NEQ NUMERIC THEN ERROR(17); 50167000 T 0099
|
||
GEN(",",1,7); 50168000 T 0102
|
||
END ELSE GEN("-1,",3,5); 50169000 T 0103
|
||
END ELSE 50170000 T 0105
|
||
BEGIN 50171000 T 0105
|
||
IF F=FLOATING THEN GENINT(16) ELSE 50172000 T 0108
|
||
IF F=ALFA AND LASTSY=ALFACONST THEN GENINT(CURLENGTH) ELSE 50173000 T 0110
|
||
IF F=ALFA THEN GENINT(7) ELSE 50174000 T 0113
|
||
IF F=CHAR THEN GENINT(1) ELSE GENINT(10); 50175000 T 0116
|
||
GEN(",-1,",4,4); 50176000 T 0119
|
||
END; 50177000 T 0121
|
||
END ELSE ERROR(17); 50178000 T 0121
|
||
GENINT(CARDCNT); GEN(")",1,7); 50179000 T 0123
|
||
END OF EXPRESSION; 50180000 T 0126
|
||
GEN(";",1,7); 50181000 T 0126
|
||
END UNTIL CURSY≠COMMA; 50182000 T 0127
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 50183000 T 0128
|
||
IF CURSY=RPAR THEN INSYMBOL; 50184000 T 0131
|
||
END; 50185000 T 0133
|
||
FILENAME:=FILEID; 50186000 T 0133
|
||
IF LINEFEED THEN 50187000 T 0134
|
||
BEGIN 50188000 T 0134
|
||
INTEGER DUMMY; 50189000 T 0134
|
||
START OF SEGMENT ********** 44
|
||
GEN("WLINE(",6,2); GENID("F",FILENAME,5); GEN(",",1,7); 50190000 T 0000
|
||
GENID("V",FILENAME,5); GEN(",",1,7); 50191000 T 0004
|
||
GENID("I",FILENAME,5); GEN(")",1,7); 50192000 T 0007
|
||
END; 50193000 T 0010
|
||
44 IS 12 LONG, NEXT SEG 43
|
||
GEN("END",4,5); 50194000 T 0136
|
||
END OF PWRITE; 50195000 T 0137
|
||
43 IS 143 LONG, NEXT SEG 2
|
||
50196000 T 0082
|
||
50197000 T 0082
|
||
PROCEDURE FILEHANDLING(PROCNUM); %*** FILE HANDLING PROCEDURES: 50198000 T 0082
|
||
VALUE PROCNUM; INTEGER PROCNUM; %*** 50199000 T 0082
|
||
BEGIN %*** 1) PUT 50200000 T 0082
|
||
INTEGER F; %*** 2) GET 50201000 T 0082
|
||
START OF SEGMENT ********** 45
|
||
LABEL EFH; %002- 50201500 C 0000
|
||
CASE PROCNUM OF %*** 3) RESET 50202000 T 0000
|
||
BEGIN ; % NULL %*** 4) REWRITE %001- 50203000 P 0000
|
||
GEN("PUT",3,5); %*** 5) PAGE %001- 50204000 P 0000
|
||
%*** 6) OPEN & CLOSE (INPUT) FOR 50204500 C 0002
|
||
% CUMULATIVE FREQUENCY COUNT 50204550 C 0002
|
||
GEN("GET",3,5); % 50205000 T 0002
|
||
GEN("RESET",5,3); % 50206000 T 0004
|
||
GEN("REWRITE",7,1); % 50207000 T 0006
|
||
GEN("PPAGE",5,3); % %001- 50208000 P 0008
|
||
BEGIN %002- 50208100 C 0010
|
||
GEN("QQJZXL",6,2); %002- 50208200 C 0010
|
||
INSYMBOL; %002- 50208300 C 0012
|
||
GO TO EFH; % %002- 50208400 C 0012
|
||
END; %002- 50208500 C 0020
|
||
END; % 50209000 T 0020
|
||
START OF SEGMENT ********** 46
|
||
46 IS 8 LONG, NEXT SEG 45
|
||
GEN("(",1,7); FILEPARAM(0); % 50210000 T 0021
|
||
IF FILENAME=0 THEN ERROR(78); % 50211000 T 0023
|
||
F:=TYPETAB1[CURTYPE].FORM; 50212000 T 0025
|
||
IF F=FILES AND PROCNUM=5 THEN ERROR(80); 50213000 T 0026
|
||
GENID("F",FILENAME,5); GEN(",",1,7); 50214000 T 0029
|
||
GENID("V",FILENAME,5); GEN(",",1,7); 50215000 T 0032
|
||
GENID("I",FILENAME,5); GEN(",",1,7); 50216000 T 0035
|
||
GENINT(CARDCNT); GEN(")",1,7); 50217000 T 0038
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 50218000 T 0041
|
||
IF CURSY=RPAR THEN INSYMBOL; 50219000 T 0043
|
||
EFH: %002- 50219500 C 0045
|
||
END OF FILEHANDLING; 50220000 T 0046
|
||
45 IS 49 LONG, NEXT SEG 2
|
||
50221000 T 0082
|
||
50222000 T 0082
|
||
PROCEDURE PACK; 50223000 T 0082
|
||
BEGIN 50224000 T 0082
|
||
INTEGER IT; REAL T; %503- 50225000 P 0082
|
||
START OF SEGMENT ********** 47
|
||
GEN("PACK(",5,3); 50226000 T 0000
|
||
INSYMBOL; 50227000 T 0001
|
||
IF CURSY=LPAR THEN 50228000 T 0002
|
||
BEGIN 50229000 T 0002
|
||
INSYMBOL; 50230000 T 0003
|
||
IF CURSY=IDENTIFIER THEN 50231000 T 0003
|
||
BEGIN 50232000 T 0004
|
||
SEARCH; 50233000 T 0005
|
||
IF FOUND THEN 50234000 T 0005
|
||
BEGIN 50235000 T 0005
|
||
IF THISID.IDCLASS=VAR THEN 50236000 T 0006
|
||
BEGIN 50237000 T 0007
|
||
T:=TYPETAB1[THISID.TYPE]; 50238000 T 0008
|
||
IF T.FORM=ARRAYS THEN 50239000 T 0009
|
||
BEGIN 50240000 T 0010
|
||
IT:=T.INXTYPE; 50241000 T 0011
|
||
IF TYPETAB1[T.ARRTYPE].FORM≠CHAR THEN ERROR(88); 50242000 T 0012
|
||
GENID("H",1000×THISLEVEL+THISINDEX,5); %518- 50243100 C 0015
|
||
GEN(",",1,7); GENINT(TYPETAB2[THISID.TYPE]); 50245000 T 0018
|
||
GEN(",",1,7); GENINT(TYPETAB3[THISID.TYPE]); 50246000 T 0021
|
||
END ELSE ERROR(88); 50247000 T 0024
|
||
END ELSE ERROR(88); 50248000 T 0026
|
||
END ELSE ERROR(1); 50249000 T 0028
|
||
END ELSE ERROR(9); 50250000 T 0029
|
||
INSYMBOL; 50251000 T 0030
|
||
IF CURSY=COMMA THEN 50252000 T 0031
|
||
BEGIN 50253000 T 0031
|
||
GEN(",",1,7); 50254000 T 0032
|
||
INSYMBOL; EXPRESSION; CHECKTYPES(IT,CURTYPE); 50255000 T 0033
|
||
IF CURSY=COMMA THEN 50256000 T 0035
|
||
BEGIN 50257000 T 0036
|
||
GEN(",",1,7); 50258000 T 0037
|
||
INSYMBOL; 50259000 T 0038
|
||
IF CURSY=IDENTIFIER THEN 50260000 T 0039
|
||
BEGIN 50261000 T 0039
|
||
SEARCH; 50262000 T 0040
|
||
IF FOUND THEN 50263000 T 0040
|
||
BEGIN 50264000 T 0041
|
||
IF THISID.IDCLASS=VAR OR 50265000 T 0041
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN 50266000 T 0042
|
||
BEGIN 50267000 T 0045
|
||
VARIABLE; WRITEEXPR; 50268000 T 0045
|
||
IF CURTYPE>0 THEN 50269000 T 0046
|
||
IF TYPETAB1[CURTYPE].FORM≠ALFA THEN ERROR(12); 50270000 T 0047
|
||
END ELSE ERROR(8); 50271000 T 0050
|
||
END ELSE ERROR(1); 50272000 T 0052
|
||
END ELSE ERROR(9); 50273000 T 0053
|
||
END ELSE BEGIN ERROR(89); SKIP(RPAR) END; 50274000 T 0054
|
||
END ELSE BEGIN ERROR(89); SKIP(RPAR) END; 50275000 T 0056
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 50276000 T 0058
|
||
IF CURSY=RPAR THEN INSYMBOL; 50277000 T 0061
|
||
END ELSE BEGIN ERROR(3); INSYMBOL END; 50278000 T 0063
|
||
GEN(",",1,7); GENINT(CARDCNT); GEN(")",1,7); 50279000 T 0064
|
||
END OF PACK; 50280000 T 0068
|
||
47 IS 72 LONG, NEXT SEG 2
|
||
50281000 T 0082
|
||
50282000 T 0082
|
||
PROCEDURE UNPACK; 50283000 T 0082
|
||
BEGIN 50284000 T 0082
|
||
INTEGER IT; REAL T; %503- 50285000 P 0082
|
||
START OF SEGMENT ********** 48
|
||
GEN("UNPACK(",7,1); INSYMBOL; 50286000 T 0000
|
||
IF CURSY=LPAR THEN 50287000 T 0002
|
||
BEGIN 50288000 T 0002
|
||
INSYMBOL; EXPRESSION; 50289000 T 0003
|
||
IF CURTYPE>0 THEN IF TYPETAB1[CURTYPE].FORM≠ALFA THEN ERROR(17); 50290000 T 0004
|
||
IF CURSY=COMMA THEN 50291000 T 0008
|
||
BEGIN 50292000 T 0009
|
||
GEN(",",1,7); INSYMBOL; 50293000 T 0009
|
||
IF CURSY=IDENTIFIER THEN 50294000 T 0011
|
||
BEGIN 50295000 T 0012
|
||
SEARCH; 50296000 T 0012
|
||
IF FOUND THEN 50297000 T 0013
|
||
BEGIN 50298000 T 0013
|
||
IF THISID.IDCLASS=VAR THEN 50299000 T 0014
|
||
BEGIN 50300000 T 0015
|
||
T:=TYPETAB1[THISID.TYPE]; 50301000 T 0015
|
||
IF T.FORM=ARRAYS THEN 50302000 T 0017
|
||
BEGIN 50303000 T 0018
|
||
IT:=T.INXTYPE; 50304000 T 0019
|
||
IF TYPETAB1[T.ARRTYPE].FORM≠CHAR THEN ERROR(88); 50305000 T 0020
|
||
GENID("H",1000×THISLEVEL+THISINDEX,5); %518- 50307100 C 0023
|
||
GEN(",",1,7); GENINT(TYPETAB2[THISID.TYPE]); 50308000 T 0026
|
||
GEN(",",1,7); GENINT(TYPETAB3[THISID.TYPE]); 50309000 T 0029
|
||
END ELSE ERROR(88); 50310000 T 0032
|
||
END ELSE ERROR(88); 50311000 T 0034
|
||
END ELSE ERROR(1); 50312000 T 0036
|
||
END ELSE ERROR(9); 50313000 T 0037
|
||
INSYMBOL; 50314000 T 0038
|
||
IF CURSY=COMMA THEN 50315000 T 0039
|
||
BEGIN 50316000 T 0039
|
||
GEN(",",1,7); 50317000 T 0040
|
||
INSYMBOL; EXPRESSION; CHECKTYPES(IT,CURTYPE); 50318000 T 0041
|
||
END ELSE BEGIN ERROR(89); SKIP(RPAR) END; 50319000 T 0043
|
||
END ELSE BEGIN ERROR(89); SKIP(RPAR) END; 50320000 T 0045
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(89); SKIP(RPAR) END; 50321000 T 0047
|
||
IF CURSY=RPAR THEN INSYMBOL; 50322000 T 0050
|
||
END ELSE BEGIN ERROR(3); INSYMBOL END; 50323000 T 0052
|
||
GEN(",",1,7); GENINT(CARDCNT); GEN(")",1,7); 50324000 T 0054
|
||
END OF UNPACK; 50325000 T 0057
|
||
48 IS 61 LONG, NEXT SEG 2
|
||
50326000 T 0082
|
||
50327000 T 0082
|
||
PROCEDURE NEWDISP; %*** "NEW","DISPOSE" 50328000 T 0082
|
||
BEGIN 50329000 T 0082
|
||
INTEGER T1; 50330000 T 0082
|
||
START OF SEGMENT ********** 49
|
||
IF CURNAME1="3000NEW" THEN GEN("NEW(",4,4) ELSE 50331000 T 0000
|
||
BEGIN GEN("DISPOSE",7,1); GEN("(",1,7) END; 50332000 T 0002
|
||
INSYMBOL; 50333000 T 0009
|
||
IF CURSY=LPAR THEN 50334000 T 0009
|
||
BEGIN 50335000 T 0010
|
||
INSYMBOL; 50336000 T 0010
|
||
IF CURSY=IDENTIFIER THEN 50337000 T 0011
|
||
BEGIN 50338000 T 0012
|
||
SEARCH; 50339000 T 0012
|
||
IF FOUND THEN 50340000 T 0013
|
||
BEGIN 50341000 T 0013
|
||
VARIABLE; 50342000 T 0013
|
||
IF CURTYPE>0 THEN IF TYPETAB1[CURTYPE].FORM=POINTERS THEN 50343000 T 0014
|
||
BEGIN 50344000 T 0017
|
||
WRITEEXPR; GEN(",",1,7); 50345000 T 0017
|
||
T1:=TYPETAB1[CURTYPE].POINTTYPE; 50346000 T 0019
|
||
T1:=TYPETAB1[T1].SIZE; 50347000 T 0021
|
||
IF T1>1023 THEN ERROR(86); 50348000 T 0022
|
||
GENINT(T1); GEN(")",1,7); 50349000 T 0024
|
||
END ELSE ERROR(81); 50350000 T 0026
|
||
END ELSE BEGIN ERROR(1); INSYMBOL END; 50351000 T 0029
|
||
END ELSE ERROR(9); 50352000 T 0031
|
||
WHILE CURSY=COMMA DO 50353000 T 0032
|
||
BEGIN INSYMBOL; 50354000 T 0034
|
||
IF CURSY NEQ IDENTIFIER THEN ERROR(9); 50355000 T 0034
|
||
IF CURSY NEQ RPAR THEN INSYMBOL; 50356000 T 0036
|
||
END; 50357000 T 0038
|
||
END ELSE BEGIN ERROR(58); SKIP(RPAR) END; 50358000 T 0039
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 50359000 T 0041
|
||
IF CURSY=RPAR THEN INSYMBOL; 50360000 T 0043
|
||
END OF NEWDISP; 50361000 T 0045
|
||
49 IS 48 LONG, NEXT SEG 2
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60001000 T 0082
|
||
% % 60002000 T 0082
|
||
% % 60003000 T 0082
|
||
% % 60004000 T 0082
|
||
% PART 6: THE STATEMENT PARSER. % 60005000 T 0082
|
||
% --------------------- % 60006000 T 0082
|
||
% % 60007000 T 0082
|
||
% % 60008000 T 0082
|
||
% % 60009000 T 0082
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60010000 T 0082
|
||
60011000 T 0082
|
||
60012000 T 0082
|
||
60013000 T 0082
|
||
PROCEDURE STATEMENT; FORWARD; 60014000 T 0082
|
||
60015000 T 0082
|
||
PROCEDURE ASSIGNMENT; 60016000 T 0082
|
||
BEGIN 60017000 T 0082
|
||
INTEGER LEFTTYPE; 60018000 T 0082
|
||
START OF SEGMENT ********** 50
|
||
LABEL ASSIGN,EXIT; 60019000 T 0000
|
||
%512- 60020000 C 0000
|
||
PROCEDURE WRITESEXPR; %*** FIX STRUCTURE FOR ASSIGNMENT %512- 60021000 C 0000
|
||
BEGIN % USED ONLY IN ASSIGNMENT OF STRUCTURES 60022000 C 0000
|
||
IF INSIDEBRACKETS THEN IF SYMTAB[NUMSYMS] = "100000," %512- 60023000 C 0000
|
||
THEN SYMTAB[NUMSYMS] := ", 0 ] " ELSE PUTSYM("]"); %512- 60024000 C 0001
|
||
WHILE NUMPOINTERS>0 DO %512- 60025000 C 0012
|
||
BEGIN NUMPOINTERS := NUMPOINTERS-1; %512- 60026000 C 0014
|
||
IF NUMSYMS+4 ≥ MAXSYMS THEN WRITEEXPR; %512- 60027000 C 0015
|
||
REPLACE POINTER(SYMTAB[NUMSYMS+1]) BY %512- 60028000 C 0017
|
||
"00-1)DIV00 1022,00 T MOD00 1022]"; %512- 60029000 C 0021
|
||
NUMSYMS := NUMSYMS+4; %512- 60030000 C 0025
|
||
END; % OF WHILE %512- 60031000 C 0026
|
||
WRITEEXPR; GEN( ",", 1,7 ); %512- 60032000 C 0026
|
||
END WRITESEXPR; %512- 60033000 C 0028
|
||
%512- 60034000 C 0029
|
||
IF FOUND THEN 60050000 T 0029
|
||
BEGIN 60051000 T 0029
|
||
IF THISID.IDCLASS=VAR OR 60052000 T 0029
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN 60053000 T 0031
|
||
BEGIN 60054000 T 0033
|
||
VARIABLE; LEFTTYPE:=CURTYPE; 60055000 T 0034
|
||
ASSIGN: IF CURSY≠ASSIGNSY THEN 60056000 T 0035
|
||
BEGIN ERROR(28); SKIP(ASSIGNSY); 60057000 T 0036
|
||
IF SYMKIND[CURSY]=TERMINAL THEN GO TO EXIT; 60058000 T 0038
|
||
END; 60059000 T 0040
|
||
INSYMBOL; 60060000 T 0040
|
||
IF TYPETAB1[LEFTTYPE].STRUCT>0 THEN 60061000 T 0040
|
||
BEGIN 60062000 T 0042
|
||
%ERROR(95); % STRUCTURED ASSIGNMENT NOT IMPLEMENTED. %512- 60063000 P 0042
|
||
EXPRLEVEL := EXPRLEVEL+1; %507- 60063900 C 0042
|
||
GEN("ASSIGN(",7,1); WRITESEXPR; %512- 60064000 C 0044
|
||
EXPRESSION; WRITESEXPR; %512- 60065000 C 0046
|
||
EXPRLEVEL := EXPRLEVEL-1; %507- 60065100 C 0048
|
||
GENINT(TYPETAB1[LEFTTYPE].SIZE); GEN(")",1,7); %512- 60066000 C 0049
|
||
IF TYPETAB1[LEFTTYPE].SIZE≠TYPETAB1[CURTYPE].SIZE %512- 60067000 C 0052
|
||
THEN ERROR(95); %512- 60068000 C 0053
|
||
END ELSE 60080000 T 0055
|
||
IF TYPETAB1[LEFTTYPE].FORM=SET THEN % %601- 60080100 C 0055
|
||
BEGIN % %601- 60080200 C 0059
|
||
SYMTAB[1] := "SSTOR("; NUMSYMS := NUMSYMS - 3; % %601- 60080300 C 0060
|
||
EXPRESSION; % %601- 60080400 C 0062
|
||
PUTSYM(")"); CHECKTYPES(LEFTTYPE,CURTYPE); % %601- 60080500 C 0063
|
||
WRITEEXPR; % %601- 60080600 C 0072
|
||
END ELSE % %601- 60080700 C 0073
|
||
BEGIN 60081000 T 0073
|
||
WRITEEXPR; GEN(":=",2,6); 60082000 T 0073
|
||
IF CHECKOPTION AND TYPETAB1[LEFTTYPE].FORM≤CHAR THEN 60083000 T 0075
|
||
CHECKEXPR(TYPETAB2[LEFTTYPE],TYPETAB3[LEFTTYPE]) ELSE 60084000 T 0077
|
||
EXPRESSION; 60085000 T 0079
|
||
WRITEEXPR; 60086000 T 0080
|
||
END; %512- 60087000 P 0081
|
||
CHECKTYPES( LEFTTYPE, CURTYPE ); %512- 60088000 P 0081
|
||
END ELSE 60089000 T 0082
|
||
BEGIN % FUNCTION ASSIGNMENT. 60090000 T 0082
|
||
IF THISLEVEL≠CURLEVEL-1 OR THISINDEX≠CURFUNC THEN ERROR(5);%511- 60091000 P 0082
|
||
GENID("V",1000×THISLEVEL+THISINDEX,5); LEFTTYPE:=THISID.TYPE; 60092000 T 0086
|
||
INSYMBOL; GO TO ASSIGN; 60093000 T 0089
|
||
END; 60094000 T 0090
|
||
END ELSE 60095000 T 0090
|
||
BEGIN 60096000 T 0090
|
||
SKIP(ASSIGNSY); 60097000 T 0091
|
||
IF CURSY=ASSIGNSY THEN GO TO ASSIGN; 60098000 T 0092
|
||
END; 60099000 T 0093
|
||
EXIT: 60100000 T 0093
|
||
END OF ASSIGNMENT; 60101000 T 0094
|
||
50 IS 100 LONG, NEXT SEG 2
|
||
60102000 T 0082
|
||
60103000 T 0082
|
||
PROCEDURE COMPSTAT; 60104000 T 0082
|
||
BEGIN 60105000 T 0082
|
||
INTEGER BEGINNUM; 60106000 T 0082
|
||
START OF SEGMENT ********** 51
|
||
LABEL STATM; 60107000 T 0000
|
||
60108000 T 0000
|
||
BEGINNUM:=NUMBEGINS:=NUMBEGINS+1; MARGIN(" B",BEGINNUM); 60109000 T 0000
|
||
GEN("BEGIN",6,3); 60110000 T 0019
|
||
DO BEGIN 60111000 T 0021
|
||
IF CURSY=SEMICOLON OR CURSY=BEGINSY THEN INSYMBOL; 60112000 T 0021
|
||
STATM: STATEMENT; 60113000 T 0023
|
||
GEN(";",1,7); 60114000 T 0024
|
||
IF CURSY=ELSESY THEN BEGIN ERROR(20); INSYMBOL; GO STATM END; 60115000 T 0026
|
||
IF SYMKIND[CURSY]=INITIAL THEN BEGIN ERROR(21); GO STATM END; 60116000 T 0031
|
||
END UNTIL CURSY≠SEMICOLON; 60117000 T 0033
|
||
IF CURSY≠ENDSY THEN 60118000 T 0035
|
||
BEGIN ERROR(24); SKIP(ENDSY); 60119000 T 0035
|
||
IF CURSY≠ENDSY THEN BEGIN INSYMBOL; GO TO STATM END; 60120000 T 0037
|
||
END; 60121000 T 0040
|
||
GEN(" END",5,4); MARGIN(" E",BEGINNUM); 60122000 T 0040
|
||
INSYMBOL; 60123000 T 0059
|
||
END OF COMPSTAT; 60124000 T 0059
|
||
51 IS 64 LONG, NEXT SEG 2
|
||
60125000 T 0082
|
||
60126000 T 0082
|
||
PROCEDURE IFSTAT; 60127000 T 0082
|
||
BEGIN 60128000 T 0082
|
||
LABEL EXIT; 60129000 T 0082
|
||
START OF SEGMENT ********** 52
|
||
GEN("IF",3,6); 60130000 T 0000
|
||
INSYMBOL; BOOLEXPR; 60131000 T 0001
|
||
IF CURSY≠THENSY THEN 60132000 T 0026
|
||
BEGIN IF CURTYPE>0 THEN ERROR(27); 60133000 T 0027
|
||
SKIP(THENSY); 60134000 T 0030
|
||
IF CURSY≠THENSY THEN 60135000 T 0030
|
||
BEGIN IF CURTYPE=0 THEN ERROR(27); 60136000 T 0031
|
||
IF SYMKIND[CURSY]=TERMINAL THEN GO TO EXIT; 60137000 T 0034
|
||
END; END; 60138000 T 0035
|
||
GEN(" THEN",6,3); 60139000 T 0035
|
||
INSYMBOL; STATEMENT; 60140000 T 0037
|
||
IF CURSY=ELSESY THEN 60141000 T 0038
|
||
BEGIN GEN(" ELSE",6,3); INSYMBOL; STATEMENT END; 60142000 T 0038
|
||
EXIT: 60143000 T 0041
|
||
END OF IFSTAT; 60144000 T 0042
|
||
52 IS 45 LONG, NEXT SEG 2
|
||
60145000 T 0082
|
||
60146000 T 0082
|
||
PROCEDURE CASESTAT; 60147000 T 0082
|
||
BEGIN 60148000 T 0082
|
||
DEFINE CASEHASH(N)=(N).[38:39] MOD MAXCASES#; 60149000 T 0082
|
||
START OF SEGMENT ********** 53
|
||
INTEGER ARRAY CASETAB[0:MAXCASES]; 60150000 T 0000
|
||
INTEGER CASENUM,CASETYPE,NCASELABS,TEMPVARNUM,CONVAL,CONTYPE,C,T; 60151000 T 0001
|
||
BOOLEAN ZEROLAB,FIRST; 60152000 T 0001
|
||
60153000 T 0001
|
||
CASENUM:=NUMCASES:=NUMCASES+1; MARGIN("CB",CASENUM); 60154000 T 0001
|
||
TEMPVARNUM:=NUMTEMPS:=NUMTEMPS+1; 60155000 T 0021
|
||
IF TEMPVARNUM>MAXTEMPS THEN ERROR(16); 60156000 T 0023
|
||
GEN("BEGIN",6,3); GENID("T",TEMPVARNUM,2); GEN(":=",2,6); 60157000 T 0025
|
||
INSYMBOL; EXPRESSION; 60158000 T 0029
|
||
GEN(";",1,7); CASETYPE:=CURTYPE; 60159000 T 0030
|
||
IF TYPETAB1[CASETYPE].FORM≥FLOATING THEN 60160000 T 0032
|
||
BEGIN ERROR(17); CASETYPE:=0 END; 60161000 T 0034
|
||
IF CURSY≠OFSY THEN 60162000 T 0036
|
||
BEGIN IF CASETYPE>0 THEN ERROR(18); 60163000 T 0037
|
||
SKIP(OFSY); 60164000 T 0039
|
||
IF CURSY=OFSY THEN INSYMBOL ELSE 60165000 T 0040
|
||
IF CASETYPE=0 THEN ERROR(18); 60166000 T 0042
|
||
END ELSE INSYMBOL; 60167000 T 0047
|
||
DO BEGIN 60168000 T 0048
|
||
WHILE CURSY=SEMICOLON DO INSYMBOL; 60169000 T 0048
|
||
FIRST:=TRUE; 60170000 T 0050
|
||
IF CURSY≠ENDSY THEN 60171000 T 0051
|
||
BEGIN 60172000 T 0051
|
||
GEN("IF",3,6); 60173000 T 0052
|
||
DO BEGIN 60174000 T 0053
|
||
IF FIRST THEN FIRST:=FALSE ELSE INSYMBOL; 60175000 T 0054
|
||
CONSTANT(CONVAL,CONTYPE); 60176000 T 0057
|
||
IF CONTYPE>0 THEN 60177000 T 0058
|
||
BEGIN 60178000 T 0059
|
||
IF CASETYPE=0 THEN CASETYPE:=CONTYPE ELSE 60179000 T 0059
|
||
CHECKTYPES(CASETYPE,CONTYPE); 60180000 T 0061
|
||
GENID("T",TEMPVARNUM,2); GEN("=",1,7); GENINT(CONVAL); 60181000 T 0063
|
||
NCASELABS:=NCASELABS+1; 60182000 T 0067
|
||
IF NCASELABS<MAXCASES THEN 60183000 T 0068
|
||
BEGIN 60184000 T 0069
|
||
IF CONVAL=0 THEN 60185000 T 0069
|
||
IF ZEROLAB THEN ERROR(31) ELSE ZEROLAB:=TRUE ELSE 60186000 T 0070
|
||
BEGIN 60187000 T 0073
|
||
T:=CASEHASH(CONVAL); 60188000 T 0074
|
||
FOR C:=CASETAB[T] WHILE C≠CONVAL AND C≠0 DO 60189000 T 0075
|
||
T:=IF T=0 THEN MAXCASES ELSE T-1; 60190000 T 0079
|
||
IF C≠0 THEN ERROR(31) ELSE CASETAB[T]:=CONVAL; 60191000 T 0083
|
||
END; 60192000 T 0087
|
||
END ELSE IF NCASELABS=MAXCASES THEN ERROR(30); 60193000 T 0087
|
||
IF CURSY=COMMA THEN GEN(" OR",4,5); 60194000 T 0089
|
||
END; 60195000 T 0092
|
||
END UNTIL CURSY≠COMMA; 60196000 T 0092
|
||
GEN(" THEN",6,3); 60197000 T 0093
|
||
IF CURSY≠COLON THEN BEGIN ERROR(26); SKIP(COLON) END; 60198000 T 0095
|
||
IF CURSY=COLON THEN INSYMBOL; 60199000 T 0098
|
||
STATEMENT; 60200000 T 0099
|
||
IF CURSY≠SEMICOLON AND CURSY≠ENDSY THEN 60201000 T 0100
|
||
BEGIN ERROR(21); SKIP(SEMICOLON) END; 60202000 T 0102
|
||
END; 60203000 T 0104
|
||
IF CURSY=SEMICOLON THEN GEN(" ELSE",6,3); 60204000 T 0104
|
||
END UNTIL CURSY≠SEMICOLON; 60205000 T 0106
|
||
IF CURSY≠ENDSY THEN BEGIN ERROR(24); SKIP(ENDSY) END; 60206000 T 0108
|
||
GEN(" END",5,4); MARGIN("CE",CASENUM); 60207000 T 0110
|
||
NUMTEMPS:=NUMTEMPS-1; 60208000 T 0130
|
||
INSYMBOL; 60209000 T 0131
|
||
END OF CASESTAT; 60210000 T 0131
|
||
53 IS 144 LONG, NEXT SEG 2
|
||
60211000 T 0082
|
||
60212000 T 0082
|
||
PROCEDURE WHILESTAT; 60213000 T 0082
|
||
BEGIN 60214000 T 0082
|
||
LABEL STATM,EXIT; 60215000 T 0082
|
||
START OF SEGMENT ********** 54
|
||
GEN("WHILE",6,3); 60216000 T 0000
|
||
INSYMBOL; BOOLEXPR; 60217000 T 0001
|
||
IF CURSY≠DOSY THEN 60218000 T 0026
|
||
BEGIN IF CURTYPE>0 THEN ERROR(19); 60219000 T 0027
|
||
SKIP(DOSY); 60220000 T 0030
|
||
IF CURSY≠DOSY THEN 60221000 T 0030
|
||
BEGIN IF CURTYPE=0 THEN ERROR(19); 60222000 T 0031
|
||
GO TO IF SYMKIND[CURSY]=INITIAL THEN STATM ELSE EXIT; 60223000 T 0034
|
||
END; END; 60224000 T 0039
|
||
GEN(" DO",4,5); 60225000 T 0039
|
||
INSYMBOL; 60226000 T 0040
|
||
STATM: STATEMENT; 60227000 T 0041
|
||
EXIT: 60228000 T 0042
|
||
END OF WHILESTAT; 60229000 T 0043
|
||
54 IS 49 LONG, NEXT SEG 2
|
||
60230000 T 0082
|
||
60231000 T 0082
|
||
PROCEDURE REPEATSTAT; 60232000 T 0082
|
||
BEGIN 60233000 T 0082
|
||
INTEGER REPNUM; 60234000 T 0082
|
||
START OF SEGMENT ********** 55
|
||
LABEL NEWTRY; 60235000 T 0000
|
||
60236000 T 0000
|
||
REPNUM:=NUMREPS:=NUMREPS+1; 60237000 T 0000
|
||
MARGIN(" R",REPNUM); 60238000 T 0001
|
||
GEN("DO",3,6); GEN("BEGIN",6,3); 60239000 T 0019
|
||
DO BEGIN 60240000 T 0022
|
||
INSYMBOL; 60241000 T 0023
|
||
NEWTRY: STATEMENT; 60242000 T 0023
|
||
GEN(";",1,7); 60243000 T 0024
|
||
IF CURSY=ELSESY THEN BEGIN ERROR(20);INSYMBOL; GO NEWTRY END; 60244000 T 0026
|
||
IF SYMKIND[CURSY]=INITIAL THEN BEGIN ERROR(21); GO NEWTRY END; 60245000 T 0032
|
||
END UNTIL CURSY≠SEMICOLON; 60246000 T 0034
|
||
IF CURSY≠UNTILSY THEN 60247000 T 0036
|
||
BEGIN 60248000 T 0036
|
||
ERROR(22); 60249000 T 0037
|
||
WHILE CURSY≠UNTILSY AND SYMKIND[CURSY]≠INITIAL DO 60250000 T 0038
|
||
BEGIN INSYMBOL; SKIP(UNTILSY) END; 60251000 T 0040
|
||
IF CURSY≠UNTILSY THEN GO TO NEWTRY; 60252000 T 0042
|
||
END; 60253000 T 0043
|
||
GEN(" END",5,4); GEN("UNTIL",6,3); MARGIN(" U",REPNUM); 60254000 T 0043
|
||
INSYMBOL; BOOLEXPR; 60255000 T 0064
|
||
END OF REPEATSTAT; 60256000 T 0090
|
||
55 IS 93 LONG, NEXT SEG 2
|
||
60257000 T 0082
|
||
60258000 T 0082
|
||
PROCEDURE FORSTAT; 60259000 T 0082
|
||
BEGIN 60260000 T 0082
|
||
INTEGER VARTYPE,VARNUM,LLIM,ULIM; 60261000 T 0082
|
||
START OF SEGMENT ********** 56
|
||
BOOLEAN DOWN; 60262000 T 0000
|
||
LABEL STATM; 60263000 T 0000
|
||
60264000 T 0000
|
||
GEN("BEGIN",6,3); 60265000 T 0000
|
||
INSYMBOL; 60266000 T 0001
|
||
IF CURSY=IDENTIFIER THEN 60267000 T 0002
|
||
BEGIN 60268000 T 0002
|
||
SEARCH; 60269000 T 0003
|
||
IF FOUND THEN 60270000 T 0003
|
||
BEGIN 60271000 T 0004
|
||
VARNUM:=1000×THISLEVEL+THISINDEX; 60272000 T 0004
|
||
IF THISID.IDCLASS=VAR OR 60273000 T 0006
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN 60274000 T 0007
|
||
BEGIN 60275000 T 0010
|
||
IF THISLEVEL>1 AND THISLEVEL<CURLEVEL THEN ERROR(-5); %511- 60276000 P 0010
|
||
IF THISLEVEL>CURLEVEL THEN ERROR(83); 60277000 T 0013
|
||
VARTYPE:=THISID.TYPE; 60278000 T 0015
|
||
IF TYPETAB1[VARTYPE].FORM≤CHAR THEN 60279000 T 0017
|
||
BEGIN 60280000 T 0018
|
||
LLIM:=TYPETAB2[VARTYPE]; ULIM:=TYPETAB3[VARTYPE]; 60281000 T 0019
|
||
END ELSE BEGIN ERROR(12); VARTYPE:=0 END; 60282000 T 0021
|
||
END ELSE ERROR(8); 60283000 T 0024
|
||
END ELSE ERROR(1); 60284000 T 0025
|
||
END ELSE ERROR(9); 60285000 T 0027
|
||
INSYMBOL; 60286000 T 0028
|
||
IF CURSY≠ASSIGNSY THEN 60287000 T 0028
|
||
BEGIN ERROR(28); 60288000 T 0029
|
||
SKIP(ASSIGNSY); 60289000 T 0030
|
||
IF CURSY=ASSIGNSY THEN INSYMBOL ELSE 60290000 T 0031
|
||
IF SYMKIND[CURSY]=INITIAL THEN GO TO STATM; 60291000 T 0033
|
||
END ELSE INSYMBOL; 60292000 T 0035
|
||
GENID("V",VARNUM,5); GEN("←",1,7); 60293000 T 0036
|
||
IF CHECKOPTION THEN CHECKEXPR(LLIM,ULIM) ELSE EXPRESSION; 60294000 T 0039
|
||
WRITEEXPR; 60295000 T 0042
|
||
GEN(";",1,7); 60296000 T 0042
|
||
IF VARTYPE=0 THEN VARTYPE:=CURTYPE ELSE CHECKTYPES(VARTYPE,CURTYPE); 60297000 T 0044
|
||
NUMTEMPS:=NUMTEMPS+1; IF NUMTEMPS>MAXTEMPS THEN ERROR(16); 60298000 T 0047
|
||
IF CURSY=TOSY THEN INSYMBOL ELSE 60299000 T 0050
|
||
IF CURSY=DOWNTOSY THEN BEGIN DOWN:=TRUE; INSYMBOL END ELSE 60300000 T 0052
|
||
BEGIN IF CURTYPE>0 THEN ERROR(23); 60301000 T 0055
|
||
SKIP(TOSY); 60302000 T 0058
|
||
IF CURSY=TOSY THEN INSYMBOL ELSE 60303000 T 0058
|
||
BEGIN IF CURTYPE=0 THEN ERROR(23); 60304000 T 0060
|
||
IF SYMKIND[CURSY]=INITIAL THEN GO TO STATM; 60305000 T 0063
|
||
END; END; 60306000 T 0064
|
||
GENID("T",NUMTEMPS,2); GEN("←",1,7); 60307000 T 0064
|
||
IF CHECKOPTION THEN CHECKEXPR(LLIM,ULIM) ELSE EXPRESSION; 60308000 T 0067
|
||
WRITEEXPR; 60309000 T 0070
|
||
GEN(";",1,7); 60310000 T 0070
|
||
IF VARTYPE=0 THEN VARTYPE:=CURTYPE ELSE CHECKTYPES(VARTYPE,CURTYPE); 60311000 T 0072
|
||
IF CURSY≠DOSY THEN 60312000 T 0075
|
||
BEGIN IF CURTYPE>0 THEN ERROR(19); 60313000 T 0076
|
||
SKIP(DOSY); 60314000 T 0079
|
||
IF CURSY=DOSY THEN INSYMBOL ELSE 60315000 T 0079
|
||
IF CURTYPE=0 THEN ERROR(19); 60316000 T 0081
|
||
END ELSE INSYMBOL; 60317000 T 0084
|
||
GEN("FOR",4,5); GENID("V",VARNUM,5); GEN("←",1,7); 60318000 T 0085
|
||
GENID("V",VARNUM,5); GEN(" ",1,7); 60319000 T 0089
|
||
IF DOWN THEN GEN("DOWNTO",7,2) ELSE GEN("UPTO",5,4); 60320000 T 0092
|
||
GENID("T",NUMTEMPS,2); GEN(" DO",4,5); 60321000 T 0099
|
||
STATM: STATEMENT; 60322000 T 0102
|
||
GEN(" END",5,4); 60323000 T 0103
|
||
NUMTEMPS:=NUMTEMPS-1; 60324000 T 0105
|
||
END OF FORSTAT; 60325000 T 0106
|
||
56 IS 113 LONG, NEXT SEG 2
|
||
60326000 T 0082
|
||
60327000 T 0082
|
||
PROCEDURE GOTOSTAT; 60328000 T 0082
|
||
BEGIN 60329000 T 0082
|
||
INTEGER I; 60330000 T 0082
|
||
START OF SEGMENT ********** 57
|
||
INSYMBOL; 60331000 T 0000
|
||
IF CURSY=INTCONST THEN 60332000 T 0000
|
||
BEGIN I:=NUMLABS; 60333000 T 0001
|
||
WHILE I≥1 AND LABTAB[I].LABVAL≠CURVAL DO I:=I-1; 60334000 T 0002
|
||
IF I=0 THEN ERROR(15); 60335000 T 0007
|
||
GEN("GO",3,6); GENID("L",CURVAL,4); 60336000 T 0009
|
||
INSYMBOL; 60337000 T 0012
|
||
END ELSE ERROR(10); 60338000 T 0013
|
||
END OF GOTOSTAT; 60339000 T 0015
|
||
57 IS 18 LONG, NEXT SEG 2
|
||
60340000 T 0082
|
||
60341000 T 0082
|
||
PROCEDURE WITHSTAT; 60342000 T 0082
|
||
BEGIN 60343000 T 0082
|
||
INTEGER STARTLEVEL,VERYFIRSTWITHSYM,I; 60344000 T 0082
|
||
START OF SEGMENT ********** 58
|
||
REAL D; 60345000 T 0000
|
||
STARTLEVEL:=TOPLEVEL; VERYFIRSTWITHSYM:=NWITHSYMS; 60346000 T 0000
|
||
EXPRLEVEL := 1; %002- 60346500 C 0001
|
||
DO BEGIN 60347000 T 0002
|
||
INSYMBOL; 60348000 T 0003
|
||
IF CURSY=IDENTIFIER THEN 60349000 T 0003
|
||
BEGIN 60350000 T 0004
|
||
SEARCH; 60351000 T 0004
|
||
IF FOUND THEN 60352000 T 0005
|
||
BEGIN 60353000 T 0005
|
||
IF THISID.IDCLASS=VAR OR %002- 60354000 P 0006
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) THEN %%002- 60354500 C 0007
|
||
BEGIN 60355000 T 0009
|
||
VARIABLE; 60356000 T 0010
|
||
IF CURTYPE>0 THEN 60357000 T 0010
|
||
IF TYPETAB1[CURTYPE].FORM≠RECORD THEN ERROR(98); 60358000 T 0011
|
||
IF SIMPLEVARIABLE THEN 60359000 T 0014
|
||
BEGIN PUTSYM("["); INSIDEBRACKETS:=TRUE END; 60360000 T 0015
|
||
IF TOPLEVEL<MAXLEVEL THEN 60361000 T 0023
|
||
BEGIN 60362000 T 0023
|
||
TOPLEVEL:=TOPLEVEL+1; 60363000 T 0024
|
||
D.NAMETAB:=TYPETAB1[CURTYPE].RECTAB; 60364000 T 0025
|
||
D.RECTYPE:=CURTYPE; 60365000 T 0028
|
||
D.NUMPNTRSINWITH:=NUMPOINTERS; 60366000 T 0029
|
||
D.FIRSTWITHSYM:=NWITHSYMS; 60367000 T 0031
|
||
D.BRACKETSINWITH:=REAL(INSIDEBRACKETS); 60368000 T 0033
|
||
IF NWITHSYMS+NUMSYMS>MAXWITHSYMS THEN ERROR(63) ELSE 60369000 T 0035
|
||
FOR I:=1 STEP 1 UNTIL NUMSYMS DO 60370000 T 0037
|
||
BEGIN 60371000 T 0039
|
||
WITHTAB[NWITHSYMS]:=SYMTAB[I]; 60372000 T 0039
|
||
NWITHSYMS:=NWITHSYMS+1; 60373000 T 0040
|
||
END; 60374000 T 0041
|
||
D.LASTWITHSYM:=NWITHSYMS-1; 60375000 T 0044
|
||
DISPLAY[TOPLEVEL]:=D; 60376000 T 0046
|
||
END ELSE ERROR(84); 60377000 T 0047
|
||
END ELSE BEGIN ERROR(8); INSYMBOL END; 60378000 T 0048
|
||
END ELSE BEGIN ERROR(1); INSYMBOL END; 60379000 T 0050
|
||
END ELSE BEGIN ERROR(9); INSYMBOL END; 60380000 T 0052
|
||
NUMSYMS:=0; 60381000 T 0054
|
||
NUMPOINTERS := 0; 60382000 T 0054
|
||
END UNTIL CURSY≠COMMA; 60383000 T 0055
|
||
EXPRLEVEL := 0; %002- 60383500 C 0056
|
||
IF CURSY≠DOSY THEN 60384000 T 0057
|
||
BEGIN ERROR(19); SKIP(DOSY); 60385000 T 0058
|
||
IF CURSY=DOSY THEN INSYMBOL; 60386000 T 0060
|
||
END ELSE INSYMBOL; 60387000 T 0062
|
||
STATEMENT; 60388000 T 0063
|
||
TOPLEVEL:=STARTLEVEL; NWITHSYMS:=VERYFIRSTWITHSYM; 60389000 T 0063
|
||
END OF WITHSTAT; 60390000 T 0065
|
||
58 IS 69 LONG, NEXT SEG 2
|
||
60391000 T 0082
|
||
PROCEDURE ASSERTSTAT; %002- 60391100 C 0082
|
||
BEGIN %002- 60391200 C 0082
|
||
GEN("IF NOT(",7,1); %002- 60391400 C 0082
|
||
INSYMBOL; BOOLEXPR; %002- 60391500 C 0083
|
||
GEN(") THEN",7,2); GEN("RUNERR(",7,1); GEN("7,",2,6); %002- 60391600 C 0108
|
||
GENINT(CARDCNT); GEN(")",1,7); %002- 60391700 C 0113
|
||
END OF ASSERTSTAT; %002- 60391800 C 0115
|
||
60392000 T 0118
|
||
PROCEDURE STATEMENT; 60393000 T 0118
|
||
BEGIN 60394000 T 0118
|
||
INTEGER I; 60395000 T 0118
|
||
START OF SEGMENT ********** 59
|
||
60397000 T 0000
|
||
IF CURSY=INTCONST THEN % *** LABELED STATEMENT *** 60398000 T 0000
|
||
BEGIN LABEL LABFOUND; %700- 60399000 P 0000
|
||
START OF SEGMENT ********** 60
|
||
FOR I:=FIRSTLAB STEP 1 UNTIL NUMLABS DO 60400000 T 0000
|
||
IF LABTAB[I].LABVAL=CURVAL THEN 60401000 T 0001
|
||
BEGIN IF LABTAB[I].LABDEF=1 THEN ERROR(31); 60402000 T 0002
|
||
LABTAB[I].LABDEF:=1; 60403000 T 0005
|
||
GO TO LABFOUND; 60404000 T 0008
|
||
END; 60405000 T 0008
|
||
ERROR(15); 60406000 T 0011
|
||
LABFOUND: GENID("L",CURVAL,4); GEN(":",1,7); 60407000 T 0011
|
||
INSYMBOL; 60408000 T 0015
|
||
IF CURSY≠COLON THEN 60409000 T 0015
|
||
BEGIN ERROR(26); 60410000 T 0016
|
||
SKIP(COLON); IF CURSY=COLON THEN INSYMBOL; 60411000 T 0017
|
||
END ELSE INSYMBOL; 60412000 T 0020
|
||
END; 60413000 T 0021
|
||
60 IS 22 LONG, NEXT SEG 59
|
||
60414000 T 0002
|
||
COMMENT *** START OF STATEMENT *** ; 60415000 T 0002
|
||
60416000 T 0002
|
||
IF CURSY=IDENTIFIER THEN 60417000 T 0002
|
||
BEGIN 60418000 T 0002
|
||
SEARCH; 60419000 T 0003
|
||
IF FOUND THEN 60420000 T 0003
|
||
BEGIN 60421000 T 0004
|
||
IF THISID.IDCLASS=VAR OR 60422000 T 0004
|
||
THISID.IDCLASS=CONST AND BOOLEAN(THISID.FORMAL) OR %700- 60423000 P 0005
|
||
THISID.IDCLASS=FUNC %700- 60423200 C 0008
|
||
THEN ASSIGNMENT ELSE %700- 60424000 P 0009
|
||
IF THISID.IDCLASS=PROC THEN 60425000 T 0010
|
||
BEGIN 60426000 T 0012
|
||
IF THISLEVEL=0 THEN % *** INTRINSIC PROCEDURE *** 60427000 T 0013
|
||
BEGIN 60428000 T 0013
|
||
IF CURNAME1="50WRITE" THEN PWRITE(FALSE) ELSE 60429000 T 0014
|
||
IF CURNAME1="7WRITEL" AND 60430000 T 0016
|
||
CURNAME2="000000N" THEN PWRITE(TRUE) ELSE 60431000 T 0018
|
||
IF CURNAME1="400READ" THEN PREAD(FALSE) ELSE 60432000 T 0021
|
||
IF CURNAME1="6READLN" THEN PREAD(TRUE) ELSE 60433000 T 0025
|
||
IF CURNAME1="400PAGE" THEN FILEHANDLING(5) ELSE 60434000 T 0029
|
||
IF CURNAME1="3000GET" THEN FILEHANDLING(2) ELSE 60435000 T 0033
|
||
IF CURNAME1="3000PUT" THEN FILEHANDLING(1) ELSE 60436000 T 0037
|
||
IF CURNAME1="50RESET" THEN FILEHANDLING(3) ELSE 60437000 T 0041
|
||
IF CURNAME1="7REWRIT" AND 60438000 T 0045
|
||
CURNAME2="000000E" THEN FILEHANDLING(4) ELSE 60439000 T 0047
|
||
IF CURNAME1="3000NEW" THEN NEWDISP ELSE 60440000 T 0050
|
||
IF CURNAME1="7DISPOS" AND 60441000 T 0053
|
||
CURNAME2="000000E" THEN NEWDISP ELSE 60442000 T 0056
|
||
IF CURNAME1="400PACK" THEN PACK ELSE 60443000 T 0058
|
||
IF CURNAME1="6QQJZXL" THEN FILEHANDLING(6) ELSE %002- 60443500 C 0062
|
||
IF CURNAME1="6UNPACK" THEN UNPACK ELSE ERROR(0); 60444000 T 0067
|
||
END ELSE PASSPARAMS; 60445000 T 0073
|
||
WRITEEXPR; 60446000 T 0074
|
||
END ELSE BEGIN ERROR(13); SKIP(99) END; 60447000 T 0075
|
||
END ELSE BEGIN ERROR(1); ASSIGNMENT END; 60448000 T 0077
|
||
END OF IDENTIFIER ELSE 60449000 T 0079
|
||
IF CURSY=BEGINSY THEN COMPSTAT ELSE 60450000 T 0079
|
||
IF CURSY=IFSY THEN IFSTAT ELSE 60451000 T 0081
|
||
IF CURSY=CASESY THEN CASESTAT ELSE 60452000 T 0083
|
||
IF CURSY=WHILESY THEN WHILESTAT ELSE 60453000 T 0085
|
||
IF CURSY=REPEATSY THEN REPEATSTAT ELSE 60454000 T 0088
|
||
IF CURSY=FORSY THEN FORSTAT ELSE 60455000 T 0090
|
||
IF CURSY=WITHSY THEN WITHSTAT ELSE 60456000 T 0092
|
||
IF CURSY=GOTOSY THEN GOTOSTAT ELSE 60457000 T 0094
|
||
IF CURSY=ASSERTSY THEN ASSERTSTAT ELSE %002- 60457500 C 0097
|
||
IF SYMKIND[CURSY]≠TERMINAL THEN 60458000 T 0099
|
||
BEGIN ERROR(13); INSYMBOL; SKIP(SEMICOLON) END; 60459000 T 0100
|
||
END OF STATEMENT; 60460000 T 0103
|
||
59 IS 106 LONG, NEXT SEG 2
|
||
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70001000 T 0118
|
||
% % 70002000 T 0118
|
||
% % 70003000 T 0118
|
||
% % 70004000 T 0118
|
||
% PART 7: TYPE DECLARATIONS. % 70005000 T 0118
|
||
% ------------------ % 70006000 T 0118
|
||
% % 70007000 T 0118
|
||
% % 70008000 T 0118
|
||
% % 70009000 T 0118
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70010000 T 0118
|
||
70011000 T 0118
|
||
70012000 T 0118
|
||
PROCEDURE FIELDLIST(RECTAB,FIRSTADDR,LASTADDR); 70017000 T 0118
|
||
VALUE RECTAB,FIRSTADDR; %700- 70018000 P 0118
|
||
INTEGER RECTAB,FIRSTADDR,LASTADDR; %700- 70019000 P 0118
|
||
FORWARD; 70020000 T 0118
|
||
70021000 T 0118
|
||
%700- 70035000 P 0118
|
||
PROCEDURE TYPEDECL( TTYPE, TSIZE ); %***** TYPE DECLARATION ***** 70036000 P 0118
|
||
INTEGER TTYPE, TSIZE; %**************************** 70037000 P 0118
|
||
BEGIN %700- 70038000 P 0118
|
||
INTEGER RECINX, ARRSTRUCT, TX, SX, T, N; REAL T1, T2, T3; %700- 70039000 P 0118
|
||
START OF SEGMENT ********** 61
|
||
BOOLEAN FIRST, PACKED; %700- 70040000 P 0000
|
||
%700- 70041000 P 0000
|
||
PROCEDURE TYPERR(ERRNUM,TTYPE,TSIZE); 70043000 T 0000
|
||
VALUE ERRNUM; 70044000 T 0000
|
||
INTEGER ERRNUM,TTYPE,TSIZE; 70045000 T 0000
|
||
BEGIN ERROR(ERRNUM); 70046000 T 0000
|
||
TTYPE:=TSIZE:=0; 70047000 T 0000
|
||
END TYPERR; %700- 70048000 P 0002
|
||
70049000 T 0002
|
||
PROCEDURE SUBRANGE; %*** SUBRANGE DECLARATION *** 70050000 P 0002
|
||
BEGIN %**************************** 70051000 P 0002
|
||
REAL VALX1, VALX2, T1; %700- 70052000 P 0002
|
||
START OF SEGMENT ********** 62
|
||
INTEGER TYPEX1, TYPEX2; %700- 70053000 C 0000
|
||
%700- 70054000 C 0000
|
||
CONSTANT(VALX1,TYPEX1); %700- 70055000 C 0000
|
||
IF TYPETAB1[TYPEX1].FORM>CHAR THEN ERROR(11); %700- 70056000 C 0001
|
||
IF CURSY≠DOUBLEDOT THEN ERROR(53); %700- 70057000 C 0003
|
||
INSYMBOL; %700- 70058000 C 0005
|
||
CONSTANT(VALX2,TYPEX2); %700- 70059000 C 0006
|
||
IF TYPEX1>0 AND TYPEX2>0 THEN %700- 70060000 C 0007
|
||
IF TYPEX1≠TYPEX2 THEN ERROR(11) ELSE %700- 70061000 C 0009
|
||
IF VALX1>VALX2 THEN ERROR(54); %700- 70062000 C 0011
|
||
IF (T1:=TYPETAB1[TYPEX1].FORM) = SYMBOLIC THEN T1:=SUBTYPE; %700- 70063000 C 0014
|
||
NEWTYPE; TTYPE:=TYPEINDEX; %700- 70064000 C 0017
|
||
T1.SIZE:=TSIZE:=1; T1.STRUCT:=0; T1.MAINTYPE:=TYPEX1; %700- 70065000 C 0024
|
||
TYPETAB1[TYPEINDEX]:=T1; %700- 70066000 C 0031
|
||
TYPETAB2[TYPEINDEX]:=VALX1; TYPETAB3[TYPEINDEX]:=VALX2; %700- 70067000 C 0032
|
||
END OF SUBRANGE; %700- 70068000 C 0035
|
||
62 IS 39 LONG, NEXT SEG 61
|
||
%700- 70069000 C 0002
|
||
PACKED:=FALSE; 70080000 T 0002
|
||
IF CURSY=IDENTIFIER THEN %*** SIMPLE TYPE DECLARATION *** 70081000 T 0003
|
||
BEGIN %******************************* 70082000 T 0004
|
||
SEARCH; 70083000 T 0005
|
||
IF FOUND THEN 70084000 T 0005
|
||
BEGIN 70085000 T 0005
|
||
IF THISID.IDCLASS=TYPES THEN 70086000 T 0006
|
||
BEGIN 70087000 T 0007
|
||
TTYPE:=THISID.TYPE; TSIZE:=TYPETAB1[TTYPE].SIZE; 70088000 T 0008
|
||
INSYMBOL; 70089000 T 0011
|
||
END ELSE IF THISID.IDCLASS=CONST THEN SUBRANGE 70090000 T 0011
|
||
ELSE TYPERR(7,TTYPE,TSIZE); 70091000 T 0014
|
||
END ELSE BEGIN TYPERR(1,TTYPE,TSIZE); INSYMBOL END; 70092000 T 0017
|
||
END ELSE 70093000 T 0021
|
||
IF CURSY≤CHARCONST OR CURSY=PLUS OR CURSY=MINUS THEN SUBRANGE ELSE 70094000 T 0021
|
||
IF CURSY=LPAR THEN 70095000 T 0025
|
||
BEGIN 70096000 T 0027
|
||
N:=0; 70097000 T 0027
|
||
NEWTYPE; T3.IDCLASS:=CONST; T3.TYPE:=TYPEINDEX; 70098000 T 0028
|
||
DO BEGIN 70099000 T 0036
|
||
INSYMBOL; 70100000 T 0037
|
||
IF CURSY=IDENTIFIER THEN 70101000 T 0037
|
||
BEGIN 70102000 T 0038
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL); 70103000 T 0038
|
||
T3.INFO:=N; NAMETAB3[CURLEVEL,THISINDEX]:=T3; 70104000 T 0040
|
||
N:=N+1; INSYMBOL; 70105000 T 0043
|
||
END ELSE ERROR(9); 70106000 T 0045
|
||
END UNTIL CURSY≠COMMA; 70107000 T 0046
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 70108000 T 0048
|
||
T1:=SYMBOLIC; T1.STRUCT:=0; 70109000 T 0050
|
||
T1.SIZE:=TSIZE:=1; TTYPE:=TYPEINDEX; 70110000 T 0053
|
||
TYPETAB1[TYPEINDEX]:=T1; 70111000 T 0056
|
||
TYPETAB2[TYPEINDEX]:=0; TYPETAB3[TYPEINDEX]:=N-1; 70112000 T 0058
|
||
IF CURSY=RPAR THEN INSYMBOL; 70113000 T 0061
|
||
END ELSE 70114000 T 0062
|
||
70115000 T 0062
|
||
IF CURSY=ARROW THEN %*** POINTER DECLARATION *** 70116000 T 0062
|
||
BEGIN %*************************** 70117000 T 0064
|
||
DEFINE DEC = POINTER #; %700- 70117100 C 0064
|
||
START OF SEGMENT ********** 63
|
||
INSYMBOL; 70118000 T 0000
|
||
IF CURSY=IDENTIFIER THEN 70119000 T 0000
|
||
BEGIN 70120000 T 0001
|
||
NEWTYPE; TTYPE:=TYPEINDEX; T1:=POINTERS; 70121000 T 0001
|
||
T1.SIZE:=TSIZE:=1; T1.STRUCT:=0; 70122000 T 0008
|
||
TYPETAB1[TYPEINDEX]:=T1; 70123000 T 0012
|
||
SEARCH; 70124000 T 0014
|
||
IF FOUND THEN 70125000 T 0014
|
||
BEGIN 70126000 T 0014
|
||
IF THISID.IDCLASS=TYPES THEN 70127000 T 0015
|
||
TYPETAB1[TYPEINDEX].POINTTYPE:=THISID.TYPE ELSE 70128000 T 0016
|
||
TYPERR(7,TTYPE,TSIZE); 70129000 T 0020
|
||
END ELSE 70130000 T 0022
|
||
BEGIN 70131000 T 0022
|
||
IF NUMPNTRS<MAXPNTRS THEN NUMPNTRS:=NUMPNTRS+1 ELSE ERROR(52); 70132000 T 0023
|
||
PNTRTAB1[NUMPNTRS]:=CURNAME1; PNTRTAB2[NUMPNTRS]:=CURNAME2; 70133000 T 0026
|
||
PNTRTAB3[NUMPNTRS]:=TYPEINDEX; 70134000 T 0029
|
||
END; 70135000 T 0030
|
||
INSYMBOL; 70136000 T 0030
|
||
END ELSE TYPERR(9,TTYPE,TSIZE); 70137000 T 0031
|
||
END OF POINTER DECLARATION ELSE 70138000 T 0034
|
||
63 IS 35 LONG, NEXT SEG 61
|
||
BEGIN 70139000 T 0065
|
||
IF CURSY=PACKEDSY THEN BEGIN PACKED:=TRUE; INSYMBOL END; 70140000 T 0065
|
||
70141000 T 0068
|
||
IF CURSY=ARRAYSY THEN %*** ARRAY DECLARATION *** 70142000 T 0068
|
||
BEGIN %************************* 70143000 T 0068
|
||
DEFINE DEC = ARRAY #; %700- 70143100 C 0069
|
||
START OF SEGMENT ********** 64
|
||
INSYMBOL; 70144000 T 0000
|
||
IF CURSY≠LBRACKET THEN ERROR(47) ELSE INSYMBOL; 70145000 T 0000
|
||
T1:=0; FIRST:=TRUE; 70146000 T 0003
|
||
DO BEGIN 70147000 T 0005
|
||
IF FIRST THEN FIRST:=FALSE ELSE INSYMBOL; 70148000 T 0005
|
||
TYPEDECL(TX,SX); 70149000 T 0007
|
||
IF TX>0 THEN 70150000 T 0008
|
||
BEGIN 70151000 T 0009
|
||
IF TYPETAB1[TX].FORM>CHAR THEN ERROR(48); 70152000 T 0009
|
||
T1:=ARRAYS; T1.INXTYPE:=TX; T1.ARRTYPE:=T; 70153000 T 0012
|
||
T2:=TYPETAB2[TX]; T3:=TYPETAB3[TX]; 70154000 T 0016
|
||
IF T3-T2>1022 THEN ERROR(61); 70155000 T 0018
|
||
T1.SIZE:=MIN(1023,T3-T2+1); 70156000 T 0021
|
||
NEWTYPE; 70157000 T 0026
|
||
TYPETAB1[TYPEINDEX]:=T1; 70158000 T 0031
|
||
TYPETAB2[TYPEINDEX]:=T2; TYPETAB3[TYPEINDEX]:=T3; 70159000 T 0032
|
||
T:=TYPEINDEX; 70160000 T 0035
|
||
END; 70161000 T 0035
|
||
END UNTIL CURSY≠COMMA; 70162000 T 0035
|
||
IF CURSY≠RBRACKET THEN ERROR(59) ELSE INSYMBOL; 70163000 T 0037
|
||
IF CURSY≠OFSY THEN BEGIN ERROR(18); SKIP(OFSY) END; 70164000 T 0040
|
||
INSYMBOL; 70165000 T 0042
|
||
TYPEDECL(TX,SX); 70166000 T 0043
|
||
IF TYPETAB1[TX].FORM≥FILES THEN ERROR(60); 70167000 T 0044
|
||
ARRSTRUCT:=TYPETAB1[TX].STRUCT; 70168000 T 0047
|
||
WHILE T>0 DO 70169000 T 0048
|
||
BEGIN 70170000 T 0050
|
||
T1:=TYPETAB1[T]; T3:=T1.ARRTYPE; 70171000 T 0050
|
||
T1.ARRTYPE:=TX; T1.STRUCT:=ARRSTRUCT:=ARRSTRUCT+1; 70172000 T 0052
|
||
T1.SIZE:=SX:=MIN(1024,SX×T1.SIZE); 70173000 T 0057
|
||
TYPETAB1[T]:=T1; TX:=T; T:=T3; 70174000 T 0062
|
||
END; 70175000 T 0065
|
||
TTYPE:=TX; TSIZE:=SX; 70176000 T 0067
|
||
END OF ARRAY DECLARATION ELSE 70177000 T 0069
|
||
64 IS 70 LONG, NEXT SEG 61
|
||
70178000 T 0070
|
||
IF CURSY=FILESY THEN %*** FILE DECLARATION *** 70179000 T 0070
|
||
BEGIN %************************ 70180000 T 0071
|
||
DEFINE DEC = FILE #; %700- 70180100 C 0071
|
||
START OF SEGMENT ********** 65
|
||
INSYMBOL; 70181000 T 0000
|
||
IF CURSY≠OFSY THEN 70182000 T 0000
|
||
BEGIN ERROR(18); 70183000 T 0001
|
||
IF CURSY≠IDENTIFIER THEN INSYMBOL; 70184000 T 0002
|
||
END ELSE INSYMBOL; 70185000 T 0004
|
||
TYPEDECL(TX,SX); 70186000 T 0005
|
||
IF TX>0 THEN 70187000 T 0006
|
||
BEGIN T:=TYPETAB1[TX]; 70188000 T 0007
|
||
IF T.FORM≥FILES THEN ERROR(50) ELSE 70189000 T 0008
|
||
IF T.STRUCT>1 THEN ERROR(49) 70190000 T 0011
|
||
END; 70191000 T 0013
|
||
NEWTYPE; TTYPE:=TYPEINDEX; 70192000 T 0014
|
||
T1:=IF T.FORM=CHAR THEN TEXTFILE ELSE FILES; 70193000 T 0020
|
||
T1.SIZE:=TSIZE:=SX; T1.FILETYPE:=TX; 70194000 T 0023
|
||
T1.STRUCT:=1; 70195000 T 0027
|
||
TYPETAB1[TYPEINDEX]:=T1; 70196000 T 0029
|
||
END OF FILE DECLARATION ELSE 70197000 T 0030
|
||
65 IS 31 LONG, NEXT SEG 61
|
||
70198000 T 0073
|
||
IF CURSY=SETSY THEN %*** SET DECLARATION *** 70199000 T 0073
|
||
BEGIN %*********************** 70200000 T 0074
|
||
DEFINE DEC = SET #; %700- 70200100 C 0074
|
||
START OF SEGMENT ********** 66
|
||
INSYMBOL; 70201000 T 0000
|
||
IF CURSY≠OFSY THEN 70202000 T 0000
|
||
BEGIN ERROR(18); 70203000 T 0001
|
||
IF CURSY>CHARCONST THEN INSYMBOL; 70204000 T 0002
|
||
END ELSE INSYMBOL; 70205000 T 0004
|
||
TYPEDECL(TX,SX); 70206000 T 0005
|
||
IF TX>0 THEN 70207000 T 0006
|
||
BEGIN 70208000 T 0007
|
||
IF TYPETAB1[TX].FORM>CHAR THEN ERROR(48) ELSE 70209000 T 0007
|
||
IF TYPETAB2[TX] LSS 0 OR TYPETAB3[TX] GTR 93 THEN ERROR(51); 70210000 P 0010
|
||
END; 70211000 T 0014
|
||
NEWTYPE; TTYPE:=TYPEINDEX; 70212000 T 0014
|
||
T1:=SET; T1.SETTYPE:=TX; T1.STRUCT:=0; 70213000 T 0020
|
||
T1.SIZE := TSIZE := 2; TYPETAB1[TYPEINDEX] := T1; % %601- 70214000 P 0024
|
||
TYPETAB2[TYPEINDEX]:=TYPETAB2[TX]; 70215000 T 0028
|
||
TYPETAB3[TYPEINDEX]:=TYPETAB3[TX]; 70216000 T 0029
|
||
END OF SET DECLARATION ELSE 70217000 T 0031
|
||
66 IS 32 LONG, NEXT SEG 61
|
||
70218000 T 0076
|
||
IF CURSY=RECORDSY THEN %*** RECORD DECLARATION *** 70219000 T 0076
|
||
BEGIN %************************** 70220000 T 0077
|
||
DEFINE DEC = RECORD #; %700- 70220100 C 0077
|
||
START OF SEGMENT ********** 67
|
||
IF LASTREC-1>CURLEVEL THEN LASTREC:=LASTREC-1 ELSE ERROR(55); 70221000 T 0000
|
||
RECINX:=LASTREC; 70222000 T 0004
|
||
BLOCKTAB[RECINX]:=NUMBLOCKS:=NUMBLOCKS+1; 70223000 T 0005
|
||
INSYMBOL; 70224000 T 0007
|
||
FIELDLIST(RECINX,0,SX); 70225000 T 0007
|
||
IF SX>1022 THEN BEGIN ERROR(56); SX:=1022 END; 70226000 T 0009
|
||
NEWTYPE; TTYPE:=TYPEINDEX; 70227000 T 0011
|
||
T1:=RECORD; T1.RECTAB:=RECINX; T1.STRUCT:=1; 70228000 T 0017
|
||
T1.SIZE:=TSIZE:=SX; TYPETAB1[TYPEINDEX]:=T1; 70229000 T 0022
|
||
TYPETAB2[TYPEINDEX]:=0; TYPETAB3[TYPEINDEX]:=SX-1; 70230000 T 0025
|
||
IF CURSY≠ENDSY THEN BEGIN ERROR(24); SKIP(ENDSY) END; 70231000 T 0028
|
||
IF CURSY=ENDSY THEN INSYMBOL; 70232000 T 0031
|
||
END ELSE BEGIN ERROR(4); SKIP(99) END; 70233000 T 0033
|
||
67 IS 34 LONG, NEXT SEG 61
|
||
END; 70234000 T 0081
|
||
END OF TYPEDECL; 70235000 T 0081
|
||
61 IS 90 LONG, NEXT SEG 2
|
||
70236000 T 0118
|
||
70237000 T 0118
|
||
PROCEDURE FIELDLIST(RECTAB,FIRSTADDR,LASTADDR); 70238000 T 0118
|
||
VALUE RECTAB,FIRSTADDR; 70239000 T 0118
|
||
INTEGER RECTAB,FIRSTADDR,LASTADDR; 70240000 T 0118
|
||
BEGIN 70241000 T 0118
|
||
INTEGER ARRAY ILIST[0:LISTLENGTH]; 70242000 T 0118
|
||
START OF SEGMENT ********** 68
|
||
INTEGER LISTINX; 70243000 T 0001
|
||
INTEGER CASETYPE,ADDR,MAXADDR,INDEX,CTYPE,TX,SX, T3,LLIM,ULIM,I; 70244000 P 0001
|
||
BOOLEAN FIRST; 70245000 T 0001
|
||
REAL T1, CVAL; %503- 70246000 P 0001
|
||
LABEL CASEPART, EXIT; %700- 70247000 P 0001
|
||
70248000 T 0001
|
||
ADDR:=FIRSTADDR; 70249000 T 0001
|
||
DO BEGIN 70250000 T 0002
|
||
WHILE CURSY=SEMICOLON DO INSYMBOL; 70251000 T 0003
|
||
IF CURSY=CASESY THEN GO TO CASEPART; 70252000 T 0005
|
||
IF CURSY=IDENTIFIER THEN 70253000 T 0006
|
||
BEGIN 70254000 T 0007
|
||
LISTINX:=0; FIRST:=TRUE; 70255000 T 0007
|
||
DO BEGIN 70256000 T 0009
|
||
IF FIRST THEN FIRST:=FALSE ELSE INSYMBOL; 70257000 T 0010
|
||
IF CURSY=IDENTIFIER THEN 70258000 T 0012
|
||
BEGIN 70259000 T 0013
|
||
IF LISTINX≥LISTLENGTH THEN BEGIN ERROR(37); LISTINX:=0 END; 70260000 T 0013
|
||
LISTINX:=LISTINX+1; 70261000 T 0016
|
||
NEWNAME(CURNAME1,CURNAME2,RECTAB); 70262000 T 0017
|
||
ILIST[LISTINX]:=THISINDEX; 70263000 T 0019
|
||
INSYMBOL; 70264000 T 0020
|
||
END ELSE 70265000 T 0020
|
||
BEGIN ERROR(9); 70266000 T 0020
|
||
IF CURSY≠COMMA THEN INSYMBOL; 70267000 T 0022
|
||
END; 70268000 T 0023
|
||
END UNTIL CURSY≠COMMA; 70269000 T 0023
|
||
IF CURSY≠COLON THEN BEGIN ERROR(26); SKIP(COLON) END; 70270000 T 0025
|
||
INSYMBOL; 70271000 T 0027
|
||
TYPEDECL(TX,SX); 70272000 T 0028
|
||
IF TX>0 THEN IF TYPETAB1[TX].FORM≥FILES THEN ERROR(57); 70273000 T 0029
|
||
T3.IDCLASS:=VAR; T3.TYPE:=TX; 70274000 T 0033
|
||
FOR I:=1 STEP 1 UNTIL LISTINX DO 70275000 T 0036
|
||
BEGIN 70276000 T 0038
|
||
T3.INFO:=ADDR; ADDR:=MIN(ADDR+SX,1024); 70277000 T 0038
|
||
NAMETAB3[RECTAB,ILIST[I]]:=T3; 70278000 T 0043
|
||
END; 70279000 T 0045
|
||
END; 70280000 T 0047
|
||
END UNTIL CURSY≠SEMICOLON; 70281000 T 0047
|
||
LASTADDR:=ADDR; 70282000 T 0049
|
||
GO TO EXIT; 70283000 T 0050
|
||
70284000 T 0052
|
||
CASEPART: 70285000 T 0052
|
||
BEGIN DEFINE DEC = VARIANT #; %700- 70285100 C 0052
|
||
START OF SEGMENT ********** 69
|
||
LABEL CASETYPEID; %700- 70285200 C 0000
|
||
LISTINX:=0; LASTADDR:=ADDR; INDEX:=-1; 70286000 T 0000
|
||
INSYMBOL; 70287000 T 0002
|
||
IF CURSY=IDENTIFIER THEN 70288000 T 0003
|
||
BEGIN 70289000 T 0004
|
||
SEARCH; 70290000 T 0004
|
||
IF FOUND AND THISID.IDCLASS=TYPES THEN GO TO CASETYPEID; 70291000 T 0005
|
||
NEWNAME(CURNAME1,CURNAME2,RECTAB); INDEX:=THISINDEX; 70292000 T 0007
|
||
INSYMBOL; 70293000 T 0009
|
||
IF CURSY≠COLON THEN ERROR(26); 70294000 T 0010
|
||
INSYMBOL; 70295000 T 0012
|
||
IF CURSY=IDENTIFIER THEN 70296000 T 0012
|
||
BEGIN 70297000 T 0013
|
||
SEARCH; 70298000 T 0013
|
||
IF FOUND THEN 70299000 T 0014
|
||
BEGIN 70300000 T 0014
|
||
IF THISID.IDCLASS=TYPES THEN 70301000 T 0015
|
||
BEGIN 70302000 T 0016
|
||
CASETYPEID: CASETYPE:=THISID.TYPE; T1:=TYPETAB1[CASETYPE]; 70303000 T 0016
|
||
LLIM:=TYPETAB2[CASETYPE]; ULIM:=TYPETAB3[CASETYPE]; 70304000 T 0019
|
||
IF T1.FORM>CHAR THEN ERROR(48); 70305000 T 0021
|
||
IF INDEX≥0 THEN 70306000 T 0023
|
||
BEGIN 70307000 T 0024
|
||
T3.IDCLASS:=VAR; T3.TYPE:=CASETYPE; T3.INFO:=ADDR; 70308000 T 0025
|
||
ADDR:=LASTADDR:=ADDR+1; NAMETAB3[RECTAB,INDEX]:=T3; 70309000 T 0030
|
||
END; 70310000 T 0034
|
||
INSYMBOL; 70311000 T 0034
|
||
END ELSE BEGIN ERROR(7); SKIP(OFSY) END; 70312000 T 0034
|
||
END ELSE BEGIN ERROR(1); SKIP(OFSY) END; 70313000 T 0036
|
||
END ELSE BEGIN ERROR(9); SKIP(OFSY) END; 70314000 T 0038
|
||
END ELSE BEGIN ERROR(9); SKIP(OFSY) END; 70315000 T 0040
|
||
IF CURSY≠OFSY THEN BEGIN ERROR(18); SKIP(RPAR) END; 70316000 T 0042
|
||
IF CURSY=OFSY THEN INSYMBOL; 70317000 T 0045
|
||
IF CASETYPE=0 THEN BEGIN LLIM:=-MAXINT; ULIM:=MAXINT END; 70318000 T 0047
|
||
DO BEGIN 70319000 T 0050
|
||
WHILE CURSY=SEMICOLON DO INSYMBOL; 70320000 T 0051
|
||
IF CURSY≤CHARCONST OR CURSY=PLUS OR CURSY=MINUS THEN 70321000 T 0055
|
||
BEGIN 70322000 T 0057
|
||
FIRST:=TRUE; 70323000 T 0058
|
||
DO BEGIN 70324000 T 0059
|
||
IF FIRST THEN FIRST:=FALSE ELSE INSYMBOL; 70325000 T 0059
|
||
CONSTANT(CVAL,CTYPE); 70326000 T 0061
|
||
IF CTYPE>0 THEN 70327000 T 0062
|
||
BEGIN 70328000 T 0063
|
||
IF CASETYPE=0 THEN CASETYPE:=CTYPE ELSE 70329000 T 0063
|
||
IF CVAL<LLIM OR CVAL>ULIM THEN ERROR(14) ELSE 70330000 T 0065
|
||
CHECKTYPES(CASETYPE,CTYPE); 70331000 T 0069
|
||
IF LISTINX≥LISTLENGTH THEN BEGIN ERROR(30); LISTINX:=0 END; 70332000 T 0070
|
||
LISTINX:=LISTINX+1; 70333000 T 0073
|
||
ILIST[LISTINX]:=CVAL; I:=1; 70334000 T 0074
|
||
WHILE ILIST[I]≠CVAL DO I:=I+1; 70335000 T 0076
|
||
IF I<LISTINX THEN ERROR(31); 70336000 T 0080
|
||
END; 70337000 T 0082
|
||
END UNTIL CURSY≠COMMA; 70338000 T 0082
|
||
IF CURSY≠COLON THEN BEGIN ERROR(26); SKIP(LPAR) END; 70339000 T 0083
|
||
IF CURSY=COLON THEN INSYMBOL; 70340000 T 0086
|
||
IF CURSY=LPAR THEN 70341000 T 0088
|
||
BEGIN 70342000 T 0088
|
||
INSYMBOL; FIELDLIST(RECTAB,ADDR,MAXADDR); 70343000 T 0089
|
||
IF MAXADDR>LASTADDR THEN LASTADDR:=MAXADDR; 70344000 T 0091
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(RPAR) END; 70345000 T 0093
|
||
INSYMBOL; 70346000 T 0096
|
||
END ELSE ERROR(58); 70347000 T 0096
|
||
END; 70348000 T 0097
|
||
END UNTIL CURSY NEQ SEMICOLON; % 70349000 T 0097
|
||
END; %700- 70349100 C 0099
|
||
69 IS 100 LONG, NEXT SEG 68
|
||
EXIT: 70350000 T 0053
|
||
END OF FIELDLIST; 70351000 T 0053
|
||
68 IS 61 LONG, NEXT SEG 2
|
||
|
||
|
||
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 80001000 T 0118
|
||
% % 80002000 T 0118
|
||
% % 80003000 T 0118
|
||
% % 80004000 T 0118
|
||
% PART 8: THE PROCEDURE BLOCK. % 80005000 T 0118
|
||
% -------------------- % 80006000 T 0118
|
||
% % 80007000 T 0118
|
||
% % 80008000 T 0118
|
||
% % 80009000 T 0118
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 80010000 T 0118
|
||
80011000 T 0118
|
||
80012000 T 0118
|
||
80013000 T 0118
|
||
PROCEDURE DECLAREVARS(PARAM,TAB,FIRST,LAST,LEVEL); 80014000 T 0118
|
||
VALUE PARAM,FIRST,LAST,LEVEL; 80015000 T 0118
|
||
INTEGER ARRAY TAB[0]; 80016000 T 0118
|
||
INTEGER FIRST,LAST,LEVEL; 80017000 T 0118
|
||
BOOLEAN PARAM; 80018000 T 0118
|
||
BEGIN 80019000 T 0118
|
||
INTEGER LEVEL1000, TYP, NAM, NAMTAB, I, J, RECSIZE; %503- 80020000 P 0118
|
||
START OF SEGMENT ********** 70
|
||
BOOLEAN REALVAR,ARRAYVAR,FIRSTDIM,EXTFILE; 80021000 T 0000
|
||
ALPHA T1, FNAME; %503- 80022000 P 0000
|
||
INTEGER FNLENGTH,FNSTART; % 80023000 T 0000
|
||
80024000 T 0000
|
||
LEVEL1000:=LEVEL×1000; 80025000 T 0000
|
||
FOR I:=FIRST STEP 1 UNTIL LAST DO 80026000 T 0001
|
||
BEGIN 80027000 T 0002
|
||
NAM:=TAB[I].[9:10]; NAMTAB:=NAMETAB3[LEVEL,NAM]; 80028000 T 0002
|
||
TYP:=NAMTAB.TYPE; T1:=TYPETAB1[TYP]; 80029000 T 0005
|
||
IF NAMTAB.IDCLASS GEQ FUNC THEN 80030000 T 0007
|
||
BEGIN 80031000 T 0008
|
||
IF REALVAR OR ARRAYVAR THEN 80032000 T 0009
|
||
BEGIN 80033000 T 0010
|
||
GEN(";",1,7); 80034000 T 0010
|
||
REALVAR:=ARRAYVAR:=FALSE; 80035000 T 0012
|
||
END; 80036000 T 0013
|
||
IF NAMTAB.IDCLASS=FUNC THEN GEN("FUNCTN",7,2) % %600- 80037000 P 0013
|
||
ELSE GEN("PROCEDU",8,1); % %600- 80038000 P 0016
|
||
GENID("V",LEVEL1000+NAM,5); GEN(";",1,7); 80039000 T 0019
|
||
END ELSE 80040000 T 0023
|
||
IF T1.STRUCT=0 THEN %*** SIMPLE TYPE *** 80041000 T 0023
|
||
BEGIN 80042000 T 0026
|
||
IF ARRAYVAR THEN BEGIN GEN(";",1,7); ARRAYVAR:=FALSE END; 80043000 T 0026
|
||
IF REALVAR THEN GEN(",",1,7) ELSE 80044000 T 0029
|
||
BEGIN GEN("REAL",5,4); REALVAR:=TRUE END; 80045000 T 0032
|
||
GENID("V",LEVEL1000+NAM,5); 80046000 T 0034
|
||
IF T1.FORM=SET THEN % %601- 80046200 C 0036
|
||
BEGIN % %601- 80046400 C 0038
|
||
GEN(",",1,7); GENID("W",LEVEL1000+NAM,5); % %601- 80046600 C 0038
|
||
END; % %601- 80046800 C 0042
|
||
END ELSE 80047000 T 0042
|
||
BEGIN 80048000 T 0042
|
||
IF REALVAR THEN BEGIN GEN(";",1,7); REALVAR:=FALSE END; 80049000 T 0044
|
||
IF T1.FORM<FILES THEN %*** ARRAY/RECORD *** 80050000 T 0047
|
||
BEGIN 80051000 T 0048
|
||
DEFINE %518- 80064005 C 0048
|
||
START OF SEGMENT ********** 71
|
||
LOWSUBS = 0 #, %518- 80064010 C 0000
|
||
HISUBS = 1 #, %518- 80064015 C 0000
|
||
NEXTSUBS= 2 #, %518- 80064020 C 0000
|
||
MAXNOOFSUBSCRIPTS = 20 #, %518- 80064025 C 0000
|
||
STOPPERSUBTAB = 21 #; %518- 80064030 C 0000
|
||
ARRAY ARRSUBSCRIPTRANGE[0:2,0:MAXNOOFSUBSCRIPTS]; %518- 80064035 C 0000
|
||
INTEGER FIRSTRANGE, NEXTFREEENTRY, PASSSUBRANGE, PREVPASS, %518- 80064040 C 0002
|
||
MP, POSNO, SUBDIFF; %518- 80064045 C 0002
|
||
IF ARRAYVAR THEN GEN(";",1,7) ELSE ARRAYVAR := TRUE; %518- 80064050 C 0002
|
||
IF NOT PARAM THEN %518- 80064055 C 0006
|
||
BEGIN %518- 80064060 C 0006
|
||
GEN("DEFINE",7,2); %518- 80064065 C 0007
|
||
GENID("V",LEVEL1000+NAM,5); %518- 80064070 C 0008
|
||
GEN("[",1,7); %518- 80064075 C 0010
|
||
END; %518- 80064080 C 0012
|
||
FIRSTRANGE := STOPPERSUBTAB; NEXTFREEENTRY := 0; %518- 80064085 C 0012
|
||
POSNO := 1; %518- 80064090 C 0013
|
||
MP := 10; FIRSTDIM := TRUE; %518- 80064095 C 0014
|
||
DO %518- 80064100 C 0016
|
||
BEGIN %518- 80064105 C 0016
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE %518- 80064110 C 0016
|
||
BEGIN %518- 80064111 C 0017
|
||
IF NOT PARAM THEN GEN(",",1,7); %518- 80064112 C 0019
|
||
END; %518- 80064113 C 0021
|
||
IF NOT PARAM THEN GENID("V",(LEVEL1000+NAM)×MP+POSNO,IF MP=10 80064115 C 0021
|
||
THEN 6 ELSE 7); POSNO := POSNO + 1; %518- 80064120 C 0022
|
||
IF POSNO = MP THEN MP := MP×10; %518- 80064125 C 0028
|
||
IF NEXTFREEENTRY = STOPPERSUBTAB THEN %518- 80064130 C 0031
|
||
BEGIN %518- 80064135 C 0032
|
||
ERROR(0); %518- 80064140 C 0032
|
||
END %518- 80064145 C 0033
|
||
ELSE %518- 80064150 C 0033
|
||
BEGIN %518- 80064155 C 0033
|
||
ARRSUBSCRIPTRANGE[LOWSUBS,NEXTFREEENTRY]:=TYPETAB2[TYP]; 80064160 C 0033
|
||
ARRSUBSCRIPTRANGE[HISUBS,NEXTFREEENTRY] := TYPETAB3[TYP]; 80064165 C 0036
|
||
END; %518- 80064170 C 0038
|
||
SUBDIFF := TYPETAB3[TYP] - TYPETAB2[TYP]; %518- 80064175 C 0038
|
||
IF FIRSTRANGE = STOPPERSUBTAB THEN %518- 80064180 C 0040
|
||
BEGIN %518- 80064185 C 0040
|
||
FIRSTRANGE := NEXTFREEENTRY; %518- 80064190 C 0041
|
||
NEXTFREEENTRY := NEXTFREEENTRY + 1; %518- 80064195 C 0042
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,FIRSTRANGE] := STOPPERSUBTAB; 80064200 C 0043
|
||
END %518- 80064205 C 0045
|
||
ELSE %518- 80064210 C 0045
|
||
BEGIN %518- 80064215 C 0045
|
||
PASSSUBRANGE := FIRSTRANGE; %518- 80064220 C 0045
|
||
PREVPASS := STOPPERSUBTAB; NEXTFREEENTRY:=NEXTFREEENTRY+1; 80064225 C 0046
|
||
WHILE(SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE] %518- 80064230 C 0047
|
||
-ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE]) AND 80064235 C 0050
|
||
(ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] ≠ %518- 80064240 C 0052
|
||
STOPPERSUBTAB) DO %518- 80064245 C 0053
|
||
BEGIN %518- 80064250 C 0054
|
||
PREVPASS := PASSSUBRANGE; %518- 80064255 C 0054
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS, %518- 8006426 C 0055
|
||
PASSSUBRANGE]; 80064265 C 0056
|
||
END; %518- 80064270 C 0057
|
||
IF PREVPASS = STOPPERSUBTAB THEN %518- 80064275 C 0057
|
||
BEGIN %518- 80064280 C 0058
|
||
IF SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS, %518- 80064285 C 0059
|
||
PASSSUBRANGE] - %518- 80064290 C 0060
|
||
ARRSUBSCRIPTRANGE[LOWSUBS, %518- 80064295 C 0060
|
||
PASSSUBRANGE] THEN%518- 80064300 C 0061
|
||
BEGIN %518- 80064305 C 0062
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] := %518- 80064310 C 0062
|
||
NEXTFREEENTRY - 1; %518- 80064315 C 0064
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] :=%518- 80064320 C 0065
|
||
STOPPERSUBTAB; %518- 80064325 C 0067
|
||
END %518- 80064330 C 0067
|
||
ELSE %518- 80064335 C 0067
|
||
BEGIN %518- 80064340 C 0067
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] :=%518- 80064345 C 0068
|
||
FIRSTRANGE; %518- 80064350 C 0070
|
||
FIRSTRANGE := NEXTFREEENTRY-1; %518- 80064355 C 0070
|
||
END %518- 80064360 C 0072
|
||
END %518- 80064365 C 0072
|
||
ELSE %518- 80064370 C 0072
|
||
BEGIN %518- 80064375 C 0072
|
||
IF SUBDIFF ≥ ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE] - 80064380 C 0072
|
||
ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE] 80064385 C 0074
|
||
THEN %518- 80064390 C 0075
|
||
BEGIN %518- 80064395 C 0075
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE] := %518- 80064400 C 0076
|
||
NEXTFREEENTRY - 1; %518- 80064405 C 0077
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := %518- 80064410 C 0078
|
||
STOPPERSUBTAB; %518- 80064415 C 0080
|
||
END %518- 80064420 C 0081
|
||
ELSE %518- 80064425 C 0081
|
||
BEGIN %518- 80064430 C 0081
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,PREVPASS] := %518- 80064435 C 0081
|
||
NEXTFREEENTRY -1; %518- 80064440 C 0083
|
||
ARRSUBSCRIPTRANGE[NEXTSUBS,NEXTFREEENTRY-1] := %518- 80064445 C 0084
|
||
PASSSUBRANGE; %518- 80064450 C 0086
|
||
END %518- 80064455 C 0086
|
||
END %518- 80064460 C 0086
|
||
END;TYP:=IF T1.FORM = ARRAYS THEN T1.ARRTYPE ELSE REALTYPE; 80064465 C 0086
|
||
T1 := TYPETAB1[TYP]; %518- 80064470 C 0090
|
||
END UNTIL T1.STRUCT = 0 ; %518- 80064475 C 0091
|
||
IF NOT PARAM THEN %518- 80064480 C 0093
|
||
BEGIN %518- 80064485 C 0093
|
||
GEN("]=",2,6); %518- 80064490 C 0094
|
||
GENID("H",LEVEL1000+NAM,5); %518- 80064495 C 0095
|
||
GEN("[",1,7); %518- 80064500 C 0097
|
||
PASSSUBRANGE:= FIRSTRANGE; FIRSTDIM := TRUE; %518- 80064505 C 0099
|
||
WHILE PASSSUBRANGE ≠ STOPPERSUBTAB DO %518- 80064510 C 0100
|
||
BEGIN %518- 80064515 C 0102
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE GEN(",",1,7); 80064520 C 0102
|
||
GENID("V",(LEVEL1000+NAM)×(IF PASSSUBRANGE>9 THEN 100 ELSE 8006453 C 0107
|
||
10)+PASSSUBRANGE+1,IF PASSSUBRANGE>9 THEN 7 ELSE 6); 80064535 C 0107
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE]; 80064540 C 0115
|
||
END; %518- 80064545 C 0116
|
||
GEN("]#;",3,5); %518- 80064550 C 0117
|
||
END; %518- 80064555 C 0118
|
||
PASSSUBRANGE := FIRSTRANGE; %518- 80064560 C 0118
|
||
FIRSTDIM := TRUE; GEN("ARRAY",6,3); GENID("H",LEVEL1000+NAM,5); 80064565 C 0119
|
||
GEN("[",1,7); %518- 80064570 C 0123
|
||
WHILE PASSSUBRANGE ≠ STOPPERSUBTAB DO %518- 80064575 C 0125
|
||
BEGIN %518- 80064580 C 0127
|
||
IF MAXPERMTAB LEQ MAXTOTALSUBSCRS AND PARAM THEN %518- 80064585 C 0127
|
||
BEGIN %518- 80064590 C 0128
|
||
ARRSUBPERMTAB[ARRNAM,MAXPERMTAB] := %518- 80064595 C 0129
|
||
IF FIRSTDIM THEN NAM ELSE -1; %518- 80064600 C 0130
|
||
ARRSUBPERMTAB[PERMSUB,MAXPERMTAB] := PASSSUBRANGE; %518- 80064605 C 0132
|
||
MAXPERMTAB := MAXPERMTAB + 1; %518- 80064610 C 0134
|
||
END %518- 80064615 C 0136
|
||
ELSE %518- 80064620 C 0136
|
||
BEGIN %518- 80064625 C 0136
|
||
IF MAXPERMTAB > MAXTOTALSUBSCRS THEN ERROR(0); %518- 80064630 C 0139
|
||
END; %518- 80064640 C 0141
|
||
IF FIRSTDIM THEN FIRSTDIM := FALSE ELSE GEN(",",1,7); %518- 80064645 C 0141
|
||
GENINT(ARRSUBSCRIPTRANGE[LOWSUBS,PASSSUBRANGE]); %518- 80064650 C 0144
|
||
IF NOT PARAM THEN %518- 80064655 C 0146
|
||
BEGIN %518- 80064660 C 0146
|
||
GEN(":",1,7); %518- 80064665 C 0147
|
||
GENINT(ARRSUBSCRIPTRANGE[HISUBS,PASSSUBRANGE]); %518- 80064670 C 0148
|
||
END; %518- 80064675 C 0150
|
||
PASSSUBRANGE := ARRSUBSCRIPTRANGE[NEXTSUBS,PASSSUBRANGE]; %518- 80064680 C 0150
|
||
END; %518- 80064685 C 0152
|
||
IF T1.FORM=SET THEN % %601- 80064700 C 0152
|
||
BEGIN % %601- 80064750 C 0154
|
||
GEN(",0",2,6); % %601- 80064800 C 0154
|
||
IF NOT PARAM THEN GEN(":1",2,6); % %601- 80064850 C 0156
|
||
END; % %601- 80064900 C 0158
|
||
GEN("]",1,7); %518- 80064950 C 0158
|
||
END ELSE 80065000 T 0160
|
||
71 IS 164 LONG, NEXT SEG 70
|
||
BEGIN %*** FILE *** 80066000 T 0050
|
||
DEFINE DEC = FILE #; %700- 80066100 C 0050
|
||
START OF SEGMENT ********** 72
|
||
IF REALVAR OR ARRAYVAR THEN 80067000 T 0000
|
||
BEGIN GEN(";",1,7); REALVAR:=ARRAYVAR:=FALSE END; 80068000 T 0000
|
||
IF T1.FORM=TEXTFILE AND NOT PARAM THEN 80069000 T 0004
|
||
BEGIN 80070000 T 0006
|
||
IF NUMFILES≥MAXFILES THEN ERROR(97) 80071000 T 0006
|
||
ELSE NUMFILES:=NUMFILES+1; 80072000 T 0008
|
||
FILETAB[NUMFILES]:=NAM; 80073000 T 0010
|
||
END; 80074000 T 0011
|
||
EXTFILE:=FALSE; 80075000 T 0011
|
||
FNAME:=NAMETAB1[LEVEL,NAM]; 80076000 T 0012
|
||
FNLENGTH := FNAME.NAMELENGTH; FNSTART := 8-FNLENGTH; % 80077000 T 0014
|
||
IF FNLENGTH LEQ 6 THEN % 80078000 T 0016
|
||
BEGIN 80079000 T 0017
|
||
FOR J:=1 STEP 1 UNTIL NUMEXTFILES DO 80080000 T 0017
|
||
IF FNAME=EXTFILETAB[J] THEN EXTFILE:=TRUE; 80081000 T 0019
|
||
END; 80082000 T 0023
|
||
IF EXTFILE AND NOT PARAM THEN 80083000 T 0023
|
||
BEGIN 80084000 T 0024
|
||
IF NUMFILES GEQ MAXFILES THEN ERROR(97) 80085000 T 0025
|
||
ELSE 80086000 T 0026
|
||
NUMFILES := NUMFILES + 1; 80087000 T 0027
|
||
FILETAB[NUMFILES] := -NAM - 1; 80088000 T 0028
|
||
GEN("DEFINE",7,2); GENID("F",LEVEL1000+NAM,5); 80089000 T 0030
|
||
GEN("=",1,7); 80090000 T 0034
|
||
GEN(FNAME,FNLENGTH,FNSTART); % 80091000 T 0035
|
||
GEN("#;",2,6); GEN("SAVE",5,4); GEN("FILE",5,4); 80092000 T 0037
|
||
GEN(FNAME,FNLENGTH,FNSTART); % 80093000 T 0041
|
||
END ELSE 80094000 T 0043
|
||
BEGIN 80095000 T 0043
|
||
GEN("FILE",5,4); GENID("F",LEVEL1000+NAM,5); 80096000 T 0047
|
||
END; 80097000 T 0050
|
||
IF NOT PARAM THEN 80098000 T 0050
|
||
BEGIN 80099000 T 0051
|
||
GEN(" DISK",6,3); GEN("SERIAL",7,2); 80100000 T 0051
|
||
IF EXTFILE THEN 80101000 T 0054
|
||
BEGIN 80102000 T 0054
|
||
IF ALGOLCNT LSS 14 THEN WRITEALGOL; %517- 80103000 P 0055
|
||
GEN("[0:0]",5,3); 80104000 T 0057
|
||
GEN(""",1,7); 80105000 T 0058
|
||
GEN(FNAME,FNLENGTH,FNSTART); % 80106000 T 0060
|
||
GEN(""/",2,6); %700- 80107000 P 0061
|
||
IF ALGOLCNT<9 THEN WRITEALGOL; 80108000 T 0063
|
||
GEN(""",1,7); GEN(USER,7,1); GEN(""",1,7); 80109000 T 0064
|
||
END ELSE 80110000 T 0069
|
||
BEGIN 80111000 T 0069
|
||
GEN("[20:",4,4); GEN("300]",4,4); 80112000 T 0075
|
||
END; 80113000 T 0078
|
||
GEN("(1,",3,5); 80114000 T 0078
|
||
RECSIZE:=IF T1.FORM=TEXTFILE THEN 10 ELSE 80115000 T 0079
|
||
IF TYPETAB1[T1.FILETYPE].STRUCT=0 THEN 1 ELSE 80116000 T 0082
|
||
TYPETAB3[T1.FILETYPE]-TYPETAB2[T1.FILETYPE]+1; 80117000 T 0085
|
||
GENINT(RECSIZE); GEN(",",1,7); 80118000 T 0088
|
||
IF RECSIZE=1 OR RECSIZE=10 THEN GENINT(30) %703- 80119000 P 0090
|
||
ELSE GENINT(RECSIZE); 80120000 T 0093
|
||
IF ALGOLCNT LSS 10 THEN WRITEALGOL; 80121000 T 0098
|
||
GEN(",SAVE",6,3); %703- 80122000 P 0100
|
||
GEN("30);", 4,4); %703- 80123000 P 0102
|
||
END ELSE GEN(";",1,7); 80124000 T 0103
|
||
GEN("ARRAY",6,3); GENID("V",LEVEL1000+NAM,5); 80125000 T 0107
|
||
GEN("[",1,7); 80126000 T 0111
|
||
IF TYPETAB1[T1.FILETYPE].STRUCT=0 THEN 80127000 T 0112
|
||
BEGIN 80128000 T 0114
|
||
IF PARAM THEN GEN("0",1,7) ELSE BEGIN %002- 80129000 P 0115
|
||
GEN("0:",2,6); %002- 80129100 C 0119
|
||
GENINT(RECSIZE-1); %002- 80129200 C 0120
|
||
END %002- 80129300 C 0121
|
||
END ELSE 80130000 T 0121
|
||
BEGIN 80131000 T 0121
|
||
GENINT(TYPETAB2[T1.FILETYPE]); 80132000 T 0122
|
||
IF NOT PARAM THEN 80133000 T 0123
|
||
BEGIN GEN(":",1,7); GENINT(TYPETAB3[T1.FILETYPE]) END; 80134000 T 0124
|
||
END; 80135000 T 0127
|
||
GEN("];",2,6); 80136000 T 0127
|
||
GEN("INTEGER",8,1); GENID("I",LEVEL1000+NAM,5); 80137000 T 0129
|
||
GEN(";",1,7); 80138000 T 0132
|
||
END; 80139000 T 0134
|
||
72 IS 137 LONG, NEXT SEG 70
|
||
END; 80140000 T 0051
|
||
END OF LOOP; 80141000 T 0051
|
||
IF REALVAR OR ARRAYVAR THEN GEN(";",1,7); 80142000 T 0053
|
||
END OF DECLAREVARS; 80143000 T 0056
|
||
70 IS 65 LONG, NEXT SEG 2
|
||
80144000 T 0118
|
||
80145000 T 0118
|
||
PROCEDURE PARAMETERLIST; 80146000 T 0118
|
||
BEGIN 80147000 T 0118
|
||
INTEGER FIRSTPARAM, CURKIND, P1, PX, I, T3; REAL T; %503- 80148000 P 0118
|
||
START OF SEGMENT ********** 73
|
||
BOOLEAN FIRST; 80149000 T 0000
|
||
80150000 T 0000
|
||
DEFINE NEWPARAM= 80151000 T 0000
|
||
BEGIN 80152000 T 0000
|
||
IF NUMPARAMS≥MAXPARAMS THEN 80153000 T 0000
|
||
BEGIN ERROR(70); NUMPARAMS:=MAXPARAMS-10 END; 80154000 T 0000
|
||
NUMPARAMS:=NUMPARAMS+1; 80155000 T 0000
|
||
END OF NEWPARAM#; 80156000 T 0000
|
||
80157000 T 0000
|
||
NEWPARAM; FIRSTPARAM:=NUMPARAMS; 80158000 T 0000
|
||
IF CURSY=LPAR THEN 80159000 T 0005
|
||
BEGIN 80160000 T 0006
|
||
DO BEGIN 80161000 T 0006
|
||
INSYMBOL; 80162000 T 0007
|
||
IF CURSY=VARSY OR CURSY=FUNCSY OR CURSY=PROCSY THEN 80163000 T 0007
|
||
BEGIN 80164000 T 0010
|
||
CURKIND:=IF CURSY=VARSY THEN VAR ELSE 80165000 T 0010
|
||
IF CURSY=FUNCSY THEN FUNC ELSE PROC; 80166000 T 0012
|
||
INSYMBOL; 80167000 T 0015
|
||
END ELSE CURKIND:=CONST; 80168000 T 0016
|
||
FIRST:=TRUE; P1:=NUMPARAMS+1; 80169000 T 0017
|
||
DO BEGIN 80170000 T 0019
|
||
IF FIRST THEN FIRST:=FALSE ELSE INSYMBOL; 80171000 T 0020
|
||
IF CURSY=IDENTIFIER THEN 80172000 T 0022
|
||
BEGIN 80173000 T 0023
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL+1); 80174000 T 0023
|
||
PX:=THISINDEX; PX.PARAMKIND:=CURKIND; 80175000 T 0025
|
||
PX.PARAMLEVEL:=CURLEVEL+1; 80176000 T 0028
|
||
NEWPARAM; PARAMTAB[NUMPARAMS]:=PX; 80177000 T 0030
|
||
FORWPARAM1[NUMPARAMS] := CURNAME1; %002- 80177500 C 0036
|
||
FORWPARAM2[NUMPARAMS] := CURNAME2; %002- 80177600 C 0037
|
||
END ELSE ERROR(9); 80178000 T 0038
|
||
INSYMBOL; 80179000 T 0039
|
||
END UNTIL CURSY≠COMMA; 80180000 T 0040
|
||
IF CURSY=COLON THEN 80181000 T 0041
|
||
BEGIN 80182000 T 0042
|
||
IF CURKIND=PROC THEN ERROR(90); 80183000 T 0042
|
||
INSYMBOL; 80184000 T 0044
|
||
IF CURSY=IDENTIFIER THEN 80185000 T 0045
|
||
BEGIN 80186000 T 0046
|
||
SEARCH; 80187000 T 0046
|
||
IF FOUND THEN 80188000 T 0047
|
||
BEGIN 80189000 T 0047
|
||
IF THISID.IDCLASS=TYPES THEN 80190000 T 0047
|
||
BEGIN 80191000 T 0049
|
||
T3:=THISID.TYPE; 80192000 T 0049
|
||
FOR I:=P1 STEP 1 UNTIL NUMPARAMS DO 80193000 T 0050
|
||
PARAMTAB[I].PARAMTYPE:=T3; 80194000 T 0052
|
||
IF CURKIND=CONST OR CURKIND=VAR THEN 80195000 T 0056
|
||
BEGIN 80196000 T 0058
|
||
T:=TYPETAB1[T3]; 80197000 T 0059
|
||
IF T.FORM≥FILES THEN 80198000 T 0060
|
||
FOR I:=P1 STEP 1 UNTIL NUMPARAMS DO 80199000 T 0061
|
||
PARAMTAB[I].PARAMFILE:=1; 80200000 T 0063
|
||
IF T.STRUCT>0 AND CURKIND=CONST THEN ERROR(94); 80201000 T 0067
|
||
END ELSE IF T.STRUCT>0 THEN ERROR(38); 80202000 T 0071
|
||
END ELSE BEGIN ERROR(7); T3:=0 END; 80203000 T 0074
|
||
END ELSE BEGIN ERROR(1); T3:=0 END; 80204000 T 0076
|
||
END ELSE BEGIN ERROR(9); T3:=0 END; 80205000 T 0078
|
||
INSYMBOL; 80206000 T 0080
|
||
END ELSE 80207000 T 0080
|
||
BEGIN 80208000 T 0080
|
||
IF CURKIND≠PROC THEN ERROR(7); 80209000 T 0081
|
||
T3:=0; 80210000 T 0083
|
||
END; 80211000 T 0084
|
||
T3.IDCLASS:=CURKIND; T3.FORMAL:=1; 80212000 T 0084
|
||
FOR I:=P1 STEP 1 UNTIL NUMPARAMS DO 80213000 T 0087
|
||
NAMETAB3[CURLEVEL+1,PARAMTAB[I].PARAMNAME]:=T3; 80214000 T 0089
|
||
END UNTIL CURSY≠SEMICOLON; 80215000 T 0094
|
||
IF CURSY≠RPAR THEN 80216000 T 0095
|
||
BEGIN ERROR(49); SKIP(RPAR); 80217000 T 0096
|
||
IF CURSY=RPAR THEN INSYMBOL; 80218000 T 0098
|
||
END ELSE INSYMBOL; 80219000 T 0100
|
||
END; 80220000 T 0101
|
||
PARAMTAB[FIRSTPARAM]:=NUMPARAMS-FIRSTPARAM; 80221000 T 0101
|
||
END OF PARAMETERLIST; 80222000 T 0103
|
||
73 IS 108 LONG, NEXT SEG 2
|
||
80223000 T 0118
|
||
80400000 T 0118
|
||
PROCEDURE BLOCK; 80401000 T 0118
|
||
BEGIN 80402000 T 0118
|
||
INTEGER INDEX, CTYPE, NUMFORWARDS,TX, I; % %800- 80403000 P 0118
|
||
START OF SEGMENT ********** 74
|
||
ALPHA T3; %002- 80403500 C 0000
|
||
REAL T, CVAL; %503- 80404000 P 0000
|
||
ALPHA C1,C2; 80405000 T 0000
|
||
BOOLEAN VALUEPARAMS,FUN; 80406000 T 0000
|
||
LABEL START; 80407000 T 0000
|
||
80408000 T 0000
|
||
INTEGER LABTABTOP,CONSTTABTOP,TYPETABTOP,PARAMTABTOP,TOPREC, 80409000 T 0000
|
||
FORMERFIRSTLAB,FIRSTFILE; 80410000 T 0000
|
||
80411000 T 0000
|
||
FORMERFIRSTLAB:=FIRSTLAB; 80412000 T 0000
|
||
LABTABTOP:=NUMLABS; FIRSTLAB:=LABTABTOP+1; 80413000 T 0000
|
||
CONSTTABTOP:=NUMCONSTS; 80414000 T 0002
|
||
TYPETABTOP:=NUMTYPES; 80415000 T 0003
|
||
PARAMTABTOP:=NUMPARAMS; 80416000 T 0004
|
||
TOPREC:=LASTREC; 80417000 T 0005
|
||
FIRSTFILE:=NUMFILES+1; 80418000 T 0005
|
||
80419000 T 0007
|
||
TOPLEVEL:=CURLEVEL; 80420000 T 0007
|
||
MARGIN("+P",CURLEVEL); % MARK PROCEDURE LEVEL %712- 80420100 C 0007
|
||
IF CURLEVEL > 1 THEN %518- 80421010 C 0025
|
||
BEGIN %518- 80421020 C 0026
|
||
INTEGER NAMOFTHING,DIFF; %518- 80421030 C 0026
|
||
START OF SEGMENT ********** 75
|
||
BOOLEAN FIRSTTIME; %518- 80421040 C 0000
|
||
GEN("BEGIN",6,3); %518- 80421050 C 0000
|
||
IF MAXPERMTAB > 0 THEN %518- 80421060 C 0001
|
||
BEGIN %518- 80421070 C 0002
|
||
PASSPERMTAB := 0; %518- 80421080 C 0002
|
||
DO %518- 80421090 C 0003
|
||
BEGIN %518- 80421100 C 0004
|
||
REMEMBERPOSN := PASSPERMTAB; %518- 80421110 C 0004
|
||
GEN("DEFINE",7,2); %518- 80421120 C 0004
|
||
NAMOFTHING := ARRSUBPERMTAB[ARRNAM,PASSPERMTAB]; %518- 80421130 C 0006
|
||
GENID("V",1000×CURLEVEL+NAMOFTHING,5); %518- 80421140 C 0008
|
||
GEN("[",1,7); %518- 80421150 C 0010
|
||
FIRSTTIME := TRUE; %518- 80421160 C 0012
|
||
DO %518- 80421170 C 0012
|
||
BEGIN %518- 80421180 C 0013
|
||
IF FIRSTTIME THEN FIRSTTIME := FALSE ELSE GEN(",",1 80421190 C 0013
|
||
,7); 80421200 C 0014
|
||
DIFF := PASSPERMTAB-REMEMBERPOSN+1; %518- 80421210 C 0018
|
||
GENID("V",(1000+CURLEVEL+NAMOFTHING)×(IF DIFF>9 THEN 100 ELSE 80421220 C 0020
|
||
10)+DIFF,(IF DIFF > 9 THEN 7 ELSE 6)); %518- 80421230 C 0020
|
||
PASSPERMTAB := PASSPERMTAB + 1; END %518- 80421270 C 0027
|
||
UNTIL PASSPERMTAB = MAXPERMTAB OR %518- 80421280 C 0029
|
||
ARRSUBPERMTAB[ARRNAM,PASSPERMTAB] ≠ -1; %518- 80421290 C 0029
|
||
GEN("]",1,7); %518- 80421300 C 0032
|
||
GEN("=",1,7); %518- 80421310 C 0034
|
||
GENID("H",1000×CURLEVEL+NAMOFTHING,5); %518- 80421320 C 0035
|
||
GEN("[",1,7); %518- 80421340 C 0038
|
||
PASSPERMTAB := REMEMBERPOSN; FIRSTTIME := TRUE; %518- 80421350 C 0039
|
||
DO %518- 80421360 C 0041
|
||
BEGIN %518- 80421370 C 0041
|
||
IF FIRSTTIME THEN FIRSTTIME := FALSE ELSE GEN(",", 80421380 C 0041
|
||
1,7); 80421390 C 0042
|
||
DIFF := ARRSUBPERMTAB[PERMSUB,PASSPERMTAB]+1; %518- 80421400 C 0044
|
||
GENID("V",(1000×CURLEVEL+NAMOFTHING)×(IF DIFF>9 THEN 80421410 C 0046
|
||
100 ELSE 10)+DIFF,(IF DIFF>9 THEN 7 ELSE 6)); 80421420 C 0046
|
||
PASSPERMTAB := PASSPERMTAB +1; %518- 80421430 C 0054
|
||
END %518- 80421440 C 0055
|
||
UNTIL PASSPERMTAB = MAXPERMTAB OR %518- 80421450 C 0055
|
||
ARRSUBPERMTAB[ARRNAM,PASSPERMTAB] ≠ -1; %518- 80421460 C 0056
|
||
GEN("]#;",3,5); %518- 80421470 C 0059
|
||
END %518- 80421480 C 0060
|
||
UNTIL PASSPERMTAB = MAXPERMTAB; %518- 80421490 C 0060
|
||
MAXPERMTAB := 0; %518- 80421500 C 0061
|
||
END %518- 80421510 C 0062
|
||
END; %518- 80421520 C 0062
|
||
75 IS 64 LONG, NEXT SEG 74
|
||
START: 80422000 T 0029
|
||
IF CURSY=LABELSY THEN %*** LABEL DECLARATION *** 80423000 T 0029
|
||
BEGIN %************************* 80424000 T 0029
|
||
DEFINE DEC = LABEL #; %700- 80424100 C 0030
|
||
START OF SEGMENT ********** 76
|
||
GEN("LABEL",6,3); 80425000 T 0000
|
||
DO BEGIN 80426000 T 0001
|
||
INSYMBOL; 80427000 T 0002
|
||
IF CURSY=INTCONST THEN 80428000 T 0002
|
||
BEGIN 80429000 T 0003
|
||
GENID("L",CURVAL,4); 80430000 T 0003
|
||
IF CURVAL>9999 THEN ERROR(33); 80431000 T 0005
|
||
FOR I:=FIRSTLAB STEP 1 UNTIL NUMLABS DO 80432000 T 0007
|
||
IF LABTAB[I].LABVAL=CURVAL THEN ERROR(31); 80433000 T 0010
|
||
IF NUMLABS≥MAXLABS THEN BEGIN ERROR(34); NUMLABS:=0 END; 80434000 T 0015
|
||
NUMLABS:=NUMLABS+1; 80435000 T 0017
|
||
LABTAB[NUMLABS]:=CURVAL; 80436000 T 0019
|
||
INSYMBOL; 80437000 T 0020
|
||
END ELSE BEGIN ERROR(10); SKIP(COMMA) END; 80438000 T 0020
|
||
IF CURSY=COMMA THEN GEN(",",1,7); 80439000 T 0022
|
||
END UNTIL CURSY≠COMMA; 80440000 T 0025
|
||
IF CURSY≠SEMICOLON THEN BEGIN ERROR(25); SKIP(SEMICOLON) END; 80441000 T 0026
|
||
GEN(";",1,7); 80442000 T 0029
|
||
IF SYMKIND[CURSY]≠INITIAL THEN INSYMBOL; 80443000 T 0031
|
||
END OF LABEL DECLARATION; 80444000 T 0033
|
||
76 IS 34 LONG, NEXT SEG 74
|
||
80445000 T 0031
|
||
IF CURSY=CONSTSY THEN %*** CONSTANT DECLARATION *** 80446000 T 0031
|
||
BEGIN %**************************** 80447000 T 0031
|
||
LABEL LL1; % %002- 80447010 C 0032
|
||
START OF SEGMENT ********** 77
|
||
DEFINE DEC = CONST #; %700- 80447100 C 0000
|
||
INSYMBOL; 80448000 T 0000
|
||
DO BEGIN 80449000 T 0000
|
||
IF CURSY=IDENTIFIER THEN 80450000 T 0001
|
||
BEGIN 80451000 T 0001
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL); INDEX:=THISINDEX; 80452000 T 0002
|
||
INSYMBOL; 80453000 T 0004
|
||
IF CURSY=EQLSY THEN 80454000 T 0004
|
||
BEGIN 80455000 T 0005
|
||
INSYMBOL; CONSTANT(CVAL,CTYPE); 80456000 T 0006
|
||
T3:=CTYPE; T3.IDCLASS:=CONST; 80457000 T 0007
|
||
IF CVAL.[46:8]≠0 OR CVAL>1023 THEN 80458000 T 0010
|
||
BEGIN 80459000 T 0012
|
||
IF NUMCONSTS≥MAXCONSTS THEN 80460000 T 0012
|
||
BEGIN ERROR(35); NUMCONSTS:=0 END; 80461000 T 0013
|
||
NUMCONSTS:=NUMCONSTS+1; 80462000 T 0015
|
||
CONSTTAB[NUMCONSTS]:=CVAL; 80463000 T 0016
|
||
T3.INFO:=1023+NUMCONSTS; 80464000 T 0018
|
||
END ELSE T3.INFO:=CVAL; 80465000 T 0020
|
||
NAMETAB3[CURLEVEL,INDEX]:=T3; 80466000 T 0022
|
||
END ELSE BEGIN ERROR(36); SKIP(SEMICOLON) END; 80467000 T 0024
|
||
END ELSE BEGIN ERROR(9); SKIP(SEMICOLON) END; 80468000 T 0026
|
||
IF CURSY≠SEMICOLON THEN BEGIN ERROR(25); SKIP(SEMICOLON) END; 80469000 T 0028
|
||
IF SYMKIND[CURSY]≠INITIAL THEN INSYMBOL; 80470000 T 0031
|
||
END UNTIL CURSY≠IDENTIFIER; 80471000 T 0033
|
||
END OF CONSTANT DECLARATION; 80472000 T 0034
|
||
77 IS 35 LONG, NEXT SEG 74
|
||
80473000 T 0033
|
||
IF CURSY=TYPESY THEN %*** TYPE DECLARATION **** 80474000 T 0033
|
||
BEGIN %************************* 80475000 T 0033
|
||
DEFINE DEC = TYPE #; %700- 80475100 C 0034
|
||
START OF SEGMENT ********** 78
|
||
INSYMBOL; 80476000 T 0000
|
||
DO BEGIN 80477000 T 0000
|
||
IF CURSY=IDENTIFIER THEN 80478000 T 0001
|
||
BEGIN 80479000 T 0001
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL); INDEX:=THISINDEX; 80480000 T 0002
|
||
INSYMBOL; 80481000 T 0004
|
||
IF CURSY=EQLSY THEN 80482000 T 0004
|
||
BEGIN 80483000 T 0005
|
||
INSYMBOL; 80484000 T 0006
|
||
TYPEDECL(CTYPE,TX); 80485000 T 0006
|
||
T3:=CTYPE; T3.IDCLASS:=TYPES; 80486000 T 0007
|
||
NAMETAB3[CURLEVEL,INDEX]:=T3; 80487000 T 0010
|
||
END ELSE BEGIN ERROR(36); SKIP(SEMICOLON) END; 80488000 T 0012
|
||
END ELSE BEGIN ERROR(9); SKIP(SEMICOLON) END; 80489000 T 0014
|
||
IF CURSY≠SEMICOLON THEN BEGIN ERROR(25); SKIP(SEMICOLON) END; 80490000 T 0016
|
||
IF SYMKIND[CURSY]≠INITIAL THEN INSYMBOL; 80491000 T 0018
|
||
END UNTIL CURSY≠IDENTIFIER; 80492000 T 0020
|
||
END OF TYPE DECLARATION; 80493000 T 0022
|
||
78 IS 23 LONG, NEXT SEG 74
|
||
80494000 T 0035
|
||
IF CURSY=VARSY THEN %*** VARIABLE DECLARATION *** 80495000 T 0035
|
||
BEGIN %**************************** 80496000 T 0035
|
||
LABEL LL2; % %002- 80496010 C 0036
|
||
START OF SEGMENT ********** 79
|
||
DEFINE DEC = VAR #; %700- 80496100 C 0000
|
||
VARINDEX:=0; 80497000 T 0000
|
||
DO BEGIN 80498000 T 0000
|
||
FIRSTVAR:=VARINDEX+1; 80499000 T 0001
|
||
DO BEGIN 80500000 T 0002
|
||
IF CURSY=VARSY OR CURSY=COMMA THEN INSYMBOL; 80501000 T 0003
|
||
IF CURSY=IDENTIFIER THEN 80502000 T 0005
|
||
BEGIN 80503000 T 0006
|
||
IF VARINDEX≥LISTLENGTH THEN 80504000 T 0007
|
||
BEGIN ERROR(37); VARINDEX:=0 END; 80505000 T 0007
|
||
VARINDEX:=VARINDEX+1; 80506000 T 0009
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL); 80507000 T 0011
|
||
VARLIST[VARINDEX]:=THISINDEX; 80508000 T 0012
|
||
INSYMBOL; 80509000 T 0013
|
||
END ELSE BEGIN ERROR(9); SKIP(COLON) END; 80510000 T 0014
|
||
END UNTIL CURSY≠COMMA; 80511000 T 0016
|
||
IF CURSY≠COLON THEN BEGIN ERROR(26); SKIP(COLON) END; 80512000 T 0017
|
||
IF CURSY=COLON THEN 80513000 T 0020
|
||
BEGIN 80514000 T 0020
|
||
INSYMBOL; 80515000 T 0021
|
||
TYPEDECL(CTYPE,TX); 80516000 T 0021
|
||
T3:=CTYPE; T3.IDCLASS:=VAR; 80517000 T 0022
|
||
FOR I:=FIRSTVAR STEP 1 UNTIL VARINDEX DO 80518000 T 0025
|
||
NAMETAB3[CURLEVEL,VARLIST[I]]:=T3; 80519000 T 0026
|
||
END ELSE BEGIN ERROR(26); SKIP(SEMICOLON) END; 80520000 T 0030
|
||
IF CURSY≠SEMICOLON THEN BEGIN ERROR(25); SKIP(SEMICOLON) END; 80521000 T 0032
|
||
IF SYMKIND[CURSY]≠INITIAL THEN INSYMBOL; 80522000 T 0035
|
||
END UNTIL CURSY≠IDENTIFIER; 80523000 T 0037
|
||
DECLAREVARS(FALSE,VARLIST,1,VARINDEX,CURLEVEL); 80524000 T 0038
|
||
END OF VARIABLE DECLARATIONS; 80525000 T 0040
|
||
79 IS 42 LONG, NEXT SEG 74
|
||
80526000 T 0037
|
||
IF NUMPNTRS>0 THEN 80527000 T 0037
|
||
BEGIN 80528000 T 0037
|
||
C1:=CURNAME1; C2:=CURNAME2; 80529000 T 0038
|
||
FOR I:=1 STEP 1 UNTIL NUMPNTRS DO 80530000 T 0039
|
||
BEGIN 80531000 T 0041
|
||
CURNAME1:=PNTRTAB1[I]; CURNAME2:=PNTRTAB2[I]; 80532000 T 0041
|
||
SEARCHTAB(CURLEVEL); 80533000 T 0043
|
||
THISID:=NAMETAB3[CURLEVEL,THISINDEX]; 80534000 T 0043
|
||
IF FOUND AND THISID.IDCLASS=TYPES THEN 80535000 T 0045
|
||
TYPETAB1[PNTRTAB3[I]].POINTTYPE:=THISID.TYPE ELSE ERROR(62); 80536000 T 0047
|
||
END; 80537000 T 0052
|
||
CURNAME1:=C1; CURNAME2:=C2; NUMPNTRS:=0; 80538000 T 0054
|
||
END; 80539000 T 0056
|
||
80540000 T 0056
|
||
IF CURSY=FUNCSY OR CURSY=PROCSY % %700- 80540900 C 0056
|
||
THEN BEGIN DEFINE DEC = CODE #; %700- 80540910 C 0057
|
||
START OF SEGMENT ********** 80
|
||
WHILE CURSY=FUNCSY OR CURSY=PROCSY DO %*** PROC/FUNC DECLARATION *** 80541000 T 0000
|
||
BEGIN %***************************** 80542000 T 0002
|
||
LABEL LL3; % %002- 80542010 C 0002
|
||
START OF SEGMENT ********** 81
|
||
FUN:=CURSY=FUNCSY; INSYMBOL; 80543000 T 0000
|
||
IF CURLEVEL GEQ MAXTABLES THEN ERROR(101) ELSE %002- 80543500 C 0001
|
||
BLOCKTAB[CURLEVEL+1] := NUMBLOCKS := NUMBLOCKS + 1; %002- 80543600 C 0003
|
||
IF CURSY=IDENTIFIER THEN 80544000 T 0007
|
||
BEGIN 80545000 T 0007
|
||
SEARCHTAB(CURLEVEL); 80546000 T 0008
|
||
THISID:=NAMETAB3[CURLEVEL,THISINDEX]; 80547000 T 0009
|
||
IF FOUND AND (THISID.IDCLASS=PROC OR THISID.IDCLASS=FUNC) THEN %600- 80548000 P 0010
|
||
BEGIN 80549000 T 0014
|
||
INDEX:=THISINDEX; 80550000 T 0014
|
||
IF THISID.FORWARDDEF=1 THEN 80551000 T 0015
|
||
BEGIN 80552000 T 0016
|
||
NAMETAB3[CURLEVEL,THISINDEX].FORWARDDEF:=0; %504- 80553000 P 0017
|
||
NUMFORWARDS:=NUMFORWARDS-1; 80554000 T 0020
|
||
T := NAMETAB3[CURLEVEL,THISINDEX].INFO; %002- 80554500 C 0021
|
||
TX := T + PARAMTAB[T]; %002- 80554600 C 0023
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO %002- 80554700 C 0025
|
||
NEWNAME(FORWPARAM1[I],FORWPARAM2[I],CURLEVEL+1); %002- 80554800 C 0029
|
||
IF(THISID.IDCLASS=PROC AND FUN)OR 80555000 T 0032
|
||
(THISID.IDCLASS=FUNC AND NOT FUN) THEN ERROR(43); %504- 80555100 C 0034
|
||
TX:=(T:=THISID.INFO)+PARAMTAB[T]; % UNMARK FORWARD PARMS 80556000 P 0037
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO % TO ALLOW REFERENCE 80557000 C 0040
|
||
BEGIN T3:=PARAMTAB[I].PARAMNAME; %504- 80558000 C 0044
|
||
CURNAME1:=ABS(NAMETAB1[CURLEVEL+1,T3]); %504- 80559000 C 0045
|
||
CURNAME2:= NAMETAB2[CURLEVEL+1,T3]; %504- 80560000 C 0048
|
||
NAMETAB1[CURLEVEL+1,T3]:=0; %504- 80561000 C 0050
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL+1); %504- 80562000 C 0053
|
||
IF T3≠THISINDEX THEN BEGIN %504- 80563000 C 0054
|
||
PARAMTAB[I].PARAMNAME:=THISINDEX; %504- 80564000 C 0056
|
||
NAMETAB3[CURLEVEL+1,THISINDEX] := %504- 80565000 C 0058
|
||
NAMETAB3[CURLEVEL+1,T3]; %504- 80565010 C 0060
|
||
END END; % OF UNMARKING FORWARD PARAMETERS. %504- 80566000 C 0062
|
||
INSYMBOL; 80567000 T 0063
|
||
END ELSE BEGIN ERROR(2); SKIP(SEMICOLON) END; 80568000 T 0063
|
||
END ELSE 80569000 T 0065
|
||
BEGIN 80570000 T 0065
|
||
NEWNAME(CURNAME1,CURNAME2,CURLEVEL); INDEX:=THISINDEX; 80571000 T 0066
|
||
T3:=0; T3.INFO:=NUMPARAMS+1; 80572000 T 0068
|
||
T3.IDCLASS:=IF FUN THEN FUNC ELSE PROC; 80573000 T 0071
|
||
NAMETAB3[CURLEVEL,INDEX]:=T3; 80574000 T 0074
|
||
INSYMBOL; PARAMETERLIST; 80575000 T 0076
|
||
IF CURSY=COLON THEN 80576000 T 0077
|
||
BEGIN 80577000 T 0078
|
||
IF NOT FUN THEN ERROR(48); 80578000 T 0078
|
||
INSYMBOL; 80579000 T 0080
|
||
IF CURSY=IDENTIFIER THEN 80580000 T 0080
|
||
BEGIN 80581000 T 0081
|
||
SEARCH; 80582000 T 0082
|
||
IF FOUND THEN 80583000 T 0082
|
||
BEGIN 80584000 T 0082
|
||
IF THISID.IDCLASS=TYPES THEN 80585000 T 0083
|
||
BEGIN 80586000 T 0084
|
||
T:=TYPETAB1[THISID.TYPE]; 80587000 T 0085
|
||
IF T.FORM≤ALFA OR T.FORM=POINTERS THEN 80588000 T 0086
|
||
BEGIN 80589000 T 0089
|
||
NAMETAB3[CURLEVEL,INDEX].TYPE:=THISID.TYPE; 80590000 T 0089
|
||
END ELSE ERROR(38); 80591000 T 0093
|
||
END ELSE ERROR(7); 80592000 T 0094
|
||
END ELSE ERROR(1); 80593000 T 0096
|
||
END ELSE ERROR(9); 80594000 T 0097
|
||
INSYMBOL; 80595000 T 0098
|
||
END ELSE IF FUN THEN 80596000 T 0099
|
||
BEGIN ERROR(26); SKIP(SEMICOLON) END; 80597000 T 0099
|
||
END; 80598000 T 0101
|
||
END ELSE BEGIN ERROR(9); SKIP(SEMICOLON) END; 80599000 T 0101
|
||
IF CURSY≠SEMICOLON THEN BEGIN ERROR(25); SKIP(SEMICOLON) END; 80600000 T 0103
|
||
IF FUN THEN GEN("FUNCTN",7,2) ELSE 80601000 T 0106
|
||
GEN("PROCEDU",8,1); GENID("V",1000×CURLEVEL+INDEX,5); 80602000 T 0108
|
||
T:=NAMETAB3[CURLEVEL,INDEX].INFO; TX:=T+PARAMTAB[T]; 80603000 T 0115
|
||
IF TX>T THEN 80604000 T 0118
|
||
BEGIN 80605000 T 0119
|
||
GEN("(",1,7); 80606000 T 0120
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO 80607000 T 0121
|
||
BEGIN %518- 80608010 C 0125
|
||
BEGIN %518- 80608020 C 0125
|
||
INTEGER NAM,T1,SCRATCH; %518- 80608030 C 0125
|
||
START OF SEGMENT ********** 82
|
||
NAM := PARAMTAB[I].[9:10]; %518- 80608040 C 0000
|
||
SCRATCH := NAMETAB3[CURLEVEL+1,NAM]; %518- 80608050 C 0001
|
||
SCRATCH := SCRATCH.TYPE; %518- 80608060 C 0003
|
||
T1 := TYPETAB1[SCRATCH]; %518- 80608070 C 0005
|
||
IF T1.STRUCT ≠ 0 AND T1.FORM < FILES THEN %518- 80608080 C 0006
|
||
GENID("H",1000×(CURLEVEL+1)+NAM,5) %518- 80608090 C 0008
|
||
ELSE %518- 80608100 C 0012
|
||
BEGIN % %601- 80608105 C 0012
|
||
GENID("V",1000×(CURLEVEL+1)+NAM,5); %518- 80608110 C 0012
|
||
IF T1.FORM=SET THEN % %601- 80608111 C 0015
|
||
BEGIN % %601- 80608113 C 0017
|
||
GEN(",",1,7); % %601- 80608115 C 0017
|
||
GENID("W",1000×(CURLEVEL+1)+NAM,5); % %601- 80608117 C 0019
|
||
END; %601- 80608118 C 0022
|
||
END; % %601- 80608119 C 0022
|
||
END; %518- 80608120 C 0022
|
||
82 IS 23 LONG, NEXT SEG 81
|
||
IF BOOLEAN(PARAMTAB[I].PARAMFILE) THEN 80609000 T 0128
|
||
BEGIN 80610000 T 0129
|
||
GEN(",",1,7); 80611000 T 0129
|
||
GENID("F",1000×(CURLEVEL+1)+PARAMTAB[I].PARAMNAME,5); 80612000 T 0131
|
||
GEN(",",1,7); 80613000 T 0134
|
||
GENID("I",1000×(CURLEVEL+1)+PARAMTAB[I].PARAMNAME,5); 80614000 T 0136
|
||
END; 80615000 T 0140
|
||
IF I LSS TX THEN GEN(",",1,7); 80616000 T 0140
|
||
END; 80617000 T 0142
|
||
GEN(");",2,6); 80618000 T 0143
|
||
VALUEPARAMS:=FALSE; 80619000 T 0144
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO 80620000 T 0145
|
||
IF PARAMTAB[I].PARAMKIND=CONST THEN 80621000 T 0149
|
||
BEGIN 80622000 T 0151
|
||
IF NOT VALUEPARAMS THEN 80623000 T 0151
|
||
BEGIN GEN("VALUE",6,3); 80624000 T 0152
|
||
VALUEPARAMS:=TRUE; 80625000 T 0154
|
||
END ELSE GEN(",",1,7); 80626000 T 0155
|
||
GENID("V",1000×(CURLEVEL+1)+PARAMTAB[I].PARAMNAME,5); 80627000 T 0159
|
||
IF TYPETAB1[NAMETAB3[CURLEVEL+1,PARAMTAB[I].PARAMNAME].TYPE 80627200 C 0163
|
||
].FORM=SET %601- 80627205 C 0165
|
||
THEN BEGIN % %601- 80627400 C 0167
|
||
GEN(",",1,7); % %601- 80627600 C 0168
|
||
GENID("W",1000×(CURLEVEL+1)+PARAMTAB[I].PARAMNAME 80627800 C 0169
|
||
,5); % %601- 80627801 C 0169
|
||
END; %601- 80627850 C 0173
|
||
END; 80628000 T 0173
|
||
IF VALUEPARAMS THEN GEN(";",1,7); 80629000 T 0173
|
||
DECLAREVARS(TRUE,PARAMTAB,T+1,TX,CURLEVEL+1); 80630000 T 0176
|
||
END ELSE GEN(";",1,7); 80631000 T 0179
|
||
80632000 T 0181
|
||
INSYMBOL; 80633000 T 0181
|
||
IF CURNAME1="7FORWAR" AND CURNAME2="D" THEN 80634000 T 0181
|
||
BEGIN 80635000 T 0183
|
||
NAMETAB3[CURLEVEL,INDEX].FORWARDDEF:=1; 80636000 T 0184
|
||
TX:=(T:=NAMETAB3[CURLEVEL,INDEX].INFO)+PARAMTAB[T]; %504- 80636100 C 0187
|
||
FOR I:=T+1 STEP 1 UNTIL TX DO % MARK FORWARD PARAMETERS 80636200 C 0190
|
||
NAMETAB1[CURLEVEL+1,PARAMTAB[I].PARAMNAME].[46:1] := 1; 80636210 C 0195
|
||
NUMFORWARDS:=NUMFORWARDS+1; 80637000 T 0201
|
||
REPLACE POINTER(NAMETAB1[CURLEVEL+1,*]) BY 0 %002- 80637500 C 0202
|
||
FOR MAXNAMES+1 WORDS; %002- 80637600 C 0205
|
||
GEN("FORWARD",8,1); 80638000 T 0208
|
||
INSYMBOL; 80639000 T 0209
|
||
END ELSE 80640000 T 0210
|
||
BEGIN 80641000 T 0210
|
||
CURLEVEL:=CURLEVEL+1; 80642000 T 0212
|
||
IF CURLEVEL GEQ LASTREC THEN ERROR(101); % %002- 80643000 P 0213
|
||
BLOCKTAB[CURLEVEL]:=NUMBLOCKS:=NUMBLOCKS+1; 80644000 T 0215
|
||
TX:=CURFUNC; CURFUNC:=IF FUN THEN INDEX ELSE -1; %504- 80645000 P 0217
|
||
BLOCK; %*** COMPILE PROCEDURE BODY *** 80646000 P 0220
|
||
FOR I:=0 STEP 1 UNTIL MAXNAMES DO % LEAVE FORWARD PARAMETERS 80647000 P 0221
|
||
IF NAMETAB1[CURLEVEL,I]>0 THEN NAMETAB1[CURLEVEL,I]:=0; 80648000 P 0222
|
||
CURLEVEL:=CURLEVEL-1; CURFUNC:=TX; %504- 80649000 P 0228
|
||
TOPLEVEL:=CURLEVEL; 80650000 T 0230
|
||
END; 80651000 T 0231
|
||
IF CURSY≠SEMICOLON THEN BEGIN ERROR(25); SKIP(SEMICOLON) END; 80652000 T 0231
|
||
GEN(";",1,7); 80653000 T 0234
|
||
IF SYMKIND[CURSY]≠INITIAL THEN INSYMBOL; 80654000 T 0235
|
||
END OF PROCEDURE DECLARATION; 80655000 T 0237
|
||
81 IS 238 LONG, NEXT SEG 80
|
||
80656000 T 0003
|
||
80657000 T 0003
|
||
IF NUMFORWARDS>0 THEN ERROR(44); 80658000 T 0003
|
||
END OF SEGMENT FOR PROCEDURE DECLARATIONS; %700- 80658100 C 0005
|
||
80 IS 6 LONG, NEXT SEG 74
|
||
GEN("INTEGER",8,1); 80659000 T 0060
|
||
FOR I:=1 STEP 1 UNTIL MAXTEMPS DO 80660000 T 0061
|
||
BEGIN GENID("T",I,2); 80661000 T 0064
|
||
IF I<MAXTEMPS THEN GEN(",",1,7) ELSE GEN(";",1,7); 80662000 T 0065
|
||
END; 80663000 T 0070
|
||
IF CURSY≠BEGINSY THEN 80664000 T 0072
|
||
BEGIN ERROR(39); 80665000 T 0073
|
||
WHILE SYMKIND[CURSY]≠INITIAL DO 80666000 T 0074
|
||
BEGIN INSYMBOL; SKIP(SEMICOLON) END; 80667000 T 0076
|
||
IF(CURSY=TYPESY)OR(CONSTSY≤CURSY AND CURSY≤PROCSY)THEN 80668000 T 0078
|
||
GO TO START; 80669000 T 0081
|
||
END; 80670000 T 0081
|
||
IF CURLEVEL=1 THEN 80671000 T 0081
|
||
BEGIN 80672000 T 0082
|
||
GEN("INIT(",5,3); 80673000 T 0083
|
||
IF INPUTDECL THEN GEN("TRUE",4,4) ELSE GEN("FALSE",5,3); 80674000 T 0084
|
||
GEN(");",2,6); 80675000 T 0091
|
||
END; 80676000 T 0093
|
||
FOR I:=FIRSTFILE STEP 1 UNTIL NUMFILES DO 80677000 T 0093
|
||
IF FILETAB[I] LSS 0 THEN 80678000 T 0096
|
||
BEGIN 80679000 T 0097
|
||
GEN("CHFIL(",6,2); 80680000 T 0097
|
||
GENID("F",1000×CURLEVEL-FILETAB[I]-1,5); 80681000 T 0099
|
||
GEN(");",2,6); 80682000 T 0102
|
||
END 80683000 T 0103
|
||
ELSE 80684000 T 0103
|
||
BEGIN 80685000 T 0103
|
||
GENID("I",1000×CURLEVEL+FILETAB[I],5); 80686000 T 0107
|
||
GEN(",",1,7); GEN("BUFSIZE",7,1); GEN(":=80;",5,3); 80687000 T 0109
|
||
END; 80688000 T 0114
|
||
NUMFILES:=FIRSTFILE-1; 80689000 T 0116
|
||
80690000 T 0117
|
||
COMPSTAT; %*** COMPILE STATEMENT PART *** 80691000 P 0117
|
||
80692000 T 0118
|
||
FOR I:=LASTREC STEP 1 UNTIL TOPREC-1 DO % CLEAR RECORD DECS %504- 80693000 P 0118
|
||
REPLACE POINTER(NAMETAB1[I,*]) BY 0 FOR MAXNAMES+1 WORDS; 80694000 T 0122
|
||
FOR I:=FIRSTLAB STEP 1 UNTIL NUMLABS DO 80695000 T 0131
|
||
IF LABTAB[I].LABDEF=0 THEN ERROR(93); 80696000 T 0132
|
||
LASTREC:=TOPREC; 80697000 T 0137
|
||
NUMLABS:=LABTABTOP; 80698000 T 0137
|
||
FIRSTLAB:=FORMERFIRSTLAB; 80699000 T 0138
|
||
NUMCONSTS:=CONSTTABTOP; 80700000 T 0139
|
||
NUMTYPES:=TYPETABTOP; 80701000 T 0140
|
||
NUMPARAMS:=PARAMTABTOP; 80702000 T 0140
|
||
MARGIN("-P",CURLEVEL); % MARK END OF PROCEDURE %712- 80702100 C 0141
|
||
IF CURLEVEL>1 THEN GEN("END",4,5); 80703000 T 0159
|
||
END OF BLOCK; 80704000 T 0162
|
||
74 IS 173 LONG, NEXT SEG 2
|
||
|
||
|
||
|
||
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 90001000 T 0118
|
||
% % 90002000 T 0118
|
||
% % 90003000 T 0118
|
||
% % 90004000 T 0118
|
||
% PART 9: THE MAIN PROGRAM. % 90005000 T 0118
|
||
% ----------------- % 90006000 T 0118
|
||
% % 90007000 T 0118
|
||
% % 90008000 T 0118
|
||
% % 90009000 T 0118
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 90010000 T 0118
|
||
90011000 T 0118
|
||
90012000 T 0118
|
||
INTEGER PROGNAMELENGTH; % %800- 90013900 C 0118
|
||
ALPHA PROGNAME,ALGOLNAME; 90014000 T 0118
|
||
% %002- 90014100 C 0118
|
||
% %002- 90014200 C 0118
|
||
SAVEFACTOR:=0;% * DEFAULT ZIP IS COMPILE AND GO UNLESS %002- 90014300 C 0118
|
||
% * CHANGED BY THE USE OF THE "S" OPTION %002- 90014400 C 0118
|
||
% %002- 90014500 C 0118
|
||
% %002- 90014600 C 0118
|
||
90015000 T 0118
|
||
CH[0] := "PASC000"; CHARPNT := POINTER(CH[0])+5; %711- 90016000 P 0118
|
||
PASCALGOL.FID := USER := TIME(-1); %711- 90017000 P 0125
|
||
DO BEGIN C:=C+1; REPLACE CHARPNT BY C FOR 3 DIGITS; %711- 90018000 P 0129
|
||
PASCALGOL.MFID := ALGOLNAME := CH[0]; %711- 90019000 P 0133
|
||
SEARCHDISKDIRECTORY( PASCALGOL, LINES[*] ); %711- 90020000 P 0137
|
||
END UNTIL LINES[0]=-1; % FILE NOT ON DISK %711- 90021000 P 0139
|
||
WRITE(PASCALGOL,MERGE); % ALGOL MUST COMPILE PRELUDE FIRST %704- 90022000 P 0140
|
||
CARDLENGTH:=72; 90033000 T 0143
|
||
C := " "; % TO INITIALIZE "INSYMBOL" %709- 90034000 P 0144
|
||
INITIALIZE; % COMPILER TABLES, NEWCARD, INSYMBOL %709- 90035000 P 0145
|
||
IF CURSY=PROGRAMSY THEN 90037000 T 0145
|
||
BEGIN 90038000 T 0146
|
||
INSYMBOL; 90039000 T 0147
|
||
IF CURSY=IDENTIFIER THEN 90040000 T 0147
|
||
BEGIN 90041000 T 0148
|
||
PROGNAME := IF CURLENGTH < 7 %705- 90042000 P 0148
|
||
THEN " "&CURNAME1[41:6×CURLENGTH-1:6×CURLENGTH] 90042010 C 0149
|
||
ELSE CURNAME2.[5:6]&CURNAME1[41:35:36]; %705- 90042020 C 0154
|
||
% %002- 90042100 C 0157
|
||
% THE FOLLOWING LINES ADD A "0" ONTO THE FRONT OF THE PROGRAM NAME OR 90042200 C 0157
|
||
% THE FIRST SIX CHARACTERS THEREOF IF IT IS LONGER THAN SIX CHARACTERS 90042300 C 0157
|
||
% THUS GIVING THE NAME OF THE XALGOL OBJECT CODE FILE PRODUCED. %002- 90042400 C 0157
|
||
% %002- 90042500 C 0157
|
||
PROGNAME := CURNAME1.[35:36]; PROGNAMELENGTH := MIN(6,CURLENGTH)+1; 90042600 C 0157
|
||
% %002- 90042700 C 0161
|
||
% %002- 90042800 C 0162
|
||
INSYMBOL; 90043000 T 0162
|
||
IF CURSY=LPAR THEN 90044000 T 0162
|
||
BEGIN 90045000 T 0163
|
||
DO BEGIN 90046000 T 0163
|
||
INSYMBOL; 90047000 T 0164
|
||
IF CURSY=IDENTIFIER THEN 90048000 T 0164
|
||
BEGIN 90049000 T 0165
|
||
IF CURNAME1="50INPUT" THEN INPUTDECL:=TRUE ELSE 90050000 T 0165
|
||
IF CURNAME1="6OUTPUT" THEN OUTPUTDECL:=TRUE ELSE 90051000 T 0167
|
||
BEGIN 90052000 T 0176
|
||
IF CURLENGTH>6 THEN ERROR(77); 90053000 T 0178
|
||
NUMEXTFILES:=NUMEXTFILES+1; 90054000 T 0180
|
||
IF NUMEXTFILES≤MAXEXTFILES THEN 90055000 T 0181
|
||
EXTFILETAB[NUMEXTFILES]:=CURNAME1 ELSE 90056000 T 0182
|
||
IF NUMEXTFILES=MAXEXTFILES+1 THEN ERROR(73); 90057000 T 0183
|
||
END; 90058000 T 0186
|
||
END ELSE ERROR(9); 90059000 T 0186
|
||
INSYMBOL; 90060000 T 0188
|
||
END UNTIL CURSY≠COMMA; 90061000 T 0188
|
||
IF CURSY≠RPAR THEN BEGIN ERROR(46); SKIP(SEMICOLON) END; 90062000 T 0189
|
||
IF CURSY=RPAR THEN INSYMBOL; 90063000 T 0192
|
||
IF CURSY≠SEMICOLON THEN BEGIN ERROR(25); SKIP(SEMICOLON) END; 90064000 T 0194
|
||
END ELSE BEGIN ERROR(58); SKIP(SEMICOLON) END; 90065000 T 0197
|
||
END ELSE BEGIN ERROR(9); SKIP(SEMICOLON) END; 90066000 T 0199
|
||
END ELSE BEGIN ERROR(75); SKIP(SEMICOLON) END; 90067000 T 0201
|
||
INSYMBOL; 90068000 T 0203
|
||
CURLEVEL:=1; 90069000 T 0203
|
||
LASTREC:=MAXTABLES+1; 90070000 T 0204
|
||
MAXPERMTAB := 0; %518- 90070100 C 0205
|
||
INSIDEPARENS := FALSE; %518- 90070200 C 0206
|
||
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 90071000 T 0207
|
||
% % 90072000 T 0207
|
||
BLOCK; % COMPILE USER PROGRAM. % 90073000 T 0207
|
||
% % 90074000 T 0207
|
||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 90075000 T 0207
|
||
IF CURSY≠DOT THEN 90076000 T 0207
|
||
BEGIN 90077000 T 0208
|
||
ERROR(76); 90078000 T 0208
|
||
DO BLOCK UNTIL CURSY=DOT; 90079000 T 0209
|
||
END; 90080000 T 0211
|
||
IF FALSE THEN 90081000 T 0211
|
||
BEGIN 90082000 T 0212
|
||
ENDOFINPUT: ERROR(87); CHARCNT:=-1; 90083000 T 0212
|
||
WRITE(LINE, TERMMESS); %708- 90084000 P 0214
|
||
END; 90085000 T 0217
|
||
IF LISTOPTION AND CHARCNT≥0 THEN PRINTLINE; 90086000 T 0217
|
||
IF ERRINX>0 THEN PRINTERRORS; 90087000 T 0220
|
||
IF PAGECNT > 0 % THERE HAS BEEN SOME LISTING %709- 90088000 P 0221
|
||
THEN BEGIN WRITE( LINE[DBL] ); WRITE( LINE[DBL] ) END; %709- 90089000 P 0222
|
||
IF NUMERRS=0 THEN 90090000 T 0231
|
||
BEGIN% %002- 90090400 C 0231
|
||
WRITE(LINE ,NOERRORS);% %002- 90090500 C 0232
|
||
IF ERR(100) % %800- 90090600 C 0235
|
||
THEN WRITE(LINE ,ERROR100MESS);% %002- 90090700 C 0239
|
||
IF ERR(102) THEN %713- 90090710 C 0243
|
||
WRITE(LINE,ERROR102MESS); %713- 90090720 C 0247
|
||
IF SAVEFACTOR≥0 THEN% *A ZIP IS REQUIRED %002- 90090800 C 0250
|
||
BEGIN 90091000 T 0251
|
||
ARRAY ZIPARRAY[0:19], Z[0:0]; 90092000 T 0252
|
||
START OF SEGMENT ********** 83
|
||
POINTER ZIPPNT; 90093000 T 0005
|
||
90094000 T 0005
|
||
DEFINE PPROGNAME = 13 #, PALGOLNAME = 14 #, %705- 90095000 P 0005
|
||
PLIBRARY = 15 #, PUSER = 16 #, %705- 90096000 P 0005
|
||
P(P1) = POINTER(ZIPARRAY[P1])+1 FOR 7 #; %705- 90097000 P 0005
|
||
90105000 T 0005
|
||
WRITEALGOL; 90106000 T 0005
|
||
WRITE(PASCALGOL,LASTLINE); 90107000 T 0005
|
||
LOCK(PASCALGOL,SAVE); 90108000 T 0008
|
||
ZIPARRAY[PPROGNAME]:=PROGNAME; ZIPARRAY[PALGOLNAME]:=ALGOLNAME; 90112000 P 0010
|
||
ZIPARRAY[PLIBRARY]:= IF SAVEFACTOR>0 THEN "LIBRARY" ELSE %705- 90113000 P 0012
|
||
IF SAVEFACTOR<0 THEN " SYNTAX" ELSE " & RUN "; 90114000 P 0015
|
||
ZIPARRAY[PUSER]:=USER; %705- 90115000 P 0018
|
||
REPLACE POINTER(ZIPARRAY[*]) BY "CC COMPILE ", %705- 90116000 P 0019
|
||
P(PPROGNAME), "/", P(PUSER), %705- 90117000 P 0025
|
||
" XALGOL ", P(PLIBRARY), %705- 90118000 P 0041
|
||
"; ALGOL FILE TAPE=PASCRUN/DISK SERIAL; ALGOL FILE CARD=", %800- 90119000 P 0052
|
||
P(PALGOLNAME),"/",P(PUSER)," SERIAL;", % %800- 90120000 P 0056
|
||
" XALGOL STACK = 2048; END."; % %800- 90120500 C 0077
|
||
ZIP WITH ZIPARRAY[*]; 90129000 T 0080
|
||
END% %002- 90129500 C 0082
|
||
END OF COMPILER ZIP ELSE 90130000 T 0082
|
||
83 IS 88 LONG, NEXT SEG 2
|
||
BEGIN 91001000 T 0253
|
||
INTEGER I; 91002000 T 0253
|
||
START OF SEGMENT ********** 84
|
||
SWITCH FORMAT ERRORMESS1 := 91003000 T 0000
|
||
START OF SEGMENT ********** 85
|
||
(" 0 *** COMPILER ERROR *** CONTACT THE COMPUTER CENTRE."), 91004000 T 0000
|
||
(" 1 IDENTIFIER NOT DEFINED."), 91005000 T 0000
|
||
(" 2 IDENTIFIER ALREADY DEFINED."), 91006000 T 0000
|
||
(" 3 WRONG NUMBER OF PARAMETERS."), 91007000 T 0000
|
||
(" 4 SYNTAX ERROR."), 91008000 T 0000
|
||
(" 5 FUNCTION NAME NOT ACCESSIBLE AT THIS LEVEL."), %511- 91009000 P 0000
|
||
(" 6 STRINGS MAY NOT BE CONTINUED FROM ONE CARD TO ANOTHER."), 91010000 T 0000
|
||
(" 7 A TYPE EXPECTED."), 91011000 T 0000
|
||
(" 8 VARIABLE EXPECTED."), 91012000 T 0000
|
||
(" 9 IDENTIFIER EXPECTED."), 91013000 T 0000
|
||
(" 10 INTEGER CONSTANT EXPECTED."), 91014000 T 0000
|
||
(" 11 CONSTANT OF OTHER TYPE THAN EXPECTED."), 91015000 T 0000
|
||
(" 12 VARIABLE OF ILLEGAL TYPE."), 91016000 T 0000
|
||
(" 13 UNRECOGNIZABLE STATEMENT."), 91017000 T 0000
|
||
(" 14 CONSTANT TOO BIG OR TO SMALL."), 91018000 T 0000
|
||
(" 15 UNDEFINED LABEL."), 91019000 T 0000
|
||
(" 16 FOR- AND CASE-STATEMENTS NESTED TOO DEEP."), 91020000 T 0000
|
||
(" 17 EXPRESSION IS OF WRONG TYPE."), 91021000 T 0000
|
||
(" 18 """OF""" EXPECTED."), 91022000 T 0000
|
||
(" 19 """DO""" EXPECTED."), 91023000 T 0000
|
||
(" 20 """ELSE""" WITHOUT CORRESPONDING """THEN"""."), 91024000 T 0000
|
||
(" 21 ILLEGAL TERMINATION OF STATEMENT."), 91025000 T 0000
|
||
(" 22 """UNTIL""" EXPECTED."), 91026000 T 0000
|
||
(" 23 """TO"""/"""DOWNTO""" EXPECTED."), 91027000 T 0000
|
||
(" 24 """END""" EXPECTED."), 91028000 T 0000
|
||
(" 25 """;""" EXPECTED."), 91029000 T 0000
|
||
(" 26 """:""" EXPECTED."), 91030000 T 0000
|
||
(" 27 """THEN""" EXPECTED."), 91031000 T 0000
|
||
(" 28 """:=""" EXPECTED."), 91032000 T 0000
|
||
(" 29 ONLY NUMBERS MAY BE SIGNED."), 91033000 T 0000
|
||
(" 30 TOO MANY CASES."), 91034000 T 0000
|
||
(" 31 LABEL USED MORE THAN ONCE."), 91035000 T 0000
|
||
(" 32 CONSTANT EXPECTED."), 91036000 T 0000
|
||
(" 33 LABEL NOT IN RANGE 0..9999."), 91037000 T 0000
|
||
(" 34 TOO MANY LABELS DECLARED."), 91038000 T 0000
|
||
(" 35 TOO MANY CONSTANTS DECLARED."), 91039000 T 0000
|
||
(" 36 """=""" EXPECTED."), 91040000 T 0000
|
||
(" 37 THE LIST IS TOO LONG."), 91041000 T 0000
|
||
(" 38 INVALID TYPE FOR A FUNCTION."), 91042000 T 0000
|
||
(" 39 """BEGIN""" EXPECTED."), 91043000 T 0000
|
||
(" 40 TOO MANY IDENTIFIERS DECLARED."), 91044000 T 0000
|
||
(" 41 ALFA CONSTANTS MAY NOT BE LONGER THAN 7 CHARACTERS."),%001- 91045000 P 0000
|
||
(" 42 EXPRESSION IS NOT OF TYPE BOOLEAN."), 91046000 T 0000
|
||
(" 43 NOT PROPER FORWARD DECLARATION."), 91047000 T 0000
|
||
(" 44 UNSATISFIED FORWARD DECLARATION."), 91048000 T 0000
|
||
(" 45 TOO MANY DIFFERENT TYPES DECLARED."), 91049000 T 0000
|
||
(" 46 """)""" EXPECTED."), 91050000 T 0000
|
||
(" 47 """[""" EXPECTED."), 91051000 T 0000
|
||
(" 48 A SIMPLE TYPE EXPECTED."), 91052000 T 0000
|
||
(" 49 """ARRAY OF ARRAY""" AND """ARRAY OF RECORD""" ILLEGAL", 91053000 T 0000
|
||
" AS FILE TYPE."), 91054000 T 0000
|
||
(" 50 """FILE OF FILE""" IS ILLEGAL."), 91055000 T 0000
|
||
(" 51 SET BOUNDRY IS TOO BIG OR TOO SMALL."), 91056000 T 0000
|
||
(" 52 TOO MANY UNDECLARED POINTERS."), 91057000 T 0000
|
||
(" 53 """..""" EXPECTED."), 91058000 T 0000
|
||
(" 54 FIRST VALUE IS GREATER THAN SECOND VALUE."), 91059000 T 0000
|
||
(" 55 PROCEDURE NESTING DEPTH + NO OF RECORDS IS TOO GREAT."), 91060000 P 0000
|
||
(" 56 THE RECORD CONTAINS MORE THEN 1023 WORDS."), 91061000 T 0000
|
||
(" 57 FILES NOT ALLOWED IN RECORDS."), 91062000 T 0000
|
||
(" 58 """(""" EXPECTED."), 91063000 T 0000
|
||
(" 59 """]""" EXPECTED."); 91064000 T 0000
|
||
85 IS 591 LONG, NEXT SEG 84
|
||
91065000 T 0000
|
||
SWITCH FORMAT ERRORMESS2 := 91066000 T 0000
|
||
START OF SEGMENT ********** 86
|
||
(" 60 """ARRAY OF FILE""" NOT ALLOWED."), 91067000 T 0000
|
||
(" 61 RANGE OF INDEX IS GREATER THAN 1023."), 91068000 T 0000
|
||
(" 62 UNSATISFIED POINTER DECLARATION."), 91069000 T 0000
|
||
(" 63 EXPRESSION IS TOO LONG."), 91070000 T 0000
|
||
(" 64 ILLEGAL OPERATOR FOR THIS TYPE OF EXPRESSION."), 91071000 T 0000
|
||
(" 65 INTEGER EXPRESSION EXPECTED."), 91072000 T 0000
|
||
(" 66 A SET EXPECTED."), 91073000 T 0000
|
||
(" 67 PARAMETER OF ILLEGAL TYPE."), 91074000 T 0000
|
||
(" 68 PROCEDURES NOT ALLOWED IN THIS CONTEXT."), 91075000 T 0000
|
||
(" 69 ILLEGAL USE OF THIS TYPE OF IDENTIFIER."), 91076000 T 0000
|
||
(" 70 TOO MANY PARAMETERS DECLARED IN THE PROGRAM."), 91077000 T 0000
|
||
(" 71 """ARRAY OF CHAR""" EXPECTED."), 91078000 T 0000
|
||
(" 72 WRONG TYPE OF SET EXPRESSION."), 91079000 T 0000
|
||
(" 73 TOO MANY EXTERNAL FILES."), 91080000 T 0000
|
||
(" 74 ILLEGAL IDENTIFIER FOR EXTERNAL FILE."), 91081000 T 0000
|
||
(" 75 """PROGRAM""" EXPECTED."), 91082000 T 0000
|
||
(" 76 """.""" EXPECTED AT END OF PROGRAM."), 91083000 T 0000
|
||
(" 77 EXTERNAL FILE IDENTIFIER MAY NOT EXCEED 6 CHARACTERS."), 91084000 T 0000
|
||
(" 78 ILLEGAL FILE PARAMETER."), 91085000 T 0000
|
||
(" 79 ILLEGAL USE OF FILE HANDLING PROCEDURE."), 91086000 T 0000
|
||
(" 80 TEXT-FILE EXPECTED."), 91087000 T 0000
|
||
(" 81 POINTER VARIABLE EXPECTED."), 91088000 T 0000
|
||
(" 82 ONLY VALUES OF TYPE REAL, INTEGER OR CHAR MAY BE READ."), 91089000 T 0000
|
||
(" 83 VARIABLES IN RECORDS ILLEGAL IN THIS CONTEXT."), 91090000 T 0000
|
||
(" 84 DISPLAY OVERFLOW."), 91091000 T 0000
|
||
(" 85 READ AND WRITE MAY ONLY BE USED ON TEXT-FILES."), 91092000 T 0000
|
||
(" 86 REFERENCED OBJECT IS TOO BIG."), 91093000 T 0000
|
||
(" 87 END-OF-INPUT ENCOUNTERED UNEXPECTEDLY."), %001- 91094000 P 0000
|
||
(" 88 CHARACTER ARRAY EXPECTED."), 91095000 T 0000
|
||
(" 89 """,""" EXPECTED."), 91096000 T 0000
|
||
(" 91 PROCEDURES MAY NOT HAVE ANY TYPE."), 91097000 T 0000
|
||
(" 91 PARAMETER OF WRONG KIND."), 91098000 T 0000
|
||
(" 92 ONLY COMPLETE ARRAYS AND RECORDS MAY BE TRANSMITTED."), 91099000 T 0000
|
||
(" 93 DECLARED LABEL NOT USED."), 91100000 T 0000
|
||
(" 94 PARAMETERS OF THIS TYPE SHOULD NOT BE VALUE PARAMETERS."), 91101000 T 0000
|
||
(" 95 SIZE OF STRUCTURES IN ASSIGNMENT ARE NOT THE SAME."), %512- 91102000 P 0000
|
||
(" 96 INPUT/OUPUT NOT DECLARED."), 91103000 T 0000
|
||
(" 97 TOO MANY FILES IN USE."), %001- 91104000 P 0000
|
||
(" 98 RECORD IDENTIFIER EXPECTED."), 91105000 T 0000
|
||
(" 99 UNRECOGNIZED ITEM."), 91106000 T 0000
|
||
("100 ILLEGAL SAVE CONSTANT IN """""S""""" OPTION. THE VALUE 07 IS 91106500 C 0000
|
||
SUBSTITUTED"/" SO THIS ERROR DOES NOT INCREMENT THE COMPILATION ERRO 91106600 C 0000
|
||
RS COUNT."),% %002- 91106700 C 0000
|
||
("101 PROCEDURES/FUNCTIONS NESTED TOO DEEP."), %002- 91106800 C 0000
|
||
("102 ***WARNING ONLY, ILLEGAL DOLLAR OPTION."), %713- 91106900 C 0000
|
||
(); 91107000 T 0000
|
||
86 IS 485 LONG, NEXT SEG 84
|
||
91108000 T 0000
|
||
91109000 T 0000
|
||
WRITE(LINE, ERRORS,NUMERRS); %708- 91110000 P 0000
|
||
FOR I:=0 STEP 1 UNTIL 59 DO IF ERR[I] THEN 91111000 T 0007
|
||
WRITE(LINE, ERRORMESS1[I]); %708- 91112000 P 0012
|
||
FOR I:=60 STEP 1 UNTIL 119 DO IF ERR[I] THEN 91113000 T 0019
|
||
WRITE(LINE, ERRORMESS2[I-60]); %708- 91114000 P 0024
|
||
END OF ERROR MESSAGES; 91115000 T 0031
|
||
84 IS 36 LONG, NEXT SEG 2
|
||
IF XREFOPTION THEN 92001000 T 0254
|
||
BEGIN 92002000 T 0254
|
||
REPLACE POINTER(XREFLINE[*]) BY " " FOR 17 WORDS; 92003000 T 0254
|
||
REWIND(XREFFILE); %002- 92003500 C 0259
|
||
HEADING; 92004000 T 0260
|
||
SORT(PRINTXREF,XREFINPUT,0,XREFMAX,XREFCOMPARE,3,1000,6000); %002- 92005000 P 0261
|
||
END; 92006000 T 0281
|
||
END OF B5700 PASCAL COMPILER............................................ 99001000 P 0281
|
||
2 IS 287 LONG, NEXT SEG 1
|
||
START OF SEGMENT ********** 87
|
||
87 IS 30 LONG, NEXT SEG 1
|
||
1 IS 2 LONG, NEXT SEG 0
|
||
103 IS 69 LONG, NEXT SEG 0
|
||
NUMBER OF ERRORS DETECTED = 0. COMPILATION TIME = 228 SECONDS.
|
||
|
||
PRT SIZE = 311; TOTAL SEGMENT SIZE = 8668 WORDS; DISK SIZE = 540 SEGS; NO. PGM. SEGS = 103
|
||
|
||
ESTIMATED CORE STORAGE REQUIRED = 22525 WORDS.
|
||
|
||
ESTIMATED AUXILIARY MEMORY REQUIRED = 0 WORDS.
|
||
|
||
NUMBER OF CARD-IMAGES PROCESSED = 4242.
|
||
|
||
|
||
|
||
LABEL 000000000LINE 00186197? COMPILE PASCAL/NEW XALGOL LIBRARY XALGOL /PASCAL
|