COMPVSP 
COMMON
          CTEXT  COMPVSP - VALIDATE SERVICE CLASS PARAMETER.
          SPACE  4
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   COMPVSP
 QUAL$    ENDIF 
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       COMPVSP - VALIDATE SERVICE CLASS PARAMETER. 
* 
*         B. M. SLIWINSKI.   82/10/04.
          SPACE  4,10 
***       *COMPVSP* VALIDATES THE SERVICE CLASS PARAMETER ON COMMANDS.
* 
*         IF *VSP$* IS DEFINED, THE TWO CHARACTER SERVICE CLASS 
*         PARAMETER IS CHECKED FOR VALIDITY.
* 
*         IF *CUV$* IS DEFINED, *COMPVSP* WILL ALSO CHECK IF THE
*         SERVICE CLASS IS VALID FOR THE USER.  THAT IS, IT WILL
*         CHECK IF THE SERVICE CLASS IS DEFINED IN THE VALIDATION 
*         MASK OF THE USER AND IN THE *SCT* ENTRY FOR THE CURRENT 
*         ORIGIN TYPE OF THE USER.  FOR SUBSYSTEMS AND SSJ= JOBS, ONLY
*         THE ORIGIN TYPE *SCT* ENTRY WILL BE CHECKED.
*         ALSO, IF *CUV$* IS DEFINED, THE CALLING PROGRAM MUST DEFINE 
*         THE *SCLASS* MACRO WITH A REMOTE BLOCK DEFINITION OF THE
*         FOLLOWING FORMAT.  SEE *COMSSCD* FOR MORE INFORMATION.
*                   .A       IFC       NE,$NM$SSSC$ 
*                   .SCLVSP  RMT
*                            INDEX     NM,MN_MK 
*                   .SCLVSP  RMT
*                   .A       ENDIF
* 
*         IF *CJL$* IS DEFINED, *COMPVSP* WILL CHECK IF THE NUMBER OF 
*         JOBS CURRENTLY IN THAT SERVICE CLASS IS AT THE SERVICE LIMIT. 
          SPACE  4,10 
