*                                                                       GRPH0001
* UTS MULTIPROGRAMMING DIAGRAM - V. HUBER                               GRPH0002
*                                                                       GRPH0003
*     ASSIGN F:1 TO :ACCTLG                                             GRPH0004
*     ASSIGN F:2 TO UTSPM RUNNING CPU DISPLAY ONLY                      GRPH0005
*     IT IS BEST TO DELETE :ACCTLG JUST PRIOR TO RUN                    GRPH0006
*                                                                       GRPH0007
*                                                                       GRPH0008
*     D A T A    S T R U C T U R E S                                    GRPH0009
*                                                                       GRPH0010
* DATA IS THE ARRAY THAT CONTAINS THE ONTIME,OFTIME                     GRPH0011
*     NAME AND NEXT INFORMATION.  THIS IS A LINKED LIST                 GRPH0012
*     EACH LIST OF WHICH REPRESENTS THE JOBS RUN IN ONE                 GRPH0013
*     PARTITION.  HEADS OF CHAINS ARE POINTED TO BY                     GRPH0014
*     THE VECTOR PART                                                   GRPH0015
* PART IS A VECTOR WHOSE ELEMENTS ARE SUBSCRIPTS INTO                   GRPH0016
*     THE DATA ARRAY.  IN EACH CASE, THE FIRST ELEMENT                  GRPH0017
*     IS THAT WHOSE START TIME IS THE LOWEST.  THIS IS                  GRPH0018
*     TRUE AT ALL TIMES, EVEN IN THE GRAPHING.  THIS IS                 GRPH0019
*     ACCOMPLISHED BY ADJUSTING THE CAHAINS TO POINT                    GRPH0020
*     AROUND THOSE JOBS IN EACH PARTITION WHOSE TIMES HAVE PASS         GRPH0021
*     ED.  BUT MORE ABOUT THIS LATER.                                   GRPH0022
* BUF IS AN VECTOR INTO WHICH THE ACCOUTING REC-                        GRPH0023
* PARTBUF IS A VECTOR THAT IS PRINTED ONCE EACK MINUTE.                 GRPH0025
*     ITS CONTENTS CAN BE EITHER BLANKS(NO JOB RUNNING                  GRPH0026
*     IN THAT PARTITION) OR A DOT  (JOB CURRENTLY EXECUTING)            GRPH0027
* GRAPH CHOOSES THOSE ITEMS TO BE GRAPHED FROM UTSPM DISPLAY            GRPH0028
* NAMES (WHICH INCLUDES SYMBOL) CONTAINS NAMES AND                      GRPH0029
*     ASSOCIATED SYMBOL OF UTSPM DISPLAY                                GRPH0030
* UTSPM IS A REAL VECTOR WHOSE ITH COMPONENT IS                         GRPH0031
*     THE ITH VALUE OF THE CURRENT UTSPM STATISTIC                      GRPH0032
*     AS DEFINED IN NAMES                                               GRPH0033
* TABS IS A VECTOR WHOSE ITH COMPONENT IS THE TAB VALUE                 GRPH0034
*     OF THE ITH COMPONENT OF UTSPM.  CONVERSION FROM REAL              GRPH0035
*     PERCENTAGE TO TAB VALUE IS PERFORMED BY SUBROUTINE                GRPH0036
*     CONVERT                                                           GRPH0037
* DATE IS A 2 COLUMN ARRAY USED TO CALCULATE JULIAN DATE                GRPH0038
*     FROM 'MONTH DAY'  AND VICE-VERSA.  VALUES ARE SET                 GRPH0039
*     BY DATA STATEMENT IN BURST.  LEAP YEAR IS RECOGNIZED.             GRPH0040
*  WAITSEL CHOOSES THOSE ITEMS WHICH ARE TO BE                          GRPH0041
*     ADDED TO DETERMINE TOTAL WAIT                                     GRPH0042
*                                                                       GRPH0043
*     S U B R O U T I N E S                                             GRPH0044
*                                                                       GRPH0045
*     BURST PRODUCES BURST SHEET FOR EACH JOB READ IN                   GRPH0046
*     SAME SUBROUTINE                                                   GRPH0048
*                                                                       GRPH0049
*     HEADING WRITES THE PAGE HEADER USED AT THE TOP                    GRPH0050
*     OF EACH PAGE DURING THE GRAPHING.                                 GRPH0051
*                                                                       GRPH0052
*     CONVERT FIGURES THE TAB VALUES FROM REAL PER-                     GRPH0053
*     CENTAGES PASSED TO IT AS ARGUMENTS                                GRPH0054
*                                                                       GRPH0055
*     PRINTOUT PRODUCES A QUICK SUMMARY OF THE JOBS RUN                 GRPH0056
*     IN EACH PARTITION.  USED ONLY FOR ERRORS AND DEBUGGING.           GRPH0057
*                                                                       GRPH0058
*     GETPM READS IN UTSPM DISPLAY AND CALCULATES TIME                  GRPH0059
*     INTERVAL.  TIME CROSSING MIDNIGHT IS HANDLED;                     GRPH0060
*     RECOGNIZED WHEN DAY OF DISPLAY IS GREATER THAN                    GRPH0061
*     EARLIEST DATE FROM ACCOUNTING LOG WHICH IS                        GRPH0062
*     RECORDED IN GLOBAL CELL 'DAY1'                                    GRPH0063
*                                                                       GRPH0064
*     SELECT SETS VALUES OF GRAPH VECTOR AS REQUESTED                   GRPH0065
*     BY THE USER.                                                      GRPH0066
*                                                                       GRPH0067
*                                                                       GRPH0068
*                                                                       GRPH0069
*                                                                       GRPH0071
*     A S S U M P T I O N S                                             GRPH0072
*                                                                       GRPH0073
*     NONE                                                              GRPH0074
*                                                                       GRPH0075
*                                                                       GRPH0076
*                                                                       GRPH0077
*                                                                       GRPH0078
      IMPLICIT INTEGER(A-Z)                                             GRPH0079
      REAL TOTWAIT,UTSPM,TUTSPM,AUTSPM,TOTIME,AVGWAIT,ELAPTIME          GRPH0080
      LOGICAL FIRSTIME,GRAPH,WAITSEL,STILLON                            GRPH0081
      LOGICAL PRINT2                                                    GRPH0082
      LOGICAL NONUM                                                     GRPH0083
