COMPVMS 
COMMON
          CTEXT  COMPVMS - VALIDATE MASS STORAGE ORDINAL. 
          IF     -DEF,QUAL$,1 
          QUAL   COMPVMS
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       VMS - VALIDATES A MASS STORAGE ORDINAL FOR NON - SYSTEM USE.
*         R. L. CLAESON      75/02/15.
          SPACE  4
***              VMS VALIDATES A MASS STORAGE ORDINAL FOR NON - SYSTEM
*         USE.
* 
*         A DEVICE WILL BE VALIDATED FOR READ AND/OR WRITE DEPENDING
*         UPON THE CONDITIONS IN THE FOLLOWING TABLE.  A DEVICE WHICH 
*         IS READ VALID MAY BE READ SAFELY BY A NON - STANDARD MASS 
*         STORAGE DRIVER WITHOUT INTERFERING WITH SYSTEM OPERATION. 
* 
*         A DEVICE WHICH IS WRITE VALID MAY BE SAFELY MODIFIED BY A 
*         NON-STANDARD MASS STORAGE DRIVER AS LONG AS MST TABLES
*         ARE PROPERLY MAINTAINED.  IF NOT THE DEVICE MUST BE 
*         REINITIALIZED BEFORE USE BY THE OPERATING SYSTEM. 
* 
*         A DEVICE WHICH IS FOUND BUT NOT READ OR WRITE VALID MAY 
*         BE USED ONLY AFTER REVALIDATION WITH THE NEW PARAMETERS 
*         RETURNED BY THE FIRST VALIDATION REQUEST.  THE USER IS
*         RESPONSIBLE FOR DETERMINING THAT THE NEW PARAMETERS WILL
*         ALLOW THE ROUTINE TO CONTINUE PROPERLY AS THE DEVICE TYPE,
*         CHANNEL, EQUIPMENT, UNIT, EST ORDINAL MAY HAVE CHANGED FROM 
*         THE REQUESTED CHANNEL ETC.  EXTREME CARE MUST BE EXERCISED BY 
*         THE USER IF HE DECIDES TO REVALIDATE WITH PARAMETERS
*         RETURNED FOLLOWING A FOUND BUT NOT READ OR WRITE VALID
*         RESPONSE. 
* 
* 
*         VALIDATION BY THIS COMMON DECK DOES NOT RELIEVE THE USER FROM 
*         USING THE SYSTEM CHANNEL INTERFACE TO MAINTAIN SYSTEM 
*         INTEGRITY.
* 
* 
*         1)  A DEVICE IS FOUND AND READ VALID IF - 
* 
*                            REQUEST         EST ENTRY
* 
*                A)          THE DEVICE IS MASS STORAGE.
*                B)          EQ         =    EQ 
* 
* 
*                THE FOLLOWING CONDITIONS APPLY IF CC .LT. 40B. 
*                C)          CC         =    CC 
*                D)   E = E  (IGNORED FOR *DI* DRIVER DEVICES)
*                E)          UU         =    UU 
* 
*                THE FOLLOWING CONDITION APPLIES IF CC = 40.
*                F)          THE DEVICE MUST BE SINGLE SPINDLE. 
* 
* 
*         2)  A DEVICE IS FOUND AND READ AND WRITE VALID IF - 
* 
* 
*             I) THE DEVICE IS NOT SHARED.
*                            - OR - 
*             II)THE DEVICE IS SHARED AND GLOBAL UNLOAD IS SET. 
*                            - AND -
*                A)          THE DEVICE IS *OFF*. 
*                            - AND -
*                B)          THE DEVICE IS *REMOVABLE*. 
*                            - AND -
*                C)          THE DEVICE IS *NOT IN USE*.
*                            - AND -
*                D)          THE DEVICE IS *UNAVAILABLE FOR PF ACCESS*. 
* 
* 
*                - OR-
* 
* 
*             I) THE DEVICE IS NOT SHARED.
*                            - OR - 
*             II)THE DEVICE IS SHARED AND GLOBAL UNLOAD IS SET. 
*                            - AND -
*                A)          THE DEVICE IS *OFF*. 
*                            - AND- 
*                B)          THE DEVICE IS *REMOVABLE*. 
*                            - AND -
*                C)          THE DEVICE IS *NOT IN USE*.
*                            - AND -
*                D)          THE DEVICE IS TO BE FULL INITIALIZED.
*                            - AND -
*                E)          THE DEVICE HAS FORMAT PENDING. 
*                            - AND -
*                F)          THE DIRECT ACCESS FILE USER COUNT = 0. 
* 
*         3)  THE DEVICE WILL BE FOUND BUT NOT READ OR WRITE VALID IF 
*         THE DEVICE IS NOT MASS STORAGE OR THE DEVICE TYPES DO NOT 
*         MATCH.
* 
* 
*         4)  ANY DEVICE WHICH IS NOT FOUND MAY BE USED BY THE CALLER 
*         IF HE USES THE STANDARD SYSTEM CHANNEL INTERFACE. 
* 
* 
*         5)  ANY DEVICE WHICH IS FOUND ON A CHANNEL WITH A DEDICATED 
*         EQUIPMENT SUCH AS THE SYSTEM DISPLAY WILL BE FOUND AND NOT
*         READ OR WRITE VALID.  THE EST ORDINAL RETURNED WILL BE 7777.
* 
* 
*         6)  ANY DEVICE WHICH IS FOUND ON A NON - EXISTENT CHANNEL 
*         WILL ALSO BE FOUND AND NOT READ OR WRITE VALID AND ORDINAL
*         7777 WILL BE RETURNED.
* 
* 
* 
* 
*         ENTRY  (T1) = REQUIRED CHANNEL. 
*                     = 40 IF (T3) = EST ORDINAL. 
*                (T2) = EQUIPMENT (CONTROLLER) NUMBER.
*                (T3) = DESIRED UNIT. 
*                     = EST ORDINAL IF (T1) = 40. 
*                (RU) = RELATIVE ORDINAL OF MULTISPINDLE GROUP. 
*                (DT) = DEVICE TYPE.
* 
*         EXIT   (A) = 0  IF DEVICE NOT IN EST OR THE ENTRY IS 0. 
*                (A) = NECCUU  IF DEVICE IN EST.
* 
*                            N = 4 IF DEVICE IN EST.
*                              = 5 IF DEVICE IS READ VALID. 
*                              = 6 IF WRITE VALID (NOT USED). 
*                              = 7 IF READ AND WRITE VALID. 
* 
*                (T1) = CC OR 0000. 
*                (T2) = E OR 0000.
*                (T3) = UU OR 0000. 
*                (CM - CM+4) = EST ENTRY FOR DEVICE.
*                (T8) = STATUS CODE (N).
*                (CN - CN+4) = MST WORD *STLL* OR *ACGL*. 
*                (DT) = DEVICE TYPE OR 0000.
*                (OD) = EST ORDINAL OF THE DEVICE OR 7777.
*                (RU) = RELATIVE ORDINAL OF UNIT IN MULTISPINDLE UNIT.
* 
*         THE VALUES OF 0000 FOR THE CHANNEL, EQUIPMENT, UNIT, DEVICE 
*         TYPE AND 7777 FOR THE EST ORDINAL ARE SET IF THE DEVICE IS
*         NOT IN THE EST OR THE EST ENTRY IS EMPTY OR THE PHYSICAL
*         PARAMETERS DO NOT MATCH.
* 
* 
*         USES   DT, OD, T8, T9, CM - CM+4, CN - CN+4, T1 - T7. 
* 
*         CALLS  BCT, VMC, VME. 
  
 VMS1     RJM    VMC         CHECK MASS STORAGE FOR DEVICE
  
 VMS      SUBR               ENTRY/EXIT 
          LDN    ESTP        READ EST POINTER 
          CRD    T4 
          RJM    BCT         BUILD AVAILABLE CHANNEL TABLE
          LDD    T1          CHECK CHANNEL REQUESTED
          SHN    21-5 
          PJN    VMS1        IF NOT EST ORDINAL REQUEST 
          LDD    T3          SET EST ORDINAL
          STD    OD 
          RJM    VME         VALIDATE EST ORDINAL 
          UJN    VMSX        RETURN 
 VMC      SPACE  4,10 
