COMCVQF 
COMMON
          CTEXT  COMCVQF - VALIDATE QUEUED FILES. 
          SPACE  4,10 
          IF     -DEF,QUAL$ 
          QUAL   COMCVQF
          ENDIF 
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 VQF      SPACE  4,10 
***       VQF - VALIDATE QUEUED FILES.
* 
*         G. A. KERSTEN      81/10/08.
          SPACE  4,10 
***       *COMCVQF* CONTAINS ROUTINES THAT COMPARE AN IQFT ENTRY
*         OR A QFT ENTRY AGAINST THE PARAMETER BLOCK DEFINED IN 
*         *COMSQFS* FOR THE QUEUE PROCESSING UTILITIES. 
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         * FOT FULL - FILES IGNORED.* - SOME OF THE QUEUED FILES 
*         WERE NOT PROCESSED BECAUSE THERE WAS NO FOT ENTRY FOR THE 
*         CREATION AND/OR THE DESTINATION FAMILY AND THE FOT WAS
*         FULL. 
* 
*         * LID NOT ADDED - FILES IGNORED.* - SOME QUEUED FILES WERE
*         NOT PROCESSED BECAUSE THERE WAS NO ENTRY IN THE LID TABLE 
*         FOR THE SPECIFIED LID AND ALL LID SLOTS FOR THE HOST PID
*         WERE OCCUPIED BY OTHER LIDS.
 CAF      SPACE  4,15 
**        CAF - CHECK ACCESS LEVEL OF QUEUED FILE.
* 
*         ENTRY  (X1) = UPPER ACCESS LEVEL LIMIT. 
*                (X2) = LOWER ACCESS LEVEL LIMIT. 
*                (X2) .LT. 0, IF NO ACCESS LEVELS WERE SELECTED.
*                (A3) = ADDRESS OF *INSQ* WORD OF QFT ENTRY FOR FILE. 
*                (X3) = *INSQ* WORD.
*                (B2) = 0, IF ORIGIN TYPE ACCESS LEVEL OF FILE IS 
*                       NOT TO BE VALIDATED.
* 
*         EXIT   (X1) = 0, IF FILE SELECTED.
* 
*         USES   X - 0, 1, 3, 4, 6, 7.
*                A - 1, 3.
*                B - 2. 
  
  
 CAF3     SX1    B1+         SET FILE NOT SELECTED
  
 CAF      SUBR               ENTRY/EXIT 
          AX3    15          GET FILE ACCESS LEVEL
          MX0    -3 
          BX4    -X0*X3 
  
*         CHECK ORIGIN TYPE ACCESS LIMITS.
  
          ERRNZ  SCLQ-INSQ-1 VALUES MUST BE CONTIGUOUS
          SA3    A3+B1       GET ORIGIN TYPE
          MX0    -6 
          LX3    12 
          BX7    -X0*X3 
          MX0    -3 
          SA3    SECA        GET ACCESS LIMITS
          LX3    12 
          BX6    -X0*X3 
          ZR     X6,CAF1     IF UNSECURE SYSTEM 
          ZR     B2,CAF1     IF ORIGIN TYPE LIMITS NOT TO BE CHECKED
          SX6    12 
          IX6    X7*X6
          SB2    X6+12
          LX3    B2          GET LIMITS FOR ORIGIN TYPE OF FILE 
          BX6    -X0*X3      GET UPPER ACCESS LIMIT 
          LX3    -6 
          BX7    -X0*X3      GET LOWER ACCESS LIMIT 
          IX3    X4-X7
          IX7    X6-X4
          NG     X7,CAF3     IF ACCESS LEVEL TOO HIGH 
          NG     X3,CAF3     IF ACCESS LEVEL TOO LOW
 CAF1     NG     X2,CAF2     IF NO FURTHER CHECK TO BE MADE 
  
*         CHECK DEVICE LIMITS OR LIMITS FROM ARGUMENT TABLE.
  
          IX7    X4-X2
          IX6    X1-X4
          NG     X7,CAF3     IF ACCESS LEVEL TOO LOW
          NG     X6,CAF3     IF ACCESS LEVEL TOO HIGH 
 CAF2     BX1    X1-X1       SET FILE SELECTED
          EQ     CAFX        RETURN 
 CFE      SPACE  4,20 
