mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-02 17:44:40 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
1037 lines
82 KiB
Plaintext
1037 lines
82 KiB
Plaintext
"SELECT/ASUPER" 00000100
|
|
BEGIN 00000200
|
|
COMMENT CUBE LIBRARY VERSION 11/20/68 00000201
|
|
CUBE LIBRARY NUMBER S000001 00000202
|
|
SOURCE FILE NAME SELSUP/S000001 00000203
|
|
PROGRAM NAME SELECT/SUPER; 00000204
|
|
INTEGER CORE; 00000300
|
|
00000400
|
|
DEFINE 00000500
|
|
PACKETMAX = 40#, 00000600
|
|
PLUGMAX =15#; 00000700
|
|
ARRAY SORTARRAY [0: 99], 00000800
|
|
SELECTARRAY [0:499], 00000900
|
|
ACTIONARRAY [1:PACKETMAX,0:245], 00001000
|
|
ZIPARRAY [0:100] 00001100
|
|
; 00001200
|
|
BOOLEAN ARRAY ACTION [1:PACKETMAX]; 00001300
|
|
BOOLEAN ARRAY PLUGBOOL[0:PLUGMAX]; 00001400
|
|
INTEGER SORTKEYS, SELECTSIZE, PACKETS, ACTIONMAX, RECSIZE, INBLOCK, 00001500
|
|
LOWRANGE, HIGHRANGE, SKIPNO, LIMITNO, SKIPNUM, LIMITNUM, 00001600
|
|
INSIZE, OUTSIZE, INCOUNT, OUTCOUNT, SORTCOUNT, 00001700
|
|
OUTBLOCK, PARAMS, HIGHPLUG ; 00001800
|
|
BOOLEAN SELECTOPT, EXPLODOPT, TRACEOPT; %JPA00001900
|
|
BOOLEAN SELECTS, ZIPS, MUSTACT, MUSTSORT, MUSTCOUNT 00002000
|
|
, RANGE 00002100
|
|
,PLUGIN, MON 00002200
|
|
; 00002300
|
|
LABEL EOJ; 00002400
|
|
ACTIONMAX ~ SELECTSIZE~RECSIZE~PACKETS~1; 00002500
|
|
IF CORE = 0 THEN CORE ~ 8000; 00002600
|
|
%-----------------------------------------------------------------------00002700
|
|
BEGIN 00002800
|
|
COMMENT EDITS INPUT CARDS TO SELECTOR/MESS ; 00002900
|
|
FILE IN CRD (2,10); 00003000
|
|
FILE OUT PTR 18 (2,15); 00003100
|
|
FILE IN DICTION DISK SERIAL (2,3,90) ; 00003200
|
|
00003300
|
|
INTEGER ARRAY OCTWDS[0:3],PACK[0:40] ; 00003400
|
|
00003500
|
|
INTEGER H, OCTSKIP, OCTLIMIT; 00003600
|
|
REAL ARRAY JUNK,JUNA,FILENAME,FIELDNAME[0:2] , 00003700
|
|
PLUGNAMES[0:2|PLUGMAX-1], 00003800
|
|
BLOCKING[0:3,0:2] ; 00003900
|
|
SAVE REAL ARRAY A[0:10] ; 00004000
|
|
00004100
|
|
INTEGER IDPOS,POS,FIRST ; 00004200
|
|
INTEGER SWI, ERR,ACTNO,ACTCOUNT, PACKETNO, IDNO ; 00004300
|
|
INTEGER AT,LENGTH,CODE,NUMCHARS,SKIPDEST,SW,I,Q,ZIPNO,SORTNO ; 00004400
|
|
00004500
|
|
ALPHA CARDNAME,LASTNO,SEQNO ; 00004600
|
|
ALPHA ALPHSORT,ALPHID,ALPHACT,ALPHPACKET ; 00004700
|
|
BOOLEAN SYNTAX,SWITC ; 00004800
|
|
FORMAT LEADFT(A5,X60,X11,A4) , 00004900
|
|
FT(2X40,A4), 00005000
|
|
HEADING("SYNTAX LISTING"), 00005100
|
|
BADISTCD ("FIRST CARD WAS NOT A LEAD CARD") , 00005200
|
|
NOTNUFLEAD("NOT ENOUGH INFO ON LEAD CARD") , 00005300
|
|
TYPEFT(A4,2X36,A4) , 00005400
|
|
TYPEFT2(A3,X40,X33,A4) , 00005500
|
|
ZIPMSG ("NO MORE THAN 3 ZIP CARDS ALLOWED"), 00005600
|
|
SEQMSG("CARD IS OUT OF SEQUENCE"), 00005700
|
|
TOOMANYPACKETS("NO MORE THAN 40 PACKETS ALLOWED") , 00005800
|
|
TOOMANYIDS ("TOO MANY IDS PRESENT IN DECK" ), 00005900
|
|
TOOMANYACTIONS ("ONLY UP TO 35 ACTIONS PER PACKET ALLOWED"), 00006000
|
|
NUTTIN("NO DATA PRESENT") ; 00006100
|
|
SWITCH FORMAT ERRORS ~ 00006200
|
|
("PROGRAMMING ERROR IF THIS OCCURS"), 00006300
|
|
("NO FILE FOUND"), 00006400
|
|
("INTEGERS NOT OF REASONABLE SIZE FOUND ON LEAD CARD"), 00006500
|
|
("2 OR 4 INTEGERS EXPECTED ON LEAD CARD") , 00006600
|
|
("CARD NOT SORT ZIP PAR OR PACKET AS EXPECTED"), 00006700
|
|
("ILLEGITIMATE CHARACTER ON CARD") , 00006800
|
|
("ONLY 10 ZIP CARDS ALLOWED") , 00006900
|
|
("ONLY UP TO 1000 PARAMETER CARDS ALLOWED") , 00007000
|
|
("ONLY UP TO 99 SORT CARDS ALLOWED") , 00007100
|
|
("NOT ENOUGH INFO ON SORT CARD") , 00007200
|
|
("ASCENDING OR DESCENDING NOT FOUND ON SORT CARD"), 00007300
|
|
("FIELD NAME NOT FOUND IN THE FILE DESIRED") , 00007400
|
|
(" FIELD NAME FOUND BUT WITH INCORRECT FILE NAME"), 00007500
|
|
("CARD WAS NOT ID ACT MOVE SORT ZIP PAR OR PACKET AS EXPECTED") , 00007600
|
|
("NOT ENOUGH INFO FOUND ON ID CARD"), 00007700
|
|
("ILLEGITIMATE CHAR FOUND-IS A SPACE BETWEEN FILE & REL OP"), 00007800
|
|
("RELATIONAL OP NOT FOUND-IS SPACE AFTER IT"), 00007900
|
|
("DATA MUST BEGIN IN 1ST 60 COLS OF ID CARD"), 00008000
|
|
("NOT ENOUGH INFO FOUND ON ACTION CARD"), 00008100
|
|
("DATA MUST BEGIN IN 1ST 38 COLS OF ACTION CARD") , 00008200
|
|
("NOT ENOUGH INFO FOUND ON MOVE CARD") , 00008300
|
|
("TO OR DC NOT FOUND ON MOVE CARD") , 00008400
|
|
("6 NUM DIGITS MUST IMMEDIATELY FOLLOW # SIGN") , 00008500
|
|
("FIELD NAME NOT GIVEN ON PLUG CARD") , 00008600
|
|
("FIELD NAME ON PLUG CARD NOT IN PLUG ARRAY") , 00008700
|
|
("TWO INTEGERS OF REASONABLE SIZE NOT FOUND ON RANGE CARD"), %JPA00008800
|
|
("UNIDENTIFIED OPTION WORD ON LEAD CARD" ) , 00008900
|
|
("INTEGERS NOT OF RESONABLE SIZE FOUND ON SKIP CARD" ), 00009000
|
|
("INTEGERS NOT OF RESONABLE SIZE FOUND ON LIMIT CARD" ) , 00009100
|
|
("TRACE OPTION WORKS ONLY IF ACTION AND/OR MOVE CARDS ARE PRESENTED."); 00009110
|
|
LABEL OPTNSCAN; %JPA00009200
|
|
LABEL ACTIONCARD ; 00009300
|
|
LABEL EOLEAD,EOF,SORTZIPPARPACKET,WHATCARD,IDORACTION,NOCARDS ; 00009400
|
|
00009500
|
|
%***********************************************************************00009600
|
|
BOOLEAN STREAM PROCEDURE ITSPLUGGED(JUNK,PLUGNAME,J,I); 00009700
|
|
VALUE J; 00009800
|
|
BEGIN SI~JUNK; DI~ PLUGNAME; 00009900
|
|
J(IF 16 SC!DC THEN BEGIN TALLY~TALLY+1;SI~SI-16 END 00010000
|
|
ELSE BEGIN I~TALLY;TALLY~1;ITSPLUGGED~TALLY;JUMP OUT END ) 00010100
|
|
END; 00010200
|
|
00010300
|
|
%***********************************************************************00010400
|
|
BOOLEAN STREAM PROCEDURE GETFIELDNAME (JUNK,FIELDNAME) ; 00010500
|
|
COMMENT SIGNALS FINDING OF FIELDNAME ; 00010600
|
|
BEGIN SI~ FIELDNAME ; DI~JUNK ; 00010700
|
|
IF 16 SC = DC THEN TALLY ~1 ; GETFIELDNAME ~ TALLY ; 00010800
|
|
END GETFIELDNAME ; 00010900
|
|
%***********************************************************************00011000
|
|
BOOLEAN STREAM PROCEDURE INTONLY (DECIN,OCTOUT) ; 00011100
|
|
VALUE DECIN ; 00011200
|
|
BEGIN COMMENT CHKS FOR AN INTEGER OF 1-7 DIGS, IF 8 DIGS OR 00011300
|
|
A NON-NUMER THEN INTONLY = FALSE ; 00011400
|
|
LOCAL T,S ; 00011500
|
|
SI ~ LOC 00011600
|
|
DECIN; S ~ SI ; DI ~ OCTOUT ; 00011700
|
|
8(IF SC = " " THEN BEGIN T ~ TALLY ; SI ~ S ; DS ~ T OCT ; 00011800
|
|
TALLY ~ 1 ; JUMP OUT END ; 00011900
|
|
IF SC < "0" THEN BEGIN TALLY ~ 0 ; JUMP OUT ; END ELSE 00012000
|
|
BEGIN SI ~ SI + 1 ; TALLY ~ TALLY + 1 END ) ; 00012100
|
|
INTONLY ~ TALLY ; 00012200
|
|
END INTONLY ; 00012300
|
|
%***********************************************************************00012400
|
|
BOOLEAN STREAM PROCEDURE POUNDORDOLLAR (JUNK) ; 00012500
|
|
BEGIN SI~JUNK; IF SC = "#"THEN TALLY~1 ELSE IF SC = "$" THEN 00012600
|
|
TALLY ~1; POUNDORDOLLAR ~ TALLY END ; 00012700
|
|
%***********************************************************************00012800
|
|
STREAM PROCEDURE CONV (OCTIN,ALPHOUT); 00012900
|
|
COMMENT CONVERTS OCTAL TO DECIMAL ; 00013000
|
|
BEGIN SI~OCTIN ; DI ~ ALPHOUT; DS ~ 8 DEC ; 00013100
|
|
END CONV ; 00013200
|
|
%***********************************************************************00013300
|
|
STREAM PROCEDURE SETARROW (CDINPUT) ; 00013400
|
|
COMMENT SETARROW BLANKS COLS 77-80 AND PUTS AN ARROW AFTER ; 00013500
|
|
BEGIN DI ~ CDINPUT ; 2(DI~DI+38) ; DS~ 5 LIT " ~"; END SETARROW; 00013600
|
|
%***********************************************************************00013700
|
|
STREAM PROCEDURE SENDZIPORPAR (A ,TYPEARRAY) ; 00013800
|
|
COMMENT SETS UP PAR OR ZIP INFO FOR SELECTOR/MESS ; 00013900
|
|
BEGIN 00014000
|
|
DI ~ TYPEARRAY ; 00014100
|
|
SI ~ A ; SI ~ SI + 4 ; 2(DS~36 CHR) ; 00014200
|
|
END SENDZIPORPAR ; 00014300
|
|
%***********************************************************************00014400
|
|
STREAM PROCEDURE MOVEAPHRASE (FROM,DEST,LENGTH,CODE,AT,NUMCHARS, 00014500
|
|
SKIPDEST) ; VALUE NUMCHARS,SKIPDEST ; 00014600
|
|
COMMENT SOURCE IS FROM (THE START OF ARRAY PASSED) IF LENGTH IS 0 OR 00014700
|
|
AT (POSITION IN ARRAY LEFT PREVIOUSLY). UP TO NUMCHARSS OF ARRAY IS 00014800
|
|
SCANNED EACH TIME. LESS THAN NUMCHARS IF SPACE OR ARROW. INFO TIL NUM-00014900
|
|
CHARS, SPACE OR ARROW IS PUT INTO DEST STARTING AT THE SKIPDEST + 1TH 00015000
|
|
CHARACTER. CODE WILL BE 1 IF INFO IS FOUND AND THEN A SPACE OR ARROW. 00015100
|
|
CODE IS 2 IF NO INFO FOUND AND THEN AN ARROW. CODE IS 2 IF NO INFO 00015200
|
|
FOUND AND THEN AN ARROW. CODE IS 8 IF AFTER NUMCHARS IS FOUND THE LAST 00015300
|
|
CHAR WAS NOT A SPACE OR ARROW. ON REENTRANT IF 1 THEN ON SPACE OR 00015400
|
|
ARROW. IF 8 THEN ON INFO. NO REENTRANT IF CODE IS 2.4 MEANDILSEGIT- 00015500
|
|
IMATE CHAR ; 00015600
|
|
BEGIN LABEL L,N,EX ; LOCAL TRA,COD,LENGT ; 00015700
|
|
SI ~ LENGTH ; SI ~ SI + 7 ; 00015800
|
|
IF SC = "0" THEN SI ~ FROM ELSE BEGIN SI ~ AT; DI ~ LOC TRA; 00015900
|
|
DS ~ WDS ; SI ~ TRA END ; 00016000
|
|
DI ~ DEST; SKIPDEST(DS~ LIT "0"); DS~ 18 LIT " "; 00016100
|
|
DI ~ DEST ; DI ~ DI + SKIPDEST ; 00016200
|
|
L: IF SC = " " THEN BEGIN SI ~ SI + 1 ; GO TO L END; 00016300
|
|
IF SC = "~" THEN BEGIN LENGT ~ TALLY; TALLY ~ 2; COD ~ TALLY; END ELSE 00016400
|
|
BEGIN NUMCHARS( IF SC = " " THEN JUMP OUT TO N; 00016500
|
|
IF SC = "~" THEN JUMP OUT TO N; 00016600
|
|
TALLY ~ TALLY + 1 ; DS ~ CHR ) ; 00016700
|
|
LENGT ~ TALLY ; TALLY ~ 8 ; COD ~ TALLY ; GO TO EX ; 00016800
|
|
N: LENGT ~ TALLY ; TALLY ~ 1 ; COD ~ TALLY ; 00016900
|
|
EX: TRA ~ SI ; SI ~ LOC TRA ; DI ~ AT ; DS ~ WDS END ; 00017000
|
|
SI ~LOC COD ; DI ~ CODE ; DS ~ WDS ; SI ~ LOC LENGT ; 00017100
|
|
DI ~ LENGTH ; DS ~ WDS ; END MOVEAPHRASE ; 00017200
|
|
%***********************************************************************00017300
|
|
PROCEDURE SEQCHK ; 00017400
|
|
COMMENT CHECKS SEQUENCE NOS--CANCELS IT THRU SETARROW--SETS LENGTH TO 00017500
|
|
0 ----GLOBAL IS SEQNO,LASTNO,PTR ; 00017600
|
|
BEGIN 00017700
|
|
IF SEQNO < LASTNO THEN WRITE(PTR,SEQMSG); 00017800
|
|
LASTNO ~ SEQNO ; LENGTH ~ 0 ; 00017900
|
|
END SEQCHK ; 00018000
|
|
%***********************************************************************00018100
|
|
PROCEDURE EXCESSINFO; 00018200
|
|
COMMENT SKIPS CHARS OF FILE OR FIELDNAME > 7 OR > 24 RESPECTIVELY --- 00018300
|
|
PRO MOVEAPHRASE AND CODE ARE GLOBAL ; 00018400
|
|
BEGIN LABEL CODE8 ; 00018500
|
|
CODE8: IF CODE = 8 THEN BEGIN MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,8,1) ;00018600
|
|
GO TO CODE8 END; END EXCESSINFO ; 00018700
|
|
%***********************************************************************00018800
|
|
PROCEDURE WRITEINFO ; 00018900
|
|
COMMENT WRITES ERRORS OR GOOD CARD---- GLOBAL TO THIS IS PTR,ERR, 00019000
|
|
ERRORS,A ; 00019100
|
|
IF ERR > 0 THEN BEGIN WRITE (PTR,ERRORS[ERR]) ; SYNTAX ~ TRUE ; 00019200
|
|
SETARROW(A) ; 00019300
|
|
WRITE(PTR[NO],10,A[*]) ; WRITE (PTR,FT,IF CARDNAME = "LEAD " THEN 00019400
|
|
LASTNO ELSE SEQNO) ; 00019500
|
|
WRITE (PTR); ERR~0; END ELSE IF MON OR SYNTAX THEN BEGIN 00019600
|
|
WRITE(PTR[NO],10,A[*]) ; WRITE (PTR,FT,IF CARDNAME = "LEAD " THEN 00019700
|
|
LASTNO ELSE SEQNO) ; WRITE(PTR) END ; 00019800
|
|
COMMENT ENDOF WRITEINFO ; 00019900
|
|
%***********************************************************************00020000
|
|
BOOLEAN PROCEDURE PUTFIELDNAME ; 00020100
|
|
BEGIN REAL PONDFIELD ; LABEL EOPUTFIELDNAME ; 00020200
|
|
%***********************************************************************00020300
|
|
STREAM PROCEDURE DSFIELDNAME(JUNK,FIELDNAME) ; 00020400
|
|
BEGIN SI~JUNK; SI~SI+1;DI~FIELDNAME; DI~DI+17; DS~6 CHR END ; 00020500
|
|
%***********************************************************************00020600
|
|
IF JUNK[0].[42:6] ! " " OR JUNK[0].[6:6] =" " OR JUNK[0].[36:6] = " " 00020700
|
|
THEN BEGIN ERR ~ 22; GO TO EOPUTFIELDNAME END ; 00020800
|
|
IF NOT INTONLY(JUNK[0].[6:42],PONDFIELD) THEN BEGIN ERR~22; GO TO 00020900
|
|
EOPUTFIELDNAME END ; PUTFIELDNAME ~ TRUE ; 00021000
|
|
DSFIELDNAME (JUNK,FIELDNAME) ; 00021100
|
|
EOPUTFIELDNAME: END ; 00021200
|
|
%***********************************************************************00021300
|
|
00021400
|
|
PROCEDURE PLUGCARD ; COMMENT PLUGCARD CONSISTS OF PLUG AND FIELD-NAME 00021500
|
|
IN FREE-FIELD FORMAT (PLUG MUST BE IN COLS 1-4) . GLOBAL IS: 00021600
|
|
MOVEAPHRASE,SORTZIPPARPACKET,JUNK,LENGTH,AT,A,ERR,WRITEINFO,CRD,CODE, 00021700
|
|
SETARROW,GETFIELDNAME,PLUGIN, AND PLUGBOOL ; 00021800
|
|
BEGIN INTEGER I ; LABEL EOPLUG ; 00021900
|
|
READ(CRD,10,A[*]) ; SETARROW(A) ; 00022000
|
|
MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,18,0) ; 00022100
|
|
IF CODE = 2 THEN BEGIN ERR~23; GO TO EOPLUG END; 00022200
|
|
MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,16,0) ; 00022300
|
|
IF CODE = 2 THEN BEGIN ERR~23; GO TO EOPLUG END; 00022400
|
|
IF ITSPLUGGED(JUNK,PLUGNAMES,PLUGMAX+1, I) THEN 00022500
|
|
BEGIN PLUGBOOL[I] ~ PLUGIN ~ TRUE ; GO TO EOPLUG END ; 00022600
|
|
ERR ~ 24 ; 00022700
|
|
EOPLUG: WRITEINFO ; GO TO SORTZIPPARPACKET END PLUGCARD ; 00022800
|
|
%***********************************************************************00022900
|
|
PROCEDURE SKIPCARD; 00023000
|
|
COMMENT READS SKIPCARD AND SETS UP SKIP INFO; 00023100
|
|
BEGIN LABEL EOSKIP; 00023200
|
|
READ (CRD,10,A[*]); 00023300
|
|
SETARROW (A) ; 00023400
|
|
MOVEAPHRASE (A, JUNK, LENGTH, CODE, AT, 5, 0) ; 00023500
|
|
MOVEAPHRASE (A, SKIPNO, LENGTH, CODE, AT, 6, 2) ; 00023600
|
|
IF NOT INTONLY(SKIPNO, OCTSKIP) THEN BEGIN ERR ~ 27; GO TO EOSKIP END; 00023700
|
|
EOSKIP: WRITEINFO; GO TO SORTZIPPARPACKET 00023800
|
|
END OF SKIPCARD; 00023900
|
|
%***********************************************************************00024000
|
|
PROCEDURE RANGECARD ; BEGIN LABEL EORANGE ; 00024100
|
|
INTEGER PROCEDURE YRDAYTOJUL(I); 00024200
|
|
VALUE I; INTEGER I; 00024300
|
|
YRDAYTOJUL~ 365|(I DIV 1000 - 8) + (I DIV 1000 - 9) DIV 4 00024400
|
|
+ I MOD 1000 + 3; 00024500
|
|
READ(CRD,10,A[*]) ; SETARROW(A) ; 00024600
|
|
MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,18,0) ; 00024700
|
|
MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,18,0) ; 00024800
|
|
IF CODE = 2 THEN BEGIN ERR~25 ; GO TO EORANGE END ; 00024900
|
|
IF NOT INTONLY (JUNK[0], LOWRANGE ) THEN 00025000
|
|
BEGIN ERR~25; 00025100
|
|
GO TO EORANGE END; 00025200
|
|
MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,18,0) ; 00025300
|
|
IF CODE = 2 THEN BEGIN ERR~25 ; GO TO EORANGE END ; 00025400
|
|
IF NOT INTONLY (JUNK[0],HIGHRANGE ) THEN 00025500
|
|
BEGIN ERR~25; 00025600
|
|
GO TO EORANGE END; 00025700
|
|
LOWRANGE~YRDAYTOJUL(LOWRANGE); 00025800
|
|
RANGE ~ TRUE ; 00025900
|
|
EORANGE: WRITEINFO ; GO TO SORTZIPPARPACKET END RANGECARD ; 00026000
|
|
%***********************************************************************00026100
|
|
PROCEDURE LIMITCARD; 00026200
|
|
COMMENT READS LIMITCARD AND SET UP LIMIT INFO ; 00026300
|
|
BEGIN LABEL EOLIMIT; 00026400
|
|
READ (CRD,10, A[*]) ; 00026500
|
|
SETARROW(A) ; 00026600
|
|
MOVEAPHRASE(A, JUNK, LENGTH, CODE, AT, 5, 0) ; 00026700
|
|
MOVEAPHRASE(A, LIMITNO, LENGTH, CODE, AT, 6, 2); 00026800
|
|
IF NOT INTONLY(LIMITNO,OCTLIMIT) 00026900
|
|
THEN BEGIN ERR ~ 28; GO TO EOLIMIT END; 00027000
|
|
EOLIMIT: WRITEINFO; GO TO SORTZIPPARPACKET END OF LIMITCARD; 00027100
|
|
%***********************************************************************00027200
|
|
PROCEDURE ZIPCARD ; COMMENT ZIPCARD PROCESSES UP TO 3 ZIP CARDS 00027300
|
|
AND PASSES COLS 5-76 (9WDS) TO ZIPARRAY WHICH IS GLOBAL--- OTHER GLOBAL 00027400
|
|
ARE : SORTZIPPARPACKET,MOVEAPHRASE,JUNK,LENGTH,AT,ZIPNO,CRD,A,ERR, 00027500
|
|
WRITEINFO,CODE,SENDZIPORPAR,ZIPARRAY ; 00027600
|
|
BEGIN READ (CRD,10,A[*]) ; SETARROW(A) ; 00027700
|
|
IF ZIPNO > 10 THEN BEGIN 00027800
|
|
ERR ~ 6 ; WRITEINFO; GO TO SORTZIPPARPACKET END ; 00027900
|
|
SENDZIPORPAR(A,ZIPARRAY[(ZIPNO - 1)| 9] ); 00028000
|
|
WRITEINFO ; 00028100
|
|
GO TO SORTZIPPARPACKET END;00028200
|
|
%***********************************************************************00028300
|
|
PROCEDURE SORTCARD ; 00028400
|
|
COMMENT SHECKS ALL INFO ON SORT CARD AND SETS UP SORTARRAY; 00028500
|
|
BEGIN INTEGER Q,FIELDANDFILE; 00028600
|
|
LABEL EOSORT,EOD ; 00028700
|
|
%***********************************************************************00028800
|
|
INTEGER STREAM PROCEDURE ASCENDORDESCEND (JUNK) ; 00028900
|
|
COMMENT DETERMINES IF SORT IS ASCENDING OR DESCENDING ; 00029000
|
|
BEGIN LOCAL SEQUENCE,SEQUENCE2 ; 00029100
|
|
DI ~LOC SEQUENCE ; DS ~ 11 LIT "DESCENDING " ; 00029200
|
|
SI ~ JUNK ; DI ~ LOC SEQUENCE ; 00029300
|
|
IF 11 SC = DC THEN TALLY ~ 2 ELSE BEGIN DI ~LOC SEQUENCE; DS ~ 00029400
|
|
10 LIT "ASCENDING "; 00029500
|
|
SI ~JUNK ; DI ~LOC SEQUENCE ; IF 10 SC = DC THEN TALLY ~ 1 END ; 00029600
|
|
ASCENDORDESCEND ~ TALLY ; 00029700
|
|
END ASCENDORDESCEND ; 00029800
|
|
%***********************************************************************00029900
|
|
STREAM PROCEDURE SETUPSORTARRAY (FIELDNAME,SORTARRAY,Q) ; 00030000
|
|
VALUE Q ; 00030100
|
|
BEGIN 00030200
|
|
SI~FIELDNAME ; SI~SI+17 ; DI~SORTARRAY ; 00030300
|
|
DI ~ DI + 1 ; DS ~ 5 CHR ; SI ~ LOC Q ; SI ~ SI + 7 ; 00030400
|
|
IF SC = "1" THEN DS ~ 1 LIT "1" ELSE DS ~ LIT "0" ; 00030500
|
|
END SETUPSORTARRAY; 00030600
|
|
%***********************************************************************00030700
|
|
READ (CRD,10,A[*]) ; SETARROW(A) ; IF SORTNO > 99 THEN 00030800
|
|
BEGIN ERR ~ 8 ; WRITEINFO ; GO TO SORTZIPPARPACKET END ; 00030900
|
|
MOVEAPHRASE (A,JUNK,LENGTH,CODE,AT,18,0) ; 00031000
|
|
IF CODE = 2 THEN BEGIN ERR ~ 9 ; GO TO EOSORT END ; 00031100
|
|
MOVEAPHRASE ( A,JUNK,LENGTH,CODE,AT,11,0) ; 00031200
|
|
EXCESSINFO ; 00031300
|
|
IF CODE = 2 THEN BEGIN ERR ~ 9 ; GO TO EOSORT END ; 00031400
|
|
IF (Q ~ ASCENDORDESCEND (JUNK) ) = 0 THEN BEGIN 00031500
|
|
ERR ~10 ; GO TO EOSORT END ; 00031600
|
|
MOVEAPHRASE (A,JUNK,LENGTH,CODE,AT,16,0) ; 00031700
|
|
IF CODE = 2 THEN BEGIN ERR ~ 9 ; GO TO EOSORT END ; 00031800
|
|
IF POUNDORDOLLAR(JUNK) THEN IF NOT PUTFIELDNAME THEN GO TO EOSORT ELSE 00031900
|
|
BEGIN FIELDANDFILE ~ 2 ; GO TO EOD END ; 00032000
|
|
WHILE TRUE DO BEGIN 00032100
|
|
READ(DICTION,3,FIELDNAME[*]) [EOD] ; 00032200
|
|
IF GETFIELDNAME (JUNK,FIELDNAME) THEN BEGIN 00032300
|
|
FIELDANDFILE ~2; GO TO EOD END; END; 00032400
|
|
00032500
|
|
00032600
|
|
EOD: REWIND(DICTION) ; IF FIELDANDFILE =0 THEN BEGIN ERR~11; GO TO 00032700
|
|
EOSORT END; 00032800
|
|
00032900
|
|
SETUPSORTARRAY (FIELDNAME,SORTARRAY[SORTNO],Q); 00033000
|
|
EOSORT: WRITEINFO; GO TO SORTZIPPARPACKET ; 00033100
|
|
END SORTCARD ; 00033200
|
|
%***********************************************************************00033300
|
|
PROCEDURE IDCARD ; 00033400
|
|
COMMENT READS ID CARDS AND SETS UP ID INFO EXCEPT NUM OF IDS 00033500
|
|
AND NUM OF PACKETS ; 00033600
|
|
BEGIN INTEGER FIELDANDFILE ; 00033700
|
|
LABEL EOID,EOD ; 00033800
|
|
%***********************************************************************00033900
|
|
STREAM PROCEDURE SETSELECT1 (FIELDNAME,SELECTARRAY) ; 00034000
|
|
BEGIN SI~FIELDNAME ; SI~SI+17 ; DI~SELECTARRAY; DI~DI+1 ; 00034100
|
|
DS ~ 5 CHR ; DI ~DI + 1 ; 00034200
|
|
DS ~ CHR ; 00034300
|
|
END SETSELECT1 ; 00034400
|
|
%***********************************************************************00034500
|
|
STREAM PROCEDURE SETSELECT2 (SELECTARRAY,Q) ; VALUE Q ; 00034600
|
|
BEGIN SI ~LOC Q ; SI ~SI + 7 ; 00034700
|
|
DI ~SELECTARRAY ; DI ~ DI + 6 ; DS ~ CHR ; 00034800
|
|
END SETSELECT2 ; 00034900
|
|
%***********************************************************************00035000
|
|
STREAM PROCEDURE SETSELECT3 (AT,SELECTARRAY) ; VALUE AT; 00035100
|
|
BEGIN DI ~ SELECTARRAY ; DS ~ 16 LIT " " ; DI ~ DI - 16 ; 00035200
|
|
SI ~ AT ; SI ~ SI + 1 ; 00035300
|
|
16(IF SC ! "~" THEN DS ~ 1 CHR ELSE JUMP OUT) ; 00035400
|
|
END SETSELECT3 ; 00035500
|
|
%***********************************************************************00035600
|
|
READ (CRD,10,A[*]) ; SETARROW(A) ; 00035700
|
|
IF IDPOS > 496 THEN BEGIN 00035800
|
|
WRITE (PTR,TOOMANYIDS) ; GO TO EOJ END ; 00035900
|
|
MOVEAPHRASE (A,JUNK,LENGTH,CODE,AT, 3,0) ; 00036000
|
|
MOVEAPHRASE (A,JUNK,LENGTH,CODE,AT,24,0) ; 00036100
|
|
IF CODE = 2 THEN BEGIN ERR ~ 14 ; GO TO EOID END ; 00036200
|
|
IF POUNDORDOLLAR(JUNK) THEN IF NOT PUTFIELDNAME THEN GO TO EOID ELSE 00036300
|
|
BEGIN FIELDANDFILE ~ 2 ; GO TO EOD END ; 00036400
|
|
WHILE TRUE DO BEGIN 00036500
|
|
READ(DICTION,3,FIELDNAME[*]) [EOD] ; 00036600
|
|
IF GETFIELDNAME (JUNK,FIELDNAME) THEN BEGIN 00036700
|
|
FIELDANDFILE ~ 2; GO TO EOD END END; 00036800
|
|
00036900
|
|
00037000
|
|
00037100
|
|
EOD: REWIND(DICTION) ; IF FIELDANDFILE =0 THEN BEGIN ERR~11; GO TO 00037200
|
|
EOID END; 00037300
|
|
IDPOS ~ IDPOS + 1 ; 00037400
|
|
SETSELECT1(FIELDNAME[0], SELECTARRAY[IDPOS]); 00037500
|
|
EXCESSINFO ; 00037600
|
|
IF CODE = 2 THEN BEGIN ERR ~ 14 ; GO TO EOID END ; 00037700
|
|
IF CODE = 4 THEN BEGIN ERR ~ 15 ; GO TO EOID END ; 00037800
|
|
MOVEAPHRASE (A,JUNA,LENGTH,CODE,AT,2,6) ; 00037900
|
|
IF JUNA[0] = "= " THEN Q ~ 0 ELSE Q ~ 7 ; 00038000
|
|
IF JUNA [0] = "! " THEN Q ~ 1 ; 00038100
|
|
IF JUNA [0] = "> " THEN Q ~ 2 ; 00038200
|
|
IF JUNA [0] = "} " THEN Q ~ 3 ; 00038300
|
|
IF JUNA [0] = "< " THEN Q ~ 4 ; 00038400
|
|
IF JUNA [0] = "{ " THEN Q ~ 5 ; 00038500
|
|
IF JUNA [0] = "AN" THEN Q ~ 6 ; 00038600
|
|
IF Q = 7 THEN BEGIN ERR~16; GO TO EOID END; 00038700
|
|
SETSELECT2 (SELECTARRAY[IDPOS], Q); 00038800
|
|
IDPOS ~ IDPOS + 1 ; 00038900
|
|
SETSELECT3(AT, SELECTARRAY[IDPOS]); 00039000
|
|
IDPOS ~ IDPOS + 1 ; 00039100
|
|
EOID: WRITEINFO; GO TO IDORACTION ; 00039200
|
|
END IDCARD ; 00039300
|
|
%***********************************************************************00039400
|
|
PROCEDURE ACTCARD ; 00039500
|
|
BEGIN INTEGER FIELDANDFILE ; LABEL EOACT,EOD; 00039600
|
|
%***********************************************************************00039700
|
|
STREAM PROCEDURE ACTIONINFO(AT,ACTIONARRAY,FIELDNAME); VALUE AT; 00039800
|
|
BEGIN LOCAL X,Y; LABEL STRIP; SI~AT; SI~SI+1; 00039900
|
|
DI ~ ACTIONARRAY; DS ~ 48 LIT " " ; DI ~ DI - 48; 00040000
|
|
X~DI; DI~LOC Y; DS~6 LIT"STRIP "; DI ~ DI -6 ; 00040100
|
|
IF 6 SC =DC THEN BEGIN DI~ 00040200
|
|
FIELDNAME; DI~DI+6; DS~1 LIT"1"; GO TO STRIP; END ELSE BEGIN DI~ 00040300
|
|
FIELDNAME; DI~DI+6;DS~1 LIT"0" END; SI~SI-6; DI~X; 00040400
|
|
48 ( IF SC ! "~" THEN DS ~ 1 CHR ELSE JUMP OUT) ; 00040500
|
|
STRIP: 00040600
|
|
END ACTIONINFO ; 00040700
|
|
%***********************************************************************00040800
|
|
STREAM PROCEDURE NUMINFO(ACTIONARRAY,FIELDNAME) ; BEGIN 00040900
|
|
SI ~ FIELDNAME; DI ~ ACTIONARRAY; DS ~ 1 WDS; END NUMINFO ; 00041000
|
|
%***********************************************************************00041100
|
|
READ (CRD,10,A[*]) [EOF] ; SETARROW(A) ; 00041200
|
|
IF ACTNO > 35 THEN BEGIN WRITE(PTR,TOOMANYACTIONS); GO TO EOJ END ; 00041300
|
|
MOVEAPHRASE (A,JUNK,LENGTH,CODE,AT,24,0) ; 00041400
|
|
IF CODE =2 THEN BEGIN ERR ~18 ; GO TO EOACT END ; 00041500
|
|
MOVEAPHRASE (A,JUNK,LENGTH,CODE,AT,24,0) ; 00041600
|
|
IF CODE =2 THEN BEGIN ERR ~18 ; GO TO EOACT END ; 00041700
|
|
IF POUNDORDOLLAR(JUNK) THEN IF NOT PUTFIELDNAME THEN GO TO EOACT ELSE 00041800
|
|
BEGIN FIELDANDFILE ~ 2;GO TO EOD END ; 00041900
|
|
WHILE TRUE DO BEGIN 00042000
|
|
READ(DICTION,3,FIELDNAME[*]) [EOD] ; 00042100
|
|
IF GETFIELDNAME(JUNK,FIELDNAME) THEN BEGIN FIELDANDFILE ~2; GO TO EOD 00042200
|
|
END END ; 00042300
|
|
00042400
|
|
EOD: REWIND(DICTION) ; IF FIELDANDFILE =0 THEN BEGIN ERR~11; GO TO 00042500
|
|
EOACT END ; 00042600
|
|
00042700
|
|
00042800
|
|
00042900
|
|
00043000
|
|
00043100
|
|
00043200
|
|
EXCESSINFO ; IF CODE = 2 THEN BEGIN 00043300
|
|
ERR ~ 18 ; GO TO EOACT END ; 00043400
|
|
IF LENGTH > 38 THEN BEGIN ERR ~ 19 ; GO TO EOACT END ; 00043500
|
|
Q ~ 7 | ACTNO - 5 ; 00043600
|
|
ACTIONINFO(AT,ACTIONARRAY[PACKETNO,Q],FIELDNAME[2]) ; 00043700
|
|
Q~7|ACTNO-6; BEGIN NUMINFO(ACTIONARRAY[ 00043800
|
|
PACKETNO,Q],FIELDNAME[2]) ; ACTION[PACKETNO] ~ TRUE; IF ACTNO >ACTIONMAX00043900
|
|
THEN ACTIONMAX~ACTNO; CONV(ACTNO,ALPHACT) ; 00044000
|
|
ACTIONARRAY[PACKETNO,0] ~ALPHACT END; 00044100
|
|
EOACT: WRITEINFO ; 00044200
|
|
END ACTIONCARD ; 00044300
|
|
%***********************************************************************00044400
|
|
PROCEDURE MOVECARD ; BEGIN INTEGER FIELDANDFILE; BOOLEAN TWOTIMES; 00044500
|
|
BOOLEAN DC ; 00044600
|
|
LABEL EOD,EOMOVE,DOTWICE ; 00044700
|
|
%***********************************************************************00044800
|
|
STREAM PROCEDURE NUMINFO(ACTIONARRAY,FIELDNAME) ; BEGIN 00044900
|
|
SI ~ FIELDNAME; DI ~ ACTIONARRAY; DS~ 1 LIT"1" ; SI~SI +1 ; DS~2 CHR;00045000
|
|
DI~DI+3; DS ~3 CHR END; 00045100
|
|
%***********************************************************************00045200
|
|
STREAM PROCEDURE NUMINFO3(ACTIONARRAY,FIELDNAME) ; BEGIN 00045300
|
|
SI ~ FIELDNAME ; DI ~ ACTIONARRAY; DS~ 1 LIT"2" ; SI~SI+1; DS~2 CHR; 00045400
|
|
DI~DI+3; DS ~ 3 CHR END ; 00045500
|
|
%***********************************************************************00045600
|
|
STREAM PROCEDURE NUMINFO2 (ACTIONARRAY,FIELDNAME) ; BEGIN 00045700
|
|
SI ~ FIELDNAME ; DI ~ ACTIONARRAY; SI ~SI+1; DI ~DI+1; 00045800
|
|
IF 2 SC < DC THEN BEGIN SI ~ SI-2; DI~DI-2; DS~2 CHR END; DS~3 CHR END;00045900
|
|
%***********************************************************************00046000
|
|
READ(CRD,10,A[*]) [EOF] ; SETARROW(A) ; 00046100
|
|
IF ACTNO > 17 THEN BEGIN WRITE(PTR,TOOMANYACTIONS) ;GO TO EOJ END;00046200
|
|
MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,24,0) ; 00046300
|
|
IF CODE = 2 THEN BEGIN ERR~20; GO TO EOMOVE END; 00046400
|
|
DOTWICE: MOVEAPHRASE(A,JUNK,LENGTH,CODE,AT,24,0) ; 00046500
|
|
IF CODE = 2 THEN BEGIN ERR~20; GO TO EOMOVE END ; 00046600
|
|
IF POUNDORDOLLAR(JUNK) THEN IF NOT PUTFIELDNAME THEN GO TO EOMOVE ELSE 00046700
|
|
BEGIN FIELDANDFILE ~ 2 ; GO TO EOD END ; 00046800
|
|
WHILE TRUE DO BEGIN READ(DICTION,3,FIELDNAME[*]) [EOD] 00046900
|
|
; IF GETFIELDNAME(JUNK,FIELDNAME) THEN BEGIN FIELDANDFILE~2; GO TO EOD 00047000
|
|
END END ; 00047100
|
|
EOD: REWIND(DICTION) ; IF FIELDANDFILE =0 THEN BEGIN ERR~11; GO TO 00047200
|
|
EOMOVE 00047300
|
|
END ; IF NOT TWOTIMES THEN BEGIN EXCESSINFO; IF CODE = 2 THEN 00047400
|
|
BEGIN ERR~20; GO TO EOMOVE END END; 00047500
|
|
Q~ 7 |ACTNO-6 ; IF NOT SYNTAX AND NOT TWOTIMES THEN BEGIN 00047600
|
|
IF DC THEN NUMINFO3(ACTIONARRAY[PACKETNO,Q],FIELDNAME[2]) ELSE 00047700
|
|
NUMINFO(ACTIONARRAY[PACKETNO,Q],FIELDNAME[2]) ; ACTION[PACKETNO]~TRUE ; 00047800
|
|
IF ACTNO > ACTIONMAX THEN ACTIONMAX ~ACTNO ; CONV(ACTNO,ALPHACT) ; 00047900
|
|
ACTIONARRAY[PACKETNO,0]~ALPHACT END ; 00048000
|
|
IF NOT TWOTIMES THEN BEGIN TWOTIMES~TRUE; MOVEAPHRASE(A,JUNA,LENGTH, 00048100
|
|
CODE,AT,3,5); IF JUNA[0] ! "TO " AND JUNA[0] ! "DC " THEN BEGIN ERR~21; 00048200
|
|
GO TO EOMOVE END ; IF JUNA[0] = "DC " THEN DC ~ TRUE ; 00048300
|
|
GO TO DOTWICE END; NUMINFO2(ACTIONARRAY[ 00048400
|
|
PACKETNO,Q],FIELDNAME[2]) ; EOMOVE: WRITEINFO; END MOVECARD; 00048500
|
|
%***********************************************************************00048600
|
|
COMMENT MAINPRO ; 00048700
|
|
FILL PLUGNAMES[*] WITH 00048800
|
|
0; 00048900
|
|
IF MON OR SYNTAX THEN 00049000
|
|
WRITE(PTR,HEADING) ; 00049100
|
|
READ (CRD[NO],LEADFT,CARDNAME,LASTNO) [NOCARDS] ; 00049200
|
|
IF CARDNAME ! "LEAD " THEN BEGIN WRITE (PTR,BADISTCD) ; GO TO EOJ END; 00049300
|
|
READ (CRD,10,A[*]) ; 00049400
|
|
SETARROW (A) ; 00049500
|
|
MOVEAPHRASE (A,JUNK,LENGTH,CODE,AT,5,0) ; 00049600
|
|
MOVEAPHRASE (A,FILENAME,LENGTH,CODE,AT,8,1) ; 00049700
|
|
EXCESSINFO; 00049800
|
|
IF CODE = 2 THEN BEGIN WRITE(PTR,NOTNUFLEAD) ; GO TO EOJ END ; 00049900
|
|
IF CODE = 4 THEN BEGIN ERR ~5; GO TO EOLEAD END ; 00050000
|
|
00050100
|
|
IF FILENAME[0] ! "DUMMY " THEN FILL DICTION WITH FILENAME[0],* ; 00050200
|
|
SELECTOPT:=TRUE; %JF 00050300
|
|
00050400
|
|
00050500
|
|
00050600
|
|
00050700
|
|
00050800
|
|
00050900
|
|
00051000
|
|
00051100
|
|
00051200
|
|
00051300
|
|
00051400
|
|
FOR I ~ 0,1 DO BEGIN 00051500
|
|
MOVEAPHRASE(A,BLOCKING[I,*],LENGTH,CODE,AT,6,2) ; 00051600
|
|
IF CODE = 8 THEN BEGIN ERR~ 2 ; GO TO EOLEAD END ; 00051700
|
|
IF CODE = 2 THEN BEGIN WRITE (PTR,NOTNUFLEAD);GO TO EOJ END ; 00051800
|
|
IF NOT INTONLY (BLOCKING[I,0],OCTWDS[I]) THEN BEGIN ERR~3; GO TO EOLEAD 00051900
|
|
END END ; 00052000
|
|
MOVEAPHRASE(A,BLOCKING[2,*],LENGTH,CODE,AT,6,2) ; IF CODE = 2 THEN 00052100
|
|
GO TO EOLEAD ; IF INTONLY(BLOCKING[2,0],OCTWDS[2]) THEN BEGIN 00052200
|
|
IF CODE = 8 THEN BEGIN ERR~2 ; GO TO EOLEAD END ; 00052300
|
|
MOVEAPHRASE(A,BLOCKING[3,*],LENGTH,CODE,AT,6,2); 00052400
|
|
IF CODE = 2 THEN BEGIN ERR~ 3; GO TO EOLEAD END ; 00052500
|
|
IF CODE = 8 THEN BEGIN ERR~2 ;GO TO EOLEAD END ; 00052600
|
|
IF NOT INTONLY(BLOCKING[3,0],OCTWDS[3]) THEN BEGIN ERR~3; GO TO EOLEAD 00052700
|
|
END ; MOVEAPHRASE(A,BLOCKING[2,*], LENGTH,CODE,AT,6,2) ; 00052800
|
|
IF CODE = 2 THEN GO TO EOLEAD END ; JUNA[0] ~ BLOCKING[2,0]; 00052900
|
|
OPTNSCAN: %JPA00053000
|
|
IF JUNA[0] = "SYNTAX" THEN SYNTAX ~ TRUE %JPA00053100
|
|
ELSE IF JUNA[0] = "MON " THEN MON ~ TRUE %JPA00053200
|
|
ELSE IF JUNA[0] = "COUNT " THEN MUSTCOUNT ~ TRUE %JPA00053300
|
|
ELSE IF JUNA[0] = "SELECT" THEN SELECTOPT ~ TRUE %JPA00053400
|
|
ELSE IF JUNA[0] = "MAINTA" THEN SELECTOPT ~ FALSE %JPA00053500
|
|
ELSE IF JUNA[0] = "TRACE " THEN TRACEOPT ~ TRUE %JPA00053600
|
|
ELSE IF JUNA[0] = "EXPLOD" THEN %JPA00053700
|
|
BEGIN %JPA00053800
|
|
SELECTOPT ~ FALSE; %JPA00053900
|
|
EXPLODOPT ~ TRUE; %JPA00054000
|
|
END %JPA00054100
|
|
ELSE %JPA00054200
|
|
BEGIN %JPA00054300
|
|
ERR ~ 26; %JPA00054400
|
|
GO TO EOLEAD; %JPA00054500
|
|
END; %JPA00054600
|
|
MOVEAPHRASE (A,JUNA,LENGTH,CODE,AT,6,2); %JPA00054700
|
|
IF CODE ! 2 THEN GO TO OPTNSCAN; %JPA00054800
|
|
% 50300 THRU 50660 ARE CHANGES TO ALLOW NEW OPTIONS TO BE %JPA00054900
|
|
% SCANNED FOR MULTIPLE HITS ON RECORDS %JPA00055000
|
|
EOLEAD: WRITEINFO; 00055100
|
|
IDPOS ~ 1 ; POS ~ 1 ; 00055200
|
|
SORTZIPPARPACKET: 00055300
|
|
READ (CRD[NO],TYPEFT2 00055400
|
|
,CARDNAME,SEQNO) [EOF] ; 00055500
|
|
SEQCHK; 00055600
|
|
WHATCARD: 00055700
|
|
IF CARDNAME = "ZIP" THEN BEGIN ZIPNO~ZIPNO + 1; ZIPCARD END ; 00055800
|
|
IF CARDNAME = "PLU" THEN PLUGCARD ; 00055900
|
|
IF CARDNAME = "RAN" THEN RANGECARD ; 00056000
|
|
IF CARDNAME = "PAR" THEN BEGIN READ(CRD,10,A[*]) ; WRITE(PTR,10,A[*])00056100
|
|
; WRITE (PTR) ; 00056200
|
|
BEGIN SAVE FILE OUT SUPCARD DISK SERIAL [20:50] (2,10,150,SAVE 5) ; 00056300
|
|
PARAMS ~ 0 ; 00056400
|
|
WHILE TRUE DO BEGIN READ(CRD,10,A[*]) [EOF] ; 00056500
|
|
IF MON THEN WRITE (PTR, 10, A[*]) ; 00056600
|
|
IF NOT SYNTAX THEN WRITE(SUPCARD,10,A[*]) END END END ; 00056700
|
|
IF CARDNAME = "SKI" THEN SKIPCARD; 00056800
|
|
IF CARDNAME = "LIM" THEN LIMITCARD; 00056900
|
|
IF CARDNAME = "SOR" THEN BEGIN SORTNO~ SORTNO+ 1 ; SORTCARD END; 00057000
|
|
IF CARDNAME ! "PAC" THEN BEGIN 00057100
|
|
IF SWI = 1 THEN BEGIN ERR~ 13; SWI ~ 0; END ELSE ERR ~ 4 ; 00057200
|
|
READ (CRD,10,A[*]) ; WRITEINFO; GO TO SORTZIPPARPACKET END ; 00057300
|
|
PACKETNO ~ PACKETNO + 1 ; IDNO ~ 0 ; ACTNO ~ 0 ; 00057400
|
|
SWITC ~ FALSE ; FIRST := 1; 00057500
|
|
IF PACKETNO > PACKETMAX 00057600
|
|
THEN BEGIN WRITE (PTR,TOOMANYPACKETS) ; 00057700
|
|
GO TO EOJ END ; 00057800
|
|
READ (CRD,10,A[*]) ; SETARROW(A) ; WRITEINFO ; 00057900
|
|
IDORACTION: 00058000
|
|
READ(CRD[NO],TYPEFT2,CARDNAME,SEQNO) [EOF] ; SEQCHK ; 00058100
|
|
IF CARDNAME = "ID " THEN BEGIN IDNO ~ IDNO + 1; IDCARD END; 00058200
|
|
COMMENT AFTER ID CARD PRO WILL GO TO IDORACTION; 00058300
|
|
ACTIONCARD:IF CARDNAME = "ACT" OR CARDNAME = "MOV" THEN BEGIN 00058400
|
|
ACTNO ~ ACTNO + 1 ; ACTCOUNT := ACTCOUNT + 1 ; 00058500
|
|
IF FIRST = 1 THEN BEGIN CONV(IDNO,ALPHID); 00058510
|
|
SELECTARRAY[POS] := ALPHID; FIRST := 0; END; 00058520
|
|
IF NOT SWITC THEN BEGIN IDPOS:= POS := IDPOS + 1; 00058600
|
|
SWITC := TRUE END; 00058700
|
|
IF CARDNAME = "ACT" THEN ACTCARD ELSE MOVECARD; END ELSE 00058900
|
|
BEGIN IF ACTNO = 0 THEN BEGIN 00059000
|
|
CONV(IDNO,ALPHID); SELECTARRAY[POS] := ALPHID; 00059200
|
|
IDPOS ~ POS ~ IDPOS + 1 END ; SWI ~1 ; GO TO WHATCARD END ; 00059300
|
|
READ (CRD[NO],TYPEFT2,CARDNAME,SEQNO) [EOF] ; SEQCHK; 00059400
|
|
GO TO ACTIONCARD ; 00059500
|
|
NOCARDS: WRITE(PTR,NUTTIN) ; GO TO EOJ ; 00059600
|
|
EOF: 00059700
|
|
IF CARDNAME = "ID " THEN BEGIN 00059800
|
|
CONV(IDNO,ALPHID) ; 00059900
|
|
SELECTARRAY[POS] ~ ALPHID ; 00060000
|
|
END ; 00060100
|
|
IF ACTCOUNT = 0 THEN IF TRACEOPT THEN BEGIN 00060110
|
|
ERR := 29; WRITEINFO; GO TO EOJ END; 00060200
|
|
PACKETS := PACKETNO; 00060210
|
|
CONV (PACKETNO,ALPHPACKET); 00060300
|
|
SELECTARRAY[0] ~ ALPHPACKET ; 00060400
|
|
SORTKEYS ~ SORTNO ; 00060500
|
|
CONV(SORTNO,ALPHSORT) ; SORTARRAY[0] ~ ALPHSORT ; 00060600
|
|
SELECTSIZE ~ IDPOS ; INSIZE ~ OCTWDS [0]; 00060700
|
|
INBLOCK ~ OCTWDS [1] ; 00060800
|
|
IF OCTWDS [2] = 0 THEN OUTSIZE ~ INSIZE ELSE OUTSIZE ~ OCTWDS[2]; 00060900
|
|
IF OCTWDS[3] = 0 THEN OUTBLOCK ~ INBLOCK ELSE OUTBLOCK ~OCTWDS [3] ; 00061000
|
|
SKIPNUM ~ OCTSKIP; 00061100
|
|
LIMITNUM := OCTLIMIT; 00061110
|
|
ACTIONMAX ~ ACTIONMAX|7 +1; 00061200
|
|
00061300
|
|
IF MON OR SYNTAX THEN 00061400
|
|
BEGIN INTEGER H; FORMAT FT1(A6), FT2(A1,A6) ; 00061500
|
|
FORMAT RF("RANGE IS ", I6, " TO ", I6); 00061600
|
|
IF RANGE THEN WRITE (PTR,RF,LOWRANGE,HIGHRANGE); 00061700
|
|
00061800
|
|
00061900
|
|
WRITE (PTR,FT1,"SELECT") ; 00062000
|
|
WRITE(PTR,15,SELECTARRAY[*]) ; 00062100
|
|
WRITE(PTR,FT1,"SORT ") ; 00062200
|
|
WRITE(PTR,15,SORTARRAY[*]) ; 00062300
|
|
00062400
|
|
FOR H ~ 1 STEP 1 UNTIL PACKETNO DO WRITE(PTR,15,ACTIONARRAY[H,*]) ; 00062500
|
|
WRITE(PTR,FT1,"ZIP ") ; WRITE(PTR,15,ZIPARRAY[*]) ; 00062600
|
|
00062700
|
|
00062800
|
|
END; 00062900
|
|
IF PACKETNO ! 0 THEN SELECTS ~ TRUE ELSE PACKETS ~ 1; 00063000
|
|
FOR H~1 STEP 1 UNTIL PACKETS DO MUSTACT~MUSTACT OR ACTION[H]; 00063100
|
|
FOR H~0 STEP 1 UNTIL PLUGMAX DO IF PLUGBOOL[H] THEN HIGHPLUG~H; 00063200
|
|
00063300
|
|
00063400
|
|
00063500
|
|
00063600
|
|
IF ZIPNO !0 THEN ZIPS ~ TRUE ; 00063700
|
|
IF SORTNO ! 0 THEN MUSTSORT ~ TRUE ; 00063800
|
|
IF SYNTAX THEN GO TO EOJ; 00063900
|
|
RECSIZE~MAX(INSIZE,OUTSIZE); 00064000
|
|
CLOSE (PTR, RELEASE); 00064100
|
|
SELECTSIZE~SELECTSIZE+1; 00064200
|
|
IF RANGE OR PLUGIN THEN SELECTS~TRUE; 00064300
|
|
END ; 00064400
|
|
%-----------------------------------------------------------------------00064500
|
|
%-----------------------------------------------------------------------00064600
|
|
%-----------------------------------------------------------------------00064700
|
|
BEGIN 00064800
|
|
FILE IN INMESS DISK SERIAL (2,INSIZE, INBLOCK); 00064900
|
|
SAVE 00065000
|
|
FILE OUT OUTMESS DISK SERIAL [20:2000](2,OUTSIZE,OUTBLOCK,SAVE 3); 00065100
|
|
FILE OUT PTR 18 (2,15); %JPA00065200
|
|
ARRAY HITS [0:PACKETS+1], SAVEREC [0:INSIZE]; %JPA00065300
|
|
INTEGER NEXTHIT; %JPA00065400
|
|
ARRAY RECORD [0: RECSIZE + 4], 00065500
|
|
SORTAR [0:SORTKEYS], SELECTAR [0: SELECTSIZE-1], 00065600
|
|
ACTIONAR[1:PACKETS, 0:ACTIONMAX]; 00065700
|
|
BOOLEAN ARRAY ACTIONS [1: PACKETS] ; 00065800
|
|
INTEGER I; 00066000
|
|
LABEL EOF ; 00066100
|
|
%-----------------------------------------------------------------------00066200
|
|
STREAM PROCEDURE MOVEMANYWORDS (NOM, SOURCE, DEST ); 00066300
|
|
VALUE NOM; 00066400
|
|
BEGIN LOCAL S; 00066500
|
|
SI~ LOC NOM; SI~SI + 6; DI~ LOC S; DI~ DI + 7; DS~ CHR; 00066600
|
|
SI~ SOURCE; DI ~ DEST; 00066700
|
|
S ( DS~ 32 WDS; DS~ 32 WDS); 00066800
|
|
DS ~ NOM WDS; 00066900
|
|
END MOVEMANYWORDS; 00067000
|
|
%-----------------------------------------------------------------------00067100
|
|
PROCEDURE PRINREC (LEN,RECRD,COPY); %JPA00067200
|
|
VALUE LEN,COPY; INTEGER LEN,COPY; ARRAY RECRD[0]; %JPA00067300
|
|
BEGIN %JPA00067400
|
|
INTEGER I,L,L2 ; ARRAY B[0:15]; 00067500
|
|
STREAM PROCEDURE DOTEQLS (SIZE,ORIG,COPY); 00067600
|
|
VALUE SIZE; 00067700
|
|
BEGIN 00067800
|
|
SI~ORIG; DI~COPY; 00067900
|
|
SIZE (8( IF SC= DC THEN BEGIN DI~DI-1; DS~LIT "."; END )); 00068000
|
|
END; 00068100
|
|
I~0; 00068200
|
|
IF COPY = 0 THEN WRITE (PTR[DBL]); 00068300
|
|
WHILE LEN> 0 DO 00068400
|
|
BEGIN 00068500
|
|
IF LEN { 15 THEN L~ LEN ELSE L~ 15; 00068600
|
|
MOVEMANYWORDS (L, RECRD[I],B); %JPA00068700
|
|
IF ( I + L > INSIZE) THEN L2 ~ INSIZE - I ELSE L2 ~ L; 00068800
|
|
IF L2 { 15 THEN 00068900
|
|
IF COPY = 1 THEN DOTEQLS (L2,SAVEREC[I],B ); 00069000
|
|
WRITE (PTR,L,B[*]); %JPA00069100
|
|
I~I+L; %JPA00069200
|
|
LEN ~ LEN - L; 00069300
|
|
SELECTOPT:=TRUE; %JF 00069400
|
|
END; %JPA00069500
|
|
END PRINREC; %JPA00069600
|
|
%-----------------------------------------------------------------------00069700
|
|
BOOLEAN PROCEDURE RANGECASE(RECORD); 00069800
|
|
ARRAY RECORD LB 0 RB ; 00069900
|
|
BEGIN 00070000
|
|
INTEGER STARTS, ENDS, ALT, SHOWINGS; 00070100
|
|
INTEGER PROCEDURE YRDAYTOJUL(I); 00070200
|
|
VALUE I; INTEGER I; 00070300
|
|
YRDAYTOJUL~ 365|(I DIV 1000 - 8) + (I DIV 1000 - 9) DIV 4 00070400
|
|
+ I MOD 1000 + 3; 00070500
|
|
STREAM PROCEDURE WRITESHOWINGS( RECORD, I); 00070600
|
|
VALUE I; 00070700
|
|
BEGIN SI~LOC I;DI~RECORD;DI~DI+60;DI~DI+54; DS~2 DEC;END; 00070800
|
|
STREAM PROCEDURE STARTSENDSALT (RECORD,STARTS,ENDS, ALT); 00070900
|
|
BEGIN SI~RECORD; SI~SI+27; DI~STARTS; DS~5 OCT; 00071000
|
|
DI~ENDS; DS~ 5 OCT; SI~ SI+10; DI~ALT; DS~OCT; 00071100
|
|
END; 00071200
|
|
STARTSENDSALT (RECORD,STARTS,ENDS,ALT); 00071300
|
|
IF ALT {0 THEN ELSE 00071400
|
|
BEGIN 00071500
|
|
STARTS~YRDAYTOJUL(STARTS); 00071600
|
|
WHILE STARTS < LOWRANGE DO STARTS~STARTS+ALT|7; 00071700
|
|
ENDS~YRDAYTOJUL(MIN(HIGHRANGE,ENDS)); 00071800
|
|
IF STARTS>ENDS THEN ELSE 00071900
|
|
SHOWINGS~(ENDS-STARTS) DIV (7|ALT) + 1; 00072000
|
|
IF SHOWINGS ! 0 THEN 00072100
|
|
BEGIN RANGECASE~TRUE;WRITESHOWINGS(RECORD,SHOWINGS);END; 00072200
|
|
END; 00072300
|
|
END; 00072400
|
|
%-----------------------------------------------------------------------00072500
|
|
INTEGER STREAM PROCEDURE SELECTOR (ARR1,RECORD,HITS); %JPA00072600
|
|
COMMENT SELECTOR TESTS THE ARRAY "RECORD" TO SEE IF IT QUALIFIES 00072700
|
|
UNDER THE CRITERIA DEFINED BY ARRAY "ARR1". "ARR1" IS DESCRIBED 00072800
|
|
BELOW USING A MODIFIED COBOL NOTATION. 00072900
|
|
IF RECORD QUALIFIES, SELECTOR IS SET TO THE NUMBER OF THE 00073000
|
|
LAST PACKET UNDERWHICH IT QUALIFIED. IF QUALIFIED ON MORE THAN %JPA00073100
|
|
ONE PACKET THEN THE NUMBER OF EACH PACKET QUALIFIED ON IS IN %JPA00073200
|
|
HITS[1] THRU HITS[N] WHERE N IS THE NUMBER OF QUALIFICATIONS %JPA00073300
|
|
HITS[N&1] WILL BE ZERO. IF HITS [0] NEGATIVE THEN FIRST %JPA00073400
|
|
QUALIFICATION WILL CAUSE EXIT FROM ROUTINE. %JPA00073500
|
|
01 ARR1. 00073600
|
|
02 FILLER SZ 6. 00073700
|
|
02 PACKETS PC 99. 00073800
|
|
02 PACKET OC PACKETS TIMES. 00073900
|
|
02.5 FILLER SZ 6. 00074000
|
|
02.5 IDS PC 99. 00074100
|
|
02.5 ID SZ 24 OC IDS TIMES. 00074200
|
|
03 FILLER PC 9. 00074300
|
|
03 NUM PC 99. (NUM IS THE NUMBER OF CHARACTERS INVOLVED IN THE TEST)00074400
|
|
03 WHERE PC 999. (THE CHARACTER POSITION FROM WHICH TO BEGIN COMP)00074500
|
|
03 HOW PC 9. (DESCRIBES THE RELATIONAL OPERATOR FOR THE COMPARE) 00074600
|
|
88 EQ (=) VA 0. 00074700
|
|
88 NEQ (!) VA 1. 00074800
|
|
88 GR (>) VA 2. 00074900
|
|
88 GREQ (}) VA 3. 00075000
|
|
88 LS (<) VA 4. 00075100
|
|
88 LSEQ ({) VA 5. 00075200
|
|
88 AN (ALPHANUMERIC) VA 6. 00075300
|
|
03 STRIP PC 9. (SHOULD FIELD IN RECORD BE TREATED AS NUMERIC) 00075400
|
|
88 YES VA 1. 00075500
|
|
03 DATA-TO-COMPARE-ON SZ NUM. 00075600
|
|
03 FILLER SZ 16 - NUM. 00075700
|
|
END COMMENT; 00075800
|
|
BEGIN 00075900
|
|
LOCAL NOM, WHERE1, WHERE2, WHERE3, HOW, A, B, X, C, Y, UPTO, 00076000
|
|
HITINDR, %JPA00076100
|
|
ORUPTO, IDS, PACKETS; 00076200
|
|
LABEL EQ, NEQ, GR, GREQ, LS, LSEQ, AN, PASSED, EX; 00076300
|
|
DI~HITS; DI~DI+8; HITINDR~DI; DS~8 LIT "0"; %JPA00076400
|
|
SI ~ ARR1; SI~ SI + 6; DI~LOC PACKETS; DS~ 2 OCT; 00076500
|
|
PACKETS ( SI ~ SI + 6; DI ~ LOC IDS; DS ~ 2 OCT; 00076600
|
|
TALLY ~ TALLY +1; 00076700
|
|
UPTO ~SI; ORUPTO~SI; 00076800
|
|
IDS( SI~UPTO; SI~SI+1; 00076900
|
|
DI~LOC NOM; DS~ 2 OCT; 00077000
|
|
DI ~ LOC WHERE1 ; DS ~ OCT; 00077100
|
|
DI ~ LOC WHERE2 ; DS ~ OCT; 00077200
|
|
DI ~ LOC WHERE3 ; DS ~ OCT; 00077300
|
|
DI~LOC HOW; DS~ OCT; 00077400
|
|
A~SI; 00077500
|
|
SI~RECORD; 00077600
|
|
WHERE1 (SI~SI+50; SI~SI+50); 00077700
|
|
WHERE2 (SI~ SI+10); 00077800
|
|
SI~ SI+ WHERE3; 00077900
|
|
B~SI; DI~LOC C; SI~A; 00078000
|
|
IF SC = "1" THEN BEGIN SI~B; DS~NOM NUM END 00078100
|
|
ELSE BEGIN SI~B; DS ~ NOM CHR END; 00078200
|
|
SI~LOC C; DI~UPTO; DI~ DI+8; 00078300
|
|
CI~ CI+HOW; 00078400
|
|
GO TO EQ;GO TO NEQ;GO TO GR; GO TO GREQ; GO TO LS;GO TO LSEQ;GO TO AN; 00078500
|
|
EQ:IF NOM SC = DC THEN GO TO PASSED ELSE JUMP OUT TO EX; 00078600
|
|
NEQ:IF NOM SC ! DC THEN GO TO PASSED ELSE JUMP OUT TO EX; 00078700
|
|
GR:IF NOM SC > DC THEN GO TO PASSED ELSE JUMP OUT TO EX; 00078800
|
|
GREQ:IF NOM SC} DC THEN GO TO PASSED ELSE JUMP OUT TO EX; 00078900
|
|
LS: IF NOM SC< DC THEN GO TO PASSED ELSE JUMP OUT TO EX; 00079000
|
|
LSEQ:IF NOM SC{ DC THEN GO TO PASSED ELSE JUMP OUT TO EX; 00079100
|
|
AN: NOM (IF SC = ALPHA THEN SI~SI+1 ELSE JUMP OUT 2 TO EX); 00079200
|
|
PASSED: SI~UPTO; SI~SI+24; UPTO~SI); 00079300
|
|
SELECTOR~ TALLY; SI~HITS ; IF SC!"0" THEN JUMP OUT; %JPA00079400
|
|
SI~LOC SELECTOR; DI~HITINDR; DS~WDS; HITINDR~DI; DS~8 LIT "0"; %JPA00079500
|
|
EX: SI~ORUPTO; IDS(SI~SI+24); ORUPTO~SI); 00079600
|
|
END SELECTOR; 00079700
|
|
%-----------------------------------------------------------------------00079800
|
|
BOOLEAN STREAM PROCEDURE COMPARE (SORTARRAY, A, B); 00079900
|
|
COMMENT COMPARE COMPARES ARRAYS A AND B ACCORDING TO CRITERIA 00080000
|
|
SPECIFIED IN SORTARRAY. IF COMPARE IS TRUE, ARRAY A COMES 00080100
|
|
"FIRST" OTHERWISE, B COMES FIRST. 00080200
|
|
THE FOLLOWING IS A COBOL TYPE DESCRIPTION OF SORTARRAY: 00080300
|
|
01 SORTARRAY. 00080400
|
|
03 FILLER PC 999999. 00080500
|
|
03 NUMKEYS PC 99. (NUMBER OF SORT KEYS TO FOLLOW) 00080600
|
|
03 KEY SZ 8 OCCURS NUMKEY TIMES. 00080700
|
|
05 FILLER PC 9. 00080800
|
|
05 NOM PC 99. (NUMBER OF CHARACTERS TO COMPARE ON) 00080900
|
|
05 WHERE PC 999. (POSITION OF START OF COMPARE) 00081000
|
|
05 SEQ PC 9. ( ASCENDING OR DESCENDING SEQUENCE) 00081100
|
|
88 DESCENDING VA 0. 00081200
|
|
88 ASCENDING VA 1. 00081300
|
|
05 FILLER PC 9. 00081400
|
|
END COMMENT; 00081500
|
|
BEGIN 00081600
|
|
LOCAL NUMKEYS, UPTO, KEY, NOM, WHERE1, WHERE2, WHERE3, SEQ ; 00081700
|
|
LABEL EX ; 00081800
|
|
SI~SORTARRAY; SI~SI+6;DI~LOC NUMKEYS;DS~2 OCT; UPTO~SI; 00081900
|
|
NUMKEYS ( SI~ UPTO; 00082000
|
|
SI ~ SI + 1; 00082100
|
|
DI~ LOC NOM; DS ~ 2 OCT; 00082200
|
|
DI ~ LOC WHERE1;DS ~ OCT; 00082300
|
|
DI ~ LOC WHERE2;DS ~ OCT; 00082400
|
|
DI ~ LOC WHERE3;DS ~ OCT; 00082500
|
|
DI ~ LOC SEQ; DS ~ OCT; 00082600
|
|
SI~ A; DI~B; 00082700
|
|
WHERE1 (2( SI~SI+50; DI~ DI+50)); 00082800
|
|
WHERE2 (SI~SI+10; DI~DI+10); 00082900
|
|
SI~SI + WHERE3; DI ~ DI + WHERE3; 00083000
|
|
IF NOM SC = DC THEN GO TO EX; 00083100
|
|
SI ~ SI - NOM; DI ~ DI - NOM; 00083200
|
|
TALLY ~ SEQ; 00083300
|
|
IF NOM SC > DC THEN TALLY ~ TALLY + 1; 00083400
|
|
COMPARE ~ TALLY; JUMP OUT; 00083500
|
|
EX: SI~UPTO; SI~SI+8; UPTO~SI); 00083600
|
|
END COMPARE; 00083700
|
|
%-----------------------------------------------------------------------00083800
|
|
STREAM PROCEDURE HIVALUE (SORTARRAY, RECORD); 00083900
|
|
COMMENT HIVALUE CREATES A RECORD WHICH WILL SORT LAST 00084000
|
|
ACCORDING TO THE KEYS DEFINED BY SORTARRAY; 00084100
|
|
BEGIN 00084200
|
|
LOCAL NUMKEYS, UPTO, KEY, NOM, WHERE1, WHERE2, WHERE3, SEQ ; 00084300
|
|
SI~SORTARRAY; SI~SI+6;DI~LOC NUMKEYS;DS~2 OCT; UPTO~SI; 00084400
|
|
NUMKEYS ( SI~ UPTO; 00084500
|
|
SI ~ SI + 1; 00084600
|
|
DI~ LOC NOM; DS ~ 2 OCT; 00084700
|
|
DI ~ LOC WHERE1;DS ~ OCT; 00084800
|
|
DI ~ LOC WHERE2;DS ~ OCT; 00084900
|
|
DI ~ LOC WHERE3;DS ~ OCT; 00085000
|
|
DI ~ RECORD; 00085100
|
|
WHERE1 (DI~DI+50; DI~ DI + 50); 00085200
|
|
WHERE2 ( DI~ DI + 10); 00085300
|
|
DI ~DI + WHERE3; 00085400
|
|
IF SC = "1" THEN NOM(DS~ LIT "9" ) ELSE NOM (DS~ LIT " ") ; 00085500
|
|
SI~UPTO; SI~ SI+ 8; UPTO ~SI) 00085600
|
|
END HIVALUE; 00085700
|
|
%-----------------------------------------------------------------------00085800
|
|
STREAM 00085900
|
|
PROCEDURE ACT (ACTIONARRAY, RECORD); 00086000
|
|
COMMENT ACTION AFFECTS RECORD ACCORDING TO INSTRUCTIONS 00086100
|
|
GIVEN IN ACTIONARRAY. 00086200
|
|
01 ACTIONARRAY. 00086300
|
|
03 FILLER SZ 6. 00086400
|
|
03 ACTIONS PC 99. 00086500
|
|
03 ACTION SZ 56 OC ACTIONS TIMES. 00086600
|
|
05 FILLER SZ 1 VA 0. 00086700
|
|
05 NUM PC 99. 00086800
|
|
05 WHERE PC 999. 00086900
|
|
05 STRIP PC 9. (SHOULD ACTION BE STRIPPING OF ZONE BITS) 00087000
|
|
88 YES VA 1. 00087100
|
|
05 FILLER PC 9. 00087200
|
|
05 DATA SZ 48. 00087300
|
|
03 MOVE REDEFINES ACTION. 00087400
|
|
05 FILLER SZ 1. 00087500
|
|
88 REGULAR VA 1. 00087600
|
|
88 OCT-TO-DEC-CONVERT VA 2. 00087700
|
|
05 NUM PC 99. 00087800
|
|
WHERE-TO PC 999. 00087900
|
|
05 WHERE-FROM PC 999. 00088000
|
|
05 FILLER SZ 47. 00088100
|
|
END COMMENT; 00088200
|
|
BEGIN 00088300
|
|
LOCAL ACTIONS, UPTO, NOM, WHERE1,WHERE2,WHERE3,STRIP,V,W,X,Y,Z,U; 00088400
|
|
SI~ACTIONARRAY; SI~SI+6; DI~LOC ACTIONS; DS~2 OCT; UPTO~SI; 00088500
|
|
ACTIONS (SI~UPTO; 00088600
|
|
IF SC} "1" THEN W~SI; 00088700
|
|
SI ~ SI + 1; 00088800
|
|
DI~ LOC NOM; DS ~ 2 OCT; 00088900
|
|
DI ~ LOC WHERE1;DS ~ OCT; 00089000
|
|
DI ~ LOC WHERE2;DS ~ OCT; 00089100
|
|
DI ~ LOC WHERE3;DS ~ OCT; 00089200
|
|
DI ~ RECORD; 00089300
|
|
WHERE1 (DI~DI+50; DI~ DI + 50); 00089400
|
|
WHERE2 ( DI~ DI + 10); 00089500
|
|
DI ~DI + WHERE3; 00089600
|
|
IF TOGGLE THEN BEGIN 00089700
|
|
V~DI; 00089800
|
|
DI~LOC WHERE1; DS ~ OCT; 00089900
|
|
DI~LOC WHERE2; DS ~ OCT; 00090000
|
|
DI~LOC WHERE3; DS ~ OCT; 00090100
|
|
SI~RECORD; 00090200
|
|
WHERE1 (SI~SI+50; SI~SI+50); 00090300
|
|
WHERE2(SI~SI+10); 00090400
|
|
SI ~ SI + WHERE3; 00090500
|
|
DI~V; 00090600
|
|
X~SI; SI~W; IF SC= "1" THEN; SI~X; IF TOGGLE THEN DS~NOM CHR 00090700
|
|
ELSE DS~ NOM DEC; 00090800
|
|
END ELSE 00090900
|
|
IF SC = "1" THEN BEGIN SI~ LOC U; DS~ NOM ZON END ELSE 00091000
|
|
BEGIN SI~SI+2; DS~ NOM CHR END; 00091100
|
|
SI~UPTO; SI~SI+56; UPTO~SI) 00091200
|
|
END ACTION; 00091300
|
|
%-----------------------------------------------------------------------00091400
|
|
PROCEDURE DOPLUG; 00091500
|
|
FOR I~ 0 STEP 1 UNTIL HIGHPLUG DO 00091600
|
|
IF PLUGBOOL[I] THEN CASE(I) OF 00091700
|
|
BEGIN 00091800
|
|
END; 00091900
|
|
BOOLEAN PROCEDURE INPROC (RECORD); 00092000
|
|
ARRAY RECORD [0]; 00092100
|
|
BEGIN 00092200
|
|
LABEL STARTS, EOFS; 00092300
|
|
LABEL DOACTS; %JPA00092400
|
|
INTEGER I; 00092500
|
|
STARTS: 00092600
|
|
IF HITS[NEXTHIT ] = 0 THEN %JPA00092800
|
|
BEGIN %JPA00092900
|
|
READ (INMESS, INSIZE, RECORD[*])[EOFS]; 00093000
|
|
INCOUNT~INCOUNT+1; 00093100
|
|
IF RANGE THEN IF NOT RANGECASE (RECORD)THEN GO TO STARTS; 00093200
|
|
00093300
|
|
IF PLUGIN THEN DOPLUG; 00093400
|
|
I := SELECTOR(SELECTAR,RECORD,HITS[0]); 00093500
|
|
IF I = 0 THEN GO TO STARTS; 00093510
|
|
NEXTHIT~1; %JPA00093600
|
|
IF TRACEOPT THEN PRINREC(INSIZE,RECORD,0); %JPA00093700
|
|
IF EXPLODOPT OR TRACEOPT THEN MOVEMANYWORDS(INSIZE,RECORD,SAVEREC); %JPA00093800
|
|
END %JPA00093900
|
|
ELSE MOVEMANYWORDS(INSIZE,SAVEREC,RECORD); %JPA00094000
|
|
DOACTS: IF NOT SELECTOPT THEN I~ HITS[NEXTHIT]; %JPA00094100
|
|
IF MUSTACT THEN 00094200
|
|
IF ACTIONS[I] THEN ACT (ACTIONAR[I,*], RECORD); 00094300
|
|
NEXTHIT~NEXTHIT+1; %JPA00094400
|
|
IF ((NOT EXPLODOPT) AND (HITS[NEXTHIT]!0)) THEN GO TO DOACTS; %JPA00094500
|
|
OUTCOUNT~OUTCOUNT+1; %JPA00094600
|
|
IF LIMITNUM NEQ 0 THEN IF OUTCOUNT GTR LIMITNUM THEN 00094610
|
|
GO TO EOFS; 00094620
|
|
IF TRACEOPT THEN PRINREC(OUTSIZE,RECORD,1); %JPA00094700
|
|
IF FALSE THEN EOFS: INPROC ~ TRUE; 00094800
|
|
END INPROC; 00094900
|
|
%-----------------------------------------------------------------------00095000
|
|
PROCEDURE OUTPROC (B, RECORD); 00095100
|
|
VALUE B; BOOLEAN B; ARRAY RECORD[0]; 00095200
|
|
IF NOT B THEN WRITE(OUTMESS, OUTSIZE, RECORD[*]); 00095300
|
|
%-----------------------------------------------------------------------00095400
|
|
BOOLEAN PROCEDURE COMP (A,B); 00095500
|
|
ARRAY A, B[0]; 00095600
|
|
BEGIN SORTCOUNT~SORTCOUNT+1; 00095700
|
|
COMP ~COMPARE (SORTAR,A,B); 00095800
|
|
END; 00095900
|
|
PROCEDURE HVL(A); 00096000
|
|
ARRAY A[0]; 00096100
|
|
HIVALUE (SORTAR,A); 00096200
|
|
%-----------------------------------------------------------------------00096300
|
|
%-----------------------------------------------------------------------00096500
|
|
READ (ACTION [*],PACKETS,ACTIONS [*]); %JPA00096600
|
|
MOVEMANYWORDS (SORTKEYS+1, SORTARRAY, SORTAR); 00096700
|
|
MOVEMANYWORDS (SELECTSIZE, SELECTARRAY, SELECTAR); 00096800
|
|
FOR I~1 STEP 1 UNTIL PACKETS DO MOVEMANYWORDS(ACTIONMAX, 00096900
|
|
ACTIONARRAY[I, *], ACTIONAR[I, *]); 00097000
|
|
IF SELECTOPT THEN HITS[0]~-1; %JPA00097100
|
|
NEXTHIT~1; %JPA00097200
|
|
IF SKIPNUM ! 0 THEN SPACE (INMESS,SKIPNUM) [EOF]; 00097300
|
|
00097400
|
|
IF NOT MUSTSORT AND NOT SELECTS THEN WHILE TRUE DO BEGIN 00097500
|
|
READ (INMESS, INSIZE, RECORD[*])[EOF ]; 00097600
|
|
INCOUNT~OUTCOUNT~OUTCOUNT+1; 00097700
|
|
IF LIMITNUM NEQ 0 THEN IF OUTCOUNT GTR LIMITNUM THEN 00097800
|
|
BEGIN OUTCOUNT := OUTCOUNT - 1; GO TO EOF; END; 00097810
|
|
00097900
|
|
WRITE (OUTMESS,OUTSIZE, RECORD[*]); 00098000
|
|
END ELSE 00098100
|
|
IF MUSTSORT AND NOT SELECTS THEN 00098200
|
|
BEGIN DEFINE A=A#; 00098300
|
|
SORT (OUTMESS,INMESS,3,HVL,COMP,RECSIZE,CORE) 00098400
|
|
END 00098500
|
|
ELSE 00098600
|
|
IF MUSTSORT AND SELECTS THEN 00098700
|
|
BEGIN DEFINE A=A#; 00098800
|
|
SORT (OUTPROC,INPROC,3,HVL,COMP,RECSIZE,CORE) 00098900
|
|
END 00099000
|
|
ELSE 00099100
|
|
BEGIN LABEL STARTS; 00099200
|
|
WHILE TRUE DO BEGIN 00099300
|
|
IF INPROC(RECORD) THEN GO TO EOF; %JPA00099400
|
|
% %JPA00099500
|
|
% %JPA00099600
|
|
% %JPA00099700
|
|
% %JPA00099800
|
|
% %JPA00099900
|
|
% %JPA00100000
|
|
% %JPA00100100
|
|
WRITE (OUTMESS,OUTSIZE, RECORD[*]); 00100300
|
|
% %JPA00100400
|
|
END; 00100500
|
|
END; 00100600
|
|
EOF: 00100700
|
|
IF ZIPS THEN ZIP WITH ZIPARRAY [*]; 00100800
|
|
IF MUSTCOUNT THEN BEGIN 00100900
|
|
FILE OUT PTR 18 (2,15); 00101000
|
|
FORMAT FCOUNT ("RECORDS IN=", I6, ". OUT=", I6, ". RECORDS SORTED=",I6);00101100
|
|
FORMAT FCOUNT2(" INPUT RECORDS SKIPPED = ",I6, 00101110
|
|
" LIMIT OF RECORDS OUT = ",I6); 00101120
|
|
FORMAT FCOUNT3 ("INPUT RECORDS SKIPPED = ",I6, 00101130
|
|
" NO LIMIT ON RECORDS OUT IS SET."); 00101140
|
|
WRITE (PTR, FCOUNT, INCOUNT, OUTCOUNT, SORTCOUNT); 00101200
|
|
IF SKIPNUM NEQ 0 THEN IF LIMITNUM NEQ 0 THEN 00101210
|
|
WRITE (PTR, FCOUNT2,SKIPNUM,LIMITNUM); 00101220
|
|
IF SKIPNUM NEQ 0 THEN IF LIMITNUM = 0 THEN 00101230
|
|
WRITE (PTR,FCOUNT3,SKIPNUM); 00101240
|
|
IF SKIPNUM = 0 THEN IF LIMITNUM NEQ 0 THEN 00101250
|
|
WRITE (PTR,FCOUNT2,SKIPNUM,LIMITNUM); 00101260
|
|
END; 00101300
|
|
END; 00101400
|
|
00101500
|
|
EOJ: 00101600
|
|
END. 00101700
|
|
END;END. LAST CARD ON 0CRDING TAPE 00101800
|