**        VMC - VALIDATE MASS STORAGE CHANNEL.
* 
*         ENTRY  (T1) = CHANNEL.
*                (T2) = EST ORDINAL.
*                (T3) = UNIT NUMBER.
*                (T6) = LAST EST ORDINAL + 1. 
*                (T7) = LAST MASS STORAGE ORDINAL + 1.
*                (DT) = DEVICE TYPE.
* 
*         EXIT   (A) = 0  IF DEVICE NOT IN EST. 
*                (OD) = 7777 IF DEVICE NOT IN EST.
* 
*         USES   DT, OD, T1, T2, T3, T8, CM - CM+4. 
* 
*         CALLS  CCE, CEE, CUE, FAR, VME. 
* 
*         MACROS SFA. 
  
  
 VMC7     RJM    VME         VALIDATE EST ENTRY 
  
 VMC      SUBR               ENTRY/EXIT 
          LDN    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    OD 
 VMC1     SFA    EST,OD      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          RJM    CCE         CHECK CHANNEL EQUIVALENCE
          NJN    VMC4        IF CHANNELS DO NOT MATCH 
          RJM    CEE         CHECK EQUIPMENT EQUIVALENCE
          NJN    VMC4        IF EQUIPMENTS DO NOT MATCH 
 VMC3     RJM    CUE         CHECK UNIT EQUIVALENCE 
          ZJN    VMC7        IF UNIT MATCHES
  
 VMC4     AOD    OD 
          LMD    T6 
          NJN    VMC1        IF MORE EST ENTRIES
          RJM    CDC         CHECK FOR DEDICATED CHANNEL
          NJN    VMC5        IF DEDICATED OR NON - EXISTENT CHANNEL 
          LCN    0           RETURN (OD) = 7777 FOR NON-EXISTENT DEVICE 
          STD    OD 
          LDN    0
          STD    T1 
          STD    T2 
          STD    T3 
          STD    T8 
          STD    DT 
          UJN    VMC6        RETURN 
  
 VMC5     LDN    4           SET FOUND BUT NOT READ OR WRITE VALID
          STD    T8 
          LCN    0           RETURN (OD) = 7777 FOR INVALID DEVICE
          STD    OD 
          RJM    FAR         FORMAT A - REGISTER
 VMC6     LJM    VMCX        RETURN 
 VME      SPACE  4,20 