**        CFE - CHECK FOR FOT ENTRY.
* 
*         ENTRY  (X1) = FAMILY NAME.
* 
*         EXIT   (X3) .EQ. FOT ORDINAL, IF FOT ENTRY CREATED/EXISTS.
*                     .EQ. 0, IF ERROR. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                A - 1, 2, 4, 6, 7. 
* 
*         MACROS MESSAGE, QCALL.
* 
*         XREF   COMCQFM, COMSIOQ, COMSQFS. 
  
  
 CFE2     MX6    1           SET FOT FULL FLAG
          SA6    FOTF 
          MESSAGE  CFEA 
 CFE3     BX3    X3-X3       SET ERROR EXIT 
  
 CFE      SUBR               ENTRY/EXIT 
          SX3    B1          INITIALIZE FOT ORDINAL 
          MX0    42 
          SA2    FOTA        SEARCH THE *FOTT* FOR FAMILY 
 CFE1     BX4    X2-X1
          BX4    X0*X4
          ZR     X4,CFEX     IF FOT ENTRY EXISTS
          SA2    A2+B1
          SX3    X3+B1
          NZ     X2,CFE1     IF NOT END OF TABLE
          SA2    TARA+ARFC   CHECK FAMILY OPTION
          BX6    X2 
          LX2    59-56
          LX6    59-52       CHECK UNCONDITIONAL PROCESSING 
          BX2    X6+X2
          PL     X2,CFE3     IF OPTION NOT SELECTED 
          SA2    FOTF 
          NZ     X2,CFE3     IF FOT FULL
          BX6    X0*X1       ADD FAMILY NAME
          SA6    CFEB+6 
          SX0    36000B      CLEAR ERROR FLAGS
          SA4    CFEB 
          BX7    -X0*X4 
          SA7    A4 
          QCALL  CFEF,CFEB
          SA4    CFEB        GET ERROR STATUS 
          BX4    X0*X4
          NZ     X4,CFE2     IF ERROR 
          SA2    CFEB+6      GET THE FOT ORDINAL
          MX0    -18
          BX3    -X0*X2 
          SX1    FOTL 
          IX1    X1-X3
          NG     X1,CFEX     IF *FOTT* FULL 
          BX6    X0*X2       ADD ENTRY TO *FOTT*
          SA6    X3+FOTA-1
          EQ     CFEX        RETURN 
  
  
 CFEA     DATA   C* FOT FULL - FILES IGNORED.*
 CFEB     FILEB  CFEC,1,EPR,(FET=7) 
 CFEC     BSS    1
  
 FOTF     CON    0           FOT FULL FLAG
 CLD      SPACE  4,15 
