PROGRAM DEVICE C C To read the device summary created by Datatrieve C from the System Accounting data. C C B. Z. Lederman 27-Mar-84 Bankers Trust Co. C 4-Apr-84 add prompt for filename, automatic device C selection C IMPLICIT INTEGER (A-F, H-Z) PARAMETER POINTS = 200 INCLUDE '[001005]CGL.FTN/NOLIST' INTEGER*4 DEVCE(5), DEVCIN, OLDDEV REAL X(POINTS), Y(POINTS, 5, 3), INC REAL A, B, C, D, A2, D2, AL, AR, DX, DY, HOURS(24) INTEGER*4 DATAIN(3), MAX(5,3) BYTE DATE(9), STARTM(8), ENDTIM(8), MAXVAL(9), TITLE(17, 3) BYTE BLANKS(10), FILNAM(32), ANS INTEGER*2 BLNK, I(5, 3) LOGICAL FIRST, PRINT INTEGER*2 SAVCOL(24), MOVCOL(24) DATA MOVCOL / 0, 0, 0, 0, 4, 6, 0, 7, 0, 7, 0, 0, 1 7, 7, 0, 0, 7, 6, 7, 0, 6, 7, 7, 6 / C DATA DEVCE / 5 * ' ' / DATA OLDDEV / ' ' / DATA I, HOURS / 15 * 0, 24 * 0. / DATA MAX / 15 * 0 / DATA BLANKS / 10 * ' ' / DATA FILNAM / 32 * 0 / DATA TITLE / 'I', '/', 'O', ' ', 'R', 'e', 'q', 'u', 'e', 1 's', 't', 's', 5*' ', 'W', 'o', 'r', 'd', 's', ' ', 2 'T', 'r', 'a', 'n', 's', 'f', 'e', 'r', 'r', 'e', 'd', 3 'C', 'y', 'l', 'i', 'n', 'd', 'e', 'r', 's', ' ', 4 'C', 'r', 'o', 's', 's', 'e', 'd' / C WRITE (5, 10) 10 FORMAT('$ Enter data file name: ') READ (5, 20, END = 999) FILNAM 20 FORMAT( 32A1) FIRST = .TRUE. PRINT = .FALSE. DV = 0 OLDHR = 0 H = 0 OPEN (UNIT = 1, NAME = FILNAM, TYPE = 'OLD', ERR = 999, 1 READONLY) WRITE (5, 30) 30 FORMAT('$ Print hardcopy [Y/N] : ') READ (5, 40, END = 999) ANS 40 FORMAT(A1) IF ((ANS .EQ. 'Y') .OR. (ANS .EQ. 'y')) PRINT = .TRUE. C 100 READ (1, 110, END = 200) DATE, HOUR, MIN, SEC, DEVCIN, 1 BLNK, DATAIN 110 FORMAT( 9A1, 3I2, A4, A2, 3I9) C IF (FIRST) THEN ENCODE (8, 120, STARTM) HOUR, MIN, SEC 120 FORMAT( I2, ':', I2.2, ':', I2.2) FIRST = .FALSE. ENDIF C IF (DEVCIN .NE. OLDDEV) THEN DV = DV + 1 IF (DV .GT. 5) GOTO 100 ! too many devices DEVCE(DV) = DEVCIN OLDDEV = DEVCIN ENDIF C 140 DO 150 F = 1, 3 I(DV, F) = I(DV, F) + 1 L = I(DV, F) IF (L .GT. POINTS) GOTO 150 ! no more room this device Y(L, DV, F) = DATAIN(F) ! store activity IF (DATAIN(F) .GT. MAX(DV, F)) MAX(DV, F) = DATAIN(F) 150 CONTINUE C IF (OLDHR .LT. HOUR) THEN ! capture hour markers IF (H .LT. 24) THEN ! but no more than 24 of them H = H + 1 HOURS(H) = L OLDHR = HOUR ENDIF ENDIF C GOTO 100 ! get next record C 200 ENCODE (8, 120, ENDTIM) HOUR, MIN, SEC ! catch last time CLOSE (UNIT = 1) IF (PRINT) THEN ! formfeed paper OPEN (UNIT = 1, FILE = 'TT2:FORMF.EED', TYPE = 'NEW') WRITE (1, 205) 205 FORMAT ( '1' ) ENDIF C CALL CGL (GIC) ! Initialize CALL CGL (GNF) ! New Frame CALL CGL (GICM, SAVCOL) ! Save preset colors CALL CGL (GSCM, MOVCOL) ! First set of colors CALL CGL (GSWM, 6) ! set write mode replace CALL CGL (GSWI, 7) ! write index white CALL CGL (GSCJ, 1, 2) ! justify text left, center C DO 1000 F = 1, 3 L = IMAX0( I(1,F), I(2,F), I(3,F), I(4,F), I(5,F)) DO 210 M = 1, L 210 X(M) = M A = L B = AJMAX0( MAX(1,F), MAX(2,F), MAX(3,F), MAX(4,F), MAX(5,F)) C = -0.1 * A D = -0.1 * B CALL CGL (GSW, C, A, D, B) ! Set window CALL CGL (GSO, 0) ! Set origin to bottom left CALL CGL (GMA2, 1., 0.) ! Move to origin CALL CGL (GRA2, A, B) ! Draw box around window D2 = 0.5 * D ! need for positioning A2 = B + D2 ! ditto AR = 0.02 * A ! right end of sample line AL = -(AR) ! left end of sample line AR = 2. * AR ! need a little more C DO 300 DV = 1, 5 ! once for each device IF (MAX(DV,F) .LE. 0) GOTO 300 ! skip zero activity J = DV + 1 ! index to line type CALL CGL (GSWI, DV) ! Set color CALL CGL (GSLS, J, 0, 0) ! set line type IF (B .EQ. FLOATJ(MAX(DV,F))) THEN ! find most used device CALL CGL(GSLS, 1, 0, 0) ! and set solid line ENCODE (9, 250, MAXVAL) MAX(DV,F) 250 FORMAT( I9) ! capture max value ENDIF CALL CGL (GMA2, X(1), Y(1, DV, F)) ! Move to start CALL CGL (GPLA2, X(1), Y(1, DV, F), L) ! Draw lines, connected A2 = D2 + A2 ! drop down for each device CALL CGL (GMA2, C, A2) ! move to position at left CALL CGL (GT, BLANKS, 10) ! make room for name and sample CALL CGL (GT, DEVCE(DV), 4) ! name device CALL CGL (GMA2, AL, A2) ! start of sample line CALL CGL (GLA2, AR, A2) ! draw sample 300 CONTINUE C CALL CGL (GSLS, 1, 0, 0) ! set line type to solid CALL CGL (GSWI, 7) ! set color to white A2 = B + D2 ! remember D is negative CALL CGL (GMA2, C, A2) ! top left CALL CGL (GT, MAXVAL, 9) ! write in maximum Y CALL CGL (GMA2, C, D2) ! lower left CALL CGL (GT, STARTM, 8) ! starting time CALL CGL (GITE2, 20, DX, DY) ! obtain amount of space used A2 = C + DX CALL CGL (GMA2, A2, D2) ! over that amount CALL CGL (GT, DATE, 9) ! note the date CALL CGL (GITE2, 22, DX, DY) ! repeat process A2 = DX + A2 CALL CGL (GMA2, A2, D2) CALL CGL (GT, TITLE(1,F), 17) ! identify variable plotted CALL CGL (GITE2, 30, DX, DY) A2 = DX + A2 CALL CGL (GMA2, A2, D2) CALL CGL (GT, ENDTIM, 8) ! ending time DY = 0.25 * D2 ! length of tic DX = -(DY) ! actually move above line A2 = 0.96 * B ! length of top tic DO 800 M = 1, H ! put in hour tics AR = HOURS(M) ! re-use AR as temp. var. IF (AR .LE. (0.02 * A)) GOTO 800 ! don't overprint first time IF (AR .GE. (0.98 * A)) GOTO 800 ! or last time CALL CGL (GMA2, AR, DX) ! move over above bottom line CALL CGL (GLA2, AR, DY) ! draw small line CALL CGL (GMA2, AR, B) ! move over on top line CALL CGL (GLA2, AR, A2) ! draw another small line 800 CONTINUE CALL CGL (GMA2, C, D) ! move cursor to lower left IF (PRINT) THEN CALL CGL (GPS, C, A, D, B, 0., 0.) ! print screen ELSE CALL CGL (GCW, 5.) ! Wait ENDIF CALL CGL (GNF) ! New Frame 1000 CONTINUE C CALL CGL (GSCM, SAVCOL) ! Put original colors back CALL CGL (GTC) ! Terminate 999 CALL EXIT END