**        VME - VALIDATE EST ORDINAL FOR NON - SYSTEM USE.
* 
*         VALIDATION IS AS DEFINED IN ROUTINE *VMS* IN THIS COMMON
*         DECK. 
* 
*         ENTRY  (T1) = CHANNEL.
*                (T2) = PHYSICAL EQUIPMENT. 
*                (T3) = UNIT OR EST ORDINAL IF CHANNEL = 40B. 
*                (T6) = LAST EST ORDINAL + 1. 
*                (T7) = LAST MASS STORAGE ORDINAL + 1.
*                (DT) = DEVICE TYPE.
*                (OD) = EST ORDINAL.
* 
*         EXIT   (A) = NECCUU.
*                            N = 0 IF NOT IN EST  AND  (A) = 0. 
*                            N = 4 IF FOUND IN EST. 
*                            N = 5 IF FOUND AND READ IS VALID.
*                            N = 6 IF FOUND AND WRITE IS VALID. 
*                            N = 7 IF FOUND AND READ AND WRITE ARE
*                            VALID. 
* 
*                (T1) = CHANNEL IN EST OR 0000. 
*                (T2) = EQUIPMENT (CONTROLLER) NUMBER IN EST OR 0000. 
*                (T3) = UNIT NUMBER OR 0000.
*                (CM - CM+4) = EST ENTRY FOR DEVICE.
*                (T8) = STATUS CODE (N).
*                (CN - CN+4) = MST WORD *STLL* FOR DEVICE.
*                (DT) = DEVICE TYPE FOUND IN EST. 
*                (OD) = EST ORDINAL OF DEVICE.
*                (RU) = RELATIVE UNIT OF A GROUP TYPE DEVICE. 
* 
*         THE VALUES OF 0000 FOR THE CHANNEL, EQUIPMENT, UNIT, DEVICE 
*         TYPE AND 7777 FOR THE EST ORDINAL ARE SET IF THE DEVICE IS
*         NOT FOUND IN THE EST OR IF THE EST ENTRY IS EMPTY OR THE
*         PHYSICAL PARAMETERS DO NOT MATCH. 
* 
*         USES   DT, OD, T1, T2, T3, T8, T9, CM - CM+4, CN - CN+4.
* 
*         CALLS  CCE, CDC, CEE, CUE, FAR, SPP, SUN. 
* 
*         MACROS SFA. 
  
  
 VME11    LCN    0           RETURN (OD) = 7777 
          STD    OD 
          LDN    0           SET NON - EXISTENT DEVICE
          STD    T1 
          STD    T2 
          STD    T3 
          STD    T8 
          STD    DT 
  
 VME      SUBR               ENTRY/EXIT 
          LDD    OD          CHECK FOR VALID ENTRY
          SBD    T6 
          PJN    VME11       IF .GT. MAXIMUM EST ENTRY
          SFA    EST,OD      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+3        CHECK FOR DEFINED ORDINAL
          ZJN    VME11       IF ORDINAL NOT DEFINED 
          LDD    OD          CHECK ORDINAL
          SBD    T7 
          PJN    VME1        IF .GT. MASS STORAGE EST ORDINAL 
          LDD    CM 
          SHN    21-13
          PJN    VME1        IF NOT MASS STORAGE
          LDD    CM+3        CHECK DEVICE TYPE
          LMD    DT 
          ZJN    VME2        IF CORRECT DEVICE TYPE 
 VME1     LDN    4           SET FOUND AND NOT READ OR WRITE VALID
          STD    T8 
          RJM    SPP         SET NEW PHYSICAL PARAMETERS
          LJM    VME10       RETURN 
  
 VME2     LDD    T1          CHECK EST REQUEST
          SHN    21-5 
          PJN    VME2.1      IF NOT EST REQUEST 
          LJM    VME6        PROCESS EST REQUEST
  
 VME2.1   RJM    CCE         CHECK CHANNEL EQUIVALENCE
 VME3     NJN    VME1        IF CHANNELS DO NOT MATCH 
          LDD    CM          CHECK FOR *LDAM* DEVICE
          SHN    21-7 
          MJN    VME5        IF *LDAM* DEVICE 
          RJM    CEE         CHECK EQUIPMENT EQUIVALENCE
          NJN    VME1        IF EQUIPMENTS DO NOT MATCH 
 VME5     RJM    CUE         CHECK FOR UNIT EQUIVALENCE 
          NJN    VME1        IF UNITS DO NOT MATCH
          RJM    CDC         CHECK FOR DEDICATED CHANNEL
          ZJN    VME8        IF CHANNEL EXISTS OR NON - DEDICATED 
          LDN    4           SET FOUND BUT NOT READ OR WRITE VALID
          STD    T8 
          LCN    0           RETURN (OD) = 7777 
          STD    OD 
          LJM    VME10       CONTINUE 
  
 VME6     RJM    SPP         SET PHYSICAL PARAMETERS
          RJM    SUN         SET MULTISPINDLE UNIT NUMBER 
          NJN    VME3        IF NOT VALID SPINDLE 
 VME8     LDN    5           SET FOUND AND READ VALID 
          STD    T8 
          LDD    CM+4        READ DEVICE STATUS 
          SHN    3
          ADN    ACGL        READ GLOBAL STATUS 
          CRD    CN 
          LDD    CM          CHECK FOR SHARED DEVICE
          SHN    21-11
          PJN    VME8.1      IF NOT SHARED
          LDD    CN+4        CHECK GLOBAL UNLOAD
          SHN    21-5 
          PJN    VME10       IF NOT GLOBAL UNLOAD 
 VME8.1   LDD    CM+4        READ LOCAL STATUS
          SHN    3
          ADN    STLL 
          CRD    CN 
          LDD    CM 
          LPN    2
          ZJN    VME10       IF DEVICE IS NOT DOWN/OFF
          LDD    CN+4        CHECK DEVICE IN USE
          SHN    21-2 
          MJN    VME10       IF IN USE
          LDD    CM          CHECK REMOVABLE
          SHN    21-10
          PJN    VME10       IF NOT REMOVABLE 
          SHN    10-6 
          MJN    VME9        IF NOT AVAILABLE FOR PF ACCESS 
          LDD    CN          CHECK FORMAT PENDING 
          SHN    21-13
          PJN    VME10       IF NOT FORMAT PENDING
          LPC    MLIAL*100+MLIHD*100+MLIFD*100
          ZJN    VME10       IF NOT INITIALIZE *AL*, *HT* OR *FT* 
          LDD    CN+3        CHECK USER COUNT 
          NJN    VME10       IF USERS ACTIVE
 VME9     LDN    2           SET WRITE VALID
          RAD    T8 
 VME10    RJM    FAR         FORMAT A - REGISTER
          LJM    VMEX        RETURN 
 CCE      SPACE  4,10 