**        CLD - CHECK LOGICAL IDENTIFIER. 
* 
*         ENTRY  (X3) = (I)QFT ENTRY, WORD TWO. 
*                (X4) = 0, IF NO NEED TO CHECK FOR LID IN TABLE.
* 
*         EXIT   (X3) = O, IF FILE SELECTED.
*                       NONZERO, IF FILE NOT SELECTED.
* 
*         USES   X - 2, 3, 6. 
*                A - 2, 6.
* 
*         MACROS GETLIDA, MACHID, SETPIDA.
* 
*         XREF   COMCCMD, COMCSFM, COMSSFM. 
  
  
 CLD3     SX3    B0+         INDICATE FILE SELECTED 
  
 CLD      SUBR               ENTRY/EXIT 
          SA2    TARA+ARFC
          LX2    59-52
          NG     X2,CLD3     IF UNCONDITIONAL FILE PROCESSING 
          LX3    12          MASK LID OUT OF (I)QFT ENTRY 
          MX6    18 
          BX6    X6*X3
          BX3    X3-X3       SET FILE SELECTED
          SA2    TARA+AROL   CHECK IF LID WAS SPECIFIED 
          NZ     X2,CLD1     IF LID WAS SPECIFIED 
          ZR     X6,CLDX     IF ZERO LID
          EQ     CLD2        CHECK FOR LID IN TABLE 
  
 CLD1     SX3    1R0         CHECK FOR *LD* = *0* 
          LX3    -6 
          BX3    X2-X3
          BX3    X6+X3
          ZR     X3,CLDX     IF *LD* = *0* .AND. ZERO LID 
          BX3    X6-X2       CHECK FOR MATCH
          NZ     X3,CLDX     IF NO MATCH
 CLD2     ZR     X4,CLDX     IF NO NEED TO CHECK FOR LID IN TABLE 
          SX3    B1          SET COMPLETE BIT 
          BX6    X6+X3
          SA6    CLDA        CHECK FOR LID IN TABLE 
          GETLIDA  CLDA 
          SA2    CLDA 
          LX2    18 
          SX3    B0          SET FILE SELECTED
          MX6    12 
          BX6    X6*X2
          NZ     X6,CLDX     IF LID IS IN TABLE 
          SA2    TARA+ARFC   CHECK LID TABLE OPTION 
          SX3    B1          SET FILE NOT SELECTED
          LX2    59-54
          PL     X2,CLDX     IF LID TABLE OPTION NOT SELECTED 
          SA2    LTFL        CHECK IF LID TABLE IS FULL 
          NZ     X2,CLDX     IF TABLE IS ALREADY FULL 
          MACHID CLDC        GET HOST MACHINE ID
  
*         ATTEMPT TO ADD THE LID WITH A *NOLIST* ATTRIBUTE TO THE 
*         HOST PID. 
  
          SA2    CLDA        GET LID
          MX6    18 
          BX6    X6*X2
          SA2    CLDC        CREATE HOST PID
          SX3    1RM
          LX3    12 
          BX3    X2+X3
          BX6    X6+X3       MERGE LID WITH HOST PID
          LX6    30 
          SX3    200B        *NOLIST* ATTRIBUTE 
          BX6    X3+X6       MERGE ATTRIBUTE WITH PID AND LID 
          LX6    12 
          SA6    CLDE        SAVE ENTRY IN PARAMETER BLOCK
          SETPIDA  CLDD      ADD LID TO LID TABLE 
          SA2    CLDD        CHECK IF LID WAS ADDED TO TABLE
          LX2    42 
          MX6    8
          BX3    X6*X2
          ZR     X3,CLDX     IF LID WAS ADDED SUCESSFULLY 
          SA6    LTFL        SET * LID TABLE FULL * 
          MESSAGE  CLDB      * LID NOT ADDED - FILES IGNORED.*
          EQ     CLDX        RETURN 
  
 CLDA     CON    0
 CLDB     DATA   C* LID NOT ADDED - FILES IGNORED.* 
 CLDC     CON    0           HOST MACHINE ID
 CLDD     VFD    12/ALDF,12/1,36/1  *SETPIDA* PARAMETER BLOCK 
 CLDE     CON    0
 LTFL     CON    0           LID TABLE FULL FLAG
 VIE      SPACE  4,20 
**        VIE - VALIDATE IQFT ENTRY.
* 
*         ENTRY  (IQFE - IQFE+15) = IQFT ENTRY. 
*                (TACF) = TABLE OF ACTIVE FAMILIES, IF ACTIVATE 
*                         REQUEST.
*                (X6) .NE. 0, IF ACTIVATE REQUEST.
*                (B1) = 1.
* 
*         EXIT   (X1) .EQ. 0, IF ENTRY MATCHES PARAMETERS.
*                     .EQ. 1, IF NOT MATCH. 
*                     .LT. 0, IF FOT ENTRY NOT FOUND AND
*                             FAMILY OPTION NOT SELECTED. 
*                THE CREATION AND DESTINATION FAMILY ORDINALS ARE 
*                UPDATED IN THE IQFT ENTRY. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6.
*                A - 1, 2, 3, 4, 6. 
* 
*         CALLS  CFE, VQI.
* 
*         XREF   COMSJIO, COMSQFS.
  
  
 VIE12    SX1    B1+         SET ERROR EXIT 
  
 VIE      SUBR               ENTRY/EXIT 
          SA6    VIEA        SAVE FLAG
          SX1    IQFE 
          RJ     VQI         VALIDATE QFT INFORMATION 
          NZ     X1,VIEX     IF NO MATCH
  
