COMPCPE 
COMMON
          CTEXT  COMPCPE - CALCULATE PRIORITY OR ENTRY TIME.
          SPACE  4,10 
          IF     -DEF,QUAL$,1 
          QUAL   COMPCPE
          BASE   M
*COMMENT  COMPCPE - CALCULATE PRIORITY OR ENTRY TIME. 
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CPE      SPACE  4,10 
***       CPE - CALCULATE PRIORITY OR ENTRY TIME. 
* 
*         R. M. DANISCH      81/02/05.
 CPE      SPACE  4,10 
***              *CPE* CONTAINS ROUTINES TO CALCULATE A PRIORITY FROM A 
*         GIVEN ENTRY TIME AND CONVERT A PRIORITY TO AN ENTRY TIME. 
*         ASSEMBLY OF ROUTINES WITHIN THIS COMMON DECK IS CONTROLLED BY 
*         SELECTIVELY DEFINING THE FOLLOWING SYMBOLS -
*                CPR$        CAUSES ASSEMBLY OF SUBROUTINE *CPR*
*                CET$        CAUSES ASSEMBLY OF SUBROUTINE *CET*
*                IOQ$        CAUSES ASSEMBLY OF QUEUE PRIORITY CODE IN
*                            SUBROUTINE *CPR* 
  
 .CPR     IF     DEF,CPR$ 
 CPR      SPACE  4,25 
**        CPR - CALCULATE PRIORITY. 
* 
*                *CPR* CALCULATES QUEUE AND SCHEDULING PRIORITIES VIA 
*         THE FOLLOWING FORMULA - 
* 
*                PR = LB + (CT - ET) / WF 
* 
*                   WHERE    PR = CALCULATED PRIORITY 
*                            LB = LOWER BOUND PRIORITY OF SERVICE CLASS 
*                            WF = WEIGHTING FACTOR FROM JCB 
*                            CT = CURRENT TIME (SECONDS PORTION OF WORD 
*                                 *RTCL*) 
*                            ET = ENTRY TIME FROM EJT OR IOQT ENTRY 
* 
*         ENTRY  (A) = 6/  SC,12/  QT.
*                      SC    SERVICE CLASS (MUST BE .LT. *MXJC*). 
*                      QT    QUEUE TYPE (*INQT*, *EXQT* OR *OTQT*). 
*                (T1 - T2) = ENTRY TIME.
* 
*         EXIT   (A) = QUEUE PRIORITY OR SCHEDULING PRIORITY. 
*                    = 0 IF *IOQ$* IS DEFINED AND ENTRY TIME = 0. 
*                    .LT. 0 IF NO JCB IS DEFINED FOR SERVICE CLASS. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  RJC. 
* 
*         XREF   COMPRJC, COMSPIM.
* 
*         NOTE   THE LARGEST RESOLVED CLOCK DIFFERENCE IS 
*                377777.  ANYTHING OVER THAT IS ASSUMED TO BE 
*                EQUAL TO UPPER BOUND PRIORITY. 
  
  
 CPR3     LCN    0           INDICATE NO JCB FOR SERVICE CLASS
  
 CPR      SUBR               ENTRY/EXIT 
          STM    CPRA        SAVE QUEUE TYPE
          SHN    -14
          ZJN    CPR3        IF NO SERVICE CLASS
          LMN    DSSC 
          NJN    CPR0        IF NOT DEADSTART SEQUENCING SERVICE CLASS
          LMN    SSSC&DSSC   USE JCB FOR SUBSYSTEM SERVICE CLASS
 CPR0     LMN    DSSC 
          RJM    RJC         CALCULATE JCB ADDRESS
          ZJN    CPR3        IF NO JCB FOR SERVICE CLASS
          ADC    **          READ QUEUE CONTROL WORD FROM JCB 
 CPRA     EQU    *-1         (QUEUE TYPE - USED AS JCB WORD INDEX)
          CRD    CM 
  
 .IOQ     IF     DEF,IOQ$ 
  
          LDD    T1 
          ADD    T2 
          ZJN    CPRX        IF ENTRY TIME = 0
  
 .IOQ     ENDIF 
  
          LDC    SHNI+77     USE WEIGHTING FACTOR AS SHIFT COUNT
          SBD    CM+3 
          STM    CPRB 
          LDD    CM+1        SAVE LOWER AND UPPER BOUNDS
          STM    CPRC 
          LDD    CM+2 
          STM    CPRD 
          LDC    RTCL        READ REAL-TIME CLOCK 
          CRD    CM 
          SOD    CM 
          LDD    CM+1 
          ADC    10000
          SBD    T2 
          STD    CM+4 
          SHN    -14
          ADD    CM 
          SBD    T1 
          STD    CM+3 
          SCN    37 
          NJN    CPR1        IF .GT. MAXIMUM VALUE
          LDD    CM+3 
          SHN    14 
          LMD    CM+4 
 CPRB     SHN    ** 
          ADC    ** 
 CPRC     EQU    *-1         (LOWER BOUND PRIORITY) 
          SBM    CPRD 
          MJN    CPR2        IF PRIORITY .LT. UPPER BOUND 
 CPR1     LDN    0
 CPR2     ADC    ** 
 CPRD     EQU    *-1         (UPPER BOUND PRIORITY) 
          LJM    CPRX        RETURN 
  
 .CPR     ENDIF 
  
 .CET     IF     DEF,CET$ 
 CET      SPACE  4,25 
