ASMB,Q,C,Z  * ASSEMBLE FOR RTE-M,IV * 
      IFN 
      HED *<#RQUL> - CLASS REQUEUEING: RTE-L * (C) HEWLETT-PACKARD CO. 1980*
      NAM #RQUL,6 91750-1X028 REV.2013 800808 L 
      EXT EXEC,$CLTA
      XIF 
      IFZ 
      HED *<#RQUE> - CLASS REQUEUEING: RTE-M/IV*(C) HEWLETT-PACKARD CO.1980*
      NAM #RQUE,30 91750-1X027 REV.2013 800808 MEF
      EXT $CLAS,$DLAY,$RNTB,$SCD3 
      XIF 
      EXT .CBX,.CMW,.MVW,.ENTP,$LIBR,$LIBX,$OPSY
      ENT #CLTA,#NQUE,#PRGL,#QLIM,#RQUE 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      SUP 
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    NAME:   #RQUE
*    SOURCE: 91750-18027  [RTE-M,IV: 'Z' ASSEMBLY OPTION] 
*    RELOC:  91750-1X027
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    NAME:   #RQUL
*    SOURCE: 91750-18028  [RTE-L: 'N' ASSEMBLY OPTION]
*    RELOC:  91750-1X028
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    PGMR:   C. HAMILTON  [ 08/08/80 ]
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
*  #RQUE IS A CORE-RESIDENT SYSTEM SUBROUTINE, USED BY THE DISTRIBUTED
*   SYSTEMS SOFTWARE PACKAGE IN THE RTE-L, M, AND DISC-BASED RTE OPERATING
*   SYSTEMS ENVIRONMENTS. ITS PURPOSE IS TO PROVIDE A FAST, CORE-SAVING 
*   METHOD FOR TRANSFERRING PREVIOUSLY-QUEUED CLASS I/O BUFFERS FROM ONE
*   CLASS TO ANOTHER CLASS. ALTERNATELY, IT CAN BE USED TO RE-QUEUE THE 
*   COMPLETED CLASS-TRANSACTION ONTO A DEVICE QUEUE. #RQUE MAY BE 
*   USED TO SEARCH FOR AND REQUEUE A SPECIFIC BLOCK IN A CLASS QUEUE. 
* 
*   THE ADVANTAGES GAINED THROUGH THE USE OF <#RQUE> INCLUDE: 
*    1. ONCE GRANTED ADEQUATE SYSTEM AVAILABLE MEMORY(SAM) FOR THE INITIAL
*       CLASS READ OPERATION, INCOMING TRANSACTIONS WILL NOT BE IMPEDED 
*       IN THEIR PROGRESSION THROUGH THE VARIOUS NETWORK-PROCESSING 
*       MODULES, DUE TO INABILITY TO ALLOCATE SUFFICIENT S.A.M. FOR USE 
*       IN THE EXCHANGE OF DATA BETWEEN THE NETWORK PROGRAMS. THE INITIALLY 
*       ALLOCATED S.A.M. BUFFER IS RETAINED FOR THE LIFE OF THE 
*       TRANSACTION, AND IS SIMPLY EXCHANGED AMONGST THE VARIOUS MODULES. 
*    2. INTERMEDIATE PROCESSORS REQUIRE ONLY MINIMUM SIZE LOCAL BUFFERS.
*       THE QUEUEING ROUTINES NEED NOT ALLOCATE BUFFER SPACE FOR THE
*       ENTIRE TRANSACTION, PRIOR TO PASSING IT ON TO THE NEXT
*       PROCESSOR'S CLASS.
*    3. SYSTEM OVERHEAD CAN BE MINIMIZED, DUE TO THE AVOIDANCE OF INTER-
*       MEDIATE ALLOCATION/DE-ALLOCATION OF S.A.M., AND ALSO, BY
*       AVOIDING WORD-MOVE TRANSFERS BETWEEN USER'S BUFFERS AND S.A.M.
* 
*  #RQUE OPERATION: 
* 
*    0. IF ENTRY VIA #NQUE, TRANSFER RETURN ADDRESS TO #RQUE. GO TO 1.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    1. ON FIRST ENTRY, CONFIGURE THE MODULE. 
*      A. IF BIT #1 OF $OPSY =1, THEN OP-SYSTEM USES DMS HARDWARE,
*         REQUIRING THE USE OF DMS FIRMWARE MACRO INSTRUCTIONS. 
*      B. IF DMS, THEN CLEAR THE DMS-BYPASSING 'JMP' INSTRUCTIONS.
*      C. IF NON-DMS, ALLOW 'JMP' INSTRUCTIONS TO REMAIN. 
*      D. IF DMS, CONVERT 'MVW' 'NOP' INSTRUCTIONS TO 'MWF' 'RSS'.
*      E. CLEAR THE PATH TO THE INITIALIZATION ROUTINE. 
* 
*    2. GET PARAMETERS & SAVE LOCALLY, IN PREPARATION FOR DMS MAP SWITCH. 
*      A. IF ANY PARAMETER, EXCEPT KEYWORD, IS MISSING, REJECT: IO01! 
*      B. IF ICNWD SIGN =1, GET SECOND WORD OF 'XLUEX' CONWORD. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    1. GET PARAMETERS AND SAVE LOCALLY.
*      A. IF ANY PARAMETER, EXECPT KEYWORD, IS MISSING, REJECT: IO01! 
*      B. MOVE PARAMETERS INTO LOCAL STORAGE. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      C. IF CONWORD Z-BIT =1, SAVE ADDRESS (VICE CONTENTS) FOR IBUFR,IPRM3.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      D. IF ICLAS =-1: BLOCK SIZE RESET, GO TO 7. (EXIT) NOT USED IN RTE-L.
*      E. IF REQUEST CODE IS POSITIVE, GO TO 2. TO VERIFY SOURCE CLASS. 
*      F. IF REQUEST CODE IS NEGATIVE, CHECK FOR A RECOGNIZED CODE VALUE. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      D. IF ICLAS =-1: BLOCK SIZE RESET, GO TO *.Q FOR QUICK PROCESSING. 
*      E. OBTAIN CALLER'S PRIORITY, FOR USE IN EQT LINKING. 
*      F. IF REQUEST CODE IS POSITIVE, GO TO *.P. TO CHECK FOR CONTROL REQ. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      G. IF RC=-17 TO -20, SET SEARCH FLAG =-1: SEARCH BOTH BUFFERS. 
*      H. IF RC=-27 TO -30, SET SEARCH FLAG =-2: SEARCH DATA BUFFER, ONLY.
*      I. IF RC=-37 TO -40, SET SEARCH FLAG =-3: SEARCH Z-BUFFER, ONLY. 
*      J. IF RC IS NEGATIVE, BUT NONE OF THE ABOVE VALUES, REJECT: "RQ  "!
*      K. CONVERT NEGATIVE REQUEST CODE TO POSITIVE, WITH NO-ABORT BIT =1.
*      L. IF SEARCH MODE, AND ILEN NEG., MOVE SINGLE WORD SEARCH REFERENCE
*         TO INTERNAL BUFFER, AND BYPASS BUFFER MOVE CHECKING.
*      M. IF ILEN POSITIVE, VERIFY THAT CALLER'S SEARCH-REFERENCE BUFFER
*         LENGTH IS <= LENGTH OF INTERNAL BUFFER; ELSE, REJECT: IO01! 
*      N. MOVE CALLER'S REFERENCE DATA TO INTERNAL BUFFER.
*      O. IF SEARCH AND CONTROL REQUEST, POINTER TO CONTROL PARAMETER SET 
*         EQUAL TO END OF REFERENCE BUFFER +1.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      P. IF DMS SYSTEM, SAVE MAP STATUS & SWITCH TO SYSTEM MAP.
* 
*    3. GET THE SOURCE-CLASS PARAMETER & CHECK ITS VALIDITY.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
*    2. GET THE SOURCE CLASS PARAMETER & CHECK ITS VALIDITY.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      A. IF 0, OR GREATER THAN MAX. CLASS NO., THEN--ERROR: IO00!
*      B. COMPUTE & SAVE CLASS-TABLE ENTRY ADDRESS. 
*      C. IF ENTRY =0, THEN NOT ASSIGNED--ERROR: IO00!
*      D. IF SOURCE-CLASS, VERIFY THAT SOMETHING QUEUED; ELSE--ERROR: IO00! 
*      E. SAVE ADDRESS OF QUEUED ENTRY (ADDRESS POINTS TO S.A.M.) 
*      F. IF SEARCH FLAG >=0, GO TO *.U. TO SEARCH FOR CLASS TERMINATOR.
*      G. CONFIGURE ADDRESS POINTERS TO CLASS HEADER PARAMETERS.
*      H. IF SEARCH FLAG =-1/-2, SET SEARCH FWA=FWA CLASS DATA BUFFER.
*      I. IF SEARCH FLAG =-1, END OF SEARCH = END OF CLASS BLOCK+1. 
*      J. IF SEARCH FLAG =-2, END OF SEARCH = END OF CLASS DATA BUFFER+1. 
*      K. IF SEARCH FLAG =-3, & Z-BIT NOT SET IN HEADER CONWORD, GO TO *.U; 
*         ELSE, START SEARCH =FWA Z-BUFFER, END SEARCH =END CLASS BLOCK+1.
*      L. IF 'ILEN' NEGATIVE, MAKE POSITIVE AND ADD -AS AN OFFSET- TO THE 
*         START OF SEARCH ADDRESS, TO FORM A SINGLE-WORD SEARCH ADDRESS.
*      M. IF OFFSET SEARCH ADDRESS IS BEYOND END OF CLASS BUFFER, GO TO 
*         *.U. TO IGNORE THIS PARTICULAR CLASS BLOCK. 
*      N. IF 'ILEN' NEGATIVE, ENO OF SEARCH = START OF SEARCH+1.
*      O. SEARCH CLASS BLOCK DATA BUFFER(S) FOR WORD =FIRST REFERENCE WORD. 
*      P. IF NO FIRST WORD MATCH, CONTINUE SEARCH TO END OF CLASS BUFFER(S).
*      Q. MATCH: DO A WORD-BY-WORD COMPARISON. IF NO MATCH, GO BACK TO *.O. 
*      R. COMPLETE MATCH: CLEAR 'ILEN' TO AVOID OVERWRITE OF HEADER PARAMS. 
*      S. SAVE CLASS TABLE ADDRESS AND SET BLOCK POINTERS = LOCATED BLOCK 
*         FOR DEQUEUE AND REQUEUE OPERATIONS. 
*      T. SET SEARCH FLAG =+N: BLOCK LOCATED. 
*      U. TRACK-DOWN/SAVE TERMINATOR ADDRESS; IF LINK WORD=0: ERROR IO00! 
*      V. ACCUMULATE A COUNT = NUMBER OF BLOCKS QUEUED ON THE CLASS.
*      W. COMPARE SECURITY CODES; IF MIS-MATCH--ERROR: IO00!
*      X. ENSURE THAT NO ONE IS WAITING ON SOURCE-CLASS; ELSE: ERROR IO10!
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    4. SAVE SOURCE-CLASS ADDRESS POINTERS. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    3. SAVE SOURCE CLASS ADDRESS POINTERS. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      A. IF SEARCH FLAG STILL NEGATIVE, SEARCH FAILED. REJECT: IO01! 
*      B. IF NON-SEARCH, SET ADDRESS POINTERS TO CLASS HEADER PARAMETERS. 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    5. CHECK VALIDITY OF DESTINATION-CLASS PARAMETER (VIA 3.A.). 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*    4. CHECK VALIDITY OF DESTINATION-CLASS PARAMETER (VIA 2.A).
*      A. IF NOLIM =0 AND BLOCK COUNT >MAX. ALLOWED(#QCNT): ERROR DS08! 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      A. IF -1, RESET NEG. BLOCK SIZE VALUE TO POS.; IGNORE OTHER PARAMS.
*      B. IF NOLIM =0 AND BLOCK COUNT > MAX. ALLOWED (#QCNT):  ERROR DS08!
* 
*    6. CHECK FOR "LU" SPECIFICATION. 
*      A. IF NOT SUPPLIED, GO TO 9. TO VERIFY CALLER'S BUFFER LENGTHS.
*      B. CHECK FOR VALID LU: EQT#0, DEVICE NOT A DISC, ELSE ERROR IO02!
*      C. IF LU OR DEVICE IS DOWN, REJECT: ERROR DS08!
*      D. CALCULATE AND SAVE THE EQT ADDRESS. 
* 
*    7. CHECK FOR LU LOCKING. 
*      A. IF NOT LOCKED, GO TO 8. TO CHECK REQUEST CODE.
*      B. IF LOCKED, AND PASSWORD NOT SUPPLIED, REJECT WITH ERROR: LU03!
*      C. IF LOCKED, AND PASSWORD INCORRECT, REJECT WITH ERROR: LU03! 
* 
*    8. CHECK 'ICODE', AND CONFIGURE THE CONTROL WORD.
*      A. MUST BE 17,18,19,20, OR ELSE REQUEST REJECTED: ERROR RQ  .
*      B. CONFIGURE COMPLETE CONWORD(EQT WORD#6 FORMAT), BASED UPON CALLER'S
*         'ICNWD' & DRT SUBCHANNEL SPECIFICATIONS.
*      C. IF DESTINATION CLASS PENDING-REQUEST COUNT =255D, REJECT: DS08! 
*      D. IF PROCESSING CONTROL REQUEST, SET 'ILEN'=0 (DATA IS INVALID).
* 
*    9. CHECK FOR AND VERIFY CALLER'S BUFFER LENGTH SPECIFICATIONS. 
*      A. IF 'Z'-BIT NOT SET IN 'ICNWD', IGNORE CHAR. TO WORD CHECKS. 
*      B. CHECK 'ILEN' FOR NEGATIVE(CHARS.) LENGTH, & CONVERT TO WORDS. 
*      C. SAVE WORD-MOVE COUNTS FOR BOTH DATA & 'Z' BUFFER MODIFICATION.
*      D. IF NOTHING IS TO BE MOVED INTO CLASS BUFFER(S), GO TO 11. 
*      E. IF CALLER'S TOTAL WORD-MOVE COUNT > CLASS BUFFER SIZE: ERROR IO04!
*      F. IF CONWORD IN CLASS HEADER HAS 'Z'-BIT(#12)=0, GO TO 10.
*      G. IF 'IPRM4' LENGTH EXCEEDS CLASS Z-BUFFER SPACE: ERROR IO04! 
*      H. IF 'ILEN' LENGTH EXCEEDS CLASS DATA BUFFER SPACE: ERROR IO04! 
* 
*   10. MOVE CALLER'S DATA-IF ANY-INTO CLASS DATA AND/OR Z-BUFFER IN S.A.M. 
* 
*   11. DE-QUEUE COMPLETED CLASS REQUEST FROM SOURCE-CLASS QUEUE. 
*      A. RE-LINK REMAINING ENTRIES BACK INTO SOURCE-CLASS QUEUE. 
* 
*   12. CHECK (AGAIN) FOR "LU" SPECIFICATION. 
*      A. IF NOT SUPPLIED, GO TO 12.I TO ALLOW OVERLAY OF OPT. 'GET' PARAMS.
* 
*      B. IF LU & CONWORD WERE SUPPLIED, REPLACE CONWORD IN COMPLETED 
*         REQUEST WITH USER-SUPPLIED PARAMETER. 
*      C. ENSURE 'T'-FIELD OF CONWORD =3, AND THAT BIT #11 =0 (FOR RTIOC).
*      D. OVERLAY WORD #3 OF COMPLETED REQUEST WITH THE USER'S PRIORITY.
*      E. IF WRITE-REQUE, NEGATE BLOCK SIZE TO PREVENT RTIOC'S
*         ARBITRARY RELEASE OF THE DATA BUFFER. IF ALREADY NEG. MAKE POS. 
*      F. REPLACE CLASS WORD OF COMPLETED REQUEST WITH THE DESTINATION- 
*         CLASS PARAMETER.
*      G. IF RC=19, MOVE USER'S CONTROL PARAMETER INTO CLASS HEADER.
*      H. IF 'ILEN' #0, MOVE CALLER'S DATA LENGTH INTO CLASS HEADER.
*      I. IF Z-BIT IN HEADER CONWORD =0, AND OPTIONAL PARAMETERS SUPPLIED,
*         REPLACE WORD #7 AND/OR #8 IN CLASS HEADER WITH USER'S PARAMETERS. 
*      J. IF LU NOT SUPPLIED, GO TO 14. TO REQUEUE THE CLASS BLOCK. 
*      K. ADD 1 TO THE DESTINATION-CLASS PENDING REQUEST COUNT, IF < 255. 
* 
*   13. LINK THE NEW REQUEST (ACCORDING TO PRIORITY) INTO THE EQT QUEUE.
*      A. IF THE EQT IS CURRENTLY ACTIVE, THE DEED IS DONE--GO TO 16. 
*      B. IF INACTIVE, INITIATE I/O OPERATION VIA $DLAY IN RTIOC. GO TO 16. 
* 
*   14. RE-QUEUE THE COMPLETED REQUEST ONTO THE DESTINATION-CLASS.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
*    5. RE-QUEUE THE LOCATED CLASS BLOCK. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      A. IF SEARCH FLAG =0, GO TO  *.E.
*      B. CLASS SEARCH: IF SOURCE CLASS # DESTINATION CLASS, GO TO *.E. 
*      C. SOURCE CLASS = DESTINATION CLASS: LOCATED CLASS BLOCK IS TO 
*         BE REQUEUED TO THE HEAD OF THE SOURCE CLASS.
*      D. SET CLASS TABLE ENTRY = ADDRESS OF LOCATED BLOCK  SET FIRST WORD
*         OF BLOCK = CLASS TERMINATOR-IF SINGLE ENTRY, OR ADDRESS OF NEXT 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*         BLOCK IN CLASS QUEUE. GO TO *.F.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*         BLOCK IN CLASS QUEUE. GO TO 7.
*      E. SET RETHREAD AND NO-WAIT BITS(#15,13) IN DESTINATION CLASS WORD.
*      F. IF REQUEST FOR CLASS CONTROL BLOCK REQUEUE, MAKE SPECIAL CALL.
*      G. CALL SYSTEM TO RETHREAD BLOCK TO END OF DEST. CLASS OR DEVICE.
*      H. IF SYSTEM CANNOT PROCESS REQUEST, RETURN ERROR: DS08! 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      E. LINK SOURCE BLOCK TO END OF DESTINATION CLASS QUEUE: MOVE DEST. 
*         CLASS TERMINATOR TO WORD #1 OF SOURCE BLOCK; SET FIRST WORD OF
*         LAST BLOCK IN DEST. QUEUE EQUAL TO ADDRESS OF SOURCE BLOCK. 
*      F. IF NEG. BLOCK LENGTH IN WORD#4 OF CLASS HEADER, MAKE IT POSITIVE. 
*      G. OVERLAY WORD #5 OF COMPLETED REQUEST WITH DESTINATION-CLASS NO. 
*      H. IF NEWLY-ADDED REQUEST IS ONLY ENTRY IN QUEUE, THEN GO TO 14.J. 
*         TO CHECK FOR A WAITING PROGRAM. 
*      I. IF OTHER ENTRIES ARE PRESENT, THEN GO TO 16.
*      J. CHECK TERMINATOR FOR PROGRAM-WAITING BIT(#14); IF NONE, GO TO 16. 
*      K. IF A PROGRAM IS WAITING, SCHEDULE IT AND RETURN, VIA 16.
* 
*   15. ERROR PROCESSING. 
*      A. SET ASCII ERROR CODES. RETURN CODES TO CALLER IN <A&B>. 
*      B. REQUESTED ACTION NOT PERFORMED. GO TO 16. 
* 
*   16. EXIT PROCESSING.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
*    6. ERROR PROCESSING. 
*      A. SET ASCII ERROR CODES. RETURN CODES TO CALLER IN <A&B>. 
*      B. REQUESTED ACTION NOT PERFORMED. GO TO 7.
* 
*    7. EXIT PROCESSING.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*      A. IF 'ICODE' NO-ABORT BIT(#15) =1, AND NO ERROR HAS BEEN DETECTED,
*         SET RETURN POINT TO END-OF-PARAMETER-LIST +2. 
*      B. IF ERROR DETECTED OR NO-ABORT BIT(#15) =0, SET RETURN POINT 
*         TO END-OF-PARAMETER-LIST +1.
*      C. CLEAR ALL <.ENTP> PARAMETER ADDRESS LOCATIONS.
*      D. RETRIEVE ERROR CODES-IF ANY-FOR RETURN TO CALLER VIA <A&B>. 
*      E. IF DMS ENVIRONMENT, RESTORE THE USER MAP. 
*      F. RETURN TO THE CALLER. 
      SKP 
*      JSB #RQUE/#NQUE  * #RQUE CALLING SEQUENCE >>> NON-SEARCH <<< * 
*      DEF *+9[OR *+10] (#NQUE ENTRY IGNORES 'ICLAS' QUEUE LIMIT CHECKS)
*      DEF ICODE    REQUEST CODE: 17,18,19,20 [NEGATIVE: SEE SEARCH MODE] 
*      DEF ICNWD    CONTROL WORD(S) 
*      DEF IBUFR    DATA BUFFER ADDRESS OR "OPTIONAL" CONTROL PARAMETER.
*      DEF ILEN     DATA BUFFER LENGTH (+WORDS/-CHARACTERS).
*      DEF IPRM3    GET-RETURN PARAMETER #1 OR Z-BUFFER ADDRESS 
*      DEF IPRM4    GET-RETURN PARAMETER #2 OR Z-BUFFER LENGTH (+WDS/-CHARS)
*      DEF ICLAS    DESTINATION CLASS NUMBER
*      DEF KCLAS    SOURCE CLASS NUMBER 
*     [DEF KEY]     LU-LOCK PASSWORD (RN) [OPTIONAL]
*   <ERROR  RETURN> <A&B> =ASCII CODE[RETURN HERE IF ERROR & ICODE SIGN =1] 
*   <NORMAL RETURN> <A&B> = 0 
* 
*   WHERE:
*      ICODE = REQUEST CODE: 17,18,19,20 (EQUIVALENT TO CLASS READ, CLASS 
*              WRITE, CLASS CONTROL, OR CLASS WRITE-READ). A POSITIVE VALUE 
*              SIGNIFIES A REQUEST FOR A REQUEUEING OF THE FIRST BLOCK IN 
*              SOURCE CLASS(KCLAS) QUEUE ONTO THE END OF THE DESTINATION
*              CLASS(ICLAS) QUEUE; OR, IF THE LOGICAL UNIT FIELD OF THE 
*              CONTROL WORD(ICNWD) IS NON-ZERO, THEN THE SOURCE CLASS BLOCK 
*              WILL BE REQUEUED TO THAT DEVICE WHICH IS ASSOCIATED WITH THE 
*              SPECIFIED LOGICAL UNIT.
* 
*              *** NOTE: IF THE LOGICAL UNIT IS ZERO, THEN ANY OF THE FOUR
*                        RECOGNIZED REQUEST CODES MAY BE SPECIFIED, IN ORDER
*                        TO REQUEST A CLASS-TO-CLASS REQUEUE OPERATION. 
*                        IF THE LOGICAL UNIT IS NON-ZERO, THEN THE CONTROL
*                        WORD IN THE CLASS HEADER (PASSED TO THE I/O DRIVER)
*                        WILL BE CONFIGURED TO INCLUDE THE PROPER REQUEST 
*                        CODE VALUE (17:=1,18:=2,19:=3,20:=1), TO ALLOW 
*                        PROCESSING AS A NORMAL CLASS I/O REQUEST.
* 
*      ICNWD = CONTROL WORD, SPECIFIED IN CONVENTIONAL SINGLE WORD FORMAT 
*              OR AS A DOUBLE WORD ('XLUEX' FORMAT) PARAMETER:
* 
*              SINGLE CONTROL WORD: 
* 
*             *15*14*13*12*11*10* 9* 8* 7* 6* 5* 4* 3* 2* 1* 0* 
*             +-----------------------------------------------+ 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             ! 0! X! X! Z! X!  FUNCTION    !   LOGICAL UNIT  ! X=PASSED ON 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             ! 0! X! X! Z! X!  FUNCTION    !   LOGICAL UNIT  ! X=IGNORED 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             +-----------------------------------------------+ 
* 
*             **NOTE: BIT #15 MUST =0 FOR SINGLE WORD CONWORD** 
* 
*              DOUBLE ('XLUEX') CONTROL WORD: 
* 
*              WORD #1
*             *15*14*13*12*11*10* 9* 8* 7* 6* 5* 4* 3* 2* 1* 0* 
*             +-----------------------------------------------+ 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             ! 1!    RESERVED        !   LOGICAL UNIT        ! 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             ! 1!        RESERVED          !   LOGICAL UNIT  ! 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             +-----------------------------------------------+ 
* 
*             ** NOTE: WORD #1, BIT #15 MUST =1 FOR 'XLUEX'  ** 
* 
*              WORD #2
*             *15*14*13*12*11*10* 9* 8* 7* 6* 5* 4* 3* 2* 1* 0* 
*             +-----------------------------------------------+ 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             ! X! X! X! Z! X!  FUNCTION    !    RESERVED     ! X=IGNORED 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             ! X! X! X! Z! X!  FUNCTION    !    RESERVED     ! X=PASSED ON 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*             +-----------------------------------------------+ 
* 
*             **NOTE: IF 'LU'#0, THE 'KCLAS' BLOCK IS REQUEUED TO A DEVICE. 
* 
*      IBUFR = USER BUFFER, CONTAINING DATA WHICH WILL BE USED TO 
*        .     OVERLAY THE CLASS DATA BUFFER IN S.A.M. THIS PARAMETER IS
*        O     A DUMMY PLACE HOLDER, WHEN 'ILEN' =0.
*        R
*        .
*      IBUFR = "OPTIONAL" CONTROL PARAMETER, WHEN 'ICODE' =19.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*              *** NOTE: REQUIRED BY #RQUE; "OPTIONAL" FOR THE DRIVER, ONLY.
* 
*      ILEN  = LENGTH, IN +WORDS OR -CHARACTERS, OF THE AMOUNT OF DATA
*              TO BE MOVED FROM 'IBUFR' TO THE CLASS DATA BUFFER. THE 
*              LENGTH MAY BE <= THE S.A.M. BUFFER SPACE. THE CLASS HEADER 
*              TRANSMISSION LOG WILL BE SET TO THE VALUE OF ILEN. 
*              WHEN 'ILEN' =0, NO CHANGE IS MADE TO THE CLASS DATA BUFFER.
* 
*      IPRM3 = WHEN 'ICNWD' 'Z'-BIT =1: USER DATA BUFFER, CONTAINING DATA 
*        O     WHICH WILL BE USED TO OVERLAY THE CLASS 'Z' BUFFER IN S.A.M. 
*        R
*      IPRM3 = WHEN 'ICNWD' 'Z'-BIT =0: OPTIONAL PARAMETER, WHICH WILL BE 
*              STORED IN THE CLASS-BLOCK HEADER IN S.A.M. 
*              THIS PARAMETER CAN BE RETRIEVED AS THE FIRST OPTIONAL
*              PARAMETER IN A SUBSEQUENT 'GET' REQUEST. WHEN 'IPRM3' =0,
*              NO CHANGE IS MADE TO THE CLASS BUFFER HEADER.
* 
*      IPRM4 = WHEN 'ICNWD' 'Z'-BIT =1: LENGTH IN +WORDS OR -CHARACTERS OF
*        .     THE AMOUNT OF DATA TO BE MOVED FROM THE  CALLER'S 'IPRM3'
*        .     BUFFER INTO THE CLASS 'Z' BUFFER. THE LENGTH MAY BE <= THE 
*        O     ACTUAL 'Z' BUFFER SPACE IN S.A.M., BUT THE ORIGINAL 'Z'
*        R     BUFFER LENGTH SPECIFICATION IN THE CLASS BUFFER HEADER 
*        .     WILL REMAIN UNCHANGED. 
*        .
*      IPRM4 = WHEN 'ICNWD' 'Z'-BIT =0: OPTIONAL PARAMETER, WHICH WILL BE 
*              STORED IN THE CLASS BLOCK HEADER IN S.A.M. 
*              THIS PARAMETER CAN BE RETRIEVED AS THE SECOND OPTIONAL 
*              PARAMETER IN A SUBSEQUENT 'GET' REQUEST. WHEN 'IPRM4' =0,
*              NO CHANGE IS MADE TO THE CLASS BUFFER HEADER.
* 
*      ICLAS = CLASS NUMBER, ONTO WHICH THE COMPLETED REQUEST IS TO BE
*              RE-QUEUED  OR, THE CLASS WHICH IS TO RECEIVE I/O COMPLETION
*              INFORMATION, WHEN THE REQUEST HAS BEEN RE-QUEUED ONTO
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*              AN EQUIPMENT TABLE ENTRY. IF -1, OTHER PARAMETERS ARE IGNORED
*              AND THE CURRENTLY-QUEUED SOURCE-CLASS BLOCK SIZE IS MADE POS.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*              A DEVICE QUEUE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
* 
*      KCLAS = CLASS NUMBER, FROM WHICH THE FIRST-QUEUED COMPLETED REQUEST
*              IS TO BE REMOVED.
* 
* 
*      KEY   = OPTIONAL 'RN' NUMBER, WHICH MAY BE SPECIFIED TO ALLOW
*              THE CALLER TO REQUEUE A CLASS BUFFER ONTO A DEVICE WHICH 
*              HAS BEEN LOCKED BY THE LU-LOCKING PROCEDURE. THE VALUE 
*              SPECIFIED MUST BE THAT WHICH WAS RETURNED BY 'LURQ'. 
* 
*************************************************************************** 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
*      JSB #RQUE/#NQUE  * #RQUE CALLING SEQUENCE >>> SEARCH MODE <<< *
*      DEF *+9[OR *+10] (#NQUE ENTRY IGNORES 'ICLAS' QUEUE LIMIT CHECKS)
*      DEF ICODE    REQUEST CODE: NEGATIVE= CLASS SEARCH; SEE BELOW.
*      DEF ICNWD    CONTROL WORD(S) 
*      DEF IBUFR    SEARCH BUFFER ADDRESS.
*      DEF ILEN     SEARCH BUFFER LEN(+WORDS) OR OFFSET(1'S COMPLEMENT WDS) 
*      DEF IPRM3    GET-RETURN PARAMETER#1 OR Z-BUFFER ADDRESS
*      DEF IPRM4    GET-RETURN PARAMETER#2 OR Z-BUFFER LENGTH (+WDS/-CHARS) 
*      DEF ICLAS    DESTINATION CLASS NUMBER
*      DEF KCLAS    SOURCE CLASS NUMBER 
*     [DEF KEY]     LU-LOCK PASSWORD (RN) [OPTIONAL]
*   <ERROR  RETURN> <A&B> = ASCII CODE [RETURN HERE IF ERROR] 
*   <NORMAL RETURN> <A&B> = 0 
* 
*   WHERE:
* 
*      ICODE = REQUEST CODE: -17,-18,-19,-20;-27,-28,-29,-30;-37,-38,-39,-40; 
*              (RESPECTIVELY EQUIVALENT TO CLASS READ, CLASS WRITE, CLASS 
*               CONTROL, AND CLASS WRITE-READ, WITHIN ALL GROUPS OF CODES.) 
*              A NEGATIVE VALUE SIGNIFIES A USER'S REQUEST TO SEARCH WITHIN 
*              A SPECIFIC PORTION (SEE TABLE, BELOW) OF ALL CLASS BLOCKS
*              WHICH ARE QUEUED ON THE SOURCE CLASS, IN ORDER TO LOCATE AND 
*              REMOVE THAT PARTICULAR BLOCK WHICH MATCHES THE USER-SPECIFIED
*              SEARCH-REFERENCE DATA (SEE 'IBUFR','ILEN', BELOW). IF THE
*              USER HAS SPECIFIED A LOGICAL UNIT OF ZERO, AND IF THE SOURCE 
*              (KCLAS) AND DESTINATION CLASS (ICLAS) NUMBERS ARE EQUAL, THEN
*              THE LOCATED--IF ANY--CLASS BLOCK WILL BE REQUEUED TO THE HEAD
*              OF THE SOURCE CLASS QUEUE. IF THE SOURCE AND DESTINATION 
*              CLASS NUMBERS ARE NOT THE SAME, THEN THE LOCATED--IF ANY-- 
*              CLASS BLOCK WILL BE REQUEUED ONTO THE END OF THE DESTINATION 
*              CLASS QUEUE. 
*              IF THE USER HAS SPECIFIED A NON-ZERO LOGICAL UNIT, THEN THE
*              LOCATED CLASS BLOCK WILL BE REQUEUED TO A DEVICE, AS NOTED 
*              ABOVE, FOR POSITIVE REQUEST CODES. 
* 
*                               ICODE VALUES
*              +--------+--------+--------+--------+-+--------+ 
*      IF LU#O,! CLASS  ! CLASS  ! CLASS  ! CLASS  !*! SEARCH ! 
*      BECOMES:!  READ  ! WRITE  ! CONTROL!WRT-READ!*! BUFFER ! 
*              +--------+--------+--------+--------+-+--------+ 
*              !   17   !   18   !   19   !   20   !*!  NONE  ! 
*              +--------+--------+--------+--------+-+--------+ 
*              !  -17   !  -18   !  -19   !  -20   !*!   ALL  ! 
*              +--------+--------+--------+--------+-+--------+ 
*              !  -27   !  -28   !  -29   !  -30   !*!DATA BUF! 
*              +--------+--------+--------+--------+-+--------+ 
*              !  -37   !  -38   !  -39   !  -40   !*! Z-BUF. ! 
*              +--------+--------+--------+--------+-+--------+ 
* 
*      ICNWD = SAME AS NON-SEARCH MODE; SEE ABOVE.
* 
*      IBUFR = USER REFERENCE BUFFER, CONTAINING 1 TO 10 WORDS, FOR COM-
*        .     PARISON WITH CLASS BLOCK DATA, WHEN SEARCHING FOR CLASS BLOCK. 
*        .
*        .     *** NOTE: FOR THE CASE OF MULTI-WORD REFERENCE OPERATIONS, 
*        .     WHEN THE LOCATED BLOCK IS TO BE REQUEUED ONTO AN EQT AS A
*        .     CLASS I/O CONTROL REQUEST('ICODE'= -19,-29,-39, AND 'ICNWD'
*        .     LU FIELD #0), THE WORD IMMEDIATELY FOLLOWING 'IBUFR' 
*        .     (LOCATION ='IBUFR'+'ILEN') MUST CONTAIN THE "OPTIONAL" 
*        .     CONTROL PARAMETER WHICH WILL BE SPECIFIED TO THE DEVICE
*        .     DRIVER. THIS PARAMETER IS REQUIRED BY #RQUE, BUT MAY BE
*        .     OPTIONAL FOR THE DRIVER. 
*        .
*      ILEN  = POSITIVE WORD COUNT >0: SIZE OF USER'S REFERENCE BUFFER. 
* 
*      IBUFR = SINGLE WORD SEARCH REFERENCE, FOR COMPARISON WITH A SINGLE 
*        .     WORD IN THE CLASS BLOCK, WHICH IS LOCATED AT AN OFFSET INTO
*        .     THE SPECIFIED BUFFER(SEE 'ICODE'), AS DEFINED BY 'ILEN'. 
*        .
*        .     *** NOTE: FOR THE CASE OF THE SINGLE WORD SEARCH, WHEN THE 
*        .     LOCATED BLOCK IS REQUESTED TO BE REQUEUED ONTO AN EQT AS 
*        .     A CLASS I/O CONTROL REQUEST (ICODE=-19,-29,-39; 'ILEN' IS
*        .     NEGATIVE; AND 'ICNWD' LU FIELD #0), 'IBUFR' MUST POINT TO
*        .     A 2-WORD ARRAY: WORD#1 =SINGLE WORD SEARCH REFERENCE, AND
*        .     WORD#2 ="OPTIONAL" CONTROL PARAMETER.
*        .
*      ILEN  = 1'S COMPLEMENT, SIGNIFYING A SINGLE-WORD SEARCH REFERENCE. 
*              THIS VALUE IS CONVERTED TO A POSITIVE OFFSET FOR COMPUTATION 
*              OF A SPECIFIC ADDRESS WITHIN THE SPECIFIED CLASS BLOCK BUFFER
*              (SEE 'ICODE'). THE CONTENTS OF THIS ADDRESS WILL BE COMPARED 
*              TO THE SINGLE WORD SEARCH REFERENCE (SEE 'IBUFR'), WHEN
*              ATTEMPTING TO LOCATE THE DESIRED CLASS BLOCK.
* 
*      IPRM3 = SAME AS NON-SEARCH MODE; SEE ABOVE.
* 
*      IPRM4 = SAME AS NON-SEARCH MODE; SEE ABOVE.
* 
*      ICLAS = SAME AS NON-SEARCH MODE; SEE ABOVE.
* 
*      KCLAS = SAME AS NON-SEARCH MODE; SEE ABOVE.
* 
*              ** NOTE: FOR CLASS SEARCH OPERATIONS, WHEN 'LOGICAL UNIT' =0,
*                       IF DESTINATION CLASS = SOURCE CLASS, THEN 
*                       THE LOCATED CLASS BLOCK WILL BE REQUEUED ONTO THE 
*                       HEAD OF KCLAS. IF ICLAS # KCLAS, THE LOCATED CLASS
*                       BLOCK WILL BE REQUEUED ONTO THE END OF ICLAS. 
* 
*      KEY   = SAME AS NON-SEARCH MODE; SEE ABOVE.
* 
      SKP 
* 
*  #RQUE ERROR INDICATIONS: 
* 
*    ERROR DETECTION WILL RESULT IN A RETURN TO THE CALLER, WITH THE
*    REQUESTED ACTION NOT PERFORMED.
* 
*    THE <A&B>-REGISTERS WILL CONTAIN ASCII ERROR CODES, AS FOLLOWS:
* 
*    IO00 : INVALID CLASS SPCIFICATION. 
* 
*    IO01 : PARAMETER MISSING, OR INVALID, OR CLASS SEARCH FAILED.
* 
*    IO02 : INVALID LOGICAL UNIT. 
* 
*    IO04 : INVALID BUFFER SPECIFICATION. 
* 
*    IO10 : PROGRAM WAITING ON SOURCE CLASS (REQUEUEING NOT ALLOWED). 
* 
*    DS08 : RESOURCES NOT AVAILABLE OR 'ICLAS' QUEUE LIMIT EXCEEDED.
* 
*    LU03 : LOGICAL UNIT LOCKED/INVALID PASSWORD. 
* 
*    RQ   : REQUEST CODE IS INVALID.
* 
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
* 
* RTE-M,IV CLASS QUEUE DESCRIPTION: 
* 
* 
*              CLASS TABLE
*           +---------------+ 
* $CLAS ....+ NO. CLASSES(3)+     CLASS BLOCK #1       LAST CLASS BLOCK 
*           +---------------+    +---------------+    +----------------+
* (CLASS#3) +    POINTER    +->->+    POINTER    +->->+ 1XX(TERMINATOR)+
*           +---------------+    +---------------+    +----------------+
* (CLASS#2) +1XX(ALLOCATED) +    +    CONWORD    +    +                +
*           +---------------+    +---------------+    +----------------+
* (CLASS#1) +000(AVAILABLE) +    +PRIORITY/STATUS+    +                +
*           +---------------+    +---------------+    +----------------+
*                                +  BLOCK SIZE   +    +                +
*                                +---------------+    +----------------+
*                                +  CLASS WORD   +    +                +
*                                +---------------+    +----------------+
*                                +DATA LEN/CON PR+    +                +
*                                +---------------+    +----------------+
*                                +GET P1/Z-BUF AD+    +                +
*                                +---------------+    +----------------+
*                                +GET P2/Z-BUF LN+    +                +
*                                +---------------+    +----------------+
*                                +               +    +                +
*                                +     DATA      +    +                +
*                                +               +    +                +
*                                +    BUFFER     +    +                +
*                                +               +    +                +
*                                +---------------+    +----------------+
*                                +               +    +                +
*                                +  Z - BUFFER   +    +                +
*                                +  (OPTIONAL)   +    +                +
*                                +               +    +                +
*                                +---------------+    +----------------+
* 
* 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
* 
* RTE-L CLASS QUEUE DESCRIPTION:
* 
* 
*              CLASS TABLE
*           +---------------+ 
* $CLTA ->->+ NO. CLASSES(3)+     CLASS BLOCK #1       LAST CLASS BLOCK 
*           +---------------+    +---------------+    +----------------+
* (CLASS#3) +    POINTER    +->->+    POINTER    +->->+ 1XX(TERMINATOR)+
*           +---------------+    +---------------+    +----------------+
* (CLASS#2) +1XX(ALLOCATED) +    +    CONWORD    +    +                +
*           +---------------+    +---------------+    +----------------+
* (CLASS#1) +000(AVAILABLE) +    +DATA ADR/CON PR+    +                +
*           +---------------+    +---------------+    +----------------+
*                                +DA.LN/PRM2/XLOG+    +                +
*                                +---------------+    +----------------+
*                                +GET R1/Z-BUF AD+    +                +
*                                +---------------+    +----------------+
*                                +GET R2/Z-BUF LN+    +                +
*                                +---------------+    +----------------+
*                                +PRIORITY/STATUS+    +                +
*                                +---------------+    +----------------+
*                                +   BLOCK SIZE  +    +                +
*                                +---------------+    +----------------+
*                                +  CLASS WORD   +    +                +
*                                +---------------+    +----------------+
*                                + GET PARAM UV  +    +                +
*                                +---------------+    +----------------+
*                                +               +    +                +
*                                +     DATA      +    +                +
*                                +               +    +                +
*                                +    BUFFER     +    +                +
*                                +               +    +                +
*                                +---------------+    +----------------+
*                                +               +    +                +
*                                +  Z - BUFFER   +    +                +
*                                +  (OPTIONAL)   +    +                +
*                                +               +    +                +
*                                +---------------+    +----------------+
* 
* 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      SKP 
#NQUE NOP           ALTERNATE ENTRY: NO #QCNT LIMIT CHECKS. 
      JSB $LIBR     DECLARE THIS TO BE
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      NOP            A PRIVILEGED ROUTINE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      DEF TDB        A RE-ENTRANT ROUTINE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      LDA #NQUE     TRANSFER THE ALTERNATE-ENTRY FLAG 
      STA NOLIM     SAVE PROTECTED COPY OF '#NQUE'. 
      STA #RQUE     (RETURN POINTER) TO NORMAL ENTRY POINT. 
      JMP GETPR     GO TO OBTAIN USER'S PARAMETERS. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TDB   NOP           TEMPORARY DATA BLOCK. 
      ABS #RQUE-TDB TDB SIZE. 
RTNPT NOP           RETURN POINTER. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
NOLIM NOP           PROTECTED COPY OF '#NQUE'.
ICODE NOP           REQUEST CODE. 
ICNWD NOP           CONTROL WORD(S).
IBUFR NOP           DATA BUFFER ADDRESS OR CONTROL PARAMETER. 
ILEN  NOP           DATA BUFFER LENGTH
IPRM3 NOP           RETURN PRAM.1 OR Z-BUFFER ADDRESS.
IPRM4 NOP           RETURN PRAM.2 OR Z-BUFFER LENGTH. 
ICLAS NOP           DESTINATION CLASS NUMBER. 
KCLAS NOP           SOURCE CLASS NUMBER.
KEY   NOP           LU-LOCK PASSWORD (RN).
#RQUE NOP           NORMAL ENTRY. 
      JSB $LIBR     DECLARE THIS TO BE
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      DEF TDB        A RE-ENTRANT ROUTINE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      NOP            A PRIVILEGED ROUTINE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GETPR JSB .ENTP     OBTAIN DIRECT ADDRESSES 
PRPTR DEF ICODE      FOR ALL PARAMETERS.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      STA RTNPT     SAVE RETURN ADDRESS.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      CLA           <A>=0 FOR 'CONFG' & 'ERR' INITIALIZATION
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      STA EXADJ     INITIALIZE FOR ERROR RETURN.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
INIT  JMP CONFG     CONFIGURE ON FIRST PASS; NOP,THEREAFTER.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      STA ERCOD     INITIALIZE THE
      STA ERCOD+1    ERROR STORAGE
      STA SERFL       AND SEARCH FLAG =0. 
      LDB DM9       INITIALIZE A
      STB TEMP       COUNTER FOR PARAMETER PROCESSING.
      CPA ICNWD     IF A CONTROL WORD WASN'T SPECIFIED, 
      JMP ERI01      THEN REJECT  THE REQUEST.
* 
      DLD ICNWD,I   GET THE USER'S CONTROL WORD(S). 
      SSA,RSS       IF THE SIGN OF WORD#1 IS CLEAR, 
      JMP STCON      THEN IT'S A SINGLE CONWORD.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      LDA B         GET FUNCTION BITS FROM WORD#2.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      AND B77       IT'S 'XLUEX' FORMAT: ISOLATE LU 
      IOR B          AND FORM A SINGLE CONWORD. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
STCON STA CONWD     SAVE LOCALLY. 
      LDB PRPTR     GET POINTER TO PARAMETER ADDRESSES. 
PLOOP LDA B,I       GET THE PARAMETER ADDRESS (OR ZERO).
      CPB KEYPT     IF THIS IS THE PASSWORD PARAMETER,
      JMP GETKY      THEN IT'S OPTIONAL, SO IGNORE CCHECKS; 
      SZA,RSS         ELSE, IF PARAMETER WAS NOT SUPPLIED,
      JMP ERI01        THEN REJECT THE INVALID REQUEST! 
* 
      CPB IBUFP     IF THIS IS THE BUFFER ADDRESS PARAMETER,
      JMP SVPRM       THEN RETAIN AN ADDRESS, NOT A VALUE.
      CPB IPR3P     IF THIS IS  POSSIBLE Z-BUFFER ADDRESS,
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      STA IPR3A       SAVE IT AS SOURCE FOR Z-BUF. OVERLAY. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP SVPRM      THEN THE ADDRESS WILL BE REQUIRED. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GETKY LDA A,I       GET THE USER-SUPPLIED PARAMETER.
      STA B,I       SAVE PARAMETER, LOCALLY.
SVPRM INB           ADVANCE PARAMETER ADDRESS POINTER.
      ISZ TEMP      ALL PARAMETERS PROCESSED? 
      JMP PLOOP      NO. CONTINUE PROCESSING. 
      LDA ICLAS     GET DESTINATION CLASS PARAMETER.
      CPA DM1       IF IT'S A BLOCK SIZE RESET REQUEST, THEN
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP EXIT       IGNORE IT IN THE RTE-L ENVIRONMENT;
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP MAPSW      BYPASS NEEDLESS PROCESSING.
* 
      LDA XPRIO,I   GET CALLERS PRIORITY, 
      STA PRIOR      AND SAVE FOR LATER USE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      LDA ICODE     GET CALLER'S REQUEST CODE.
      STA B         SAVE A COPY IN <B>. 
      RAL           POSITION BITS #15,#14 FOR NEG. CODE TEST. 
      SSA,SLA,RSS   IF THE REQUEST CODE IS POSITIVE, THEN 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP CNTL?      IT'S NOT A SEARCH. CHECK FOR CONTROL.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP CKSCL      IT'S NOT A SEARCH; SKIP INITIALIZATION.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
      RAR           RESTORE THE NEGATIVE REQUEST CODE.
      ADA D16       IF THE REQUEST CODE 
      SSA,RSS        IS BETWEEN -1, AND -16,
      JMP ERRQ        THEN IT IS IN ERROR: "RQ  "!
* 
      ADA D4        IF THE REQUEST CODE 
      SSA,RSS        IS BETWEEN -17, AND -20, 
      JMP SM1         THEN IT'S A SEARCH MODE 1 REQUEST.
* 
      ADA D6        IF THE REQUEST CODE 
      SSA,RSS        IS BETWEEN -21, AND -26, 
      JMP ERRQ        THEN IT IS AN ERROR: "RQ  "!
* 
      ADA D4        IF THE REQUEST CODE 
      SSA,RSS        IS BETWEEN -27, AND -30, 
      JMP SM2         THEN IT'S A SEARCH MODE 2 REQUEST.
* 
      ADA D6        IF THE REQUEST CODE 
      SSA,RSS        IS BETWEEN -31, AND -36, 
      JMP ERRQ        THEN IT IS AN ERROR: "RQ  "!
* 
      ADA D4        IF THE REQUEST CODE 
      SSA            IS BEYOND -40, THEN
      JMP ERRQ        IT IS AN ERROR: "RQ  "! 
* 
      ADB D20       CONVERT REQUEST CODE: -17 TO -20. 
      LDA DM3       SEARCH FLAG =-3: Z-BUFFER, ONLY.
      JMP INITS     GO COMPLETE SEARCH INITIALIZATION.
* 
SM2   ADB D10       CONVERT REQUEST CODE: -17 TO -20. 
      LDA DM2       SEARCH FLAG =-2: DATA BUFFER, ONLY. 
      JMP INITS     GO COMPLETE SEARCH INITIALIZATION.
* 
SM1   LDA DM1       SEARCH FLAG =-1: ENTIRE BUFFER. 
INITS STA SERFL     SET SEARCH FLAG FOR 'CLCHK'.
      CMB,CCE,INB   CONVERT TO POSITIVE REQUEST CODE, 
      RBL,ERB        ADD THE NO-ABORT BIT(#15), AND 
      STB ICODE       RESTORE AS POSITIVE REQUEST CODE. 
      LDA ILEN      GET REFERENCE-DATA BUFFER LENGTH. 
      SSA,RSS       IF POSITIVE, THEN 
      JMP MVREF      GO TO OBTAIN THE REFERENCE DATA; 
* 
      LDA IBUFR,I     ELSE, IT'S AN OFFSET, SO GET
      STA RFBUF        THE SINGLE-WORD REFERENCE, 
      ISZ IBUFR         POINT TO "OPTIONAL" CONTROL PARAM., 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP CNTL?          AND BYPASS THE BUFFER MOVE.
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP CKSCL          AND BYPASS THE BUFFER MOVE.
* 
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MVREF CMA,INA,SZA,RSS MAKE REFERENCE BUFFER LENGTH NEGATIVE.
      JMP ERI01     IF LENGTH IS ZERO: "IO01" ERROR!
* 
      ADA RFMAX     IF HIS BUFFER EXCEEDS THE INTERNAL
      SSA             REFERENCE BUFFER BUFFER SIZE, 
      JMP ERI01        THEN REJECT THE REQUEST! 
* 
      LDA IBUFR     GET THE REFERENCE BUFFER ADDRESS. 
      LDB RFBFA     GET ADDRESS OF INTERNAL BUFFER, 
      JSB .MVW       AND MOVE DATA TO LOCAL BUFFER. 
      DEF ILEN
      NOP 
      STA IBUFR     SET POINTER TO "OPTIONAL" CONTROL PARAM.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
      LDB ICODE     GET THE REQUEST CODE, AGAIN.
CNTL? RBR           POSITION FOR TESTING. 
      SSB,SLB,RSS   SKIP, IF THIS IS A CONTROL REQUEST; 
      JMP MAPSW      ELSE, IGNORE OPTIONAL PARAMETER. 
* 
      LDA IBUFR,I   CONTROL: GET THE ACTUAL PARAMETER,
      STA IBUFR      AND SAVE IT FOR LATER USE. 
* 
MAPSW JMP CKSCL     BYPASS MAP CODE:NON-DMS / NOP:DMS 
      RSA           GET CURRENT MAP STATUS. 
      RAL,RAL       POSITION CURRENT STATUS FOR RESTORATION.
      STA DMSTS     SAVE FOR RESTORATION, UPON EXIT.
      SJP CKSCL     ENABLE SYSTEM MAP, AND CONTINUE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
CKSCL LDA KCLAS     GET THE SOURCE CLASS-WORD.
      JSB CLCHK     GO TO DETERMINE ITS VALIDITY. 
      LDA SERFL     IF THE SEARCH FAILED
      SSA            TO LOCATE THE SPECIFIED
      JMP ERI01       BUFFER, THEN REPORT ERROR IO01! 
* 
      SZA           IF THIS IS A SEARCH OPERATION,
      JMP CKDCL      THEN THE POINTERS ARE ALREADY SET. 
* 
      DLD BLKAD     SAVE THE SOURCE-CLASS ADDRESS POINTERS: 
      DST SBLK      <A>=SAM BLOCK FWA, <B>=CLASS TABLE ADDR.
      STA B         SAVE BLOCK ADDRESS FOR USE BY 'SETP'. 
      JSB SETP      ESTABLISH POINTERS TO THE CLASS HEADER. 
* 
CKDCL LDA ICLAS     GET THE DESTINATION CLASS-WORD. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      CPA DM1       IF THE PARAMETER IS =-1, THEN 
      JMP RESET      GO TO RESET POSSIBLE NEG. BLOCK SIZE.
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      CPA KCLAS     IF SOURCE CLASS = DESTINATION CLASS, NO 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP CNWCK      NEED TO VERIFY AGAIN OR CHECK Q-COUNT. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP SRCH?      NEED TO VERIFY AGAIN OR CHECK Q-COUNT. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
      JSB CLCHK       ELSE, GO TO VERIFY ITS VALIDITY.
* 
      LDA NOLIM     GET ALTERNATE-ENTRY FLAG. 
      SZA           IF IT IS SET, THEN NO CHECKING DESIRED, 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP CNWCK      SO BYPASS DESTINATION QUEUE LIMIT TEST.
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP SRCH?      SO BYPASS DESTINATION QUEUE LIMIT TEST.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      LDB QCNT      GET BLOCK COUNT FOR DESTINATION CLASS.
      ADB #QLIM     SUBTRACT MAXIMUM ALLOWABLE COUNT. 
      CLE,SSB,RSS   IF MAXIMUM EXCEEDED, REJECT THE REQUEST.
      JMP ERDS8       THEN ANOTHER BLOCK IS NOT ACCEPTABLE. 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CNWCK LDA ICNWD     GET THE USER-SPECIFIED CONWORD
      ELA,RAR       GET XLUEX SIGN BIT --IF ANY.
      AND B377      ISOLATE LU FIELD: BITS# 7-0.
      SEZ,RSS       IF IT'S XLUEX FORMAT, SKIP; 
      AND B77        ELSE, ISOLATE ONLY BITS# 5-0.
      STA LU        SAVE THE MASKED LOGICAL UNIT NO.
      SZA,RSS       IF IT'S LOGICAL UNIT NO. 0
      JMP LENCK      SKIP THE EQT CHECKS. 
      SPC 1 
*  VERIFY THAT CALLER HAS REQUESTED DATA FOR A VALID LOGICAL UNIT NO. 
      SPC 1 
      ADA DM1       SUBTRACT ONE, FOR VALIDITY CHECKING.
      STA B         SAVE FOR DRT INDEXING.
      CMA,CLE       IF THE SPECIFIED LU NUMBER
      ADA LUMAX       IS NOT IN THE RANGE:
      SEZ,RSS           1<=LU<=LUMAX, THEN
      JMP ERI02           THE LU IS INVALID!
* 
*  RETRIEVE THE CONTENTS OF THE DEVICE REFERENCE TABLE ENTRY. 
      SPC 1 
      ADB DRTA      FIND THE DEVICE REFERENCE TABLE ENTRY 
      LDA B         INDEX INTO
      ADA LUMAX      THE SECOND HALF OF THE DRT.
      LDA A,I       GET WORD 2 OF THE DRT ENTRY.
      SSA           IF THE SIGN IS SET, THEN
      JMP ERDS8      THE LU IS DOWN--REJECT THE CALL! 
* 
      LDA B,I       GET THE CONTENTS OF THE DRT ENTRY.
      STA DRTEN     SAVE THE DRT ENTRY TEMPORARILY. 
      AND B77       ISOLATE THE EQT ORDINAL.
      SZA,RSS       IF THE ORDINAL IS ZERO, 
      JMP ERI02       REJECT: ILLEGAL TO REQUE TO EQT #0! 
      SKP 
*  CALCULATE THE ADDRESS OF THE EQUIPMENT TABLE ENTRY LINKED TO THE LU. 
      SPC 1 
      ADA DM1       ORDINAL-1 =RELATIVE EQT ENTRY ORDINAL.
      MPY D15       RELATIVE ENTRY*WORDS/ENTRY =OFFSET. 
      LDB A         GET EQT-ENTRY OFFSET IN <B>.
      ADB EQTA      FORM ABSOLUTE EQT-ENTRY ADDRESS IN <B>. 
      STB EQTAD     SAVE THE EQT ADDRESS FOR THE CALLER.
* 
      ADB D4        POINT TO WORD #5 OF THE EQT ENTRY.
      LDA B,I       GET THE CONTENTS. 
      RAL,SLA       IF THE DEVICE IS BUSY, OR IT IS 
      JMP CDISC      WAITING FOR DMA--CONTINUE; 
      SSA             ELSE, IF IT IS DOWN,
      JMP ERDS8        THEN REJECT THE REQUEST! 
* 
CDISC AND B74K      ISOLATE THE EQUIPMENT TYPE CODE.
      CPA B30K      IF THE EQT IS LINKED TO A DISC FILE,
      JMP ERI02       * ERROR: INVALID LU!
* 
      LDA DRTEN     GET THE DRT ENTRY.
      LSR 6         MOVE LU LOCK FLAG (BITS#10-6) TO LSB'S. 
      AND B37       ISOLATE THE RN INDEX VALUE. 
      SZA,RSS       IS THE LOGICAL UNIT LOCKED? 
      JMP PASS       NO, NO OTHER CHECKING REQUIRED.
* 
      LDB KEY        YES, GET THE USER-SUPPLIED PASSWORD. 
      SZB,RSS       IF CALLER DID NOT SUPPLY PASSWORD,
      JMP ERLU3      THEN ACCESS IS DENIED; ELSE, 
      STA B           SAVE THE RN TABLE INDEX VALUE.
      ADA RNTBA     INDEX INTO THE RN TABLE 
      LDA A,I        AND EXTRACT THE ENTRY CONTENTS.
      AND B377      ISOLATE CURRENT USER'S INDEX VALUE, 
      ALF,ALF        AND POSITION TO UPPER BYTE.
      IOR B         RE-CONSTITUTE A VALID PASSWORD. 
      CPA KEY       DOES THE CALLER QUALIFY TO USE THE LU?
      JMP PASS       YES, CONTINUE PROCESSING THE REQUEST.
      JMP ERLU3      NO, REJECT THE REQUEST.
* 
PASS  LDB ICODE     GET THE CALLER'S REQUEST CODE.
      RBL,CLE,ERB   REMOVE THE 'NO-ABORT' BIT.
      ADB DM17      IF THE CALLER'S REQUEST CODE
      CLE,SSB        IS LESS THAN 17 (CLASS READ),
      JMP ERRQ        THEN THE REQUEST IS UNACCEPTABLE! 
* 
      ADB DM4       IF THE CALLER'S REQUEST CODE
      CLE,SSB,RSS    IS GREATER THAN 20 (WRITE-READ), 
      JMP ERRQ        IT ALSO, IS NOT ACCEPTABLE! 
* 
      ADB D5        RESTORE THE MASKED REQUEST CODE.
      CLE 
      CPB D4        IF THE CODE IS =4 (WRITE-READ), 
      CLB,INB        THEN CONVERT IT TO 1 (READ). 
      LDA CONWD     GET THE FUNCTION DATA.
      AND B137C     ISOLATE 'Z' & FUNCTION (BITS# 12,10-6). 
      STA CONWD     SAVE THEM TEMPORARILY.
* 
      LDA DRTEN     GET DRT ENTRY, AGAIN. 
      AND B174K     ISOLATE SUB-CHANNEL BITS (#15-13).
      ELA,ALF       POSITION MSB TO <E>, AND
      RAL,RAL        POSITION LSB'S TO BITS #5-2. 
      IOR CONWD     INCLUDE THE CALLER'S FUNCTION, AND
      SEZ            IF THE SUB-CHANNEL MSB WAS SET, THEN 
      IOR BIT13       SET BIT #13 OF THE CONWD, ALSO. 
      IOR B         INCLUDE CALLER'S REQUEST CODE, AND
      STA CONWD      SAVE THE CONWD FOR LATER USE.
* 
      LDA TERMA,I   GET THE DESTINATION-CLASS TERMINATOR. 
      AND B377      ISOLATE THE PENDING REQUEST COUNT.
      CPA B377      IF IT HAS ALREADY REACHED MAXIMUM (255),
      JMP ERDS8      THEN REJECT THE NEW REQUEST! 
* 
      CLA 
      CPB D3        IF THIS IS A CONTROL REQUEST, 
      STA ILEN       THEN DATA LENGTH MUST BE IGNORED.
LENCK LDB CONWD     GET THE CONTROL WORD, AND POSITION
      BLF,CLE,ERB    THE Z-BIT(#12) TO <E>, FOR TESTS.
      CLB,SEZ,RSS   IF THIS ISN'T A DOUBLE-BUFFERED REQUEST,
      JMP DLNCK      THEN BYPASS THE Z-BUFFER LENGTH CHECK; 
      LDB IPRM4       ELSE, GET THE Z-BUFFER LENGTH VALUE.
      SSB,RSS       IF LENGTH IS IN NEGATIVE BYTES, SKIP; 
      JMP DLNCK      ELSE, GO ACCUMULATE DATA BUFFER LENGTH.
      BRS           CONVERT BYTE COUNT TO NEGATIVE WORDS, 
      CMB,INB        AND MAKE THE WORD COUNT POSITIVE.
DLNCK LDA ILEN      GET CALLER'S DATA BUFFER LENGTH.
      SSA,RSS       IF LENGTH IS IN NEGATIVE BYTES, SKIP; 
      JMP SAVLN      ELSE, GO SAVE WORD-MOVE LENGTHS. 
      ARS           CONVERT BYTE COUNT TO NEGATIVE WORDS, 
      CMA,INA        AND MAKE THE WORD COUNT POSITIVE.
SAVLN DST TEMP      SAVE: <A>=DATA MOVE CNT.,<B>=Z MOVE CNT.
      ADA B         ADD TOTAL NUMBER OF WORDS TO BE MOVED.
      CMA,INA,SZA,RSS  MAKE TOTAL NEG., AND IF IT'S =0, 
      JMP DEQUE         THEN THE BUFFERS REMAIN UNTOUCHED.
* 
      LDB BLKSP,I   GET THE TOTAL BLOCK SIZE. 
      SSB           IF THE BLOCK SIZE IS ALREADY NEGATIVE,
      CMB,INB        MAKE IT POSITIVE, FOR THE LENGTH CHECK.
      ADB NHDSZ     SUBTRACT HEADER: REMAINDER= BUFFER SIZE.
      ADA B         ADD USER'S SIZE TO ACTUAL BUFFER SIZE.
      SSA           USER'S REQUEST > ACTUAL BUFFER SIZE?
      JMP ERI04      YES! REJECT THE REQUEST: ERROR -8. 
* 
      LDA CONWP,I   GET CONTROL WORD FROM CLASS HEADER. 
      ALF,CLE,ERA   POSITION Z-BIT TO <E>, FOR TESTING. 
      SEZ,CLE,RSS   IF THE DOUBLE-BUFFER BIT ISN'T SET, 
      JMP MVDAT      THEN BYPASS ADDITIONAL LENGTH CHECKS.
      LDA ZLENP,I   GET QUEUED Z-BUFFER LENGTH FROM S.A.M.
      CMA           IF THE USER-SPECIFIED 
      ADA TEMP+1     NUMBER OF WORDS TO BE MOVED
      SSA,RSS         EXCEEDS THE AVAILABLE BUFFER SPACE, 
      JMP ERI04        THEN THE REQUEST CANNOT BE HONORED!
* 
      LDA DABFA     GET THE FWA OF THE DATA BUFFER IN S.A.M.
      ADA TEMP      ADD NUMBER OF CALLER'S WORDS TO BE MOVED, 
      CMA,INA        AND FORM AN OFFSET VALUE FOR TESTING.
      ADA ZBUFP,I   IF THE MOVE WILL EXCEED THE ALLOCATED 
      SSA            MEMORY FOR THE CLASS DATA BUFFER,
      JMP ERI04       THEN THE REQUEST CANNOT BE PROCESSED! 
* 
MVDAT LDB TEMP      GET THE DATA BUFFER MOVE COUNT. 
      SZB,RSS       IS THE DATA BUFFER TO BE MODIFIED?
      JMP ZMOVE      NO. CHECK FOR Z-BUFFER MODIFICATION. 
* 
      LDA CONWP,I   GET CONWORD FROM CLASS HEADER.
      AND D3        ISOLATE REQUEST CODE. 
      CPA D3        IF THIS IS A CLASS CONTROL BUFFER,
      JMP ERI04      THEN OVERLAYING DATA IS UNACCEPTABLE!
* 
      JSB .CBX      SAVE MOVE COUNT IN <X> [DMS USE ONLY].
      LDA IBUFR     GET CALLER'S DATA BUFFER ADDRESS. 
      LDB DABFA     GET ADDRESS OF DATA BUFFER IN S.A.M.
DMS1  JSB .MVW      MOVE FROM USER TO CLASS [DMS: MWF,RSS]. 
      DEF TEMP
      NOP 
* 
ZMOVE LDB TEMP+1    GET THE OPTIONAL BUFFER MOVE COUNT. 
      SZB,RSS       IS THE Z-BUFFER TO BE MODIFIED? 
      JMP DEQUE      NO. GO TO DEQUEUE THE CLASS BLOCK. 
* 
*#####STA ZLENP,I    YES. SAVE Z-BUFFER LENGTH: WORDS,
*#####STB ZBUFP,I          AND ADJUSTED Z-BUFFER ADDRESS. 
      JSB .CBX      SAVE MOVE COUNT IN <X> [DMS USE ONLY].
      LDA IPR3A     GET CALLER'S Z-BUFFER ADDRESS.
      LDB ZBUFP,I   GET ADDRESS OF Z-BUFFER IN S.A.M. 
DMS2  JSB .MVW      MOVE FROM CALLER TO CLASS [DMS:MWF,RSS].
      DEF TEMP+1
      NOP 
* 
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SRCH? LDA SERFL     IF THIS IS NOT A
      SZA,RSS        CLASS SEARCH OPERATION, THEN 
      JMP XCALL       GO TO CALL THE SYSTEM.
* 
      JSB $LIBR     LOWER THE M.P. FENCE, IN ORDER TO 
      NOP            FACILITATE CLASS LIST MANIPULATION.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DEQUE LDA SQHED     IF THE REQUEST IS TO
      LDB SBLK       RE-QUEUE ONTO THE SAME CLASS,
      CPB TERMA       AND ONLY ONE ENTRY IS PRESENT, THEN 
      STA TERMA        POINT TO CORRECT TERMINATOR ADDRESS. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      LDA SBLK,I    DE-QUEUE THE COMPLETED CLASS REQUEST
      STA SQHED,I    FROM THE SOURCE-CLASS QUEUE. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      LDB CONWP,I   RETAIN ORIGINAL CONWORD FOR LATER USE.
      LDA LU        GET THE MASKED LOGICAL UNIT NO. 
      SZA,RSS       IF NONE WAS SUPPLIED, THEN GO TO
      JMP OPTPR      CHECK FOR OVERLAY OF OPTIONAL PARAMS.
* 
      LDA CONWD     GET THE CONFIGURED CONTROL WORD.
      AND CLR11     ENSURE THAT BIT #11 IS CLEAR, 
      IOR CLAST      THAT T-FIELD =3, 
      STA CONWP,I     AND USE THE CONFIGURED PARAMETER. 
      CCE,SLA       SET <E> =1 FOR WRITE REQUEST. 
      CLE           SET <E> =0 FOR READ/CONTROL.
      LDA PRIOR     GET THE EQT QUEUEING PRIORITY NUMBER. 
      STA STPRP,I   STORE THE PRIORITY INTO THE ENTRY.
      LDA BLKSP,I   GET THE BLOCK LENGTH, AND MAKE IT 
      CMA,SSA,INA    NEGATIVE -OR POSITIVE, IF ALREADY NEG. 
      SEZ           IF IT'S A WRITE REQUEST, SAVE NEG. SIZE 
      STA BLKSP,I    TO PREVENT 'RTIOC' FROM RELEASING S.A.M. 
* 
      LDA ICLAS     STORE THE CLASS-WORD FOR THE PROGRAM
      STA CLSWP,I     THE 5TH WORD OF THE CLASS REQUEST.
      LDA ICODE     GET THE CALLER'S REQUEST CODE.
      RAR           POSITION FOR CONTROL REQUEST CHECKS.
      SSA,SLA,RSS   IF NOT A CONTROL REQUEST, 
      JMP NOTCN      THEN BYPASS CONTROL PROCESSING.
* 
      LDA IBUFR     GET "OPTIONAL" CONTROL PARAMETER. 
      STA CONTP,I   TRANSFER PARAMETER TO BLOCK HEADER. 
* 
NOTCN LDA ILEN      GET DATA LENGTH SPECIFICATION.
      SZA           IGNORE THE LENGTH PARAMETER?
      STA XLOGP,I    NO. OVERLAY PARAM. WITH CALLER'S VALUE.
OPTPR BLF,SLB       IF THERE IS A Z-BUFFER PRESENT, 
      JMP CK4LU      THEN DO NOT ALTER 'Z' SPECIFICATIONS.
* 
      LDA IPRM3     GET OPTIONAL GET-RETURN-PARAMETER #1. 
      SZA           IGNORE IT?
      STA ZBUFP,I    NO. MOVE USER'S PARAM. TO BLOCK HEADER.
      LDA IPRM4     GET OPTIONAL GET-RETURN-PARAMETER #2. 
      SZA           IGNORE IT?
      STA ZLENP,I    NO. MOVE USER'S PARAM. TO BLOCK HEADER.
* 
CK4LU LDA LU        IF A LOGICAL UNIT NUMBER
      SZA,RSS        WAS NOT SPECIFIED, THEN
      JMP REQUE       GO REQUEUE THE BLOCK ONTO DEST. CLASS.
* 
      ISZ TERMA,I   ADD 1 TO THE PENDING-REQUEST COUNT. 
      JSB LINK      LINK INTO EQT QUEUE BY PRIORITY.
      SEZ           IF THE EQT WAS ACTIVE,
      JMP EXIT       RETURN TO THE CALLER; ELSE,
      LDA EQTAD       GET THE EQT ADDRESS, AND
      JSB $DLAY        GO TO INITIATE THE I/O OPERATION.
      JMP EXIT      RETURN--OPERATION COMPLETE. 
* 
REQUE LDA SERFL     IF THIS IS NOT A
      SZA,RSS        CLASS SEARCH OPERATION, THEN 
      JMP ENDLS       REQUEUED BLOCK GOES TO END OF QUEUE.
* 
      LDA ICLAS     IF SEARCHING, AND THE DESTINATION CLASS 
      CPA KCLAS      IS EQUAL TO THE SOURCE CLASS, THEN THE 
      JMP HEDLS       LOCATED BLOCK GOES TO HEAD OF LIST; 
      JMP ENDLS        ELSE, ADD TO END OF DEST. CLASS. 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
HEDLS LDA SCTBA,I   GET CURRENT CLASS TABLE ENTRY.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      CLE,SSA       IF CLASS QUEUE IS EMPTY (AFTER DEQUE),
      CCE            THEN SET 'TERMA' MOD. FLAG.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      STA SBLK,I    SET NEW BLOCK'S LINK =POINTER OR TERM.
      LDA SBLK      GET POINTER TO NEW BLOCK AND
      STA SCTBA,I    SET INTO CLASS TABLE ENTRY.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      SEZ,CLE       IF THE FLAG IS SET, 
      STA TERMA      UPDATE THE CLASS TERMINATOR ADDRESS. 
      JMP NEGBL     BYPASS END OF QUEUE LINKAGE.
* 
ENDLS LDA TERMA,I   GET DESTINATION CLASS-TERMINATOR, 
      LDB SBLK       AND ADDRESS OF SOURCE BLOCK. 
      STA B,I       END-OF-QUEUE IS 1RST WORD OF NEW BLOCK. 
      STB TERMA,I   LINK THE NEW BLOCK AT END-OF-QUEUE. 
      LDA ICLAS     GET THE DESTINATION CLASS WORD, 
      STA CLSWP,I    AND REPLACE THE OLD WITH THE NEW.
* 
NEGBL LDA BLKSP,I   GET THE BLOCK LENGTH. IF IT IS
      CMA,SSA,INA,RSS  NEGATIVE, MAKE IT POSITIVE, AND
      STA BLKSP,I       RESTORE THE BLOCK SIZE VALUE. 
* 
      LDA DQHED     IF CLASS-TERMINATOR WAS THE ONLY THING
      CPA TERMA      IN THE DESTINATION CLASS, THEN 
      RSS             ANY WAITING PROGRAM MUST BE SCHEDULED;
      JMP EXIT         ELSE: OPERATION COMPLETE--RETURN.
* 
      LDB SBLK,I    GET CLASS-TERMINATOR FROM IT'S NEW LOCN.
      RBL,CLE,SLB,ELB  POSITION WAIT-BIT(#14) TO <E>. 
      SEZ,RSS       IF SOMEONE IS WAITING, SKIP TO SCHEDULE;
      JMP EXIT       ELSE: OPERATION COMPLETE--RETURN.
* 
      RBR,RBR       REPOSITION TERMINATOR (LESS BIT#14),
      STB SBLK,I     AND RESTORE IT TO ITS RIGHTFUL PLACE.
* 
      JSB $SCD3    SCHEDULE WAITER(<A>=CLASS-TABLE ADDRESS) 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JSB $LIBX     RESTORE THE M.P. FENCE, 
      DEF *+1        AND ALSO RE-ENABLE THE 
      DEF HEDCK       INTERRUPT CAPABILTIY. 
* 
HEDCK LDA KCLAS     IF SOURCE CLASS = DESTINATION CLASS,
      CPA ICLAS      THEN THE TASK IS DONE: THE BLOCK 
      JMP EXIT        IS ALREADY AT THE HEAD OF 'KCLAS'.
* 
XCALL LDA ICLAS     ADD NO-WAIT & RETHREAD BITS        #####
      IOR SGN13      TO MEET THE REQUIREMENTS          #####
      STA ICLAS       OF THE RTE-L OPERATING SYSTEM.   #####
* 
      LDA ICODE     IF THE REQUEUE REQUEST
      CPA D19N       REFERS TO A CLASS CONTROL BLOCK, 
      JMP CTLRQ       USE THE SPECIAL CALLING SEQUENCE. 
* 
      JSB EXEC      CALL THE SYSTEM TO REQUEUE THE BLOCK. 
      DEF RTN 
      DEF ICODE      REQUEST CODE: 17,18,20 (NO-ABORT)
      DEF CONWD      CONTROL WORD 
      DEF IBUFR,I    DATA BUFFER FOR OVERLAY. 
      DEF ILEN       LENGTH OF DATA BUFFER OVERLAY. 
      DEF IPRM3,I    OPT. PARAM./Z-BUF. FOR OVERLAY.
      DEF IPRM4      OPT. PARAM./LEN. FOR Z-BUF. OVERLAY. 
      DEF ICLAS      DESTINATION CLASS NUMBER(BIT#15,13=1)
      DEF KCLAS      SOURCE CLASS NUMBER. 
      DEF KEY        LU-LOCK PASSWORD (OPTIONAL). 
RTN   JMP SAVER      ERROR-RETURN POINT.
* 
      SSA            IF THE BLOCK COULD NOT BE REQUEUED,
      JMP ERDS8       TELL CALLER OF RESOURCE PROBLEM: DS08!
* 
      JMP EXIT       ALL IS WELL. COMPLETE THE REQUEST. 
* 
CTLRQ JSB EXEC      CALL SYSTEM TO RETHREAD A CONTROL BLOCK.
      DEF RTNC
      DEF ICODE     REQUEST CODE = 19 (NO-ABORT)
      DEF CONWD     CONTROL WORD. 
      DEF IBUFR,I   OPTIONAL PRAM.1 (FOR OVERLAY).
      DEF ICLAS     DESTINATION CLASS (BITS#15,13=1). 
      DEF ILEN      OPTIONAL PRAM.2 (FOR OVERLAY).
      DEF IPRM3,I   OPT. PRAM.3/Z-BUF. FOR OVERLAY. 
      DEF IPRM4     OPT. PRAM.4/LEN. FOR Z-BUF. OVERLAY.
      DEF KCLAS     SOURCE CLASS. 
      DEF KEY       OPTIONAL LU-LOCK PASSWWORD(RN). 
RTNC  JMP SAVER     ERROR-RETURN POINT. 
* 
      SSA           IF THE BLOCK COULD NOT BE REQUEUED, 
      JMP ERDS8      TELL CALLER OF RESOURCE PROBLEM: DS08! 
* 
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EXIT  LDA ERCOD     <A> = THE ERROR CODE WORD #1, 
      LDB ICODE      AND THE CALLER'S REQUEST CODE. 
      SSB,RSS       IF THE REQUEST CODE SIGN BIT IS NOT SET,
      JMP CLPRM      GO DIRECTLY TO PREPARE FOR NEXT ENTRY; 
      SZA,RSS         ELSE, IF NO ERROR HAS BEEN DETECTED,
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ISZ EXADJ        THEN SET RETURN TO P+2: NORMAL RETURN
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ISZ #RQUE        THEN SET RETURN TO P+2: NORMAL RETURN. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CLPRM LDA DM9       CLEAR 
      STA NOLIM      ALL OF THE 
      LDB PRPTR       PARAMETER 
      CLA              ADDRESSES
CLOOP STA B,I           IN PREPARATION
      INB                FOR THE
      ISZ NOLIM           NEXT
      JMP CLOOP            USER'S REQUEST.
      DLD ERCOD     NORMAL RETURN:<A&B>=0 ERROR:<A&B>=ASCII.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EXIT2 JMP LBEX      BYPASS MAP CODE: NON-DMS / NOP: DMS 
      JRS DMSTS LBEX *** RESTORE THE APPROPRIATE MAPS. ***
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LBEX  JSB $LIBX     RETURN TO THE CALLER, VIA THE 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      DEF TDB 
EXADJ NOP 
* 
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      DEF #RQUE      RTE PRIVILEGED ROUTINE PROCESSOR.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
*  ERROR PROCESSING SECTION.
* 
ERDS8 DLD "DS"      DS08: RESOURCES NOT AVAILABLE.
      JMP SAVER 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ERLU3 DLD "LU"      LU03: LOGICAL UNIT LOCKED/ACCESS DENIED.
      JMP SAVER 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ERRQ  DLD "RQ"      RQ  : REQUEST CODE IS INVALID.
      JMP SAVER 
ERI00 LDB "00"      IO00: INVALID CLASS SPECIFICATION.
      JMP GETIO 
ERI01 LDB "01"      IO01: PARAMETER MISSING OR INVALID. 
      JMP GETIO 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ERI02 LDB "02"      IO02: INVALID LOGICAL UNIT. 
      JMP GETIO 
ERI04 LDB "04"      IO04: INVALID BUFFER. 
      JMP GETIO 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ERI10 LDB "10"      IO10: PROGRAM WAITING ON SOURCE CLASS.
GETIO LDA "IO"      GET THE ASCII "IO" MESSAGE PREFIX,
* 
SAVER DST ERCOD      AND SAVE THE CONFIGURED ERROR MSG. 
      JMP EXIT      GO TO RETURN TO THE CALLER. 
* 
"00"  ASC 1,00
"01"  ASC 1,01
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"02"  ASC 1,02
"04"  ASC 1,04
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"10"  ASC 1,10
"IO"  ASC 1,IO
"DS"  ASC 2,DS08
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"LU"  ASC 2,LU03
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"RQ"  ASC 2,RQ
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*  RESET CURRENTLY-QUEUED SOURCE-CLASS BLOCK SIZE WORD TO A POSITIVE VALUE. 
*[RE-QUEUED CLASS WRITES HAVE NEGATIVE BLOCK SIZE TO PREVENT BUFFER RELEASE]
* 
RESET LDA BLKSP,I   GET THE BLOCK SIZE VALUE. 
      CMA,SSA,INA,RSS  IF IT'S NEGATIVE, MAKE IT POSITIVE,
      STA BLKSP,I       AND RESTORE THE CORRECT VALUE.
      JMP EXIT      RETURN. 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      SKP 
CLCHK NOP           ENTRY/EXIT: CLASS VALIDITY CHECKING 
      STA TEMP      SAVE THE CLASS-WORD FOR LATER USE.
      AND B377      ISOLATE THE CLASS NUMBER
      STA B         SAVE IT FOR A TABLE INDEX.
      CMA,CLE,INA,SZA,RSS IF THE NUMBER IS ZERO,
      CLE,RSS              PREPARE FOR AN ERROR-EXIT. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ADA DFCLS,I   IF IT IS GREATER THAN MAXIMUM,
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ADA $CLTA+0,I IF IT IS GREATER THAN MAXIMUM,
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      CLA,SEZ,RSS    THEN TAKE THE
      JMP ERI00       ERROR EXIT. 
* 
      STA QCNT      INITIALIZE CLASS QUEUE BLK CNT. =0. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ADB DFCLS     COMPUTE, AND SAVE,
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ADB $CLTA+0   COMPUTE, AND SAVE,
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      STB DQHED      THE CLASS-TABLE ENTRY ADDRESS. 
      STB TEMP+2    SAVE PREVIOUS LINK ADDRESS FOR SEARCH.
      LDA TEMP      GET THE CLASS WORD. 
      LDB B,I       GET THE CLASS-TABLE ENTRY.
      CPA KCLAS     IF THE SOURCE-CLASS IS BEING CHECKED, 
      SSB,RSS        THEN CONFIRM THAT SOMETHING IS QUEUED. 
      SZB,RSS       ALSO VERIFY THAT THE CLASS IS ASSIGNED. 
      JMP ERI00     * ERROR: NOT ASSIGNED OR NO QUEUE.
* 
      CCE,SSB,RSS   IS THIS THE CLASS-TERMINATOR? 
      CLE,RSS        NO SET BLOCK-COUNT FLAG. 
      LDB DQHED      YES, GET THE CORRECT ADDRESS.
      STB BLKAD     SAVE ADDR.=CLASS-QUEUE POINTER, IF ANY. 
      SEZ,CLE,RSS   DO NOT COUNT TERMINATOR, IF NULL QUEUE. 
LOOP  ISZ QCNT      COUNT NUMBER OF QUEUED BLOCKS.
      NOP 
      LDA SERFL     GET THE SEARCH FLAG.
      SSA           IF THE FLAG IS SET, 
      JSB SERCH      THEN GO TO SEARCH THE BLOCK. 
      LDA B,I       TRACK 
      SSA            DOWN THE 
      JMP SAVAD       CLASS TERMINATOR. 
      SZA,RSS       IF THE LINK WORD IS ZERO, 
      JMP ERI00      THEN THE CLASS QUEUE IS CORRUPT! 
* 
      STB TEMP+2    SAVE LAST LINK-WORD ADDRESS FOR SEARCH. 
      LDB B,I       LAST BLOCK NOT YET LOCATED, 
      JMP LOOP       SO CONTINUE THE SEARCH.
* 
SAVAD STB TERMA     SAVE THE CLASS-TERMINATOR ADDRESS.
      LDA TEMP      ISOLATE THE 
      AND SCMSK      USER-SPECIFIED SECURITY CODE,
      STA B           AND SAVE IT FOR COMPARISON. 
      LDA TERMA,I   GET THE CLASS-TERMINATOR. 
      AND SCMSK     ISOLATE ITS SECURITY CODE.
      CPA B         IF THEY COMPARE, THEN 
RSSIN RSS            ALL'S WELL--PROCEED; 
      JMP ERI00       ELSE, REPORT THE ERROR! 
* 
      LDA TEMP      GET THE CLASS-WORD, AGAIN.
      CPA KCLAS     IF IT'S THE SOURCE-CLASS, THEN
      RSS            SKIP TO CHECK FOR WAITERS; 
      JMP CLCHK,I     ELSE, RETURN TO THE CALLER. 
* 
      LDB TERMA,I   GET THE CLASS-TERMINATOR. 
      RBL           POSITION THE WAIT-BIT(#14) FOR TEST.
      SSB           IF SOMEONE IS WAITING,
      JMP ERI10      THEN RE-QUEUEING IS IMPROPER!
      JMP CLCHK,I   VALID CLASS: RETURN--POINTERS SET.
* 
* CLASS SEARCH: EXAMINE SOURCE-CLASS BLOCK FOR STRING = CALLER'S STRING.
* 
SERCH NOP 
      STB TEMP+1    SAVE THE CURRENT-BLOCK FWA. 
      JSB SETP      GO TO ESTABLISH BLOCK POINTERS. 
      LDA SERFL     GET THE SEARCH FLAG VALUE.
      ADA D2        CHECK FOR MODE 1 OR 2.
      SSA           IS IT MODE 1 OR 2?
      JMP MODE3      NO, GO TO PROCESS MODE3. 
* 
      LDB CONWP,I   GET CONWORD FROM CLASS HEADER.
      RBR           POSITION BITS #0,1 FOR RC=3 TEST. 
      SSB,SLB,RSS   IF NOT A CLASS CONTROL BUFFER,
      JMP M1OR2      CONTINUE SEARCH PROCESSING;
      JMP EOS         ELSE, IGNORE THIS BUFFER. 
* 
M1OR2 LDB DABFA     MODE 1/2: DATA BUFFER FWA 
      STB PNTR1      IS STARTING POINT FOR SEARCH.
      SZA           MODE 1 OR 2?
      JMP MODE1      MODE 1: GO SET END POINT.
* 
      LDA XLOGP,I   MODE 2: GET XLOG (DATA BUFFER LENGTH).
      SSA,RSS       IS THE SPECIFICATION NEGATIVE?
      JMP ENDM2      NO--NO NEED FOR CONVERSION.
* 
      ARS            YES, CONVERT TO WORD COUNT,
      CMA,INA         AND MAKE THE LENGTH POSITIVE. 
ENDM2 ADA B         COMPUTE AND SAVE: 
      STA ENDCB      END-OF-SEARCH = FWA DATA BUF. + XLOG.
      JMP CKOFS     GO CHECK FOR SINGLE WORD SEARCH.
* 
MODE1 LDA BLKSP,I   GET THE CLASS BLOCK SIZE. 
      SSA           NEGATIVE SPECIFICATION? 
      CMA,INA        YES, MAKE POSITIVE.
      ADA B         COMPUTE 
      ADA NHDSZ      AND SAVE: END-OF-SEARCH =
      STA ENDCB       FWA DATA BUF.+ BLOCK SIZE - HEAD SIZE.
      JMP CKOFS     GO CHECK FOR SINGLE WORD SEARCH.
* 
MODE3 LDA CONWP,I   IF THIS IS A Z-BUFFER SEARCH
      ALF,SLA        AND THIS CLASS BLOCK 
      JMP *+2         DOES NOT CONTAIN A Z-BUFFER,
      JMP EOS          THEN, IGNORE THIS BLOCK. 
* 
      LDB ZBUFP,I   STARTING POINT FOR MODE3
      STB PNTR1      IS FIRST WORD OF Z-BUFFER. 
      LDA ZLENP,I   GET Z-BUFFER LENGTH.
      SSA,RSS       IS IT NEGATIVE? 
      JMP ENDM3      NO--SKIP CONVERSION TO WORDS.
* 
      ARS           CONVERT TO WORD COUNT 
      CMA,INA        AND MAKE IT POSITIVE.
ENDM3 ADA B         COMPUTE AND SAVE: 
      STA ENDCB      END-OF-SEARCH= FWA Z-BUF. + Z-BUF LEN. 
* 
CKOFS LDA ILEN      GET USER'S REFERENCE BUF. LENGTH. 
      CMA,SSA       IF IT'S POSITIVE(FULL SEARCH),
      JMP SCAN       GO SCAN SPECIFIED NUMBER OF WORDS; 
* 
      ADB A          ELSE, ADD POSITIVE OFFSET VALUE, 
      STB PNTR1       AND SET START-OF-SEARCH POINTER.
      CMA,INA       IF THE OFFSET 
      ADA ENDCB      STARTING ADDRESS IS
      SZA             EQUAL TO, OR IF IT IS 
      SSA              BEYOND THE END OF THE SEARCH BUFFER, 
      JMP EOS           THEN IGNORE THIS BLOCK. 
* 
      CLA,INA       END-OF-SEARCH POINTER 
      ADA B          IS COMPUTED TO BE EQUAL
      STA ENDCB        TO START+1 FOR SINGLE WORD SEARCH. 
SCAN  LDA RFBUF     GET FIRST REFERENCE FROM CALLER,
SLOOP CPA B,I        AND COMPARE TO CLASS BUFFER WORD.
      JMP SRCHA     THEY'RE EQUAL, SO COMPARE ALL THE REST. 
NEXT1 INB           NOT EQUAL, SO ADVANCE CLASS BUFFER ADDR.
      STB PNTR1      AND RETAIN THE POINTER.
      CPB ENDCB     IF WE'VE EXAMINED THE ENTIRE CLASS BUFF.
      JMP EOS        THEN THIS IS NOT THE DESIRED BLOCK 
      JMP SLOOP       ELSE, CONTINUE THE SEARCH.
* 
SRCHA LDA ILEN      GET USER'S REFERENCE LENGTH.
      SSA           IF IT'S NEGATIVE, 
      JMP FOUND      THEN THE MATCH HAS BEEN MADE.
* 
      LDA RFBFA     <A>=COMPARE BUFF. ADDR,<B>=CLASS BUF AD.
      JSB .CMW      DO A WORD-BY-WORD COMPARISON. 
      DEF ILEN
      NOP 
      JMP FOUND     THIS IS THE DESIRED BLOCK.
      NOP           IT'S NOT THIS ONE,
      LDA RFBUF      SO RETRIEVE 1RST WORD OF CALLER'S REF. 
      LDB PNTR1       AND THE CLASS BUFFER POINTER, 
      JMP NEXT1        AND GO TO FIND A NEW STARTING POINT. 
* 
FOUND CLA           PREVENT THE TRANSFER OF INVALID DATA
      STA ILEN        INTO THE REQUEUED CLASS BLOCK.
      LDA DQHED     SAVE THE CLASS TABLE ADDRESS (SOURCE),
      STA SCTBA      FOR POSSIBLE USE IN REQUEUEING.
      DLD TEMP+1    <A>=CURRENT BLK AD.,<B>=PREVIOUS LINK AD. 
      DST SBLK      SAVE POINTERS TO LOCATED BLOCK. 
      STA SERFL     SET SEARCH FLAG =BLOCK FOUND (POS,#0).
EOS   LDB TEMP+1    END OF SEARCH: <B> RESTORED.
      JMP SERCH,I   RETURN TO FIND CLASS TERMINATOR.
* 
ENDCB NOP           ADDRESS: END OF CLASS BLOCK SEARCH+1. 
PNTR1 NOP           POINTER INTO CLASS DATA BUFFER. 
SCTBA NOP           CLASS TABLE ENTRY ADDRESS (SOURCE). 
SERFL NOP           SEARCH FLAG:0=NONE,-=SEARCHING,+=FOUND. 
      SKP 
*  ESTABLISH POINTERS TO ELEMENTS OF CLASS BLOCK HEADER.
* 
SETP  NOP           <B>=CLASS BLOCK ADDRESS; <A>=DON'T CARE.
      LDA DM8       ESTABLISH 
      STA ENDCB      POINTERS 
      LDA HEDP        TO THE
SETLP INB              SOURCE-CLASS 
      STB A,I           BLOCK HEADER
      INA                WHICH IS LOCATED 
      ISZ ENDCB           IN SYSTEM 
      JMP SETLP            AVAILABLE MEMORY.
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ADB D2        COMPUTE DATA BUFFER ADDRESS.
      STB DABFA     CONFIGURE THE POINTER.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      JMP SETP,I    RETURN. 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*  LINK CLASS REQUEST INTO EQT QUEUE, ACCORDING TO PRIORITY.
*  [ CODE SIMULATES RTIOC, SINCE ENTRY INTO RTIOC'S 'LINK' NOT PROVIDED. ]
* 
LINK  NOP 
      LDB EQTAD     GET EQT QUEUE-HEAD ADDRESS. 
      CLE,RSS       SET FIRST-FLAG AND SKIP TO START SCAN.
* 
LINK1 SEZ,CCE,RSS   IF FIRST, RESET FLAG & SKIP FIRST ENTRY.
      JMP LINK4     GO TO START THE SCAN. 
      STB TEMP      SAVE ADDRESS OF ENTRY UNDER EXAMINATION.
      INB           POINT TO SECOND WORD OF THE ENTRY.
      LDA B,I       GET THE CONTROL WORD. 
      INB           ADVANCE POINTER TO ENTRY'S THIRD WORD.
      AND CLAST     ISOLATE THE REQUEST TYPE ('T'BITS#15,14). 
      RAL,RAL       POSITION TO BITS#1,0 TO TEST & CLEAR. 
      SLA,ARS       TEST FOR BUFFERED REQUEST & CLEAR BIT.
      JMP LINK2      BUFFERED: <B> POINTS TO PRIORITY.
      SLA,ARS       TEST FOR SYSTEM REQUEST & CLEAR BIT.
      JMP LINK3      SYSTEM: USE PRIORITY =0; <A> =0. 
      ADB D4        NORMAL USER REQ.: PRIOR. IN ID WORD#7.
LINK2 LDA B,I       GET PRIORITY OF ENTRY UNDER EXAMINATION.
LINK3 LDB TEMP      GET THE ENTRY'S ADDRESS.
      CMA,INA       SUBTRACT THE ENTRY'S PRIORITY FROM
      ADA PRIOR      THE PRIORITY OF THE NEW REQUEST. 
      SSA           IF CURRENT ENTRY'S PRIORITY IS LOWER
      JMP LINK5      THAN NEW ONE, GO LINK-IN NEW REQUEST.
* 
LINK4 STB TEMP+1    SAVE ADDRESS OF PREVIOUS ENTRY. 
      LDB B,I       GET ADDRESS OF NEXT ENTRY IN QUEUE. 
      ELB,CLE,ERB   CLEAR POSSIBLE SIGN AND SAVE <E>. 
      SZB           IF END-OF-LIST: SKIP TO ADD NEW ENTRY;
      JMP LINK1      ELSE, CONTINUE THE SCAN. 
* 
LINK5 LDA SBLK      GET THE ADDRESS OF THE NEW ENTRY. 
      STB SBLK,I    LINK LOWER PRIORITY ENTRIES OR 0 (EOL). 
      XOR TEMP+1,I  KEEP THE SIGN 
      AND C100K       OF THE OLD WORD 
      XOR TEMP+1,I    IF IT WAS SET.
      STA TEMP+1,I  LINK NEW REQ. AFTER HIGHER PRIOR. ENTS. 
      JMP LINK,I    RETURN:<E>=0 START I/O;<E>=1 I/O ACTIVE.
* 
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      SKP 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
A     EQU 0 
B     EQU 1 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DRTA  EQU 1652B     DRT POINTER.
EQTA  EQU 1650B     EQT POINTER.
LUMAX EQU 1653B     DRT ENTRY COUNT.
XPRIO EQU 1726B     CALLER'S PRIORITY-WORD POINTER. 
B37   OCT 37
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
B77   OCT 77
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
B174K OCT 174000
B137C OCT 13700 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
B377  OCT 377       CLASS NUMBER MASK.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
B30K  OCT 30000 
B74K  OCT 74000 
BIT13 OCT 20000 
C100K DEC 32767 
CLAST OCT 140000    T-FIELD FOR CLASS REQUESTS
CLR11 OCT 173777    BIT #11 MASK FOR RTIOC COMPATABILITY. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D2    DEC 2 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D3    DEC 3 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D4    DEC 4 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D5    DEC 5 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D6    DEC 6 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D8    DEC 8 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D10   DEC 10
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D15   DEC 15
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D16   DEC 16
D20   DEC 20
DM1   DEC -1
DM2   DEC -2
DM3   DEC -3
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DM4   DEC -4
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DM8   DEC -8
DM9   DEC -9
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DM10  DEC -10 
D19N  OCT 100023    NO-ABORT CLASS CONTROL CODE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DM17  DEC -17 
DFCLS DEF $CLAS+0   DIRECT CLASS TABLE ADDRESS. 
#CLTA DEF DFCLS     CLASS TABLE ADDRESS POINTER.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
HEDP  DEF CONWP     ADDRESS OF FIRST SOURCE-CLASS POINTER.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
HEDSZ EQU D10              SIZE OF CLASS BLOCK HEADER.
NHDSZ EQU DM10             NEG. BLOCK HEADER SIZE.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
HEDSZ EQU D8                  SIZE OF CLASS BLOCK HEADER. 
NHDSZ EQU DM8                 NEG. SIZE OF HEADER.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IBUFP DEF IBUFR 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IPR3A NOP           ADDRESS: USER'S Z-BUFFER OVERLAY DATA.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IPR3P DEF IPRM3 
KEYPT DEF KEY 
RFBFA DEF RFBUF     ADDRESS: SEARCH COMPARISON BUFFER.
RFBSZ EQU 10        SIZE OF CLASS SEARCH COMPARISON BUFFER. 
RFMAX ABS RFBSZ     MAXIMUM SIZE: CLASS SEARCH BUFFER.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
RNTBA DEF $RNTB+0   RN TABLE ADDRESS. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SCMSK OCT 17400     CLASS SECURITY-CODE MASK. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SGN13 OCT 120000    NO-WAIT,RETHREAD BITS(#15,13) 
* 
#CLTA DEF $CLTA+0   CLASS TABLE ADDRESS POINTER.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
#PRGL EQU 0         LU FOR <PROGL> MESSAGES: DEFAULT = NONE.
#QLIM DEC -11       -[(MAX. ALLOWABLE QUEUED BLOCKS)+1] 
      SKP 
* >> DO NOT CHANGE ORDER OF 'BLKAD','DQHED','SBLK','SQHED' << 
* 
BLKAD NOP           DESTINATION: ADDRESS =SAM BLOCK POINTER.
DQHED NOP           DESTINATION: CLASS-QUEUE START
CONWD NOP           CONFIGURED I/O CONTROL WORD.
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DRTEN NOP           DRT ENTRY FOR SPECIFIED LU. 
DMSTS NOP           DMS MAP STATUS
EQTAD NOP           EQT ADDRESS 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ERCOD BSS 2         ERROR CODE STORAGE (ASCII)
TERMA NOP           DESTINATION: CLASS-HEADER ADDRESS 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LU    NOP           MASKED LOGICAL UNIT NUMBER. 
PRIOR NOP           CALLING PROGRAM PRIORITY. 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
QCNT  NOP           CLASS QUEUE BLOCK COUNT ACCUMULATION. 
RFBUF BSS RFBSZ     CLASS SEARCH COMPARISON BUFFER. 
SBLK  NOP           SOURCE: ADDRESS =SAM BLOCK POINTER. 
SQHED NOP           SOURCE: CLASS-TABLE ADDRESS 
TEMP  BSS 3         TEMPORARY STORAGE 
* 
*  TABLE OF POINTERS TO SOURCE-CLASS HEADER PARAMETERS >>DO NOT CHANGE<<. 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      IFN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CONWP NOP           ADDRESS: CONTROL WORD.
CONTP NOP           ADDRESS: OPTIONAL CONTROL PARAMETER.
XLOGP NOP           ADDRESS: BUFFER LENGTH/TRANSMISSION LOG.
ZBUFP NOP           ADDRESS: OPTIONAL PARAM./Z-BUFFER ADDR. 
ZLENP NOP           ADDRESS: OPTIONAL PARAM./Z-BUFFER LEN.
STPRP NOP           ADDRESS: I/O STATUS / USER PRIORITY.
BLKSP NOP           ADDRESS: TOTAL BLOCK SIZE (WORDS).
CLSWP NOP           ADDRESS: CLASS IDENTIFICATION INFO. 
* 
DABFA NOP           FWA: DATA BUFFER. 
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CONWP NOP           ADDRESS: CONTROL WORD 
STPRP NOP           ADDRESS: USER PRIORITY / I/O STATUS 
BLKSP NOP           ADDRESS: TOTAL BLOCK SIZE (WORDS).
CLSWP NOP           ADDRESS: CLASS IDENTIFICATION INFO. 
XLOGP NOP           ADDRESS: BUF.LEN/CONTROL PRAM/TLOG
ZBUFP NOP           ADDRESS: OPTIONAL PARAM./Z-BUFFER ADDR. 
ZLENP NOP           ADDRESS: OPTIONAL PARAM./Z-BUFFER LEN.
* 
DABFA NOP           FWA: DATA BUFFER. 
CONTP EQU XLOGP     ADDRESS: CONTROL REQUEST PARAMETER
* 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      IFZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ORG BLKAD     ONE-TIME CONFIGURATION IN STORAGE AREA. 
* 
CONFG LDB $OPSY     GET THE OP-SYSTEM IDENTIFIER. 
      RBR,CLE,ERB   POSITION DMS BIT(#1) TO <E>.
      CLB,SEZ,CLE,RSS  IF DMS SYSTEM, SKIP TO ENABLE DMS
      JMP NODMS         CODE; ELSE JUST CLEAR CONFG. CALL.
      STA MAPSW     ALLOW SWITCHING TO THE SYSTEM MAP.
      STA EXIT2     PROVIDE FOR MAP RESTORATION, UPON EXIT. 
      LDA MWFIN     GET THE DMS 'MOVE-WORDS-FROM' MACRO 
      LDB RSSIN       AND AN ARBITRARY SKIP: 'RSS'. 
      DST DMS1      OVERLAY THE 'MVW' & ITS FOLLOWING 'DEF'.
      DST DMS2       FOR USE IN MAPPED-SYSTEM ENVIRONMENTS. 
NODMS CLA           SET <A>=0, FOR NORMAL INITIALIZATION. 
      STA INIT      NO FURTHER NEED FOR CONFIGURATION.
      JMP INIT+1    RETURN TO NORMAL PROCESSING.
* 
MWFIN MWF           'MOVE-WORDS-FROM' MACRO CODE. 
      ORR 
      UNL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      XIF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      LST >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 
SIZE  EQU *-#NQUE   < SIZE OF THIS MODULE > 
* 
      END 
                                                                                                              