*         CHECK RECOVERY DATES. 
  
          SA2    TARA+ARFC   CHECK UNCONDITIONAL PROCESSING 
          LX2    59-52
          NG     X2,VIE8     IF UNCONDITIONAL PROCESSING
          SA3    IQFE+8      PACKED DATE/TIME 
          MX0    -18
          SA4    TARA+ARDA
          AX3    18          CLEAR TIME 
          ZR     X4,VIE1     IF NO DATE SPECIFIED 
          BX2    -X0*X3 
          IX1    X2-X4
          NG     X1,VIE12    IF DATE .LT. LOWER BOUND 
          SA4    A4+B1
          IX1    X4-X2
          NG     X1,VIE12    IF DATE .GT. UPPER BOUND 
  
*         CHECK FILE SIZE.
  
 VIE1     AX3    18          GET FILE SIZE
          SA4    TARA+ARFS
          IX1    X3-X4
          NG     X1,VIE12    IF SIZE .LT. LOWER BOUND 
          MX0    42          CHECK IF INFINITY
          SA4    A4+B1
          BX2    X4+X0
          ZR     X2,VIE2     IF NO UPPER BOUND
          IX1    X4-X3
          NG     X1,VIE12    IF SIZE .GT. UPPER BOUND 
  
*         CHECK MACHINE ID. 
  
 VIE2     SA3    A3+1 
          SA1    TARA+ARMI   MACHINE ID 
          ZR     X1,VIE3     IF NO MACHINE ID 
          LX1    12 
          MX0    -12
          BX4    X1-X3
          BX1    -X0*X4 
          NZ     X1,VIE12    IF NO MATCH
  
*         CHECK CREATION FAMILY NAME. 
  
 VIE3     SA2    TARA+ARFU   CHECK CREATION FAMILY
          ZR     X2,VIE4     IF ALL FAMILIES
          BX6    X2-X3
          MX0    42 
          BX6    X0*X6
          NZ     X6,VIE12    IF NO MATCH ON CREATION FAMILY 
 VIE4     SA1    A3+1        CHECK DESTINATION FAMILY 
          MX0    42 
          BX1    X0*X1
          MX0    -6 
          SA4    IQFE+3      CHECK FAMILY ORDINAL IN QFT ENTRY
          LX4    18 
          BX4    -X0*X4 
          BX1    X1+X4
          SA2    TARA+ARTF
          BX1    X1+X2
          SA3    TARA+ARID
          ZR     X1,VIE5     IF CHECKING BATCH ID 
          ZR     X2,VIE6     IF ALL FAMILIES
          SA3    TARA+ARTI
 VIE5     SA4    IQFE+3      CHECK DESTINATION UI OR BATCH ID 
          LX4    -24
          MX0    -18
          BX4    -X0*X4 
          IX3    X4-X3
          NG     X3,VIE12    IF BELOW LOWER LIMIT 
          SA3    A3+B1
          IX3    X3-X4
          NG     X3,VIE12    IF ABOVE UPPER LIMIT 
          ZR     X1,VIE6     IF CHECKING BATCH ID 
          BX6    X2-X1
          MX0    42 
          BX6    X0*X6
          NZ     X6,VIE12    IF NO MATCH ON DESTINATION FAMILY
  
*         CHECK OWNER USER INDEX. 
  
 VIE6     SA1    IQFE+11     GET OWNER USER INDEX 
          MX0    -18
          SA2    TARA+ARUI
          BX6    -X0*X1 
          IX2    X6-X2
          NG     X2,VIE12    IF LOWER LIMIT GREATER THAN INDEX
          SA2    A2+B1
          IX2    X2-X6
          NG     X2,VIE12    IF UPPER LIMIT LESS THAN INDEX 
  