*                                                                       GRPH0084
      DIMENSION NAMES(10,4),SYMBOL(10)                                  GRPH0085
      DIMENSION UTSPM(9),TUTSPM(9),TABS(10),AUTSPM(9)                   GRPH0086
      DIMENSION GRAPH(9),DATE(16),WAITSEL(9)                            GRPH0087
      DIMENSION DATA(4,3)                                               GRPH0088
      DIMENSION PART(16),STILLON(16),LASTJOB(16)                        GRPH0089
      INTEGER MINSEC(4)                                                 GRPH0090
      DIMENSION PARTBUF(16),ANSBUF(72)                                  GRPH0091
      DIMENSION BUFF(0:40)                                              GRPH0092
*                                                                       GRPH0094
      DATA PATCH/20*0/                                                  GRPH0095
      DATA TABS,SECFLAG/10*140,1/                                       GRPH0096
      DATA LPPAGE/30/                                                   GRPH0097
      DATA SIXTY/60/                                                    GRPH0098
      DATA ONTIME,OFTIME,NAME,NEXT/1,2,3,4/                             GRPH0099
* THE ABOVE ARE USED AS SYMBOLIC SUBSCRIPTS INTO DATA                   GRPH0100
      DATA DOT/' .  '/                                                  GRPH0101
      DATA BLANKS/'    '/                                               GRPH0102
      DATA LINENO,PARTNUM,TIMEON,TIMEOFF/12,32,15,16/                   GRPH0103
      DATA EXTACT,YES,MINS/5,'Y','M'/                                   GRPH0104
      DATA ((NAMES(I,J),J=1,4),I=1,10)  /                               GRPH0105
     & 'BATCH EXEC  ','.   ',                                           GRPH0108
     & 'BATCH SERV  ',':   ',                                           GRPH0109
     & 'ON-LINE EXEC','-   ',                                           GRPH0106
     & 'ON-LINE SERV','/   ',                                           GRPH0107
     & 'MONITOR SERV','*   ',                                           GRPH0110
     & 'IDLE        ','''   ',                                          GRPH0111
     & 'SWAP WAIT   ','#   ',                                           GRPH0112
     & 'I/O WAIT    ','=   ',                                           GRPH0113
     & 'SWP&I/O WAIT',',   ',                                           GRPH0114
     & 'TOTAL WAIT  ','+   '/                                           GRPH0115
      DATA MINSEC/'MINUTE *','SECOND *'/                                GRPH0117
      DATA SECPDAY/86400/                                               GRPH0118
      DATA CFLAG/1/                                                     GRPH0119
*                                                                       GRPH0120
      DATA ONLINEFLAG/1/                                                GRPH0121
*                                                                       GRPH0122
* DATA FOR SYSTEM SUMMARIES                                             GRPH0123
*                                                                       GRPH0124
      REAL MSPIOTOTS(3)                                                 GRPH0125
      DIMENSION CPUTOTS(5,3),IOTOTS(4,3),IOTIME(3),PARTOTS(16,10)       GRPH0126
      REAL CPUTOTS,IOTOTS,IOTIME,PARTOTS,WAITIME,ETMF,TOTCPU            GRPH0127
      REAL AVONLINE,TOTONLINE,AVBATCH,TOTBATCH,AV,TOT,CORETOTS          GRPH0128
      REAL ETMF,SERVPCAL,CALPACC,ACCPMIN,CALPMIN,MSECPIO                GRPH0129
      GLOBAL CPUTOTS,IOTOTS,IOTIME,PARTOTS,USERTOTS,DOUG                GRPH0130
*                                                                       GRPH0131
* ACCESS FOR ABOVE:                                                     GRPH0132
*   CPUTOTS & IOTOTS: COL. IS <ONLINE,BATCH,TOTAL>                      GRPH0133
*   CPUTOTS           ROW IS <PEXEC,PSERV,UEXEC,USERV,TOTAL>            GRPH0134
*   IOTOTS            ROW IS <TAPE,RAD,DISC,TOTAL,CORESIDENCY>          GRPH0135
*   IOTIME            '                    '                            GRPH0136
*   PARTOTS           ROW IS PARTITION #                                GRPH0137
*                     COL IS <IOWAIT,CPU,MSECPIO,STDEV,                 GRPH0138
*                                                                       GRPH0140
      WAITIME(USER)=(IOTOTS(1,USER)*IOTIME(1)                           GRPH0141
     &             +IOTOTS(2,USER)*IOTIME(2)                            GRPH0142
     &              +IOTOTS(3,USER)*IOTIME(3))/60000.                   GRPH0143
*                                                                       GRPH0144
      DIMENSION CORETOTS(3),COREMEANS(3),COREDEVS(3),USERTOTS(3)        GRPH0145
      DIMENSION MSPIOMEANS(3),MSPIODEVS(3)                              GRPH0146
      REAL CORETOTS,COREMEANS,COREDEVS,MSPIOMEANS,MSPIODEVS             GRPH0147
      GLOBAL CORETOTS,COREMEANS,COREDEVS,MSPIOMEANS,MSPIODEVS           GRPH0148
      REAL CPUTOTS,IOTOTS,IOTIME,PARTOTS,CORETOTS,MSPIOTOTS             GRPH0149
      DATA IOTIME/5.,20.,50./                                           GRPH0150
*                                                                       GRPH0151
      EQUIVALENCE(NAMES(1,4),SYMBOL(1))                                 GRPH0152
      COMMON/LABELED/PART,NEXT                                          GRPH0153
      GLOBAL SECFLAG,DAY1,LPPAGE,NCOPIES,LOTIME,LOWID,TCALS             GRPH0154
      GLOBAL BUFF,PATCH,ONLINEFLAG,DATA,DBFLAG,GRAPH,SAVEFREE,CFLAG     GRPH0155
      GLOBAL NCOPIES,VERSION,STATSOK,LOWID,HR,MIN                       GRPH0156
      DATA   NCOPIES,VERSION,STATSOK,LOWID,HR,MIN/1,1,1,0,0,0/          GRPH0157
*                                                                       GRPH0158
*                                                                       GRPH0159
*                                                                       GRPH0160
*                                                                       GRPH0161
*                                                                       GRPH0162
*                                                                       GRPH0163
* ------  I N I T I A L I Z E    ---------                              GRPH0164
*                                                                       GRPH0165
*                                                                       GRPH0166
*                                                                       GRPH0167
*                                                                       GRPH0168
*                                                                       GRPH0169
*                                                                       GRPH0170
      FREE=1                                                            GRPH0171
      CALL INIT(FREE)                                                   GRPH0172
      SAVEFREE=FREE                                                     GRPH0173
      DO 2 I=1,5                                                        GRPH0174
      DO 2 J=1,3                                                        GRPH0175
2     CPUTOTS(I,J)=0                                                    GRPH0176
      DO 4 I=1,4                                                        GRPH0177
      DO 4 J=1,3                                                        GRPH0178
4     IOTOTS(I,J)=0                                                     GRPH0179
      DO 6 I=1,16                                                       GRPH0180
      DO 6 J=1,10                                                       GRPH0181
6     PARTOTS(I,J)=0                                                    GRPH0182
      DO 8 I=1,3                                                        GRPH0183
      USERTOTS(I)=0                                                     GRPH0184
8     CORETOTS(I)=COREMEANS(I)=COREDEVS(I)=MSPIOMEANS(I)=MSPIODEVS(I)=0 GRPH0185
      FIRSTIME=.TRUE.                                                   GRPH0187
      TCALS=0                                                           GRPH0188
      NOGRAPH=NEVERGRAPH=0                                              GRPH0189
      TEN=CONVERT(10.)                                                  GRPH0190
      PRINT2=.FALSE.                                                    GRPH0191
      ESEC=TOFF=TOTMINS=TIME=-1                                         GRPH0192
      SSEC=DAY1=TON=1000000                                             GRPH0193
      DO 10 I=1,16                                                      GRPH0194
      DATE(I)=370                                                       GRPH0195
10    PART(I)=LASTJOB(I)=0                                              GRPH0196
*                                                                       GRPH0197
      DO 20 I=1,NUTSPM                                                  GRPH0198
      UTSPM(I)=TUTSPM(I)=0.                                             GRPH0199
20    WAITSEL(I)=GRAPH(I)=.FALSE.                                       GRPH0200
* SELECT BATCHEXEC, MON SERV, SW WAIT TO GRAPH                          GRPH0201
      GRAPH(1)=GRAPH(3)=GRAPH(5)=GRAPH(8)=.TRUE.                        GRPH0202
* SELECT COMPONENTS OF WAIT                                             GRPH0203
      WAITSEL(9)=WAITSEL(6)=WAITSEL(7)=WAITSEL(8)=.TRUE.                GRPH0204
      BIN=1                                                             GRPH0205
      BLOGS=BATACCPT=OLOGS=TLOGS=0                                      GRPH0206
      OUTPUT 'GRAPHER E00-B HERE'                                       GRPH0207
      OUTPUT 'HELP?'                                                    GRPH0208
30    FORMAT(A1)                                                        GRPH0210
      IF (ANS.NE.YES) GO TO 40                                          GRPH0211
*                                                                       GRPH0212
*    ---- TELL USER HOW TO RUN GRAPHER  -------                         GRPH0213
*                                                                       GRPH0214
      OUTPUT 'TO RUN GRAPHER'                                           GRPH0215
      OUTPUT ' SET F:1 /ACCTLG'                                         GRPH0216
      OUTPUT ' SET F:2 /STATSLO'                                        GRPH0217
      OUTPUT ' GRAPH.'                                                  GRPH0218
      OUTPUT ' WHERE STATSLO IS OUTPUT (EBCDIC, NOT HISTORY FILE)'      GRPH0219
      OUTPUT ' OF STATS CONTAINING CPU (AND ANY OTHER) DISPLAY.'        GRPH0220
      OUTPUT ' OMIT F:2 ASSIGNMENT IF NO STATSLO IS PRESENT.'           GRPH0221
      OUTPUT ' ANY TIME INTERVAL IS PERMISSABLE FOR STATS'              GRPH0222
      OUTPUT ' SEE 890804-11 FOR FURTHER DETAILS'                       GRPH0223
      OUTPUT ' '                                                        GRPH0224
      OUTPUT 'GRAPHER HAS SEVERAL EXECUTION PARAMETERS'                 GRPH0225
      OUTPUT 'THESE ARE SET AT COMPILE TIME ONLY AND ARE ALSO GLOBAL.'  GRPH0226
      OUTPUT 'THIS ENABLES THEM TO BE PERMAENTLY ALTERED WITH GENMD'    GRPH0227
      OUTPUT 'TO SUIT YOUR NEEDS.'                                      GRPH0228
      OUTPUT ' TO USE GENMD:'                                           GRPH0229
      OUTPUT ' GENMD.X GRAPH'                                           GRPH0230
      OUTPUT ' ,<VARIABLE>,<VALUE>'                                     GRPH0231
      OUTPUT ' END'                                                     GRPH0233
      OUTPUT ' '                                                        GRPH0234
      OUTPUT 'IN ADDITION, THE GRAPHER PARAMETERS CAN BE MODIFIED'      GRPH0235
      OUTPUT 'AT RUNTIME BY THE USER FOR THAT PARTICULAR RUN.'          GRPH0236
      OUTPUT 'THIS IS DONE USING THE ''NAMELIST'' OPTION'               GRPH0237
      OUTPUT 'THE FORM OF THIS COMMAND IS AS FOLLOWS:'                  GRPH0238
      OUTPUT ' <VARIABLE> = <VALUE> |;<VARIABLE> = <VALUE>.....~'       GRPH0239
      OUTPUT ' TERMINATE WITH AN ASTERISK, USE AS '                     GRPH0240
      OUTPUT ' MANY LINES AS NECESSARY.'                                GRPH0241
      OUTPUT ' '                                                        GRPH0242
      OUTPUT ' '                                                        GRPH0243
      OUTPUT 'THE GRAPHER PARAMETERS ARE AS FOLLOWS'                    GRPH0244
      OUTPUT 'DOUG'                                                     GRPH0245
      OUTPUT ' 0 = BURST SHEETS'                                        GRPH0246
      OUTPUT '     1 SET OF 1 LINE SUMMARIES'                           GRPH0247
      OUTPUT '     NO PROFILES'                                         GRPH0248
      OUTPUT ' 1 = BURST SHEETS'                                        GRPH0249
      OUTPUT '     2 SETS OF 1 LINE SUMMARIES'                          GRPH0250
      OUTPUT '     PROFILES'                                            GRPH0251
      OUTPUT ' 2 = SAME AS 1, BUT NO BURST SHEETS'                      GRPH0252
      OUTPUT '     SAVES QUITE A BIT OF PAPER & TIME'                   GRPH0253
      OUTPUT ' '                                                        GRPH0254
      OUTPUT ' 0 = MINUTES IN ACCTLG'                                   GRPH0256
      OUTPUT ' 1 = SECONDS IN ACCTLG'                                   GRPH0257
      OUTPUT '     TO GET SECONDS, RESYSGEN AFTER RE-ASSEMBLING'        GRPH0258
      OUTPUT '     JOBR, ACCTSUM, LOGON & TEL SETTING'                  GRPH0259
      OUTPUT '     "FORSEC" TO 1'                                       GRPH0260
      OUTPUT '      CP-V ONLY'                                          GRPH0261
      OUTPUT ' '                                                        GRPH0262
      OUTPUT 'CFLAG'                                                    GRPH0263
      OUTPUT ' 0 = SUPPRESS PROFILE DISPLAY'                            GRPH0264
      OUTPUT ' 1 = PRODUCE'                                             GRPH0265
      OUTPUT '     THIS IS ONE OF THE MOST ILLUMINATING'                GRPH0266
      OUTPUT '      DISPLAYS IN GRAPHER'                                GRPH0267
      OUTPUT ' '                                                        GRPH0268
      OUTPUT 'LOWID'                                                    GRPH0269
      OUTPUT ' ID BELOW WHICH BATCH RECORDS IGNORED'                    GRPH0270
      OUTPUT ' ON-LINE RECORDS NOT IGNORED THIS WAY'                    GRPH0271
      OUTPUT ' '                                                        GRPH0272
      OUTPUT 'HR,MIN'                                                   GRPH0273
      OUTPUT ' HR & MIN BELOW WHICH BATCH RECORDS IGNORED'              GRPH0274
      OUTPUT ' ON-LINE RECORDS NOT IGNORED THIS WAY'                    GRPH0275
      OUTPUT ' DO NOT USE IF GRAPHING MORE THAN 1 DAY'                  GRPH0276
      OUTPUT ' '                                                        GRPH0277
      OUTPUT ' 0 = REJECT ALL ON-LINE RECORDS'                          GRPH0279
      OUTPUT ' 1 = ACCEPT'                                              GRPH0280
      OUTPUT ' '                                                        GRPH0281
      OUTPUT 'NCOPIES - # COPIES OF OUTPUT'                             GRPH0282
      OUTPUT ' '                                                        GRPH0283
      OUTPUT 'STATSOK'                                                  GRPH0284
      OUTPUT ' 0 = CHOOSE EACH STATS STATISTIC TO BE GRAPHED'           GRPH0285
      OUTPUT ' 1 = ACCEPT DEFAULT (BATCH & ON-LINE CPU, MON SERV,'      GRPH0286
      OUTPUT '     IOWAIT, TOTAL WAIT'                                  GRPH0287
      OUTPUT ' '                                                        GRPH0288
      OUTPUT 'VERSION'                                                  GRPH0289
      OUTPUT ' 0 = UTS'                                                 GRPH0290
      OUTPUT ' 1 = CPV'                                                 GRPH0291
      OUTPUT '      MEANING USE LDEV CAPABILITY FOR WRITING'            GRPH0292
      OUTPUT '      BOTH SINGLE & MULTIPLE COPIES; MUCH FASTER.'        GRPH0293
      OUTPUT '      FOR UTS SYSTEM DESIRING ONLY 1 COPY:'               GRPH0294
      OUTPUT '          SET F:6 LP;VFC'                                 GRPH0295
      OUTPUT '  *** WARNING ***'                                        GRPH0296
      OUTPUT '   BE SURE ASSEMBLY FLAG ''CPV'' IS SET PROPERLY'         GRPH0297
      OUTPUT '   IN GRPGSI'                                             GRPH0298
      OUTPUT ' '                                                        GRPH0299
      OUTPUT 'LPPAGE - # LINES PER PAGE (GENMD ONLY)'                   GRPH0300
      OUTPUT ' '                                                        GRPH0302
      OUTPUT 'YOU WILL NOW SEE THE DEFAULT VALUES'                      GRPH0303
      OUTPUT 'MAKE ANY CHANGES VIA NAMELIST FOLLOWING THIS PROMPT:'     GRPH0304
      OUTPUT ' CHANGE DEFAULTS:'                                        GRPH0305
      OUTPUT 'IF NO CHANGES, TYPE AN ASTERICK'                          GRPH0306
      OUTPUT 'GOOD LUCK'                                                GRPH0307
      OUTPUT ' '                                                        GRPH0308
      OUTPUT ' '                                                        GRPH0309
40    OUTPUT DOUG,SECFLAG,CFLAG,LOWID,HR,MIN,ONLINEFLAG,                GRPH0310
     &   NCOPIES,STATSOK,VERSION                                        GRPH0311
      OUTPUT 'CHANGE DEFAULTS:'                                         GRPH0312
      NAMELIST DOUG,SECFLAG,CFLAG,LOWID,HR,MIN,ONLINEFLAG,              GRPH0313
     &   NCOPIES,STATSOK,VERSION                                        GRPH0314
      INPUT                                                             GRPH0315
      OUTPUT 'INPUT ACCEPTED',' '                                       GRPH0316
      LOTIME=60*(HR*60+MIN)                                             GRPH0317
      IF (VERSION.GT.0) CALL LDEV                                       GRPH0318
*                                                                       GRPH0319
* ------ P R I N T   T I T L E   P A G E   --------                     GRPH0320
*                                                                       GRPH0321
*                                                                       GRPH0322
      WRITE(6,240)                                                      GRPH0323
*                                                                       GRPH0324
50    FORMAT('1',10/,T30,'U T S   M U L T I P R O G R A M M I N G ',    GRPH0325
     &       '  D I A G R A M ',///)                                    GRPH0326
55    OUTPUT 'TITLE & DESC.'                                            GRPH0327
      WRITE(6,60)                                                       GRPH0328
60    FORMAT('1',/////,T30,'T I T L E ',/)                              GRPH0329
      READ(105,630)ANSBUF                                               GRPH0330
      I=72                                                              GRPH0331
70    IF(ANSBUF(I).NE.BLANKS)NCHARS=I;GOTO 80                           GRPH0332
      I=I-1                                                             GRPH0333
      IF(I.GE.1)GOTO 70                                                 GRPH0334
80    IF(NCHARS.GT.33)GOTO 90                                           GRPH0335
      WRITE(6,100)(ANSBUF(I),I=1,NCHARS)                                GRPH0336
      GOTO 115                                                          GRPH0337
90    WRITE(6,110)(ANSBUF(I),I=1,NCHARS)                                GRPH0338
100   FORMAT(T40,72(A1,1X))                                             GRPH0339
110   FORMAT(T40,72A1)                                                  GRPH0340
S 115 NOP                                                               GRPH0341
      WRITE(6,120)                                                      GRPH0342
120   FORMAT(///,T30,'D E S C R I P T I O N ',/)                        GRPH0343
130   READ(105,630,END=150)ANSBUF                                       GRPH0344
      WRITE(6,140)ANSBUF                                                GRPH0345
140   FORMAT(T40,72A1)                                                  GRPH0346
      GOTO 130                                                          GRPH0347
*                                                                       GRPH0349
*                                                                       GRPH0350
*---- INITILAIZE GRAPH                                                  GRPH0351
*                                                                       GRPH0352
      IF(STATSOK.EQ.0)CALL SELECT(GRAPH,NAMES,NUTSPM)                   GRPH0353
*                                                                       GRPH0354
*                                                                       GRPH0355
* END OF TITLE PAGE                                                     GRPH0356
*                                                                       GRPH0357
*        FREE IS USED TO MARK AVAILABLE ROWS IN DATA                    GRPH0358
*                                                                       GRPH0359
*                                                                       GRPH0360
*                                                                       GRPH0361
* --- R E A D   I N   A N D   C H A I N   D A T A   ----                GRPH0362
*                                                                       GRPH0363
*                                                                       GRPH0364
*                                                                       GRPH0365
*                                                                       GRPH0366
*                                                                       GRPH0367
*                                                                       GRPH0368
*                                                                       GRPH0369
160   CALL BUFFER IN(1,BIN,BUFF,37,ENDACTION)                           GRPH0370
170   TLOGS=TLOGS+1                                                     GRPH0372
*                                                                       GRPH0373
*                                                                       GRPH0374
*                                                                       GRPH0375
S     LB,1     BUFF+12     GET LINE NUMBER OF USER                      GRPH0376
S     STW,1    BATCH       SAVE                                         GRPH0377
S     LH,1     BUFF+19     GET SYSID                                    GRPH0378
S     STW,1    ID          SAVE                                         GRPH0379
*                                                                       GRPH0380
* IF NO NAME, USE SYSID                                                 GRPH0381
*                                                                       GRPH0382
      IF(BUFF(EXTACT).EQ.0.OR.BUFF(EXTACT).EQ.BLANKS)                   GRPH0383
     &               ENCODE (4,173,BUFF(EXTACT)) ID                     GRPH0384
173   FORMAT(Z4)                                                        GRPH0385
*                                                                       GRPH0386
*                                                                       GRPH0387
      IF(BATCH.GE.255)BLOGS=BLOGS+1;  GO TO 175                         GRPH0388
      OLOGS=OLOGS+1                                                     GRPH0389
      IF(ONLINEFLAG.GT.0) CALL BURST                                    GRPH0390
      GOTO 160                                                          GRPH0391
S175   LI,1     1         INDEX FOR PARTITION                           GRPH0392
S     LB,2     BUFF+32,1 GET PARTITION NUMBER                           GRPH0393
S     INT,1 BUFF+14                                                     GRPH0395
S     STW,1 SDATE                                                       GRPH0396
S     INT,1 BUFF+18                                                     GRPH0397
S     STW,1 EDATE                                                       GRPH0398
      IF (SDATE.EQ.0.OR.EDATE.EQ.0)                                     GRPH0399
     &   OUTPUT 'BAD DATE',OLOGS,BLOGS,OLOGS+BLOGS;                     GRPH0400
     &   SAVEDOUG=DOUG; DOUG=1;                                         GRPH0401
     &   CALL BURST;    DOUG=SAVEDOUG;                                  GRPH0402
     &   OUTPUT(6) 'THAT WAS A BAD LOG....','1';                        GRPH0403
     &   GO TO 160                                                      GRPH0404
      STIME=BUFF(TIMEON)                                                GRPH0405
      ETIME=BUFF(TIMEOFF)                                               GRPH0406
      IF(SECFLAG.EQ.0)STIME=STIME*60;ETIME=ETIME*60                     GRPH0407
      IF(ID.LT.LOWID.OR.STIME.LT.LOTIME)GOTO    160                     GRPH0408
*                                                                       GRPH0409
*                                                                       GRPH0410
* SEE IF PLACE TO BE CHAINED IS PART VECTOR                             GRPH0411
*                                                                       GRPH0412
*     DATA(NEXT,FREE)=0                                                 GRPH0413
      BATACCPT=BATACCPT+1                                               GRPH0414
      IF(PART(PNO).EQ.0)PART(PNO)=FREE;GOTO 190                         GRPH0415
*                                                                       GRPH0416
*                                                                       GRPH0418
      INDEX=LASTJOB(PNO)                                                GRPH0419
*                                                                       GRPH0420
* MAKE SURE IT THE LAST                                                 GRPH0421
*                                                                       GRPH0422
180   IF(DATA(NEXT,INDEX).GT.0)INDEX=DATA(NEXT,INDEX);GOTO 180          GRPH0423
*                                                                       GRPH0424
      DATA(NEXT,INDEX)=FREE                                             GRPH0425
*                                                                       GRPH0426
*                                                                       GRPH0427
* ---- JOB IS CHAINED, NOW INITALIZE HIS SPOT IN 'DATA'                 GRPH0428
*                                                                       GRPH0429
190   IF(SDATE.EQ.EDATE.AND.STIME.GT.ETIME)ETIME=STIME;  OUTPUT '**'    GRPH0430
      DATA(ONTIME,FREE)=STIME                                           GRPH0431
      DATA(OFTIME,FREE)=ETIME                                           GRPH0432
      IF(SDATE.LT.DATE(PNO))DATE(PNO)=SDATE                             GRPH0433
      IF(SDATE.LT.DAY1)DAY1=SDATE                                       GRPH0434
210   DATA(NAME,FREE  )=BUFF(EXTACT)                                    GRPH0435
*                                                                       GRPH0436
* SET LASTJOB HERE SO CAN FIND END OF CHAIN EASILY                      GRPH0437
*                                                                       GRPH0438
      LASTJOB(PNO)=FREE                                                 GRPH0439
      FREE=FREE+1                                                       GRPH0441
      J=FREE-1                                                          GRPH0442
220   FORMAT(' JOB ',A4,' ENTERED INTO P',                              GRPH0443
     &       I2,' AT',I8,' OFF AT',I8)                                  GRPH0444
      CALL BURST                                                        GRPH0445
      GOTO 160                                                          GRPH0446
*                                                                       GRPH0447
*                                                                       GRPH0448
*                                                                       GRPH0449
*     E N D    O F    F I R S T   P A R T                               GRPH0450
*                                                                       GRPH0451
*                                                                       GRPH0452
*                                                                       GRPH0453
*                                                                       GRPH0454
*                                                                       GRPH0455
*                                                                       GRPH0456
*                                                                       GRPH0457
230   WRITE(108,907) TLOGS,OLOGS,BLOGS,BATACCPT                         GRPH0458
*                                                                       GRPH0459
*   PRODUCE LINI BY LINE SUMMARY OF JOBS                                GRPH0460
*                                                                       GRPH0461
      CALL SUMMARY                                                      GRPH0462
*                                                                       GRPH0464
240   FORMAT('1')                                                       GRPH0465
*                                                                       GRPH0466
*                                                                       GRPH0467
*                                                                       GRPH0468
*                                                                       GRPH0469
*                                                                       GRPH0470
*                                                                       GRPH0471
*                                                                       GRPH0472
      IF(FREE.GT.0)GOTO 250                                             GRPH0473
      OUTPUT'NO BATCH JOBS'                                             GRPH0474
      STOP                                                              GRPH0475
*                                                                       GRPH0476
*                                                                       GRPH0477
*                                                                       GRPH0478
*                                                                       GRPH0479
*   ----- PROVIDE FOR TIME CROSSING MIDNIGHT -----                      GRPH0480
*                                                                       GRPH0481
*                                                                       GRPH0482
*                                                                       GRPH0483
250   NPARTS=16                                                         GRPH0484
      DO 290 PNO=1,16                                                   GRPH0485
      IF(PART(PNO).EQ.0)GOTO 290                                        GRPH0486
      INDEX=PART(PNO)                                                   GRPH0487
      TIME=DATA(ONTIME,INDEX)+(DATE(PNO)-DAY1)*SECPDAY                  GRPH0488
*                                                                       GRPH0489
* --- ABOVE INSURES THAT JOBS BEGINNING IN NON-DAY1                     GRPH0490
*     HAVE TIMES REFLECTING THIS -----                                  GRPH0491
*                                                                       GRPH0492
280   IF(TIME.GT.DATA(ONTIME,INDEX))                                    GRPH0493
     &         DATA(ONTIME,INDEX)=DATA(ONTIME,INDEX)+SECPDAY; GO TO 280 GRPH0494
      TIME=DATA(ONTIME,INDEX)                                           GRPH0495
      IF(TIME.GT.DATA(OFTIME,INDEX))                                    GRPH0496
     &         DATA(OFTIME,INDEX)=DATA(OFTIME,INDEX)+SECPDAY; GO TO 280 GRPH0497
      IF(DATA(ONTIME,INDEX).LT.SSEC)SSEC=DATA(ONTIME,INDEX)             GRPH0498
      IF(DATA(OFTIME,INDEX).GT.ESEC)ESEC=DATA(OFTIME,INDEX)             GRPH0499
      DATA(ONTIME,INDEX)=(DATA(ONTIME,INDEX)+30)/60                     GRPH0500
      DATA(OFTIME,INDEX)=(DATA(OFTIME,INDEX)+30)/60                     GRPH0501
      IF(DATA(ONTIME,INDEX).LT.TON)TON=DATA(ONTIME,INDEX)               GRPH0502
      IF(DATA(OFTIME,INDEX).GT.TOFF)TOFF=DATA(OFTIME,INDEX)             GRPH0503
      INDEX=DATA(NEXT,INDEX)                                            GRPH0504
      IF(INDEX.GT.0)GOTO 280                                            GRPH0505
290   CONTINUE                                                          GRPH0506
      TEN=CONVERT(10.)                                                  GRPH0507
*                                                                       GRPH0508
      TEN=150                                                           GRPH0509
      WRITE(6,50)                                                       GRPH0511
      DO 293 I=1,10                                                     GRPH0512
      IF (.NOT.GRAPH(I)) GO TO 293                                      GRPH0513
      WRITE(6,297) (NAMES(I,J),J=1,4)                                   GRPH0514
293   CONTINUE                                                          GRPH0515
*                                                                       GRPH0516
      WRITE(6,298)                                                      GRPH0517
*                                                                       GRPH0518
      DO 296 I=2,4,2                                                    GRPH0519
      IF (.NOT.GRAPH(I).AND.GRAPH(I-1))                                 GRPH0520
     &   WRITE(6,299) (NAMES(I-1,J),J=1,3)                              GRPH0521
296   CONTINUE                                                          GRPH0522
*                                                                       GRPH0523
297   FORMAT(T40,3A4,2X,A1)                                             GRPH0524
298   FORMAT(T40,'TOTAL WAIT',T54,'+',///)                              GRPH0525
299   FORMAT(T45,3A4,' INCLUDES SERVICE TIME')                          GRPH0526
*                                                                       GRPH0527
      DO 300 I=1,NUTSPM                                                 GRPH0528
300   TABS(I)=140                                                       GRPH0529
      IF(NPARTS.GT.16)NPARTS=16                                         GRPH0530
      PRINT2=.FALSE.                                                    GRPH0531
      LASTH=60                                                          GRPH0532
*                                                                       GRPH0534
*                                                                       GRPH0535
*                                                                       GRPH0536
*                                                                       GRPH0537
*                                                                       GRPH0538
*  - - -   G R A P H    T H E    D A T A    - - - - - -                 GRPH0539
*                                                                       GRPH0540
*                                                                       GRPH0541
*                                                                       GRPH0542
*                                                                       GRPH0543
*                                                                       GRPH0544
      OUTPUT 'GRAPHING'                                                 GRPH0545
      DO 490 TIME=TON,TOFF                                              GRPH0546
      DO 310 I=1,16                                                     GRPH0547
310   STILLON(I)=.FALSE.                                                GRPH0548
*                                                                       GRPH0549
* CLEAR OUT THE BUFFERS                                                 GRPH0550
*                                                                       GRPH0551
320   NONUM=.FALSE.                                                     GRPH0552
      IF(PRINT2)NONUM=.TRUE.                                            GRPH0553
      PRINT2=.FALSE.                                                    GRPH0554
*                                                                       GRPH0555
330   PARTBUF(PNO)=BLANKS                                               GRPH0557
*                                                                       GRPH0558
*                                                                       GRPH0559
      DO 370 PNO=1,NPARTS                                               GRPH0560
340   INDEX=PART(PNO)                                                   GRPH0561
      IF(INDEX.EQ.0)GOTO 370                                            GRPH0562
      STIME=DATA(ONTIME,INDEX)                                          GRPH0563
      ETIME=DATA(OFTIME,INDEX)                                          GRPH0564
      EXTACC=DATA(NAME,INDEX)                                           GRPH0565
      IF(EXTACC.EQ.BLANKS)EXTACC=DOT                                    GRPH0566
350   FORMAT('AT T=',I8,' P=',I3,' NAME IS ',A4,                        GRPH0567
     &       ' ON AT',I8,' OFF AT',I8)                                  GRPH0568
*                                                                       GRPH0569
* ALLOW FOR CLOSED OR UNUSED PARTITIONS                                 GRPH0570
* PARTITION NOT STARTED UP YET                                          GRPH0571
*                                                                       GRPH0572
      IF(STIME.GT.TIME)GOTO 370                                         GRPH0573
*                                                                       GRPH0574
* CHECK FOR JOB HAVING BEEN ON FOR A WHILE                              GRPH0575
*                                                                       GRPH0576
      IF(STIME.LT.TIME)PARTBUF(PNO)=DOT;GOTO    360                     GRPH0577
*                                                                       GRPH0578
      PARTBUF(PNO)=EXTACC                                               GRPH0580
      STILLON(PNO)=.TRUE.                                               GRPH0581
*                                                                       GRPH0582
* NOW SEE IF NEXT GUY ALSO COMES ON IN THIS                             GRPH0583
      PARTBUF(PNO)=EXTACC                                               GRPH0584
      IF(STIME.EQ.DATA(ONTIME,DATA(NEXT,INDEX)))PRINT2=.TRUE.           GRPH0585
*                                                                       GRPH0586
* IN CASE GO THRU AGAIN, DON'T REPRINT NAME:                            GRPH0587
*                                                                       GRPH0588
      DATA(ONTIME,INDEX)=STIME-1                                        GRPH0589
*                                                                       GRPH0590
* IF GUY GOES OFF NOW, UNLINK HIM......                                 GRPH0591
*                                                                       GRPH0592
      IF(ETIME.EQ.TIME)PART(PNO)=DATA(NEXT,INDEX)                       GRPH0593
      GOTO 370                                                          GRPH0594
*                                                                       GRPH0595
* ONTIME<TIME                                                           GRPH0596
* SEE IF HE GOES OFF NOW                                                GRPH0597
*                                                                       GRPH0598
360   IF(ETIME.LT.TIME)OUTPUT                                           GRPH0599
     &'ERROR-ETIME<TIME AT S 360';GOTO 620                              GRPH0600
      STILLON(PNO)=.TRUE.                                               GRPH0601
*                                                                       GRPH0603
* HE IS OFF NOW                                                         GRPH0604
*                                                                       GRPH0605
      PARTBUF(PNO)=DOT                                                  GRPH0606
*                                                                       GRPH0607
* SINCE HE IS DONE, UNLINK HIM AND GO TO NEXT GUY                       GRPH0608
*                                                                       GRPH0609
      PART(PNO)=DATA(NEXT,INDEX)                                        GRPH0610
*                                                                       GRPH0611
* NOW SEE IF NEXT GUY IS ON NOW                                         GRPH0612
*                                                                       GRPH0613
      GOTO 340                                                          GRPH0614
370   CONTINUE                                                          GRPH0615
*                                                                       GRPH0616
*                                                                       GRPH0617
*                                                                       GRPH0618
*                                                                       GRPH0619
* AT 380, PARTBUF AND NAMEBUF ARE SET                                   GRPH0620
*   WE NOW READ IN & GRAPH THE CPU DISPLAY                              GRPH0621
*   IF TIME=T1, SOME OF UTSPM WAS LOST                                  GRPH0622
*     MAKE DOTS FOR GUYS ENDING&OTHER PARTS HAVING                      GRPH0623
*     >1JOB FOR THIS MINUTE                                             GRPH0624
      DO 380 PNO=1,NPARTS                                               GRPH0626
380   IF(PARTBUF(PNO).EQ.BLANKS.AND.STILLON(PNO))                       GRPH0627
     &PARTBUF(PNO)=DOT                                                  GRPH0628
      IF(TIME.EQ.TON)GOTO 390                                           GRPH0629
      IF(TIME.EQ.T1.AND.FIRSTIME)GOTO 400                               GRPH0630
*                                                                       GRPH0631
* SEE IF TIME  HAS PASSED PRESENT INTERVAL OF UTSPM                     GRPH0632
*     IF SO, READ IN ANOTHER DISPLAY                                    GRPH0633
*                                                                       GRPH0634
      IF(TIME.GE.T2)GOTO 410                                            GRPH0635
      GOTO 440                                                          GRPH0636
390   CALL GETPM(T1,T2,UTSPM,ENDACTION)                                 GRPH0637
      IF(ENDACTION.EQ.1)GOTO 460                                        GRPH0638
*                                                                       GRPH0639
* SEE IF UTSPM STARTED EARLY; IF SO, PASS BY                            GRPH0640
*                                                                       GRPH0641
      IF(TIME.GE.T2)GOTO 390                                            GRPH0642
*                                                                       GRPH0643
* SEE IF UTSPM STARTED LATE; IF SO, COME BACK WHEN T1=TIME              GRPH0644
*                                                                       GRPH0645
      IF(TIME.LT.T1)GOTO 440                                            GRPH0646
*                                                                       GRPH0647
*                                                                       GRPH0648
400   FIRSTH=TIME/60.;FIRSTM=MOD(TIME,60)                               GRPH0649
      FIRSTIME=.FALSE.                                                  GRPH0650
*                                                                       GRPH0651
      T1=TIME                                                           GRPH0652
      GOTO 420                                                          GRPH0653
*                                                                       GRPH0654
*                                                                       GRPH0655
*                                                                       GRPH0656
410   CALL GETPM(T1,T2,UTSPM,ENDACTION)                                 GRPH0657
      IF(ENDACTION.EQ.1)GOTO 460                                        GRPH0658
      IF (TIME.GT.T2) GO TO 410                                         GRPH0659
*                                                                       GRPH0660
420   TOTWAIT=0.                                                        GRPH0661
*                                                                       GRPH0662
*  CALC TOT WAIT, TABS, TUTSPM                                          GRPH0663
*                                                                       GRPH0664
      DO 430 I=1,NUTSPM                                                 GRPH0665
      IF(WAITSEL(I))TOTWAIT=TOTWAIT+UTSPM(I)                            GRPH0666
      IF(GRAPH(I))TABS(I)=CONVERT(UTSPM(I))                             GRPH0667
430   TUTSPM(I)=TUTSPM(I)+UTSPM(I)*(T2-T1)                              GRPH0668
      TABS(NUTSPM+1)=CONVERT(TOTWAIT)                                   GRPH0669
      IF(.NOT.GRAPH(2).AND.GRAPH(1))                                    GRPH0670
     &   TABS(1)=CONVERT(UTSPM(1)+UTSPM(2))                             GRPH0671
     &   TABS(3)=CONVERT(UTSPM(3)+UTSPM(4))                             GRPH0673
*                                                                       GRPH0674
440   WRITES=WRITES+1                                                   GRPH0675
*                                                                       GRPH0676
* NOW WE WRITE                                                          GRPH0677
*                                                                       GRPH0678
      IF(MOD(WRITES,LPPAGE).EQ.0)CALL HEADING                           GRPH0679
      IF(.NOT.NONUM)GOTO 450                                            GRPH0680
      N=NUTSPM+1                                                        GRPH0681
      WRITE(6,650)TEN,N,(TABS(I),SYMBOL(I),I=1,N),                      GRPH0682
     &NPARTS,(PARTBUF(I),I=1,NPARTS)                                    GRPH0683
      GOTO 480                                                          GRPH0684
450   N=NUTSPM+1                                                        GRPH0685
      HR=MOD(TIME/60.,24)                                               GRPH0686
      MIN=MOD(TIME,60)                                                  GRPH0687
*                                                                       GRPH0688
      WRITE(6,640)HR,MIN,TEN,N,(TABS(I),SYMBOL(I),I=1,N),               GRPH0689
     &NPARTS,(PARTBUF(I),I=1,NPARTS)                                    GRPH0690
      GOTO 480                                                          GRPH0691
*                                                                       GRPH0692
*                                                                       GRPH0693
*                                                                       GRPH0694
