d program logtime c. Show the LOG time, DAY CPU time, NIGHT cpu time. ,c. c. The program requests the number of the account file. c. and then reads it to determine the usage of terminals, and Xc. the log, day-cpu and night-cpu time. c. c. end.of.info c. c. There is some garbadge in this program since it was canabolized Lc. from an accounting program without much care to eliminate the c. possibly useless, for this purpose, parts of the program. c. xC. C--- ...... FOR006 RESULTS @C--- ASSIGN FOR099 [SYSMGR]ACCOUNTNG.DAT .. RUN INFORMANTION C.  PARAMETER MXU = 200, MXA=4 l CHARACTER USER(MXU)*12, ACCT(MXU)*8  REAL DISK(MXU) 4 REAL USG(MXU,MXA)  CHARACTER*24 DATE C. ` CHARACTER*10 ITEM(MXA+1) DATA ITEM/'LOG min','CPU-day','CPU-eve','Prt pag','Disk Mb'/ ( REAL PRICE(MXA+1) DATA PRICE/0.11,4.00,3.00,0.04,0.80/ character*5 vn T C. C.........  C-- INITALIZE C. C. H C-- GET USER USAGE C. 10 continue t do 20 ij=1,mxu  do 15 ik=1,mxa < usg(ij,ik)=0 15 continue  user(ij) = ' ' h20 continue  write(6,*)' ' 0 write(6,41)'$[sysmgr]accountng.dat;'  read(5,41,end=9000)vn  if( vn.eq.' ' ) goto 9000 \41 format(132a)  OPEN( UNIT=99, TYPE='OLD', READONLY $ 1 ,name='DRA0:[sysmgr]accountng.dat;'//vn )  CALL GETUSAGE( 99, MXU,MXA,USER,ACCT,USG,DATE )  close( unit=99 ) P goto 10 c. 9000 continue |C.  END d SUBROUTINE GETUSAGE( IUN, MXU, MXA, USER, ACCT, USG, DATE ) C. ,C... GETUSAGE( IUN, MXU, MXA, USER, ACCT, USG, DATE ) .SUB. GET USAGE C.  CHARACTER*(*) USER(MXU), ACCT(MXU) X REAL USG(MXU,MXA)  real totusg(10)  CHARACTER*(*) DATE C.  CHARACTER RUSER*12, RACCT*8 L INTEGER*4 LIQUAD(2), LOQUAD(2)  REAL ZERO(10)  character*50 act(200) x integer numon(50) C. @ CHARACTER LITIME*24, LOTIME*24  DATA IFIRST/0/ C. lC.........  inxm = 0 4 do 50 ii=1,10  totusg(ii) = 0.0 50 continue ` do 110 ii=1,200 act(ii) = ': - - : - - : - - : - - :' ( 110 continue c. do 230 ii=1,50 T numon(ii)=0 230 continue  200 CONTINUE ITYPE = INACCT( IUN, RUSER, RACCT, LIQUAD,LOQUAD, 1 TIMEL, TIMEC, PRINT ) H C. IF( ITYPE.LT. 0 ) GOTO 1000 C. t CALL SYS$ASCTIM( ,LITIME, LIQUAD, %VAL(0) )  CALL SYS$ASCTIM( ,LOTIME, LOQUAD, %VAL(0) ) <C.  IF( ITYPE.NE.0 ) THEN  INX = ISFIND( MXU, RUSER, USER ) h IF( USER(INX).LE.' ' ) USER(INX) = RUSER  IF( ACCT(INX).LE.' ' ) ACCT(INX) = RACCT 0 inxm = max( inx, inxm )  IF( ITYPE.EQ.3 ) USG(INX,1) = USG(INX,1)+TIMEL  IF( (LITIME(13:14).GE.'21' .OR. LITIME(13:14).LT.'07') \ 1 .AND. (LOTIME(13:14).GE.'21' .OR. LOTIME(13:14).LT.'07')  2 ) THEN $ USG(INX,3) = USG(INX,3)+TIMEC  ELSE  USG(INX,2) = USG(INX,2)+TIMEC P ENDIF  USG(INX,4) = USG(INX,4)+PRINT  if( litime(13:14).ge.'01' .and. litime(13:14).lt.'23' ) then |c/// write(6,*) litime, lotime  decode(2,510,litime(13:14) ) lit D decode(2,510,litime(16:17) ) mit  decode(2,510,lotime(13:14) ) lot  decode(2,510,lotime(16:17) ) mot p li = (60*lit+mit)/30  lo = (60*lot+mot)/30 8510 format(i2) c/// write(6,*) inx, lit, lot  do 520 ij=li,lo d act(inx)(ij:ij) = '*'  numon(inx) = numon(inx)+1 ,520 continue  endif  ENDIF X GOTO 200 C. C-- FINISHED ACCOUNTNG FILE C. 1000 CONTINUE L DATE = LOTIME  write(6,*)' ',date  write(6,1010 ) ((ii,ii=2,12,2),jj=1,2),' log D-cpu N-cpu' x1010 format(9x,'! 0 ',12(i2,2x),a)  do 1090 ii=1,inxm @ totusg(1) = totusg(1)+usg(ii,1)  totusg(2) = totusg(2)+usg(ii,2)  totusg(3) = totusg(3)+usg(ii,3) l write(6,1080) user(ii)(1:6),'!',act(ii),(usg(ii,ij),ij=1,3) 1080 format(' ',a,' ',a,' ',a,f7.1,2f6.1) 4!1090 continue ! write(6,1110) (totusg(ii),ii=1,3) !1110 format( 58x,f10.1,2f6.1) `" write(6,1010 ) ((ii,ii=2,12,2),jj=1,2) " RETURN (# END d FUNCTION INACCT( IUN, USER, ACCT, LIQUAD,LOQUAD, 1 TIMEL, TIMEC, PRINT ) ,C. C... INACCT(RUSER,RACCT,LIQUAD,LOQUAD,TIMEL,TIMEC,PRINT) .FUN. C. X CHARACTER*(*) USER, ACCT  INTEGER*4 LIQUAD(2), LOQUAD(2)  REAL TIMEL, TIMEC, PRINT C. C......... L INTEGER*2 MSGTYP, MSGSIZ  INTEGER*4 FINALSTS, PID, JOBID, TERMTIME(2)  CHARACTER RUSER*12, RACCT*8 x INTEGER*4 REST(16) C. @ INTEGER*4 CPUTIM  INTEGER*4 RPRINT  INTEGER*4 LOGIN(2) l EQUIVALENCE(REST(1),CPUTIM),(REST(2),RPRINT),(REST(8),LOGIN)  INTEGER*4 QUAD(2) 4C......... C.  INACCT = -1 ` READ( IUN, 210, ERR=9000 ) 1 MSGTYP, MSGSIZ, FINALSTS, PID, JOBID, TERMTIME ( 2 , RACCT, RUSER 2 , REST C. T 210 FORMAT( 2A2, 5A4, A8, A12, 16A4 ) C.  IF( MSGTYP.GE.1 .AND. MSGTYP.LE.3 ) THEN INACCT = MSGTYP ! PROC, BATCH, INTERACTIVE ELSE IF( MSGTYP.EQ.16 ) THEN H INACCT = 4 ! PRINT ELSE  INACCT = 0 t ENDIF C. < USER = RUSER  ACCT = RACCT C. h LOQUAD(1) = TERMTIME(1)  LOQUAD(2) = TERMTIME(2) 0 IF( MSGTYP.LE.3 ) THEN  LIQUAD(1) = LOGIN(1)  LIQUAD(2) = LOGIN(2) \ CALL JJQSUB( LOQUAD, LIQUAD, QUAD )  CALL JJQDIV( QUAD, 10 000 000, ITEMP ) $ TIMEL = ITEMP/ 60.0  TIMEC = CPUTIM/60 00.0  ELSE P LIQUAD(1) = LOQUAD(1)  LIQUAD(2) = LOQUAD(2)  TIMEL = 0.0 | TIMEC = 0.0  ENDIF DC.  IF( MSGTYP.EQ.16 ) THEN  PRINT = RPRINT p ELSE  PRINT = 0 8 ENDIF C. 9000 CONTINUE d RETURN  END d SUBROUTINE PUTUSE( MXU,MXA,USER,ACCT,PRICE,ITEM,USG,DISK,DATE ) C. ,C... PUTUSE( MXU,MXA,USER,ACCT,PRICE,ITEM,USG,DISK,DATE ) .SUB. C. C. X CHARACTER*(*) USER(MXU), ACCT(MXU)  REAL PRICE(MXA+1)  CHARACTER*(*) ITEM(MXA+1)  REAL DISK(MXU), USG(MXU,MXA)  CHARACTER*(*) DATE L CHARACTER*100 LINE  REAL TUSG(10), TDISK C......... x41 FORMAT( ' ', A12, ' ', A8, 10F10.2 ) 42 FORMAT( 25X, 10A10 ) @43 FORMAT(' ', A12, ' ', A8, 10A ) 45 FORMAT(' $',F11.2,' ', A8, 10F10.2 ) C......... lC.  WRITE( 6,41 ) '-'//DATE(1:11),' '//DATE(13:17), PRICE 4 WRITE( 6,42 ) ITEM C.  DO 290 I=1,MXU ` IF( USER(I).LE.' ' ) GOTO 295 LINE = ' ' ( IPOS = 1 DO 250 J=1,4 IF( USG(I,J).NE.0.0 ) THEN T ENCODE( 10, 245, LINE(IPOS:) ) USG(I,J) 245 FORMAT( F10.2 )  ENDIF IPOS = IPOS+10 250 CONTINUE H IF( DISK(I).NE.0.0 ) ENCODE( 10,245,LINE(IPOS:)) DISK(I) WRITE( 6,43 ) USER(I), ACCT(I), LINE(1:10*MXA+10) C. t IF( ACCT(I)(1:1).GE.'0' .AND. ACCT(I)(1:1).LE.'9' ) THEN  DO 270 J=1,MXA < TUSG(J) = TUSG(J)+USG(I,J) 270 CONTINUE  TDISK = TDISK + DISK(I) h ENDIF C. 0290 CONTINUE 295 CONTINUE C. \ DO 310 J=1,MXA  REVENUE = REVENUE + TUSG(J)*PRICE(J) $310 CONTINUE  REVENUE = REVENUE + TDISK*PRICE(MXA+1) C. P WRITE( 6,45 ) REVENUE, '..PROJ..',(TUSG(J),J=1,MXA),TDISK C.  RETURN | END d FUNCTION ISFIND( MX, ITEM, TABLE ) C. ,C... ISFIND( MX, ITEM, TABLE ) .FUN. FIND 'ITEM' IN 'TABLE' C. C. X CHARACTER*(*) ITEM, TABLE(MX) C. C.........  DO 290 ISFIND=1,MX  IF( ITEM.EQ.TABLE(ISFIND) .OR. TABLE(ISFIND).LE.' ' ) GOTO 295 L290 CONTINUE C. 295 CONTINUE x RETURN  END