*         CHECK FOR ACTIVE OWNER FAMILY ON A RECOVER FUNCTION.
  
          SA1    VIEA 
          ZR     X1,VIEX     IF NOT ACTIVATE REQUEST
          SA4    IQFE 
          MX0    -3 
          LX4    0-9
          BX4    -X0*X4 
          MX0    42 
          SX4    X4-INQT
          NZ     X4,VIE8     IF NOT AN INPUT FILE 
          SA3    TARA+ARFC   CHECK INPUT FILE PROCESSING FLAG 
          LX3    59-53
          NG     X3,VIE8     IF ACTIVATING ALL INPUT FILES
          SA3    IQFE+12     GET OWNER FAMILY NAME
          SA4    TACF        SEARCH FOR ACTIVE FAMILY 
 VIE7     BX2    X3-X4       COMPARE FAMILY NAME
          SA4    A4+1 
          BX1    X0*X2
          ZR     X1,VIE8     IF NAMES MATCH 
          NZ     X4,VIE7     IF NOT END OF FAMILIES 
          EQ     VIE12       SET NO MATCH 
  
 VIE8     SA1    IQFE+12     GET OWNER FAMILY 
          BX1    X0*X1
          ZR     X1,VIE9     IF NO OWNER FAMILY 
          RJ     CFE
          ZR     X3,VIE11    IF ERROR 
 VIE9     SA1    IQFE+10     GET DESTINATION FAMILY 
          MX0    42 
          BX1    X0*X1
          ZR     X1,VIE10    IF NO DESTINATION FAMILY 
          RJ     CFE
          ZR     X3,VIE11    IF ERROR 
 VIE10    BX1    X1-X1
          EQ     VIEX        RETURN 
  
 VIE11    MX1    1           SET ERROR EXIT 
          EQ     VIEX        RETURN 
  
  
 VIEA     CON    0           ACTIVATE REQUEST FLAG
 VQE      SPACE  4,20 
**        VQE - VALIDATE QFT ENTRY. 
* 
*         ENTRY  (X1) = QFT ADDRESS.
*                (B1) = 1.
* 
*         EXIT   (X1) = 0, IF FILE MATCHES PARAMETER BLOCK. 
*                     = 1, IF NO MATCH. 
*                (X2) = EST ORDINAL FROM QFT. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6.
*                A - 1, 2, 3, 6.
* 
*         CALLS  VQI. 
* 
*         XREF   COMSQFS. 
  
  
 VQE4     SX1    B1          SET ERROR EXIT 
  
 VQE      SUBR               ENTRY/EXIT 
          BX6    X1          SAVE QFT ADDRESS 
          SA6    VQEA 
          RJ     VQI         VALIDATE QFT INFORMATION 
          NZ     X1,VQEX     IF NO MATCH
  
*         CHECK ROUTING INFORMATION.
  
          SA2    TARA+ARFC
          LX2    59-52
          NG     X2,VQE3     IF UNCONDITIONAL FILE PROCESSING 
          SA1    VQEA 
          SA1    X1+3        GET DESTINATION FAMILY ORDINAL 
          LX1    18 
          MX0    -6 
          BX2    -X0*X1 
          LX1    18          GET DESTINATION UI OR BATCH ID 
          MX0    -18
          BX4    -X0*X1 
          SA1    TARA+ARTF
          BX2    X1+X2
          ZR     X2,VQE1     IF CHECKING BATCH ID 
          SA3    TARA+ARTI
          ZR     X1,VQE3     IF DESTINATION FAMILY NOT SPECIFIED
          MX0    42 
          SA2    FOTA-1+X2   GET FAMILY NAME
          BX1    X1-X2
          BX1    X0*X1
          NZ     X1,VQE4     IF NO MATCH ON DESTINATION FAMILY
          EQ     VQE2        CHECK DESTINATION UI 
  
 VQE1     SA3    TARA+ARID
 VQE2     IX3    X4-X3       CHECK DESTINATION UI OR BATCH ID 
          NG     X3,VQE4     IF BELOW LOWER LIMIT 
          SA3    A3+B1
          IX3    X3-X4
          NG     X3,VQE4     IF ABOVE UPPER LIMIT 
  
*         SET EXIT CONDITIONS.
  
 VQE3     BX1    X1-X1       CLEAR ERROR RETURN 
          SX2    B2          SET EST ORDINAL
          EQ     VQEX        RETURN 
  
  
 VQEA     CON    0           QFT ENTRY ADDRESS
 VQI      SPACE  4,15 
