C** TIMIT - COLLECT ACCOUNTING INFO ON REQUESTED PROCESSES C PROGRAM TIMIT C+ C TIMIT - C THIS PROGRAM COLLECTS RESOURCE USAGE INFORMATION ON A SPECIFIC TASK OR C GROUP OF TASKS BY GRABBING THE USERS' ACCOUNTING BLOCK IMMEDIATELY C BEFORE AND AFTER SPAWNING AND WAITING FOR THE TASK C C- BYTE TIMBUF(8),COMAND(80) EQUIVALENCE (TIMBUF,JJJJJ) ! FORCE WORD ALIGNMENT LOGICAL*1 ONCE INTEGER*4 J1,J2,JSECND,ACPU(3),ADIR(3),AQIO(3),ATIM(3),ATSK(3) DATA XMCR/6RMCR.../,IFLAG/1/ C INCLUDE 'ACNDF.FTN/-LI' C ONCE=.FALSE. INDX=1 CALL GETMCR(COMAND,ICHR) IF(ICHR.LT.0)GOTO 1 ICHR=ICHR-4 INDX=5 ONCE=.TRUE. IF(ICHR .GE. 3)GOTO 20 1 TYPE 1000 1000 FORMAT ('0TIMIT - V01 Enter task name or command line.') 10 TYPE 1010 1010 FORMAT ('$==>') ONCE=.FALSE. INDX=1 READ(5,1100,END=50,ERR=999)ICHR,COMAND 1100 FORMAT(Q,80A1) IF(ICHR.EQ.0) GOTO 50 IF(ICHR.LT.3) GOTO 10 COMAND(ICHR+1)=0 C 20 I=IGETAB(BBUFFR,128) IF(I .NE. 1) GOTO 100 ACPU(1)=BCPU ADIR(1)=BDIR ADIR(1)=ADIR(1)-3 AQIO(1)=BQIO ATSK(1)=BTAS CALL GTIM(TIMBUF) ATIM(1)=JSECND(TIMBUF) C CALL SPAWN(XMCR,,,IFLAG,,,,COMAND(INDX),ICHR) CALL STOPFR(IFLAG,IDS) C I=IGETAB(BBUFFR,128) IF (I .NE. 1) GO TO 100 ACPU(2)=BCPU ADIR(2)=BDIR AQIO(2)=BQIO ATSK(2)=BTAS CALL GTIM(TIMBUF) ATIM(2)=JSECND(TIMBUF) C ACPU(3)=ACPU(3)+ACPU(2)-ACPU(1) ADIR(3)=ADIR(3)+ADIR(2)-ADIR(1) AQIO(3)=AQIO(3)+AQIO(2)-AQIO(1) ATSK(3)=ATSK(3)+ATSK(2)-ATSK(1) IF(.NOT.ONCE)GOTO 10 C 50 CALL JTIME (ATIM(2)-ATIM(1),IH,IM,IS) WRITE(5,1200)ACPU(3),ADIR(3),AQIO(3),ATSK(3),IH,IM,IS C 1200 FORMAT(' *** RESOURCE SUMMARY ***'// 2 ' Cpu ticks: ', I9 / 3 ' Directives: ', I9 / 4 ' QIO''s: ', I9 / 5 ' Tasks Run ', I9/ 6 ' Connect time: ', I2,':',I2,':',I2 // 7) CC STOP 999 CONTINUE 100 CALL EXST (1) END C** JSECND - CONVERT TIME VECTOR TO SECONDS ABSOLUTE C INTEGER*4 FUNCTION JSECND(BUF) C+ C FUNCTION: C THIS ROUTINE CALCULATES THE TOTAL ELAPSED SECONDS FROM C 00:00:00 1 JAN '80 AND RETURNS IT AS AN INTEGER*4 VALUE C THE INPUT IS A 6 BYTE ARRAY OF BINARY VALUES, STORED AS C YEAR,MONTH,DAY,HOUR,MINUTE, AND SECOND C- BYTE BUF(6) INTEGER BASE(12) INTEGER*4 SIXTY,J24 C C.. INDEX INTO ARRAY FOR THIS FIELD PARAMETER YEAR=1,MONTH=2,DAY=3,HOUR=4,MINUTE=5,SECOND=6 C C.. DAYS TO START OF MONTH DATA BASE/0,31,59,90,120,151,181,212,243,273,304,334/ DATA SIXTY/60/,J24/24/ C C.. ENTRY POINT JSECND=BUF(SECOND)+SIXTY*(BUF(MINUTE)+SIXTY*(BUF(HOUR)+24* 1 (BUF(DAY)-1+BASE(BUF(MONTH))+365*(BUF(YEAR)-80)))) C RETURN END C** JTIME - CALC HOURS, MINUTES, SECONDS FROM I*4 SECONDS C SUBROUTINE JTIME(J,IH,IM,IS) C INTEGER*4 J,JM,JS C IH=J/3600 ! HOURS JM=IH*60 ! MINUTES IN THESE HOURS IM=J/60-JM ! REMAINDER MINUTES JS=(IM+JM)*60 ! SECONDS IM THESE MIN/HOUR IS=J-JS ! NET SECONDS RETURN END