Unisys ClearPath HMP LX Series SYSTEMS ALGOL COMPILER, VERSION 48.189.8008, FRIDAY, 11/01/2002, 01:17 PM. ( P A U L ) O B J E C T / U N I T E / A S 4 0 2 7 / A L G O L / S A M P L E O N O P S = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = $$ SET LIST MAP 00100000 0000:0000:0 $$ SET LINEINFO 00100020 0000:0000:0 $$ SET OMIT 00100100 OMIT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00100120 OMIT %% %% 00100140 OMIT %% SAMPLE/ALGOL %% 00100160 OMIT %% %% 00100200 OMIT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00100220 OMIT 00100240 OMIT 2002 UNITE CONFERENCE 00100260 OMIT AS4027: UNDERSTANDING PROGRAMDUMPS 00100280 OMIT 00100300 OMIT THIS IS A SAMPLE ALGOL PROGRAM DEMONSTRATING HOW VARIOUS CONSTRUCTS 00100320 OMIT ARE IMPLEMENTED AND HOW THEY APPEAR IN AN MCP PROGRAMDUP. 00100340 OMIT THIS PROGRAM IS IN THE PUBLIC DOMAIN. 00100360 OMIT 00100400 OMIT 2002-10-28 P.KIMPEL, PARADIGM CORPORATION. 00100420 OMIT 00100440 OMIT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00100460 OMIT $$ POP OMIT 00100480 0000:0000:0 BEGIN 00100500 0000:0000:0 (01,0002) = BLOCK#1 (01,0003) = SEGMENT DESCRIPTOR BLOCK#1 IS SEGMENT 0003 DEFINE 1 00100600 0003:0000:1 MAX1 = 100 #; 00100700 0003:0000:1 00102000 0003:0000:1 INTEGER 00104000 0003:0000:1 I, 00106000 0003:0000:1 (02,0002) = I J; 00108000 0003:0000:1 (02,0003) = J REAL 00110000 0003:0000:1 X, 00112000 0003:0000:1 (02,0004) = X Y; 00114000 0003:0000:1 (02,0005) = Y DOUBLE 00116000 0003:0000:1 Z; 00118000 0003:0000:1 (02,0006) = Z FILE 00120000 0003:0000:1 PRINT (KIND=PRINTER, MAXRECSIZE=132, FRAMESIZE=8); 00122000 0003:0000:1 (02,0008) = PRINT DATA LENGTH IN WORDS IS 000C ARRAY 00124000 0003:0000:1 A [0:15], 00126000 0003:0000:1 (02,0009) = A BIG[0:999999]; 00128000 0003:0000:1 (02,000A) = BIG EBCDIC ARRAY 00130000 0003:0000:1 E [0:255]; 00132000 0003:0000:1 (02,000B) = E TRUTHSET 00134000 0003:0000:1 NUMERIC ("0123456789"); 00136000 0003:0000:1 (01,0004) = POOL DATA DESCRIPTOR DATA LENGTH IN WORDS IS 0008 POINTER 00138000 0003:0000:1 P, 00140000 0003:0000:1 (02,000C) = P Q; 00142000 0003:0000:1 (02,000D) = Q 00144000 0003:0000:1 STRING 00146000 0003:0000:1 S1, 00148000 0003:0000:1 (02,000E) = S1 (02,000F) = S1.LENGTH S2; 00150000 0003:0000:1 (02,0010) = S2 (02,0011) = S2.LENGTH INTERLOCK 00152000 0003:0000:1 L; 00154000 0003:0000:1 (02,0012) = L EVENT 00156000 0003:0000:1 EV; 00158000 0003:0000:1 (02,0014) = EV 00160000 0003:0000:1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00162000 0003:0000:1 PROCEDURE P1 (A, B, C); 00164000 0003:0000:1 (02,0016) = P1 VALUE B; 00166000 0003:0000:1 REAL A; 00168000 0003:0000:1 BOOLEAN B; 00170000 0003:0000:1 ARRAY C [0]; 00172000 0003:0000:1 (03,0002) = A (03,0003) = B (03,0004) = C BEGIN 00174000 0003:0000:1 INTEGER 00176000 0003:0000:1 X; 00178000 0003:0000:1 (01,0005) = SEGMENT DESCRIPTOR P1 IS SEGMENT 0005 (03,0005) = X C[0]:= *+A; 2 00180000 0005:0000:1 %---THE NEXT STATEMENT WILL CAUSE AN INVALID INDEX FAULT--- 00181000 0005:0001:5 FOR X:= 1 STEP 1 UNTIL 4, SIZE(C)-4 STEP 1 UNTIL SIZE(C) DO 00182000 0005:0001:5 (03,0006) = FOR CLAUSE WORK CELL C[X]:= A+X; 00184000 0005:000E:0 END P1; 00186000 0005:0011:3 P1(0005) LENGTH IN WORDS IS 0013 2 00188000 0003:0000:1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00190000 0003:0000:1 INTEGER PROCEDURE P2 (X, Y); 00192000 0003:0000:1 (02,0017) = P2 VALUE X, Y; 00194000 0003:0000:1 INTEGER X; 00196000 0003:0000:1 REAL Y; 00198000 0003:0000:1 (03,0002) = X (03,0003) = Y BEGIN 00200000 0003:0000:1 (03,0004) = PROCEDURE VALUE PROCEDURE P3 (A, B); 00202000 0003:0000:1 (01,0006) = SEGMENT DESCRIPTOR P2 IS SEGMENT 0006 (03,0005) = P3 REAL A, B; 2 00204000 0006:0000:1 (04,0002) = A (04,0003) = B BEGIN 00206000 0006:0000:1 DOUBLE DD; 00208000 0006:0000:1 (01,0007) = SEGMENT DESCRIPTOR P3 IS SEGMENT 0007 (04,0004) = DD DD:= A MUX B; 3 00210000 0007:0000:1 B:= LN(1.2/(A+B+1)); 00212000 0007:0001:3 (01,0008) = LN P1 (A, TRUE, BIG); 00214000 0007:0005:4 END P3; 00216000 0007:0007:3 P3(0007) LENGTH IN WORDS IS 0009 3 00218000 0006:0000:1 X:= SQRT(Y); 00220000 0006:0000:1 (01,0009) = SQRT P3 (X, Y); 00222000 0006:0001:5 P2:= X; 00224000 0006:0003:3 END P2; 00226000 0006:0004:2 P2(0006) LENGTH IN WORDS IS 0008 2 00900000 0003:0000:1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00900100 0003:0000:1 %% OUTER BLOCK 00900200 0003:0000:1 00900300 0003:0000:1 WRITE (PRINT[SPACE 2], <"SAMPLE ALGOL PROGRAM ",A6>, TIME(15)); 00900400 0003:0000:1 (01,000A) = FORMATTEDOUTPUT (01,000B) = POOL DATA DESCRIPTOR (02,0018) = WRITE IO LIST PCW (01,000C) = TIMEINTRINSIC I:= 6; 00900500 0003:0008:4 J:= I**3; 00900600 0003:0009:3 X:= I/J; 00900700 0003:000A:5 Y:= (I-J)/(I+J) - X; 00900800 0003:000C:1 Z:= X*Y; 00900900 0003:000F:0 00901000 0003:0010:3 Y:= X.[23:10]; 00901100 0003:0010:3 X.[23:10]:= Y & I[45:5:3]; 00901200 0003:0011:5 00901300 0003:0014:5 CASE I OF 00901400 0003:0014:5 BEGIN 00901500 0003:0015:1 1: J:= 1; 2 00901600 0003:0015:1 2: J:= 2; 00901700 0003:0019:2 3: J:= 4; 00901800 0003:001A:4 15:J:= 1023; 00901900 0003:001C:0 ELSE: J:= 0; 00902000 0003:001D:3 END; 00902100 0003:001E:4 2 00902200 0003:0028:0 P:= POINTER (A,8); 00902300 0003:0028:0 WHILE I > 0 DO 00902400 0003:0029:3 BEGIN 00902500 0003:002A:1 SCAN Q:P FOR J:I UNTIL = " "; 2 00902600 0003:002A:4 SCAN P:Q FOR I:J WHILE = " "; 00902700 0003:002D:1 END; 00902800 0003:002F:1 2 00902900 0003:002F:4 X:= J-I; 00903000 0003:002F:4 REPLACE POINTER (BIG) BY Q FOR J WHILE IN NUMERIC; 00903100 0003:0031:0 REPLACE E BY " " FOR SIZE(E); 00903200 0003:0033:5 00903300 0003:0037:0 S1:= STRING (E, SIZE(E)); 00903400 0003:0037:0 S2:= TAKE (DROP (S1, 5), 10); 00903500 0003:0042:5 00903600 0003:0049:3 LOCK (L); 00903700 0003:0049:3 (01,000D) = ILOK_LOCKING PROCURE (EV); 00903800 0003:0053:1 (01,000E) = PROCUREP UNLOCK (L); 00903900 0003:0054:2 (01,000F) = ILOK_UNLOCKING LIBERATE (EV); 00904000 0003:005A:3 (01,0010) = LIBERATEP 00904100 0003:005B:4 ON EXPONENTOVERFLOW OR SCANPARITY: 00904200 0003:005B:4 BEGIN 00904300 0003:005B:4 (02,0019) = FAULT SIW (02,001A) = FAULT PCW DISPLAY ("OOPS"); 2 00904400 0003:005E:5 (01,0011) = DISPLAY PROGRAMDUMP (ARRAYS); 00904500 0003:0061:1 (01,0012) = PROGRAMDUMP END; 00904600 0003:0062:3 2 00904700 0003:0062:3 P2 (I,X); 00904800 0003:0062:3 00904900 0003:0064:0 ON ANYFAULT; 00905000 0003:0064:0 (02,001B) = FAULT SIW 00905100 0003:0067:4 PROGRAMDUMP (ARRAYS, BASE); 00905200 0003:0067:4 END. 00905300 0003:0069:0 (01,0013) = BLOCKEXIT (01,0014) = GETSTRINGAREA BLOCK#1(0003) LENGTH IN WORDS IS 0084 DATA LENGTH IN WORDS IS 0009 ==================================================================================================================================== NUMBER OF ERRORS DETECTED = 0. NUMBER OF SEGMENTS = 18. TOTAL SEGMENT SIZE = 197 WORDS. CORE ESTIMATE = 5271 WORDS. STACK ESTIMATE = 40 PROGRAM SIZE = 141 CARDS (17 OMITTED CARDS), 500 SYNTACTIC ITEMS, 33 DISK SECTORS. PROGRAM FILE NAME: OBJECT/UNITE/AS4027/ALGOL/SAMPLE ON DISK. COMPILATION TIME = 1.148 SECONDS ELAPSED; 0.257 SECONDS PROCESSING; 0.273 SECONDS I/O. ====================================================================================================================================