**        VQI - VALIDATE QFT INFORMATION. 
* 
*         ENTRY  (X1) = QFT ADDRESS.
*                (X6) .NE. 0, IF ACTIVATE REQUEST.
*                (B1) = 1.
* 
*         EXIT   (X1) = 0, IF FILE MATCHES PARAMETER BLOCK. 
*                     = 1, IF NO MATCH. 
*                (B2) = EST ORDINAL FROM QFT. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                A - 1, 2, 3, 4.
*                B - 2, 3, 4. 
* 
*         XREF   COMSJIO, COMSQFS.
  
  
 VQI11    SX1    B1          SET ERROR EXIT 
  
 VQI      SUBR               ENTRY/EXIT 
  
*         DETERMINE DISPOSITION CODE. 
  
          SA1    X1+         GET QFT WORD 0 
          SA2    TARA+ARFC
          LX2    59-52
          NG     X2,VQI1.1   IF UNCONDITIONAL FILE PROCESSING 
          MX0    -6 
          BX2    X1 
          AX2    6
          BX7    -X0*X2      SAVE DISPOSITION CODE
          SA3    TDCS-1      GET SHIFT COUNT
 VQI1     SA3    A3+B1
          ZR     X3,VQI11    IF DISPOSITION CODE NOT IN TABLE 
          SX2    X3 
          IX2    X7-X2
          NZ     X2,VQI1     IF NOT MATCH 
          LX3    -18
          SB2    X3          (B2) = SHIFT COUNT 
  
*         DETERMINE ORIGIN TYPE.
  
 VQI1.1   SA2    A1+3        GET ORIGIN TYPE
          LX2    6           CHECK FOR SUBSYSTEM INPUT FILE 
          BX4    -X0*X2      GET SERVICE CLASS
          MX0    -3 
          AX1    9           GET QUEUE TYPE 
          BX1    -X0*X1 
          ZR     X6,VQI1.2   IF FILE NOT TO BE REACTIVATED
          ERRNZ  INQT        INPUT QUEUE TYPE VALUE CHANGED 
          NZ     X1,VQI1.2   IF NOT INPUT FILE
          SX3    SSSC 
          BX4    X3-X4
          ZR     X4,VQI11    IF SUBSYSTEM INPUT FILE
          MX0    6           CHECK FOR INTERACTIVE INPUT FILE 
          BX0    X0*X2
          LX0    6
          SX0    X0-IAOT
          ZR     X0,VQI11    IF INTERACTIVE INPUT FILE
 VQI1.2   LX2    6
          MX0    -6 
          BX1    X2 
          BX2    -X0*X2 
          SX3    IAOT 
          IX3    X3-X2
          NG     X3,VQI11    IF INVALID ORIGIN TYPE 
          SB3    X2          SAVE ORIGIN TYPE 
          LX1    6
          BX1    -X0*X1 
          SA2    TARA+ARFC
          LX2    59-52
          NG     X2,VQI4     IF UNCONDITIONAL FILE PROCESSING 
          SX2    ARBC 
          ZR     X1,VQI1.3   IF LOCAL BATCH FILE
          SX2    ARRB 
 VQI1.3   SA4    TARA+X2     GET DISPOSITION CODE SELECTIONS
          LX4    B2,X4
          PL     X4,VQI11    IF DISPOSITION CODE NOT SELECTED 
  
*         CHECK JSN-S.
  
          SA1    A1          REREAD JSN 
          SB4    ARJNL       SET JSN LIST LENGTH
          MX0    24 
          BX2    X0*X1
          SA3    TARA+ARJN-1
          SB2    B0+
 VQI2     SB4    B4-B1
          SA3    A3+B1
          ZR     X3,VQI3     IF NO ENTRY
          SB2    B2+B1       FLAG JSN PRESENT 
          IX6    X3-X2
          ZR     X6,VQI4     IF MATCH 
 VQI3     NE     B4,VQI2     IF NOT END OF JSN-S
          NE     B2,VQI11    IF JSN-S SPECIFIED 
  
