Deck SECART Part 001

1 Modification

Listing Sections

Source

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