1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

384 lines
30 KiB
Plaintext

SORTGEN 000106AA 00000100
00001000
W. C. PRICE 00002000
PROGRAMMING SYSTEMS DEPARTMENT 00003000
PASADENA 00004000
APRIL, 1967 00005000
COMMENT 00006000
************************************************************************00007000
00008000
NOTE THAT THIS IS NOT AN OFFICIAL PRODUCT OF THE PROGRAMMING 00009000
SYSTEMS DEPT., NOR OF THE BURROUGHS CORP., AND THAT NO RESPONSIBILITY 00010000
IS ASSUMED BY THE BURROUGHS CORPORATION FOR THE USE OR MAINTENANCE OF 00011000
THIS PROGRAM. 00012000
00013000
***********************************************************************;00014000
00015000
THIS PROGRAM GENERATES A PROGRAM IN BURROUGHS EXTENDED ALGOL 00016000
FOR THE B-5500, TO PERFORM A SORT AS SPECIFIED BY ITS INPUT, SPECIFI- 00017000
CATION CARDS. OPTIONALLY, THE GENERATED PROGRAM WILL BE COMPILED TO THE00018000
LIBRARY, OR FOR IMMEDIATE EXECUTION, OR LEFT ON THE DISK IN SYMBOLIC 00019000
FORM FOR USER MODIFICATION. THE INPUT CONTAINS ONE SORT SPECIFICATION 00020000
CARD, FOLLOWED BY A KEY SPECIFICATION FOR EACH SORTING FIELD. THESE 00021000
CARDS ARE READ BY THE GENERATOR FROM A FILE CALLED "SPEC". THE FORMAT 00022000
OF THE SORT SPECIFICATION CARD IS AS FOLLOWS: 00023000
COLS: FIELD DESCRIPTION: 00024000
1- 7 PROGRAM IDENTIFICATION. WHERE THIS FIELD CONTAINS |||||||, 00025000
THE GENERATED SYMBOLIC PROGRAM IS NAMED |||||||/SYMB, 00026000
AND THE COMPILED PROGRAM IS |||||||/SORT. IF A DUMP-ON- 00027000
ERROR OPTION IS SELECTED, THE ERROR FILE WILL BE |||||||/ 00028000
ERRORS. 00029000
8-11 SORT RECORD SIZE: THE NUMBER OF WORDS IN THE RECORD TO BE 00030000
SORTED. 00031000
12-13 NUMBER OF SORT KEYS. 00032000
14 NUMBER OF MAGNETIC TAPES THAT MAY BE USED BY THE SORT. IF NOT00033000
BLANK, MUST BE 0, 3, 4, OR 5. 00034000
15 ERROR OPTION: ACTION UPON INPUT ERROR. 00035000
BLANK- TERMINATE THE SORT. 00036000
0 - PROCESS THE RECORD. 00037000
1 - DELETE THE ERROR RECORD(S). 00038000
2 - PRINT AND PROCESS. 00039000
3 - PRINT AND DELETE. 00040000
16 GENERATION OPTION. 00041000
L - COMPILE THE PROGRAM TO THE LIBRARY. 00042000
S - SYNTAX-CHECK AND LIST THE GENERATED PROGRAM. 00043000
ANY OTHERS CAUSE THE GENERATED PROGRAM TO BE COMPILED, 00044000
EXECUTED, AND BOTH THE SYMBOLIC AND COMPILED PROGRAMS TO 00045000
BE REMOVED FROM THE DISK LIBRARY. 00046000
17-23 INPUT FILE IDENTIFICATION PREFIX: THE "FIRST NAME" OF THE 00047000
FILE TO BE SORTED. IF BLANK, THIS WILL BE CHANGED TO ALL 00048000
ZEROES. 00049000
24-30 INPUT FILE IDENTIFICATION: THE "SECOND NAME" OF THE INPUT. 00050000
31 INPUT MEDIUM: D= SERIAL DISK, OTHER=NON-DISK. 00051000
32-35 INPUT RECORD SIZE IN WORDS, IF DIFFERENT FROM THE SORT 00052000
RECORD SIZE. 00053000
36-39 INPUT BLOCK SIZE, IF INPUT FILE IS BLOCKED. 00054000
40-46 OUTPUT FILE IDENTIFICATION PREFIX: SEE COLS 17-23. 00055000
47-53 OUTPUT FILE IDENTIFICATION. 00056000
54 OUTPUT MEDIUM: D= SERIAL DISK,OTHER NON-NUMERIC=TAPE 00057000
IF NUMERIC, FOLLOWS STANDARD DESIGNATION. 00058000
55-58 OUTPUT RECORD SIZE, IF NOT EQUAL TO SORT RECORD SIZE. 00059000
IF SPECIFIED, AND NOT SAME AS SORT RECORD SIZE, AN OUTPUT 00059100
PROCEDURE WILL BE GENERATED. 00059200
59-62 OUTPUT BLOCK SIZE, IF OUTPUT IS BLOCKED. 00060000
63-65 SAVE-FACTOR FOR OUTPUT FILE. 00061000
66-67 NUMBER OF AREAS IF OUTPUT FILE IS A NEW DISK FILE. 00062000
68-71 AREA SIZE IN RECORDS IF OUTPUT IS NEW DISK FILE. 00063000
72-73 MEMORY SIZE, IN "K" (1024). IF EMPTY, 12000 WILL BE USED. 00064000
74-78 DISK SIZE, IN 1000-WORDS. IF EMPTY, 600000 WILL BE USED. 00065000
WHERE A FIELD IS OPTIONAL, IT MAY BE LEFT BLANK OR FILLED WITH 00066000
ZEROES. 00067000
00068000
------------------------------------------------------------------------00069000
00070000
THE FORMAT OF A KEY SPECIFICATION CARD IS AS FOLLOWS: 00071000
1- 2 KEY NUMBER. MUST NOT BE BLANK OR ZERO OR GREATER THAN THE 00072000
NUMBER OF KEYS GIVEN IN COLS 12-13 OF THE SORT SPECIFI- 00073000
CATION CARD. DURING THE SORT, KEY NUMBER 1 IS THE MAJOR 00074000
KEY. THE KEY CARDS NEED NOT BE PRESENTED IN ORDER. 00075000
3 ORDER. IF "D", THE KEY IS DESCENDING: OTHERWISE, ASCENDING. 00076000
4 MODE. IF "O", THE KEY IS SINGLE-PRECISION COMPUTATIONAL, 00077000
AND ITS SIZE IS ASSUMED TO BE ONE WORD. IF ANYTHING ELSE,00078000
THE KEY IS DISPLAY. 00079000
5- 8 START OF KEY. IF KEY IS COMPUTATIONAL, THE WORD WITHIN THE 00080000
RECORD WHICH CONTAINS THE KEY. IF DISPLAY, THE 00081000
STARTING CHARACTER POSITION. THE FIRST POSITION IN THE 00082000
RECORD IS NUMBERED 1. 00083000
9-10 KEY SIZE, IF DISPLAY. IF GREATER THAN 63, IT WILL BE 00084000
REDUCED TO 63. 00085000
00086000
------------------------------------------------------------------------00087000
00088000
SORT GENERATOR PROGRAM 00089000
BEGIN 00090000
ALPHA PID1, % FIRST 3 CHARS OF PROGID 00091000
PID2, % LAST 4 CHARS OF PROGID 00092000
ERROPTN, % OPTIONS FOR ERROR HANDLING 00093000
GENOPTN, % GENERATION OPTION 00094000
NIP1, % INPUT FILE ID PREFIX (MFID) 00095000
NIP2, 00096000
NID1, % INPUT FILE ID 00097000
NID2, 00098000
OIP1, % OUTPUT FILE ID PREFIX 00099000
OIP2, 00100000
OID1, % OUTPUT FILE ID 00101000
OID2, 00102000
IN1, % "DISK" IF DISK INPUT, BLANK IF NOT 00103000
IN2, % "SERIAL" IF DISK IN 00104000
OT1, % "DISK" FOR OUTPUT 00105000
OT2; % "SERIAL" 00106000
REAL LINR; % RUNNING LINE NR FOR OUTPUT 00107000
INTEGER RECSZ, % SORT RECORD SIZE 00108000
INBLKSZ, % INPUT BLOCK SIZE 00109000
INRECSZ, % INPUT RECORD SIZE 00110000
NROWS, % # ROWS IF DISK OUTPUT, ELSE FILE TYPE 00111000
ROWSZ, % OUTPUT ROW SIZE 00112000
OUTRECSZ,% " RECORD SIZE 00113000
OBLKSZ, % " BLOCK " 00114000
SAVETIME,% SAVE TIME FOR OUTPUT FILE 00115000
NKEYS, % # KEYS 00116000
KEY, % INDEX OF KEY BEING PROCESSED. 00117000
I,J,K,M,N,% SCRATCH VARIABLES 00118000
CORESZ, % CORE SIZE 00119000
DKSZ, % DISK SIZE 00120000
NTAPES; % # BACKUP TAPES FOR ROY 00121000
BOOLEAN DKOT , % DISK OUTPUT 00122000
DSPKEY, % ONE OR MORE DISPLAY KEYS 00123000
OUTPRO, % OUTPUT PROCEDURE NEEDED 00124000
INPRO, % INPUT PROCEDURE NEEDED 00125000
DMPOPTN, % PRINT ERROR RECORDS 00126000
OMITOPTN;% BYPASS ERROR RECORDS 00127000
REAL STREAM PROCEDURE LINO(L); 00128000
BEGIN DI ~ LOC LINO; DS~5 LIT "00001"; DI~DI-5; SI~L ; DS~8 ADD; 00129000
SI~LOC LINO; DI ~L; DS~WDS 00130000
END LINO; 00131000
DEFINE L=LINO(LINR)#; 00132000
FILE IN SPEC(2,10); 00133000
FILE OUT DISK DISK SERIAL [20:90] "SYMB" (2,10,150,SAVE 10); 00134000
FORMAT FIN(A3,A4,I4,I2,I1,2A1,2(2(A3,A4),A1,2I4),I3,I2,I4,I2,I5 ),00135000
FKE(I2,2A1,I4,I2); 00136000
LIST LIN (PID1,PID2,RECSZ,NKEYS,NTAPES,ERROPTN,GENOPTN,NIP1,NIP2, 00137000
NID1,NID2,IN1,INRECSZ,INBLKSZ,OIP1,OIP2,OID1,OID2,OT1, 00138000
OUTRECSZ,OBLKSZ,SAVETIME,NROWS,ROWSZ,CORESZ,DKSZ );00139000
COMMENT *************** FIRST CODE--READ THE SPEC CARD ****************;00140000
READ(SPEC,FIN,LIN); 00141000
BEGIN ARRAY ORDER,MODE,WORD, SIZE [0:NKEYS]; 00142000
INTEGER ARRAY KXC[0:NKEYS]; 00143000
INTEGER PROCEDURE STAR(B); VALUE B; BOOLEAN B; 00144000
STAR~ IF B THEN 1 ELSE -1; 00145000
DEFINE DMPTOG= STAR(DMPOPTN)#, OMITOG=STAR(OMITOPTN)#; 00146000
FORMAT F1 (X14,"SORTGEN GENERATED PROGRAM ","""A3,A4 00147000
""/SORT",X18,O/ 00148000
"BEGIN",X67,O/ 00149000
X4,"FILE INPUT ",A4,A7,2(X1,""",A3,A4,"""), 00150000
"(2,",I4,",",I4,");",X12,O/ 00151000
X4,"FILE OUTPUT ",A4,A7,A2,I2,A1,V4,A1,2(X1,""",A3,A4, 00152000
"""), ,X15,O/ 00153000
X45,"(2,",I4,",",I4,",SAVE ",I3,"); ",O), 00154000
F2 (X4,"BOOLEAN TEMP;",X55,O/ 00155000
X4,"STREAM PROCEDURE FILLUP(A,S,N,C); VALUE S,N,C;", 00156000
X22,O/ 00157000
X4,"BEGIN SI~LOC C; SI~SI+7; DI~A; DI~DI+S;",X29,O/ 00158000
X9,"N(DS~CHR; SI~SI-1);",X44,O/ 00159000
X4,"END FILLUP;",X57,O), 00160000
F3 (X9,"BOOLEAN STREAM PROCEDURE K(SZ,SK,A,B); VALUE SZ,SK;",00161000
X12,O/ 00162000
X9,"BEGIN SI~A; SI~SI+SK; A~SI; DI~B; DI~DI+SK; B~DI;", 00163000
X14,O/ 00164000
X14,"IF SZ SC<DC THEN TALLY~1 ELSE",X29,O/ 00165000
X14,"BEGIN SI~A; DI~B; IF SZ SC!DC THEN TALLY~2 END;", 00166000
X11,O/ 00167000
X14,"K~TALLY",X51,O/ 00168000
X9,"END K;",X57,O), 00169000
F4 (X4,"BOOLEAN PROCEDURE COMPARE(A,B); ARRAY A,B[0];",X23,O/00170000
X4,"BEGIN",X63,O), 00171000
F5 (X9,"IF REAL(COMPARE~K(",I2,",",I1,2(",",A1,"[",I4,"]"), 00172000
"))=0 THEN",X16,O), 00173000
F6 (X9,"COMPARE~REAL(K(",I2,",",I1,2(",",A1,"[",I4,"]"), 00174000
"))!2",X24,O), 00175000
F7 (X9,"IF ",A1,"[",I4,"]<",A1,"[",I4,"] THEN COMPARE~TRUE", 00176000
" ELSE",X22,O/ 00177000
X14,"IF A[",I4,"]!B[",I4,"] THEN COMPARE~FALSE ELSE",X16,00178000
O), 00179000
F8 (X9,"COMPARE~",A1,"[",I4,"]{",A1,"[",I4,"]",X40,O), 00180000
F9 (X4,"END OF COMPARE PROCEDURE;",X43,O/ 00181000
X4,"PROCEDURE STOPPER(RECORD); ARRAY RECORD[0];",X25,O/ 00182000
X4,"BEGIN",X63,O), 00183000
F10(X9,"FILLUP(RECORD[",I4,"],",I1,2(",",I2),");",X34,O), 00184000
F11(X9,"RECORD[",I4,"]~",A1,"REAL((NOT FALSE).[3:45]);", 00185000
X24,O), 00186000
F12(X4,"END OF STOPPER PROCEDURE;",X43,O/ 00187000
*(X4"READ(MYSELF); CLOSE(MYSELF,PURGE);"X34,O/), 00188000
X4,"SORT(OUTP",A2,",INP",A2,",",I1,",STOPPER,COMPARE,", 00189000
I4","I5","I8");"X11,O/ 00190000
"END OF SORT PROGRAM. ",A3,A4,"/SORT",X38,O), 00191000
F13(X4,"INTEGER RECORDCOUNT;",X48,O/ 00192000
X4,"FILE OUT PRINTER 4 ",""",A3,A4,""",""ERRORS", 00193000
"" (2,15);",X24,O/ 00194000
X4,"PROCEDURE PRINT(RECORD); ARRAY RECORD[*];",X27,O/ 00195000
X4,"BEGIN ARRAY LINE[0:14];",X45,O/ 00196000
*(X9,"INTEGER N;",X53,O/), 00197000
X9,"FORMAT E(",""INPUT PARITY ERROR, RECORD ","",I6,", 00198000
"":","");",X16,O/ 00199000
X9,"STREAM PROCEDURE MOVE(N,R,L); VALUE N;",X25,O/ 00200000
X9,"BEGIN DI~L; DS~8 LIT","" ",""; SI~L; DS~14 WDS; ", 00201000
"SI~R; DI~L;",X10,O/ 00202000
X14,"DI~DI+8; DS~N WDS",X41,O/ 00203000
X9,"END MOVE;",X54,O/ 00204000
X9,"WRITE(PRINTER,E,RECORDCOUNT);",X34,O), 00205000
F14(X9,"FOR N~0 STEP 14 UNTIL ",I4," DO",X34,O/ 00206000
X9,"BEGIN MOVE(14,RECORD[N],LINE); WRITE(PRINTER,15,", 00207000
"LINE[*]) END; ",O), 00208000
F15(X9,"MOVE(",I2,",RECORD[",I4,"],LINE); WRITE(PRINTER,", 00209000
"15,LINE[*]);",X9,O), 00210000
F16(X9,"WRITE(PRINTER[DBL])",X44,O/ 00211000
X4,"END PRINT;",X58,O), 00212000
F17(X4,"BOOLEAN PROCEDURE INPRO(RECORD); ARRAY RECORD[0];", 00213000
X19,O/ 00214000
X4,"BEGIN LABEL EOF,PAR,REREAD,SORT;",X36,O/ 00215000
*(X9,"RECORDCOUNT~RECORDCOUNT+1;",X37,O/), 00216000
X9,"INPRO~TRUE;",X52,O/ 00217000
X4,"REREAD:",X61,O/ 00218000
X9,"READ(INPUT,",I4,",RECORD[*])[EOF:PAR];",X27,O/ 00219000
X9,"INPRO~FALSE;",X51,O/ 00220000
X9,"GO TO SORT;",X52,O/ 00221000
X4,"PAR:",X64,O/ 00222000
*(X9,"PRINT(RECORD);",X49,O/), 00223000
*(X9,"READ(INPUT)[EOF];",X46,O/), 00224000
X9,"GO TO REREAD;",X50,O/ 00225000
X4,"EOF:",X64,O/ 00226000
*(X9,"CLOSE(PRINTER);",X48,O/), 00227000
X4,"SORT:",X63,O/ 00228000
X4,"END OF INPUT PROCEDURE;",X45,O); 00229000
FORMAT F18(X4,"SORT PROGRAM ",""",A3,A4,"" SPECIFICATIONS:",X30,O/ 00230000
X9,"SORTING ",I4,"-WORD RECORDS, ON ",I2," KEYS, USING ",00231000
I1," TAPES.",X10,O/ 00232000
2(X9,A3,"PUT IS ",""",A3,A4,""/",""",A3,A4,"", WITH ", 00233000
I4,"-WORD RECORDS",X10,O/ 00234000
X14,"IN ",I4,"-WORD BLOCKS, ",*X37, 00235000
*("ON DISK ",*("IN ",I2," AREAS OF ",I4," RECORDS ")00236000
,*X29), O/), 00237000
X14,"TO BE RETAINED ",I3," DAYS.",X34,O/ 00238000
X9,"THE INPUT-ERROR OPTION SELECTED IS ", 00239000
*("TERMINATE.",X7), 00240000
*("DELETE.",X10), 00241000
*("DUMP AND DELETE. "), 00242000
*("DUMP AND PROCESS."), 00243000
*("PROCESS.",X9), 00244000
X11,O/ 00245000
X9,"THE KEYS ARE",X51,O 00246000
*(/X14,*(I2," CHARACTERS, STARTING WITH CHARACTER ", 00247000
I4), 00248000
*("THE ",I4,"-TH WORD"), 00249000
*(", ASCENDING "), *(", DESCENDING"), X3, 00250000
*X27,O)); 00251000
FORMAT F19 (X4"FILE MYSELF DISK """"A3,A4"""""SYMB""" (1,30);"X28,O)00252000
; 00253000
LIST L1 (PID1,PID2,L,L,IN1,IN2,NIP1,NIP2,NID1,NID2, 00254000
INRECSZ,INBLKSZ,L, 00255000
OT1,OT2,IF DKOT THEN " [" ELSE " ",NROWS,IF DKOT THEN 00256000
":" ELSE " ",IF DKOT THEN "I" ELSE 17,IF DKOT THEN 00257000
ROWSZ ELSE " ",IF DKOT THEN "]" ELSE 48, OIP1,OIP2, 00258000
OID1,OID2,L, 00259000
OUTRECSZ,OBLKSZ,SAVETIME,L), 00260000
L2 (L,L,L,L,L), 00261000
L3 (L,L,L,L,L,L), 00262000
L4 (L,L), 00263000
L5 (SIZE[KEY],KXC[KEY],17+ORDER[KEY],WORD[KEY],18-ORDER[KEY],00264000
WORD[KEY],L); 00265000
DEFINE L6=L5#,L16=L4#; 00266000
LIST L7 (17+ORDER[KEY],WORD[KEY],18-ORDER[KEY],WORD[KEY],L, 00267000
WORD[KEY],WORD[KEY],L), 00268000
L8 (17+ORDER[KEY],WORD[KEY],18-ORDER[KEY],WORD[KEY],L), 00269000
L9 (L,L,L), 00270000
L10 (WORD[KEY],KXC[KEY],SIZE[KEY],IF ORDER[KEY]!0 THEN " " 00271000
ELSE 12,L), 00272000
L11 (WORD[KEY],IF ORDER[KEY]=0 THEN " " ELSE "-",L), 00273000
L12 (L,I~STAR(GENOPTN!"L" AND GENOPTN!"S"),FOR J~I STEP -10 00274000
WHILE J>0 DO L, 00275000
IF OUTPRO THEN "RO" ELSE "UT",IF INPRO THEN "RO" ELSE 00276000
"UT",NTAPES,RECSZ, CORESZ,DKSZ, 00277000
L,PID1,PID2,L), 00278000
L13 (L,PID1,PID2,L, L,L,STAR(INRECSZ=14), 00279000
FOR KEY~REAL(INRECSZ{14) 00280000
STEP 1 UNTIL 6 DO L), 00281000
L14 (INRECSZ-14,L,L), 00282000
L15 (INRECSZ MOD 14,INRECSZ DIV 14 | 14,L), 00283000
L17 (L,L,DMPTOG ,FOR KEY~REAL(TRUE AND NOT DMPOPTN) STEP 1 00284000
UNTIL 2 DO-L, INRECSZ,L,L,L,L, 00285000
DMPTOG , FOR KEY~1 STEP 1 UNTIL REAL 00286000
(DMPOPTN) DO L,OMITOG , FOR KEY~-1 STEP 1 UNTIL REAL 00287000
(OMITOPTN) DO L, DMPTOG , FOR KEY~-1 STEP 1 UNTIL 00288000
REAL(DMPOPTN ) DO L); 00289000
LIST L18 (PID1,PID2,L,RECSZ,NKEYS,NTAPES,L, 00290000
" IN",NIP1,NIP2,NID1,NID2,INRECSZ,L, INBLKSZ,IN1!"DISK", 00291000
STAR(IN1="DISK"), FOR I~-1 STEP 1 WHILE I<1 AND 00292000
IN1="DISK" DO I,L , 00293000
"OUT",OIP1,OIP2,OID1,OID2,OUTRECSZ,L, 00294000
OBLKSZ, TRUE AND NOT DKOT, STAR(DKOT), 00295000
FOR I~0 STEP 1 WHILE DKOT AND I=0 DO [ 00296000
FOR J~0 STEP 1 WHILE NROWS!0 AND J=0 DO[1,NROWS, 00297000
ROWSZ],STAR(NROWS=0)],L, 00298000
SAVETIME,L, 00299000
STAR(ERROPTN>3),STAR(ERROPTN=1),STAR(ERROPTN=3), 00300000
STAR(ERROPTN=2),STAR(ERROPTN=0),L, 00301000
L,NKEYS,FOR I~1 STEP 1 UNTIL NKEYS DO 00302000
[FOR J~0 STEP 1 WHILE MODE[ I ]!"O" AND J=0 DO [1, 00303000
SIZE[I], WORD[I]|8+KXC[I],-1], 00304000
FOR J~0 STEP 1 WHILE MODE[I]="O" AND J=0 DO 00305000
[-1,1,WORD[I]], 00306000
STAR(ORDER[I]=0),STAR(ORDER[I]=1), MODE[I]="O",L]); 00307000
LIST L19 (PID1,PID2,L); 00308000
PROCEDURE CHECKID(A,B); ALPHA A,B; 00309000
IF A=" " AND B=" " THEN A~B~0; 00310000
COMMENT ********** CHECK THE SPEC CARD AND READ THE KEY CARDS *********;00311000
CHECKID(NIP1,NIP2); 00312000
CHECKID(OIP1,OIP2); 00313000
IF INRECSZ = 0 THEN INRECSZ ~ RECSZ ; 00314000
IF OUTRECSZ=0 THEN OUTRECSZ~RECSZ ELSE OUTPRO~RECSZ!OUTRECSZ; 00315000
CORESZ~CORESZ|1024; DKSZ~DKSZ|1000; 00316000
IF IN1="D" THEN BEGIN IN1~"DISK"; IN2~"SERIAL" END ELSE 00317000
IN1~IN2~" "; 00318000
IF OT1="D" THEN BEGIN 00319000
OT1~"DISK"; OT2~"SERIAL"; 00320000
DKOT ~ TRUE; 00321000
END ELSE 00322000
BEGIN IF OT1 > 9 THEN NROWS~2 ELSE NROWS~ OT1; 00323000
OT1 ~ OT2 ~ " "; 00324000
END; 00325000
IF(INPRO~ERROPTN { 3)THEN 00326000
BEGIN DMPOPTN ~ ERROPTN >1; 00327000
OMITOPTN ~ BOOLEAN(ERROPTN.[47:1]) 00328000
END; FOR I~1 STEP 1 UNTIL NKEYS DO ORDER[I]~-1; 00329000
FOR KEY ~ 1 STEP 1 UNTIL NKEYS DO 00330000
BEGIN READ(SPEC,FKE,I,J,K,M,N); M~M-1; 00331000
IF I>0 AND I{NKEYS THEN 00332000
IF ORDER[I]<0 THEN 00333000
BEGIN ORDER[I]~REAL(J="D"); 00334000
IF(MODE[I]~K)="O" THEN WORD[I]~ M ELSE 00335000
BEGIN WORD[I]~M DIV 8; DSPKEY~TRUE END; 00336000
IF M+N >RECSZ|8 THEN N~RECSZ|8-M; 00337000
KXC[I]~ M MOD 8; 00338000
SIZE[I]~IF N>63 THEN 63 ELSE N 00339000
END ELSE KEY~KEY-1 ELSE KEY~KEY-1; 00340000
END KEY LOOP; 00341000
FILL DISK WITH PID2&PID1[6:30:18]; 00342000
COMMENT *************** GENERATE THE SILLY THING **********************;00343000
WRITE(DISK,F18,L18); 00344000
WRITE(DISK,F1,L1); 00345000
IF GENOPTN!"S" AND GENOPTN!"L" THEN WRITE(DISK,F19,L19); 00346000
IF DSPKEY THEN WRITE(DISK,F2,L2); 00347000
IF DMPOPTN THEN 00348000
BEGIN WRITE(DISK,F13,L13); 00349000
IF INRECSZ>14 THEN WRITE(DISK,F14,L14); 00350000
IF INRECSZ{14 OR INRECSZ MOD 14 ! 0 THEN 00351000
WRITE(DISK,F15,L15); 00352000
WRITE(DISK,F16,L16) 00353000
END; 00354000
IF INPRO THEN WRITE(DISK,F17,L17); 00355000
WRITE(DISK,F4,L4); 00356000
IF DSPKEY THEN WRITE(DISK,F3,L3); 00357000
FOR KEY~1 STEP 1 UNTIL NKEYS-1 DO 00358000
IF MODE[KEY]="O" THEN WRITE(DISK,F7,L7) 00359000
ELSE WRITE(DISK,F5,L5); 00360000
IF MODE[NKEYS]="O" THEN WRITE(DISK,F8,L8) 00361000
ELSE WRITE(DISK,F6,L6); 00362000
WRITE(DISK,F9,L9); 00363000
FOR KEY~1 STEP 1 UNTIL NKEYS DO 00364000
IF MODE[KEY]="O" THEN WRITE(DISK,F11,L11) 00365000
ELSE WRITE(DISK,F10,L10); 00366000
WRITE(DISK,F12,L12); 00367000
COMMENT *************** GIVE IT TO THE COMPILER ***********************;00368000
BEGIN ARRAY A[0:14]; 00369000
FORMAT ZIPPER("CC COMPILE """" A3,A4""/SORT ALGOL ", 00370000
*("LIBRARY"),*("SYNTAX"),";ALGOL FILE CARD="""" 00371000
A3,A4""/SYMB SERIAL; END."); 00372000
WRITE(A[*],ZIPPER,PID1,PID2,STAR(GENOPTN="L"), 00373000
STAR(GENOPTN="S"),PID1,PID2); 00374000
WRITE(DISK,15,A[*]); 00375000
LOCK(DISK); ZIP WITH A[*]; 00376000
END ZIP BLOCK; 00377000
END; 00378000
END OF SORTGEN. 00379000
END;END. LAST CARD ON 0CRDING TAPE 99999999