**        VSP - VALIDATE SERVICE CLASS PARAMETER. 
* 
*         ENTRY  (A) = TWO CHARACTER DISPLAY CODE SERVICE CLASS 
*                      MNEMONIC RIGHT JUSTIFIED (IF *VSP$* DEFINED).
*                (A) = SERVICE CLASS VALUE (IF *VSP$* NOT DEFINED). 
*                (OT) = ORIGIN TYPE (IF *CUV$* DEFINED).
*                (T3) .NE. 0 IF SUBSYSTEM OR SSJ= JOB (*CUV$* DEFINED). 
*                (CN+2 - CN+4) = SERVICE CLASS VALIDATION MASK. 
* 
*         EXIT   (A) = 0 IF NO ERROR. 
*                    = 1 IF UNDEFINED SERVICE CLASS MNEMONIC. 
*                    = 2 IF SERVICE CLASS NOT VALID FOR USER. 
*                    = 3 IF SERVICE CLASS AT SERVICE LIMIT. 
*                (T2) = SERVICE CLASS VALUE IF NO ERROR.
*                (CN) = JOB COUNT FOR SERVICE CLASS (*CJL$* DEFINED). 
* 
*         USES   T1, T2, CM - CM+4, CN - CN+4.
* 
*         CALLS  RJC. 
* 
*         XREF   COMPRJC, COMSSCD.
  
  
 VSP      SUBR               ENTRY/EXIT 
 VSP$     IF     DEF,VSP$ 
          STD    T1          SAVE SERVICE CLASS 
          LDN    1           INITIALIZE TABLE INDEX 
          STD    T2 
 VSP1     LDM    TSCP,T2     CHECK FOR VALID SERVICE CLASS
          ZJN    VSP2        IF END OF TABLE
          LMD    T1 
          ZJN    VSP3        IF MATCH FOUND 
          AOD    T2          INCREMENT TABLE ENTRY
          UJN    VSP1        CHECK NEXT ENTRY 
  
 VSP2     LDN    1           INDICATE SERVICE CLASS NOT DEFINED 
          UJN    VSPX        RETURN 
  
 VSP3     BSS    0           CONTINUE VALIDATION
 VSP$     ELSE
          STD    T2          SAVE SERVICE CLASS 
 VSP$     ENDIF 
  
 CUV$     IF     DEF,CUV$ 
          LDD    T2 
          SBN    MXJC 
          MJN    CUV1        IF VALID SERVICE CLASS 
          LDN    1           INDICATE SERVICE CLASS NOT DEFINED 
          UJP    VSPX        RETURN 
  
 CUV1     LDN    4           DETERMINE BYTE INDEX 
          STD    T4 
          LDD    T2 
          SBN    12D
          MJN    CUV2        IF NOT CORRECT BYTE
          SOD    T4          SET BYTE INDEX 
 CUV2     LDK    JBCP        GET JOB CONTROL AREA POINTER 
          CRD    CM 
          LDD    CM          GET *SCT* ENTRY FOR ORIGIN TYPE
          SHN    14 
          ADD    CM+1 
          ADD    OT 
          CRD    CM 
          LDM    TSCM,T2     GET SERVICE CLASS MASK BIT 
          ZJN    CUV3        IF INVALID SERVICE CLASS 
          STM    CUVA 
          STM    CUVB 
          LDM    CM,T4       CHECK *SCT* ENTRY
          LPC    *
 CUVA     EQU    *-1         (MASK BIT) 
          ZJN    CUV3        IF NOT VALID 
          LDD    CP          GET ORIGIN TYPE OF CALLER
          ADK    JOTW 
          CRD    CM 
          LDD    CM+3 
          LPN    17 
          LMK    SYOT 
          NJN    CUV2.1      IF NOT SYSTEM ORIGIN JOB 
          LDD    T3 
          NJN    CUV4        IF SUBSYSTEM OR SSJ= JOB 
 REL$     IF     DEF,REL$ 
 CUV2.1   LDM.   CN,T4       CHECK VALIDATION MASK
 REL$     ELSE
 CUV2.1   LDM    CN,T4       CHECK VALIDATION MASK
 REL$     ENDIF 
          LPC    *
 CUVB     EQU    *-1         (MASK BIT) 
          NJN    CUV4        IF VALID SERVICE CLASS 
 CUV3     ADN    2           INDICATE SERVICE CLASS NOT VALID FOR USER
          UJP    VSPX        RETURN 
  
 CUV4     BSS    0           CONTINUE VALIDATION
 CUV$     ENDIF 
  
 CJL$     IF     DEF,CJL$ 
          LDD    T2 
          RJM    RJC         READ JOB CONTROL WORD
          ZJN    CJL1        IF NO SERVICE CLASS DEFINED
          ADN    SVJT        GET SERVICE LIMIT
          CRD    CM 
          ADN    JCTT-SVJT
          CRD    CN 
          LDD    CN 
          SBD    CM+3 
          MJN    CJL2        IF BELOW LIMIT 
          LDN    2           INDICATE SERVICE CLASS FULL
 CJL1     ADN    1
          UJP    VSPX        RETURN 
  
 CJL2     BSS    0           INDICATE NO ERROR
 CJL$     ENDIF 
  
          LDN    0           INDICATE NO ERROR
          UJP    VSPX        RETURN 
  
 CUV$     IF     DEF,CUV$ 
 TSCM     SPACE  4,10 
**        TSCM - TABLE OF SERVICE CLASS MASK BIT DEFINITIONS. 
* 
*         THIS TABLE IS INDEXED BY SERVICE CLASS. 
  
  
 TSCM     INDEX 
          LIST   D
 .SCLVSP  HERE
          INDEX  MXSC 
          LIST   *
 CUV$     ENDIF 
 VSP$     IF     DEF,VSP$ 
 TSCP     SPACE  4,10 
**        TSCP - TABLE OF SERVICE CLASS PARAMETERS. 
  
  
 TSCP     BSS    0
          DATA   H+"NMSC"+
          CON    0           END OF TABLE 
 VSP$     ENDIF 
          SPACE  4
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 VSP      EQU    /COMPVSP/VSP 
 QUAL$    ENDIF 
          ENDX