**        CCE - CHECK CHANNEL EQUIVALENCE.
* 
*         ENTRY  (T1) = CHANNEL.
*                (CM - CM+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF CHANNEL VALID.
*                (A) .NE. 0 IF CHANNEL NOT VALID. 
* 
  
  
 CCE1     LDN    1           SET INVALID CHANNEL
  
 CCE      SUBR               ENTRY/EXIT 
          LDD    CM+1        CHECK FIRST CHANNEL
          LPN    77 
          LMD    T1 
          ZJN    CCEX        IF FIRST CHANNEL 
          LDD    CM+2        CHECK SECOND CHANNEL 
          LPN    77 
          ZJN    CCE1        IF NO SECOND CHANNEL 
          LMD    T1 
          ZJN    CCEX        RETURN 
          UJN    CCE1 
 CEE      SPACE  4,10 
**        CEE - CHECK EQUIPMENT EQUIVALENCE.
* 
*         ENTRY  (T2) = PHYSICAL EQUIPMENT. 
*                (CM - CM+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF EQUIPMENT IS VALID. 
*                (A) .NE. 0 IF EQUIPMENT NOT VALID. 
* 
*         USES   T0.
  
  
 CEE      SUBR               ENTRY/EXIT 
          LDD    CM          CHECK MASS STORAGE 
          SHN    21-13
          PJN    CEE1        IF NOT MASS STORAGE
          LDD    CM+4        READ DRIVER NAME 
          SHN    3
          ADN    MDGL 
          CRM    CEEA,ON
          LDM    CEEA+2 
          LMC    2RDI 
          ZJN    CEEX        IF *DI* DRIVER 
          LDD    CM+2 
          UJN    CEE2        CONTINUE 
 CEE1     LDD    CM+4 
 CEE2     SHN    -11
          LMD    T2 
          UJN    CEEX        RETURN 
  
 CEEA     BSS    5
 CUE      SPACE  4,10 
**        CUE - CHECK UNIT EQUIVALENCE. 
* 
*         ENTRY  (T3) = UNIT NUMBER.
*                (CM - CM + 4) = EST ENTRY. 
* 
*         EXIT   (A) = 0  IF UNIT IS VALID. 
*                (A) .NE. 0  IF UNIT NOT VALID. 
* 
*         USES   T0, T7, T9, CN - CN+4. 
  
  
 CUE      SUBR               ENTRY/EXIT 
          LDD    CM          CHECK MASS STORAGE 
          SHN    21-13
          MJN    CUE1        IF MASS STORAGE
          LDN    CM+4 
          STD    T0 
          LDI    T0          FORCE SINGLE DEVICE
          LPC    7077 
          STI    T0 
          LDN    0
          STD    T9 
          LJM    CUE3        CHECK UNIT NUMBER
  
 CUE1     LDD    CM+4        GET UNIT LIST
          SHN    3
          ADN    DDLL 
          CRD    CN 
          LDD    CN 
          LPN    7
          STD    T9 
          LDD    CN 
          SHN    21-12
          MJN    CUE5        IF NULL EQUIPMENT
          LDN    CN+4        SET FIRST UNIT POSITION
          STD    T0 
 CUE2     LDI    T0          CHECK ODD UNIT 
          LPN    77 
          LMD    T3 
          ZJN    CUE5        IF VALID UNIT
          SOD    T9          DECREMENT UNIT COUNT 
          MJN    CUE5        IF END OF UNITS
          LDI    T0 
          SHN    -6 
          LMD    T3 
          ZJN    CUE5        IF VALID UNIT
          SOD    T0          DECREMENT ADDRESS
          SOD    T9          DECREMENT UNIT COUNT 
          MJN    CUE5        IF END OF UNITS
          UJN    CUE2        LOOP FOR NEXT UNIT 
  
 CUE3     LDI    T0          SET FIRST UNIT 
          LPN    77 
          STD    T7 
 CUE4     SBD    T3          CHECK NEXT UNIT
          ZJN    CUE5        IF UNIT VALID
          SOD    T9 
          MJN    CUE5        IF NO MORE UNITS 
          AOD    T7          INCREMENT UNIT NUMBER
          UJN    CUE4        CONTINUE 
  
 CUE5     LJM    CUEX        RETURN 
 SUN      SPACE  4,10 
**        SUN - SET MULTISPINDLE UNIT NUMBER. 
* 
*         ENTRY  (RU) = RELATIVE UNIT WITHIN MULTISPINDLE DEVICE. 
*                (CM  -  CM+4) = EST ENTRY. 
* 
*         EXIT   (T3) = UNIT NUMBER WITHIN MULTISPINDLE DEVICE. 
*                (A) = 0 IF VALID.
* 
*         USES   T0, T3, T7, T9, CN - CN+4. 
  
  
 SUN      SUBR               ENTRY/EXIT 
          LDD    RU          SET ORDINAL
          STD    T3 
          LDD    CM 
          SHN    21-13
          MJN    SUN1        IF MASS STORAGE
          LDN    CM+4 
          STD    T0 
          LDI    T0          CLEAR EQUIPMENT CHARACTERISTICS CODE 
          LPC    7077 
          STI    T0 
          LDN    0
          STD    T9 
          LJM    SUN4        SET UNIT NUMBER
  
 SUN1     LDD    CM+4        GET UNIT LIST
          SHN    3
          ADN    DDLL 
          CRD    CN 
          LDD    CN 
          LPN    7
          STD    T9 
          LDD    T3          SET WORD INDEX 
          SHN    -1 
          STD    T3 
          LDN    CN+4 
          SBD    T3 
          STD    T3 
          LDD    RU          CHECK FOR UPPER/LOWER UNIT 
          LPN    1
          ZJN    SUN2        IF LOWER UNIT
          LDI    T3 
          SHN    -6 
          UJN    SUN3        PROCESS UNIT 
  
 SUN2     LDI    T3 
 SUN3     LPN    77 
          STD    T7 
          UJN    SUN6        SET UNIT NUMBER
  
 SUN4     LDI    T0          SET STARTING UNIT
          LPN    77 
          STD    T7 
 SUN5     SOD    T3 
          MJN    SUN6        IF REQUESTED UNIT
          SOD    T9 
          MJN    SUN7        IF NO MORE UNITS WITHIN MULTISPINDLE DEVICE
          AOD    T7          INCREMENT UNIT 
          UJN    SUN5        CONTINUE 
  
 SUN6     LDD    T7          SET CORRECT UNIT 
          STD    T3 
          LDN    0
 SUN7     LJM    SUNX        RETURN 
 SPP      SPACE  4,10 
**        SPP - SET PHYSICAL EQUIPMENT PARAMETERS.
* 
*         ENTRY  (CM - CM+4) = EST ENTRY. 
* 
*         EXIT   (T1) = CHANNEL.
*                (T2) = EQUIPMENT NUMBER. 
*                (T3) = INITIAL UNIT NUMBER.
*                (DT) = DEVICE TYPE.
* 
*         USES   T0, T1, T2, T3, DT, CN - CN+4. 
  
  
 SPP3     LDN    CM+4 
 SPP4     STD    T0 
          LDI    T0          SET UNIT PARAMETER 
          LPN    77 
          STD    T3 
          LDI    T0          SET EQUIPMENT PARAMETER
          SHN    -11
          STD    T2 
  
 SPP      SUBR               ENTRY/EXIT 
          LDD    CM+1        SET CHANNEL FOUND
          LPN    77 
          STD    T1 
          LDD    CM+3        SET DEVICE TYPE
          STD    DT 
          LDD    CM          CHECK FOR MASS STORAGE DEVICE
          SHN    21-13
          PJN    SPP3        IF NOT MASS STORAGE
          LDD    CM+4        GET UNIT LIST
          SHN    3
          ADN    DDLL 
          CRD    CN 
          LDN    CN+4 
          UJN    SPP4        CHECK EQUIPMENT
 FAR      SPACE  4,15 
**        FAR - FORMAT A - REGISTER FOR RETURN TO CALLING PROGRAM.
* 
*         ENTRY  (OD) = EST ORDINAL.
*                (T8) = VALIDATION CODE.
*                (T1) = CHANNEL.
*                (T2) = EST ORDINAL.
*                (T3) = UNIT NUMBER.
* 
*         EXIT   (A) = NECCUU AS DEFINED PREVIOUSLY.
* 
*         USES   OD.
  
  
 FAR      SUBR               ENTRY/EXIT 
          LDD    T8          SET VALIDATION CODE
          SHN    3
          LMD    T2          SET EQUIPMENT CODE 
          SHN    6
          LMD    T1          SET CHANNEL
          SHN    6
          LMD    T3          SET UNIT NUMBER
          UJN    FARX        RETURN 
 CDC      SPACE  4,10 
**        CDC - CHECK FOR DEDICATED OR NON - EXISTENT CHANNEL.
* 
*         ENTRY  (T1) = CHANNEL REQUESTED.
*                (CHANNEL TABLE ENTRY) = 100 IF CHANNEL DEDICATED.
* 
*         EXIT   (A) .EQ. 0 IF CHANNEL EXISTS AND NOT DEDICATED.
*                (A) .NE. 0 IF CHANNEL NON - EXISTENT OR DEDICATED. 
* 
  
  
 CDC1     LDN    1           SET DEDICATED
  
 CDC      SUBR               ENTRY/EXIT 
          LDD    T1          CHECK FOR NON - EXISTENT CHANNEL 
          SBN    MXNC+1 
          PJN    CDC1        IF NO SUCH CHANNEL 
          LDM    CHT,T1      CHECK FOR DEDICATED CHANNEL
          LMD    HN 
          ZJN    CDC1        IF DEDICATED 
          LDN    0
          UJN    CDCX        RETURN 
 BCT      SPACE  4,10 
**        BCT - BUILD AVAILABLE CHANNEL TABLE.
* 
*         ENTRY  (T6) = LAST EST ORDINAL + 1. 
* 
*         EXIT   (CHT) + CHANNEL .EQ. 100 IF ILLEGAL CHANNEL. 
*                (CHT) + CHANNEL .EQ. CURRENT CHANNEL REQUESTED IF
*                CHANNEL NOT DEDICATED. 
* 
*         USES   T8, T9, CN - CN+4. 
* 
*         CALLS  SCU. 
* 
*         MACROS SFA. 
  
  
 BCT      SUBR               ENTRY/EXIT 
          LDN    NCTAL       CHANNEL STATUS TABLE LENGTH
          STD    T8 
          LDC    CHTP        FWA OF CHANNEL TABLES
          CRD    CN 
          LDD    CN+2        READ CHANNEL STATUS TABLE
          SHN    14 
          LMD    CN+3 
          CRM    CHT,T8 
 BCT1     LDD    HN          SET INVALID CHANNELS 
          STM    CHT+14 
          STM    CHT+15 
          STM    CHT+16 
          STM    CHT+17 
          LDN    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    T8 
 BCT2     SFA    EST,T8      READ EST ENTRY 
          ADK    EQDE 
          CRD    CN 
          LDD    CN+1        CHECK CHANNEL TYPE 
          LPN    40 
          NJN    BCT4        IF CONCURENT CHANNEL 
          LDD    CN+2 
          LPN    40 
          NJN    BCT4        IF EQUIPMENT IS ON CONCURRENT CHANNELS 
*         LDN    0           SET DEVICE TABLE INDEX 
          STD    T9 
 BCT3     LDD    CN+3        CHECK EQUIPMENT TYPE 
          ZJN    BCT4        IF NO EQUIPMENT DEFINED
          LMM    DTB,T9 
          ZJN    BCT5        IF DEFINED EQUIPMENT 
          LDN    2
          RAD    T9 
          LMC    DTBL 
          NJN    BCT3        IF NOT END OF DEDICATED EQUIPMENT TABLE
          RJM    SCU         SET UNAVAILABLE FOR UNDEFINED MNEMONIC 
 BCT4     AOD    T8          CHECK NEXT EST ENTRY 
          LMD    T6 
          NJN    BCT2        IF NOT LAST ENTRY
          LJM    BCTX        RETURN 
  
 BCT5     AOD    T9 
          LDM    DTB,T9 
          ZJN    BCT4        IF NOT DEDICATED EQUIPMENT 
          SHN    21-1 
          PJN    BCT6        IF *OFF* CONDITION DOES NOT APPLY
          LDD    CN 
          LPN    3
          LMN    2
          ZJN    BCT4        IF *OFF* 
 BCT6     RJM    SCU         SET CHANNEL UNAVAILABLE
          UJN    BCT4        CONTINUE 
 DTB      SPACE  4,33 
**        DEVICE TYPE TABLE.
* 
* 
*         TABLE OF SYSTEM RECOGNIZED DEVICES AND DEDICATED STATUS.
*         ANY DEVICE WHICH IS NOT IN THIS TABLE WILL BE ASSUMED TO BE 
*         ON A DEDICATED CHANNEL. 
* 
*T,       12/EQ 
*T,       10/0,1/S,1/D
* 
*         EQ = DEVICE CODE. 
*         S = *ON* STATUS REQUIRED FOR DEDICATED DEVICE.
*         D = DEDICATED DEVICE. 
  
  
**        DTY - DEVICE TYPE MACRO.
* 
*         DTY    DV,DED,ON
* 
*                DV = DEVICE MNEMONIC.
*                DED = DEDICATED TO SYSTEM .
*                ON = DEDICATED TO SYSTEM ONLY IF *ON*. 
  
  
 DTY      MACRO  DV,DED,ON
          LOCAL  A,B
 A        MICRO  1,2,*DV* 
 B        SET    0
          CON    2R_"A" 
          IFC    NE,$DED$$,3
 B        SET    1
          IFC    NE,$ON$$,1 
 B        SET    B+2
          CON    B
          ENDM
  
  
 DTB      BSS    0
          DTY    AT,DED      5680 CARTRIDGE MAGNETIC TAPE ON 5744 ACS 
          DTY    CC,DED,ON   6683 SATELLITE COUPLER 
          DTY    CM          CONTROL MODULE 
          DTY    CP          405 CARD PUNCH 
          DTY    CR          415 CARD READER
          DTY    CT,DED      5680 CARTRIDGE MAGNETIC TAPE 
          DTY    DA          FSC DISK 
          DTY    DB          885-41 PARALLEL HEAD FMD 
          DTY    DC          895-1/2
          DTY    DD          834
          DTY    DE          EXTENDED MEMORY
          DTY    DF          887 (4KB SECTOR) 
          DTY    DG          836
          DTY    DH          887 (16KB SECTOR)
          DTY    DI          844-21 (HALF TRACK)
          DTY    DJ          844-4X (HALF TRACK)
          DTY    DK          844-21 (FULL TRACK)
          DTY    DL          844-4X (FULL TRACK)
          DTY    DM          885 (HALF TRACK) 
          DTY    DN          9853 
          DTY    DP          EXTENDED MEMORY (WITH DDP) 
          DTY    DQ          885 (FULL TRACK) 
          DTY    DS,DED,ON   CONSOLE DISPLAY
          DTY    DV          819 (SINGLE DENSITY) 
          DTY    DW          819 (DOUBLE DENSITY) 
          DTY    DX          FSC DISK 
          DTY    DY          FSC DISK 
          DTY    DZ          FSC DISK 
          DTY    EA          5832 (1X)
          DTY    EB          5832 (2X)
          DTY    EC          5833 (1X)
          DTY    ED          5833 (1XP) 
          DTY    EE          5833 (2X)
          DTY    EF          5833 (2XP) 
          DTY    LP          512/580 LINE PRINTER 
          DTY    LQ          512/580 LINE PRINTER 
          DTY    LR          512/580 LINE PRINTER 
          DTY    LS          512/580 LINE PRINTER 
          DTY    LT          512/580 LINE PRINTER 
          DTY    LX          5870 NON-IMPACT PRINTER
          DTY    LY          5970 NON-IMPACT PRINTER
          DTY    MP          MAP III
          DTY    MT,DED      66X/67X MAGNETIC TAPES 
          DTY    NC          NAD
          DTY    ND,DED,ON   MAINFRAME INTERFACE (MDI)
          DTY    NE          *NE* PSEUDO-EQUIPMENT
          DTY    NP,DED,ON   255X NPU 
          DTY    NT,DED      66X/67X MAGNETIC TAPES 
          DTY    RM,DED,ON   TWO-PORT MULTIPLEXER 
          DTY    RP          RING PORT
          DTY    SS          7990 CONTROLLER
          DTY    TE          *TE* PSEUDO-EQUIPMENT
          DTY    TT          *TT* PSEUDO-EQUIPMENT/STIMULATOR MUX 
 DTBL     EQU    *-DTB
 SCU      SPACE  4,10 
**        SCU - SET CHANNEL UNAVAILABLE.
* 
*         ENTRY  (CN - CN+4) .EQ. EST ENTRY.
* 
*         EXIT   (CHT) +  CHANNEL .EQ. 100B IF NOT AVAILABLE. 
* 
*         USES   CN - CN+4. 
  
  
 SCU      SUBR               ENTRY/EXIT 
          LDD    CN+1 
          LPN    77 
          STD    CN+4 
          LDD    HN 
          STM    CHT,CN+4 
          LDD    CN+2        CHECK NEXT CHANNEL 
          LPN    77 
          ZJN    SCUX        IF NOT ALTERNATE CHANNEL 
          STD    CN+4 
          LDD    HN          SET DEDICATED
          STM    CHT,CN+4 
          LJM    SCUX        RETURN 
  
  
 CHT      BSS    NCTAL*5     CHANNEL STATUS TABLE BUFFER
 CHTL     EQU    *-CHT
          SPACE  4
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 VMS      EQU    /COMPVMS/VMS 
 QUAL$    ENDIF 
          ENDX
