1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-01 17:25:46 +00:00
Files
retro-software.B5500-software/CUBE-Library-13/Files/ORS033.alg
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

3804 lines
301 KiB
Plaintext

COMMENT 100
TIME-PERT B5000 200
AN ALGOL 60 PROGRAM FOR THE ANALYSIS 300
AND PLANNING OF NETWORK FLOW PROBLEMS 400
ANNE G. MACEK 500
(PROFESSIONAL SERVICES, BURROUGHS CORPORATION) 600
FIRST RELEASE DATE 7-1-64 700
; 800
COMMENT 900
BLOCK STRUCTURE 1000
:------------------------- 1100
: DECLARE GLOBAL VARIABLES 1200
: 1300
: PROCEDURE TYPEOUT 1400
: :----------------------- 1500
: : TYPE MESSAGES ON SUPERVISORY PRINTER 1600
: :----------------------- 1700
: 1800
: PROCEDURE PURGE 1900
: :----------------------- 2000
: : PURGE TAPE WITH A SAVE FACTOR 2100
: :----------------------- 2200
: 2300
: :----------------------- 2400
: : CONTROL BLOCK READ AND AUDIT CONTROL CARDS 2500
: :----------------------- 2600
: 2700
: :----------------------- 2800
: : DECLARE ADDITIONAL GLOBAL VARIABLES 2900
: :ORIGIN................. 3000
: : . CONTROL ROUTINE 3100
: : ................. 3200
: : 3300
: :BLOCK1:---------------- 3400
: : : READ SAVE RECORDS FOR AN UPDATE 3500
: : : OR GENERATE REPORTS RUN 3600
: : :---------------- 3700
: : 3800
: :BLOCK2:---------------- 3900
: : : AUDIT BLOCK 4000
: : : PROCEDURE UNPACK 4100
: : : :----------- 4200
: : : :----------- 4300
: : : PROCEDURE RENUMBER 4400
: : : :----------- 4500
: : : : COMPUTE RENUMBERED EVENT 4600
: : : : WRITE EVENT NUMBER,RENUMBERED EVENT, 4700
: : : : AND EVENT DESCRIPTION ON EVENT TAPE 4800
: : : :----------- 4900
: : : PROCEDURE CARDAUDIT 5000
: : : :----------- 5100
: : : : AUDIT ACTIVITIES 5200
: : : : WRITE PREDECESSOR EVENT,SUCCESSOR EVENT, 5300
: : : : PACKED RENUMBERED EVENTS,ACTIVITY DATE, 5400
: : : : ACTIVITY DURATION, AND ACTIVITY 5500
: : : : DESCRIPTION ON ACTIVITY TAPE 5600
: : : :----------- 5700
: : : CHECK NETWORK START DATE AND REPORT 5800
: : : DATE 5900
: : : READ AND AUDIT ACTIVITY CARDS 6000
: : : :----------- 6100
: : : : LIST ENDING AND STARTING EVENTS 6200
: : : :----------- 6300
: : : :----------- 6400
: : : : WRITE TALLY COUNTS ON ACTIVITY TAPE 6500
: : : : FILE 6600
: : : :----------- 6700
: : :---------------- 6800
: : 6900
: :BLOCK3:---------------- 7000
: : : RANK BLOCK 7100
: : : RANK EVENTS 7200
: : : WRITE EVENT RANKS ON EVENT TAPE 7300
: : : WRITE ACTIVITY RANKS ON ACTIVITY 7400
: : : TAPE 7500
: : : LIST ACTIVITIES IN A LOOP 7600
: : :---------------- 7700
: : 7800
: :BLOCK4:---------------- 7900
: : : SORT BLOCK 8000
: : : PROCEDURE TAPESORT 8100
: : : :----------- 8200
: : : : SORT TAPE FILE 8300
: : : :----------- 8400
: : : :----------- 8500
: : : : FILL GLOBAL ARRAYS 8600
: : : :----------- 8700
: : :---------------- 8800
: : 8900
: :BLOCK5:---------------- 9000
: : : NETANAL BLOCK 9100
: : : CALCULATE EARLIEST START AND SUMS 9200
: : : OF VARIANCE AND WRITE THEM ON 9300
: : : ACTIVITY TAPE 9400
: : : WRITE EARLIEST OCCURRENCE AND SUMS 9500
: : : OF VARIANCE ON EVENT TAPE 9600
: : : CALCULATE LATEST FINISH 9700
: : : WRITE LATEST FINISH AND ACTIVITY 9800
: : : SLACK ON ACTIVITY TAPE 9900
: : : WRITE LATEST OCCURRENCE AND EVENT 10000
: : : SLACK ON EVENT TAPE 10100
: : :---------------- 10200
: : 10300
: :BLOCK6:---------------- 10400
: : : LIST BLOCK 10500
: : : PROCEDURE PACK 10600
: : : :----------- 10700
: : : :----------- 10800
: : : PROCEDURE UPACK 10900
: : : ............ 11000
: : : ............ 11100
: : : 11200
: : : :----------- 11300
: : : : PROCEDURE NORMPROB 11400
: : : : :--------- 11500
: : : : : COMPUTE PROBABILITY OF MEETING 11600
: : : : : SCHEDULE DATES 11700
: : : : :------- - 11800
: : : : LIST ACTIVITIES 11900
: : : :----------- 12000
: : : 12100
: : : :------------ 12200
: : : : LIST EVENTS 12300
: : : :------------ 12400
: : :---------------- 12500
: : 12600
: :BLOCK7:---------------- 12700
: : : PLOT BLOCK 12800
: : : PROCEDURE UPACK 12900
: : : ............ 13000
: : : ............ 13100
: : : :----------- 13200
: : : : PROCEDURE UNPACK 13300
: : : : :--------- 13400
: : : : :--------- 13500
: : : : COMPUTE STARTING DATE OF GRAPH 13600
: : : :----------- 13700
: : : 13800
: : : :----------- 13900
: : : : WRITE HEADING IF PLOT BY DAYS OR 14000
: : : : WEEKS 14100
: : : :----------- 14200
: : : 14300
: : : :----------- 14400
: : : : WRITE HEADING IF PLOT BY MONTHS 14500
: : : :----------- 14600
: : : 14700
: : : :----------- 14800
: : : : WRITE HEADING IF PLOT BY QUARTERS 14900
: : : :----------- 15000
: : : 15100
: : : :----------- 15200
: : : : PROCEDURE PACK 15300
: : : : :--------- 15400
: : : : :--------- 15500
: : : : PLOT GRAPH 15600
: : : :----------- 15700
: : :---------------- 15800
: : 15900
: :FINISH:---------------- 16000
: : : FINISH BLOCK 16100
: : : WRITE SAVE RECORDS ON TAPE 16200
: : : :----------- 16300
: : : : LIST SAVE RECORDS AND ATIVITY TAPES 16400
: : : : IF PROGRAM TERMINATED BEFORE 16500
: : : : COMPLETION BECASE OF DATA ERRORS 16600
: : : :----------- 16700
: : : :----------- 16800
: : : : LIST EXECUTED OPERATIONS 16900
: : : :----------- 17000
: : :---------------- 17100
: :----------------------- 17200
: WRITE MESSAGES ON SUPERVISORY 17300
: PRINTER 17400
ENDOFPROG:------------------------- 17500
; 17600
BEGIN 17700
COMMENT 17800
DEFINITIONS OF GLOBAL VARIABLES 17900
NOACT NUMBER OF ACTIVITIES 18000
NOEVN NUMBER OF EVENTS 18100
MAXNOACT MAXIMUM PERMISSIBLE NUMBER OF ACTIVITIES 18200
MAXNOEVN MAXIMUM PERMISSIBLE NUMBER OF EVENTS 18300
MINEV MINIMUM EVENT NUMBER 18400
MAXEV MAXIMUM EVENT NUMBER 18500
RUN RUN NUMBER 18600
SDATE NETWORK STARTING DATE 18700
SDAYS NUMBER OF WORKING DAYS FROM 1/1/62 UNTIL NETWORK 18800
START DATE 18900
WDPW NUMBER OF WORKING DAYS PER WEEK 19000
RDATE NETWORK REPORT DATE 19100
RDAYS NUMBER OF WORKING DAYS FROM NETWORK START DATE 19200
UNTIL REPORT DATE 19300
KEY ACTIVITY NUMBER ON ACTIVITY TAPE FILE 19400
I PREDECESSOR EVENT NUMBER 19500
J SUCCESSOR EVENT NUMBER 19600
RRIJ PACKED VARIABLE CONTAINING RENUMBERED 19700
PREDECESSOR AND SUCCESSOR EVENTS 19800
ASD FLAG DENOTING TYPE OF ACTIVITY DATE 19900
1 ACTUAL START DATE 20000
2 ACTUAL COMPLETION DATE 20100
3 DIRECTED START DATE 20200
4 SCHEDULED COMPLETION DATE 20300
ADAYS NUMBER OF WORKING DAYS FROM NETWORK START DATE 20400
UNTIL ACTIVITY DATE 20500
RANKI ACTIVITY RANK -RANK OF PREDECESSOR EVENT- 20600
TAL PACKED VARIABLE CONTAINING NUMBER OF ACTIVITIES 20700
LEADING INTO AND NUMBER LEADING FROM SUCCESSOR 20800
EVENT AND NUMBER OF PRECEDING ACTIVITIES WHICH 20900
ARE COMPLETE 21000
NOACTCOL,NOACTROW UPPER BOUNDS FOR ARRAYS OF LENGTH NOACT 21100
NOEVNCOL,NOEVNROW UPPER BOUNDS FOR ARRAYS OF LENGTH NOEVN 21200
NWPR NUMBER OF WORDS PER LOGICAL RECORD ON ACTIVITY 21300
TAPE 21400
SORTARRAYSIZE NUMBER OF ROWS IN ARRAY CONTAINING 21500
ACTIVITIES TO BE SORTED 21600
NUMENDING MAXIMUM PERMISSIBLE NUMBER OF ENDING EVENTS 21700
NUMSTARTING MAXIMUM PERMISSIBLE NUMBER OF STARTING EVENTS 21800
CHAINLENGTH LARGEST PERMISSIBLE NUMBER OF SERIAL 21900
ACTIVITIES 22000
SRUN RUN NUMBER READ FROM SAVE RECORDS TAPE 22100
SSDATE NETWORK START DATE READ FROM SAVE RECORDS TAPE 22200
SNOACT NUMBER OF ACTIVITIES READ FROM SAVE RECORDS TAPE 22300
SSDAYS NUMBER OF WORKING DAYS FROM 1/1/62 UNTIL NETWORK 22400
START DATE READ FROM SAVE RECORDS TAPE 22500
RD TAPE KEY OF TAPE FILE CONTAINING CURRENT 22600
ACTIVITY RECORDS 22700
WR TAPE KEY OF TAPE FILE TO BE WRITTEN NEXT 22800
RN RENUMBERED EVENT 22900
EVNO EVENT NUMBER 23000
RANKE EVENT RANK 23100
TALLY PACKED VARIABLE CONTAINING NUMBER OF ACTIVITIES 23200
LEADING INTO AND NUMBER LEADING FROM EVENT AND 23300
NUMBER OF PRECEDING ACTIVITIES WHICH ARE 23400
COMPLETE 23500
NOSORT NUMBER OF EVENT SORTS 23600
NCPR NUMBER OF WORDS PER LOGICAL RECORD ON EVENT TAPE 23700
RE TAPE KEY OF TAPE FILE CONTAINING CURRENT EVENT 23800
RECORDS 23900
SC TAPE KEY OF TAPE FILE CONTAINING SAVE RECORDS 24000
NE TAPE KEY OF TAPE FILE CONTAINING NEW EVENT 24100
RECORDS 24200
NTAPES NUMBER OF TAPES TO BE USED FOR SORTING 24300
ET EXPECTED DURATION TIME OF AN ACTIVITY 24400
VAR ACTIVITY VARIANCE 24500
SVAR SUM OF VARIANCES ALONG MOST CRITICAL PATH 24600
LEADING TO GIVEN ACTIVITY 24700
ES EARLIEST STARTING TIME FOR ACTIVITY 24800
LF LATEST FINISH TIME FOR ACTIVITY ALLOWED IN ORDER 24900
TO MEET SCHEDULE ENDING DATES 25000
SL ACTIVITY SLACK 25100
EEO EARLIEST EVENT OCCURRENCE 25200
LEO LATEST EVENT OCCURRENCE 25300
EVAR SUM OF VARIANCES ALONG MOST CRITICAL PATH 25400
LEADING TO EVENT 25500
SLCK EVENT SLACK 25600
NETNAME ARRAY CONTAINING NETWORK NAME 25700
SNETNAME ARRAY CONTAINING NETWORK NAME READ FROM SAVE 25800
RECORDS TAPE 25900
REMARKS ARRAY CONTAINING ACTIVITY DESCRIPTION 26000
DSCPT ARRAY CONTAINING EVENT DESCRIPTION 26100
PERIOD INTERVAL OF TIME ESTIMATES -DAYS OR WEEKS- 26200
ITEMNAME ARRAY CONTAINING NAMES OF ITEMS IN ACTIVITY 26300
RECORD ON TAPE 26400
EVENTITEM ARRAY CONTAINING NAMES OF ITEMS IN EVENT RECORD 26500
INST ARRAY CONTAINING SPO MESSAGES 26600
BLOCKTOTAL NUMBER OF BLOCKS OF CODE TO BE EXECUTED 26700
RSORTNUM NUMBER OF ACTIVITY SORTS 26800
NOBLOCK INDEX OF ARRAYS BLOC AND BLOCPARAM 26900
UPDATE FLAG DENOTING TYPE OF AUDIT TO BE PERFORMED 27000
0 INITIAL INPUT AUDIT 27100
1 UPDATE WITHOUT NETWORK CHANGES 27200
2 UPDATE WITH NETWORK CHANGES 27300
SAVETAPES BOOLEAN FLAG, TRUE IF INPUT TAPES FOR AN UPDATE 27400
OR GENERATE REPORTS RUN ARE TO BE SAVED 27500
BSAVA BOOLEAN FLAG, TRUE IF ACTIVITY TAPE IS TO BE 27600
SAVED DURING A GENERATE REPORTS RUN 27700
BSAVE BOOLEAN FLAG, TRUE IF EVENT TAPE IS TO BE SAVED 27800
DURING A GENERATE REPORTS RUN 27900
ONETIME BOOLEAN FLAG, TRUE IF ONLY ONE TIME ESTIMATE 28000
IS SPECIFIED 28100
LISTTAL BOOLEAN FLAG, TRUE IF END TALLIES ARE TO BE 28200
LISTED 28300
EVENTTAPE BOOLEAN FLAG, TRUE IF AN EVENT TAPE IS TO BE 28400
MADE 28500
BLOC ARRAY CONTAINING BLOCK NUMBERS WHICH ARE TO BE 28600
EXECUTED 28700
BLOCPARAM ARRAY CONTAINING PARAMETERS NECESSARY FOR 28800
CODING TO BE EXECUTED 28900
SORTCOL ARRAY CONTAINING NUMBER OF SORTKEYS AND SORTKEY 29000
NUMBERS FOR ACTIVITY SORTS 29100
EVENTCOL ARRAY CONTAINING NUMBER OF SORTKEYS AND SORTKEY 29200
NUMBERS FOR EVENT SORTS 29300
LL,K INDICES FOR LISTS 29400
; 29500
INTEGER NOACT,NOEVN,MAXNOACT,MAXNOEVN,MINEV,MAXEV,RUN,SDATE,SDAYS, 29600
WDPW,RDATE,RDAYS,KEY,I,J,RRIJ,ASD,ADAYS,RANKI,TAL,LL,K ; 29700
INTEGER NOACTCOL,NOACTROW,NOEVNCOL,NOEVNROW,NWPR,SORTARRAYSIZE ; 29800
INTEGER NUMENDING,NUMSTARTING,CHAINLENGTH ; 29900
INTEGER SRUN,SSDATE,SNOACT,SSDAYS ; 30000
INTEGER RD,WR ; 30100
INTEGER RN,EVNO,RANKE,TALLY,NOSORT,NCPR,RE,SC ; 30200
INTEGER NE ; 30300
INTEGER NTAPES ; 30400
FILE OUT PRINTER 1(2,15) ; 30500
FILE OUT SPOOUT(1,20) ; 30600
FILE DUMMYFILE(1,10) ; 30700
FILE PERTA 2(2,256,19,SAVE 30) ; 30800
FILE PERTB 2(2,256,19,SAVE 30) ; 30900
FILE PERTC 2(2,256,250,SAVE 30) ; 31000
FILE PERTE 2(2,256,19,SAVE 30) ; 31100
FILE PERTF 2(2,256,19,SAVE 30) ; 31200
SWITCH FILE SWF ~ DUMMYFILE,PERTA,PERTB,PERTC,PERTE,PERTF ; 31300
REAL ET,VAR,SVAR,ES,LF,SL ; 31400
REAL EEO,LEO,EVAR,SLCK ; 31500
ALPHA ARRAY NETNAME[0:13],REMARKS[0:4] ; 31600
ALPHA ARRAY DSCPT[0:4] ; 31700
ALPHA ARRAY SNETNAME[0:13] ; 31800
ALPHA PERIOD ; 31900
ALPHA ARRAY ITEMNAME[0:15] ; 32000
ALPHA ARRAY EVENTITEM[0:10] ; 32100
ARRAY INST[0:5,0:12] ; 32200
ALPHA ARRAY FILENAMES[0:5] ; 32300
INTEGER ARRAY BLOC[0:40],BLOCPARAM[0:40],SORTCOL[0:9,0:5] ; 32400
INTEGER ARRAY EVENTCOL[0:9,0:5] ; 32500
LABEL ENDOFPROG ; 32600
LABEL MAINSTART ; 32700
LIST SAVEREC1(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],RUN, 32800
SDATE,SDAYS,RDATE,RDAYS,MAXNOACT,MAXNOEVN, 32900
CHAINLENGTH,NUMENDING,NUMSTARTING,WDPW,NOACT,NOEVN, 33000
NOACTROW,NOACTCOL,NOEVNROW,NOEVNCOL,MINEV,MAXEV, 33100
FOR LL ~ 1 STEP 1 UNTIL 5 DO SORTCOL[0,LL],FOR LL ~ 33200
1 STEP 1 UNTIL 5 DO EVENTCOL[0,LL],SC,RD,RE,WR,NE), 33300
SSAVEREC1(FOR LL ~ 1 STEP 1 UNTIL 13 DO SNETNAME[LL],SRUN, 33400
SSDATE,SSDAYS,RDATE,RDAYS,MAXNOACT,MAXNOEVN, 33500
CHAINLENGTH,NUMENDING,NUMSTARTING,WDPW,SNOACT,NOEVN, 33600
NOACTROW,NOACTCOL,NOEVNROW,NOEVNCOL,MINEV,MAXEV, 33700
FOR LL ~ 1 STEP 1 UNTIL 5 DO SORTCOL[0,LL],FOR LL ~ 33800
1 STEP 1 UNTIL 5 DO EVENTCOL[0,LL],SC,RD,RE,WR,NE) ; 33900
INTEGER BLOCKTOTAL,RSORTNUM,NOBLOCK,UPDATE ; 34000
BOOLEAN SAVETAPES ; 34100
BOOLEAN BSAVE ; 34200
BOOLEAN BSAVA ; 34300
BOOLEAN ONETIME,LISTTAL ; 34400
BOOLEAN EVENTTAPE ; 34500
PROCEDURE TYPEOUT(F,A) ; 34600
COMMENT THIS PROCEDURE TYPES OUT THE MESSAGES CONTAINED IN THE 34700
ARRAY A ON THE SUPERVISORY PRINTER ; 34800
FILE F ; 34900
ARRAY A[0] ; 35000
BEGIN 35100
SAVE ARRAY B[0:7] ; 35200
STREAM PROCEDURE TYPE(F,B) ; 35300
BEGIN 35400
LOCAL TA ; 35500
LABEL L,L2 ; 35600
COMMENT BUILD DESCRIPTOR ; 35700
SI ~ B ; TA ~ SI ; DI ~ LOC TA ; DS ~ 5 LIT "{|000"; 35800
DI ~ F ; SI ~ LOC TA ; DS ~ 1 WDS ; RELEASE(F) ; 35900
COMMENT WAIT FOR PRESENCE ; 36000
L: SI ~ F ; SKIP 2 SB ; IF SB THEN GO TO L2 ; GO TO L ; 36100
L2: END ; 36200
STREAM PROCEDURE LOAD(A,B) ; 36300
BEGIN 36400
SI ~ A ; DI ~ B ; 36500
10(SI ~ SI + 2 ; DS ~ 6 CHR) ; 36600
END ; 36700
LOAD(A,B) ; TYPE(F,B) ; 36800
END TYPEOUT ; 36900
PROCEDURE PURGE(F,FACTOR) ; 37000
COMMENT THIS PROCEDURE PURGES A TAPE WITH A SAVE FACTOR ; 37100
FILE F ; 37200
INTEGER FACTOR ; 37300
BEGIN 37400
ARRAY TEMP[0:1] ; 37500
LABEL L1,L2,RET ; 37600
SWITCH SW ~ L1,L2,RET ; 37700
INTEGER SAVE1,SAVE2 ; 37800
STREAM PROCEDURE FIXSAVEFACTOR(F,SAVE1,SAVE2) ; 37900
BEGIN 38000
LOCAL T ; 38100
SI ~ F ; SI ~ SI - 24 ; DI ~ LOC T ; DS ~ WDS ; 38200
SI ~ T ; SI ~ SI + 37 ; DI ~ SAVE2 ; DI ~ DI + 5 ; 38300
DS ~ 3 CHR ; 38400
SI ~ SAVE1 ; SI ~ SI + 5 ; DI ~ T ; DI ~ DI + 37 ; 38500
DS ~ 3 CHR ; 38600
END FIXSAVEFACTOR ; 38700
SAVE1 ~ SAVE2 ~ 0 ; REWIND(F) ; 38800
FIXSAVEFACTOR(F,SAVE1,SAVE2) ; 38900
WRITE(F,1,TEMP[*]) ; 39000
FIXSAVEFACTOR(F,SAVE2,SAVE1) ; 39100
GO TO SW[FACTOR] ; 39200
L1: CLOSE(F,SAVE) ; GO TO RET ; 39300
L2: CLOSE(F,RELEASE) ; 39400
RET: END PURGE ; 39500
MAINSTART: 39600
FILL ITEMNAME[*] WITH " KEY"," PRED"," SUCC", 39700
" RRIJ"," ET"," VAR"," ASD", 39800
" ADAYS"," ES"," LF"," SL"," SVAR", 39900
" RANK"," TALLY"," "," " ; 40000
FILL INST[1,*] WITH " ","IS THE"," SAVE ","RECORD", 40100
"S TAPE"," FILE.","~ " ; 40200
FILL INST[2,*] WITH " ","IS THE"," ACTIV","ITIES ", 40300
"TAPE F","ILE.~ " ; 40400
FILL INST[3,*] WITH " ","IS THE"," EVENT"," TAPE ", 40500
"FILE.~" ; 40600
FILL INST[4,*] WITH "SAVE T","HIS TA","PE FOR"," AN UP", 40700
"DATE R","UN.~ " ; 40800
FILL INST[5,*] WITH "REMOVE"," THIS ","TAPE.~" ; 40900
FILL FILENAMES[*] WITH "DUMMY ","PERTA ","PERTB ", 41000
"PERTC ","PERTE ","PERTF " ; 41100
ONETIME ~ LISTTAL ~ FALSE ; 41200
BEGIN 41300
COMMENT CONTROL BLOCK ; 41400
COMMENT 41500
DEFINITIONS OF VARIABLES IN CONTROL BLOCK 41600
NOMODULES NUMBER OF MEMORY MODULES ON THE B5000 SYSTEM 41700
BEING USED 41800
CONTROL1 ARRAY CONTAINING CARD IMAGE OF A CONTROL CARD 41900
CONTROL2 ARRAY CONTAINING VALUES OF INPUT PARAMETERS ON 42000
A CONTROL CARD 42100
NOTES ARRAY CONTAINING COMMENTS 42200
INA,INE TEMPORARY ARRAYS 42300
LL,MM,NN INDICES FOR ARRAYS 42400
; 42500
INTEGER MM,NN,LL ; 42600
INTEGER NOMODULES ; 42700
ALPHA ARRAY CONTROL1[0:6] ; 42800
ALPHA ARRAY NOTES[0:14] ; 42900
INTEGER ARRAY CONTROL2[0:5] ; 43000
INTEGER ARRAY INA,INE[0:9] ; 43100
LABEL L1,L2,L3,L4,L5 ; 43200
LABEL ER ; 43300
LABEL ER2,ER4,EOJ ; 43400
LIST CONTROLIN(FOR NN ~ 1 STEP 1 UNTIL 6 DO CONTROL1[NN], 43500
FOR NN ~ 1 STEP 1 UNTIL 5 DO CONTROL2[NN]), 43600
REMARK(FOR NN ~ 1 STEP 1 UNTIL 14 DO NOTES[NN]), 43700
CONTROLOUT1(FOR NN ~ 1 STEP 1 UNTIL 6 DO CONTROL1[NN]), 43800
CONTROLOUT2(FOR NN ~ 1 STEP 1 UNTIL 6 DO CONTROL1[NN], 43900
CONTROL2[1]), 44000
CONTROLOUT3(FOR NN ~ 1 STEP 1 UNTIL 6 DO CONTROL1[NN], 44100
CONTROL2[1],CONTROL2[2]) ; 44200
FILE IN FILECONTR(2,10) ; 44300
FORMAT IN FORMCONTR(6A6,X4,I10,4I5) ; 44400
FORMAT COMMENTS(13A6,A2) ; 44500
FORMAT OUT OUTER("CONTROL CARD INCORRECT. THE FOLLOWING CONTROL", 44600
"CARDS ARE IGNORED"), 44700
OUTMOD("NO MODULES NOT SPECIFIED"), 44800
OUTTAPE("A MINIMUM OF THREE TAPES ARE NEEDED"), 44900
OUTWDPW("NO WORKING DAYS PER WEEK INVALID"), 45000
OUTSORTA("TWO SUCCESSIVE ACTIVITY SORTS, SORTED ON FIRST", 45100
" ONLY"), 45200
OUTSORTE("TWO SUCCESSIVE EVENT SORTS, SORTED ON FIRST ", 45300
"ONLY"), 45400
OUTSEVENT("EVENT TAPE SORT, ALTHOUGH NO EVENT TAPE ", 45500
"SPECIFIED, AN EVENT TAPE IS ASSUMED"), 45600
OUTLEVENT("EVENT TAPE LIST, ALTHOUGH NO EVENT TAPE ", 45700
"SPECIFIED, AN EVENT TAPE IS ASSUMED"), 45800
OUTSORTKEYS("MORE THAN FOUR SORTKEYS CALLED FOR, FIRST ", 45900
"FOUR ARE USED"), 46000
OUTREPORTS("MORE THAN NINE SORTS ARE CALLED FOR."//"THE ", 46100
"FOLLOWING CONTROL CARDS ARE IGNORED:"/), 46200
OUTSORTDE("LAST EVENT SORT OMITTED BECAUSE SORT BY EVNO ", 46300
"IMMEDIATELY FOLLOWS"), 46400
OUTSORTDA("LAST ACTIVITY SORT OMITTED BECAUSE SORT BY I ", 46500
"OR J IMMEDIATELY FOLLOWS"), 46600
OUTLISTDE("LIST OF EVENTS BY DEPARTMENT NOT POSSIBLE ", 46700
"BECAUSE NO MORE EVENT SORTS ARE PERMITTED"), 46800
OUTLISTDA("LIST OF ACTIVITIES BY DEPARTMENT NOT POSSIBLE", 46900
"BECAUSE NO MORE ACTIVITY SORTS ARE PERMITTED"), 47000
OUTPLOT("PLOT INTERVAL INCORRECT, PLOT IGNORED"), 47100
OUTPLOTD("GRAPH OF ACTIVITIES BY DEPARTMENT NOT POSSIBLE", 47200
" BECAUSE NO MORE ACTIVITY SORTS ARE PERMITTED"), 47300
OUTBLOC("THE TOTAL NUMBER OF SORT, LIST, AND PLOT CARDS ", 47400
"EXCEEDS THE MAX NO. ALLOWED"//"THE FOLLOWING ", 47500
"CONTROL CARDS ARE IGNORED:"/), 47600
OUTEOF("NO MCP END OF FILE CARD FOR FILE FILECONTR," 47700
" THE FOLLOWING CARDS ARE IGNORED"), 47800
OUTCARD1(6A6), 47900
OUTCARD2(6A6,X4,I10), 48000
OUTCARD3(6A6,X4,I10,4I5), 48100
OUTCARD4(6A6,X4,I10,I5) ; 48200
FOR NN ~ 0 STEP 1 UNTIL 40 DO BLOC[NN] ~ 0 ; 48300
FOR NN ~ 0 STEP 1 UNTIL 40 DO BLOCPARAM[NN] ~ 0 ; 48400
COMMENT READ PERT CONTROL CARDS ; 48500
WRITE(PRINTER[PAGE]) ; 48600
MM ~ 1 ; 48700
COMMENT READ HEADER CARD ; 48800
READ(FILECONTR,FORMCONTR,CONTROLIN)[ENDOFPROG] ; 48900
IF (CONTROL1[1] ! "PERT C") OR (CONTROL1[2] ! "ONTROL") 49000
OR (CONTROL1[3] ! " CARDS") THEN 49100
BEGIN 49200
WRITE(PRINTER[DBL],OUTCARD3,CONTROLIN) ; 49300
WRITE(PRINTER[DBL],OUTER) ; 49400
GO TO ENDOFPROG ; 49500
END ; 49600
WRITE(PRINTER[DBL],OUTCARD1, CONTROLOUT1) ; 49700
COMMENT READ COMMENT CARD ; 49800
READ(FILECONTR[NO],FORMCONTR,CONTROLIN)[ENDOFPROG] ; 49900
IF (CONTROL1[1] = "COMMEN") AND (CONTROL1[2] = "T ") 50000
THEN 50100
BEGIN 50200
READ(FILECONTR,COMMENTS,REMARK) ; 50300
WRITE(PRINTER[DBL],COMMENTS,REMARK) ; 50400
FOR LL ~ 3 STEP 1 UNTIL 10 DO INST[0,LL-3] ~ NOTES[LL] ; 50500
INST[0,8] ~ ".~ " ; 50600
TYPEOUT(SPOOUT,INST[0,*]) ; 50700
END ; 50800
COMMENT READ NUMBER OF MODULES CARD ; 50900
READ(FILECONTR,FORMCONTR,CONTROLIN)[ENDOFPROG] ; 51000
IF (CONTROL1[1] !"NUMBER") OR (CONTROL1[2] ! " OF MO") 51100
OR (CONTROL1[3] ! "DULES ") THEN 51200
BEGIN 51300
WRITE(PRINTER[DBL],OUTCARD3,CONTROLIN) ; 51400
WRITE(PRINTER[DBL],OUTMOD) ; 51500
GO TO ENDOFPROG ; 51600
END ; 51700
NOMODULES ~ CONTROL2[1] ; 51800
WRITE(PRINTER[DBL],OUTCARD2,CONTROLOUT2) ; 51900
COMMENT CALCULATE SORTARRAYSIZE ; 52000
IF (NOMODULES { 4) THEN SORTARRAYSIZE ~ 100 ELSE 52100
SORTARRAYSIZE ~ 500 ; 52200
BLOCKTOTAL ~ RSORTNUM ~ 0 ; 52300
UPDATE ~ 0 ; 52400
FOR NN ~ 1 STEP 1 UNTIL 9 DO INA[NN] ~ 0 ; 52500
FOR NN ~ 1 STEP 1 UNTIL 9 DO INE[NN] ~ 0 ; 52600
NOSORT ~ 0 ; RSORTNUM ~ 0 ; 52700
BSAVA ~ BSAVE ~ FALSE ; 52800
EVENTTAPE ~ FALSE ; 52900
SAVETAPES ~ FALSE ; 53000
COMMENT READ TAPE CARDS ; 53100
READ(FILECONTR,FORMCONTR,CONTROLIN)[ENDOFPROG] ; 53200
IF (CONTROL1[1] = "NUMBER") AND (CONTROL1[2] = " OF TA") 53300
AND (CONTROL1[3] = "PES ") THEN 53400
BEGIN 53500
WRITE(PRINTER[DBL],OUTCARD2,CONTROLOUT2) ; 53600
NTAPES ~ CONTROL2[1] ; 53700
IF (NTAPES < 3) THEN 53800
BEGIN 53900
WRITE(PRINTER[DBL],OUTTAPE) ; 54000
NTAPES ~ 3 ; 54100
END ; 54200
READ(FILECONTR,FORMCONTR,CONTROLIN)[ENDOFPROG] ; 54300
END 54400
ELSE NTAPES ~ 3 ; 54500
IF (CONTROL1[1] = "SAVE T") AND (CONTROL1[2] = "APES ") 54600
THEN 54700
BEGIN 54800
SAVETAPES ~ TRUE ; 54900
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 55000
READ(FILECONTR,FORMCONTR,CONTROLIN)[ENDOFPROG] ; 55100
END ; 55200
IF (CONTROL1[1] = "EVENT ") AND (CONTROL1[2] = "TAPE ") 55300
THEN 55400
BEGIN 55500
EVENTTAPE ~ TRUE ; 55600
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 55700
READ(FILECONTR,FORMCONTR,CONTROLIN)[ENDOFPROG] ; 55800
END ; 55900
COMMENT READ RUN TYPE CARDS ; 56000
MM ~ MM + 1 ; 56100
IF (CONTROL1[1] = "INPUT ") AND (CONTROL1[2] = "AUDIT ") 56200
THEN 56300
BEGIN 56400
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 56500
COMMENT SET PARAMETERS FOR AN INPUT AUDIT RUN ; 56600
BLOCKTOTAL ~ 4 ; 56700
FOR NN ~ 1 STEP 1 UNTIL 4 DO BLOC[NN] ~ NN + 1 ; 56800
RSORTNUM ~ 1 ; INA[1] ~ 3 ; 56900
FILL SORTCOL[0,*] WITH 0,1,0,15,15,15 ; 57000
FILL SORTCOL[1,*] WITH 0,3,12,1,2,15 ; 57100
IF EVENTTAPE THEN FILL EVENTCOL[0,*] WITH 0,1,0,10,10,10 ; 57200
GO TO L3 57300
END ; 57400
IF (CONTROL1[1] = "UPDATE") THEN 57500
BEGIN 57600
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 57700
COMMENT SET PARAMETERS FOR AN UPDATE RUN ; 57800
BLOCKTOTAL ~ 2 ; BLOC[1] ~ 1 ; BLOC[2] ~ 2 ; 57900
READ(PERTC,*,SSAVEREC1) ; 58000
IF (CONTROL1[2] = " WITH ") AND (CONTROL1[3] = "CHANGE") 58100
THEN UPDATE ~ 2 ELSE UPDATE ~ 1 ; 58200
IF EVENTTAPE AND ((UPDATE = 2) AND (EVENTCOL[0,1] ! 0)) 58300
THEN 58400
BEGIN 58500
BLOCPARAM[2] ~ 1 ; 58600
IF (EVENTCOL[0,2] ! 1) THEN 58700
BEGIN 58800
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 58900
BLOC[BLOCKTOTAL] ~ 4 ; 59000
BLOCPARAM[BLOCKTOTAL] ~ 1 ; 59100
NOSORT ~ 1 ; INE[1] ~ BLOCKTOTAL ; 59200
FILL EVENTCOL[1,*] WITH 0,1,1,10,10,10 ; 59300
END ; 59400
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 59500
BLOC[BLOCKTOTAL] ~ 4 ; BLOCPARAM[BLOCKTOTAL] ~ 2 ; 59600
NOSORT ~ NOSORT + 1 ; 59700
FILL EVENTCOL[NOSORT,*] WITH 0,1,1,10,10,10 ; 59800
END ; 59900
IF (UPDATE = 2) THEN 60000
BEGIN 60100
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 60200
BLOC[BLOCKTOTAL] ~ 3 ; 60300
BLOCPARAM[BLOCKTOTAL] ~ BLOCPARAM[2] ; 60400
END ; 60500
IF (UPDATE = 2) OR (SORTCOL[0,2] ! 12) OR 60600
(SORTCOL[0,3] ! 1) OR (SORTCOL[0,4] ! 2) THEN 60700
BEGIN 60800
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 60900
BLOC[BLOCKTOTAL] ~ 4 ; 61000
RSORTNUM ~ 1 ; 61100
INA[1] ~ BLOCKTOTAL ; 61200
FILL SORTCOL[1,*] WITH 0,3,12,1,2,15 ; 61300
END ; 61400
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 61500
BLOC[BLOCKTOTAL] ~ 5 ; 61600
GO TO L3 61700
END ; 61800
L1: IF (CONTROL1[1] = "END OF") AND (CONTROL1[2] = " JOB ") 61900
THEN 62000
BEGIN 62100
IF (MM = 2) THEN 62200
BEGIN 62300
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 62400
GO TO ENDOFPROG ; 62500
END ; 62600
GO TO EOJ ; 62700
END ; 62800
IF (CONTROL1[1] = "GENERA") AND (CONTROL1[2] = "TE REP") 62900
AND (CONTROL1[3] = "ORTS ") THEN 63000
BEGIN 63100
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 63200
IF MM = 2 THEN 63300
BEGIN 63400
COMMENT SET PARAMETERS FOR A GENERATE REPORTS RUN ; 63500
BLOCKTOTAL ~ 1 ; BLOC[1] ~ 1 ; 63600
READ(PERTC,*,SAVEREC1) ; 63700
IF SAVETAPES THEN 63800
BEGIN 63900
BSAVE ~ TRUE ; 64000
BSAVA ~ TRUE ; 64100
END ; 64200
END ; 64300
COMMENT READ REPORT CARDS ; 64400
L2: READ(FILECONTR,FORMCONTR,CONTROLIN)[ER2] ; 64500
IF (CONTROL1[1] = "END OF") AND (CONTROL1[2] = " JOB ") 64600
THEN IF (BLOCKTOTAL > 1) THEN GO TO EOJ ELSE 64700
BEGIN 64800
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 64900
GO TO ENDOFPROG ; 65000
END ; 65100
IF (BLOCKTOTAL = 39) THEN 65200
BEGIN 65300
WRITE(PRINTER[DBL],OUTBLOC) ; 65400
WRITE(PRINTER[DBL],OUTCARD3,CONTROLIN) ; 65500
GO TO ER ; 65600
END ; 65700
IF (CONTROL1[1] = "SORT ") THEN 65800
BEGIN 65900
WRITE(PRINTER[DBL],OUTCARD3,CONTROLIN) ; 66000
IF (CONTROL1[2] = "EVENTS")THEN 66100
BEGIN 66200
IF NOT EVENTTAPE THEN 66300
BEGIN 66400
WRITE(PRINTER[DBL],OUTSEVENT) ; 66500
EVENTTAPE ~ TRUE ; 66600
END ; 66700
IF (INE[NOSORT] = BLOCKTOTAL) THEN 66800
BEGIN 66900
WRITE(PRINTER[DBL],OUTSORTE) ; 67000
GO TO L2 ; 67100
END ; 67200
NOSORT ~ NOSORT + 1 ; 67300
IF NOSORT > 9 THEN 67400
BEGIN 67500
WRITE(PRINTER[DBL],OUTREPORTS) ; 67600
GO TO ER ; 67700
END ; 67800
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 67900
INE[NOSORT] ~ BLOCKTOTAL ; 68000
BLOC[BLOCKTOTAL] ~ 4 ; 68100
BLOCPARAM[BLOCKTOTAL] ~ 1 ; 68200
IF CONTROL2[1] > 4 THEN 68300
BEGIN 68400
WRITE(PRINTER[DBL],OUTSORTKEYS) ; 68500
EVENTCOL[NOSORT,1] ~ 4 ; 68600
END 68700
ELSE EVENTCOL[NOSORT,1] ~ CONTROL2[1] ; 68800
FOR NN ~ 2 STEP 1 UNTIL EVENTCOL[NOSORT,1] + 1 DO 68900
EVENTCOL[NOSORT,NN] ~ CONTROL2[NN] ; 69000
FOR NN ~ EVENTCOL[NOSORT,1] + 2 STEP 1 UNTIL 5 DO 69100
EVENTCOL[NOSORT,NN] ~ 10 ; 69200
GO TO L2 ; 69300
END ; 69400
IF (INA[RSORTNUM] = BLOCKTOTAL) THEN 69500
BEGIN 69600
WRITE(PRINTER,OUTSORTA) ; GO TO L2 ; 69700
END ; 69800
RSORTNUM ~ RSORTNUM + 1 ; 69900
IF RSORTNUM > 9 THEN 70000
BEGIN 70100
WRITE(PRINTER,OUTREPORTS) ; 70200
GO TO ER ; 70300
END ; 70400
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 70500
INA[RSORTNUM] ~ BLOCKTOTAL ; 70600
BLOC[BLOCKTOTAL] ~ 4 ; 70700
IF (CONTROL2[1] > 4) THEN 70800
BEGIN 70900
WRITE(PRINTER[DBL],OUTSORTKEYS) ; 71000
SORTCOL[RSORTNUM,1] ~ 4 ; 71100
END 71200
ELSE SORTCOL[RSORTNUM,1] ~ CONTROL2[1] ; 71300
FOR NN ~ 2 STEP 1 UNTIL SORTCOL[RSORTNUM,1] + 1 DO 71400
SORTCOL[RSORTNUM,NN] ~ CONTROL2[NN] ; 71500
FOR NN ~ SORTCOL[RSORTNUM,1] + 2 STEP 1 UNTIL 5 DO 71600
SORTCOL[RSORTNUM,NN] ~ 15 ; 71700
GO TO L2 71800
END ; 71900
IF (CONTROL1[1] = "LIST ") THEN 72000
BEGIN 72100
IF (CONTROL1[6].[12:24] = "DEPT") THEN 72200
WRITE(PRINTER[DBL],OUTCARD2,CONTROLOUT2) ELSE 72300
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 72400
IF (CONTROL1[2] = "EVENTS") OR ((CONTROL1[2] = "MILEST") 72500
AND (CONTROL1[3] = "ONES ")) THEN 72600
BEGIN 72700
IF NOT EVENTTAPE THEN 72800
BEGIN 72900
WRITE(PRINTER[DBL],OUTLEVENT) ; 73000
EVENTTAPE ~ TRUE ; 73100
END ; 73200
IF (CONTROL1[6] = "DEPT ") OR (CONTROL1[2] = "MILEST") 73300
THEN 73400
BEGIN 73500
IF (EVENTCOL[NOSORT,2] ! 1) THEN 73600
BEGIN 73700
IF (INE[NOSORT] = BLOCKTOTAL) THEN 73800
WRITE(PRINTER[DBL],OUTSORTDE) ELSE 73900
BEGIN 74000
IF (BLOCKTOTAL = 38) THEN 74100
BEGIN 74200
WRITE(PRINTER[DBL],OUTBLOC) ; 74300
GO TO ER ; 74400
END ; 74500
IF (NOSORT = 9) THEN 74600
BEGIN 74700
WRITE(PRINTER[DBL],OUTLISTDE) ; 74800
GO TO L2 ; 74900
END ; 75000
NOSORT ~ NOSORT + 1 ; 75100
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 75200
INE[NOSORT] ~ BLOCKTOTAL ; 75300
BLOC[BLOCKTOTAL] ~ 4 ; 75400
BLOCPARAM[BLOCKTOTAL] ~ 1 ; 75500
END ; 75600
FILL EVENTCOL[NOSORT,*] WITH 0,1,1,10,10,10 ; 75700
END ; 75800
IF (CONTROL1[6] = "DEPT ") THEN 75900
BEGIN 76000
BLOCPARAM[BLOCKTOTAL+1].[16:3] ~ 1 ; 76100
BLOCPARAM[BLOCKTOTAL+1].[20:3] ~ CONTROL2[1] ; 76200
END 76300
ELSE BLOCPARAM[BLOCKTOTAL+1].[16:3] ~ 2 ; 76400
END ; 76500
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 76600
BLOC[BLOCKTOTAL] ~ 6 ; 76700
BLOCPARAM[BLOCKTOTAL].[9:3] ~ 1 ; 76800
GO TO L2 ; 76900
END ; 77000
IF (CONTROL1[6].[12:24] = "DEPT") THEN 77100
BEGIN 77200
IF ((CONTROL1[6].[42:6] = "J") AND (SORTCOL[RSORTNUM,2] 77300
! 2)) OR (SORTCOL[RSORTNUM,2] ! 1) THEN 77400
BEGIN 77500
IF (INA[RSORTNUM] = BLOCKTOTAL) THEN 77600
WRITE(PRINTER[DBL],OUTSORTA) ELSE 77700
BEGIN 77800
IF (BLOCKTOTAL = 38) THEN 77900
BEGIN 78000
WRITE(PRINTER[DBL],OUTBLOC) ; 78100
GO TO ER ; 78200
END ; 78300
IF (RSORTNUM = 9) THEN 78400
BEGIN 78500
WRITE(PRINTER[DBL],OUTLISTDA) ; 78600
GO TO L2 ; 78700
END ; 78800
RSORTNUM ~ RSORTNUM + 1 ; 78900
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 79000
INA[RSORTNUM] ~ BLOCKTOTAL ; 79100
BLOC[BLOCKTOTAL] ~ 4 ; 79200
END ; 79300
IF (CONTROL1[6].[42:6] = "J")THEN 79400
FILL SORTCOL[RSORTNUM,*] WITH 0,1,2,15,15,15 79500
ELSE FILL SORTCOL[RSORTNUM,*] WITH 0,1,1,15,15,15 ; 79600
END ; 79700
IF (CONTROL1[6].[42:6] = "J")THEN 79800
BLOCPARAM[BLOCKTOTAL + 1].[16:3] ~ 2 ELSE 79900
BLOCPARAM[BLOCKTOTAL + 1].[16:3] ~ 1 ; 80000
BLOCPARAM[BLOCKTOTAL + 1].[20:3] ~ CONTROL2[1] ; 80100
END ; 80200
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 80300
BLOC[BLOCKTOTAL] ~ 6 ; 80400
FOR NN ~ 3,4 DO 80500
BEGIN 80600
IF (CONTROL1[NN] = "DUMMY ") THEN 80700
BLOCPARAM[BLOCKTOTAL] ~ BLOCPARAM[BLOCKTOTAL] +1 ; 80800
IF (CONTROL1[NN] = "COMPL ") THEN 80900
BLOCPARAM[BLOCKTOTAL] ~ BLOCPARAM[BLOCKTOTAL] + 2 81000
END ; 81100
GO TO L2 81200
END ; 81300
IF (CONTROL1[1] = "PLOT ") THEN 81400
BEGIN 81500
IF (CONTROL1[6].[12:24] = "DEPT") THEN 81600
WRITE(PRINTER[DBL],OUTCARD3,CONTROLOUT3) ELSE 81700
WRITE(PRINTER[DBL],OUTCARD2,CONTROLOUT2) ; 81800
IF (CONTROL1[6].[12:24] = "DEPT") THEN 81900
BEGIN 82000
IF ((CONTROL1[6].[42:6] = "J") AND (SORTCOL[RSORTNUM,2] 82100
! 2)) OR (SORTCOL[RSORTNUM,2] ! 1) THEN 82200
BEGIN 82300
IF (INA[RSORTNUM] = BLOCKTOTAL) THEN 82400
WRITE(PRINTER[DBL],OUTSORTDA) ELSE 82500
BEGIN 82600
IF(BLOCKTOTAL = 38) THEN 82700
BEGIN 82800
WRITE(PRINTER[DBL],OUTBLOC) ; 82900
GO TO ER ; 83000
END ; 83100
IF RSORTNUM = 9 THEN 83200
BEGIN 83300
WRITE(PRINTER[DBL],OUTPLOT) ; 83400
GO TO L2 ; 83500
END ; 83600
RSORTNUM ~ RSORTNUM + 1 ; 83700
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 83800
INA[RSORTNUM] ~ BLOCKTOTAL ; 83900
BLOC[BLOCKTOTAL] ~ 4 ; 84000
END ; 84100
IF (CONTROL1[5].[42:6] = "J") THEN 84200
FILL SORTCOL[RSORTNUM,*] WITH 0,1,2,15,15,15 84300
ELSE FILL SORTCOL[RSORTNUM,*] WITH 0,1,1,15,15,15 ; 84400
END ; 84500
IF (CONTROL1[5].[42:6] = "J") THEN 84600
BLOCPARAM[BLOCKTOTAL+1].[16:3] ~ 2 ELSE 84700
BLOCPARAM[BLOCKTOTAL+1].[16:3] ~ 1 ; 84800
BLOCPARAM[BLOCKTOTAL+1].[20:3] ~ CONTROL2[2] ; 84900
END ; 85000
IF (CONTROL1[5] = "DAYS ") THEN 85100
BLOCPARAM[BLOCKTOTAL+1].[9:3] ~ 1 ELSE 85200
IF (CONTROL1[5] = "WEEKS ") THEN 85300
BLOCPARAM[BLOCKTOTAL+1].[9:3] ~ 2 ELSE 85400
IF (CONTROL1[5] = "MONTHS") THEN 85500
BLOCPARAM[BLOCKTOTAL + 1].[9:3] ~ 3 ELSE 85600
IF (CONTROL1[5] = "QTRS ") THEN 85700
BLOCPARAM[BLOCKTOTAL+1].[9:3] ~ 4 ELSE 85800
BEGIN 85900
WRITE(PRINTER,OUTPLOT) ; GO TO L2 86000
END ; 86100
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 86200
BLOC[BLOCKTOTAL] ~ 7 ; 86300
FOR NN ~ 3,4 DO 86400
BEGIN 86500
IF (CONTROL1[NN] = "DUMMY ") THEN 86600
BLOCPARAM[BLOCKTOTAL].[12:3] ~ 86700
BLOCPARAM[BLOCKTOTAL].[12:3] + 1 ; 86800
IF (CONTROL1[NN] = "COMPL ") THEN 86900
BLOCPARAM[BLOCKTOTAL].[12:3] ~ 87000
BLOCPARAM[BLOCKTOTAL].[12:3] + 2 ; 87100
END ; 87200
BLOCPARAM[BLOCKTOTAL].[24:24] ~ CONTROL2[1].[24:24] ; 87300
GO TO L2 87400
END 87500
END ; 87600
WRITE(PRINTER[DBL],OUTCARD3,CONTROLIN) ; 87700
WRITE(PRINTER[DBL],OUTER) ; 87800
IF (BLOCKTOTAL } 2) THEN GO TO ER ELSE GO TO ENDOFPROG ; 87900
COMMENT READ OPTION CARDS FOR INPUT AUDIT OR UPDATE RUNS ; 88000
L3: READ(FILECONTR,FORMCONTR,CONTROLIN)[ER2] ; 88100
IF (CONTROL1[1] = "DATA O") AND (CONTROL1[2] = "N TAPE") 88200
THEN 88300
BEGIN 88400
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 88500
IF (UPDATE = 0) THEN BLOCPARAM[1].[40:3] ~ 1 88600
ELSE BLOCPARAM[2].[40:3] ~ 1 ; 88700
GO TO L3 ; 88800
END ; 88900
IF (CONTROL1[1] = "ONE TI") AND (CONTROL1[2] = "ME ") 89000
THEN 89100
BEGIN 89200
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 89300
ONETIME ~ TRUE ; GO TO L3 ; 89400
END ; 89500
IF (CONTROL1[1] = "LIST E") AND (CONTROL1[2] = "ND TAL") 89600
AND (CONTROL1[3] = "LIES ") THEN 89700
BEGIN 89800
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 89900
LISTTAL ~ TRUE ; GO TO L3 ; 90000
END ; 90100
COMMENT SET GLOBAL PARAMETERS ; 90200
IF UPDATE = 0 THEN 90300
BEGIN 90400
CHAINLENGTH ~ MAXNOACT ~ MAXNOEVN ~ 511 ; 90500
NUMENDING ~ NUMSTARTING ~ 10 ; WDPW ~ 5 ; 90600
END ; 90700
L4: MM ~ MM + 1 ; 90800
IF (CONTROL1[1] = "CHAIN ") AND (CONTROL1[2] = "LENGTH") 90900
THEN CHAINLENGTH ~ CONTROL2[1] ELSE 91000
IF (CONTROL1[2] = " ACTIV") AND (CONTROL1[3] = "ITIES ") 91100
THEN MAXNOACT ~ CONTROL2[1] ELSE 91200
IF (CONTROL1[2] = " EVENT") AND (CONTROL1[3] = "S ") 91300
THEN MAXNOEVN ~ CONTROL2[1] ELSE 91400
IF (CONTROL1[1] = "WORKIN") AND (CONTROL1[2] = "G DAYS") 91500
AND (CONTROL1[3] = " PER W") AND (CONTROL1[4] = 91600
"EEK ") THEN 91700
BEGIN 91800
WDPW ~ CONTROL2[1] ; 91900
IF (WDPW > 7) OR (WDPW < 1) THEN 92000
BEGIN 92100
WRITE(PRINTER[DBL],OUTCARD2,CONTROLOUT2) ; 92200
WRITE(PRINTER[DBL],OUTWDPW) ; 92300
GO TO ENDOFPROG ; 92400
END 92500
END ELSE 92600
IF (CONTROL1[2] = " ENDIN") AND (CONTROL1[3] = "G EVEN") 92700
AND (CONTROL1[4] = "TS ") THEN NUMENDING ~ 92800
CONTROL2[1] ELSE 92900
IF (CONTROL1[2] = " START") AND (CONTROL1[3] = "ING EV") 93000
AND (CONTROL1[4] = "ENTS ") THEN NUMSTARTING ~ 93100
CONTROL2[1] ELSE GO TO L1 ; 93200
WRITE(PRINTER[DBL],OUTCARD2,CONTROLOUT2) ; 93300
READ(FILECONTR,FORMCONTR,CONTROLIN)[ER2] ; 93400
IF MM < 8 THEN GO TO L4 ; 93500
GO TO L1 ; 93600
ER: READ(FILECONTR,FORMCONTR,CONTROLIN)[ER2] ; 93700
IF (CONTROL1[1] ! "END OF") AND (CONTROL1[2] ! " JOB ") 93800
THEN 93900
BEGIN 94000
WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 94100
GO TO ER ; 94200
END ; 94300
EOJ: WRITE(PRINTER[DBL],OUTCARD1,CONTROLOUT1) ; 94400
BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 94500
BLOC[BLOCKTOTAL] ~ 8 ; 94600
READ(FILECONTR,FORMCONTR,CONTROLIN)[L5] ; 94700
WRITE(PRINTER[DBL],OUTEOF) ; 94800
ER4: WRITE(PRINTER[DBL],OUTCARD3,CONTROLIN) ; 94900
READ(FILECONTR,FORMCONTR,CONTROLIN)[L5] ; 95000
GO TO ER4 ; 95100
ER2: IF BLOCKTOTAL < 40 THEN BLOCKTOTAL ~ BLOCKTOTAL + 1 ; 95200
BLOC[BLOCKTOTAL] ~ 8 ; 95300
L5: END CONTROL BLOCK ; 95400
BEGIN 95500
COMMENT 95600
DEFINITIONS OF GLOBAL VARIABLES 95700
EK NUMBER OF ENDING EVENTS 95800
BK NUMBER OF STARTING EVENTS 95900
TP TEMPORARY TAPEKEY 96000
REEV ARRAY CONTAINING RENUMBERED ENDING EVENTS 96100
RBEV ARRAY CONTAINING RENUMBERED STARTING EVENTS 96200
EVENT ARRAY CONTAINING EVENT NUMBERS 96300
RIRJ PACKED ARRAY CONTAINING RENUMBERED PREDECESSOR 96400
AND SUCCESSOR EVENT NUMBERS FOR EACH ACTIVITY 96500
; 96600
INTEGER EK,BK,TP ; 96700
INTEGER ARRAY REEV[0:NUMENDING],RBEV[0:NUMSTARTING] ; 96800
INTEGER ARRAY EVENT[0:MAXNOEVN.[30:9],0:IF MAXNOEVN.[30:9] = 0 THEN 96900
MAXNOEVN.[39:9] ELSE 511] , 97000
RIRJ[0:MAXNOACT.[30:9],0:IF MAXNOACT.[30:9] = 0 97100
THEN MAXNOACT.[39:9] ELSE 511] ; 97200
LIST TREC(KEY,I,J,RRIJ,ET,VAR,ASD,ADAYS,ES,LF,SL,SVAR,RANKI, 97300
TAL,FOR LL ~ 1 STEP 1 UNTIL 4 DO REMARKS[LL]) ; 97400
LIST EREC(RN,EVNO,RANKE,EEO,EVAR,LEO,SLCK,TALLY,FOR LL ~ 1 STEP 97500
1 UNTIL 4 DO DSCPT[LL]) ; 97600
LIST SAVEREC2(FOR LL ~ 0 STEP 1 UNTIL NOACTCOL DO 97700
RIRJ[K,LL]), 97800
SAVEREC3(FOR LL ~ 0 STEP 1 UNTIL NOEVNCOL DO EVENT[K,LL]); 97900
LABEL BLOCK1,BLOCK2,BLOCK3,BLOCK4,BLOCK5,BLOCK6,BLOCK7, 98000
ORIGIN,FINISH ; 98100
SWITCH BLOCKCONTROL ~ BLOCK1,BLOCK2,BLOCK3,BLOCK4,BLOCK5,BLOCK6, 98200
BLOCK7,FINISH ; 98300
IF EVENTTAPE THEN 98400
FILL EVENTITEM[*] WITH " RENUM"," EVENT"," RANK", 98500
" EEO"," EVAR"," LEO"," SLACK"," TALLY", 98600
" "," "," " ; 98700
RSORTNUM ~ 0 ; 98800
NOBLOCK ~ 0 ; 98900
NCPR ~ 12 ; 99000
NWPR ~ 19 ; 99100
NOSORT ~ 0 ; 99200
COMMENT CONTROL ROUTINE ; 99300
ORIGIN: NOBLOCK ~ NOBLOCK + 1 ; 99400
GO TO BLOCKCONTROL[BLOC[NOBLOCK]] ; 99500
BLOCK1: BEGIN 99600
COMMENT READ SAVE RECORDS BLOCK ; 99700
FOR K ~ 0 STEP 1 UNTIL NOACTROW DO 99800
READ(PERTC,*,SAVEREC2) ; 99900
FOR K ~ 0 STEP 1 UNTIL NOEVNROW DO 100000
READ(PERTC,*,SAVEREC3) ; 100100
IF SAVETAPES THEN 100200
BEGIN 100300
LOCK(PERTC,SAVE) ; 100400
INST[1,0] ~ FILENAMES[3] ; 100500
TYPEOUT(SPOOUT,INST[1,*]) ; TYPEOUT(SPOOUT,INST[5,*]) ; 100600
END 100700
ELSE PURGE(PERTC,1) ; 100800
END ; 100900
GO TO ORIGIN ; 101000
BLOCK2: BEGIN 101100
COMMENT 101200
DEFINITIONS OF VARIABLES IN AUDIT BLOCK 101300
OT OPTIMISTIC TIME ESTIMATE 101400
ML MOST LIKELY TIME ESTIMATE 101500
PT PESSIMISTIC TIME ESTIMATE 101600
BOOL2 BOOLEAN FLAG, TRUE IF ERROR FOUND IN AUDIT BLOCK 101700
BOOL4 BOOLEAN FLAG, TRUE IF ERROR IN TIME ESTIMATES 101800
WEEKFLAG BOOLEAN FLAG, TRUE IF TIME ESTIMATES ARE GIVEN 101900
IN WEEKS 102000
BTAPE BOOLEAN FLAG, TRUE IF ACTIVITY BEING AUDITED 102100
WAS READ FROM ACTIVITY TAPE FILE 102200
ASDAT ACTIVITY DATE 102300
DAS DAY OF THE MONTH OF NETWORK START DATE 102400
MOS MONTH NUMBER OF NETWORK START DATE 102500
YRS YEAR OF NETWORK START DATE 102600
DAR DAY OF THE MONTH OF NETWORK REPORT DATE 102700
MOR MONTH NUMBER OF REPORT DATE 102800
YRR YEAR OF REPORT DATE 102900
DAA DAY OF THE MONTH OF ACTIVITY DATE 103000
MOA MONTH NUMBER OF ACTIVITY DATE 103100
YRA YEAR OF ACTIVITY DATE 103200
NINES 9999999999 103300
CSDATE CORRECTED NETWORK START DATE 103400
CRDATE CORRECTED REPORT DATE 103500
CASDATE CORRECTED ACTIVITY DATE 103600
SWER FLAG TO DENOTE TYPE OF ERROR IN AN AUDITED DATE 103700
IKEY KEY NUMBER OF ACTIVITY CARD 103800
CODE FLAG TO DENOTE TYPE OF ACTIVITY CARD 103900
0 INITIAL ACTIVITES FOR INPUT AUDIT RUN 104000
1 UPDATE ACTIVITY TIMES 104100
2 ADD NEW ACTIVITY 104200
3 DELETE ACTIVITY 104300
NLINE NUMBER OF LINES PRINTED ON PAGE BY PRINTER 104400
TLINE TOTAL NUMBER PRINTED LINES ALLOWED PER PAGE 104500
PAGEN PAGE NUMBER 104600
SI PREDECESSOR EVENT NUMBER ON ACTIVITY TAPE FILE 104700
SJ SUCCESSOR EVENT NUMBER ON ACTIVITY TAPE FILE 104800
SASD FLAG ON ACTIVITY TAPE FILE DENOTING TYPE OF 104900
ACTIVITY DATE 105000
TAPEKEY KEY OF NEXT ACTIVITY ON ACTIVITY TAPE FILE 105100
TKEY INDEX FOR READING ACTIVITY TAPE FILE 105200
DELETEKEYS NUMBER OF DELETED ACTIVITIES 105300
AC TAPE KEY REFERRING TO NETWORK DATA FILE 105400
DPM ARRAY CONTAINING NUMBER OF DAYS IN EACH MONTH 105500
TALLIES PACKED ARRAY CONTAINING NUMBER OF TIMES 105600
RENUMBERED EVENTS ARE USED AS PREDECESSORS AND 105700
SUCCESSORS OF ACTIVITIES AND NUMBER OF PRECEDING 105800
ACTIVITIES THAT HAVE BEEN COMPLETED 105900
SHEAD ARRAY CONTAINING SCRAMBLE TABEL FOR RENUMBERING 106000
MONTH ARRAY CONTAINING ABBREVIATION OF EACH MONTH 106100
SREMARKS ARRAY CONTAINING ACTIVITY DESCRIPTION ON 106200
ACTIVITY TAPE FILE 106300
ITEMS ARRAY CONTAINING TYPE OF NETWORK DATA - EVENTS 106400
OR ACTIVITIES 106500
K,L,KR,KC,KRI,KCI,KRJ,KCJ INDICES OF ARRAYS 106600
TEMP,TEMP1 TEMPORARY LOCAL VARIABLES 106700
; 106800
COMMENT AUDIT BLOCK ; 106900
REAL OT,ML,PT; 107000
BOOLEAN BOOL2,BOOL4 ; 107100
BOOLEAN WEEKFLAG ; 107200
BOOLEAN BTAPE ; 107300
LABEL START,LL1,LL2,LL4,LL5,ERR11,ERR12,ERR13,ERR21,ERR22,ERR23, 107400
LL3,EOF,LL1A,LL2A ; 107500
LABEL CODE1 ; 107600
LABEL CODE3 ; 107700
LABEL LL1B,LL2B ; 107800
LABEL LL6,LL7 ; 107900
LABEL LOOP2,LL5A,LOOP3,EOF3 ; 108000
INTEGER ASDAT,DAS,MOS,YRS,DAR,MOR,YRR,DAA,MOA,YRA,NINES,CSDATE, 108100
CRDATE,CASDAT,SWER,TEMP1,K,L ; 108200
INTEGER IKEY,CODE ; 108300
INTEGER NLINE,TLINE,PAGEN ; 108400
INTEGER KR,KC,TEMP ; 108500
INTEGER SI,SJ,SASD,TAPEKEY ; 108600
INTEGER TKEY,DELETEKEYS ; 108700
INTEGER AC ; 108800
INTEGER ARRAY DPM[0:12] ; 108900
INTEGER ARRAY TALLIES[0:MAXNOEVN.[30:9],0:IF MAXNOEVN.[30:9] = 0 THEN 109000
MAXNOEVN ELSE 511] ; 109100
INTEGER ARRAY SHEAD[0:100] ; 109200
ALPHA ARRAY MONTH[0:12],SREMARKS[0:4] ; 109300
ALPHA ARRAY ITEMS[0:2] ; 109400
SWITCH SW1 ~ LL3,ERR11,ERR12,ERR13 ; 109500
SWITCH SW2 ~ LL4,ERR21,ERR22,ERR23 ; 109600
SWITCH SW3 ~ CODE1,LL1A,CODE3 ; 109700
FILE IN CARDR(2,10) ; 109800
FILE IN TAPER(2,56,10) ; 109900
SWITCH FILE SWA ~ CARDR,TAPER ; 110000
LIST DATA1(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],RUN,SDATE, 110100
RDATE,PERIOD), 110200
DATA2(IKEY,I,J,OT,ML,PT,ASDAT,ASD,FOR LL ~ 1 STEP 1 UNTIL 110300
4 DO REMARKS[LL],CODE) , 110400
OUTER41(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL]), 110500
OUTERACT(I,J), 110600
STREC(KEY,SI,SJ,RRIJ,ET,VAR,SASD,ADAYS,ES,LF,SL,SVAR, 110700
RANKI,TAL,FOR LL ~ 1 STEP 1 UNTIL 4 DO SREMARKS[LL]), 110800
OUTH(PAGEN,FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],RUN, 110900
DAS,MONTH[MOS],YRS,DAR,MONTH[MOR],YRR,PERIOD), 111000
OUT1(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],PAGEN), 111100
OUT3(NOACT,MINEV,NOEVN,MAXEV) ; 111200
LIST DATA3(FOR LL ~ 1 STEP 1 UNTIL 2 DO ITEMS[LL]), 111300
DATA4(EVNO,FOR LL ~ 1 STEP 1 UNTIL 4 DO DSCPT[LL]) ; 111400
LIST ENDEVENT(EVENT[KR,KC],TALLIES[KR,KC].[30:9]), 111500
STARTEVENT(EVENT[KR,KC],TALLIES[KR,KC].[21:9]), 111600
NET(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL]), 111700
TALS(EVENT[KR,KC],TALLIES[KR,KC].[30:9], 111800
TALLIES[KR,KC].[21:9],TALLIES[KR,KC].[39:9]) ; 111900
FORMAT IN FIN1(13A6,X2/I10,2I7,X3,A5), 112000
FIN2(I6,2I10,3F7.1,I6,I1,4A6,I2) ; 112100
FORMAT IN FIN3(2A6), 112200
FIN4(I10,X5,4A6) ; 112300
FORMAT OUT FORMH(////////////////////"TIME P.E.R.T. - INPUT AND ", 112400
"AUDIT OF ACTIVITY CARDS",X61,"PAGE",I6///"NETWORK ", 112500
"NAME",X3,13A6,X10,"RUN",I10///"START DATE ",I3,X1, 112600
A3,I3,X4,"REPORT DATE ",I3,X1,A3,I3,X4,"UNITS OF ", 112700
"TIME ",A5), 112800
FOUT1("NETWORK NAME",X3,13A6,X17,"PAGE",I6), 112900
FOUT2(I6,2I11,3F8.1,I7,I4,X2,4A6,I4), 113000
FOUT3("NUMBER OF ACTIVITES",I7,X5, 113100
"MINIMUM EVENT NUMBER",I11/ 113200
"NUMBER OF EVENTS",I10,X5, 113300
"MAXIMUM EVENT NUMBER",I11), 113400
SPO3("ERRORS WERE DETECTED") , 113500
FOUT4(I10,X5,4A6), 113600
FORMH4("LISTING OF ACTIVITY CARDS"//X3,"KEY",X7,"PRED",X7, 113700
"SUCC OT",X6,"ML",X6,"PT DATE TYPE ", 113800
"ACTIVITY DESCRIPTION CODE"/), 113900
FORMH5("LISTING OF EVENT CARDS"//"EVENT NUMBER",X10, 114000
"EVENT DESCRIPTION"/), 114100
TAPEERROR("EVENT DESCRIPTION CARDS ARE PRESENT ALTHOUGH ", 114200
"NO EVENT TAPE IS SPECIFIED"/"AN EVENT TAPE IS ", 114300
"ASSUMED"/), 114400
UPDATEERROR("EVENT TAPE IS TO BE UPDATED ALTHOUGH ", 114500
"NETWORK CHANGES ARE NOT SPECIFIED"/"CHANGES ARE ", 114600
"ASSUMED"/) ; 114700
FORMAT OUT ENDERROR("ENDING EVENT",I10," HAS",I5," ACTIVITIES ", 114800
"LEADING INTO IT. ONLY ONE IS PERMITTED."), 114900
STARTERROR("STARTING EVENT",I10," HAS",I5," ACTIVITIES ", 115000
"LEADING FROM IT. ONLY ONE IS PERMITTED."), 115100
HEADNET(13A6), 115200
HEADTALS(X21,"NO. PRED. NO. SUCC. NO. COM."/X10, 115300
"EVENT",X8,"EVENTS",X9,"EVENTS PRED. EVENTS"), 115400
OUTTALS(4I15), 115500
STARTINGERROR("TOO FEW STARTING EVENTS WERE ESTIMATED"), 115600
ENDINGERROR("TOO FEW ENDING EVENTS WERE ESTIMATED") ; 115700
FORMAT OUT ERROR1("PRED EVENT NO. OUT OF RANGE") , 115800
ERROR2("SUCC EVENT NO. OUT OF RANGE") , 115900
ERROR5("SUCC EVENT NO. EQUALS PRED EVENT NO.") , 116000
ERROR6("OT IS GREATER THAN ML , OT SET EQUAL TO ML") , 116100
ERROR7("ML IS GREATER THAN PT , PT SET EQUAL TO ML") , 116200
ERROR8("THE CORRECTED ACTIVITY RECORD IS AS FOLLOWS") , 116300
ERROR9("INVALID NETWORK START DATE") , 116400
ERROR10("INVALID NETWORK REPORT DATE") , 116500
ERROR11("REPORT DATE EARLIER THAN START DATE,SET EQUAL") , 116600
ERROR12("ACTUAL START DATE LATER THAN REPORT DATE ", 116700
", SET EQUAL") , 116800
ERROR13("ACTUAL COMP. DATE LATER THAN REPORT DATE ", 116900
", SET EQUAL") , 117000
ERROR14("DIRECTED START DATE EARLIER THAN REPORT DATE ", 117100
", SET EQUAL") , 117200
ERROR15("SCHEDULE DATE EARLIER THAN REPORT DATE , SET" , 117300
" EQUAL") , 117400
ERROR16("INVALID ACTUAL START DATE") , 117500
ERROR17("INVALID COMPLETION DATE") , 117600
ERROR18("INVALID DIRECTED START DATE") , 117700
ERROR19("INVALID SCHEDULE DATE") , 117800
ERROR20("ACTUAL START DATE EARLIER THAN NETWORK START ", 117900
"DATE , SET EQUAL") , 118000
ERROR21("ACTUAL COMPLETION DATE EARLIER THAN NETWORK ", 118100
"START DATE, SET EQUAL") , 118200
ERROR24("OT IS ZERO AND ML IS NON-ZERO , SET EQUAL") , 118300
ERROR25("NETWORK START DATE IS NOT A WORKING DAY") , 118400
ERROR26("NETWORK REPORT DATE IS NOT A WORKING DAY"), 118500
ERROR27("ACTUAL START DATE NOT A WORKING DAY") , 118600
ERROR28("ACTUAL COMP. DATE NOT A WORKING DAY") , 118700
ERROR29("DIRECTED START DATE NOT A WORKING DAY") , 118800
ERROR30("SCHEDULE DATE NOT A WORKING DAY") , 118900
ERROR33("NETWORK START DATE IS NOT VALID OR A WORKING " , 119000
"DAY") , 119100
ERROR34("REPORT DATE IS NOT VALID OR A WORKING DAY") , 119200
ERROR35("ACTUAL START DATE IS NOT VALID OR A WORKING DAY" 119300
) , 119400
ERROR36("ACTUAL COMP. DATE IS NOT VALID OR A WORKING ", 119500
"DAY") , 119600
ERROR37("DIRECTED START DATE IS NOT VALID OR A WORKING ", 119700
"DAY") , 119800
ERROR38("SCHEDULE DATE IS NOT VALID OR A WORKING DAY") , 119900
ERROR39("NO. OF ACTIVITIES EXCEEDS MAX NO. ALLOWED"), 120000
ERROR40("NO. OF EVENTS EXCEEDS MAX NO. ALLOWED"), 120100
ERROR41(13A6/"NETWORK NAME FOR UPDATE DIFFERENT FROM ", 120200
"NETWORK NAME ON TAPE. UPDATE NOT PERFORMED"/), 120300
ERROR42("NETWORK STARTING DATE FOR UPDATE DIFFERENT FROM", 120400
"STARTING DATE ON TAPE. TAPE STARTING DATE USED."), 120500
ERROR43("CHANGES WERE MADE IN THE NETWORK ALTHOUGH ", 120600
"UNSPECIFIED."), 120700
ERROR44("UPDATE ACTIVITIES OUT OF SEQUENCE. ACTIVITY ", 120800
"IGNORED"), 120900
ERROR45("NO ACTIVITIES CARD BEFORE ACTIVITY DATA CARDS"), 121000
ERROR46("ACTIVITY ",I10," TO",I10," NOT A STARTING ", 121100
"ACTIVITY, DIRECTED START DATE NOT PERMITTED"), 121200
ERROR47("ACTIVITY ",I10," TO",I10," NOT AN ENDING ", 121300
"ACTIVITY, SCHEDULE DATE NOT PERMITTED") ; 121400
PROCEDURE UNPACK(MODAYR,SDAYS,WDPW,DPM,MO,DA,YR,DAYS,CMODAYR,SWER) ; 121500
COMMENT THIS PROCEDURE UNPACKS DATE MODAYR INTO MONTH NO., DAY, 121600
AND YEAR AND CALCULATES NO. OF WORKING DAYS FROM SDAYS ; 121700
COMMENT 121800
DEFINITION OF VARIABLES IN PROCEDURE UNPACK 121900
MODAYR DATE TO BE UNPACKED 122000
SDAYS NUMBER OF WORKING DAYS FROM 1/1/62 TO A GIVEN 122100
DATE 122200
WDPW NUMBER OF WORKING DAYS PER WEEK 122300
MO MONTH NUMBER OF MODAYR 122400
DA DAY OF THE MONTH OF MODAYR 122500
YR YEAR OF MODAYR 122600
DAYS NUMBER OF WORKING DAYS FROM A GIVEN DATE UNTIL 122700
MODAYR 122800
CMODAYR NEAREST VALID CALEDAR DATE TO MODAYR 122900
SWER FLAG DENOTING TYPE OF ERROR IN DATE MODAYR 123000
DPM ARRAY CONTAINING NUMBER OF DAYS IN EACH MONTH 123100
TEMP NUMBER OF YEARS FROM NEAREST LEAP YEAR TO YR 123200
YEARS NUMBER OF YEARS FROM 62 TO YR 123300
TYEARS NUMBER OF YEARS FROM 61 TO YR 123400
LYEARS NUMBER OF LEAP YEARS FROM 61 TO YR 123500
RYEARS NUMBER OF NON-LEAP YEARS FROM 61 TO YR 123600
YDAYS NUMBER OF DAYS IN YEARS 123700
MDAYS NUMBER OF DAYS FROM FIRST DAY OF YR UNTIL THE 123800
FIRST DAY OF MONTH MO 123900
WEEKS NUMBER OF WHOLE WORKING WEEKS FROM 1/1/62 UNTIL 124000
MODAYR 124100
REMDA DAYS NOT INCLUDEDED IN WEEKS 124200
BOOL BOOLEAN FLAG, TRUE IF ERROR IN DATE 124300
I INDEX OF ARRAY DPM 124400
; 124500
VALUE MODAYR,SDAYS,WDPW ; 124600
INTEGER MODAYR,SDAYS,WDPW,MO,DA,YR,DAYS,CMODAYR,SWER ; 124700
INTEGER ARRAY DPM[0] ; 124800
BEGIN 124900
INTEGER TEMP,YEARS,TYEARS,LYEARS,RYEARS,YDAYS,MDAYS,I,WEEKS, 125000
REMDA ; 125100
BOOLEAN BOOL ; 125200
LABEL L1,L2,L3,L4,L5,L6,L7 ; 125300
BOOL ~ FALSE ; 125400
COMMENT UNPACK MODAYR INTO MONTH NO, DAY, AND YEAR ; 125500
YR ~ MODAYR MOD 100 ; 125600
SWER ~ 1 ; 125700
MO ~ MODAYR DIV 10000 ; 125800
DA ~ MODAYR DIV 100 MOD 100 ; 125900
COMMENT CHECK VALIDITY OF DATE ; 126000
IF YR } 62 THEN GO TO L1 ; 126100
YR ~ 62 ; MO ~ DA ~ 1 ; 126200
BOOL ~ TRUE ; GO TO L6 ; 126300
L1: IF YR { 80 THEN GO TO L2 ; 126400
YR ~ 80 ; MO ~ 12 ; DA ~ 31 ; 126500
BOOL ~ TRUE ; GO TO L6 ; 126600
L2: IF MO } 1 THEN GO TO L3 ; 126700
MO ~ DA ~ 1 ; BOOL ~ TRUE ; GO TO L6 ; 126800
L3: IF MO { 12 THEN GO TO L4 ; 126900
MO ~ 12 ; DA ~ 31 ; BOOL ~ TRUE ; GO TO L6 ; 127000
L4: IF DA } 1 THEN GO TO L5 ; 127100
DA ~ 1 ; BOOL ~ TRUE ; GO TO L6 ; 127200
L5: IF DA { DPM[MO] THEN GO TO L6 ; 127300
TEMP ~ YR MOD 4 ; 127400
IF (MO = 2) AND (TEMP = 0) AND (DA = 29) THEN GO TO L6 ; 127500
DA ~ DPM[MO] ; BOOL ~ TRUE ; 127600
L6: YEARS ~ YR - 62 ; 127700
COMMENT CALCULATE NO. OF WORKING DAYS SINCE SDAYS ; 127800
IF (YEARS = 0) AND (MO = 1) THEN 127900
BEGIN 128000
DAYS ~ DA ; GO TO L7 128100
END ; 128200
TYEARS ~ YEARS + 1 ; 128300
LYEARS ~ TYEARS DIV 4 ; 128400
RYEARS ~ YEARS - LYEARS ; 128500
YDAYS ~ (365 | RYEARS)+(366 | LYEARS) ; 128600
MDAYS ~ 0 ; 128700
FOR I ~ 1 STEP 1 UNTIL MO-1 DO MDAYS ~ MDAYS + DPM[I] ; 128800
IF (YR MOD 4 = 0) AND (MO > 2) THEN MDAYS ~ MDAYS + 1 ; 128900
DAYS ~ YDAYS + MDAYS + DA ; 129000
L7: CMODAYR ~ 0 ; 129100
WEEKS ~ DAYS DIV 7 ; 129200
REMDA ~ DAYS - (WEEKS | 7) ; 129300
DAYS ~ (WEEKS | WDPW) + REMDA - SDAYS ; 129400
IF BOOL THEN CMODAYR ~ MO | 10000 + DA | 100 + YR ; 129500
COMMENT CHECK THAT DATE IS A WORKING DAY ; 129600
IF ( ( WDPW ! 7) AND((REMDA > WDPW) OR (REMDA = 0))) 129700
THEN 129800
BEGIN 129900
IF BOOL THEN SWER ~ 4 ELSE SWER ~ 3 130000
END ; 130100
IF BOOL THEN SWER ~ 2 130200
END UNPACK ; 130300
PROCEDURE RENUMBER ; 130400
COMMENT THIS PROCEDURE RENUMBERS EVENTS ; 130500
COMMENT 130600
DEFINITIONS OF VARIABLES USED IN THE PROCEDURE RENUMBER 130700
SCRAMBLEINDEX INDEX FOR ARRAY SHEAD 130800
M,MM TEMPORARY LOCAL VARIABLES 130900
LIFO BOOLEAN VARIABLE, TRUE IF EVENT NUMBERS ARE TO 131000
BE CHECKED FROM LAST TO FIRST 131100
THIS PROCEDURE USES THE FOLLOWING VARIABLES DECLARED IN 131200
OUTER BLOCKS 131300
EVENT,MAXNOEVN,NOEVN,TALLIES,SHEAD 131400
EVNO,EVENTTAPE,RN 131500
; 131600
BEGIN 131700
INTEGER SCRAMBLEINDEX,M,MM ; 131800
BOOLEAN LIFO ; 131900
LABEL RETEST,RETURN ; 132000
DEFINE I = M.[30:9],M.[39:9]#, 132100
II = MM.[30:9],MM.[39:9]#, 132200
DEFTALI = TALLIES[I].[3:18]#, 132300
DEFTALII = TALLIES[II].[3:18]# ; 132400
LIFO ~ TRUE ; 132500
SCRAMBLEINDEX ~ (EVNO.[42:6] + EVNO.[36:6] + EVNO.[30:6] + 132600
EVNO.[24:6] + EVNO.[18:6] + EVNO.[12:6] + EVNO.[6:6]) 132700
MOD 100 ; 132800
M ~ SHEAD[SCRAMBLEINDEX] ; 132900
IF M = 0 THEN 133000
BEGIN 133100
IF NOEVN = MAXNOEVN THEN 133200
BEGIN 133300
WRITE(PRINTER,ERROR40) ; 133400
GO TO FINISH ; 133500
END ; 133600
RN ~ M ~ NOEVN ~ NOEVN + 1 ; 133700
SHEAD[SCRAMBLEINDEX] ~ M ; 133800
EVENT[I] ~ EVNO ; 133900
IF EVENTTAPE THEN WRITE(SWF[NE],*,EREC) ; 134000
GO TO RETURN ; 134100
END ; 134200
RETEST: IF EVENT[I] = EVNO THEN 134300
BEGIN 134400
RN ~ M ; GO TO RETURN ; 134500
END ; 134600
MM ~ M ; 134700
M ~ DEFTALI ; 134800
IF M ! 0 THEN GO TO RETEST ; 134900
IF NOEVN = MAXNOEVN THEN 135000
BEGIN 135100
WRITE(PRINTER,ERROR40) ; 135200
GO TO FINISH ; 135300
END ; 135400
RN ~ M ~ NOEVN ~ NOEVN + 1 ; 135500
EVENT[I] ~ EVNO ; 135600
IF EVENTTAPE THEN WRITE(SWF[NE],*,EREC) ; 135700
IF LIFO THEN 135800
BEGIN 135900
DEFTALI ~ SHEAD[SCRAMBLEINDEX] ; 136000
SHEAD[SCRAMBLEINDEX] ~ M ; 136100
END 136200
ELSE DEFTALII ~ M ; 136300
RETURN: END RENUMBER ; 136400
PROCEDURE CARDAUDIT(I,J,ASD,REMARKS) ; 136500
COMMENT THIS PROCEDURE AUDITS ACTIVITY DATA ; 136600
COMMENT 136700
DEFINITION OF VARIABLES IN PROCEDURE CARDAUDIT 136800
I PREDECESSOR EVENT NUMBER 136900
J SUCCESSOR EVENT NUMBER 137000
ASD FLAG DENOTING TYPE OF ACTIVITY DATE 137100
REMARKS ARRAY CONTAINING ACTIVITY DESCRIPTION 137200
THIS PROCEDURE USES THE FOLLOWING VARIABLES DECLARED IN 137300
OUTER BLOCKS 137400
KEY,BOOL4,UPDATE,RIRJ,EVNO,RN,SDAYS,DPM,SWER 137500
RRIJ,BTAPE,NINES,BOOL2,MINEV,MAXEV,ADAYS 137600
ONETIME,OT,PT,ML,ET,VAR,RDAYS,RDATE,DAA,DAR,MOA, 137700
MOR,YRA,YRR,ASDAT,CASDAT,SDATE,DAS,MOS,YRS,WDPW, 137800
NOACT,WEEKFLAG,TALLIES 137900
; 138000
VALUE I,J,ASD ; 138100
INTEGER I,J,ASD; 138200
ALPHA ARRAY REMARKS[0] ; 138300
BEGIN 138400
LABEL L1,L2,L3,L5,L7,LL3,LL6,LL7,LL8,LL9,LL10,LL11,LL12,LL13, 138500
LL14,LL15,LL16,LL17,LL18,LL19,LL20,LL21,LL22,LL23,ERR4, 138600
ERR5,ERR6,ERR7,ERR31,ERR32,ERR33,EER,L6,L8 ; 138700
LABEL L9 ; 138800
SWITCH SW1 ~ LL8,LL9,LL10,LL11 ; 138900
SWITCH SW2 ~ ERR4,ERR5,ERR6,ERR7 ; 139000
SWITCH SW3 ~ LL16,LL17,LL18,LL19 ; 139100
SWITCH SW4 ~ LL20,LL21,LL22,LL23 ; 139200
SWITCH SW5 ~ LL6,ERR31,ERR32,ERR33 ; 139300
DEFINE DKEY = KEY.[30:9],KEY.[39:9]# ; 139400
DEFINE CI = TALLIES[RRIJ.[8:9],RRIJ.[17:9]].[21:9]#, 139500
CJ = TALLIES[RRIJ.[30:9],RRIJ.[39:9]].[30:9]#, 139600
AT = TALLIES[RRIJ.[30:9],RRIJ.[39:9]].[39:9]# ; 139700
BOOL4 ~ FALSE ; 139800
COMMENT RENUMBER PREDECESSOR AND SUCCESSOR EVENTS AND COMPUTE 139900
TALLIES ; 140000
IF UPDATE ! 1 THEN 140100
BEGIN 140200
EVNO ~ I ; 140300
RENUMBER ; 140400
RRIJ.[4:22] ~ RN.[26:22] ; 140500
END ; 140600
CI ~ CI + 1 ; 140700
IF UPDATE ! 1 THEN 140800
BEGIN 140900
EVNO ~ J ; 141000
RENUMBER ; 141100
RRIJ.[26:22] ~ RN.[26:22] ; 141200
END ; 141300
CJ ~ CJ + 1 ; 141400
IF ASD = 2 THEN AT ~ AT + 1 ; 141500
IF UPDATE = 1 THEN GO TO L6 ; 141600
RIRJ[DKEY] ~ RRIJ ; 141700
COMMENT AUDIT EVENT NUMBERS ; 141800
IF I > 0 AND I < NINES THEN GO TO L1 ; 141900
WRITE(PRINTER[DBL],ERROR1) ; 142000
BOOL2 ~ TRUE ; 142100
L1: IF J > 0 AND J < NINES THEN GO TO L2 ; 142200
WRITE(PRINTER[DBL],ERROR2) ; 142300
BOOL2 ~ TRUE ; 142400
L2: IF I ! J THEN GO TO L5 ; 142500
WRITE(PRINTER[DBL],ERROR5) ; 142600
BOOL2 ~ TRUE ; 142700
COMMENT CALCULATE MIN. AND MAX. EVENT NOS. ; 142800
L5: IF I < MINEV THEN MINEV ~ I ; 142900
IF J < MINEV THEN MINEV ~ J ; 143000
IF I > MAXEV THEN MAXEV ~ I ; 143100
IF J > MAXEV THEN MAXEV ~ J ; 143200
L6: IF BTAPE THEN GO TO LL7 ; 143300
COMMENT AUDIT ACTIVITY TIMES ; 143400
IF ONETIME THEN 143500
BEGIN 143600
ET ~ ML ; VAR ~ 0 ; 143700
GO TO L3 ; 143800
END ; 143900
IF ML > PT THEN 144000
BEGIN 144100
WRITE(PRINTER[DBL],ERROR7) ; 144200
BOOL4 ~ BOOL2 ~ TRUE ; 144300
PT ~ ML 144400
END ; 144500
IF OT > ML THEN 144600
BEGIN 144700
WRITE(PRINTER[DBL],ERROR6) ; 144800
BOOL4 ~ BOOL2 ~ TRUE ; 144900
OT ~ ML 145000
END 145100
ELSE IF (OT = 0) AND (ML ! 0) THEN 145200
BEGIN 145300
WRITE(PRINTER[DBL],ERROR24) ; 145400
BOOL4 ~ BOOL2 ~ TRUE ; 145500
OT ~ ML 145600
END ; 145700
COMMENT COMPUTE EXPECTED TIME OF ACTIVITY ; 145800
ET ~ (OT + 4 | ML + PT)/6.0 ; 145900
VAR ~ ((PT - OT)/6.0)*2 ; 146000
L3: ADAYS ~ 0 ; 146100
IF ASD = 0 THEN GO TO LL7 ; 146200
COMMENT AUDIT ACTIVITY DATES ; 146300
UNPACK(ASDAT,SDAYS,WDPW,DPM,MOA,DAA,YRA,ADAYS,CASDAT, 146400
SWER ) ; 146500
GO TO SW5[SWER] ; 146600
LL6: GO TO SW1[ASD] ; 146700
LL8: IF ADAYS { RDAYS THEN GO TO LL13 ; 146800
WRITE(PRINTER[DBL],ERROR12) ; 146900
GO TO LL12 ; 147000
LL9: IF ADAYS { RDAYS THEN GO TO LL14 ; 147100
WRITE(PRINTER[DBL],ERROR13) ; 147200
GO TO LL12 ; 147300
LL10: IF ADAYS } RDAYS THEN GO TO LL7 ; 147400
WRITE(PRINTER[DBL],ERROR14) ; 147500
GO TO LL12 ; 147600
LL11: IF ADAYS } RDAYS THEN GO TO LL7 ; 147700
WRITE(PRINTER[DBL],ERROR15) ; 147800
GO TO LL12 ; 147900
LL12: ASDAT ~ RDATE ; BOOL2 ~ TRUE ; 148000
ADAYS ~ RDAYS ; 148100
DAA ~ DAR ; MOA ~ MOR ; YRA ~ YRR ; GO TO LL7 ; 148200
LL13: IF ADAYS } 0 THEN GO TO LL7 ; 148300
WRITE(PRINTER[DBL],ERROR20) ; 148400
GO TO LL15 ; 148500
LL14: IF ADAYS } 0 THEN GO TO LL7 ; 148600
WRITE(PRINTER[DBL],ERROR21) ; 148700
GO TO LL15 ; 148800
ERR31: ASDAT ~ CASDAT ; BOOL2 ~ TRUE ; 148900
GO TO SW2[ASD] ; 149000
ERR4: WRITE(PRINTER[DBL],ERROR16) ; GO TO LL8 ; 149100
ERR5: WRITE(PRINTER[DBL],ERROR17) ; GO TO LL9 ; 149200
ERR6: WRITE(PRINTER[DBL],ERROR18) ; GO TO LL10 ; 149300
ERR7: WRITE(PRINTER[DBL],ERROR19) ; GO TO LL11 ; 149400
ERR32: BOOL2 ~ TRUE ; 149500
GO TO SW3[ASD] ; 149600
LL16: WRITE(PRINTER[DBL],ERROR27) ; GO TO LL8 ; 149700
LL17: WRITE(PRINTER[DBL],ERROR28) ; GO TO LL9 ; 149800
LL18: WRITE(PRINTER[DBL],ERROR29) ; GO TO LL10 ; 149900
LL19: WRITE(PRINTER[DBL],ERROR30) ; GO TO LL11 ; 150000
ERR33: ASDAT ~ CASDAT ; BOOL2 ~ TRUE ; 150100
GO TO SW4[ASD] ; 150200
LL20: WRITE(PRINTER[DBL],ERROR35) ; GO TO LL8 ; 150300
LL21: WRITE(PRINTER[DBL],ERROR36) ; GO TO LL9 ; 150400
LL22: WRITE(PRINTER[DBL],ERROR37) ; GO TO LL10 ; 150500
LL23: WRITE(PRINTER[DBL],ERROR38) ; GO TO LL10 ; 150600
LL15: ASDAT ~ SDATE ; BOOL2 ~ TRUE ; ADAYS ~ 0 ; 150700
DAA ~ DAS ; MOA ~ MOS ; YRA ~ YRS ; 150800
LL7: NOACT ~ NOACT + 1 ; 150900
L8: IF BOOL4 THEN 151000
BEGIN 151100
WRITE(PRINTER[DBL],ERROR8) ; 151200
IF WEEKFLAG THEN 151300
BEGIN 151400
ML ~ ML / WDPW ; PT ~ PT / WDPW ; OT ~ OT / WDPW 151500
END ; 151600
WRITE(PRINTER[DBL],FOUT2,DATA2) ; 151700
END ; 151800
L9: IF BTAPE THEN WRITE(SWF[WR],*,STREC) 151900
ELSE WRITE(SWF[WR],*,TREC) ; 152000
END CARDAUDIT ; 152100
START: NOACT ~ KEY ~ 0 ; 152200
DELETEKEYS ~ 0 ; 152300
WEEKFLAG ~ FALSE ; 152400
FILL MONTH[*] WITH " ","JAN","FEB","MAR","APR","MAY", 152500
"JUN","JUL","AUG","SEP","OCT","NOV","DEC" ; 152600
FILL DPM[*] WITH 0,31,28,31,30,31,30,31,31,30,31,30,31 ; 152700
NINES ~ 9999999999 ; 152800
IF UPDATE = 0 THEN 152900
BEGIN 153000
RD ~ 2 ; WR ~ 1 ; SC ~ 3 ; RE ~ 4 ; 153100
NE ~ 5 ; 153200
END ; 153300
IF (BLOCPARAM[NOBLOCK].[45:3] ! 1) THEN NE ~ RE ; 153400
IF (BLOCPARAM[NOBLOCK].[40:3] = 1) THEN AC ~ 1 153500
ELSE AC ~ 0 ; 153600
COMMENT INITIALIZE GLOBAL ARRAYS FOR INPUT AUDIT RUN ; 153700
IF UPDATE ! 1 THEN 153800
BEGIN 153900
NOEVN ~ MAXEV ~ 0 ; 154000
IF MAXNOEVN.[30:9] = 0 THEN 154100
BEGIN 154200
TEMP1 ~ MAXNOEVN.[39:9] ; 154300
FOR L ~ 0 STEP 1 UNTIL TEMP1 DO EVENT[0,L] ~ 0 154400
END ELSE 154500
BEGIN 154600
TEMP1 ~ MAXNOEVN.[30:9] ; 154700
FOR L ~ 0 STEP 1 UNTIL TEMP1 DO 154800
FOR K ~ 0 STEP 1 UNTIL 511 DO 154900
EVENT[L,K] ~ 0 155000
END ; 155100
IF MAXNOACT.[30:9] = 0 THEN 155200
BEGIN 155300
TEMP1 ~ MAXNOACT.[39:9] ; 155400
FOR L ~ 0 STEP 1 UNTIL TEMP1 DO 155500
RIRJ[0,L] ~ 0 ; 155600
END ELSE 155700
BEGIN 155800
TEMP1 ~ MAXNOACT.[30:9] ; 155900
FOR L ~ 0 STEP 1 UNTIL TEMP1 DO 156000
FOR K ~ 0 STEP 1 UNTIL 511 DO 156100
RIRJ[0,L] ~ 0 ; 156200
END ; 156300
MINEV ~ NINES ; 156400
END ; 156500
BOOL2 ~ BOOL4 ~ FALSE ; 156600
BTAPE ~ FALSE ; 156700
WRITE(PRINTER[PAGE]) ; 156800
PAGEN ~ 1 ; 156900
TLINE ~ NLINE ~ 24 ; 157000
COMMENT READ HEADER CARDS ; 157100
READ(SWA[AC],FIN1,DATA1) ; 157200
IF (PERIOD = "WEEKS") THEN WEEKFLAG ~ TRUE ; 157300
IF UPDATE ! 0 THEN 157400
BEGIN 157500
FOR LL ~ 1 STEP 1 UNTIL 13 DO 157600
IF (NETNAME[LL] ! SNETNAME[LL]) THEN 157700
BEGIN 157800
WRITE(PRINTER[DBL],ERROR41) ; 157900
GO TO ENDOFPROG ; 158000
END ; 158100
IF (SDATE ! SSDATE) THEN 158200
BEGIN 158300
WRITE(PRINTER[DBL],ERROR42) ; 158400
BOOL2 ~ TRUE ; 158500
SDATE ~ SSDATE 158600
END 158700
END ; 158800
COMMENT AUDIT NETWORK START DATE ; 158900
UNPACK(SDATE,0,WDPW,DPM,MOS,DAS,YRS,SDAYS,CSDATE,SWER) ; 159000
GO TO SW1[SWER] ; 159100
ERR11: WRITE(PRINTER[DBL],ERROR9) ; 159200
SDATE ~ CSDATE ; BOOL2 ~ TRUE ; GO TO LL3 ; 159300
ERR12: WRITE(PRINTER[DBL],ERROR25) ; BOOL2 ~ TRUE ; GO TO LL3 ; 159400
ERR13: WRITE(PRINTER[DBL],ERROR33) ; BOOL2 ~ TRUE ; 159500
SDATE ~ CSDATE ; 159600
COMMENT AUDIT NETWORK REPORT DATE ; 159700
LL3: UNPACK(RDATE,SDAYS,WDPW,DPM,MOR,DAR,YRR,RDAYS,CRDATE, 159800
SWER ) ; 159900
GO TO SW2[SWER] ; 160000
ERR21: WRITE(PRINTER[DBL],ERROR10) ; 160100
RDATE ~ CRDATE ; BOOL2 ~ TRUE ; GO TO LL4 ; 160200
ERR22: WRITE(PRINTER[DBL],ERROR26) ; BOOL2 ~ TRUE ; GO TO LL4 ; 160300
ERR23: WRITE(PRINTER[DBL],ERROR34) ; BOOL2 ~ TRUE ; 160400
RDATE ~ CRDATE ; 160500
LL4: IF RDAYS } 0 THEN GO TO LL5 ; 160600
RDAYS ~ 0 ; BOOL2 ~ TRUE ; 160700
MOR ~ MOS ; DAR ~ DAS ; YRR ~ YRS ; 160800
WRITE(PRINTER[DBL],ERROR11) ; 160900
COMMENT PRINT TITLE PAGE FOR DATA LISTING ; 161000
LL5: WRITE(PRINTER,FORMH,OUTH) ; 161100
RRIJ ~ ET ~ VAR ~ ASD ~ ADAYS ~ ES ~ LF ~ SL ~ SVAR ~ 161200
RANKI ~ TAL ~ RN ~ EVNO ~ RANKE ~ EEO ~EVAR ~ LEO 161300
~ SLCK ~ TALLY ~ 0 ; 161400
FOR L ~ 1 STEP 1 UNTIL 4 DO DSCPT[L] ~ " " ; 161500
COMMENT READ DATA TYPE CARD ; 161600
READ(SWA[AC],FIN3,DATA3) ; 161700
IF (ITEMS[1] = "EVENTS") THEN 161800
BEGIN 161900
IF NOT EVENTTAPE THEN 162000
BEGIN 162100
WRITE(PRINTER,TAPEERROR) ; 162200
EVENTTAPE ~ BOOL2 ~ TRUE ; 162300
END ; 162400
IF (UPDATE = 1) THEN 162500
BEGIN 162600
WRITE(PRINTER,UPDATEERROR) ; 162700
UPDATE ~ 2 ; 162800
BOOL2 ~ TRUE ; 162900
END ; 163000
COMMENT READ EVENT CARDS ; 163100
LOOP2: READ(SWA[AC],FIN4,DATA4)[LL2B] ; 163200
IF (EVNO = NINES) THEN GO TO LL5A ; 163300
IF (NLINE = TLINE) THEN 163400
BEGIN 163500
COMMENT PRINT HEADING ; 163600
PAGEN ~ PAGEN + 1 ; NLINE ~ 0 ; 163700
WRITE(PRINTER[PAGE]) ; 163800
WRITE(PRINTER[DBL],FOUT1,OUT1) ; 163900
WRITE(PRINTER,FORMH5) ; 164000
END ; 164100
COMMENT LIST EVENT ; 164200
WRITE(PRINTER[DBL],FOUT4,DATA4) ; 164300
NLINE ~ NLINE + 1 ; 164400
COMMENT RENUMBER EVENT ; 164500
RENUMBER ; 164600
GO TO LOOP2 ; 164700
LL5A: NLINE ~ TLINE ; 164800
READ(SWA[AC],FIN3,DATA3)[LL2B] ; 164900
END ; 165000
TAPEKEY ~ 1 ; 165100
IF (ITEMS[1] ! "ACTIVI") THEN 165200
BEGIN 165300
WRITE(PRINTER[DBL],ERROR45) ; 165400
GO TO FINISH ; 165500
END ; 165600
COMMENT READ ACTIVITY CARDS ; 165700
LL1: READ(SWA[AC],FIN2,DATA2)[LL2B] ; 165800
IF NLINE = TLINE THEN 165900
BEGIN 166000
COMMENT PRINT HEADING ; 166100
PAGEN ~ PAGEN + 1 ; NLINE ~ 0 ; 166200
WRITE(PRINTER[PAGE]) ; WRITE(PRINTER[DBL],FOUT1,OUT1) ; 166300
WRITE(PRINTER,FORMH4) ; 166400
END ; 166500
COMMENT PRINT CARD IMAGE ; 166600
WRITE(PRINTER[DBL],FOUT2,DATA2) ; 166700
NLINE ~ NLINE + 1 ; 166800
IF UPDATE = 0 THEN GO TO LL1A ; 166900
IF (IKEY < TAPEKEY) THEN 167000
BEGIN 167100
BOOL2 ~ TRUE ; 167200
WRITE(PRINTER[DBL],ERROR44) ; GO TO LL1 ; 167300
END ; 167400
IF (IKEY > SNOACT) AND (UPDATE = 1) THEN 167500
BEGIN 167600
WRITE(PRINTER[DBL],ERROR43) ; 167700
BOOL2 ~ TRUE ; 167800
UPDATE ~ 2 ; CODE ~ 2 ; 167900
END ; 168000
IF KEY + DELETEKEYS > SNOACT THEN GO TO LL1A ; 168100
BTAPE ~ TRUE ; 168200
FOR TKEY ~ TAPEKEY STEP 1 UNTIL IKEY-1 DO 168300
BEGIN 168400
READ(SWF[RD],*,STREC)[LL1B] ; 168500
KEY ~ KEY - DELETEKEYS ; 168600
CARDAUDIT(SI,SJ,SASD,SREMARKS) ; 168700
END ; 168800
BTAPE ~ FALSE ; 168900
READ(SWF[RD],*,STREC)[LL1B] ; 169000
TAPEKEY ~ IKEY + 1 ; 169100
IF (CODE ! 1) AND (UPDATE = 1) THEN 169200
BEGIN 169300
WRITE(PRINTER,ERROR43) ; UPDATE ~ 2 ; 169400
BOOL2 ~ TRUE ; 169500
END ; 169600
GO TO SW3[CODE] ; 169700
CODE3: DELETEKEYS ~ DELETEKEYS + 1 ; 169800
KEY ~ KEY - DELETEKEYS ; 169900
GO TO LL1 ; 170000
CODE1: IF SI ! I OR SJ ! J THEN 170100
BEGIN 170200
BOOL2 ~ TRUE ; 170300
WRITE(PRINTER[DBL],ERROR43) ; 170400
KEY ~ KEY - DELETEKEYS ; 170500
BTAPE ~ TRUE ; 170600
CARDAUDIT(SI,SJ,SASD,SREMARKS) ; 170700
BTAPE ~ FALSE ; 170800
GO TO LL1 ; 170900
END ; 171000
LL1B: BTAPE ~ FALSE ; 171100
COMMENT AUDIT ACTIVITY CARDS ; 171200
LL1A: IF (UPDATE = 0) OR (IKEY > SNOACT) THEN 171300
BEGIN 171400
KEY ~ KEY + 1 ; 171500
IF KEY > MAXNOACT THEN 171600
BEGIN 171700
WRITE(PRINTER[DBL],ERROR39) ; GO TO FINISH ; 171800
END 171900
END 172000
ELSE KEY ~ KEY - DELETEKEYS ; 172100
COMMENT CHECK PERIOD AND CONVERT TO DAYS ; 172200
IF WEEKFLAG THEN 172300
BEGIN 172400
ML ~ ML | WDPW ; PT ~ PT | WDPW ; OT ~ OT | WDPW 172500
END ; 172600
CARDAUDIT(I,J,ASD,REMARKS) ; 172700
GO TO LL1 ; 172800
LL2B: IF (AC = 1) THEN 172900
BEGIN 173000
LOCK(TAPER,RELEASE) ; TYPEOUT(SPOOUT,INST[5,*]) ; 173100
END ; 173200
IF (UPDATE = 0) OR (KEY + DELETEKEYS } SNOACT) 173300
THEN GO TO LL2 ; 173400
BTAPE ~ TRUE ; 173500
FOR TKEY ~ TAPEKEY STEP 1 UNTIL SNOACT DO 173600
BEGIN 173700
READ(SWF[RD],*,STREC)[LL2] ; 173800
KEY ~ KEY - DELETEKEYS ; 173900
CARDAUDIT(SI,SJ,SASD,SREMARKS) ; 174000
END ; 174100
COMMENT LIST NUMBER OF ACTIVITIES AND EVENTS ; 174200
LL2: PAGEN ~ PAGEN + 1 ; 174300
WRITE(PRINTER[PAGE]) ; WRITE(PRINTER[DBL],FOUT1,OUT1) ; 174400
WRITE(PRINTER[DBL],FOUT3,OUT3) ; 174500
REWIND(SWF[WR]) ; 174600
IF EVENTTAPE THEN REWIND(SWF[NE]) ; 174700
IF (UPDATE ! 0) THEN IF SAVETAPES THEN 174800
BEGIN 174900
LOCK(SWF[RD],SAVE) ; 175000
INST[2,0] ~ FILENAMES[RD] ; 175100
TYPEOUT(SPOOUT,INST[2,*]) ; TYPEOUT(SPOOUT,INST[5,*]) ; 175200
END 175300
ELSE REWIND(SWF[RD]) ; 175400
TP ~ RD ; RD ~ WR ; WR ~ TP ; 175500
IF UPDATE = 1 THEN GO TO LL2A ; 175600
NOACTROW ~ NOACT.[30:9] ; 175700
NOACTCOL ~ IF NOACTROW = 0 THEN NOACT.[39:9] ELSE 511 ; 175800
NOEVNROW ~ NOEVN.[30:9] ; 175900
NOEVNCOL ~ IF NOEVNROW = 0 THEN NOEVN.[39:9] ELSE 511 ; 176000
LL2A: EK ~ BK ~ 0 ; 176100
IF LISTTAL THEN 176200
BEGIN 176300
COMMENT PRINT HEADING FOR LIST TALLIES ; 176400
WRITE(PRINTER[PAGE]) ; 176500
WRITE(PRINTER[DBL],HEADNET,NET) ; 176600
WRITE(PRINTER,HEADTALS) ; 176700
WRITE(PRINTER[DBL]) ; 176800
END ; 176900
FOR K ~ 1 STEP 1 UNTIL NOEVN DO 177000
BEGIN 177100
KR ~ K.[30:9] ; KC ~ K.[39:9] ; 177200
COMMENT LIST EVENT TALLIES ; 177300
IF LISTTAL THEN WRITE(PRINTER[DBL],OUTTALS,TALS) ; 177400
COMMENT DETERMINE STARTING AND ENDING EVENTS ; 177500
IF TALLIES[KR,KC].[21:9] = 0 THEN 177600
BEGIN 177700
IF TALLIES[KR,KC].[30:9] ! 1 THEN 177800
BEGIN 177900
WRITE(PRINTER[DBL],ENDERROR,ENDEVENT) ; 178000
BOOL2 ~ TRUE ; 178100
END ; 178200
IF EK = NUMENDING THEN 178300
BEGIN 178400
WRITE(PRINTER[DBL],ENDINGERROR) ; 178500
BOOL2 ~ TRUE ; GO TO LL7 ; 178600
END ; 178700
EK ~ EK + 1 ; 178800
REEV[EK] ~ K ; 178900
GO TO LL6 ; 179000
END ; 179100
IF TALLIES[KR,KC].[30:9] = 0 THEN 179200
BEGIN 179300
IF TALLIES[KR,KC].[21:9] ! 1 THEN 179400
BEGIN 179500
WRITE(PRINTER[DBL],STARTERROR,STARTEVENT) ; 179600
BOOL2 ~ TRUE ; 179700
END ; 179800
IF BK = NUMSTARTING THEN 179900
BEGIN 180000
WRITE(PRINTER[DBL],STARTINGERROR) ; 180100
BOOL2 ~ TRUE ; GO TO LL7 ; 180200
END ; 180300
BK ~ BK + 1 ; 180400
RBEV[BK] ~ K ; 180500
END ; 180600
LL6: END ; 180700
LL7: BEGIN 180800
COMMENT BLOCK TO LIST ENDING AND STARTING EVENTS ; 180900
LIST OUTHEAD(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],RUN), 181000
OUT1(BK,FOR LL ~ 1 STEP 1 UNTIL BK DO EVENT[RBEV[LL] 181100
.[30:9],RBEV[LL].[39:9]]), 181200
OUT2(EK,FOR LL ~ 1 STEP 1 UNTIL EK DO EVENT[REEV[LL] 181300
.[30:9],REEV[LL].[39:9]]) ; 181400
FORMAT OUT STARTINGEVENTS("THE NETWORK CONTAINS",I4," STARTING ", 181500
"EVENTS WHICH ARE NUMBERED"/(5I12)), 181600
STARTINGEVENT("THE NETWORK CONTAINS",I4," STARTING EVENT", 181700
" WHICH IS NUMBERED"/I12), 181800
ENDINGEVENTS("THE NETWORK CONTAINS",I4," ENDING EVENTS ", 181900
"WHICH ARE NUMBERED"/(5I12)), 182000
ENDINGEVENT("THE NETWORK CONTAINS",I4," ENDING EVENT ", 182100
"WHICH IS NUMBERED"/I12), 182200
HEADING(13A6,X10,"RUN",I11) ; 182300
WRITE(PRINTER[PAGE]) ; 182400
WRITE(PRINTER[DBL],HEADING,OUTHEAD) ; 182500
IF BK = 1 THEN WRITE(PRINTER[DBL],STARTINGEVENT,OUT1) ELSE 182600
WRITE(PRINTER[DBL],STARTINGEVENTS,OUT1) ; 182700
IF EK = 1 THEN WRITE(PRINTER[DBL],ENDINGEVENT,OUT2) ELSE 182800
WRITE(PRINTER[DBL],ENDINGEVENTS,OUT2) ; 182900
END ; 183000
BEGIN 183100
COMMENT BLOCK TO UPDATE ACTIVITY TAPE FILE WITH TALLY COUNTS ; 183200
INTEGER KRI,KRJ,KCI,KCJ,TEMP ; 183300
LABEL LOOP,EOF ; 183400
LABEL LAB1, LAB2, LAB3, LAB4, LAB ; 183500
SWITCH SWL ~ LAB,LAB1,LAB2,LAB3,LAB4 ; 183600
FORMAT OUT ERROR48("ALL PRECEDING ACTIVITIES TO ACTIVITY ",I10," TO", 183700
I10,"NOT COMPLETED, ACTUAL START DATE NOT ALLOWED"), 183800
ERROR49("ALL PRECEDING ACTIVITIES TO ACTIVITY ",I10," TO", 183900
I10,"NOT COMPLETED, ACTUAL COMPL DATE NOT ALLOWED") ; 184000
LOOP: READ(SWF[RD],*,TREC)[EOF] ; 184100
TAL ~ 0 ; 184200
TEMP ~ RRIJ.[4:22] ; 184300
KRI ~ TEMP.[30:9] ; KCI ~ TEMP.[39:9] ; 184400
TEMP ~ RRIJ.[26:22] ; 184500
KRJ ~ TEMP.[30:9] ; KCJ ~ TEMP.[39:9] ; 184600
TAL ~ TALLIES[KRJ,KCJ] ; 184700
IF (TALLIES[KRI,KCI].[30:9] = TALLIES[KRI,KCI].[39:9]) 184800
AND (ASD ! 3) THEN TAL ~ - TAL ; 184900
GO TO SWL[ASD + 1] ; 185000
LAB1: IF (TAL } 0) AND (TALLIES[KRI,KCI].[30:9] ! 0) THEN 185100
BEGIN 185200
WRITE(PRINTER[DBL],ERROR48,OUTERACT) ; 185300
BOOL2 ~ TRUE ; 185400
END ; 185500
GO TO LAB ; 185600
LAB2: IF (TAL } 0) AND (TALLIES[KRI,KCI].[30:9] ! 0) THEN 185700
BEGIN 185800
WRITE(PRINTER[DBL],ERROR49,OUTERACT) ; 185900
BOOL2 ~ TRUE ; 186000
END ; 186100
GO TO LAB ; 186200
LAB3: IF (TALLIES[KRI,KCI].[30:9] ! 0) THEN 186300
BEGIN 186400
WRITE(PRINTER[DBL],ERROR46,OUTERACT) ; 186500
BOOL2 ~ TRUE ; 186600
END ; 186700
GO TO LAB ; 186800
LAB4: IF (TALLIES[KRJ,KCJ].[21:9] ! 0) THEN 186900
BEGIN 187000
WRITE(PRINTER[DBL],ERROR47,OUTERACT) ; 187100
BOOL2 ~ TRUE ; 187200
END ; 187300
LAB: WRITE(SWF[WR],*,TREC) ; 187400
GO TO LOOP ; 187500
EOF: REWIND(SWF[RD]) ; REWIND(SWF[WR]) ; 187600
TP ~ RD ; RD ~ WR ; WR ~ TP ; 187700
END ; 187800
IF BOOL2 THEN 187900
BEGIN 188000
WRITE(PRINTER,SPO3) ; 188100
GO TO FINISH 188200
END ; 188300
IF EVENTTAPE THEN 188400
BEGIN 188500
COMMENT WRITE EVENT NUMBERS AND TALLIES ON EVENT TAPE ; 188600
LOOP3: READ(SWF[NE],*,EREC)[EOF3] ; 188700
TALLY ~ TALLIES[RN.[30:9],RN.[39:9]] ; 188800
WRITE(SWF[WR],*,EREC) ; 188900
GO TO LOOP3 ; 189000
EOF3: IF (UPDATE = 1) AND SAVETAPES THEN 189100
BEGIN 189200
LOCK(SWF[NE],SAVE) ; 189300
INST[3,0] ~ FILENAMES[NE] ; 189400
TYPEOUT(SPOOUT,INST[3,*]) ; TYPEOUT(SPOOUT,INST[5,*]) ; 189500
END 189600
ELSE REWIND(SWF[NE]) ; 189700
REWIND(SWF[WR]) ; 189800
TP ~ NE ; NE ~ WR ; WR ~ TP ; 189900
IF (RE = WR) THEN RE ~ NE ; 190000
END ; 190100
END AUDIT BLOCK ; 190200
GO TO ORIGIN ; 190300
BLOCK3: BEGIN 190400
COMMENT RANK BLOCK ; 190500
COMMENT 190600
DEFINITIONS OF VARIABLES IN RANK BLOCK 190700
CH MAXIMUM RANK PERMITTED 190800
SRN RENUMBERED EVENT ON OLD EVENT TAPE 190900
SEVNO EVENT NUMBER ON OLD EVENT TAPE 191000
SRANKE EVENT RANK ON OLD EVENT TAPE 191100
STALLY TALLY ON OLD EVENT TAPE 191200
DIFMAX INCREASE IN MAXRANK IN SUCCESSIVE PASSES 191300
BOOL BOOLEAN FLAG, TRUE IF A LOOP IS DETECTED IN THE 191400
NETWORK 191500
TWOTAPES BOOLEAN FLAG, TRUE IF TWO EVENT TAPES ARE TO BE 191600
MERGED 191700
ERANK ARRAY CONTAINING RANK OF EACH EVENT 191800
SDSCPT ARRAY CONTAINING EVENT DESCRIPTION ON OLD EVENT 191900
TAPE 192000
SEEO EARLIEST EVENT OCCURRENCE ON OLD EVENT TAPE 192100
SEVAR SUM OF VARIANCES ON OLD EVENT TAPE 192200
SLEO LATEST EVENT OCCURRENCE ON OLD EVENT TAPE 192300
SSLCK EVENT SLACK ON OLD EVENT TAPE 192400
MAXRANK MAXIMUM RANK COMPUTED DURING CURRENT PASS 192500
OLDMAX MAXIMUM RANK COMPUTED DURING LAST PASS 192600
TEMP,TEMP2 TEMPORARY VARIABLES 192700
K,L,KK,KRI,KCI,KRJ,KCJ,NN INDICES FOR INDEXING ARRAYS 192800
; 192900
INTEGER CH ; 193000
INTEGER K,L ; 193100
INTEGER SRN,SEVNO,SRANKE,STALLY ; 193200
INTEGER DIFMAX ; 193300
INTEGER NN ; 193400
BOOLEAN BOOL ; 193500
BOOLEAN TWOTAPES ; 193600
INTEGER ARRAY ERANK[0:NOEVNROW,0:NOEVNCOL] ; 193700
ALPHA ARRAY SDSCPT[0:4] ; 193800
REAL SEEO,SEVAR,SLEO,SSLCK ; 193900
LABEL L1, BEND2 ; 194000
LABEL LOOP,EOF,LOOP2,EOF2 ; 194100
LABEL EOFA,L2 ; 194200
LIST SEREC(SRN,SEVNO,SRANKE,SEEO,SEVAR,SLEO,SSLCK,STALLY,FOR 194300
LL ~ 1 STEP 1 UNTIL 4 DO SDSCPT[LL]) ; 194400
LIST OUT1(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],RUN) , 194500
OUT2(KEY,EVENT[RIRJ[K,L].[8:9],RIRJ[K,L].[17:9]], 194600
EVENT[RIRJ[K,L].[30:9],RIRJ[K,L].[39:9]]) ; 194700
FORMAT OUT LOOPERROR(13A6,X10,"RUN",I11/"THE NETWORK CONTAINS AT ", 194800
"LEAST ONE LOOP"/"SOME OR ALL OF THE FOLLOWING ", 194900
"ACTIVITIES FORM THE LOOP"/X8,"KEY",X7,"PRED",X7, 195000
"SUCC"/) , 195100
ERRORACTIVITY(3I11) ; 195200
INTEGER KK,TEMP,MAXRANK ; 195300
INTEGER TEMP2,KRI,KCI,KRJ,KCJ ; 195400
INTEGER OLDMAX ; 195500
LABEL LR ; 195600
COMMENT SET MAXIMUM RANK FOR NETWORK ; 195700
IF (CHAINLENGTH < NOEVN) THEN CH ~ CHAINLENGTH + 1 195800
ELSE CH ~ NOEVN ; 195900
OLDMAX ~ 0 ; 196000
BOOL ~ FALSE ; 196100
TWOTAPES ~ FALSE ; 196200
FOR K ~ 0 STEP 1 UNTIL NOEVNROW DO 196300
FOR L ~ 0 STEP 1 UNTIL NOEVNCOL DO 196400
ERANK[K,L] ~ 0 ; 196500
COMMENT COMPUTE EVENT RANKS ; 196600
LR: MAXRANK ~ 0 ; 196700
FOR KK ~ 1 STEP 1 UNTIL NOACT DO 196800
BEGIN 196900
TEMP2 ~ RIRJ[KK.[30:9],KK.[39:9]] ; 197000
KRI ~ TEMP2.[8:9] ; KCI ~ TEMP2.[17:9] ; 197100
KRJ ~ TEMP2.[30:9] ; KCJ ~ TEMP2.[39:9] ; 197200
IF (ERANK[KRI,KCI] } ERANK[KRJ,KCJ]) THEN 197300
BEGIN 197400
TEMP ~ ERANK[KRJ,KCJ] ~ ERANK[KRI,KCI] + 1 ; 197500
IF TEMP > MAXRANK THEN MAXRANK ~ TEMP 197600
END 197700
END ; 197800
COMMENT TEST FOR A POSSIBLE LOOP ; 197900
IF (MAXRANK > CH) THEN GO TO L1 ; 198000
OLDMAX ~ MAXRANK ; 198100
IF (MAXRANK ! 0) THEN GO TO LR ; 198200
IF EVENTTAPE THEN 198300
BEGIN 198400
COMMENT WRITE EVENT RANKS ON EVENT TAPE FILE ; 198500
SEVNO ~ 0 ; 198600
IF (BLOCPARAM[NOBLOCK] = 1) THEN TWOTAPES ~ TRUE ; 198700
LOOP: READ(SWF[NE],*,EREC)[EOF] ; 198800
IF TWOTAPES THEN 198900
BEGIN 199000
DO READ(SWF[RE],*,SEREC)[EOFA] UNTIL (SEVNO } EVNO) ; 199100
IF (SEVNO = EVNO) THEN 199200
BEGIN 199300
FOR NN ~ 1 STEP 1 UNTIL 4 DO 199400
IF (DSCPT[NN] ! " ") THEN GO TO L2 ; 199500
FOR NN ~ 1 STEP 1 UNTIL 4 DO DSCPT[NN] ~ SDSCPT[NN] ; 199600
END ; 199700
END ; 199800
L2: RANKE ~ ERANK[RN.[30:9],RN.[39:9]] ; 199900
WRITE(SWF[WR],*,EREC) ; 200000
GO TO LOOP ; 200100
EOFA: IF SAVETAPES THEN 200200
BEGIN 200300
LOCK(SWF[RE],RELEASE) ; 200400
INST[3,0] ~ FILENAMES[RE] ; 200500
TYPEOUT(SPOOUT,INST[3,*]) ; TYPEOUT(SPOOUT,INST[5,*]) ; 200600
END 200700
ELSE PURGE(SWF[RE],2) ; 200800
TWOTAPES ~ FALSE ; 200900
GO TO L2 ; 201000
EOF: REWIND(SWF[NE]) ; REWIND(SWF[WR]) ; 201100
IF TWOTAPES THEN IF SAVETAPES THEN 201200
BEGIN 201300
LOCK(SWF[RE],RELEASE) ; 201400
INST[3,0] ~ FILENAMES[RE] ; 201500
TYPEOUT(SPOOUT,INST[3,*]) ; TYPEOUT(SPOOUT,INST[5,*]) ; 201600
END 201700
ELSE PURGE(SWF[RE],2) ; 201800
TP ~ NE ; NE ~ RE ; RE ~ WR ; WR ~ TP ; 201900
END ; 202000
COMMENT WRITE ACTIVITY RANKS ON TAPE ; 202100
LOOP2: READ(SWF[RD],*,TREC)[EOF2] ; 202200
RANKI ~ ERANK[RRIJ.[8:9],RRIJ.[17:9]] ; 202300
WRITE(SWF[WR],*,TREC) ; 202400
GO TO LOOP2 ; 202500
EOF2: REWIND(SWF[RD]) ; REWIND(SWF[WR]) ; 202600
TP ~ RD ; RD ~ WR ; WR ~ TP ; 202700
GO TO BEND2 ; 202800
COMMENT PRINT LIST OF ACTIVITIES IN LOOP ; 202900
L1: WRITE(PRINTER[PAGE]) ; 203000
WRITE(PRINTER,LOOPERROR,OUT1) ; 203100
DIFMAX ~ MAXRANK - OLDMAX ; 203200
FOR KEY ~ 1 STEP 1 UNTIL NOACT DO 203300
BEGIN 203400
K ~ KEY.[30:9] ; L~ KEY.[39:9] ; 203500
IF (ERANK[RIRJ[K,L].[8:9],RIRJ[K,L].[17:9]] > 203600
CH - DIFMAX) 203700
THEN WRITE(PRINTER,ERRORACTIVITY,OUT2) 203800
END ; 203900
GO TO FINISH ; 204000
BEND2: END RANK BLOCK ; 204100
GO TO ORIGIN ; 204200
BLOCK4: BEGIN 204300
COMMENT SORT BLOCK ; 204400
COMMENT 204500
DEFINITIONS OF VARIABLES IN SORT BLOCK 204600
NCOLS NUMBER OF SORTKEYS 204700
COLSN ARRAY CONTAINING SORTKEYS 204800
TEMPKEY TEMPORARY VARIABLE 204900
L INDEX FOR ARRAYS 205000
; 205100
INTEGER NCOLS,L,TEMPKEY ; 205200
INTEGER ARRAY COLSN[0:4] ; 205300
LABEL LOOP,EOF ; 205400
PROCEDURE TAPESORT(NTAPES,NWPR,NCOLS,SORTKEYS,ARSIZE,SORTINPUT, 205500
SORTOUTPUT,SEQFLAG,SEQCOL,SAVEFACTOR) ; 205600
COMMENT THIS PROCEDURE SORTS A TAPE FILE ; 205700
COMMENT 205800
DEFINITIONS OF SOME OF THE VARIABLES IN PROCEDURE TAPESORT 205900
NTAPES NUMBER OF TAPES USED FOR SORTING 206000
NWPR NUMBER OF WORDS PER LOGICAL RECORD 206100
NCOLS NUMBER OF SORTKEYS 206200
SORTKEYS ARRAY CONTAINING SORTKEY NUMBERS 206300
ARSIZ NUMBER OF RECORDS WHICH CAN BE SORTED INTERNALLY 206400
SORTINPUT INPUT TAPE FILE 206500
SORTOUTPUT OUTPUT TAPE FILE 206600
SEQFLAG BOOLEAN FLAG, TRUE IF RECORDS ARE TO BE 206700
SEQUENCED AFTER THEY ARE SORTED 206800
SEQCOL COLUMN IN WHICH RECORDS ARE TO BE SEQUENCED 206900
SAVEFACTOR BOOLEAN FLAG, TRUE IF INPUT FILE IS TO BE 207000
PRESERVED 207100
; 207200
INTEGER NTAPES,NWPR,NCOLS,ARSIZE ; 207300
INTEGER SEQCOL ; 207400
BOOLEAN SEQFLAG,SAVEFACTOR ; 207500
FILE SORTINPUT,SORTOUTPUT ; 207600
INTEGER ARRAY SORTKEYS[0] ; 207700
BEGIN 207800
INTEGER RECSIN,RECSOUT ; 207900
REAL EOFMARK ; 208000
BOOLEAN MOREDATA,EXITFLAG,LASTPASS,INITIAL ; 208100
INTEGER NNT,NT,JJ,J,I,COUNTER,COPYCOUNT,WRT,NEWRT,NSLEFT, 208200
NNWPR,IND,TT,K,SMALL,LARGE,FIRST,SECOND,CC,H ; 208300
INTEGER FLAG ; 208400
LABEL STEPUP,MERGEST,MERGE,RECORD,EOF1,EOF2,RETURN,CLOSEND ; 208500
LABEL EOF3,TAPECOPY,ADJUST,EXIT,DISTRIB ; 208600
LABEL NOTALLODD,EOF4 ; 208700
LABEL XCH ; 208800
SWITCH SWFLAG1 ~ XCH,RECORD ; 208900
SWITCH SWFLAG2 ~ RECORD,XCH ; 209000
BOOLEAN ARRAY ASCENDFLAG[0:NTAPES] ; 209100
INTEGER ARRAY LIM[0:NTAPES],DIST[0:NTAPES] ; 209200
INTEGER ARRAY TCHECK,TSUM,INDEX[0:NTAPES],RECINDEX[0:ARSIZE] ; 209300
REAL ARRAY A[0:NTAPES,0:NWPR-1] ; 209400
SAVE REAL ARRAY AA[0:ARSIZE,0:NWPR-1] ; 209500
REAL ARRAY EOFARRAY,BUFF[0:NWPR-1],NEOFARRAY[0:NWPR-1] ; 209600
FILE TSORT2(2,100,NWPR) ; 209700
FILE TSORT3(2,100,NWPR) ; 209800
FILE TSORT4(2,100,NWPR) ; 209900
FILE TSORT5(2,100,NWPR) ; 210000
FILE TSORT6(2,100,NWPR) ; 210100
FILE TSORT7(2,100,NWPR) ; 210200
FILE TSORT8(2,100,NWPR) ; 210300
FILE TSORT9(2,100,NWPR) ; 210400
SWITCH FILE SWF ~ SORTINPUT,SORTOUTPUT,TSORT2,TSORT3,TSORT4, 210500
TSORT5,TSORT6,TSORT7,TSORT8,TSORT9 ; 210600
FORMAT OUT ERROR1("EOF1 LABEL PASSED"), 210700
ERROR2("EOF2 LABEL PASSED"), 210800
ERROR3("SORT NOT PERFORMED CORRECTLY, RECORDS IN ", 210900
"NOT EQUAL TO RECORDS OUT") ; 211000
PROCEDURE TSORTW(N,NCOLS,SORTKEYS,A,INDEX,AFLAG) ; 211100
VALUE N,NCOLS ; 211200
INTEGER N,NCOLS ; 211300
BOOLEAN AFLAG ; 211400
INTEGER ARRAY SORTKEYS,INDEX[0] ; 211500
ARRAY A[0,0] ; 211600
BEGIN 211700
INTEGER M,K,J,I,IM,CC,CCC,TI,TIM,FLAG ; 211800
LABEL L1,L2,L3,L4,XCH ; 211900
SWITCH SW1 ~ XCH,L4 ; 212000
SWITCH SW2~ L4,XCH ; 212100
IF AFLAG THEN FLAG ~ 1 ELSE FLAG ~ 2 ; 212200
M ~ N ; 212300
L1: M ~ M DIV 2 ; 212400
IF M ! 0 THEN 212500
BEGIN 212600
K ~ N - M ; J ~ 1 ; 212700
L2: I ~ J ; 212800
L3: IM ~ I + M ; TI ~ INDEX[I] ; TIM ~ INDEX[IM] ; 212900
FOR CC ~ 1 STEP 1 UNTIL NCOLS DO 213000
BEGIN 213100
CCC ~ SORTKEYS[CC] ; 213200
IF A[TI,CCC] > A[TIM,CCC] THEN GO TO SW1[FLAG] ; 213300
IF A[TI,CCC] < A[TIM,CCC] THEN GO TO SW2[FLAG] ; 213400
END ; 213500
GO TO L4 ; 213600
XCH: INDEX[I] ~ TIM ; INDEX[IM] ~ TI ; 213700
I ~ I - M ; IF I } 1 THEN GO TO L3 ; 213800
L4: J ~ J + 1 ; 213900
IF J > K THEN GO TO L1 ELSE GO TO L2 ; 214000
END 214100
END TSORTW ; 214200
PROCEDURE INTERNALSORT(UNITIN,UNITOUT,NWPR,RECSIN,ARSIZE,NCOLS, 214300
AFLAG,RECSOUT,MOREDATA,RECINDEX,SORTKEYS,EOFARRAY, 214400
AA,TSORTW,SWF,SUM,INITIAL,NEOFARRAY,SEQFLAG,SEQCOL) ; 214500
INTEGER UNITIN,UNITOUT,NWPR,RECSIN,ARSIZE,NCOLS,RECSOUT ; 214600
INTEGER SUM ; 214700
INTEGER SEQCOL ; 214800
BOOLEAN MOREDATA,AFLAG,INITIAL ; 214900
BOOLEAN SEQFLAG ; 215000
INTEGER ARRAY RECINDEX,SORTKEYS[0] ; 215100
REAL ARRAY EOFARRAY[0],AA[0,0],NEOFARRAY[0] ; 215200
PROCEDURE TSORTW ; 215300
SWITCH FILE SWF ; 215400
BEGIN 215500
INTEGER K,J,NNWPR ; 215600
LABEL L1,L2,L3,L4,RET,L5,L7,L8 ; 215700
K ~ 0 ; NNWPR ~ NWPR - 1 ; 215800
L1: K ~ K + 1 ; READ(SWF[UNITIN],NWPR,AA[K,*])[L3] ; 215900
RECSIN ~ RECSIN + 1 ; RECINDEX[K] ~ K ; 216000
IF K ! ARSIZE THEN GO TO L1 ; 216100
L2: TSORTW(K,NCOLS,SORTKEYS,AA,RECINDEX,AFLAG) ; 216200
IF INITIAL THEN 216300
BEGIN 216400
IF MOREDATA THEN 216500
BEGIN 216600
READ(SWF[UNITIN][NO],NWPR,AA[0,*])[L5] ; 216700
GO TO L7 ; 216800
END ; 216900
L5: MOREDATA ~ FALSE ; 217000
GO TO L8 ; 217100
END ; 217200
L7: IF AFLAG THEN WRITE(SWF[UNITOUT],NWPR,NEOFARRAY[*]) 217300
ELSE WRITE(SWF[UNITOUT],NWPR,EOFARRAY[*]) ; 217400
L8: AFLAG ~ NOT AFLAG ; 217500
FOR J ~ 1 STEP 1 UNTIL K DO 217600
BEGIN 217700
RECSOUT ~ RECSOUT + 1 ; 217800
IF INITIAL AND NOT MOREDATA AND SEQFLAG THEN 217900
AA[RECINDEX[J],SEQCOL] ~ RECSOUT ; 218000
WRITE(SWF[UNITOUT],NWPR,AA[RECINDEX[J],*]) ; 218100
END ; 218200
SUM ~ SUM + 1 ; 218300
IF MOREDATA THEN 218400
READ(SWF[UNITIN][NO],NWPR,AA[0,*])[L4] ; 218500
GO TO RET ; 218600
L3: MOREDATA ~ FALSE ; K ~ K - 1 ; GO TO L2 ; 218700
L4: MOREDATA ~ FALSE ; 218800
RET: INITIAL ~ FALSE ; 218900
END INTERNALSORT ; 219000
PROCEDURE COPY(COPYCOUNT,UNITIN,UNITOUT,NWPR,EOFMARK,SWF,SORTKEYS); 219100
INTEGER COPYCOUNT,UNITIN,UNITOUT,NWPR ; 219200
REAL EOFMARK ; 219300
SWITCH FILE SWF ; 219400
INTEGER ARRAY SORTKEYS[0] ; 219500
BEGIN 219600
LABEL L1,L2 ; 219700
INTEGER I,TALLY ; 219800
ARRAY TEMP[0:NWPR-1] ; 219900
TALLY ~ COPYCOUNT ; 220000
FOR I ~ 0 STEP 1 UNTIL NWPR-1 DO TEMP[I] ~ EOFMARK ; 220100
WRITE(SWF[UNITOUT],NWPR,TEMP[*]) ; 220200
L1: READ REVERSE(SWF[UNITIN],NWPR,TEMP[ *])[L2] ; 220300
IF ABS(TEMP[SORTKEYS[1]]) = EOFMARK THEN 220400
BEGIN 220500
TALLY ~ TALLY - 1 ; 220600
IF TALLY = 0 THEN GO TO L2 ; 220700
END ; 220800
WRITE(SWF[UNITOUT],NWPR,TEMP[*]) ; 220900
GO TO L1 ; 221000
L2: REWIND(SWF[UNITIN]) ; 221100
END COPY ; 221200
INITIAL ~ TRUE ; 221300
RECSIN ~ RECSOUT ~ 0 ; LASTPASS ~ FALSE ; 221400
NNT ~ NTAPES - 1 ; NT ~ NTAPES ; JJ ~ 0 ; 221500
NNWPR ~ NWPR - 1 ; 221600
EOFMARK ~ 549755813887 ; 221700
EOFMARK.[3:6] ~ 63 ; 221800
FOR I ~ 0 STEP 1 UNTIL NNWPR DO 221900
BEGIN 222000
EOFARRAY[I] ~ EOFMARK ; NEOFARRAY[I] ~ -EOFMARK ; 222100
END ; 222200
FOR I ~ 0 STEP 1 UNTIL NTAPES DO 222300
BEGIN 222400
ASCENDFLAG[I] ~ FALSE ; 222500
TSUM[I] ~ LIM[I] ~ TCHECK[I] ~ DIST[I] ~ 0 ; 222600
END ; 222700
EXITFLAG ~ FALSE ; MOREDATA ~ TRUE ; 222800
TCHECK[1] ~ 1 ; I ~ 1 ; 222900
ASCENDFLAG[1] ~ TRUE ; 223000
INTERNALSORT(0,I,NWPR,RECSIN,ARSIZE,NCOLS,ASCENDFLAG[I], 223100
RECSOUT,MOREDATA,RECINDEX,SORTKEYS,EOFARRAY,AA, 223200
TSORTW,SWF,TSUM[I],INITIAL,NEOFARRAY,SEQFLAG,SEQCOL); 223300
IF NOT MOREDATA THEN 223400
BEGIN 223500
REWIND(SWF[I]) ; 223600
IF SAVEFACTOR THEN 223700
BEGIN 223800
LOCK(SWF[0],SAVE) ; 223900
TYPEOUT(SPOOUT,INST[5,*]) ; 224000
SAVEFACTOR ~ FALSE ; 224100
END 224200
ELSE PURGE(SWF[0],1) ; 224300
GO TO RETURN ; 224400
END ; 224500
DISTRIB: H ~ TCHECK[1] ; 224600
FOR I ~ 2 STEP 1 UNTIL NNT DO 224700
TCHECK[I-1] ~ TCHECK[I] + H ; TCHECK[NNT] ~ H ; 224800
FOR I ~ 1 STEP 1 UNTIL NNT DO 224900
IF BOOLEAN(TCHECK[I]) THEN 225000
BEGIN 225100
FOR JJ ~ 1 STEP 1 UNTIL NNT DO 225200
LIM [JJ] ~ TCHECK[(I+JJ-2) MOD NNT + 1 ] ; 225300
GO TO EXIT ; 225400
END ; 225500
EXIT: FOR I ~ 1 STEP 1 UNTIL NNT DO 225600
FOR J ~ TSUM[I]+1 STEP 1 UNTIL LIM[I] DO 225700
IF MOREDATA THEN 225800
BEGIN 225900
INTERNALSORT(0,I,NWPR,RECSIN,ARSIZE,NCOLS,ASCENDFLAG[I], 226000
RECSOUT,MOREDATA,RECINDEX,SORTKEYS,EOFARRAY,AA, 226100
TSORTW,SWF,TSUM[I],INITIAL,NEOFARRAY,FALSE,0) ; 226200
END ELSE 226300
BEGIN 226400
IF ASCENDFLAG[I] THEN 226500
BEGIN 226600
WRITE(SWF[I],NWPR,NEOFARRAY[*]) ; 226700
END ELSE 226800
BEGIN 226900
WRITE(SWF[I],NWPR, EOFARRAY[*]) ; 227000
END ; 227100
TSUM[I] ~ TSUM[I] + 1 ; 227200
ASCENDFLAG[I] ~ NOT ASCENDFLAG[I] ; 227300
END ; 227400
IF MOREDATA THEN GO TO DISTRIB ; 227500
IF SAVEFACTOR THEN 227600
BEGIN 227700
LOCK(SWF[0],SAVE) ; 227800
TYPEOUT(SPOOUT,INST[5,*]) ; 227900
SAVEFACTOR ~ FALSE ; 228000
END 228100
ELSE PURGE(SWF[0],1) ; 228200
MERGEST: NEWRT ~ WRT ~ NT ; NSLEFT ~ RECSOUT ~ 0 ; 228300
FOR I ~ 2 STEP 1 UNTIL NT DO ASCENDFLAG[I] ~ FALSE ; 228400
ASCENDFLAG[1] ~ TRUE ; 228500
FOR I ~ 1 STEP 1 UNTIL NNT DO 228600
IF NOT BOOLEAN(TSUM[I]) THEN GO TO NOTALLODD ; 228700
COPY(TSUM[1],1,WRT,NWPR,EOFMARK,SWF,SORTKEYS) ; 228800
TSUM[WRT] ~ TSUM[1] ; TSUM[1] ~ 0 ; 228900
WRT ~ NEWRT ~ 1 ; 229000
NOTALLODD: NSLEFT ~ 0 ; 229100
FOR I ~ 1 STEP 1 UNTIL NT DO 229200
BEGIN 229300
NSLEFT ~ NSLEFT + TSUM[I] ; 229400
ASCENDFLAG[I] ~ FALSE ; 229500
END ; 229600
IF NSLEFT = NNT THEN LASTPASS ~ TRUE ; 229700
ASCENDFLAG[1] ~ TRUE ; 229800
MERGE: FOR I ~ 1 STEP 1 UNTIL NT DO 229900
BEGIN 230000
INDEX[I] ~ I ; 230100
IF I ! WRT THEN 230200
READ REVERSE(SWF[I],NWPR,A[I,*])[EOF1] ; 230300
END ; 230400
FOR J ~ 0 STEP 1 UNTIL NNWPR DO 230500
IF ASCENDFLAG[WRT] THEN A[WRT,J] ~ EOFMARK ELSE 230600
A[WRT,J] ~ -EOFMARK ; 230700
TSORTW(NT,NCOLS,SORTKEYS,A,INDEX,ASCENDFLAG[WRT]) ; 230800
IF NOT LASTPASS THEN 230900
IF ASCENDFLAG[WRT] THEN 231000
WRITE(SWF[WRT],NWPR,NEOFARRAY[*]) 231100
ELSE WRITE(SWF[WRT],NWPR,EOFARRAY[*]) ; 231200
RECORD: IND ~ INDEX[1] ; 231300
IF ABS(A[IND,SORTKEYS[1]]) = EOFMARK THEN 231400
BEGIN 231500
NSLEFT ~ NSLEFT - NNT + 1 ; 231600
IF NSLEFT = NNT THEN LASTPASS ~ TRUE ; 231700
IF NSLEFT = 1 THEN GO TO CLOSEND ; 231800
ASCENDFLAG[WRT] ~ NOT ASCENDFLAG[WRT] ; 231900
FOR I ~ 1 STEP 1 UNTIL NT DO 232000
BEGIN 232100
TT ~ 1 ; 232200
IF I ! WRT THEN TT ~ TSUM[I] ~ TSUM[I] - 1 ELSE 232300
TSUM[I] ~ TSUM[I] + 1 ; 232400
IF TT = 0 THEN 232500
BEGIN 232600
NEWRT ~ I ; 232700
REWIND(SWF[NEWRT]) ; 232800
EOF4: END ; 232900
END ; 233000
IF WRT ! NEWRT THEN 233100
BEGIN 233200
WRT ~ NEWRT ; GO TO NOTALLODD ; 233300
END ; 233400
WRT ~ NEWRT ; GO TO MERGE ; 233500
END ; 233600
IF LASTPASS THEN 233700
BEGIN 233800
RECSOUT ~ RECSOUT + 1 ; 233900
IF SEQFLAG THEN A[IND,SEQCOL] ~ RECSOUT ; 234000
END ; 234100
WRITE(SWF[WRT],NWPR,A[IND,*]) ; 234200
READ REVERSE(SWF[IND],NWPR,A[IND,*])[EOF2] ; 234300
SMALL ~ 1 ; LARGE ~ 2 ; 234400
FLAG ~ IF ASCENDFLAG[WRT] THEN 1 ELSE 2 ; 234500
ADJUST: FIRST ~ INDEX[SMALL] ; SECOND ~ INDEX[LARGE] ; 234600
FOR K ~ 1 STEP 1 UNTIL NCOLS DO 234700
BEGIN 234800
CC ~ SORTKEYS[K] ; 234900
IF A[FIRST,CC] > A[SECOND,CC] THEN GO TO SWFLAG1[FLAG] ; 235000
IF A[FIRST,CC] < A[SECOND,CC] THEN GO TO SWFLAG2[FLAG] ; 235100
END ; 235200
GO TO RECORD ; 235300
XCH: K ~ INDEX[SMALL] ; INDEX[SMALL] ~ INDEX[LARGE] ; 235400
INDEX[LARGE] ~ K ; SMALL ~ LARGE ; LARGE ~ LARGE + 1 ; 235500
IF LARGE { NT THEN GO TO ADJUST ELSE GO TO RECORD ; 235600
CLOSEND: FOR J ~ 1 STEP 1 UNTIL NT DO REWIND(SWF[J]) ; 235700
GO TO RETURN ; 235800
EOF1: WRITE(PRINTER,ERROR1) ; GO TO RETURN ; 235900
EOF2: WRITE(PRINTER,ERROR2) ; GO TO RETURN ; 236000
RETURN: IF (RECSIN ! RECSOUT) THEN 236100
BEGIN 236200
WRITE(PRINTER[DBL],ERROR3) ; 236300
GO TO FINISH ; 236400
END ; 236500
END TAPESORT ; 236600
IF (BLOCPARAM[NOBLOCK] = 1) THEN 236700
BEGIN 236800
COMMENT SORT EVENT TAPE ; 236900
IF BSAVE THEN 237000
BEGIN 237100
INST[3,0] ~ FILENAMES[RE] ; TYPEOUT(SPOOUT,INST[3,*]) ; 237200
END ; 237300
NOSORT ~ NOSORT + 1 ; 237400
NCOLS ~ EVENTCOL[NOSORT,1] ; 237500
FOR L ~ 1 STEP 1 UNTIL NCOLS DO 237600
COLSN[L] ~ EVENTCOL[NOSORT,L+1] ; 237700
TAPESORT(NTAPES,NCPR,NCOLS,COLSN,SORTARRAYSIZE,SWF[RE], 237800
SWF[WR],FALSE,0,BSAVE) ; 237900
TP ~ RE ; RE ~ WR ; WR ~ TP ; 238000
GO TO ORIGIN ; 238100
END ; 238200
IF BLOCPARAM[NOBLOCK] = 2 THEN 238300
BEGIN 238400
COMMENT SORT NEW EVENT TAPE FOR MERGING DURING AN UPDATE WITH 238500
CHANGE RUN ; 238600
NOSORT ~ NOSORT + 1 ; 238700
NCOLS ~ 1 ; COLSN[1] ~ 1 ; 238800
TAPESORT(NTAPES,NCPR,NCOLS,COLSN,SORTARRAYSIZE,SWF[NE], 238900
SWF[WR],FALSE,0,FALSE) ; 239000
TP ~ NE ; NE ~ WR ; WR ~ TP ; 239100
GO TO ORIGIN ; 239200
END ; 239300
COMMENT SORT ACTIVITY TAPE ; 239400
IF BSAVA THEN 239500
BEGIN 239600
INST[2,0] ~ FILENAMES[RD] ; TYPEOUT(SPOOUT,INST[2,*]) ; 239700
END ; 239800
RSORTNUM~ RSORTNUM + 1 ; 239900
NCOLS ~ SORTCOL[RSORTNUM,1] ; 240000
FOR L ~ 1 STEP 1 UNTIL NCOLS DO 240100
COLSN[L] ~ SORTCOL[RSORTNUM,L+1] ; 240200
TAPESORT(NTAPES,NWPR,NCOLS,COLSN,SORTARRAYSIZE,SWF[RD], 240300
SWF[WR],TRUE,0,BSAVA) ; 240400
TP ~ RD ; RD ~ WR ; WR ~ TP ; 240500
COMMENT FILL GLOBAL ARRAYS AFTER SORTING ; 240600
BEGIN 240700
TEMPKEY ~ 0 ; 240800
LOOP: READ(SWF[RD],*,TREC)[EOF] ; 240900
KEY ~ TEMPKEY ~ TEMPKEY + 1 ; 241000
RIRJ[KEY.[30:9],KEY.[39:9]] ~ RRIJ ; 241100
GO TO LOOP ; 241200
EOF: REWIND(SWF[RD]) ; 241300
END ; 241400
END SORT BLOCK ; 241500
GO TO ORIGIN ; 241600
BLOCK5: BEGIN 241700
COMMENT NETANAL BLOCK ; 241800
COMMENT 241900
DEFINITIONS OF VARIABLES IN NETANAL BLOCK 242000
TE,TI TEMPORARY ARRAYS USED IN FORWARD AND BACKWARD 242100
PASSES 242200
MN LATEST ALLOWABLE TIME FOR EVENT TO MEET SCHEDULE 242300
MX MAXIMUM TOTAL TIME LEADING TO EVENT 242400
TEMP,TEMP1,TEMP2,K,L LOCAL VARIABLES USED FOR INDEXING 242500
ARRAYS 242600
SEVENS LARGEST PERMISSABLE REAL NUMBER ON B5000 242700
; 242800
ARRAY TE,TI[0:NOEVNROW,0:NOEVNCOL] ; 242900
REAL MN,MX ; 243000
REAL SEVENS ; 243100
INTEGER K,L,TEMP,TEMP1,TEMP2 ; 243200
DEFINE DRI = RRIJ.[8:9],RRIJ.[17:9]#, 243300
DRJ = RRIJ.[30:9],RRIJ.[39:9]# ; 243400
LABEL LL2 ; 243410
LABEL LL3,LL4,LL5,LL7,EOF ; 243500
LABEL LOOP ; 243600
LABEL LOOP2,LOOP3,LOOP4,LOOP5,EOF2,EOF3,EOF4,EOF5,LL10,LL11, 243700
LL12,LL13,LL14,L4 ; 243800
SWITCH SW1 ~ LL3,LL7,LL2,LL4 ; 243900
SWITCH SW2 ~ LL10,LL11,LL12,LL13 ; 244000
SEVENS ~ 549755813887 ; SEVENS.[3:6] ~ 63 ; 244100
FOR K ~ 0 STEP 1 UNTIL NOEVNROW DO 244200
FOR L ~ 0 STEP 1 UNTIL NOEVNCOL DO 244300
TE[K,L] ~ TI[K,L] ~ 0 ; 244400
COMMENT PERFORM THE FORWARD PASS ; 244500
LOOP: READ(SWF[RD],*,TREC)[EOF] ; 244600
IF ASD = 0 THEN GO TO LL4 ; 244700
GO TO SW1[ASD] ; 244800
COMMENT COMPUTE EARLIEST START AND SUMS OF VARIANCES FOR ACTIVITY; 244900
LL2: TI[DRI] ~ ADAYS ; 245000
LL3: MX ~ ADAYS + ET ; ES ~ ADAYS ; 245010
SVAR ~ VAR ; GO TO LL5 ; 245100
LL7: ES ~ ADAYS - ET ; MX ~ ADAYS ; SVAR ~ 0 ; GO TO LL5 ; 245200
LL4: ES ~ TI[DRI] ; MX ~ ES + ET ; SVAR ~ TE[DRI] + VAR ; 245300
LL5: IF TI[DRJ] < MX THEN 245400
BEGIN 245500
TI[DRJ] ~ MX ; TE[DRJ] ~ SVAR 245600
END ; 245700
COMMENT UPDATE ACTIVITY TAPE WITH EARLIEST START AND SUMS OF 245800
VARIANCES ; 245900
WRITE(SWF[WR],*,TREC) ; 246000
GO TO LOOP ; 246100
EOF: REWIND(SWF[RD]) ; 246200
TP ~ RD ; RD ~ WR ; WR ~ TP ; 246300
IF EVENTTAPE THEN 246400
BEGIN 246500
COMMENT UPDATE EVENT TAPE WITH EARLIEST OCCURRENCE AND SUMS OF 246600
VARIANCES ; 246700
LOOP2: READ(SWF[RE],*,EREC)[EOF2] ; 246800
EEO ~ TI[RN.[30:9],RN.[39:9]] ; 246900
EVAR ~ TE[RN.[30:9],RN.[39:9]] ; 247000
WRITE(SWF[WR],*,EREC) ; 247100
GO TO LOOP2 ; 247200
EOF2: REWIND(SWF[RE]) ; REWIND(SWF[WR]) ; 247300
TP ~ WR ; WR ~ RE ; RE ~ TP ; 247400
END ; 247500
COMMENT PERFORM BACKWARD PASS ; 247600
FOR K ~ 0 STEP 1 UNTIL NOEVNROW DO 247700
FOR L ~ 0 STEP 1 UNTIL NOEVNCOL DO 247800
TE[K,L] ~ SEVENS ; 247900
FOR K ~ 1 STEP 1 UNTIL EK DO 248000
BEGIN 248100
TEMP ~ REEV[K] ; 248200
TEMP1 ~ TEMP.[30:9] ; TEMP2 ~ TEMP.[39:9] ; 248300
TE[TEMP1,TEMP2] ~ TI[TEMP1,TEMP2] 248400
END ; 248500
LOOP3: READ REVERSE(SWF[RD],*,TREC)[EOF3] ; 248600
IF ASD = 0 THEN GO TO LL12 ; 248700
GO TO SW2[ASD] ; 248800
COMMENT COMPUTE LATEST FINISH FOR ACTIVITY ; 248900
LL10: MN ~ ADAYS ; GO TO LL14 ; 249000
LL11: MN ~ ADAYS-ET ; GO TO LL14 ; 249100
LL13: TE[DRJ] ~ ADAYS ; 249200
LL12: MN ~ TE[DRJ] - ET ; 249300
LL14: IF (TE[DRI] > MN) THEN TE[DRI] ~ MN ; 249400
GO TO LOOP3 ; 249500
EOF3: REWIND(SWF[RD]) ; 249600
COMMENT UPDATE ACTIVITY TAPE WITH LATEST FINISH AND SLACK ; 249700
LOOP4: READ(SWF[RD],*,TREC)[EOF4] ; 249800
IF ASD = 2 THEN 249900
BEGIN 250000
LF ~ ADAYS ; SL ~ 0 ; GO TO L4 250100
END ; 250200
LF ~ TE[DRJ] ; SL ~ LF - ES - ET ; 250300
L4: WRITE(SWF[WR],*,TREC) ; 250400
GO TO LOOP4 ; 250500
EOF4: REWIND(SWF[RD]) ; REWIND(SWF[WR]) ; 250600
TP ~ RD ; RD ~ WR ; WR ~ TP ; 250700
IF EVENTTAPE THEN 250800
BEGIN 250900
COMMENT UPDATE EVENT TAPE WITH LATEST OCCURRENCE AND SLACK ; 251000
LOOP5: READ(SWF[RE],*,EREC)[EOF5] ; 251100
LEO ~ TE[RN.[30:9],RN.[39:9]] ; 251200
SLCK ~ LEO - EEO ; 251300
WRITE(SWF[WR],*,EREC) ; 251400
GO TO LOOP5 ; 251500
EOF5: REWIND(SWF[RE]) ; REWIND(SWF[WR]) ; 251600
TP ~ WR ; WR ~ RE ; RE ~ TP ; 251700
END ; 251800
PURGE(SWF[WR],1) ; 251900
END NETANAL BLOCK ; 252000
GO TO ORIGIN ; 252100
BLOCK6: BEGIN 252200
COMMENT LIST BLOCK ; 252300
COMMENT 252400
DEFINITIONS OF VARIABLES IN LIST BLOCK 252500
TLINE TOTAL NUMBER PRINTED LINES PERMITTED PER PAGE 252600
PAGEN PAGE NUMBER 252700
MOS MONTH NUMBER OF NETWORK START DATE 252800
DAS DAY OF THE MONTH OF NETWORK START DATE 252900
YRS YEAR OF NETWORK START DATE 253000
MOR MONTH NUMBER OF REPORT DATE 253100
DAR DAY OF THE MONTH OF NETWORK REPORT DATE 253200
YRR YEAR OF NETWORK REPORT DATE 253300
MOE MONTH NUMBER OF ACTIVITY START DATE 253400
DAE DAY OF THE MONTH OF ACTIVITY START DATE 253500
YRE YEAR OF ACTIVITY START DATE 253600
MOF MONTH NUMBER OF ACTIVITY FINISH DATE 253700
DAF DAY OF THE MONTH OF ACTIVITY FINISH DATE 253800
YRF YEAR OF ACTIVITY FINISH DATE 253900
DAA DAY OF THE MONTH OF ACTIVITY DATE 254000
MOA MONTH NUMBER OF ACTIVITY DATE 254100
YRA YEAR OF ACTIVITY DATE 254200
NLINE NUMBER OF LINES PRINTED ON PAGE BY PRINTER 254300
TEMPI LOCAL VARIABLE 254400
PDTA NUMBER OF ACTIVITIES LEADING INTO A SUCCESSOR 254500
EVENT 254600
SUTA NUMBER OF ACTIVITIES LEADING FROM A SUCCESSOR 254700
EVENT 254800
ACTA NUMBER OF ACTIVITIES LEADING INTO A SUCCESSOR 254900
EVENT WHICH HAVE BEEN COMPLETED 255000
DEPTDIG NUMBER OF DIGITS IN DEPARTMENT NUMBER 255100
DEPT DEPARTMENT NUMBER 255200
OLDDEPT DEPARTMENT NUMBER OF PREVIOUS EVENT 255300
DC FLAG DENOTING WHICH ACTIVITIES ARE TO BE LISTED 255400
0 ALL ACTIVITIES 255500
1 DUMMY ACTIVITES OMITTED 255600
2 COMPLETED ACTIVITES OMITTED 255700
3 DUMMY AND COMPLETED ACTIVITES OMITTED 255800
DEPTIJ FLAG DENOTING TYPE OF ACTIVITY DEPARTMENT 255900
REPORTS 256000
0 NO DEPARTMENT REPORTS 256100
1 REPORTS BY DEPARTMENT OF PREDECESSOR EVENT 256200
2 REPORTS BY DEPARTMENT OF SUCCESSOR EVENT 256300
NINES 9999999999 256400
MILESTONE MILESTONE EVENT NUMBER 256500
PEC FLAG, P DENOTING THAT ALL PRECEDING ACTIVITIES 256600
HAVE BEEN COMPLETED 256700
ATYPE TYPE OF ACTIVITY DATE 256800
PROB PROBABILITY OF MEETING A SHEDULE DATE 256900
BOOL2 BOOLEAN FLAG, TRUE IF ACTIVITY DATE IS NOT VALID 257000
BDUM BOOLEAN FLAG, TRUE IF DUMMY ACTIVITIES ARE TO 257100
BE OMITTED FROM LISTING 257200
BCOMP BOOLEAN FLAG, TRUE IF COMPLETED ACTIVITIES ARE 257300
TO BE OMITTED FROM LISTING 257400
BDUMCOMP BOOLEAN FLAG, TRUE IF DUMMY AND COMPLETED 257500
ACTIVITIES ARE TO BE OMITTED FROM LISTING 257600
MSLIST BOOLEAN FLAG, TRUE IF MILESTONE REPORTS ARE TO 257700
BE GENERATED 257800
DEPTLIST BOOLEAN FLAG, TRUE IF EVENT DEPARTMENT REPORTS 257900
ARE TO BE GENERATED 258000
DPM ARRAY CONTAINING NUMBER OF DAYS IN EACH MONTH 258100
MONTH ARRAY CONTAINING ABBREVIATION OF EACH MONTH 258200
TITLE ARRAY CONTAINING TITLE OF MILESTONE REPORT 258300
; 258400
INTEGER TLINE,PAGEN,MOS,DAS,YRS,MOR,DAR,YRR,MOE,DAE,YRE,MOF,DAF, 258500
YRF,NLINE,PDTA,SUTA,ACTA,TEMPI ; 258600
INTEGER DEPTDIG,DEPT,OLDDEPT ; 258700
BOOLEAN BOOL2 ; 258800
INTEGER ARRAY DPM[0:12] ; 258900
ALPHA ARRAY MONTH[0:12] ; 259000
LIST OUT1(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],PAGEN) ; 259100
LIST OUTH(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL]), 259200
OUTHA(DAS,MONTH[MOS],YRS,NOACT,RUN,DAR,MONTH[MOR],YRR, 259300
NOEVN) ; 259400
FORMAT OUT FORM1("NETWORK NAME",X6,13A6,X14,"PAGE",I6) ; 259500
FORMAT OUT FORMH(////////////////////"NETWORK NAME",X6,13A6//), 259600
FORMHA("NETWORK START DATE",I5,X1,A3,I3,X8,"NUMBER OF ", 259700
"ACTIVITIES",I11,X10,"RUN NUMBER",I11//"NETWORK ", 259800
"REPORT DATE",I4,X1,A3,I3,X8,"NUMBER OF EVENTS",I15); 259900
PROCEDURE PACK(DAYS,SDAYS,WDPW,DPM,MO,DA,YR,BOOL) ; 260000
COMMENT THIS PROCEDURE COMPUTES THE MONTH NO, DAY, AND YEAR OF A 260100
DATE SPECIFIED IN NUMBER OF WORKING DAYS FROM A GIVEN 260200
DATE ; 260300
COMMENT 260400
DEFINITIONS OF VARIABLES IN PROCEDURE PACK 260500
DAYS DATE TO BE PACKED GIVEN IN NUMBER OF WORKING 260600
DAYS FROM A GIVEN DATE SDAYS 260700
SDAYS NUMBER OF WORKING DAYS FROM 1/1/62 TO A GIVEN 260800
DATE 260900
WDPW NUMBER OF WORKING DAYS PER WEEK 261000
MO MONTH NUMBER OF DATE DAYS 261100
DA DAY OF THE MONTH OF DATE DAYS 261200
YR YEAR OF DATE DAYS 261300
BOOL BOOLEAN FLAG, TRUE IF DAYS IS NOT A VALID DATE 261400
DPM ARRAY CONTAINING NUMBER OF DAYS IN EACH MONTH 261500
TDAYS NUMBER OF WORKING DAYS FROM 1/1/62 UNTIL DAYS 261600
TEMP NUMBER OF WORK WEEKS IN TDAYS 261700
TTDAY NUMBER OF ACTUAL DAYS FROM 1/1/62 UNTIL DAYS 261800
C NUMBER OF YEARS FROM 1/1/61 UNTIL DAYS 261900
K NUMBER OF YEARS FROM LAST LEAP YEAR 262000
M NUMBER OF MONTHS IN DATE OF DAYS 262100
; 262200
VALUE DAYS,SDAYS,WDPW ; 262300
INTEGER DAYS,SDAYS,WDPW,MO,DA,YR ; 262400
BOOLEAN BOOL ; 262500
INTEGER ARRAY DPM[0] ; 262600
BEGIN 262700
INTEGER TDAYS,TEMP,TTDAY,C,K,M ; 262800
LABEL T1,T2,T4,L1,L2,L3 ; 262900
TDAYS ~ DAYS + SDAYS ; 263000
TEMP ~ TDAYS MOD WDPW ; 263100
TTDAY ~ (TDAYS DIV WDPW) | 7 + TEMP ; 263200
IF TEMP = 0 THEN TTDAY ~ TTDAY - 2 ; 263300
IF TTDAY < 0 THEN 263400
BEGIN 263500
DA ~ 1 ; MO ~ 1 ; YR ~ 62 ; 263600
BOOL ~ TRUE ; GO TO L3 263700
END ; 263800
IF TTDAY > 6940 THEN 263900
BEGIN 264000
DA ~ 31 ; MO ~ 12 ; YR ~ 80 ; 264100
BOOL ~ TRUE ; GO TO L3 264200
END ; 264300
TTDAY ~ TTDAY + 365 ; 264400
C ~ 0 ; 264500
T1: K ~ 0 ; 264600
T2: IF TTDAY { 365 THEN GO TO T4 ; 264700
TTDAY ~ TTDAY - 365 ; 264800
K ~ K + 1 ; C ~ C + 1 ; 264900
IF K ! 3 THEN GO TO T2 ; 265000
IF TTDAY > 366 THEN 265100
BEGIN 265200
TTDAY ~ TTDAY - 366 ; C ~ C + 1 ; GO TO T1 265300
END ; 265400
T4: YR ~ 61 + C ; 265500
IF (YR MOD 4) ! 0 THEN 265600
BEGIN 265700
M ~ 1 ; GO TO L1 265800
END ; 265900
IF TTDAY { 31 THEN 266000
BEGIN 266100
MO ~ 1 ; GO TO L2 266200
END ; 266300
TTDAY ~ TTDAY - 31 ; 266400
IF TTDAY { 29 THEN 266500
BEGIN 266600
MO ~ 2 ; GO TO L2 266700
END ; 266800
TTDAY ~ TTDAY - 29 ; M ~ 3 ; 266900
L1: FOR MO ~ M STEP 1 UNTIL 12 DO 267000
BEGIN 267100
IF TTDAY { DPM[MO] THEN GO TO L2 ; 267200
TTDAY ~ TTDAY - DPM[MO] 267300
END ; 267400
L2: DA ~ TTDAY ; BOOL ~ FALSE ; 267500
L3: END PACK ; 267600
PROCEDURE UPACK(MODAYR,MO,DA,YR) ; 267700
COMMENT THIS PROCEDURE UNPACKS DATE MODAYR INTO MONTH NO., DAY, 267800
AND YEAR ; 267900
COMMENT 268000
DEFINITIONS OF VARIABLES IN PROCEDURE UPACK 268100
MODAYR SIX DIGIT DATE TO BE UNPACKED 268200
MO MONTH NUMBER OF MODAYR 268300
DA DAY OF THE MONTH OF MODAYR 268400
YR YEAR OF MODAYR 268500
; 268600
VALUE MODAYR ; 268700
INTEGER MODAYR,MO,DA,YR ; 268800
BEGIN 268900
YR ~ MODAYR MOD 100 ; 269000
MO ~ MODAYR DIV 10000 ; 269100
DA ~ (MODAYR DIV 100) MOD 100 269200
END UPACK ; 269300
FILL DPM[*] WITH 0,31,28,31,30,31,30,31,31,30,31,30,31 ; 269400
FILL MONTH[*] WITH " ","JAN","FEB","MAR","APR","MAY", 269500
"JUN","JUL","AUG","SEP","OCT","NOV","DEC" ; 269600
UPACK(SDATE,MOS,DAS,YRS) ; UPACK(RDATE,MOR,DAR,YRR) ; 269700
IF (BLOCPARAM[NOBLOCK].[9:3] = 0) THEN 269800
BEGIN 269900
COMMENT BLOCK TO LIST ACTIVITIES ; 270000
INTEGER DAA,MOA,YRA ; 270100
INTEGER DC,DEPTIJ ; 270200
ALPHA PEC,ATYPE ; 270300
REAL PROB ; 270400
BOOLEAN BDUM,BCOMP ; 270500
BOOLEAN BDUMCOMP ; 270600
LABEL L1,L2,L5,L6,L7,LL1,LL2,LL3,LL4,EOF ; 270700
LABEL D1,D2,D3,D4,D5,D6 ; 270800
SWITCH SW1 ~ LL1,LL2,LL3,LL4 ; 270900
SWITCH SW2 ~ L6,D1,D2 ; 271000
SWITCH SW3 ~ L1,D4,D5 ; 271100
LIST OUT6(FOR LL ~ 2 STEP 1 UNTIL 5 DO ITEMNAME[SORTCOL 271200
[RSORTNUM,LL]]), 271300
OUTR(FOR LL ~ 1 STEP 1 UNTIL 4 DO REMARKS[LL]), 271400
OUT2(KEY,I,J,ET,VAR,DAA,MONTH[MOA],YRA,ATYPE,DAF, 271500
MONTH[MOF],YRF,SL,ES+ET,SVAR,PDTA,SUTA,ACTA,RANKI, 271600
PEC), 271700
OUT3(KEY,I,J,ET,VAR,DAE,MONTH[MOE],YRE,DAF,MONTH[MOF], 271800
YRF,SL,ES+ET,SVAR,PDTA,SUTA,ACTA,RANKI,PEC), 271900
OUT4(KEY,I,J,ET,DAA,MONTH[MOA],YRA,ATYPE,PDTA,SUTA,ACTA, 272000
RANKI,PEC), 272100
OUT5(KEY,I,J,ET,VAR,DAA,MONTH[MOA],YRA,ATYPE,DAE, 272200
MONTH[MOE],YRE,SL,ET+ES,SVAR,PDTA,SUTA,ACTA,RANKI, 272300
PEC,PROB) ; 272400
FORMAT OUT FORM6("DEPARTMENT REPORTS BY DEPARTMENT OF PREDECESSOR ", 272500
"EVENT SORTED BY",4(X2,A6)//), 272600
FORM7("DEPARTMENT REPORTS BY DEPARTMENT OF SUCCESSOR ", 272700
"EVENT SORTED BY",4(X2,A6)//), 272800
FORM8("LISTING OF ACTIVITIES SORTED BY",4(X2,A6)//), 272900
FORM9("LISTING OF ACTIVITIES BY DEPARTMENT OF ", 273000
"PREDECESSOR EVENT",X26,"DEPARTMENT NUMBER",I10), 273100
FORM10("LISTING OF ACTIVITIES BY DEPARTMENT OF SUCCESSOR", 273200
" EVENT",X28,"DEPARTMENT NUMBER",I10), 273300
FORMR(4A6), 273400
FORMDC("DUMMY AND COMPLETED ACTIVITIES ARE OMITTED FROM 273500
LISTING."), 273600
FORMC("COMPLETED ACTIVITIES ARE OMITTED FROM LISTING."), 273700
FORMD("DUMMY ACTIVITIES ARE OMITTED FROM LISTING."), 273800
HEAD(" ACTIVITY DESCRIPTION EXP./ACT",X7,"ACTIVITY ", 273900
"DATE EARLIEST LATEST",X9,"EXPECTED",X7,"PRE SUC", 274000
" ACT"/" KEY PREDECESSOR SUCCESSOR DURATION VAR. ", 274100
" DATE TYPE START FINISH SLACK COMP. ", 274200
"VAR. TAL TAL TAL RANK PROB"/), 274300
FORM2(I5,2I11,2F7.1,I3,X1,A3,I3,X1,A3,X10,I4,X1,A3,I3, 274400
3F7.1,3I4,I5,X1,A1), 274500
FORM3(I5,2I11,2F7.1,X14,I3,X1,A3,I3,I4,X1,A3,I3,3F7.1, 274600
3I4,I5,X1,A1), 274700
FORM4(I5,2I11,F7.1,X7,I3,X1,A3,I3,X1,A3,X42,3I4,I5,X1,A1), 274800
FORM5(I5,2I11,2F7.1,I3,X1,A3,I3,X1,A3,I3,X1,A3,I3,X11, 274900
3F7.1,3I4,I5,X1,A1,F4.2) ; 275000
REAL PROCEDURE NORMPROB(SCHED,EXPT,SVAR) ; 275100
COMMENT THIS PROCEDURE COMPUTES THE PROBABILITY OF MEETING 275200
SCHEDULE COMPLETIONS ; 275300
COMMENT 275400
DEFINITIONS OF VARIABLES IN PROCEDURE NORMPROB 275500
SCHED NUMBER OF WORKING DAYS FROM NETWORK START DATE 275600
UNTIL ACTIVITY SCHEDULE DATE 275700
EXPT NUMBER OF WORKING DAYS FROM NETWORK START DATE 275800
UNTIL EXPECTED FINISH OF ACTIVITY 275900
SVAR SUM OF THE VARIANCES ALONG MOST CRITICAL PATH 276000
LEADING TO GIVEN ACTIVITY 276100
V,Y,Z LOCAL VARIABLES TO PROCEDURE 276200
; 276300
VALUE SCHED,EXPT,SVAR ; 276400
REAL SCHED,EXPT,SVAR ; 276500
BEGIN 276600
REAL V,Y,Z ; 276700
V ~ (SCHED - EXPT)/(SQRT(SVAR)) ; 276800
Y ~ ABS(V)/1.4142136 ; 276900
Z ~ SIGN(V) ; 277000
IF Y > 50.0 THEN NORMPROB ~ 0.5 | (1 + Z) ELSE 277100
NORMPROB ~ 0.5 | (1.0 + Z | (1.0/((((0.078108 | Y + 277200
0.000972) | Y + 0.230389) | Y + 0.278393) | Y + 1.0)*4)) 277300
END NORMPROB ; 277400
BDUM ~ BCOMP ~ BDUMCOMP ~ FALSE ; 277500
DC ~ BLOCPARAM[NOBLOCK].[42:6] ; 277600
IF (DC = 3) THEN BDUMCOMP ~ BCOMP ~ BDUM ~ TRUE ELSE 277700
IF (DC = 1) THEN BDUM ~ TRUE ELSE 277800
IF (DC =2) THEN BCOMP ~ TRUE ; 277900
NLINE ~ TLINE ~ 13 ; PAGEN ~ 0 ; 278000
COMMENT WRITE TITLE PAGE ; 278100
WRITE(PRINTER[PAGE]) ; 278200
WRITE(PRINTER,FORMH,OUTH) ; 278300
DEPTIJ ~ BLOCPARAM[NOBLOCK].[16:3] ; 278400
GO TO SW2[DEPTIJ + 1] ; 278500
L6: WRITE(PRINTER,FORM8,OUT6) ; GO TO L7 ; 278600
D1: WRITE(PRINTER,FORM6,OUT6) ; GO TO D3 ; 278700
D2: WRITE(PRINTER,FORM7,OUT6) ; 278800
D3: DEPTDIG ~ BLOCPARAM[NOBLOCK].[20:3] ; 278900
IF (DEPTDIG = 0) THEN DEPTDIG ~ 4 ; 279000
OLDDEPT ~ 10 * DEPTDIG ; 279100
DEPTDIG ~ 10 * (10 - DEPTDIG) ; 279200
L7: WRITE(PRINTER,FORMHA,OUTHA) ; 279300
COMMENT READ ACTIVITY RECORD ; 279400
L2: READ(SWF[RD],*,TREC)[EOF] ; 279500
IF (ASD = 2) AND BCOMP THEN GO TO L2 ; 279600
IF BDUM AND ((ET = 0) AND (VAR = 0)) THEN GO TO L2 ; 279700
GO TO SW3[DEPTIJ + 1] ; 279800
D4: DEPT ~ I DIV DEPTDIG ; GO TO D6 ; 279900
D5: DEPT ~ J DIV DEPTDIG ; 280000
D6: IF (DEPT ! OLDDEPT) THEN 280100
BEGIN 280200
OLDDEPT ~ DEPT ; 280300
NLINE ~ 13 ; PAGEN ~ 0 ; 280400
END ; 280500
L1: NLINE ~ NLINE + 1 ; 280600
IF NLINE > TLINE THEN 280700
BEGIN 280800
COMMENT WRITE HEADING ; 280900
PAGEN ~ PAGEN + 1 ; NLINE ~ 1 ; 281000
WRITE(PRINTER[PAGE]) ; 281100
WRITE(PRINTER[DBL],FORM1,OUT1) ; 281200
IF (DEPTIJ = 1) THEN WRITE(PRINTER[DBL],FORM9,DEPT) ELSE 281300
IF (DEPTIJ = 2) THEN WRITE(PRINTER[DBL],FORM10,DEPT) ; 281400
IF BDUMCOMP THEN WRITE(PRINTER[DBL],FORMDC) ELSE 281500
IF BCOMP THEN WRITE(PRINTER[DBL],FORMC) ELSE 281600
IF BDUM THEN WRITE(PRINTER[DBL],FORMD) ; 281700
WRITE(PRINTER,HEAD) ; 281800
END ; 281900
PDTA ~ TAL.[30:9] ; 282000
SUTA ~ TAL.[21:9] ; 282100
ACTA ~ TAL.[39:9] ; 282200
IF TAL < 0 THEN PEC ~ "P" ELSE PEC ~ " " ; 282300
COMMENT COMPUTE ACTIVITY EARLIEST START DATE ; 282400
IF ES > ENTIER(ES) THEN TEMPI ~ ENTIER(ES) + 1 ELSE 282500
TEMPI ~ ENTIER(ES) ; 282600
PACK(TEMPI,SDAYS,WDPW,DPM,MOE,DAE,YRE,BOOL2) ; 282700
COMMENT COMPUTE ACTIVITY LATEST FINISH DATE ; 282800
IF LF > ENTIER(LF) THEN TEMPI ~ ENTIER(LF) + 1 ELSE 282900
TEMPI ~ ENTIER(LF) ; 283000
PACK(TEMPI,SDAYS,WDPW,DPM,MOF,DAF,YRF,BOOL2) ; 283100
WRITE(PRINTER,FORMR,OUTR) ; 283200
L5: IF ASD ! 0 THEN 283300
BEGIN 283400
TEMPI ~ ADAYS ; 283500
COMMENT COMPUTE ACTIVITY DATE AND LIST ACTIVITY RECORD ; 283600
PACK(TEMPI,SDAYS,WDPW,DPM,MOA,DAA,YRA,BOOL2) ; 283700
GO TO SW1[ASD] ; 283800
LL1: ATYPE ~ "ST." ; WRITE(PRINTER[DBL],FORM2,OUT2) ; 283900
GO TO L2 ; 284000
LL2: ATYPE ~ "COM" ; WRITE(PRINTER[DBL],FORM4,OUT4) ; 284100
GO TO L2 ; 284200
LL3: ATYPE ~ "DIR" ; WRITE(PRINTER[DBL],FORM2,OUT2) ; 284300
GO TO L2 ; 284400
LL4: ATYPE ~ "SCH" ; 284500
IF SVAR ! 0 THEN 284600
PROB ~ NORMPROB(ADAYS,ET+ES,SVAR) ELSE PROB ~ 0 ; 284700
WRITE(PRINTER[DBL],FORM5,OUT5) ; GO TO L2 284800
END ; 284900
WRITE(PRINTER[DBL],FORM3,OUT3) ; 285000
GO TO L2 ; 285100
EOF: REWIND(SWF[RD]) ; 285200
GO TO ORIGIN 285300
END ; 285400
BEGIN 285500
COMMENT BLOCK TO LIST EVENTS ; 285600
INTEGER NINES,MILESTONE ; 285700
BOOLEAN MSLIST,DEPTLIST ; 285800
ALPHA ARRAY TITLE[0:12] ; 285900
FILE IN MSCARDS(2,10) ; 286000
LABEL LOOP,EOF ; 286100
LABEL L1,L2 ; 286200
LIST OUT2(EVNO,FOR LL ~ 1 STEP 1 UNTIL 4 DO DSCPT[LL],DAE, 286300
MONTH[MOE],YRE,DAF,MONTH[MOF],YRF,SLCK,EVAR,RANKE, 286400
PDTA,SUTA,ACTA), 286500
OUT3(FOR LL ~ 2 STEP 1 UNTIL 5 DO EVENTITEM[EVENTCOL 286600
[NOSORT,LL]]), 286700
TITLELIST(FOR LL ~ 1 STEP 1 UNTIL 12 DO TITLE[LL]) ; 286800
FORMAT IN MSTITLE(12A6), 286900
MSFORM(I10) ; 287000
FORMAT OUT HEAD(" EVENT",X11,"EVENT",X22,"EARLIEST ", 287100
"LATEST",X13,"TOTAL",X8,"PRE SUC ACT"/" NUMBER", 287200
X7,"DESCRIPTION",X18,"OCCURRENCE OCCURRENCE", 287300
" SLACK VARIANCE RANK TAL TAL TAL"/), 287400
FORM2(I10,X1,4A6,X11,I2,X1,A3,I3,I4,X1,A3,I3,2F8.1,I7, 287500
3I4), 287600
FORM3(I10,X1,4A6," STARTING ",I2,X1,A3,I3,I4,X1,A3,I3, 287700
2F8.1,I7,3I4), 287800
FORM4(I10,X1,4A6," ENDING ",I2,X1,A3,I3,I4,X1,A3,I3, 287900
2F8.1,I7,3I4), 288000
FORM5("DEPARTMENT REPORTS OF EVENTS"//), 288100
FORM6("MILESTONE REPORTS"//), 288200
FORM7("LISTING OF EVENTS SORTED BY",4(X2,A6)//), 288300
FORM8("MILESTONE EVENT NUMBER",I10," NOT ON EVENT TAPE"), 288400
FORM9("DEPARTMENT NUMBER",I10,X4,"EVENT REPORT"), 288500
FORM10("MILESTONE REPORT ",12A6) ; 288600
DEPTLIST ~ MSLIST ~ FALSE ; 288700
NLINE ~ TLINE ~ 25 ; PAGEN ~ 0 ; 288800
NINES ~ 9999999999 ; 288900
COMMENT WRITE TITLE PAGE ; 289000
WRITE(PRINTER[PAGE]) ; WRITE(PRINTER,FORMH,OUTH) ; 289100
IF (BLOCPARAM[NOBLOCK].[16:3] = 1) THEN 289200
BEGIN 289300
DEPTLIST ~ TRUE ; 289400
DEPTDIG ~ BLOCPARAM[NOBLOCK].[20:3] ; 289500
IF (DEPTDIG = 0) THEN DEPTDIG ~ 4 ; 289600
OLDDEPT ~ 10 * DEPTDIG ; 289700
DEPTDIG ~ 10 * (10 - DEPTDIG) ; 289800
WRITE(PRINTER[DBL],FORM5) ; 289900
END 290000
ELSE IF (BLOCPARAM[NOBLOCK].[16:3] = 2) THEN 290100
BEGIN 290200
MSLIST ~ TRUE ; 290300
WRITE(PRINTER,FORM6) ; 290400
READ(MSCARDS,MSTITLE,TITLELIST)[EOF] ; 290500
END 290600
ELSE WRITE(PRINTER,FORM7,OUT3) ; 290700
WRITE(PRINTER,FORMHA,OUTHA) ; 290800
COMMENT READ EVENT RECORD ; 290900
LOOP: READ(SWF[RE],*,EREC)[EOF] ; 291000
IF DEPTLIST THEN 291100
BEGIN 291200
DEPT ~ EVNO DIV DEPTDIG ; 291300
IF DEPT ! OLDDEPT THEN 291400
BEGIN 291500
OLDDEPT ~ DEPT ; 291600
NLINE ~ 25 ; PAGEN ~ 0 ; 291700
END ; 291800
END 291900
ELSE IF MSLIST THEN 292000
BEGIN 292100
COMMENT READ MILESTONE CARDS ; 292200
L1: READ(MSCARDS,MSFORM,MILESTONE)[EOF] ; 292300
IF(MILESTONE = NINES) THEN 292400
BEGIN 292500
READ(MSCARDS,MSTITLE,TITLELIST)[EOF] ; 292600
NLINE ~ 25 ; PAGEN ~ 0 ; 292700
EVNO ~ 0 ; 292800
REWIND(SWF[RE]) ; 292900
GO TO L1 ; 293000
END ; 293100
L2: IF (EVNO < MILESTONE) THEN 293200
BEGIN 293300
READ(SWF[RE],*,EREC)[EOF] ; 293400
GO TO L2 ; 293500
END ; 293600
IF (EVNO > MILESTONE) THEN 293700
BEGIN 293800
WRITE(PRINTER[DBL],FORM8,MILESTONE) ; 293900
GO TO L1 ; 294000
END ; 294100
END ; 294200
NLINE ~ NLINE + 1 ; 294300
IF NLINE > TLINE THEN 294400
BEGIN 294500
COMMENT WRITE HEADING ; 294600
PAGEN ~ PAGEN + 1 ; NLINE ~ 1 ; 294700
WRITE(PRINTER[PAGE]) ; WRITE(PRINTER[DBL],FORM1,OUT1) ; 294800
IF DEPTLIST THEN WRITE(PRINTER[DBL],FORM9,DEPT) ELSE 294900
IF MSLIST THEN WRITE(PRINTER[DBL],FORM10,TITLELIST) ; 295000
WRITE(PRINTER,HEAD) ; 295100
END ; 295200
PDTA ~ TALLY.[30:9] ; 295300
SUTA ~ TALLY.[21:9] ; 295400
ACTA ~ TALLY.[39:9] ; 295500
COMMENT COMPUTE EARLIEST EVENT OCCURRENCE DATE ; 295600
TEMPI ~ ENTIER(EEO) ; 295700
IF (EEO > TEMPI) THEN TEMPI ~ TEMPI + 1 ; 295800
PACK(TEMPI,SDAYS,WDPW,DPM,MOE,DAE,YRE,BOOL2) ; 295900
COMMENT COMPUTE LATEST EVENT OCCURRENCE DATE ; 296000
TEMPI ~ ENTIER(LEO) ; 296100
IF (LEO > TEMPI) THEN TEMPI ~ TEMPI + 1 ; 296200
PACK(TEMPI,SDAYS,WDPW,DPM,MOF,DAF,YRF,BOOL2) ; 296300
COMMENT LIST EVENT RECORD ; 296400
IF PDTA = 0 THEN 296500
WRITE(PRINTER[DBL],FORM3,OUT2) ELSE 296600
IF SUTA = 0 THEN 296700
WRITE(PRINTER[DBL],FORM4,OUT2) ELSE 296800
WRITE(PRINTER[DBL],FORM2,OUT2) ; 296900
GO TO LOOP ; 297000
EOF: REWIND(SWF[RE]) ; 297100
END ; 297200
END ; 297300
GO TO ORIGIN ; 297400
BLOCK7: BEGIN 297500
COMMENT PLOT BLOCK ; 297600
COMMENT 297700
DEFINITIONS OF VARIABLES IN PLOT BLOCK 297800
PARA FLAG DENOTING INTERVAL OF GRAPH 297900
1 DAYS 298000
2 WEEKS 298100
3 MONTHS 298200
4 QUARTERS 298300
MOS MONTH NUMBER OF NETWORK START DATE 298400
DAS DAY OF THE MONTH OF NETWORK START DATE 298500
YRS YEAR OF NETWORK START DATE 298600
MOR MONTH NUMBER OF REPORT DATE 298700
DAR DAY OF THE MONTH OF REPORT DATE 298800
YRR YEAR OF REPORT DATE 298900
PAGEN PAGE NUMBER OF GRAPH 299000
TLINE TOTAL NUMBER OF PRINTED LINES ALLOWED PER PAGE 299100
NLINE NUMBER OF LINES PRINTED ON PAGE BY PRINTER 299200
PDATE GRAPH STARTING DATE 299300
MOP MONTH NUMBER OF GRAPH STARTING DATE 299400
DAP DAY OF THE MONTH OF GRAPH STARTING DATE 299500
YRP YEAR OF GRAPH STARTING DATE 299600
PDAYS NUMBER OF WORKING DAYS FROM 1/1/62 UNTIL GRAPH 299700
STARTING DATE 299800
CPDATE CORRECTED GRAPH STARTING DATE 299900
QP QUARTER OF GRAPH START DATE 300000
PY YEAR FOR HEADING OF GRAPH BY QUARTERS 300100
SWER FLAG DENOTING TYPE OF ERROR IN GRAPH STARTING 300200
DATE 300300
DC FLAG DENOTING WHICH ACTIVITIES ARE TO BE PLOTTED 300400
0 ALL ACTIVITIES ARE TO BE PLOTTED 300500
1 DUMMY ACTIVITIES ARE TO BE OMITTED 300600
2 COMPLETED ACTIVITES ARE TO BE OMITTED 300700
3 DUMMY AND COMPLETED ACTIVITES ARE TO BE 300800
OMITTED 300900
DEPT DEPARTMENT NUMBER OF CURRENT EVENT 301000
DEPTIJ FLAG DENOTING TYPE OF DEPARTMENT GRAPHS 301100
0 NO DEPARTMENT GRAPHS 301200
1 GRAPHS BY DEPARTMENT OF PREDECESSOR EVENT 301300
2 GRAPHS BY DEPARTMENT OF SUCCESSOR EVENT 301400
DEPTDIG NUMBER OF DIGITS IN DEPARTMENT NUMBER FIELD 301500
OLDDEPT DEPARTMENT NUMBER OF PREVIOUS EVENT 301600
BDUM BOOLEAN FLAG, TRUE IF DUMMY ACTIVITIES ARE TO BE 301700
OMITTED FROM GRAPH 301800
BCOMP BOOLEAN FLAG, TRUE IF COMPLETED ACTIVITIES ARE 301900
TO BE OMITTED FROM GRAPH 302000
BDUMCOMP BOOLEAN FLAG, TRUE IF BOTH DUMMY AND COMPLETED 302100
ACTIVITIES ARE TO BE OMITTED FROM LISTING 302200
DEPTTITLE BOOLEAN FLAG, TRUE IF TITLE FOR DEPARTMENT 302300
REPORTS HAS JUST BEEN WRITTEN 302400
WD INTERVAL OF GRAPH IF BY WEEKS OR DAYS 302500
Y ARRAY CONTAINING YEARS FOR HEADING OF GRAPH BY 302600
MONTHS 302700
DPM ARRAY CONTAINING NUMBER OF DAYS IN EACH MONTH 302800
MONTH ARRAY CONTAINING ABBREVIATION OF EACH MONTH 302900
M ARRAY CONTAINING INITIAL OF EACH MONTH 303000
EST START TIME OF ACTIVITY IN WHOLE WORKING DAYS 303100
LFT FINISH TIME OF ACTIVITY IN WHOLE WORKING DAYS 303200
MOE MONTH NUMBER OF ACTIVITY START DATE 303300
DAE DAY OF THE MONTH OF ACTIVITY START DATE 303400
YRE YEAR OF ACTIVITY START DATE 303500
MOF MONTH NUMBER OF ACTIVITY FINISH DATE 303600
DAF DAY OF THE MONTH OF ACTIVITY FINISH DATE 303700
YRF YEAR OF ACTIVITY FINISH DATE 303800
STAR GRAPH COLUMN NUMBER OF ACTIVITY START 303900
FIN GRAPH COLUMN NUMBER OF ACTIVITY FINISH 304000
DUR GRAPH COLUMN NUMBER OF LAST INTERVAL OF ACTIVITY 304100
DURATION 304200
N COLUMN NUMBER OF ACTIVITY FINISH 304300
CH COLUMN NUMBER OF ACTIVITY START 304400
BOOL2 BOOLEAN FLAG, TRUE IF ACTIVITY START DATE OR 304500
FINISH DATE IS NOT A VALID CALENDAR DATE OR 304600
ACTIVITY DURATION EXTENDS BEYOND 12/31/80 304700
BOOL3 BOOLEAN FLAG, TRUE IF FIN OR DUR IS GREATER 304800
THAN 66 304900
BOOL4 BOOLEAN FLAG, TRUE IF ACTIVITY FINISH DATE IS 305000
EARLIER THAN GRAPH STARTING DATE 305100
BOOL5 BOOLEAN FLAG, TRUE IF ACTIVITY START DATE IS 305200
EARLIER THAN GRAPH STARTING DATE 305300
BOOL6 BOOLEAN FLAG, TRUE IF ACTIVITY START IS BEYOND 305400
BOUNDS OF GRAPH 305500
BEYOND LETTER TO APPEAR IN THE COLUMN TO THE RIGHT OF 305600
THE FIRST GRAPHICAL LINE FOR ACTIVITY 305700
CONT LETTER TO APPEAR IN THE COLUMN TO THE RIGHT OF 305800
THE SECOND GRAPHICAL LINE FOR ACTIVITY 305900
ALPH LETTER TO APPEAR IN COLUMN FOR ACTIVITY START 306000
DATE 306100
BETA LETTER TO APPEAR IN COLUMN FOR ACTIVITY FINISH 306200
DATE 306300
BUFF1 ARRAY CONTAINING FIRST LINE OF GRAPHICAL OUTPUT 306400
FOR ACTIVITY 306500
BUFF2 ARRAY CONTAINING SECOND LINE OF GRAPHICAL OUTPUT 306600
FOR ACTIVITY 306700
E ARRAY CONTAINING TYPE OF ACTIVITY START DATE 306800
F ARRAY CONTAINING TYPE OF ACTIVITY FINISH DATE 306900
PPDAYS LOCAL VARIABLE USED IN COMPUTING DUR,STAR, AND 307000
FIN WHEN GRAPH BY DAYS 307100
WKP,WKE,WKF,TEMP LOCAL VARIABLES USED IN COMPUTING DUR, 307200
STAR, AND FIN WHEN GRAPH BY WEEKS 307300
YRES,YRFS,DMO,DDA,DYR,DYRS,QE,QF,DQ LOCAL VARIABLES USED 307400
IN COMPUTING DUR, STAR, AND FIN WHEN GRAPH BY 307500
MONTHS OR QUARTERS 307600
NN INDEX OF ARRAY BUFF1 307700
LL,MM INDICES USED IN LISTS 307800
; 307900
INTEGER LL,MM,NN,PARA,MOS,DAS,YRS,MOR,DAR,YRR,PAGEN,TLINE, 308000
NLINE,PDATE,MOP,DAP,YRP,PDAYS,CPDATE,QP,PY ; 308100
INTEGER SWER ; 308200
INTEGER DC,DEPT,DEPTIJ,DEPTDIG,OLDDEPT ; 308300
BOOLEAN BDUM,BCOMP ; 308400
BOOLEAN BDUMCOMP ; 308500
BOOLEAN DEPTTITLE ; 308600
ALPHA WD ; 308700
INTEGER ARRAY Y[0:7],DPM[0:12] ; 308800
ALPHA ARRAY MONTH[0:12],M[0:12] ; 308900
LABEL HPL1A,HPL2A,HPL3A,HPL1,HPL2,HPL3,ERR,L1 ; 309000
LABEL START ; 309100
LABEL D1,D2,D3,D4,D5,HPLA,HPLAA ; 309200
SWITCH SW1 ~ HPL1A,HPL1A,HPL2A,HPL3A ; 309300
SWITCH SW6 ~ HPL1,HPL1,HPL2,HPL3 ; 309400
SWITCH SWD1 ~ D1,D2,D3 ; 309500
LIST OPR1(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL]), 309600
OPR2(FOR LL ~ 2 STEP 1 UNTIL 5 DO ITEMNAME[SORTCOL 309700
[RSORTNUM,LL]]), 309800
OPR5(DAS,MONTH[MOS],YRS,NOACT,RUN,DAR,MONTH[MOR],YRR, 309900
NOEVN), 310000
OPR3(FOR LL ~ 1 STEP 1 UNTIL 13 DO NETNAME[LL],PAGEN,DAS, 310100
MONTH[MOS],YRS,DAR,MONTH[MOR],YRR) ; 310200
FORMAT OUT FPR1(////////////////////"NETWORK NAME",X6,13A6///), 310300
FPR2("A GRAPH OF THE NETWORK SORTED BY",4(X2,A6)///), 310400
FPR5("NETWORK START DATE",I4,X1,A3,I3,X10,"NUMBER OF ", 310500
"ACTIVITIES ",I10,X10,"RUN NUMBER",I10//"NETWORK ", 310600
"REPORT DATE",I3,X1,A3,I3,X10,"NUMBER OF EVENTS", 310700
I15), 310800
FPR6("DEPARTMENT GRAPHS BY DEPARTMENT OF PREDECESSOR ", 310900
"EVENT SORTED BY",4(X2,A6)///), 311000
FPR7("DEPARTMENT GRAPHS BY DEPARTMENT OF SUCCESSOR EVENT", 311100
"SORTED BY",4(X2,A6)///), 311200
FPR8("GRAPH OF ACTIVITIES BY DEPARTMENT OF PREDECESSOR ", 311300
"EVENT",X39,"DEPARTMENT NUMBER",I10), 311400
FPR9("GRAPH OF ACTIVITIES BY DEPARTMENT OF SUCCESSOR " 311500
"EVENT",X41,"DEPARTMENT NUMBER",I10), 311600
FORMDC("DUMMY AND COMPLETED ACTIVITIES ARE OMITTED FROM ", 311700
"THE GRAPH."), 311800
FORMC("COMPLETED ACTIVITIES ARE OMITTED FROM THE GRAPH."), 311900
FORMD("DUMMY ACTIVITIES ARE OMITTED FROM THE GRAPH."), 312000
FPR3(13A6,X33,"PAGE",I5/"NETWORK START DATE",I3,X1,A3,I3, 312100
X10,"NETWORK REPORT DATE",I3,X1,A3,I3) ; 312200
PROCEDURE UPACK(MODAYR,MO,DA,YR) ; 312300
COMMENT THIS PROCEDURE UNPACKS DATE MODAYR INTO MONTH NO., DAY, 312400
AND YEAR ; 312500
COMMENT 312600
FOR DEFINITIONS OF VARIABLES IN PROCEDURE UPACK SEE LIST 312700
BLOCK 312800
; 312900
VALUE MODAYR ; 313000
INTEGER MODAYR,MO,DA,YR ; 313100
BEGIN 313200
YR ~ MODAYR MOD 100 ; 313300
MO ~ MODAYR DIV 10000 ; 313400
DA ~ (MODAYR DIV 100) MOD 100 313500
END UPACK ; 313600
START: PARA ~ PDATE ~ 0 ; 313700
BDUM ~ BCOMP ~ BDUMCOMP ~ FALSE ; 313800
DEPTTITLE ~ FALSE ; 313900
PARA.[45:3] ~ BLOCPARAM[NOBLOCK].[9:3] ; 314000
PDATE ~ BLOCPARAM[NOBLOCK].[24:24] ; 314100
DC ~ BLOCPARAM[NOBLOCK].[12:3] ; 314200
IF (DC = 3) THEN BDUMCOMP ~ BCOMP ~ BDUM ~ TRUE ELSE 314300
IF (DC = 1) THEN BDUM ~ TRUE ELSE 314400
IF (DC = 2) THEN BCOMP ~ TRUE ; 314500
UPACK(SDATE,MOS,DAS,YRS) ; 314600
UPACK(RDATE,MOR,DAR,YRR) ; 314700
FILL MONTH[*] WITH " ","JAN","FEB","MAR","APR","MAY", 314800
"JUN","JUL","AUG","SEP","OCT","NOV","DEC" ; 314900
FILL DPM[*] WITH 0,31,28,31,30,31,30,31,31,30,31,30,31 ; 315000
COMMENT WRITE TITLE PAGE ; 315100
WRITE(PRINTER[PAGE]) ; 315200
WRITE(PRINTER,FPR1,OPR1) ; 315300
DEPTIJ ~ BLOCPARAM[NOBLOCK].[16:3] ; 315400
GO TO SWD1[DEPTIJ + 1] ; 315500
D1: WRITE(PRINTER,FPR2,OPR2) ; GO TO D5 ; 315600
D2: WRITE(PRINTER,FPR6,OPR2) ; GO TO D4 ; 315700
D3: WRITE(PRINTER,FPR7,OPR2) ; 315800
D4: DEPTDIG ~ BLOCPARAM[NOBLOCK].[20:3] ; 315900
IF (DEPTDIG = 0) THEN DEPTDIG ~ 4 ; 316000
OLDDEPT ~ 10 * DEPTDIG ; 316100
DEPTDIG ~ 10 * (10 - DEPTDIG) ; 316200
D5: WRITE(PRINTER,FPR5,OPR5) ; 316300
COMMENT COMPUTE STARTING DATE OF GRAPH ; 316400
IF PDATE = 0 THEN PDATE ~ SDATE ; 316500
IF PDATE ! SDATE THEN 316600
BEGIN 316700
FORMAT OUT PLOTERROR("INVALID PLOT DATE. DATE CORRECTED TO ", 316800
"NEAREST VALID DATE") ; 316900
PROCEDURE UNPACK(MODAYR,SDAYS,WDPW,DPM,MO,DA,YR,DAYS,CMODAYR,SWER) ; 317000
COMMENT THIS PROCEDURE UNPACKS DATE MODAYR INTO MONTH NO., DAY, 317100
AND YEAR AND CALCULATES NO. OF WORKING DAYS FROM SDAYS ; 317200
COMMENT 317300
FOR DEFINITIONS OF VARIABLES IN PROCEDURE UNPACK SEE 317400
AUDIT BLOCK 317500
; 317600
VALUE MODAYR,SDAYS,WDPW ; 317700
INTEGER MODAYR,SDAYS,WDPW,MO,DA,YR,DAYS,CMODAYR,SWER ; 317800
INTEGER ARRAY DPM[0] ; 317900
BEGIN 318000
INTEGER TEMP,YEARS,TYEARS,LYEARS,RYEARS,YDAYS,MDAYS,I,WEEKS, 318100
REMDA ; 318200
BOOLEAN BOOL ; 318300
LABEL L1,L2,L3,L4,L5,L6,L7 ; 318400
BOOL ~ FALSE ; 318500
COMMENT UNPACK MODAYR INTO MONTH NO., DAY, AND YEAR ; 318600
YR ~ MODAYR MOD 100 ; 318700
SWER ~ 1 ; 318800
MO ~ MODAYR DIV 10000 ; 318900
DA ~ MODAYR DIV 100 MOD 100 ; 319000
COMMENT CHECK VALIDITY OF DATE ; 319100
IF YR } 62 THEN GO TO L1 ; 319200
YR ~ 62 ; MO ~ DA ~ 1 ; 319300
BOOL ~ TRUE ; GO TO L6 ; 319400
L1: IF YR { 80 THEN GO TO L2 ; 319500
YR ~ 80 ; MO ~ 12 ; DA ~ 31 ; 319600
BOOL ~ TRUE ; GO TO L6 ; 319700
L2: IF MO } 1 THEN GO TO L3 ; 319800
MO ~ DA ~ 1 ; BOOL ~ TRUE ; GO TO L6 ; 319900
L3: IF MO { 12 THEN GO TO L4 ; 320000
MO ~ 12 ; DA ~ 31 ; BOOL ~ TRUE ; GO TO L6 ; 320100
L4: IF DA } 1 THEN GO TO L5 ; 320200
DA ~ 1 ; BOOL ~ TRUE ; GO TO L6 ; 320300
L5: IF DA { DPM[MO] THEN GO TO L6 ; 320400
TEMP ~ YR MOD 4 ; 320500
IF (MO = 2) AND (TEMP = 0) AND (DA = 29) THEN GO TO L6 ; 320600
DA ~ DPM[MO] ; BOOL ~ TRUE ; 320700
COMMENT CALCULATE NO.OF WORKING DAYS SINCE SDAYS ; 320800
L6: YEARS ~ YR - 62 ; 320900
IF (YEARS = 0) AND (MO = 1) THEN 321000
BEGIN 321100
DAYS ~ DA ; GO TO L7 321200
END ; 321300
TYEARS ~ YEARS + 1 ; 321400
LYEARS ~ TYEARS DIV 4 ; 321500
RYEARS ~ YEARS - LYEARS ; 321600
YDAYS ~ (365 | RYEARS)+(366 | LYEARS) ; 321700
MDAYS ~ 0 ; 321800
FOR I ~ 1 STEP 1 UNTIL MO-1 DO MDAYS ~ MDAYS + DPM[I] ; 321900
IF (YR MOD 4 = 0) AND (MO > 2) THEN MDAYS ~ MDAYS + 1 ; 322000
DAYS ~ YDAYS + MDAYS + DA ; 322100
L7: CMODAYR ~ 0 ; 322200
COMMENT CHECK THAT DATE IS A WORKING DAY ; 322300
WEEKS ~ DAYS DIV 7 ; 322400
REMDA ~ DAYS - (WEEKS | 7) ; 322500
DAYS ~ (WEEKS | WDPW) + REMDA - SDAYS ; 322600
IF BOOL THEN CMODAYR ~ MO | 10000 + DA | 100 + YR ; 322700
IF ( ( WDPW ! 7) AND((REMDA > WDPW) OR (REMDA = 0))) 322800
THEN 322900
BEGIN 323000
IF BOOL THEN SWER ~ 4 ELSE SWER ~ 3 323100
END ; 323200
IF BOOL THEN SWER ~ 2 323300
END UNPACK ; 323400
UNPACK(PDATE,0,WDPW,DPM,MOP,DAP,YRP,PDAYS,CPDATE,SWER) ; 323500
IF SWER = 4 OR SWER = 2 THEN WRITE(PRINTER,PLOTERROR) 323600
END 323700
ELSE 323800
BEGIN 323900
PDAYS ~ SDAYS ; MOP ~ MOS ; DAP ~ DAS ; YRP ~ YRS 324000
END ; 324100
COMMENT SET PARAMETERS FOR HEADINGS OF GRAPHS ; 324200
PAGEN ~ 0 ; TLINE ~ 12 ; 324300
GO TO SW1[PARA] ; 324400
HPL1A: IF (PARA = 2) THEN WD ~ "WEEKS" ELSE WD ~ " DAYS" ; 324500
GO TO HPLAA ; 324600
HPL2A: FOR NN ~ 1 STEP 1 UNTIL 7 DO Y[NN] ~ YRP + NN - 1 ; 324700
FILL M[*] WITH " ","J","F","M","A","M","J","J","A","S", 324800
"O","N","D" ; 324900
GO TO HPLAA ; 325000
HPL3A: QP ~ MOP DIV 3 ; 325100
IF (MOP MOD 3 > 0) THEN QP ~ QP + 1 ; 325200
PY ~ YRP ; 325300
IF (QP { 2) THEN PY ~ PY - 1 ; 325400
HPLAA: IF (DEPTIJ ! 0) THEN GO TO L1 ; 325500
HPLA: WRITE(PRINTER[PAGE]) ; NLINE ~ 0 ; 325600
PAGEN ~ PAGEN + 1 ; WRITE(PRINTER[DBL],FPR3,OPR3) ; 325700
IF (DEPTIJ = 1) THEN WRITE(PRINTER[DBL],FPR8,DEPT) ELSE 325800
IF (DEPTIJ = 2) THEN WRITE(PRINTER[DBL],FPR9,DEPT) ; 325900
IF BDUMCOMP THEN WRITE(PRINTER[DBL],FORMDC) ELSE 326000
IF BCOMP THEN WRITE(PRINTER[DBL],FORMC) ELSE 326100
IF BDUM THEN WRITE(PRINTER[DBL],FORMD) ; 326200
GO TO SW6[PARA] ; 326300
COMMENT WRITE PROPER HEADING FOR GRAPH ; 326400
HPL1: BEGIN 326500
COMMENT WRITE HEADING FOR GRAPH BY DAYS OR WEEKS ; 326600
LIST OPL11(WD,DAP,MONTH[MOP],YRP) ; 326700
FORMAT OUT FPL11("GRAPH BY ",A5," BEGINNING AT",I4,X1,A3,I3,X23, 326800
"11111111112222222222333333333344444444445555555555", 326900
"6666666"/"PREDECESSOR SUCCESSOR",X4,"ACTIVITY ", 327000
"DESCRIPTION",X6,"123456789012345678901234567890", 327100
"123456789012345678901234567890123456"/), 327200
FPL12("PLOT DATE NOT A WORKING DAY. GRAPH BEGINS AT " 327300
"FIRST WORKING DAY AFTER PLOT DATE") ; 327400
WRITE(PRINTER,FPL11,OPL11) ; 327500
IF SWER = 3 THEN WRITE(PRINTER[DBL],FPL12) ; 327600
GO TO L1 327700
END ; 327800
HPL2: BEGIN 327900
COMMENT WRITE HEADING FOR GRAPH BY MONTHS ; 328000
LABEL W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14 ; 328100
SWITCH SW2 ~ W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12 ; 328200
LIST OPL21(DAP,MONTH[MOP],YRP,FOR LL ~ 1 STEP 1 UNTIL 6 DO 328300
Y[LL]), 328400
OPL22(DAP,MONTH[MOP],YRP,FOR LL ~ 2 STEP 1 UNTIL 6 DO 328500
Y[LL]), 328600
OPL23(DAP,MONTH[MOP],YRP,FOR LL ~ 2 STEP 1 UNTIL 7 DO 328700
Y[LL]), 328800
OPL24(FOR LL ~ MOP STEP 1 UNTIL 12 DO M[LL],FOR MM ~ 1 328900
STEP 1 UNTIL 4 DO FOR LL ~ 1 STEP 1 UNTIL 12 DO 329000
M[LL],FOR LL ~ 1 STEP 1 UNTIL 5+MOP DO M[LL]), 329100
OPL25(FOR LL ~ MOP STEP 1 UNTIL 12 DO M[LL],FOR MM ~ 1 329200
STEP 1 UNTIL 5 DO FOR LL ~ 1 STEP 1 UNTIL 12 DO 329300
M[LL],FOR LL ~ 1 STEP 1 UNTIL MOP-7 DO M[LL]) ; 329400
FORMAT OUT JAN("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I7,4I12,I9), 329500
FEB("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I6,4I12,I10), 329600
MAR("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I6,I11,3I12,I10), 329700
APR("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I5,I11,3I12,I11), 329800
MAY("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I5,I10,3I12,I11), 329900
JUN("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I4,I10,4I12), 330000
JUL("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I4,I9,4I12), 330100
AUG("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I3,I9,4I12), 330200
SEP("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I3,I8,4I12), 330300
OTR("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I10,4I12,I1), 330400
NOV("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I9,4I12,I8), 330500
DEC("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I8,4I12,I9), 330600
FPL25("PREDECESSOR SUCCESSOR",X4,"ACTIVITY DESCRIPTION", 330700
X6,66A1) ; 330800
GO TO SW2[MOP] ; 330900
W1: WRITE(PRINTER,JAN,OPL21) ; 331000
GO TO W14 ; 331100
W2: WRITE(PRINTER,FEB,OPL21) ; 331200
GO TO W14 ; 331300
W3: WRITE(PRINTER,MAR,OPL21) ; 331400
GO TO W14 ; 331500
W4: WRITE(PRINTER,APR,OPL21) ; 331600
GO TO W14 ; 331700
W5: WRITE(PRINTER,MAY,OPL21) ; 331800
GO TO W14 ; 331900
W6: WRITE(PRINTER,JUN,OPL21) ; 332000
GO TO W14 ; 332100
W7: WRITE(PRINTER,JUL,OPL21) ; 332200
GO TO W14 ; 332300
W8: WRITE(PRINTER,AUG,OPL21) ; 332400
GO TO W13 ; 332500
W9: WRITE(PRINTER,SEP,OPL21) ; 332600
GO TO W13 ; 332700
W10: WRITE(PRINTER,OTR,OPL22) ; 332800
GO TO W13 ; 332900
W11: WRITE(PRINTER,NOV,OPL23) ; 333000
GO TO W13 ; 333100
W12: WRITE(PRINTER,DEC,OPL23) ; 333200
W13: WRITE(PRINTER[DBL],FPL25,OPL25) ; 333300
GO TO L1 ; 333400
W14: WRITE(PRINTER[DBL],FPL25,OPL24) ; 333500
GO TO L1 333600
END ; 333700
IF QP { 2 THEN PY ~ PY - 1 ; 333800
HPL3: BEGIN 333900
COMMENT WRITE HEADING FOR GRAPH BY QUARTERS ; 334000
LABEL V1,V2,V3,V4,V5 ; 334100
SWITCH SW3 ~ V1,V2,V3,V4 ; 334200
LIST OPL31(DAP,MONTH[MOP],YRP,FOR LL ~ 1 STEP 1 UNTIL 16 DO 334300
PY + LL), 334400
OPL32(DAP,MONTH[MOP],YRP,FOR LL ~ 1 STEP 1 UNTIL 17 DO 334500
PY + LL), 334600
OPL34(FOR LL ~ QP STEP 1 UNTIL 4 DO LL,FOR MM ~ 1 STEP 1 334700
UNTIL 15 DO FOR LL ~ 1 STEP 1 UNTIL 4 DO LL,FOR LL ~ 334800
1 STEP 1 UNTIL QP+1 DO LL), 334900
OPL35(4,FOR MM ~ 1 STEP 1 UNTIL 16 DO FOR LL ~ 1 STEP 1 335000
UNTIL 4 DO LL,1) ; 335100
FORMAT OUT FPL31("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I3,15I4), 335200
FPL32("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I2,16I4), 335300
FPL33("GRAPH BEGINS AT",I4,X1,A3,I3,X26,I5,15I4), 335400
FPL34("GRAPH BEGINS AT",I4,X1,A3,I3,X26,16I4), 335500
FPL35("PREDECESSOR SUCCESSOR",X4,"ACTIVITY DESCRIPTION", 335600
X6,66I1) ; 335700
GO TO SW3[QP] ; 335800
V1: WRITE(PRINTER,FPL31,OPL31) ; 335900
GO TO V5 ; 336000
V2: WRITE(PRINTER,FPL32,OPL32) ; 336100
GO TO V5 ; 336200
V3: WRITE(PRINTER,FPL33,OPL31) ; 336300
GO TO V5 ; 336400
V4: WRITE(PRINTER,FPL34,OPL31) ; 336500
WRITE(PRINTER[DBL],FPL35,OPL35) ; 336600
GO TO L1 ; 336700
V5: WRITE(PRINTER[DBL],FPL35,OPL34) 336800
END ; 336900
L1: BEGIN 337000
INTEGER EST,LFT,MOE,DAE,YRE,MOF,DAF,YRF,STAR,FIN,DUR,N,CH ; 337100
INTEGER PPDAYS,WKP,WKE,WKF,TEMP,YRES,YRFS,DMO,DDA,DYR,DYRS,QE,QF, 337200
DQ ; 337300
BOOLEAN BOOL2,BOOL3,BOOL4,BOOL5,BOOL6 ; 337400
ALPHA BEYOND,CONT,ALPH,BETA ; 337500
ALPHA ARRAY BUFF1[0:66],BUFF2[0:66],E[0:3],F[0:3] ; 337600
LABEL L2,L6,L7,L3,S1,S2,S3,S4,S5,S6,EOF ; 337700
LABEL LOOP ; 337800
LABEL D6,D7,D8,D9 ; 337900
SWITCH SW4 ~ S1,S2,S2,S3,S1 ; 338000
SWITCH SW5 ~ S4,S4,S5,S4,S6 ; 338100
SWITCH SWD2 ~ D9,D6,D7 ; 338200
LIST OPR4(I,J,FOR LL ~ 1 STEP 1 UNTIL 4 DO REMARKS[LL],FOR LL ~ 338300
1 STEP 1 UNTIL 66 DO BUFF1[LL],BEYOND,FOR LL ~ 1,2,3 338400
DO E[LL],DAE,MONTH[MOE],YRE,FOR LL ~ 1,2,3 DO F[LL], 338500
DAF,MONTH[MOF],YRF,FOR LL ~ 1 STEP 1 UNTIL 66 DO 338600
BUFF2[LL],CONT) ; 338700
FORMAT OUT FPR4(I10,I12,X3,4A6,X3,66A1,X1,A1/3A5,I3,X1,A3,I3,X2,3A5, 338800
I2,X1,A3,I3,X1,66A1,X1,A1/) ; 338900
PROCEDURE PACK(DAYS,SDAYS,WDPW,DPM,MO,DA,YR,BOOL) ; 339000
COMMENT THIS PROCEDURE COMPUTES THE MONTH NO., DAY, AND YEAR OF 339100
A DATE DAYS GIVEN BY NO. OF WORKING DAYS FROM SDAYS ; 339200
COMMENT 339300
FOR DEFINITIONS OF VARIABLES IN PROCEDURE PACK SEE LIST 339400
BLOCK 339500
; 339600
VALUE DAYS,SDAYS,WDPW ; 339700
INTEGER DAYS,SDAYS,WDPW,MO,DA,YR ; 339800
BOOLEAN BOOL ; 339900
INTEGER ARRAY DPM[0] ; 340000
BEGIN 340100
INTEGER TDAYS,TEMP,TTDAY,C,K,M ; 340200
LABEL T1,T2,T4,L1,L2,L3 ; 340300
TDAYS ~ DAYS + SDAYS ; 340400
TEMP ~ TDAYS MOD WDPW ; 340500
TTDAY ~ (TDAYS DIV WDPW) | 7 + TEMP ; 340600
IF TEMP = 0 THEN TTDAY ~ TTDAY - 2 ; 340700
IF TTDAY < 0 THEN 340800
BEGIN 340900
DA ~ 1 ; MO ~ 1 ; YR ~ 62 ; 341000
BOOL ~ TRUE ; GO TO L3 341100
END ; 341200
IF TTDAY > 6940 THEN 341300
BEGIN 341400
DA ~ 31 ; MO ~ 12 ; YR ~ 80 ; 341500
BOOL ~ TRUE ; GO TO L3 341600
END ; 341700
TTDAY ~ TTDAY + 365 ; 341800
C ~ 0 ; 341900
T1: K ~ 0 ; 342000
T2: IF TTDAY { 365 THEN GO TO T4 ; 342100
TTDAY ~ TTDAY - 365 ; 342200
K ~ K + 1 ; C ~ C + 1 ; 342300
IF K ! 3 THEN GO TO T2 ; 342400
IF TTDAY > 366 THEN 342500
BEGIN 342600
TTDAY ~ TTDAY - 366 ; C ~ C + 1 ; GO TO T1 342700
END ; 342800
T4: YR ~ 61 + C ; 342900
IF (YR MOD 4) ! 0 THEN 343000
BEGIN 343100
M ~ 1 ; GO TO L1 343200
END ; 343300
IF TTDAY { 31 THEN 343400
BEGIN 343500
MO ~ 1 ; GO TO L2 343600
END ; 343700
TTDAY ~ TTDAY - 31 ; 343800
IF TTDAY { 29 THEN 343900
BEGIN 344000
MO ~ 2 ; GO TO L2 344100
END ; 344200
TTDAY ~ TTDAY - 29 ; M ~ 3 ; 344300
L1: FOR MO ~ M STEP 1 UNTIL 12 DO 344400
BEGIN 344500
IF TTDAY { DPM[MO] THEN GO TO L2 ; 344600
TTDAY ~ TTDAY - DPM[MO] 344700
END ; 344800
L2: DA ~ TTDAY ; BOOL ~ FALSE ; 344900
L3: END PACK ; 345000
IF DEPTTITLE THEN 345100
BEGIN 345200
DEPTTITLE ~ FALSE ; GO TO D9 ; 345300
END ; 345400
COMMENT READ ACTIVITY RECORD ; 345500
LOOP: READ(SWF[RD],*,TREC)[EOF] ; 345600
IF (ASD = 2) AND BCOMP THEN GO TO LOOP ; 345700
IF BDUM AND ((ET = 0) AND (VAR = 0)) THEN GO TO LOOP ; 345800
GO TO SWD2[DEPTIJ + 1] ; 345900
D6: DEPT ~ I DIV DEPTDIG ; GO TO D8 ; 346000
D7: DEPT ~ J DIV DEPTDIG ; 346100
D8: IF (DEPT ! OLDDEPT) THEN 346200
BEGIN 346300
OLDDEPT ~ DEPT ; 346400
DEPTTITLE ~ TRUE ; 346500
PAGEN ~ 0 ; GO TO HPLA ; 346600
END ; 346700
D9: BOOL2 ~ BOOL3 ~ BOOL4 ~ BOOL5 ~ BOOL6 ~ FALSE ; 346800
BEYOND ~ CONT ~ " " ; 346900
COMMENT COMPUTE ACTIVITY EARLIEST START DATE ; 347000
EST ~ ENTIER(ES) ; 347100
IF ES > EST THEN EST ~ EST + 1 ; 347200
PACK(EST,SDAYS,WDPW,DPM,MOE,DAE,YRE,BOOL2) ; 347300
COMMENT COMPUTE ACTIVITY LATEST FINISH DATE ; 347400
LFT ~ ENTIER(LF) ; 347500
IF LF > LFT THEN LFT ~ LFT + 1 ; 347600
PACK(LFT,SDAYS,WDPW,DPM,MOF,DAF,YRF,BOOL2) ; 347700
DUR ~ ENTIER(ET) ; 347800
DUR ~ DUR + EST ; 347900
IF PARA = 1 THEN 348000
BEGIN 348100
COMMENT COMPUTE DUR, STAR, AND FIN FOR GRAPH BY DAYS ; 348200
PPDAYS ~ PDAYS - SDAYS ; 348300
DUR ~ DUR - PPDAYS ; 348400
STAR ~ EST - PPDAYS + 1 ; 348500
FIN ~ LFT - PPDAYS + 1 ; GO TO L2 348600
END ; 348700
IF PARA = 2 THEN 348800
BEGIN 348900
COMMENT COMPUTE DUR, STAR, AND FIN FOR GRAPH BY WEEKS ; 349000
WKP ~ PDAYS DIV WDPW ; 349100
IF PDAYS MOD WDPW > 0 THEN WKP ~ WKP + 1 ; 349200
WKE ~ (SDAYS + EST) DIV WDPW ; 349300
IF (SDAYS + EST) MOD WDPW > 0 THEN WKE ~ WKE + 1 ; 349400
STAR ~ WKE - WKP + 1 ; 349500
WKF ~ (SDAYS + LFT) DIV WDPW ; 349600
IF (SDAYS + LFT) MOD WDPW > 0 THEN WKF ~ WKF + 1 ; 349700
FIN ~ WKF - WKP + 1 ; 349800
DUR ~ DUR + SDAYS ; 349900
TEMP ~ DUR MOD WDPW ; 350000
DUR ~ DUR DIV WDPW ; 350100
IF TEMP > 0 THEN DUR ~ DUR + 1 ; 350200
DUR ~ DUR - WKP ; 350300
GO TO L2 350400
END ; 350500
YRES ~ YRE - YRP ; 350600
YRFS ~ YRF - YRP ; 350700
PACK(DUR,SDAYS,WDPW,DPM,DMO,DDA,DYR,BOOL2) ; 350800
DYRS ~ DYR - YRP ; 350900
IF PARA = 3 THEN 351000
BEGIN 351100
COMMENT COMPUTE DUR, STAR, AND FIN FOR GRAPH BY MONTHS ; 351200
STAR ~ MOE + YRES | 12 - MOP + 1 ; 351300
FIN ~ MOF + YRFS | 12 - MOP + 1 ; 351400
DUR ~ DMO + DYRS | 12 - MOP ; 351500
GO TO L2 351600
END ; 351700
COMMENT COMPUTE DUR, STAR, AND FIN FOR GRAPH BY QUARTERS ; 351800
QE ~ MOE DIV 3 ; 351900
IF MOE MOD 3 > 0 THEN QE ~ QE + 1 ; 352000
STAR ~ QE + YRES | 4 - QP + 1 ; 352100
QF ~ MOF DIV 3 ; 352200
IF MOF MOD 3 > 0 THEN QF ~ QF + 1 ; 352300
FIN ~ QF + YRFS | 4 - QP + 1 ; 352400
DQ ~ DMO DIV 3 ; 352500
IF DMO MOD 3 > 0 THEN DQ ~ DQ + 1 ; 352600
DUR ~ DQ + DYRS | 4 - QP ; 352700
COMMENT SET PARAMETERS FOR PRINTING GRAPH ; 352800
L2: FOR NN ~ 1 STEP 1 UNTIL 66 DO BUFF1[NN] ~ BUFF2[NN] ~ 352900
" " ; 353000
IF FIN < 1 THEN BOOL4 ~ TRUE ; 353100
IF STAR < 1 THEN 353200
BEGIN 353300
BOOL5 ~ TRUE ; 353400
BEYOND ~ IF EST > LFT THEN "$" ELSE IF ET > 0 THEN "X" 353500
ELSE IF FIN > STAR THEN "S" ELSE " " ; 353600
IF BOOL4 AND (DUR < 1) THEN GO TO SW4[ASD+1] ; 353700
END ; 353800
IF STAR > 66 THEN 353900
BEGIN 354000
BOOL6 ~ TRUE ; 354100
BEYOND ~ IF (ET ! 0) THEN (IF FIN } STAR THEN "X" 354200
ELSE "$") ELSE (IF FIN > STAR THEN "S" ELSE (IF FIN 354300
< STAR THEN "$" ELSE " ")) ; 354400
GO TO L3 354500
END ; 354600
IF FIN > 66 THEN BOOL3 ~ TRUE ; 354700
IF STAR < 0 THEN STAR ~ 0 ; 354800
IF FIN < 0 THEN FIN ~ 0 ; 354900
N ~ FIN - 1 ; 355000
IF (FIN = STAR) AND (FIN > 0) THEN N ~ STAR ; 355100
IF (ET > 0) THEN IF (ASD = 2) THEN N ~ DUR ~ FIN 355200
ELSE IF (DUR = STAR - 1) THEN DUR ~ STAR ; 355300
IF LFT < EST THEN N ~ 0 ; 355400
IF N > 66 THEN 355500
BEGIN 355600
BOOL3 ~ TRUE ; N ~ 66 355700
END ; 355800
IF DUR > 66 THEN 355900
BEGIN 356000
BOOL3 ~ TRUE ; DUR ~ 66 356100
END ; 356200
CH ~ IF STAR > 0 THEN STAR ELSE 1 ; 356300
IF N < DUR THEN 356400
BEGIN 356500
FOR NN ~ CH STEP 1 UNTIL N DO BUFF1[NN] ~ "X" ; 356600
FOR NN ~ IF N } CH THEN N+1 ELSE CH 356700
STEP 1 UNTIL DUR DO BUFF1[NN] ~ "$" ; 356800
GO TO L3 356900
END ; 357000
FOR NN ~ CH STEP 1 UNTIL DUR DO BUFF1[NN] ~ "X" ; 357100
FOR NN ~ IF DUR } CH THEN DUR+1 ELSE CH 357200
STEP 1 UNTIL N DO BUFF1[NN] ~ "S" ; 357300
L3: IF BOOL3 AND NOT BOOL5 THEN BEYOND ~ BUFF1[66] ; 357400
GO TO SW4[ASD + 1] ; 357500
S1: ALPH ~ "E" ; E[1] ~ "EXPEC" ; 357600
E[2] ~ "TED S" ; E[3] ~ "TART " ; 357700
GO TO SW5[ASD + 1] ; 357800
S2: ALPH ~ "A" ; E[1] ~ "ACTUA" ; 357900
E[2] ~ "L STA" ; E[3] ~ "RT " ; 358000
GO TO SW5[ASD + 1] ; 358100
S3: ALPH ~ "D" ; E[1] ~ "DIREC" ; 358200
E[2] ~ "TED S" ; E[3] ~ "TART " ; 358300
GO TO SW5[ASD + 1] ; 358400
S4: BETA ~ "L" ; F[1] ~ "LATES" ; 358500
F[2] ~ "T FIN" ; F[3] ~ "ISH " ; 358600
GO TO L6 ; 358700
S5: BETA ~ "C" ; F[1] ~ "COMPL" ; 358800
F[2] ~ "ETED " ; F[3] ~ " " ; 358900
GO TO L6 ; 359000
S6: BETA ~ "S" ; F[1] ~ "SCHED" ; 359100
F[2] ~ ". FIN" ; F[3] ~ "ISH " ; 359200
L6: IF (STAR = FIN) OR ((BOOL5 OR BOOL6) AND (BOOL4 OR 359300
(FIN > 66))) THEN 359400
BEGIN 359500
ALPH ~ "*" ; 359600
IF BOOL5 OR BOOL6 THEN CONT ~ ALPH 359700
ELSE BUFF2[STAR] ~ ALPH ; 359800
GO TO L7 359900
END ; 360000
IF BOOL5 OR BOOL6 THEN CONT ~ ALPH 360100
ELSE BUFF2[STAR] ~ ALPH ; 360200
IF BOOL4 OR (FIN = 67) THEN 360300
BEGIN 360400
BEYOND ~ " " ; CONT ~ BETA 360500
END 360600
ELSE IF (NOT BOOL3 OR (BUFF1[66] = "$")) 360700
THEN BUFF2[FIN] ~ BETA 360800
ELSE CONT ~ BETA ; 360900
L7: IF BOOL2 THEN CONT ~ "X" ; 361000
WRITE(PRINTER,FPR4,OPR4) ; 361100
NLINE ~ NLINE + 1 ; 361200
IF(NLINE > TLINE) AND (KEY < NOACT) THEN GO TO HPLA ; 361300
GO TO LOOP ; 361400
EOF: REWIND(SWF[RD]) ; 361500
END 361600
END PLOT BLOCK ; 361700
GO TO ORIGIN ; 361800
FINISH: BEGIN 361900
COMMENT BLOCK TO SAVE ALL THE CURRENT VALUES OF ALL THE GLOBAL 362000
VARIABLES AND ARRAYS WHICH ARE REQUIRED FOR AN UPDATE 362100
RUN ; 362200
COMMENT 362300
DEFINITIONS OF VARIABLES IN FINISH BLOCK 362400
NLINE NUMBER OF LINES PRINTED 362500
TLINE TOTAL NUMBER OF LINES PERMITTED PER PAGE 362600
MM,NN,KK INDICES FOR ARRAYS 362700
; 362800
INTEGER MM ; 362900
LABEL LNE ; 363000
FOR MM ~ 1 STEP 1 UNTIL 5 DO 363100
IF NOT ((RD = MM) OR (WR = MM) OR (SC = MM) OR (RE = MM)) 363200
THEN 363300
BEGIN 363400
NE ~ MM ; GO TO LNE ; 363500
END ; 363600
COMMENT WRITE SAVE RECORDS TAPE ; 363700
LNE: FOR MM ~ 1 STEP 1 UNTIL 5 DO 363800
SORTCOL[0,MM] ~ SORTCOL[RSORTNUM,MM] ; 363900
FOR MM ~ 1 STEP 1 UNTIL 5 DO 364000
EVENTCOL[0,MM] ~ EVENTCOL[NOSORT,MM] ; 364100
WRITE(PERTC,*,SAVEREC1) ; 364200
FOR K ~ 0 STEP 1 UNTIL NOACTROW DO 364300
WRITE(PERTC,*,SAVEREC2) ; 364400
FOR K ~ 0 STEP 1 UNTIL NOEVNROW DO 364500
WRITE(PERTC,*,SAVEREC3) ; 364600
REWIND(PERTC) ; 364700
IF BLOC[NOBLOCK] ! 8 THEN 364800
BEGIN 364900
COMMENT LIST SAVE RECORDS AND ACTIVITY TAPES IF PROGRAM WAS NOT 365000
COMPLETED BECAUSE OF DATA ERRORS ; 365100
FORMAT OUT FORM1("SAVE RECORDS TAPE"), 365200
FORM2("NETWORK NAME",X6,13A6,X6,"RUN",I6//"NETWORK START", 365300
" DATE",I7," SDAYS",I7,X10,"NETWORK REPORT DATE",I6, 365400
" RDAYS",I7//"MAX NO ACTIVITIES",I7," MAX NO ", 365500
"EVENTS",I7," CHAIN LENGTH",I7," MAX NO ", 365600
"ENDING EVENTS",I7/"MAX NO STARTING EVENTS",I7,X4, 365700
"NO WORKING DAYS PER WEEK",I2," NO ACTIVITIES",I7, 365800
" NO EVENTS",I7/"NOACTROW",I4," NOACTCOL",I4,X4, 365900
"NOEVNROW",I4," NOEVNCOL",I4," MIN EVENT",I11, 366000
" MAX EVENT",I11/"NO ACTIVITY SORTKEYS",I2,X2, 366100
"SORTKEY NOS",4I3," NO EVENT SORTKEYS",I2,X2, 366200
"SORTKEY NOS",4I3,/"TAPE KEYS SAVE RECORDS TAPE", 366300
I2," ACTIVITY TAPE",I2," EVENT TAPE",I2,X2, 366400
"SCRATCH TAPES",2I2), 366500
FORM3("RENUMBERED ACTIVITY PREDECESSOR AND SUCCESSOR ", 366600
"EVENTS"), 366700
FORM4(5(3I7,X3)), 366800
FORM5("EVENT NUMBERS"), 366900
FORM6(6(I6,I11,X3)), 367000
FORM7("ACTIVITY TAPE"), 367100
FORM8(" KEY ACTIVITY DESCRIPTION"/X17,"I",X10,"J ", 367200
"RENUM I RENUM J ET VAR ASD ADAYS ES ", 367300
"LF SL SVAR RANK",X7,"TALLIES"/), 367400
FORM9(I6,X1,4A6/X6,2I11,2I8,2F7.1,I3,I6,4F7.1,I7,X3,A1, 367500
3I4/) ; 367600
LIST OUT4(FOR LL ~ 1 STEP 1 UNTIL NOACT DO [LL,RIRJ[LL.[30:9], 367700
LL.[39:9]].[4:22],RIRJ[LL.[30:9],LL.[39:9]].[26:22]]), 367800
OUT6(FOR LL ~ 1 STEP 1 UNTIL NOEVN DO [LL,EVENT[LL.[30:9], 367900
LL.[39:9]]]), 368000
OUT9(KEY,FOR LL ~ 1 STEP 1 UNTIL 4 DO REMARKS[LL],I,J, 368100
RRIJ.[4:22],RRIJ.[26:22],ET,VAR,ASD,ADAYS,ES,LF,SL, 368200
SVAR,RANKI,IF TAL < 0 THEN "-" ELSE "+",TAL.[21:9], 368300
TAL.[30:9],TAL.[39:9]) ; 368400
INTEGER NLINE,TLINE ; 368500
LABEL LOOP,EOF ; 368600
COMMENT LIST SAVE RECORDS ; 368700
WRITE(PRINTER[PAGE]) ; WRITE(PRINTER[DBL],FORM1) ; 368800
WRITE(PRINTER,FORM2,SAVEREC1) ; 368900
WRITE(PRINTER[DBL]) ; WRITE(PRINTER[DBL],FORM3) ; 369000
WRITE(PRINTER,FORM4,OUT4) ; WRITE(PRINTER[DBL]) ; 369100
WRITE(PRINTER[DBL],FORM5) ; WRITE(PRINTER,FORM6,OUT6) ; 369200
NLINE ~ TLINE ~ 14 ; 369300
COMMENT LIST ACTIVITY RECORDS ; 369400
LOOP: READ(SWF[RD],*,TREC)[EOF] ; 369500
IF NLINE = TLINE THEN 369600
BEGIN 369700
COMMENT PRINT HEADING ; 369800
WRITE(PRINTER[PAGE]) ; WRITE(PRINTER[DBL],FORM7) ; 369900
WRITE(PRINTER,FORM8) ; 370000
NLINE ~ 0 ; 370100
END ; 370200
WRITE(PRINTER,FORM9,OUT9) ; 370300
NLINE ~ NLINE + 1 ; 370400
GO TO LOOP ; 370500
EOF: REWIND(SWF[RD]) ; 370600
END ; 370700
BEGIN 370800
COMMENT LIST BLOCKS OF PERT PROGRAM WHICH HAVE BEEN EXECUTED 370900
SUCCESSFULLY ; 371000
INTEGER MM ; 371100
INTEGER KK ; 371200
INTEGER NN ; 371300
LABEL LFIN2,LFIN3,LFIN4,LFIN5,LFIN6,LFIN7,LFIN ; 371400
LABEL LFINA,LFINI,LFINJ,LFINE,LFIND,LFINM,LFING,LFINGI,LFINGJ ; 371500
LIST LIST3(FOR LL ~ 2 STEP 1 UNTIL 5 DO 371600
ITEMNAME[SORTCOL[KK,LL]]), 371700
LIST3E(FOR LL ~ 2 STEP 1 UNTIL 5 DO EVENTITEM 371800
[EVENTCOL[NN,LL]]), 371900
LIST6(IF (BLOCPARAM[MM].[9:3] = 1) THEN "DAYS " 372000
ELSE IF (BLOCPARAM[MM].[9:3] = 2) THEN "WEEKS " 372100
ELSE IF (BLOCPARAM[MM].[9:3] = 3) THEN "MONTHS" 372200
ELSE "QTRS ",IF (BLOCPARAM[MM].[24:24] = 0) THEN 372300
SDATE ELSE BLOCPARAM[MM].[24:24]) ; 372400
FORMAT OUT FIN1("INPUT AUDIT EXECUTED SUCCESSFULLY"), 372500
FIN2("RANK EXECUTED SUCCESSFULLY"), 372600
FIN3A("SORT OF ACTIVITIES BY ",4(A6,X1),"EXECUTED", 372700
" SUCCESSFULLY"), 372800
FIN3E("SORT OF EVENTS BY ",4(A6,X1),"EXECTUED ", 372900
"SUCCESSFULLY"), 373000
FIN4("NETANAL EXECUTED SUCCESSFULLY"), 373100
FIN5A("LIST OF ACTIVITIES EXECUTED SUCCESSFULLY"), 373200
FIN5DAI("DEPARTMENT REPORTS BY DEPARTMENT OF PREDECESSOR", 373300
" EVENT EXECUTED SUCCESSFULLY"), 373400
FIN5DAJ("DEPARTMENT REPORTS BY DEPARTMENT OF SUCCESSOR ", 373500
"EVENT EXECUTED SUCCESSFULLY"), 373600
FIN5E("LIST OF EVENTS EXECUTED SUCCESSFULLY"), 373700
FIN5DE("DEPARTMENT REPORTS OF EVENTS EXECUTED ", 373800
"SUCCESSFULLY"), 373900
FIN5M("MILESTONE REPORTS EXECUTED SUCCESSFULLY"), 374000
FIN6("PLOT BY ",A6," BEGINNING AT ",I6," EXECUTED ", 374100
"SUCCESSFULLY"), 374200
FIN6DI("DEPARTMENT GRAPHS BY DEPARTMENT OF PREDECESSOR ", 374300
"EVENT BY ",A6," BEGINNING AT ",I6," EXECUTED ", 374400
"SUCCESSFULLY"), 374500
FIN6DJ("DEPARTMENT GRAPHS BY DEPARTMENT OF SUCCESSOR ", 374600
"EVENT BY ",A6," BEGINNING AT ",I6," EXECUTED ", 374700
"SUCCESSFULLY"), 374800
FIN7("JOB COMPLETED"), 374900
FIN8("JOB NOT COMPLETED BECAUSE OF ERRORS NOTED ABOVE") ; 375000
SWITCH SWFIN ~ LFIN,LFIN2,LFIN3,LFIN4,LFIN5,LFIN6,LFIN7 ; 375100
SWITCH SW2 ~ LFINA,LFINI,LFINJ,LFINE,LFIND,LFINM ; 375200
SWITCH SW3 ~ LFING,LFINGI,LFINGJ ; 375300
KK ~ 0 ; 375400
NN ~ 0 ; 375500
WRITE(PRINTER[PAGE]) ; 375600
FOR MM ~ 1 STEP 1 UNTIL NOBLOCK - 1 DO 375700
BEGIN 375800
GO TO SWFIN[BLOC[MM]] ; 375900
LFIN2: WRITE(PRINTER[DBL],FIN1) ; GO TO LFIN ; 376000
LFIN3: WRITE(PRINTER[DBL],FIN2) ; GO TO LFIN ; 376100
LFIN4: IF (BLOCPARAM[MM] } 1) THEN 376200
BEGIN 376300
NN ~ NN + 1 ; WRITE(PRINTER[DBL],FIN3E,LIST3E) ; 376400
END 376500
ELSE 376600
BEGIN 376700
KK ~ KK + 1 ; WRITE(PRINTER[DBL],FIN3A,LIST3) ; 376800
END ; 376900
GO TO LFIN ; 377000
LFIN5: WRITE(PRINTER[DBL],FIN4) ; GO TO LFIN ; 377100
LFIN6: GO TO SW2[BLOCPARAM[MM].[16:3] + (3 | BLOCPARAM[MM].[9:3]) 377200
+ 1] ; 377300
LFINA: WRITE(PRINTER[DBL],FIN5A) ; GO TO LFIN ; 377400
LFINI: WRITE(PRINTER[DBL],FIN5DAI) ; GO TO LFIN ; 377500
LFINJ: WRITE(PRINTER[DBL],FIN5DAJ) ; GO TO LFIN ; 377600
LFINE: WRITE(PRINTER[DBL],FIN5E) ; GO TO LFIN ; 377700
LFIND: WRITE(PRINTER[DBL],FIN5DE) ; GO TO LFIN ; 377800
LFINM: WRITE(PRINTER[DBL],FIN5M) ; GO TO LFIN ; 377900
LFIN7: GO TO SW3[BLOCPARAM[MM].[16:3] + 1] ; 378000
LFING: WRITE(PRINTER[DBL],FIN6,LIST6) ; GO TO LFIN ; 378100
LFINGI: WRITE(PRINTER[DBL],FIN6DI,LIST6) ; GO TO LFIN ; 378200
LFINGJ: WRITE(PRINTER[DBL],FIN6DJ,LIST6) ; GO TO LFIN ; 378300
LFIN: END ; 378400
IF BLOC[NOBLOCK] = 8 THEN WRITE(PRINTER,FIN7) 378500
ELSE WRITE(PRINTER,FIN8) ; 378600
END 378700
END 378800
END ; 378900
COMMENT WRITE SPO MESSAGES TO TELL WHICH TAPES SHOULD BE SAVED FOR 379000
AN UPDATE RUN ; 379100
INST[1,0] ~ FILENAMES[SC] ; 379200
TYPEOUT(SPOOUT,INST[1,*]) ; TYPEOUT(SPOOUT,INST[4,*]) ; 379300
INST[2,0] ~ FILENAMES[RD] ; 379400
TYPEOUT(SPOOUT,INST[2,*]) ; TYPEOUT(SPOOUT,INST[4,*]) ; 379500
IF EVENTTAPE THEN 379600
BEGIN 379700
INST[3,0] ~ FILENAMES[RE] ; 379800
TYPEOUT(SPOOUT,INST[3,*]) ; TYPEOUT(SPOOUT,INST[4,*]) ; 379900
END ; 380000
ENDOFPROG: END . 380100