1 Modification
Listing Sections
Seq # *Modification Id* Act ----------------------------+ 02163 M01S02161.secart +++| COMMON /TRC/ JN 02164 M01S02162.secart +++| COMMON /TRC/ JS 02165 M01S02163.secart +++| COMMON /TRC/ JC 02166 M01S02164.secart +++| COMMON /TRC/ TS 02167 M01S02165.secart +++| COMMON /TRC/ TE 02168 M01S02166.secart +++| COMMON /TRC/ FN 02169 M01S02167.secart +++| COMMON /TRC/ UN 02170 M01S02168.secart +++| COMMON /TRC/ TN 02171 M01S02169.secart +++| 02172 M01S02170.secart +++| 02173 M01S02171.secart +++|** ENTRY - CALL ACSCAN(LFN,*NNN) 02174 M01S02172.secart +++|* *LFN* IS LFN OF ACCOUNT LOG FILE. 02175 M01S02173.secart +++|* *NNN IS ALTERNATE EXIT STATEMENT NUMBER. 02176 M01S02174.secart +++|* 02177 M01S02175.secart +++|* EXIT - FILE REWOUND AND FIRST RECORD READ FOR PROCESSING. 02178 M01S02176.secart +++|* 02179 M01S02177.secart +++|* ERROR - ALTERNATE EXIT TAKEN IF FILE FAILS FORMAT TEST OR 02180 M01S02178.secart +++|* EOF FOUND BEFORE LOG DATE AND SYSTEM ID ARE FOUND. 02181 M01S02179.secart +++|* 02182 M01S02180.secart +++|* USES - COMMON /CTL/ FOR GLOBAL VARIABLES DFEOF, DFIN. 02183 M01S02181.secart +++|* COMMON /ACL/ FOR ACCOUNT-SPECIFIC VARIABLES. 02184 M01S02182.secart +++|* 02185 M01S02183.secart +++|* CALLS - *LOGTEST* TO CHECK FORMAT, EXTRACT START DATE/TIME. 02186 M01S02184.secart +++|* 02187 M01S02185.secart +++|* NOTES - ACCOUNT LOG PRE-SCAN ROUTINE REQUIRES: 02188 M01S02186.secart +++|* 1) THAT FILE BE FORMATTED AS A RAW ACCOUNT LOG. 02189 M01S02187.secart +++|* 2) FINDING A START DATE VIA SYSJOB MESSAGE - 02190 M01S02188.secart +++|* A) 'ABSY' OR 'SIDT' MESSAGE, -OR- 02191 M01S02189.secart +++|* B) 'ACDT' MESSAGE. 02192 M01S02190.secart +++|* 3) ESTABLISHING SYSTEM ID VIA SYSJOB MESSAGES, 02193 M01S02191.secart +++|* A) 'ABST' MESSAGE FOR TITLE, -AND- 02194 M01S02192.secart +++|* B) 'ABSV' MESSAGE FOR VERSION. 02195 M01S02193.secart +++|* IF SUCCESSFUL, FILE WILL BE REWOUND AND FIRST RECORD 02196 M01S02194.secart +++|* WILL BE READ IN ADVANCE TO START PROCESSING. 02197 M01S02195.secart +++| 02198 M01S02196.secart +++| ACEOF=.FALSE. 02199 M01S02197.secart +++| 02200 M01S02198.secart +++|* CHECK LOG FORMAT AND EXTRACT START [DATE]/TIME STAMPS. 02201 M01S02199.secart +++| 02202 M01S02200.secart +++| CALL LOGTEST(2,ACTXT,ACEDATE,ACETIME,*130) 02203 M01S02201.secart +++| IF (ACETIME.EQ.' ' .OR. ACTXT(25:26).NE.', ') THEN 02204 M01S02202.secart +++| CALL REMARK(' *** '//LFN//' NOT RAW ACCOUNT LOG.') 02205 M01S02203.secart +++| ACEOF=.TRUE. 02206 M01S02204.secart +++| RETURN 1 02207 M01S02205.secart +++| ENDIF 02208 M01S02206.secart +++| 02209 M01S02207.secart +++|* ACCEPT TIME, COUNT DATE STAMP RECORD AND REMEMBER TO SKIP OVER. 02210 M01S02208.secart +++| 02211 M01S02209.secart +++| ACSTIME=ACETIME 02212 M01S02210.secart +++| IF (ACEDATE.NE.' ') ACIN=1 02213 M01S02211.secart +++| GOTO 110 02214 M01S02212.secart +++| 02215 M01S02213.secart +++|* READ NEXT ACCOUNT LOG RECORD. 02216 M01S02214.secart +++| 02217 M01S02215.secart +++| 100 READ (2,10,END=130) ACTXT 02218 M01S02216.secart +++| 10 FORMAT(A100) 02219 M01S02217.secart +++| 02220 M01S02218.secart +++| 110 ACETIME=ACTXT(1:10) 02221 M01S02219.secart +++| MID=ACTXT(21:24) 02222 M01S02220.secart +++| 02223 M01S02221.secart +++|* SCAN FOR SYSJOB MESSAGES ONLY. 02224 M01S02222.secart +++| 02225 M01S02223.secart +++| IF (ACTXT(13:17).NE.'SYS S') GOTO 100 02226 M01S02224.secart +++| 02227 M01S02225.secart +++|* WATCH FOR SYSJOB MSGS W/ DATE, TITLE AND VERSION. 02228 M01S02226.secart +++| 02229 M01S02227.secart +++| IF (MID.EQ.'ABST') THEN 02230 M01S02228.secart +++| ACTITLE=ACTXT(27:66) 02231 M01S02229.secart +++| ELSE IF (MID.EQ.'ABSV') THEN 02232 M01S02230.secart +++| ACVERSN=ACTXT(27:46) 02233 M01S02231.secart +++| ELSE IF (MID.EQ.'ABSY' .OR. MID.EQ.'SIDT')THEN 02234 M01S02232.secart +++| ACEDATE=ACTXT(27:36) 02235 M01S02233.secart +++| ELSE IF (MID.EQ.'ACDT' .AND. ACTXT(27:36).EQ.'DS, DATE. ') THEN 02236 M01S02234.secart +++| ACEDATE=ACTXT(37:46) 02237 M01S02235.secart +++| ENDIF 02238 M01S02236.secart +++| 02239 M01S02237.secart +++|* ACCEPT START DATE, IF FOUND. 02240 M01S02238.secart +++| 02241 M01S02239.secart +++| IF (ACSDATE.EQ.' ' .AND. ACEDATE.NE.' ') ACSDATE=ACEDATE 02242 M01S02240.secart +++| 02243 M01S02241.secart +++|* NEED DATE, SYSTEM TITLE AND VERSION TO PROCESS LOG. 02244 M01S02242.secart +++| 02245 M01S02243.secart +++| IF (ACSDATE.EQ.' '.OR.ACTITLE.EQ.' '.OR.ACVERSN.EQ.' ') GOTO 100 02246 M01S02244.secart +++| 02247 M01S02245.secart +++|* REWIND FOR ROUTINE PROCESSING AND SKIP OVER DATE STAMP. 02248 M01S02246.secart +++| 02249 M01S02247.secart +++| REWIND 2 02250 M01S02248.secart +++| IF (ACIN.EQ.1) READ (2,10,END=130) ACTXT 02251 M01S02249.secart +++| PRT=.FALSE. 02252 M01S02250.secart +++| 02253 M01S02251.secart +++|* DROP THROUGH TO READ FIRST USABLE MESSAGE. 02254 M01S02252.secart +++| 02255 M01S02253.secart +++|* --------------------------------------------------------------------- 02256 M01S02254.secart +++|* ROUTINE ACCOUNT LOG MESSAGE PROCESSING. 02257 M01S02255.secart +++|* --------------------------------------------------------------------- 02258 M01S02256.secart +++| 02259 M01S02257.secart +++|* GET MSG, COUNT & MARK AS TO SOURCE ('+' IN COL 20 = ACCOUNT). 02260 M01S02258.secart +++| 02261 M01S02259.secart +++| 120 READ (2,10,END=130) ACTXT 02262 M01S02260.secart +++| ACIN=ACIN+1 02263 M01S02261.secart +++| ACETIME=ACTXT(1:10) 02264 M01S02262.secart +++| MID=ACTXT(21:24) 02265 M01S02263.secart +++| ACTXT(20:20)='+' 02266 M01S02264.secart +++| 02267 M01S02265.secart +++|* SPECIAL CASE BIAS SOME MSG ID-S TO PRECEDE DFL MSGS. 02268 M01S02266.secart +++| 02269 M01S02267.secart +++| IF (INDEX('AB AC AR AS',MID(1:2)).NE.0 02270 M01S02268.secart +++| . .OR. MID.EQ.'SIDT') ACETIME(10:10)=' ' 02271 M01S02269.secart +++| RETURN 02272 M01S02270.secart +++| 02273 M01S02271.secart +++| 02274 M01S02272.secart +++|* EOF ALTERNATE EXIT. 02275 M01S02273.secart +++| 02276 M01S02274.secart +++| 130 ACEOF=.TRUE. 02277 M01S02275.secart +++| WRITE (8,*) ' === EOF ACCOUNT LOG ',LFN,', ',ACIN,' MESSAGES' 02278 M01S02276.secart +++| RETURN 1 02279 M01S02277.secart +++| 02280 M01S02278.secart +++| 02281 M01S02279.secart +++|** ENTRY - CALL ACMSG(*NNN) 02282 M01S02280.secart +++|* *NNN IS ALTERNATE EXIT TAKEN WHEN ACEOF = .TRUE. AT 02283 M01S02281.secart +++|* TIME OF CALL. 02284 M01S02282.secart +++|* 02285 M01S02283.secart +++|* EXIT - ANNOTATED ACCOUNT LOG MESSAGE WRITTEN TO COMPOSITE 02286 M01S02284.secart +++|* LOG FILE ON UNIT 3 AND NEXT RECORD IS READ, OR 02287 M01S02285.secart +++|* *ACEOF* IS SET TO .TRUE. 02288 M01S02286.secart +++|* 02289 M01S02287.secart +++|* ERROR - NONE. 02290 M01S02288.secart +++|* 02291 M01S02289.secart +++|* PRINTOUT - 02292 M01S02290.secart +++|* ANNOTATED COPIES OF CERTAIN ACCOUNT LOG MESSAGES: 02293 M01S02291.secart +++|* - ALL WITH TIMESTAMP WITHIN TIME WINDOW. 02294 M01S02292.secart +++|* - JOB RECOVERY MESSAGES. 02295 M01S02293.secart +++|* - CHANGES TO USERNAME ASSOCIATED WITH A JOB. 02296 M01S02294.secart +++|* - CHANGES TO JOB'S JSN. 02297 M01S02295.secart +++|* 02298 M01S02296.secart +++|* CALLS - *JSNLVL0* TO UPDATE D/S UNIQUE JSN PREFIX CODE. 02299 M01S02297.secart +++|* *TMCHECK* TO CHECK FOR TIME WINDOWS. 02300 M01S02298.secart +++|* *JSNTRAK* TO COLLECT ATTRIBUTES IN JSN TRACE TABLE. 02301 M01S02299.secart +++|* *AMSTEST* TO COLLECT ACCOUNT MSG ID STATISTICS AND 02302 M01S02300.secart +++|* DETECT FLAGGED ID-S. 02303 M01S02301.secart +++|* *JSNLOOK* TO FIND RECOVERED JOB ATTRIBUTES. 02304 M01S02302.secart +++|* *PICKUSR* TO CHECK NEW USERID-S FOR SELECTION. 02305 M01S02303.secart +++|* *PICKTRM* TO CHECK NEW TERMINAL ID-S FOR SELECTION. 02306 M01S02304.secart +++|* *PARSE* TO EXTRACT DATA ITEMS FROM LOG MESSAGES. 02307 M01S02305.secart +++|* 02308 M01S02306.secart +++|* NOTES - THIS ROUTINE PROCESSES MESSAGE READ DURING PREVIOUS 02309 M01S02307.secart +++|* CALL AND THEN READS NEXT RECORD BEFORE RETURNING. 02310 M01S02308.secart +++|* THIS ALLOWS *SECART* TO SEE TIMESTAMP OF NEXT RECORD 02311 M01S02309.secart +++|* AND DECIDE WHEN TO PROCESS VIS A VIS DAYFILE LOG. 02312 M01S02310.secart +++|* TO INSURE THAT MESSAGE ID-S BEGINNING WITH 'AB', 02313 M01S02311.secart +++|* 'AC', 'AR', AND 'AS' PRECEEDE DAYFILE MESSAGES IN 02314 M01S02312.secart +++|* SAME SECOND, A SPECIAL CASE BIAS IS APPLIED BY 02315 M01S02313.secart +++|* BLANKING FINAL PERIOD IN TIMESTAMP. 02316 M01S02314.secart +++| 02317 M01S02315.secart +++| ENTRY ACMSG(*) 02318 M01S02316.secart +++| 02319 M01S02317.secart +++|* RESET SPECIAL CASE BIAS, IF ANY. 02320 M01S02318.secart +++| 02321 M01S02319.secart +++| ACETIME(10:10)='.' 02322 M01S02320.secart +++| 02323 M01S02321.secart +++|* WATCH FOR NEW DATE AND LEVEL 0 DEADSTART MSGS. 02324 M01S02322.secart +++| 02325 M01S02323.secart +++| IF (INDEX('ABSY AESY SIDT',MID).NE.0) THEN 02326 M01S02324.secart +++| ACEDATE=ACTXT(27:36) 02327 M01S02325.secart +++| ELSE IF (MID.EQ.'ACDT') THEN 02328 M01S02326.secart +++| IF (ACTXT(27:36).EQ.'DS, DATE. ') ACEDATE=ACTXT(37:46) 02329 M01S02327.secart +++| ELSE IF (MID.EQ.'ARSY') THEN 02330 M01S02328.secart +++| ACEDATE=ACTXT(29:38) 02331 M01S02329.secart +++| IF (ACTXT(27:28).EQ.'0,') CALL JSNLVL0 02332 M01S02330.secart +++| ENDIF 02333 M01S02331.secart +++| 02334 M01S02332.secart +++|* INSERT D/S UNIQUE CODE LETTER AS JSN PREFIX. 02335 M01S02333.secart +++| 02336 M01S02334.secart +++| ACTXT(11:12)=DSU//'.' 02337 M01S02335.secart +++| 02338 M01S02336.secart +++|* CHECK FOR TIME WINDOW START OR END. 02339 M01S02337.secart +++| 02340 M01S02338.secart +++| CALL TMCHECK(ACETIME,PRT) 02341 M01S02339.secart +++| 02342 M01S02340.secart +++|* COLLECT/MATCH JSN-S. 02343 M01S02341.secart +++| 02344 M01S02342.secart +++| JSN=ACTXT(11:16) 02345 M01S02343.secart +++| JCL=ACTXT(17:17) 02346 M01S02344.secart +++| CALL JSNTRAK(JSN,JCL,ACEDTG,N,2) 02347 M01S02345.secart +++| 02348 M01S02346.secart +++|* COLLECT/MATCH MESSAGE IDS & DETECT FLAGGED MSG ID-S. 02349 M01S02347.secart +++| 02350 M01S02348.secart +++| CALL AMSTEST(MID,JCL,PRT) 02351 M01S02349.secart +++| 02352 M01S02350.secart +++|* WATCH FOR RECOVERED JOBS. TRY TO RETRIEVE ATTRIBUTES. 02353 M01S02351.secart +++| 02354 M01S02352.secart +++| IF (MID.EQ.'ARRQ' .AND. ACTXT(27:28).EQ.'C1' 02355 M01S02353.secart +++| . .AND. ACTXT(53:54).EQ.'IN' ) THEN 02356 M01S02354.secart +++| NUDTG=' 00/00/00. 00.00.00.' 02357 M01S02355.secart +++| NUDTG(2:3)=ACTXT(37:38) 02358 M01S02356.secart +++| NUDTG(5:6)=ACTXT(39:40) 02359 M01S02357.secart +++| NUDTG(8:9)=ACTXT(41:42) 02360 M01S02358.secart +++| NUDTG(12:13)=ACTXT(45:46) 02361 M01S02359.secart +++| NUDTG(15:16)=ACTXT(47:48) 02362 M01S02360.secart +++| NUDTG(18:19)=ACTXT(49:50) 02363 M01S02361.secart +++| X=DSU 02364 M01S02362.secart +++| 02365 M01S02363.secart +++| 165 NUJSN=X//'.'//ACTXT(31:34) 02366 M01S02364.secart +++| CALL JSNLOOK(NUJSN,L) 02367 M01S02365.secart +++| IF (L.NE.0.AND.TS(L).EQ.NUDTG) THEN 02368 M01S02366.secart +++| FN(N)=FN(L) 02369 M01S02367.secart +++| UN(N)=UN(L) 02370 M01S02368.secart +++| JN(N)=JN(L) 02371 M01S02369.secart +++| WRITE (8,*) ' === JSN RECOVERED ',JS(L) 02372 M01S02370.secart +++| PRT=.TRUE. 02373 M01S02371.secart +++| ELSE 02374 M01S02372.secart +++| X=CHAR(ICHAR(X)-1) 02375 M01S02373.secart +++| IF (X.GE.'A') GOTO 165 02376 M01S02374.secart +++| WRITE (8,*) ' === JSN NOT FOUND: ',NUJSN(3:6),NUDTG 02377 M01S02375.secart +++| PRT=.TRUE. 02378 M01S02376.secart +++| ENDIF 02379 M01S02377.secart +++| ENDIF 02380 M01S02378.secart +++| 02381 M01S02379.secart +++|* COLLECT/CHANGE ATTRIBUTES IN TRACE TABLE. 02382 M01S02380.secart +++|* GET USER ID & TERMINAL AND CHECK FOR SELECTION. 02383 M01S02381.secart +++| 02384 M01S02382.secart +++| IF (MID.EQ.'ABUN') THEN 02385 M01S02383.secart +++| I=27 02386 M01S02384.secart +++| CALL PARSE(ACTXT,I,USR) 02387 M01S02385.secart +++| CALL PARSE(ACTXT,I,FAM) 02388 M01S02386.secart +++| CALL PARSE(ACTXT,I,TRM) 02389 M01S02387.secart +++| TN(N)=TRM 02390 M01S02388.secart +++| IF (FN(N).EQ.' ' .AND. UN(N).EQ.' ' ) THEN 02391 M01S02389.secart +++| UN(N)=USR 02392 M01S02390.secart +++| FN(N)=FAM 02393 M01S02391.secart +++| ENDIF 02394 M01S02392.secart +++| CALL PICKUSR(FAM,USR,MK(N)) 02395 M01S02393.secart +++| CALL PICKTRM(TRM,MK(N)) 02396 M01S02394.secart +++| 02397 M01S02395.secart +++| ELSE IF (MID.EQ.'ACUN') THEN 02398 M01S02396.secart +++| I=27 02399 M01S02397.secart +++| CALL PARSE(ACTXT,I,USR) 02400 M01S02398.secart +++| CALL PARSE(ACTXT,I,FAM) 02401 M01S02399.secart +++| CALL PICKUSR(FAM,USR,MK(N)) 02402 M01S02400.secart +++| PRT=.TRUE. 02403 M01S02401.secart +++| 02404 M01S02402.secart +++| ELSE IF (MID.EQ.'ARUN') THEN 02405 M01S02403.secart +++| I=27 02406 M01S02404.secart +++| CALL PARSE(ACTXT,I,USR) 02407 M01S02405.secart +++| CALL PARSE(ACTXT,I,FAM) 02408 M01S02406.secart +++| IF (UN(N).EQ.' ') UN(N)=USR 02409 M01S02407.secart +++| IF (FN(N).EQ.' ') FN(N)=FAM 02410 M01S02408.secart +++| CALL PICKUSR(FAM,USR,MK(N)) 02411 M01S02409.secart +++| CALL PARSE(ACTXT,I,TRM) 02412 M01S02410.secart +++| IF (TRM.NE.'TERMNAM') TN(N)=TRM 02413 M01S02411.secart +++| CALL PICKTRM(TRM,MK(N)) 02414 M01S02412.secart +++| 02415 M01S02413.secart +++|* CHANGE SC/JSN W/ LINK-BACK IF NEW JSN SELECTED. 02416 M01S02414.secart +++|* RECORDS NEW JSN W/ INHERITED ATTRIBUTES. 02417 M01S02415.secart +++| 02418 M01S02416.secart +++| ELSE IF (MID.EQ.'ACSC') THEN 02419 M01S02417.secart +++| I=27 02420 M01S02418.secart +++| CALL PARSE(ACTXT,I,SC) 02421 M01S02419.secart +++| NUJSN=DSU//'. ' 02422 M01S02420.secart +++| CALL PARSE(ACTXT,I,NUJSN(3:6)) 02423 M01S02421.secart +++| IF (NUJSN(3:6).NE.' ' .AND. NUJSN(3:6).NE.JSN) THEN 02424 M01S02422.secart +++| L=N 02425 M01S02423.secart +++| CALL JSNTRAK(NUJSN,JCL,ACEDTG,N,2) 02426 M01S02424.secart +++| MK(N)=MK(L) 02427 M01S02425.secart +++| JN(N)=JN(L) 02428 M01S02426.secart +++| FN(N)=FN(L) 02429 M01S02427.secart +++| UN(N)=UN(L) 02430 M01S02428.secart +++| TN(N)=TN(L) 02431 M01S02429.secart +++| PRT=.TRUE. 02432 M01S02430.secart +++| ENDIF 02433 M01S02431.secart +++| ENDIF 02434 M01S02432.secart +++| 02435 M01S02433.secart +++|* PRINTOUT MESSAGE FOR ANY REASON. 02436 M01S02434.secart +++| 02437 M01S02435.secart +++| IF (PRT) THEN 02438 M01S02436.secart +++| WRITE (8,10) ACTXT 02439 M01S02437.secart +++| PRT=.FALSE. 02440 M01S02438.secart +++| ENDIF 02441 M01S02439.secart +++| 02442 M01S02440.secart +++|* PUT ANNOTATED MESSAGE INTO MERGED LOG FILE. 02443 M01S02441.secart +++| 02444 M01S02442.secart +++| WRITE (3,10) ACTXT 02445 M01S02443.secart +++| GOTO 120 02446 M01S02444.secart +++| 02447 M01S02445.secart +++| END 02448 M01S02446.secart +++| 02449 M01S02447.secart +++|* --------------------------------------------------------------------- 02450 M01S02448.secart +++| SUBROUTINE LOGTEST(LF,TXT,DT,TM,*) 02451 M01S02449.secart +++|** LOGTEST - TEST RAW LOG FORMAT & EXTRACT DATE/TIME STAMPS. 02452 M01S02450.secart +++|* 02453 M01S02451.secart +++|* *LOGTEST* READS FIRST LINE OF LOG FILE, TESTS FOR SYNTAX OF 02454 M01S02452.secart +++|* OPTIONAL DATESTAMP AND, IF CORRECT, EXTRACTS LOG START DATE. 02455 M01S02453.secart +++|* (DATE STAMP IS OPTIONAL TO PERMIT PROCESSING LOG FRAGMENTS.) 02456 M01S02454.secart +++|* IF DATE STAMP IS MISSING, FIRST LINE IS CHECKED FOR PROPER 02457 M01S02455.secart +++|* SYNTAX AND LOG START TIME EXTRACTED. IF DATE STAMP IS 02458 M01S02456.secart +++|* PRESENT, 2ND LINE WILL BE READ, CHECKED AND TIME EXTRACTED. 02459 M01S02457.secart +++|* 02460 M01S02458.secart +++|* ENTRY - CALL LOGTEST(LFN,TXT,OK) 02461 M01S02459.secart +++|* *LF* IS UNIT NUMBER OF FILE BEING TESTED. 02462 M01S02460.secart +++|* 02463 M01S02461.secart +++|* EXIT - *TXT* WILL CONTAIN FIRST USABLE RECORD FROM FILE. 02464 M01S02462.secart +++|* *DT* WILL CONTAIN DATE STAMP OR BLANKS. 02465 M01S02463.secart +++|* *TM* WILL CONTAIN TIMESTAMP OF USABLE RECORD. 02466 M01S02464.secart +++|* 02467 M01S02465.secart +++|* ERROR - ALTERNATE RETURN 1 IF EOF OR LOG FAILS FORMAT TESTS. 02468 M01S02466.secart +++|* 02469 M01S02467.secart +++|* NOTES - USES CHARACTER STRING CATENATION TO SIMPLIFY SYNTAX 02470 M01S02468.secart +++|* CHECK AND INDEX FUNCTION TO CHECK FOR NON-NUMERIC 02471 M01S02469.secart +++|* CHARACTERS EFFICIENTLY. SPECIFIC TESTS ARE: 02472 M01S02470.secart +++|* -------------------------------------------- 02473 M01S02471.secart +++|* CHAR POSITION: 1234567890123456789012345 02474 M01S02472.secart +++|* TARGET FORMAT: ' NN.NN.NN. XXXXX. XXXX...' 02475 M01S02473.secart +++|* TEST SYNTAX : = = = === === 02476 M01S02474.secart +++|* TEST NUMERIC : == == == 02477 M01S02475.secart +++|* -------------------------------------------- 02478 M01S02476.secart +++| 02479 M01S02477.secart +++| IMPLICIT INTEGER(A-Z) 02480 M01S02478.secart +++| 02481 M01S02479.secart +++| INTEGER LF 02482 M01S02480.secart +++|* ARG - UNIT # LOG FILE TO TEST FORMAT. 02483 M01S02481.secart +++| 02484 M01S02482.secart +++| CHARACTER*10 DT 02485 M01S02483.secart +++|* ARG - LOG START DATE RETURNED. 02486 M01S02484.secart +++| 02487 M01S02485.secart +++| LOGICAL OK 02488 M01S02486.secart +++|* TEMP - USED IN SYNTAX CHECKING. 02489 M01S02487.secart +++| 02490 M01S02488.secart +++| CHARACTER*10 TM 02491 M01S02489.secart +++|* ARG - LOG START TIME RETURNED 02492 M01S02490.secart +++| 02493 M01S02491.secart +++| CHARACTER*6 TST 02494 M01S02492.secart +++|* TEMP - USED IN SYNTAX CHECK. 02495 M01S02493.secart +++| 02496 M01S02494.secart +++| CHARACTER*100 TXT 02497 M01S02495.secart +++|* ARG - FIRST RECORD TEXT STRING. 02498 M01S02496.secart +++| 02499 M01S02497.secart +++| DT=' ' 02500 M01S02498.secart +++| TM=' ' 02501 M01S02499.secart +++| OK=.TRUE. 02502 M01S02500.secart +++| 02503 M01S02501.secart +++|* READ FIRST LINE OF LOG, CHECK FOR OPTIONAL DATE STAMP. 02504 M01S02502.secart +++| 02505 M01S02503.secart +++| READ (LF,10,END=130) TXT 02506 M01S02504.secart +++| 10 FORMAT(A100) 02507 M01S02505.secart +++| IF (TXT(1:1).EQ.' ') GOTO 100 02508 M01S02506.secart +++| 02509 M01S02507.secart +++|* 1 6 02510 M01S02508.secart +++|* CHECK FOR DATE STAMP SYNTAX: YYMMDD. 02511 M01S02509.secart +++| 02512 M01S02510.secart +++| IF (INDEX('8901',TXT(1:1)).EQ.0) OK=.FALSE. 02513 M01S02511.secart +++| IF (INDEX('0123456789',TXT(2:2)).EQ.0) OK=.FALSE. 02514 M01S02512.secart +++| IF (INDEX('01',TXT(3:3)).EQ.0) OK=.FALSE. 02515 M01S02513.secart +++| IF (INDEX('0123456789',TXT(4:4)).EQ.0) OK=.FALSE. 02516 M01S02514.secart +++| IF (INDEX('0123',TXT(5:5)).EQ.0) OK=.FALSE. 02517 M01S02515.secart +++| IF (INDEX('0123456789',TXT(6:6)).EQ.0) OK=.FALSE. 02518 M01S02516.secart +++| IF (.NOT.OK) GOTO 130 02519 M01S02517.secart +++| 02520 M01S02518.secart +++|* ACCEPT DATE STAMP, READ SECOND LINE FOR TIME STAMP. 02521 M01S02519.secart +++| 02522 M01S02520.secart +++| DT=' '//TXT(1:2)//'/'//TXT(3:4)//'/'//TXT(5:6)//'.' 02523 M01S02521.secart +++| READ (LF,10,END=130) TXT 02524 M01S02522.secart +++| 02525 M01S02523.secart +++| 02526 M01S02524.secart +++|* COLLECT AND TEST TIME STAMP SYNTAX CHARACTERS. 02527 M01S02525.secart +++| 02528 M01S02526.secart +++| 100 IF (TXT(1:1)//TXT(4:4)//TXT(7:7)//TXT(10:12)//TXT(18:20) 02529 M01S02527.secart +++| . .NE. ' ... . ') GOTO 130 02530 M01S02528.secart +++| 02531 M01S02529.secart +++|* COLLECT AND TEST NUMERIC CHARACTERS. 02532 M01S02530.secart +++| 02533 M01S02531.secart +++| TST=TXT(2:3)//TXT(5:6)//TXT(8:9) 02534 M01S02532.secart +++| DO 110 I=1,6 02535 M01S02533.secart +++| IF(INDEX('0123456789',TST(I:I)).EQ.0) OK=.FALSE. 02536 M01S02534.secart +++| 110 CONTINUE 02537 M01S02535.secart +++| IF (OK) TM=TXT(1:10) 02538 M01S02536.secart +++| RETURN 02539 M01S02537.secart +++| 02540 M01S02538.secart +++|* ALTERNATE EXIT ON EOF OR FAILED SYNTAX CHECK. 02541 M01S02539.secart +++| 02542 M01S02540.secart +++| 130 RETURN 1 02543 M01S02541.secart +++| END 02544 M01S02542.secart +++| 02545 M01S02543.secart +++|* --------------------------------------------------------------------- 02546 M01S02544.secart +++| SUBROUTINE JSNLOAD 02547 M01S02545.secart +++|** JSNLOAD - JSN TRACE TABLE MANAGER. 02548 M01S02546.secart +++|* 02549 M01S02547.secart +++|* THIS PROGRAM UNIT MANAGES THE JSN TRACE TABLE WHICH RECORDS 02550 M01S02548.secart +++|* JOB ATTRIBUTES DATA EXTRACTED FROM BOTH DAYFILE AND ACCOUNT 02551 M01S02549.secart +++|* LOGS. MULTIPLE ENTRY POINTS ARE PROVIDED FOR PURPOSES OF: 02552 M01S02550.secart +++|* PRE-LOADING TRACE TABLE DATA FROM PREVIOUS *SECART* RUNS, 02553 M01S02551.secart +++|* MAINTAINING A JSN PREFIX CODE TO AVOID AMBIGUITIES ACROSS 02554 M01S02552.secart +++|* LEVEL ZERO DEADSTARTS, AUTOMATICALLY CREATING NEW TABLE 02555 M01S02553.secart +++|* ENTRIES FOR EACH UNIQUE JSN, THEN MATCHING JSN-S ON 02556 M01S02554.secart +++|* SUBSEQUENT CALLS AND COLLECTING JOB ATTRIBUTES, OPTIONALLY 02557 M01S02555.secart +++|* SORTING TRACE TABLE ENTRIES ON A SPECIFIED SET OF DATA ITEMS, 02558 M01S02556.secart +++|* AND FINALLY PRINTING THE TRACE TABLE. IT ALSO PRODUCES THE 02559 M01S02557.secart +++|* TRACE TABLE FILE WHICH MAY BE LOADED ON A SUBSEQUENT RUN. 02560 M01S02558.secart +++| 02561 M01S02559.secart +++| 02562 M01S02560.secart +++| IMPLICIT INTEGER(A-Z) 02563 M01S02561.secart +++| 02564 M01S02562.secart +++| PARAMETER (MXJ=1000) 02565 M01S02563.secart +++|* SIZE OF JSN TRACE TABLE. 02566 M01S02564.secart +++| 02567 M01S02565.secart +++| 02568 M01S02566.secart +++| CHARACTER*20 ACEDTG 02569 M01S02567.secart +++|* /ACL/ ACCOUNT LOG END DATE/TIME GROUP. 02570 M01S02568.secart +++| 02571 M01S02569.secart +++| LOGICAL ACEOF 02572 M01S02570.secart +++|* /CTL/ ACCOUNT LOG EOF FLAG. 02573 M01S02571.secart +++| 02574 M01S02572.secart +++| INTEGER ACIN 02575 M01S02573.secart +++|* /CTL/ ACCOUNT LOG MESSAGE COUNTER. 02576 M01S02574.secart +++| 02577 M01S02575.secart +++| CHARACTER*20 ACSDTG 02578 M01S02576.secart +++|* /ACL/ ACCOUNT LOG START DATE/TIME GROUP. 02579 M01S02577.secart +++| 02580 M01S02578.secart +++| CHARACTER*60 ACSYSID 02581 M01S02579.secart +++|* /ACL/ ACCOUNT LOG SYSTEM TITLE/VERSION. 02582 M01S02580.secart +++| 02583 M01S02581.secart +++| CHARACTER*20 DFEDTG 02584 M01S02582.secart +++|* /DFL/ DAYFILE LOG END DATE/TIME GROUP. 02585 M01S02583.secart +++| 02586 M01S02584.secart +++| LOGICAL DFEOF 02587 M01S02585.secart +++|* /CTL/ DAYFILE LOG EOF FLAG. 02588 M01S02586.secart +++| 02589 M01S02587.secart +++| INTEGER DFIN 02590 M01S02588.secart +++|* /CTL/ DAYFILE LOG MESSAGE COUNTER. 02591 M01S02589.secart +++| 02592 M01S02590.secart +++| CHARACTER*20 DFSDTG 02593 M01S02591.secart +++|* /DFL/ DAYFILE LOG START DATE/TIME GROUP. 02594 M01S02592.secart +++| 02595 M01S02593.secart +++| CHARACTER*60 DFSYSID 02596 M01S02594.secart +++|* /DFL/ DAYFILE LOG SYSTEM TITLE/VERSION. 02597 M01S02595.secart +++| 02598 M01S02596.secart +++| CHARACTER*1 DSU 02599 M01S02597.secart +++|* /TRC/ DEADSTART UNIQUE PREFIX CODE. 02600 M01S02598.secart +++| 02601 M01S02599.secart +++| CHARACTER*20 DTG 02602 M01S02600.secart +++|* ARG - DATE/TIME GROUP. 02603 M01S02601.secart +++| 02604 M01S02602.secart +++| LOGICAL ERR 02605 M01S02603.secart +++|* FLAG FOR MSGID SEQUENCE ERROR(S). 02606 M01S02604.secart +++| 02607 M01S02605.secart +++| CHARACTER*7 FN(MXJ) 02608 M01S02606.secart +++|* /TRC/ FAMILY NAME COLUMN IN TRACE TABLE. 02609 M01S02607.secart +++| 02610 M01S02608.secart +++| CHARACTER*40 HDR 02611 M01S02609.secart +++|* /SYS/ PRINTOUT HEADER TEXT. 02612 M01S02610.secart +++| 02613 M01S02611.secart +++| INTEGER IPAGE 02614 M01S02612.secart +++|* LOCAL PRINTOUT PAGE COUNTER. 02615 M01S02613.secart +++| 02616 M01S02614.secart +++| INTEGER JBLIMIT 02617 M01S02615.secart +++|* /CTL/ UNIT JOB PRINTOUT MESSAGE LIMIT. 02618 M01S02616.secart +++| 02619 M01S02617.secart +++| CHARACTER*1 JC(MXJ) 02620 M01S02618.secart +++|* /TRC/ JOB CLASS COLUMN IN TRACE TABLE. 02621 M01S02619.secart +++| 02622 M01S02620.secart +++| CHARACTER*1 JCL 02623 M01S02621.secart +++|* ARG - JOB CLASS. 02624 M01S02622.secart +++| 02625 M01S02623.secart +++| CHARACTER*7 JN(MXJ) 02626 M01S02624.secart +++|* /TRC/ UJN COLUMN IN TRACE TABLE. 02627 M01S02625.secart +++| 02628 M01S02626.secart +++| CHARACTER*6 JS(MXJ) 02629 M01S02627.secart +++|* /TRC/ D.JSN COLUMN IN TRACE TABLE. 02630 M01S02628.secart +++| 02631 M01S02629.secart +++| CHARACTER*6 JSN 02632 M01S02630.secart +++|* ARG - D.JSN ARGUMENT. 02633 M01S02631.secart +++| 02634 M01S02632.secart +++| INTEGER LF 02635 M01S02633.secart +++|* TEMP - FILE NUMBER FOR TRACE TABLE SORT. 02636 M01S02634.secart +++| 02637 M01S02635.secart +++| CHARACTER*7 LFN 02638 M01S02636.secart +++|* ARG - LFN FOR TRACE TABLE SORT LISTING. 02639 M01S02637.secart +++| 02640 M01S02638.secart +++| INTEGER LOG 02641 M01S02639.secart +++|* ARG - INDEX FOR DFL/AFL MESSAGE COUNTS. 02642 M01S02640.secart +++| 02643 M01S02641.secart +++| LOGICAL LOOK 02644 M01S02642.secart +++|* FLAG FOR *JSNTRAK* VERSUS *JSNLOOK*. 02645 M01S02643.secart +++| 02646 M01S02644.secart +++| INTEGER LST 02647 M01S02645.secart +++|* TEMP - HOLDS INDEX OF LAST JOB MATCHED. 02648 M01S02646.secart +++| 02649 M01S02647.secart +++| CHARACTER*5 MK(MXJ) 02650 M01S02648.secart +++|* /TRC/ JOB SELECTION MARKS IN TRACE TABLE. 02651 M01S02649.secart +++| 02652 M01S02650.secart +++| INTEGER ML(2,MXJ) 02653 M01S02651.secart +++|* /CTL/ DFL/AFL MSG COUNTS FOR TRACE TABLE. 02654 M01S02652.secart +++| 02655 M01S02653.secart +++| INTEGER N 02656 M01S02654.secart +++|* ARG - INDEX TO JOB IN TRACE TABLE. 02657 M01S02655.secart +++| 02658 M01S02656.secart +++| INTEGER NJ 02659 M01S02657.secart +++|* /CTL/ CURRENT NUMBER JOBS IN TRACE TABLE. 02660 M01S02658.secart +++| 02661 M01S02659.secart +++| INTEGER NS 02662 M01S02660.secart +++|* COUNT OF JOBS SELECTED. 02663 M01S02661.secart +++| 02664 M01S02662.secart +++| CHARACTER*10 PGM 02665 M01S02663.secart +++|* /SYS/ *SECART* VERSION ID FOR PRINTOUTS. 02666 M01S02664.secart +++| 02667 M01S02665.secart +++| CHARACTER*10 RUNDT 02668 M01S02666.secart +++|* /SYS/ *SECART* RUN DATE FOR PRINTOUTS. 02669 M01S02667.secart +++| 02670 M01S02668.secart +++| CHARACTER*10 RUNTM 02671 M01S02669.secart +++|* /SYS/ *SECART* RUN TIME FOR PRINTOUTS. 02672 M01S02670.secart +++| 02673 M01S02671.secart +++| CHARACTER*3 SKY(12) 02674 M01S02672.secart +++|* /SRT/ TRACE TABLE SORT KEYS. 02675 M01S02673.secart +++| 02676 M01S02674.secart +++| CHARACTER*20 TE(MXJ) 02677 M01S02675.secart +++|* /TRC/ JOB DATE/TIME END IN TRACE TABLE. 02678 M01S02676.secart +++| 02679 M01S02677.secart +++| CHARACTER*7 TN(MXJ) 02680 M01S02678.secart +++|* /TRC/ JOB TERMINAL NAME IN TRACE TABLE. 02681 M01S02679.secart +++| 02682 M01S02680.secart +++| CHARACTER*20 TS(MXJ) 02683 M01S02681.secart +++|* /TRC/ JOB DATE/TIME START IN TRACE TABLE. 02684 M01S02682.secart +++| 02685 M01S02683.secart +++| CHARACTER*100 TXT 02686 M01S02684.secart +++|* TEMP - BUFFER FOR TRACE SORT PRINTOUT. 02687 M01S02685.secart +++| 02688 M01S02686.secart +++| CHARACTER*7 UN(MXJ) 02689 M01S02687.secart +++|* /TRC/ JOB USERNAME IN TRACE TABLE. 02690 M01S02688.secart +++| 02691 M01S02689.secart +++| 02692 M01S02690.secart +++|* ACCOUNT LOG SPECIFIC VARIABLES. 02693 M01S02691.secart +++| 02694 M01S02692.secart +++| COMMON /ACL/ ACSDTG 02695 M01S02693.secart +++| COMMON /ACL/ ACEDTG 02696 M01S02694.secart +++| COMMON /ACL/ ACSYSID 02697 M01S02695.secart +++| 02698 M01S02696.secart +++|* GLOBAL NUMERIC/LOGICAL VARIABLES AND PARAMETERS. 02699 M01S02697.secart +++| 02700 M01S02698.secart +++| COMMON /CTL/ NJ 02701 M01S02699.secart +++| COMMON /CTL/ ACIN 02702 M01S02700.secart +++| COMMON /CTL/ DFIN 02703 M01S02701.secart +++| COMMON /CTL/ ACEOF 02704 M01S02702.secart +++| COMMON /CTL/ DFEOF 02705 M01S02703.secart +++| COMMON /CTL/ ML 02706 M01S02704.secart +++| COMMON /CTL/ JBLIMIT 02707 M01S02705.secart +++| 02708 M01S02706.secart +++|* DAYFILE LOG SPECIFIC VARIABLES. 02709 M01S02707.secart +++| 02710 M01S02708.secart +++| COMMON /DFL/ DFSDTG 02711 M01S02709.secart +++| COMMON /DFL/ DFEDTG 02712 M01S02710.secart +++| COMMON /DFL/ DFSYSID 02713 M01S02711.secart +++| 02714 M01S02712.secart +++|* JSN TRACE TABLE SORT PARAMETERS. 02715 M01S02713.secart +++| 02716 M01S02714.secart +++| COMMON /SRT/ SKY 02717 M01S02715.secart +++| 02718 M01S02716.secart +++|* GLOBAL STRING VARIABLES. 02719 M01S02717.secart +++| 02720 M01S02718.secart +++| COMMON /SYS/ HDR 02721 M01S02719.secart +++| COMMON /SYS/ PGM 02722 M01S02720.secart +++| COMMON /SYS/ RUNDT 02723 M01S02721.secart +++| COMMON /SYS/ RUNTM 02724 M01S02722.secart +++| 02725 M01S02723.secart +++|* JSN TRACE TABLE STORAGE. 02726 M01S02724.secart +++| 02727 M01S02725.secart +++| COMMON /TRC/ DSU 02728 M01S02726.secart +++| COMMON /TRC/ MK 02729 M01S02727.secart +++| COMMON /TRC/ JN 02730 M01S02728.secart +++| COMMON /TRC/ JS 02731 M01S02729.secart +++| COMMON /TRC/ JC 02732 M01S02730.secart +++| COMMON /TRC/ TS 02733 M01S02731.secart +++| COMMON /TRC/ TE 02734 M01S02732.secart +++| COMMON /TRC/ FN 02735 M01S02733.secart +++| COMMON /TRC/ UN 02736 M01S02734.secart +++| COMMON /TRC/ TN 02737 M01S02735.secart +++| 02738 M01S02736.secart +++| DATA LST /1/ 02739 M01S02737.secart +++| 02740 M01S02738.secart +++| 02741 M01S02739.secart +++|** ENTRY - CALL JSNLOAD [NO ARGUMENTS]. 02742 M01S02740.secart +++|* THIS ENTRY PERFORMS OPTIONAL LOAD OF TRACE TABLE 02743 M01S02741.secart +++|* DATA PRODUCED BY PREVIOUS RUN, WHICH ALLOWS *SECART* 02744 M01S02742.secart +++|* TO RECOVER ATTRIBUTES OF JOBS RECOVERED ACROSS A 02745 M01S02743.secart +++|* LEVEL ZERO DEADSTART WITH A NEW JSN. SINCE IT CLEARS 02746 M01S02744.secart +++|* ANY JOB SELECTION MARKS AND CHECKS FOR SELECTIONS 02747 M01S02745.secart +++|* BASED ON CURRENT SELECTION DIRECTIVES, IN RERUN MODE 02748 M01S02746.secart +++|* THIS ALSO PERMITS NEW UNIT JOB SELECTIONS TO BE MADE 02749 M01S02747.secart +++|* WITHOUT REPROCESSING FROM RAW LOGS DATA. THE TRACE 02750 M01S02748.secart +++|* TABLE DATA MUST BE ON FILE NUMBER 6. 02751 M01S02749.secart +++|* 02752 M01S02750.secart +++|* EXIT - NORMAL IF LOADED JSN-S IN ASCENDING ORDER. 02753 M01S02751.secart +++|* 02754 M01S02752.secart +++|* ERROR - JOB DAYFILE MESSAGE: 02755 M01S02753.secart +++|* *** TRACE TABLE SEQUENCE ERROR(S). 02756 M01S02754.secart +++|* 02757 M01S02755.secart +++|* USES - COMMON /TRC/ FOR TRACE TABLE STRING DATA. 02758 M01S02756.secart +++|* COMMON /CTL/ FOR TRACE TABLE NUMERIC DATA. 02759 M01S02757.secart +++|* 02760 M01S02758.secart +++|* CALLS - *PICKUJN* FOR NEW UJN SELECTIONS. 02761 M01S02759.secart +++|* *PICKJSN* FOR NEW JSN SELECTIONS. 02762 M01S02760.secart +++|* *PICKUSR* FOR NEW USERNAME SELECTIONS. 02763 M01S02761.secart +++|* *PICKTRM* FOR NEW TERMINAL SELECTIONS. 02764 M01S02762.secart +++|* 02765 M01S02763.secart +++|* NOTES - FILE 6, WHICH IS INITIALLY READ TO OBTAIN OLD TRACE 02766 M01S02764.secart +++|* TABLE DATA, WILL SUBSEQUENTLY BE WRITTEN WITH THE 02767 M01S02765.secart +++|* NEW DATA PRODUCED IN THE CURRENT *SECART* RUN. THUS 02768 M01S02766.secart +++|* IT MUST BE A READ/WRITE FILE AND, IF PREVIOUS DATA 02769 M01S02767.secart +++|* IS TO BE PRESERVED, SHOULD BE AN EXPENDABLE COPY. 02770 M01S02768.secart +++| 02771 M01S02769.secart +++| L=1 02772 M01S02770.secart +++| ERR=.FALSE. 02773 M01S02771.secart +++| 02774 M01S02772.secart +++| 60 READ (6,62,END=69) MK(L),JN(L),JS(L),JC(L),TS(L),TE(L) 02775 M01S02773.secart +++| . ,ML(1,L),ML(2,L),FN(L),UN(L),TN(L) 02776 M01S02774.secart +++| MK(L)=' ' 02777 M01S02775.secart +++| DSU=JS(L)(1:1) 02778 M01S02776.secart +++| IF ((L.GT.1).AND.JS(L).LE.JS(L-1)) ERR=.TRUE. 02779 M01S02777.secart +++| CALL PICKUJN(JN(L),MK(L)) 02780 M01S02778.secart +++| CALL PICKJSN(JS(L),MK(L)) 02781 M01S02779.secart +++| CALL PICKUSR(FN(L),UN(L),MK(L)) 02782 M01S02780.secart +++| CALL PICKTRM(TN(L),MK(L)) 02783 M01S02781.secart +++| NJ=L 02784 M01S02782.secart +++| L=L+1 02785 M01S02783.secart +++| GOTO 60 02786 M01S02784.secart +++| 02787 M01S02785.secart +++| 69 IF (ERR) CALL REMARK(' *** TRACE TABLE SEQUENCE ERROR(S).') 02788 M01S02786.secart +++| RETURN 02789 M01S02787.secart +++| 02790 M01S02788.secart +++| 02791 M01S02789.secart +++|** ENTRY - CALL JSNTRAK(JSN,JCL,DTG,N,LOG) 02792 M01S02790.secart +++|* *JSN* IS JSN FIELD FROM LOG MESSAGE. 02793 M01S02791.secart +++|* *JCL* IS JOB CLASS CODE FROM LOG MESSAGE. 02794 M01S02792.secart +++|* *DTG* IS DATE/TIME FOR MESSAGE. 02795 M01S02793.secart +++|* *LOG* IS SOURCE LOG INDEX (1=DAYFILE, 2=ACCOUNT). 02796 M01S02794.secart +++|* 02797 M01S02795.secart +++|* EXIT - *N* WILL BE SET TO INDEX OF JOB IN TRACE TABLE. 02798 M01S02796.secart +++|* 02799 M01S02797.secart +++|* ERROR - JOB DAYFILE MESSAGES: 02800 M01S02798.secart +++|* *** TRACE TABLE FULL *** 02801 M01S02799.secart +++|* STOP *** SECART TERMINATED. 02802 M01S02800.secart +++|* 02803 M01S02801.secart +++|* USES - COMMON /TRC/ FOR TRACE TABLE STRING DATA. 02804 M01S02802.secart +++|* COMMON /CTL/ FOR TRACE TABLE NUMERIC DATA. 02805 M01S02803.secart +++|* 02806 M01S02804.secart +++|* CALLS - *PICKJSN* FOR NEW JSN SELECTION TEST. 02807 M01S02805.secart +++|* 02808 M01S02806.secart +++|* NOTES - BOTH *JSNTRAK* AND *JSNLOOK* USE SAME BINARY SEARCH 02809 M01S02807.secart +++|* CODE TO FIND JSN MATCH AND REMEMBER INDEX OF LAST 02810 M01S02808.secart +++|* MATCH TO ALLOW SHORTCUT FOR CONSECUTIVE MESSAGES BY 02811 M01S02809.secart +++|* SAME JOB WHICH OCCURS ABOUT 2 OUT OF 3 TIMES. 02812 M01S02810.secart +++| 02813 M01S02811.secart +++| ENTRY JSNTRAK(JSN,JCL,DTG,N,LOG) 02814 M01S02812.secart +++| 02815 M01S02813.secart +++| LOOK=.FALSE. 02816 M01S02814.secart +++| GOTO 100 02817 M01S02815.secart +++| 02818 M01S02816.secart +++| 02819 M01S02817.secart +++|** ENTRY - CALL JSNLOOK(JSN,N) 02820 M01S02818.secart +++|* *JSN* IS JSN FIELD FROM LOG MESSAGE. 02821 M01S02819.secart +++|* 02822 M01S02820.secart +++|* EXIT - *N* WILL BE SET TO TRACE TABLE JOB INDEX. 02823 M01S02821.secart +++|* 02824 M01S02822.secart +++|* ERROR - NONE. 02825 M01S02823.secart +++|* 02826 M01S02824.secart +++|* USES - COMMON /TRC/ FOR TRACE TABLE STRING DATA. 02827 M01S02825.secart +++|* COMMON /CTL/ FOR TRACE TABLE NUMERIC DATA. 02828 M01S02826.secart +++|* 02829 M01S02827.secart +++|* CALLS - *PICKJSN* FOR NEW JSN SELECTION TEST. 02830 M01S02828.secart +++|* 02831 M01S02829.secart +++|* NOTES - BOTH *JSNLOOK* AND *JSNTRAK* USE SAME BINARY SEARCH 02832 M01S02830.secart +++|* CODE TO FIND JSN MATCH AND REMEMBER INDEX OF LAST 02833 M01S02831.secart +++|* MATCH TO ALLOW SHORTCUT FOR CONSECUTIVE MESSAGES BY 02834 M01S02832.secart +++|* SAME JOB WHICH OCCURS ABOUT 2 OUT OF 3 TIMES. 02835 M01S02833.secart +++| 02836 M01S02834.secart +++| ENTRY JSNLOOK(JSN,N) 02837 M01S02835.secart +++| 02838 M01S02836.secart +++| LOOK=.TRUE. 02839 M01S02837.secart +++| GOTO 100 02840 M01S02838.secart +++| 02841 M01S02839.secart +++|* SHORTCUT FOR REDUNDANT JSN SAME AS LAST CALL [2/3 TIMES]. 02842 M01S02840.secart +++| 02843 M01S02841.secart +++| 100 IF (JSN.EQ.JS(LST)) THEN 02844 M01S02842.secart +++| N=LST 02845 M01S02843.secart +++| GOTO 120 02846 M01S02844.secart +++| ENDIF 02847 M01S02845.secart +++| 02848 M01S02846.secart +++|* BINARY SEARCH FOR MATCH W/ UNIQUE JSN. 02849 M01S02847.secart +++| 02850 M01S02848.secart +++| L=1 02851 M01S02849.secart +++| H=NJ 02852 M01S02850.secart +++| 02853 M01S02851.secart +++| 105 IF (L.LE.H) THEN 02854 M01S02852.secart +++| N=(L+H)/2 02855 M01S02853.secart +++| IF (JSN.LT.JS(N)) THEN 02856 M01S02854.secart +++| H=N-1 02857 M01S02855.secart +++| ELSE IF (JSN.GT.JS(N)) THEN 02858 M01S02856.secart +++| L=N+1 02859 M01S02857.secart +++| ELSE 02860 M01S02858.secart +++| IF (LOOK) RETURN 02861 M01S02859.secart +++| GOTO 120 02862 M01S02860.secart +++| ENDIF 02863 M01S02861.secart +++| GOTO 105 02864 M01S02862.secart +++| ENDIF 02865 M01S02863.secart +++| 02866 M01S02864.secart +++| IF (LOOK) THEN 02867 M01S02865.secart +++| N=0 02868 M01S02866.secart +++| RETURN 02869 M01S02867.secart +++| ELSE 02870 M01S02868.secart +++| N=L 02871 M01S02869.secart +++| ENDIF 02872 M01S02870.secart +++| 02873 M01S02871.secart +++|* CREATE NEW ROW IN TABLE. 02874 M01S02872.secart +++| 02875 M01S02873.secart +++| 110 IF (NJ.GE.MXJ) GOTO 190 02876 M01S02874.secart +++| NJ=NJ+1 02877 M01S02875.secart +++| IF (N.EQ.NJ) GOTO 113 02878 M01S02876.secart +++| 02879 M01S02877.secart +++|* OPEN UP ROW IN TABLE. 02880 M01S02878.secart +++| 02881 M01S02879.secart +++| DO 112 L=NJ,N,-1 02882 M01S02880.secart +++| MK(L)=MK(L-1) 02883 M01S02881.secart +++| JN(L)=JN(L-1) 02884 M01S02882.secart +++| JS(L)=JS(L-1) 02885 M01S02883.secart +++| JC(L)=JC(L-1) 02886 M01S02884.secart +++| TS(L)=TS(L-1) 02887 M01S02885.secart +++| TE(L)=TE(L-1) 02888 M01S02886.secart +++| ML(1,L)=ML(1,L-1) 02889 M01S02887.secart +++| ML(2,L)=ML(2,L-1) 02890 M01S02888.secart +++| FN(L)=FN(L-1) 02891 M01S02889.secart +++| UN(L)=UN(L-1) 02892 M01S02890.secart +++| TN(L)=TN(L-1) 02893 M01S02891.secart +++| 112 CONTINUE 02894 M01S02892.secart +++| 02895 M01S02893.secart +++|* INITIALIZE NEW TABLE ROW. 02896 M01S02894.secart +++| 02897 M01S02895.secart +++| 113 MK(N)=' ' 02898 M01S02896.secart +++| JN(N)=' ' 02899 M01S02897.secart +++| JS(N)=JSN 02900 M01S02898.secart +++| JC(N)=JCL 02901 M01S02899.secart +++| TS(N)=DTG 02902 M01S02900.secart +++| ML(1,N)=0 02903 M01S02901.secart +++| ML(2,N)=0 02904 M01S02902.secart +++| FN(N)=' ' 02905 M01S02903.secart +++| UN(N)=' ' 02906 M01S02904.secart +++| TN(N)=' ' 02907 M01S02905.secart +++| CALL PICKJSN(JSN,MK(N)) 02908 M01S02906.secart +++| 02909 M01S02907.secart +++|* UPDATE DATE/TIME GROUP AND MESSAGE COUNT/LOG. 02910 M01S02908.secart +++| 02911 M01S02909.secart +++| 120 TE(N)=DTG 02912 M01S02910.secart +++| ML(LOG,N)=ML(LOG,N)+1 02913 M01S02911.secart +++| LST=N 02914 M01S02912.secart +++| RETURN 02915 M01S02913.secart +++| 02916 M01S02914.secart +++|* JSN TRACE TABLE OVERFLOW. 02917 M01S02915.secart +++| 02918 M01S02916.secart +++| 190 CALL REMARK(' *** TRACE TABLE FULL ***') 02919 M01S02917.secart +++| STOP ' *** SECART TERMINATED.' 02920 M01S02918.secart +++| 02921 M01S02919.secart +++| 02922 M01S02920.secart +++|** ENTRY - CALL JSNLVL0 [NO ARGUMENTS]. 02923 M01S02921.secart +++|* MAINTAINS DEADSTART UNIQUE CODE FOR JSN PREFIX. 02924 M01S02922.secart +++|* 02925 M01S02923.secart +++|* EXIT - DSU IN /TRC/ "INCREMENTED" TO NEXT LETTER UNLESS 02926 M01S02924.secart +++|* REDUNDANT CALL. 02927 M01S02925.secart +++|* 02928 M01S02926.secart +++|* ERROR - NONE. 02929 M01S02927.secart +++|* 02930 M01S02928.secart +++|* USES - COMMON /TRC/ FOR TRACE TABLE STRING DATA. 02931 M01S02929.secart +++|* COMMON /CTL/ FOR TRACE TABLE NUMERIC DATA. 02932 M01S02930.secart +++|* 02933 M01S02931.secart +++|* CALLS - NONE. 02934 M01S02932.secart +++|* 02935 M01S02933.secart +++|* NOTES - THIS CODE ALLOWS FOR REDUNDANT CALLS TRIGGERED BY 02936 M01S02934.secart +++|* MULTIPLE MESSAGES RELATING TO THE SAME DEADSTART 02937 M01S02935.secart +++|* EVENT. CHECKS FOR AT LEAST 2 JSN-S WITH SAME PREFIX. 02938 M01S02936.secart +++| 02939 M01S02937.secart +++| ENTRY JSNLVL0 02940 M01S02938.secart +++| 02941 M01S02939.secart +++|* ALLOW FOR MULTIPLE DFL & ACL MSGS ON DEADSTART. 02942 M01S02940.secart +++| 02943 M01S02941.secart +++| IF (NJ.LE.2) RETURN 02944 M01S02942.secart +++| IF (JS(NJ-2)(1:1).NE.DSU) RETURN 02945 M01S02943.secart +++| DSU=CHAR(ICHAR(DSU)+1) 02946 M01S02944.secart +++| WRITE (8,11) DSU 02947 M01S02945.secart +++| 11 FORMAT(/'0 ========= L E V E L 0 D / S ( ',A1, 02948 M01S02946.secart +++| . ' ) =========') 02949 M01S02947.secart +++| RETURN 02950 M01S02948.secart +++| 02951 M01S02949.secart +++| 02952 M01S02950.secart +++|** ENTRY - CALL JSNLIST(LFN) 02953 M01S02951.secart +++|* *LFN* CONTAINS LFN OF FILE TO WRITE UNSORTED TRACE 02954 M01S02952.secart +++|* TABLE DATA. 02955 M01S02953.secart +++|* 02956 M01S02954.secart +++|* EXIT - FILE 8 WILL CONTAIN TRACE TABLE PRINTOUT, OPTIONALLY 02957 M01S02955.secart +++|* SORTED PER DIRECTIVE. 02958 M01S02956.secart +++|* 02959 M01S02957.secart +++|* ERROR - NONE. 02960 M01S02958.secart +++|* 02961 M01S02959.secart +++|* USES - COMMON /TRC/ FOR TRACE TABLE STRING DATA. 02962 M01S02960.secart +++|* COMMON /CTL/ FOR TRACE TABLE NUMERIC DATA. 02963 M01S02961.secart +++|* COMMON /SYS/ FOR PRINTOUT HEADER TEXT. 02964 M01S02962.secart +++|* COMMON /ACL/ FOR ACCOUNT LOG IDENTIFICATION. 02965 M01S02963.secart +++|* COMMON /DFL/ FOR DAYFILE LOG IDENTIFICATION. 02966 M01S02964.secart +++|* COMMON /SRT/ FOR TRACE TABLE SORT KEYS. 02967 M01S02965.secart +++|* 02968 M01S02966.secart +++|* CALLS - *SM5SORT* ET AL FOR SORT PROCESSING. 02969 M01S02967.secart +++|* 02970 M01S02968.secart +++|* NOTES - THIS ROUTINE WRITES TRACE TABLE DATA ONTO FILE 6, 02971 M01S02969.secart +++|* CALLS SORT/MERGE TO SORT ONTO *TAPE9*, READS DATA 02972 M01S02970.secart +++|* FROM *TAPE9* AND PRINTS TO FILE 8 WITH HEADER TEXT, 02973 M01S02971.secart +++|* PAGINATION, AND SUMMARY DATA. IF NO SORT KEYS ARE 02974 M01S02972.secart +++|* SPECIFIED, THE SORT IS BYPASSED AND FILE 6 IS USED 02975 M01S02973.secart +++|* AS INPUT FOR THE PRINTOUT. 02976 M01S02974.secart +++| 02977 M01S02975.secart +++| ENTRY JSNLIST(LFN) 02978 M01S02976.secart +++| 02979 M01S02977.secart +++| IF (NJ.LE.1) RETURN 02980 M01S02978.secart +++| 02981 M01S02979.secart +++|* OUTPUT JSN TRACE TABLE FILE & COUNT SELECTIONS. 02982 M01S02980.secart +++| 02983 M01S02981.secart +++| NS=0 02984 M01S02982.secart +++| DO 605 I=1,NJ 02985 M01S02983.secart +++| WRITE (6,62) MK(I),JN(I),JS(I),JC(I),TS(I),TE(I) 02986 M01S02984.secart +++| . ,ML(1,I),ML(2,I),FN(I),UN(I),TN(I) 02987 M01S02985.secart +++| 62 FORMAT(1X,A5,1X,A7,1X,A6,1X,A1,2A20,2I5,3A8) 02988 M01S02986.secart +++| IF (MK(I).NE.' ') NS=NS+1 02989 M01S02987.secart +++| 605 CONTINUE 02990 M01S02988.secart +++| LF=6 02991 M01S02989.secart +++| 02992 M01S02990.secart +++|* SORT JSN TRACE TABLE FILE, IF DIRECTED. 02993 M01S02991.secart +++| 02994 M01S02992.secart +++| IF (SKY(1).EQ.' ') GOTO 900 02995 M01S02993.secart +++| CALL SM5SORT(0) 02996 M01S02994.secart +++| CALL SM5ENR(NJ) 02997 M01S02995.secart +++| CALL SM5FROM(LFN) 02998 M01S02996.secart +++| CALL SM5TO('TAPE9') 02999 M01S02997.secart +++| DO 850 I=1,12 03000 M01S02998.secart +++| 03001 M01S02999.secart +++|* PICKS 2, 5 NOT SORT KEY. 03002 M01S03000.secart +++| 03003 M01S03001.secart +++| IF (SKY(I).EQ.'UJN') CALL SM5KEY( 8, 7,'DISPLAY','A') 03004 M01S03002.secart +++| IF (SKY(I).EQ.'JSN') CALL SM5KEY(16, 6,'DISPLAY','A') 03005 M01S03003.secart +++| IF (SKY(I).EQ.'JC' ) CALL SM5KEY(23, 1,'DISPLAY','A') 03006 M01S03004.secart +++| IF (SKY(I).EQ.'SDT') CALL SM5KEY(24,20,'DISPLAY','A') 03007 M01S03005.secart +++| IF (SKY(I).EQ.'EDT') CALL SM5KEY(44,20,'DISPLAY','A') 03008 M01S03006.secart +++| 03009 M01S03007.secart +++|* MSG COUNTS 64,10 NOT SORT KEYS. 03010 M01S03008.secart +++| 03011 M01S03009.secart +++| IF (SKY(I).EQ.'FM' ) CALL SM5KEY(74, 7,'DISPLAY','A') 03012 M01S03010.secart +++| IF (SKY(I).EQ.'UN' ) CALL SM5KEY(82, 7,'DISPLAY','A') 03013 M01S03011.secart +++| IF (SKY(I).EQ.'TRM') CALL SM5KEY(90, 7,'DISPLAY','A') 03014 M01S03012.secart +++| 850 CONTINUE 03015 M01S03013.secart +++| CALL SM5END 03016 M01S03014.secart +++| LF=9 03017 M01S03015.secart +++| 03018 M01S03016.secart +++|* PRINTOUT (SORTED) JSN TRACE TABLE. 03019 M01S03017.secart +++| 03020 M01S03018.secart +++| 900 REWIND LF 03021 M01S03019.secart +++| HDR='J S N T R A C E T A B L E' 03022 M01S03020.secart +++| 03023 M01S03021.secart +++| 910 IPAGE=IPAGE+1 03024 M01S03022.secart +++| WRITE (8,1) HDR,PGM,RUNDT,RUNTM,IPAGE 03025 M01S03023.secart +++| 1 FORMAT('1',A40,3A10,' PG',I3) 03026 M01S03024.secart +++| L=59 03027 M01S03025.secart +++| IF (DFSYSID.NE.' ') THEN 03028 M01S03026.secart +++| WRITE (8,91) DFSYSID 03029 M01S03027.secart +++| L=L-1 03030 M01S03028.secart +++| ELSE IF (ACSYSID.NE.' ') THEN 03031 M01S03029.secart +++| WRITE (8,91) ACSYSID 03032 M01S03030.secart +++| L=L-1 03033 M01S03031.secart +++| ENDIF 03034 M01S03032.secart +++| 03035 M01S03033.secart +++| IF (DFSDTG.NE.' ') THEN 03036 M01S03034.secart +++| WRITE (8,92) 'DAYFILE',DFSDTG,DFEDTG 03037 M01S03035.secart +++| L=L-1 03038 M01S03036.secart +++| ENDIF 03039 M01S03037.secart +++| 03040 M01S03038.secart +++| IF (ACSDTG.NE.' ') THEN 03041 M01S03039.secart +++| WRITE (8,92) 'ACCOUNT',ACSDTG,ACEDTG 03042 M01S03040.secart +++| L=L-1 03043 M01S03041.secart +++| ENDIF 03044 M01S03042.secart +++| 03045 M01S03043.secart +++| IF (SKY(1).NE.' ') THEN 03046 M01S03044.secart +++| WRITE (8,93) SKY 03047 M01S03045.secart +++| L=L-1 03048 M01S03046.secart +++| ENDIF 03049 M01S03047.secart +++| 03050 M01S03048.secart +++| WRITE (8,94) 03051 M01S03049.secart +++| 91 FORMAT(' SYSTEM ID: ',A60) 03052 M01S03050.secart +++| 92 FORMAT(' ',A7, ' LOG ',A20,' THRU ',A20) 03053 M01S03051.secart +++| 93 FORMAT(' SORT KEYS=',12A4) 03054 M01S03052.secart +++| 94 FORMAT(' PICKS UJN---- --JSN-JC ' 03055 M01S03053.secart +++| . ,'SDT--------------- EDT---------------- DFL ACL ' 03056 M01S03054.secart +++| . ,'FM----- UN[/UI] TRM----') 03057 M01S03055.secart +++| 03058 M01S03056.secart +++|* COPY (SORTED) FILE TO PRINTOUT & COUNT FOR PAGINATION. 03059 M01S03057.secart +++| 03060 M01S03058.secart +++| 920 READ (LF,95,END=930) TXT 03061 M01S03059.secart +++| WRITE (8,95) TXT 03062 M01S03060.secart +++| 95 FORMAT(A100) 03063 M01S03061.secart +++| L=L-1 03064 M01S03062.secart +++| IF (L.GT.0) GOTO 920 03065 M01S03063.secart +++| GOTO 910 03066 M01S03064.secart +++| 03067 M01S03065.secart +++|* FOOTNOTE AND SUMMARY TO FINISH PRINTOUT. 03068 M01S03066.secart +++| 03069 M01S03067.secart +++| 930 WRITE (8,97) NJ,NS 03070 M01S03068.secart +++| 97 FORMAT(/' PICKS: N=UJN, J=JSN, U=USER, T=TERMINAL.' 03071 M01S03069.secart +++| . /I5,' TRACE TABLE ENTRIES'/I5,' SELECTED JSN-S') 03072 M01S03070.secart +++| RETURN 03073 M01S03071.secart +++| END 03074 M01S03072.secart +++| 03075 M01S03073.secart +++|* --------------------------------------------------------------------- 03076 M01S03074.secart +++| SUBROUTINE AMSLOAD 03077 M01S03075.secart +++|** AMSLOAD - ACCOUNT LOG MESSAGE ID MANAGER. 03078 M01S03076.secart +++|* 03079 M01S03077.secart +++|* THIS PROGRAM UNIT HANDLES ALL ASPECTS OF ACCOUNT LOG MSG ID 03080 M01S03078.secart +++|* PROCESSING INCLUDING: TABLE INITIALIZATION VIA REFERENCE FILE, 03081 M01S03079.secart +++|* MARKING AND SELECTION FOR PRINTOUT, AND COLLECTION AND 03082 M01S03080.secart +++|* PRINTOUT OF USAGE STATISTICS. MULTIPLE ENTRY POINTS ARE 03083 M01S03081.secart +++|* PROVIDED FOR THESE FUNCTIONS. 03084 M01S03082.secart +++| 03085 M01S03083.secart +++| IMPLICIT INTEGER(A-Z) 03086 M01S03084.secart +++| 03087 M01S03085.secart +++| PARAMETER (MXI=200) 03088 M01S03086.secart +++|* MAX NUMBER OF MSG ID-S. 03089 M01S03087.secart +++| 03090 M01S03088.secart +++| CHARACTER*15 CL(MXI) 03091 M01S03089.secart +++|* JOB CLASS USAGE STRING FOR PRINTOUT. 03092 M01S03090.secart +++| 03093 M01S03091.secart +++| LOGICAL ERR 03094 M01S03092.secart +++|* FLAG FOR MSG ID SEQUENCE ERROR(S). 03095 M01S03093.secart +++| 03096 M01S03094.secart +++| CHARACTER*1 FLAG 03097 M01S03095.secart +++|* ARG - CHARACTER TO FLAG MSG ID FOR PRINT. 03098 M01S03096.secart +++| 03099 M01S03097.secart +++| INTEGER H 03100 M01S03098.secart +++|* TEMP - HIGH POINTER IN BINARY SEARCH. 03101 M01S03099.secart +++| 03102 M01S03100.secart +++| CHARACTER*40 HDR 03103 M01S03101.secart +++|* /SYS/ PRINTOUT HEADER TEXT. 03104 M01S03102.secart +++| 03105 M01S03103.secart +++| LOGICAL HIT 03106 M01S03104.secart +++|* ARG - FLAG RETURNED FOR MSG PRINTOUT. 03107 M01S03105.secart +++| 03108 M01S03106.secart +++| INTEGER HITS 03109 M01S03107.secart +++|* COUNT OF MSGS SELECTED FOR PRINTOUT. 03110 M01S03108.secart +++| 03111 M01S03109.secart +++| CHARACTER*4 ID(MXI) 03112 M01S03110.secart +++|* ACCOUNT MESSAGE IDENTIFIERS. 03113 M01S03111.secart +++| 03114 M01S03112.secart +++| INTEGER IPAGE 03115 M01S03113.secart +++|* LOCAL PAGINATION COUNTER. 03116 M01S03114.secart +++| 03117 M01S03115.secart +++| CHARACTER*1 JCL 03118 M01S03116.secart +++|* ARG - JOB CLASS CODE. 03119 M01S03117.secart +++| 03120 M01S03118.secart +++| CHARACTER*20 JCLASS 03121 M01S03119.secart +++|* CONSTANT - STRING OF JOB CLASS CODES. 03122 M01S03120.secart +++| 03123 M01S03121.secart +++| INTEGER L 03124 M01S03122.secart +++|* TEMP - LOW POINTER IN BINARY SEARCH. 03125 M01S03123.secart +++| 03126 M01S03124.secart +++| INTEGER MC(MXI) 03127 M01S03125.secart +++|* OCCURRENCE COUNTERS FOR MSG ID-S. 03128 M01S03126.secart +++| 03129 M01S03127.secart +++| CHARACTER*4 MID 03130 M01S03128.secart +++|* ARG - MESSAGE IDENTIFIER. 03131 M01S03129.secart +++| 03132 M01S03130.secart +++| CHARACTER*1 MK(MXI) 03133 M01S03131.secart +++|* MSG ID SELECTION MARKS. 03134 M01S03132.secart +++| 03135 M01S03133.secart +++| INTEGER MODE 03136 M01S03134.secart +++|* LOAD/MARK/TEST MODE SWITCH. 03137 M01S03135.secart +++| 03138 M01S03136.secart +++| INTEGER N 03139 M01S03137.secart +++|* TEMP - INDEX VARIABLE. 03140 M01S03138.secart +++| 03141 M01S03139.secart +++| INTEGER NI 03142 M01S03140.secart +++|* NUMBER OF MSG ID-S STORED IN TABLE. 03143 M01S03141.secart +++| 03144 M01S03142.secart +++| CHARACTER*10 PGM 03145 M01S03143.secart +++|* /SYS/ *SECART* VERSION ID FOR PRINTOUTS. 03146 M01S03144.secart +++| 03147 M01S03145.secart +++| INTEGER PICKED 03148 M01S03146.secart +++|* COUNT OF MSG ID-S PICKED FOR PRINTOUT. 03149 M01S03147.secart +++| 03150 M01S03148.secart +++| CHARACTER*10 RUNDT 03151 M01S03149.secart +++|* /SYS/ *SECART* RUN DATE FOR PRINTOUTS. 03152 M01S03150.secart +++| 03153 M01S03151.secart +++| CHARACTER*10 RUNTM 03154 M01S03152.secart +++|* /SYS/ *SECART* RUN TIME FOR PRINTOUTS. 03155 M01S03153.secart +++| 03156 M01S03154.secart +++| INTEGER TOTAL 03157 M01S03155.secart +++|* COUNT OF ALL ACCOUNT MSG ID-S. 03158 M01S03156.secart +++| 03159 M01S03157.secart +++| CHARACTER*40 TX(MXI) 03160 M01S03158.secart +++|* DESCRIPTIONS FOR ACCOUNT MSG ID-S. 03161 M01S03159.secart +++| 03162 M01S03160.secart +++| 03163 M01S03161.secart +++|* GLOBAL STRING VARIABLES. 03164 M01S03162.secart +++| 03165 M01S03163.secart +++| COMMON /SYS/ HDR 03166 M01S03164.secart +++| COMMON /SYS/ PGM 03167 M01S03165.secart +++| COMMON /SYS/ RUNDT 03168 M01S03166.secart +++| COMMON /SYS/ RUNTM 03169 M01S03167.secart +++| 03170 M01S03168.secart +++| DATA JCLASS /'ABCDMNRSTX0123 '/ 03171 M01S03169.secart +++| 03172 M01S03170.secart +++| 03173 M01S03171.secart +++|** ENTRY - CALL AMSLOAD [NO ARGUMENTS]. 03174 M01S03172.secart +++|* LOADS MSG ID TABLE FROM FILE 5 AND CHECKS FOR 03175 M01S03173.secart +++|* SEQUENCE ERRORS. NON-BLANK MARK FIELDS MAY BE USED 03176 M01S03174.secart +++|* FOR DEFAULT SELECTION OF MSG ID-S. 03177 M01S03175.secart +++|* 03178 M01S03176.secart +++|* EXIT - PRINTOUT (FILE 8) MESSAGE: 03179 M01S03177.secart +++|* NNN ACCOUNT MSG ID-S LOADED. 03180 M01S03178.secart +++|* 03181 M01S03179.secart +++|* ERROR - JOB DAYFILE MESSAGE: 03182 M01S03180.secart +++|* *** MSGID SEQUENCE ERROR(S). 03183 M01S03181.secart +++|* 03184 M01S03182.secart +++|* CALLS - NONE. 03185 M01S03183.secart +++| 03186 M01S03184.secart +++| NI=0 03187 M01S03185.secart +++| ERR=.FALSE. 03188 M01S03186.secart +++| 50 READ (5,51,END=59) ID(NI+1),MK(NI+1),TX(NI+1) 03189 M01S03187.secart +++| 51 FORMAT(1X,A4,A1,A40) 03190 M01S03188.secart +++| NI=NI+1 03191 M01S03189.secart +++| MC(NI)=0 03192 M01S03190.secart +++| CL(NI)='...............' 03193 M01S03191.secart +++| IF (NI.LT.2) GOTO 50 03194 M01S03192.secart +++| IF (ID(NI).LE.ID(NI-1)) ERR=.TRUE. 03195 M01S03193.secart +++| IF (NI.LT.MXI) GOTO 50 03196 M01S03194.secart +++| GOTO 190 03197 M01S03195.secart +++| 03198 M01S03196.secart +++| 59 IF (ERR) CALL REMARK(' *** MSGID SEQUENCE ERROR(S).') 03199 M01S03197.secart +++| WRITE (8,*) NI,' ACCOUNT MSG ID-S LOADED.' 03200 M01S03198.secart +++| RETURN 03201 M01S03199.secart +++| 03202 M01S03200.secart +++| 03203 M01S03201.secart +++|** ENTRY - CALL AMSMARK(MID,FLAG) 03204 M01S03202.secart +++|* *MID* CONTAINS MSG ID TO BE MARKED FOR PRINTOUT. 03205 M01S03203.secart +++|* WILL ADD TO TABLE IF NOT FOUND. 03206 M01S03204.secart +++|* *FLAG* CONTAINS SINGLE FLAG CHARACTER: 03207 M01S03205.secart +++|* NON-BLANK TRIGGERS PRINTOUT ON OCCURRENCE. 03208 M01S03206.secart +++|* BLANK SUPPRESSES PRINTOUT (OVERRIDE DEFAULT). 03209 M01S03207.secart +++|* 03210 M01S03208.secart +++|* EXIT - NO CHANGE TO INPUT ARGUMENTS. 03211 M01S03209.secart +++|* 03212 M01S03210.secart +++|* ERROR - JOB DAYFILE MESSAGE: 03213 M01S03211.secart +++|* *** MSGID TABLE FULL *** 03214 M01S03212.secart +++|* STOP *** SECART TERMINATED. 03215 M01S03213.secart +++|* 03216 M01S03214.secart +++|* CALLS - NONE. 03217 M01S03215.secart +++| 03218 M01S03216.secart +++| ENTRY AMSMARK(MID,FLAG) 03219 M01S03217.secart +++| MODE=2 03220 M01S03218.secart +++| GOTO 100 03221 M01S03219.secart +++| 03222 M01S03220.secart +++| 03223 M01S03221.secart +++|** ENTRY - CALL AMSTEST(MID,JCL,HIT) 03224 M01S03222.secart +++|* *MID* CONTAINS MSG ID TO TEST FOR SELECTION AND 03225 M01S03223.secart +++|* RECORD USAGE STATISTICS. UNKNOWN ID-S WILL BE 03226 M01S03224.secart +++|* AUTOMATICALLY ADDED TO TABLE W/O DEFINITION. 03227 M01S03225.secart +++|* *JCL* CONTAINS 1-CHAR JOB CLASS OF SUBJECT JOB. 03228 M01S03226.secart +++|* *HIT* LOGICAL FLAG SET TO INDICATE SELECTION. 03229 M01S03227.secart +++|* 03230 M01S03228.secart +++|* EXIT - *HIT* .TRUE. IF MSG ID MARK FIELD IS NON-BLANK. 03231 M01S03229.secart +++|* *HIT* .FALSE. IF MSG ID MARK FIELD IS BLANK. 03232 M01S03230.secart +++|* 03233 M01S03231.secart +++|* ERROR - JOB DAYFILE MESSAGE: 03234 M01S03232.secart +++|* *** MSGID TABLE FULL *** 03235 M01S03233.secart +++|* STOP *** SECART TERMINATED. 03236 M01S03234.secart +++|* 03237 M01S03235.secart +++|* CALLS - NONE. 03238 M01S03236.secart +++| 03239 M01S03237.secart +++| ENTRY AMSTEST(MID,JCL,HIT) 03240 M01S03238.secart +++| MODE=3 03241 M01S03239.secart +++| 03242 M01S03240.secart +++|* SAFETY CHECK FOR EMPTY TABLE. 03243 M01S03241.secart +++| 03244 M01S03242.secart +++| 100 IF (NI.EQ.0) THEN 03245 M01S03243.secart +++| N=NI+1 03246 M01S03244.secart +++| GOTO 130 03247 M01S03245.secart +++| ENDIF 03248 M01S03246.secart +++| 03249 M01S03247.secart +++|* BINARY SEARCH FOR MATCH/INSERT POINT. 03250 M01S03248.secart +++| 03251 M01S03249.secart +++| L=1 03252 M01S03250.secart +++| H=NI 03253 M01S03251.secart +++| 110 N=(L+H)/2 03254 M01S03252.secart +++| IF (MID.GT.ID(N)) THEN 03255 M01S03253.secart +++| L=N+1 03256 M01S03254.secart +++| ELSE IF (MID.LT.ID(N)) THEN 03257 M01S03255.secart +++| H=N-1 03258 M01S03256.secart +++| ELSE 03259 M01S03257.secart +++| GOTO 140 03260 M01S03258.secart +++| ENDIF 03261 M01S03259.secart +++| 03262 M01S03260.secart +++| IF (L.LE.H) GOTO 110 03263 M01S03261.secart +++| N=L 03264 M01S03262.secart +++| 03265 M01S03263.secart +++|* INSERT ID IN ALPHABETIC SEQUENCE. 03266 M01S03264.secart +++| 03267 M01S03265.secart +++| IF (NI.GE.MXI) GOTO 190 03268 M01S03266.secart +++| NI=NI+1 03269 M01S03267.secart +++| IF (N.EQ.NI) GOTO 130 03270 M01S03268.secart +++| 03271 M01S03269.secart +++|* OPEN UP ROW IN TABLE. 03272 M01S03270.secart +++| 03273 M01S03271.secart +++| DO 125 L=NI,N,-1 03274 M01S03272.secart +++| ID(L)=ID(L-1) 03275 M01S03273.secart +++| CL(L)=CL(L-1) 03276 M01S03274.secart +++| MC(L)=MC(L-1) 03277 M01S03275.secart +++| MK(L)=MK(L-1) 03278 M01S03276.secart +++| TX(L)=TX(L-1) 03279 M01S03277.secart +++| 125 CONTINUE 03280 M01S03278.secart +++| GOTO 135 03281 M01S03279.secart +++| 03282 M01S03280.secart +++|* ADD NEW ID ONTO BOTTOM. 03283 M01S03281.secart +++| 03284 M01S03282.secart +++| 130 IF (NI.GE.MXI) GOTO 190 03285 M01S03283.secart +++| NI=N 03286 M01S03284.secart +++| 03287 M01S03285.secart +++|* CREATE NEW ENTRY. 03288 M01S03286.secart +++| 03289 M01S03287.secart +++| 135 ID(N)=MID 03290 M01S03288.secart +++| CL(N)='...............' 03291 M01S03289.secart +++| MC(N)=0 03292 M01S03290.secart +++| MK(N)=' ' 03293 M01S03291.secart +++| TX(N)=' ' 03294 M01S03292.secart +++| 03295 M01S03293.secart +++|* MARK MSG ID FOR PRINTOUT. 03296 M01S03294.secart +++| 03297 M01S03295.secart +++| 140 IF (MODE.EQ.2) THEN 03298 M01S03296.secart +++| MK(N)=FLAG 03299 M01S03297.secart +++| 03300 M01S03298.secart +++|* COUNT, RECORD JCL DIST, & TEST FOR FLAGGED MID. 03301 M01S03299.secart +++| 03302 M01S03300.secart +++| ELSE 03303 M01S03301.secart +++| MC(N)=MC(N)+1 03304 M01S03302.secart +++| L=INDEX(JCLASS,JCL) 03305 M01S03303.secart +++| IF (L.GT.0) CL(N)(L:L)=JCL 03306 M01S03304.secart +++| IF (L.EQ.0) CL(N)(15:15)='?' 03307 M01S03305.secart +++| IF (MK(N).NE.' ') HIT=.TRUE. 03308 M01S03306.secart +++| ENDIF 03309 M01S03307.secart +++| RETURN 03310 M01S03308.secart +++| 03311 M01S03309.secart +++|* ERROR EXIT. 03312 M01S03310.secart +++| 03313 M01S03311.secart +++| 190 CALL REMARK(' *** MSGID TABLE FULL ***') 03314 M01S03312.secart +++| STOP ' *** SECART TERMINATED.' 03315 M01S03313.secart +++| 03316 M01S03314.secart +++| 03317 M01S03315.secart +++|** ENTRY - CALL AMSLIST [NO ARGUMENTS]. 03318 M01S03316.secart +++|* PRODUCES LISTING CONTAINING ALL PRE-DEFINED AND 03319 M01S03317.secart +++|* ENCOUNTERED ACCOUNT LOG MESSAGE ID-S WITH COUNT OF 03320 M01S03318.secart +++|* OCCURRENCES, USAGE BY JOB CLASS, PRINTOUT SELECTION 03321 M01S03319.secart +++|* FLAGS, AND DESCRIPTIONS. BLANK DESCRIPTION FIELD 03322 M01S03320.secart +++|* TYPICALLY INDICATES NO MATCHING ID IN REFERENCE FILE. 03323 M01S03321.secart +++|* 03324 M01S03322.secart +++|* EXIT - NORMAL RETURN ONLY. 03325 M01S03323.secart +++|* 03326 M01S03324.secart +++|* ERROR - NONE. 03327 M01S03325.secart +++|* 03328 M01S03326.secart +++|* USES - COMMON /SYS/ FOR PRINTOUT HEADER TEXT. 03329 M01S03327.secart +++|* 03330 M01S03328.secart +++|* CALLS - NONE. 03331 M01S03329.secart +++| 03332 M01S03330.secart +++| ENTRY AMSLIST 03333 M01S03331.secart +++| IPAGE=0 03334 M01S03332.secart +++| TOTAL=0 03335 M01S03333.secart +++| PICKED=0 03336 M01S03334.secart +++| HITS=0 03337 M01S03335.secart +++| N=0 03338 M01S03336.secart +++| 03339 M01S03337.secart +++| 150 IPAGE=IPAGE+1 03340 M01S03338.secart +++| HDR='A C C O U N T M E S S A G E I D - S' 03341 M01S03339.secart +++| WRITE (8,1) HDR,PGM,RUNDT,RUNTM,IPAGE 03342 M01S03340.secart +++| 1 FORMAT('1',A40,3A10,' PG',I3) 03343 M01S03341.secart +++| WRITE (8,15) 03344 M01S03342.secart +++| 15 FORMAT(' MSID COUNT JOB CLASSES S DESCRIPTION' 03345 M01S03343.secart +++| . /' ==== ====== =============== = =======================') 03346 M01S03344.secart +++| L=58 03347 M01S03345.secart +++| 160 N=N+1 03348 M01S03346.secart +++| IF (N.GT.NI) GOTO 170 03349 M01S03347.secart +++| WRITE (8,16) ID(N),MC(N),CL(N),MK(N),TX(N) 03350 M01S03348.secart +++| 16 FORMAT(1X,A4,I7,1X,A15,1X,A1,1X,A40) 03351 M01S03349.secart +++| TOTAL=TOTAL+MC(N) 03352 M01S03350.secart +++| IF (MK(N).NE.' ') THEN 03353 M01S03351.secart +++| PICKED=PICKED+1 03354 M01S03352.secart +++| HITS=HITS+MC(N) 03355 M01S03353.secart +++| ENDIF 03356 M01S03354.secart +++| L=L-1 03357 M01S03355.secart +++| IF (L)150,150,160 03358 M01S03356.secart +++| 03359 M01S03357.secart +++| 170 WRITE (8,17) TOTAL,NI,HITS,PICKED 03360 M01S03358.secart +++| 17 FORMAT(' ==========' 03361 M01S03359.secart +++| . /I12,' MESSAGES ',I3,' TYPES TOTAL' 03362 M01S03360.secart +++| . /I12,' FOUND OF ',I3,' TYPES SELECTED') 03363 M01S03361.secart +++| RETURN 03364 M01S03362.secart +++| END 03365 M01S03363.secart +++| 03366 M01S03364.secart +++|* --------------------------------------------------------------------- 03367 M01S03365.secart +++| SUBROUTINE PARSE(TXT,IT,WORD) 03368 M01S03366.secart +++|** PARSE - SIMPLE TEXT STRING PARSER. 03369 M01S03367.secart +++|* 03370 M01S03368.secart +++|* *PARSE* SCANS STRING *TXT*, STARTING AT POSITION *IT*, 03371 M01S03369.secart +++|* EXTRACTING NON-BLANKS TO BUILD *WORD*, STOPS AT DELIMITER, 03372 M01S03370.secart +++|* AND SETS *IT* JUST PAST DELIMITER FOR NEXT TIME. 03373 M01S03371.secart +++|* 03374 M01S03372.secart +++|* ENTRY - CALL PARSE(TXT,IT,WORD) 03375 M01S03373.secart +++|* *TXT* CONTAINS TEXT STRING TO BE SCANNED. 03376 M01S03374.secart +++|* *IT* SPECIFIES STARTING POSITION (1-XX) IN *TXT* 03377 M01S03375.secart +++|* 03378 M01S03376.secart +++|* EXIT - *IT* WILL BE SET TO POSITION AFTER DELIMITER. 03379 M01S03377.secart +++|* *WORD* WILL BE CONTAIN WORD FOUND OR BLANKS. 03380 M01S03378.secart +++|* 03381 M01S03379.secart +++|* ERROR - NONE. 03382 M01S03380.secart +++|* 03383 M01S03381.secart +++|* COMMON - NONE. 03384 M01S03382.secart +++|* 03385 M01S03383.secart +++|* CALLS - NONE. 03386 M01S03384.secart +++|* 03387 M01S03385.secart +++|* NOTES - *PARSE* PRECHECKS LENGTH OF *TXT* STRING AND CHECKS 03388 M01S03386.secart +++|* FOR *IT* PAST EOL. RECOGNIZED DELIMITERS INCLUDE 03389 M01S03387.secart +++|* BOTH SEPARATORS AND TERMINATORS. THE FTN5 *INDEX* 03390 M01S03388.secart +++|* FUNCTION IS USED FOR FAST DELIMITER MATCHING. 03391 M01S03389.secart +++| 03392 M01S03390.secart +++| IMPLICIT INTEGER(A-Z) 03393 M01S03391.secart +++| 03394 M01S03392.secart +++| CHARACTER*25 DELIM 03395 M01S03393.secart +++|* CONSTANT - RECOGNIZED DELIMITERS. 03396 M01S03394.secart +++| 03397 M01S03395.secart +++| INTEGER IT 03398 M01S03396.secart +++|* ARGUMENT - START/FINISH STRING POSITION. 03399 M01S03397.secart +++| 03400 M01S03398.secart +++| CHARACTER*(*) TXT 03401 M01S03399.secart +++|* ARGUMENT - TEXT STRING TO SCAN. 03402 M01S03400.secart +++| 03403 M01S03401.secart +++| CHARACTER*(*) WORD 03404 M01S03402.secart +++|* ARGUMENT - RETURNED TEXT STRING. 03405 M01S03403.secart +++| 03406 M01S03404.secart +++| DATA DELIM /'$/.)(,=+-#[]%"_!&''?<>;;'/ 03407 M01S03405.secart +++| 03408 M01S03406.secart +++|* SIMPLE TEXT PARSER ROUTINE. 03409 M01S03407.secart +++| 03410 M01S03408.secart +++| L=LEN(TXT) 03411 M01S03409.secart +++| M=LEN(WORD) 03412 M01S03410.secart +++| WORD=' ' 03413 M01S03411.secart +++| J=0 03414 M01S03412.secart +++| 03415 M01S03413.secart +++|* PRE-CHECK FOR EOL. 03416 M01S03414.secart +++| 03417 M01S03415.secart +++| IF (IT.GT.L) RETURN 03418 M01S03416.secart +++| 03419 M01S03417.secart +++|* WATCH FOR DELIMITER. 03420 M01S03418.secart +++| 03421 M01S03419.secart +++| 100 IF (INDEX(DELIM,TXT(IT:IT)).EQ.0) THEN 03422 M01S03420.secart +++| 03423 M01S03421.secart +++|* EXTRACT NON-BLANKS AND CATENATE INTO *WORD*. 03424 M01S03422.secart +++| 03425 M01S03423.secart +++| IF (TXT(IT:IT).NE.' '.AND.J.LT.M) THEN 03426 M01S03424.secart +++| J=J+1 03427 M01S03425.secart +++| WORD(J:J)=TXT(IT:IT) 03428 M01S03426.secart +++| ENDIF 03429 M01S03427.secart +++| 03430 M01S03428.secart +++|* ADVANCE AND CHECK FOR EOL. 03431 M01S03429.secart +++| 03432 M01S03430.secart +++| IT=IT+1 03433 M01S03431.secart +++| IF (IT.LE.L) GOTO 100 03434 M01S03432.secart +++| RETURN 03435 M01S03433.secart +++| ELSE 03436 M01S03434.secart +++| 03437 M01S03435.secart +++|* FOUND DELIMITER. 03438 M01S03436.secart +++| 03439 M01S03437.secart +++| IT=IT+1 03440 M01S03438.secart +++| RETURN 03441 M01S03439.secart +++| ENDIF 03442 M01S03440.secart +++| END