$$ SET LIST MAP 00100000 $$ SET LINEINFO 00100020 $$ SET OMIT 00100100 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00100120 %% %%00100140 %% SAMPLE/ALGOL %%00100160 %% %%00100200 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00100220 00100240 2002 UNITE CONFERENCE 00100260 AS4027: UNDERSTANDING PROGRAMDUMPS 00100280 00100300 THIS IS A SAMPLE ALGOL PROGRAM DEMONSTRATING HOW VARIOUS CONSTRUCTS 00100320 ARE IMPLEMENTED AND HOW THEY APPEAR IN AN MCP PROGRAMDUP. 00100340 THIS PROGRAM IS IN THE PUBLIC DOMAIN. 00100360 00100400 2002-10-28 P.KIMPEL, PARADIGM CORPORATION. 00100420 00100440 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00100460 $$ POP OMIT 00100480 BEGIN 00100500 DEFINE 00100600 MAX1 = 100 #; 00100700 00102000 INTEGER 00104000 I, 00106000 J; 00108000 REAL 00110000 X, 00112000 Y; 00114000 DOUBLE 00116000 Z; 00118000 FILE 00120000 PRINT (KIND=PRINTER, MAXRECSIZE=132, FRAMESIZE=8); 00122000 ARRAY 00124000 A [0:15], 00126000 BIG[0:999999]; 00128000 EBCDIC ARRAY 00130000 E [0:255]; 00132000 TRUTHSET 00134000 NUMERIC ("0123456789"); 00136000 POINTER 00138000 P, 00140000 Q; 00142000 00144000 STRING 00146000 S1, 00148000 S2; 00150000 INTERLOCK 00152000 L; 00154000 EVENT 00156000 EV; 00158000 00160000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00162000 PROCEDURE P1 (A, B, C); 00164000 VALUE B; 00166000 REAL A; 00168000 BOOLEAN B; 00170000 ARRAY C [0]; 00172000 BEGIN 00174000 INTEGER 00176000 X; 00178000 C[0]:= *+A; 00180000 %---THE NEXT STATEMENT WILL CAUSE AN INVALID INDEX FAULT--- 00181000 FOR X:= 1 STEP 1 UNTIL 4, SIZE(C)-4 STEP 1 UNTIL SIZE(C) DO 00182000 C[X]:= A+X; 00184000 END P1; 00186000 00188000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00190000 INTEGER PROCEDURE P2 (X, Y); 00192000 VALUE X, Y; 00194000 INTEGER X; 00196000 REAL Y; 00198000 BEGIN 00200000 PROCEDURE P3 (A, B); 00202000 REAL A, B; 00204000 BEGIN 00206000 DOUBLE DD; 00208000 DD:= A MUX B; 00210000 B:= LN(1.2/(A+B+1)); 00212000 P1 (A, TRUE, BIG); 00214000 END P3; 00216000 00218000 X:= SQRT(Y); 00220000 P3 (X, Y); 00222000 P2:= X; 00224000 END P2; 00226000 00900000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00900100 %% OUTER BLOCK 00900200 00900300 WRITE (PRINT[SPACE 2], <"SAMPLE ALGOL PROGRAM ",A6>, TIME(15)); 00900400 I:= 6; 00900500 J:= I**3; 00900600 X:= I/J; 00900700 Y:= (I-J)/(I+J) - X; 00900800 Z:= X*Y; 00900900 00901000 Y:= X.[23:10]; 00901100 X.[23:10]:= Y & I[45:5:3]; 00901200 00901300 CASE I OF 00901400 BEGIN 00901500 1: J:= 1; 00901600 2: J:= 2; 00901700 3: J:= 4; 00901800 15:J:= 1023; 00901900 ELSE: J:= 0; 00902000 END; 00902100 00902200 P:= POINTER (A,8); 00902300 WHILE I > 0 DO 00902400 BEGIN 00902500 SCAN Q:P FOR J:I UNTIL = " "; 00902600 SCAN P:Q FOR I:J WHILE = " "; 00902700 END; 00902800 00902900 X:= J-I; 00903000 REPLACE POINTER (BIG) BY Q FOR J WHILE IN NUMERIC; 00903100 REPLACE E BY " " FOR SIZE(E); 00903200 00903300 S1:= STRING (E, SIZE(E)); 00903400 S2:= TAKE (DROP (S1, 5), 10); 00903500 00903600 LOCK (L); 00903700 PROCURE (EV); 00903800 UNLOCK (L); 00903900 LIBERATE (EV); 00904000 00904100 ON EXPONENTOVERFLOW OR SCANPARITY: 00904200 BEGIN 00904300 DISPLAY ("OOPS"); 00904400 PROGRAMDUMP (ARRAYS); 00904500 END; 00904600 00904700 P2 (I,X); 00904800 00904900 ON ANYFAULT; 00905000 00905100 PROGRAMDUMP (ARRAYS, BASE); 00905200 END. 00905300