**        CET - CALCULATE ENTRY TIME. 
* 
*                *CET* CALCULATES ENTRY TIME VIA THE FOLLOWING
*         FORMULA - 
* 
*                ET = CT - (PR - LB) * WF 
* 
*                   WHERE    ET = ENTRY TIME
*                            CT = CURRENT TIME (SECONDS PORTION OF WORD 
*                                 *RTCL*) 
*                            PR = QUEUE OR SCHEDULING PRIORITY
*                            LB = LOWER BOUND PRIORITY OF SERVICE CLASS 
*                            WF = WEIGHTING FACTOR FROM JCB 
* 
*                IF PR = 0 THEN ET = 0. 
*                IF PR .LT. LB THEN ET = CT.
* 
*         ENTRY  (A) = 6/  SC,12/  QT.
*                      SC    SERVICE CLASS (MUST BE .LT. *MXJC*). 
*                      QT    QUEUE TYPE (*INQT*, *EXQT*, OR *OTQT*).
*                (T1) = QUEUE PRIORITY OR SCHEDULING PRIORITY.
* 
*         EXIT   (T1 - T2) = ENTRY TIME.
*                          = 0 IF PRIORITY = 0. 
* 
*         USES   T1, T2, CM - CM+4. 
* 
*         CALLS  RJC. 
* 
*         XREF   COMPRJC, COMSPIM.
* 
*         NOTE   *CET* DOES NOT CONSIDER THE CASE WHERE THE DESIRED 
*                PRIORITY IS GREATER THAN THE UPPER BOUND FOR THE 
*                SERVICE CLASS. *CPR* WILL ADJUST THE PRIORITY
*                APPROPRIATELY WHEN IT IS BEING CALCULATED. 
* 
*                THE MINIMUM *RTCL* VALUE MUST EXCEED 377740
*                AS PRESET BY *SET* AND MAINTAINED BY *MTR*.
  
  
 CET2     STD    T2 
  
 CET      SUBR               ENTRY/EXIT 
          STD    T2          SAVE QUEUE TYPE
          SHN    -14
          LMN    DSSC 
          NJN    CET0        IF NOT DEADSTART SEQUENCING SERVICE CLASS
          LMN    SSSC&DSSC   USE JCB FOR SUBSYSTEM SERVICE CLASS
 CET0     LMN    DSSC 
          RJM    RJC         CALCULATE JCB ADDRESS
          ADD    T2          READ QUEUE CONTROL WORD FROM JCB 
          CRD    CM 
          LDD    CM+3        USE WEIGHTING FACTOR AS SHIFT COUNT
          ADD    TH          *SHNI* INSTRUCTION 
          ERRNZ  SHNI-1000
          STM    CETA 
          LDD    T1 
          ZJN    CET2        IF PRIORITY = 0
          SBD    CM+1 
          PJN    CET1        IF PRIORITY .GE. LOWER BOUND 
          LDN    0
 CET1     SHN    ** 
 CETA     EQU    *-1
          STD    T2 
          SHN    -14
          STD    T1 
          LDC    RTCL        READ REAL-TIME CLOCK 
          CRD    CM 
          SOD    CM 
          LDD    CM+1 
          ADC    10000
          SBD    T2 
          STD    T2          SET ENTRY TIME 
          SHN    -14
          ADD    CM 
          SBD    T1 
          STD    T1 
          LJM    CETX        RETURN 
  
 .CET     ENDIF 
 CET      SPACE  4,10 
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CPR$     IF     DEF,CPR$ 
 CPR      EQU    /COMPCPE/CPR 
 CPR$     ENDIF 
 CET$     IF     DEF,CET$ 
 CET      EQU    /COMPCPE/CET 
 CET$     ENDIF 
 QUAL$    ENDIF 
          ENDX