*         GET EST ORDINAL AND CHECK FIRST TRACK.
  
 VQI4     SA1    A1+B1       GET QFT WORD 1 
          MX0    12          CHECK IF FIRST TRACK USED
          LX1    12 
          BX3    X0*X1
          ZR     X3,VQI11    IF FIRST TRACK ZERO
          MX0    -12         GET EST ORDINAL
          BX3    -X0*X1 
          SB2    X3+         SAVE EST ORDINAL 
  
*         CHECK FORMS CODE. 
  
          SX1    B0+         SET FILE SELECTED
          SA2    TARA+ARFC
          LX2    59-52
          NG     X2,VQIX     IF UNCONDITIONAL FILE PROCESSING 
          SA3    TARA+ARFR
          SX4    X3-100B
          ZR     X4,VQI10    IF ALL FORMS CODES SELECTED
          MX0    -3          CHECK QUEUE TYPE 
          LX7    -3 
          BX7    -X0*X7 
          SB4    X7-INQT
          EQ     B4,VQI10    IF INPUT QUEUE 
          SA1    A1+2        GET QFT WORD 3 
          MX0    12 
          LX1    48 
          SB4    59 
          LX2    X3,B4
          BX1    X0*X1
          NG     X2,VQI7     IF RANGE SPECIFIED 
          SB4    3           CHECK FORMS CODE LIST
 VQI5     BX2    X0*X3
          ZR     X2,VQI11    IF END OF FORMS CODE LIST
          BX4    X2-X0
          NZ     X4,VQI6     IF NOT NULL FORMS CODE 
          BX2    X2-X2       SET NULL FORMS CODE
 VQI6     BX4    X2-X1
          ZR     X4,VQI10    IF MATCH 
          LX3    12 
          SB4    B4-1 
          NE     B4,VQI5     IF MORE FORMS CODES
          EQ     VQI11       SET NO MATCH 
  
 VQI7     BX2    X0*X3       CHECK FORMS CODE RANGE 
          BX4    X2-X0
          ZR     X4,VQI8     IF NULL FORMS CODE 
          IX4    X1-X2
          NG     X4,VQI11    IF BELOW LOWER LIMIT 
 VQI8     LX3    12 
          BX2    X0*X3
          BX4    X2-X0
          NZ     X4,VQI9     IF NOT NULL FORMS CODE 
          BX2    X2-X2
 VQI9     IX4    X2-X1
          NG     X4,VQI11    IF ABOVE UPPER LIMIT 
  
*         SET EXIT CONDITIONS.
  
 VQI10    BX1    X1-X1       CLEAR ERROR RETURN 
          EQ     VQIX        RETURN 
  
*         DISPOSITION CODE SHIFT TABLE. 
  
 TDCS     BSS    0
          VFD    36/0,6/1,18/INQF 
          VFD    36/0,6/1,18/NOQF 
          VFD    36/0,6/1,18/TOQF 
          VFD    36/0,6/2,18/PUQF 
          VFD    36/0,6/3,18/PLQF 
          VFD    36/0,6/4,18/LPQF 
          VFD    36/0,6/5,18/P2QF 
          VFD    36/0,6/6,18/LRQF 
          VFD    36/0,6/7,18/LSQF 
          VFD    36/0,6/8,18/LTQF 
          VFD    36/0,6/9,18/LXQF 
          VFD    36/0,6/10,18/LYQF
          VFD    36/0,6/11,18/ERQF
          VFD    36/0,6/11,18/TQQF
          VFD    36/0,6/0,18/S1QF 
          VFD    36/0,6/0,18/S2QF 
          VFD    36/0,6/0,18/S3QF 
          VFD    60/0 
  
  
  
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CAF      EQU    /COMCVQF/CAF 
 CLD      EQU    /COMCVQF/CLD 
 FOTF     EQU    /COMCVQF/FOTF
 LTFL     EQU    /COMCVQF/LTFL
 VIE      EQU    /COMCVQF/VIE 
 VQE      EQU    /COMCVQF/VQE 
 QUAL$    ENDIF 
 VQF      ENDX
