*DECK DB$CPT
          IDENT  DB$CPT 
          ENTRY  DB$CPT,DB$IOT,DB$CLK,DB$NCPT,DB$NIOT,DB$NCLK 
*#
* *       DB$CPT  SYSTEM TIME ACCESS             PAGE  1
* *       R.C.KLOENNE                            2/11/77
* *       W.R. SMITH                            10/09/80
* DC      PURPOSE 
*         GET CP AND IO TIME OF CDCS FOR NOS AND NOS/BE 
* 
* DC      ENTRY CONDITIONS
* 
*           ONE PARAMETER STATUS ADDRESS - LOC(STATUS)
* 
*           6 ENTRY POINTS :    1.DB$CPT -GET CP-TIME (NOS/BE)
* 
*                               2.DB$IOT -GET IO-TIME (NOS/BE)
*                                         RETURN ZERO (NOS) 
*                               3.DB$NCPT -GET CP TIME  (NOS) 
* 
*                               4.DB$NIOT -GET IO TIME  (NOS) 
* 
*                               5.DB$NCLK -GET REAL TIME DIFFERENCE 
* 
*                               6.DB$CLK -DUMMY ROUTINE FOR NOS/BE
* 
* DC       EXIT CONDITIONS
* 
*             TIME PARAMETER RETURNED IN LOC(STATUS)
* 
* 
* DC      SYSTEM  MACROS CALLED 
* 
*             1. TIME (NOS/BE VERSION) - GET NOS/BE CP TIME 
* 
*             2. IOTIME - GET NOS/BE IO TIME
* 
*             3. GETJA - GET NOS CP/IO DATA BLOCK 
* 
*             4. RTIME - GET NOS REAL CLOCK TIME SINCE DEADSTART
* 
*             5. TIME (NOS VERSION) - GET NOS CP TIME 
* 
* DC      TEXTS NEEDED
* 
*     THE MACROS CALLED WITHIN THIS MODULE ARE EXPANDED FROM OPL
*     COMMON DECKS ON NOS VIA THE XTEXT COMPASS PSEUDO INSTRUCTION
*     AND FROM THE SYSTEM TEXT OVERLAY *IOTEXT* ON NOS/BE.  ALTHOUGH
*     THE NOS MACROS ALSO RESIDE ON SYSTEM TEXT OVERLAY *NOSTEXT* 
*     IT WAS NECESSARY TO EXPAND THEM FROM OPL INSTEAD.  THE
*     EXPLANATION OF WHY OPL MUST BE USED IS AS FOLLOWS 
* 
*       THE NOS VERSION OF THE MACRO *RTIME* IS USED IN DB$NCLK TO
*       RETURN ELAPSED REAL CLOCK TIME.  IN ADDITION TO THE NOS 
*       VERSION OF *RTIME* A NOS/BE VERSION OF *RTIME* EXISTS IN
*       THE NOS SYSTEM TEXT OVERLAY *IOTEXT* AND IS SUPPORTED BY NOS. 
*       SINCE THE COMPASS CONTROL STATEMENT USED IN BUILDING CDCS FOR 
*       NOS REFERENCES BOTH OF THESE SYSTEM TEXT OVERLAYS AND SINCE 
*       *IOTEXT* IS THE LAST TEXT OVERLAY REFERENCED, COMPASS 
*       EXPANDS THE *RTIME* MACRO FROM *IOTEXT*.  WHEN THE NOS/BE 
*       VERSION OF *RTIME* IS USED BY DB$NCLK IT CAUSES AN ERRONEOUS
*       REAL CLOCK TIME TO BE RETURNED.  THIS IN TURN CAUSES DB$ACM1 TO 
*       CALCULATE AN INCORRECT CPU UTILIZATION FIGURE.
* 
*     THE NOS MACROS CALLED IN THIS MODULE ARE EXPANDED FROM OPL COMMON 
*     DECKS AS LISTED BELOW 
* 
*       CPCOM - CONTAINS MACROS *RTIME* AND *TIME*
* 
*       COMCMAC - CONTAINS MACRO *GETJA*
* 
*       COMSSRU - CONTAINS MACROS USED IN DEFINING THE VARIABLES
*                 S2SR, S3SR, AND S4SR WHICH ARE REFERENCED IN
*                 DB$NIOT.  THESE VARIABLES REPRESENT INSTALLATION
*                 DEFINED MULTIPLIER VALUES USED FOR THE CALCULATION
*                 OF IO TIME. 
* 
*     THE NOS/BE MACROS USED IN THIS MODULE ARE EXPANDED FROM THE 
*     FOLLOWING SYSTEM TEXT OVERLAY AS LISTED BELOW 
* 
*       IOTEXT  - CONTAINS THE MACROS *IOTIME* AND *TIME* 
* 
* 
* 
* DC       DESCRIPTION
* 
*     THE FIVE ENTRY POINTS, DB$CPT, DB$IOT, DB$NCPT, DB$NIOT,
*     AND DB$NCLK ARE USED TO OBTAIN THE SYSTEM CP, IO, AND REAL
*     TIMES FOR ACCOUNTING PURPOSES. THE ROUTINE DB$CLK IS INCLUDED 
*     ONLY FOR COMPATIBILITY PURPOSES FOR THE NOS/BE SYSTEM.
* 
* 
*#
          IPARAMS 
          SST 
          LIST   F
          IFC    EQ,*"OS.NAME"*KRONOS*,1
 NOS.     EQU    0
  
 DB$CPT   EQ     *+1S17      ENTRY/EXIT 
          SA1    X1 
          IF    -DEF,NOS.,1 
          TIME   X1           SEND  CP TIME (NOS/BE)
          EQ     DB$CPT 
  
 DB$IOT   EQ     *+1S17      ENTRY/EXIT 
          SA1    X1 
          IF    -DEF,NOS.,1 
          IOTIME X1          SEND IO TIME (NOS/BE)
          IF     DEF,NOS.,2 
          MX6    0           SEND ZERO (NOS)
          SA6    X1 
          EQ     DB$IOT 
  
 DB$CLK   EQ     *+1S17 
          EQ     DB$CLK 
  
 NOS      IF     DEF,NOS. 
 OPL      XTEXT  CPCOM
 OPL      XTEXT  COMSSRU
 OPL      XTEXT  COMCMAC
