.TITLE CPTIME .IDENT /V7.01/ ;+ ; *** CPTIME GET CPU AND CONNECT TIME ; ; THIS ROUTINE IMPLEMENTS A FORTRAN-CALLABLE SUBROUTINE "CPTIME" ; WHICH RETURNS THE TOTAL CPU TIME USED AND ELAPSED TIME, BOTH ; SINCE LOGON OR START OF BATCH JOB. ; THE CALLING SEQUENCE IS: ; ; CALL CPTIME(T1,T2) ; ; WHERE: ; T1 A REAL*4 VARIABLE TO WHICH IS RETURNED THE CPU TIME ; USED IN FLOATING SECONDS ; T2 A REAL*4 VARIABLE TO WHICH IS RETURNED THE CONNECT ; TIME IN FLOATING SECONDS ; ; BOTH ARGUMENTS MUST BE SUPPLIED. ; ; ****** N O T E ****** ; ; THE CORRECT OPERATION OF THIS ROUTINE DEPENDS ON THE CLOCK ; FREQUENCY BEING 60 CYCLES PER SECOND. IF YOUR CLOCK FREQUENCY ; IS DIFFERENT, CHANGE THE DEFINITION AT "CLKFRQ:" BELOW. ; ; FOR RSX-11M V4.0, THIS ROUTINE SHOULD BE RE-WRITTEN TO USE ; THE SDRC$ DIRECTIVE (SEND, REQUEST AND CONNECT). ; ; VERSION: V7 MAY 1981 ; ; STEVE THOMPSON ; SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA ; NY 14853 ; ;- .MCALL SDAT$S,CNCT$S,RCVD$S,RQST$S,WTSE$S F0 = %0 CPTASK: .RAD50 /CPTASK/ ; NAME OF LOGGING TASK INTERFACE TASK RSBUF: .BLKW 15. ; SEND/RECEIVE BUFFER CLKFRQ: .FLT2 60. ; TICKS PER SECOND CPTIME::SETF ; SET FLOATING MODE CLRF @2(R5) ; ZERO THE RESULTS INITIALLY CLRF @4(R5) ; SDAT$S #CPTASK,#RSBUF ; SEND REQUEST TO ACCOUNTING SYSTEM BCS 10$ ; JUST IN CASE RQST$S #CPTASK ; REQUEST INTERFACE TASK TO RUN BCS 10$ ; JUST IN CASE (MAY NOT BE INSTALLED) CNCT$S #CPTASK,#29. ; CONNECT TO INTERFACE TASK CMP $DSW,#IS.SUC ; CONNECTION SUCCESSFUL? BNE 5$ ; IF NE, MAYBE IT HAS ALREADY EXITED WTSE$S #29. ; WAIT FOR INTERFACE TASK 5$: RCVD$S ,#RSBUF ; WHEN AWAKENED, WE SHOULD HAVE SOME DATA BCS 10$ ; JUST IN CASE MOV RSBUF+6,-(SP) ; PUSH CPU TIME ON STACK MOV RSBUF+4,-(SP) ; SETL ; SET 32-BIT INTEGER MODE LDCLF (SP)+,F0 ; FLOAT INTO F0 DIVF CLKFRQ,F0 ; CONVERT TO SECONDS (DIVIDE BY 60.) STF F0,@2(R5) ; SAVE THE RESULT MOV RSBUF+12,-(SP) ; REPEAT FOR THE CONNECT TIME MOV RSBUF+10,-(SP) ; LDCLF (SP)+,F0 ; DIVF CLKFRQ,F0 ; STF F0,@4(R5) ; 10$: RETURN ; RETURN TO USER TASK .END