* 
*         WORK AREA USED BY DB$NIOT AND DB$NCLK 
* 
 HOLD     BSSZ   9
  
* 
*     DB$NCPT RETURNS THE ACCUMULATED CENTRAL PROCESSOR TIME USED 
*     BY THE CDCS SCP 
* 
 DB$NCPT  EQ     *+1S17 
          SA1    X1          X1 = ADDRESS OF WHERE TO STORE CP TIME 
          TIME   X1          STORE ACCUMULATED CP TIME AT ADDR X1 
          EQ     DB$NCPT
  
 DB$NIOT  EQ     *+1S17 
          SA1    X1 
          SX6    X1 
          SA6    HOLD 
          GETJA  HOLD+1 
          SA1    HOLD+3      MS (20 BITS),MT(20 BITS) ,PF (20 BITS) 
          MX0    40 
          LX1    20          EXTRACT IO TIME
          BX2    -X0*X1      MS 
          LX1    20 
          BX3    -X0*X1      MT 
          LX1    20 
          BX4    -X0*X1      PF 
          SX5    S2SR 
          IX2    X5*X2       S2 X MS
          SX6    S3SR 
          IX3    X6*X3       S3 X MT
          SX7    S4SR 
          IX4    X7*X4       S4 X PF
          IX6    X2+X3
          IX5    X6+X4       (X5) = IO$ = (S2*MS+S3*MT+S4*PF) 
                             IO$ = 10*(IO TIME IN MILLISECONDS) 
          SX0    10000       (X0) = 10000 
          SX7    10          (X7) = 10
          PX4    B0,X0
          NX3    B0,X4       (X3) = 10000.0 
          PX4    B0,X5       (X4) = FLOAT(IO$)
          FX2    X4/X3       (X2) = IO$/10000.0 
          PX4    B0,X7
          NX7    B0,X4       (X7) = 10.0
          UX4    B2,X2
          LX6    B2,X4       (X6) = IO$/10000 
          DX4    X6*X0       (X4) = 10000*(IO$/10000) 
          IX3    X5-X4       (X3) = REMAINDER(IO$/10000)
          PX0    B0,X3
          FX2    X0/X7       (X2) = REMAINDER/10.0
          UX0    B2,X2
          LX7    B2,X0       (X7) = REAMINDER/10 = MILLISECONDS 
          LX6    12 
          IX6    X6+X7       (X6) = 48/SECONDS,12/MILLISECONDS
          SA2    HOLD        SEND BACK IO TIME
          SA6    X2 
          EQ     DB$NIOT
* 
*     DB$NCLK PERFORMS THE CALLING OF THE SYSTEM REAL TIME ROUTINE
*     RTIME ON THE NOS SYSTEM. ONCE THE SYSTEM REAL TIME IS OBTAINED, 
*     THE DIFFERENCE OF THIS REAL TIME MINUS THE ONE STORED IN
*     VARIABLE CLOCKT DEFINED WITH INITIAL VALUE OF 0 IN DB$NCLK
*     IS CALCULATED AND THEN STORED BACK INTO CLOCKT. THIS DIFFERENCE 
*     IS ALSO RETURNED TO THE CALLING ROUTINE.
* 
  
 CLOCKT   BSSZ   1
 DB$NCLK  EQ     *+1S17 
          SA1    X1 
          SX7    X1          (X7) = ADDRESS OF THE ARGUMENT 
          SA7    HOLD        HOLD = ADDRESS OF THE ARGUMENT 
          RTIME  HOLD+1 
          SA2    HOLD+1 
          MX0    24          FORM THE MASK TO EXTRACT MILLISECONDS
          BX2    -X0*X2      (X2) = MILLISECONDS PORTION
          SA1    CLOCKT      (X1) = CONTENT OF THE PREVIOUS STORED TIME 
          IX6    X2-X1       (X6) = THE CLOCK TIME DIFFERENCE 
          SA6    A1          STORE THE DIFFERENCE IN CLOCKT 
          SA2    HOLD 
          SA6    X2          SEND BACK THE DIFFERENCE TO CALLING ROUTINE
          EQ DB$NCLK
  
NOS       ELSE
 DB$NCPT  EQU    DB$CPT            MAKE NOS = NOS/BE
 DB$NIOT  EQU    DB$IOT            MAKE NOS = NOS/BE
 DB$NCLK  EQU    DB$CLK 
 NOS      ENDIF 
          END 
