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 .
* 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 .
* 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 .
* 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]
* =ASCII CODE[RETURN HERE IF ERROR & ICODE SIGN =1]
* = 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]
* = ASCII CODE [RETURN HERE IF ERROR]
* = 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 -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 =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 .
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 =SAM BLOCK FWA, =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 .
ADB EQTA FORM ABSOLUTE EQT-ENTRY ADDRESS IN .
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 , 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 , 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: =DATA MOVE CNT.,=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 , 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 [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 [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 =1 FOR WRITE REQUEST.
CLE SET =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 .
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(=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 = 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:=0 ERROR:=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 =COMPARE BUFF. ADDR,=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 =CURRENT BLK AD.,=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: 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 =CLASS BLOCK ADDRESS; =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: POINTS TO PRIORITY.
SLA,ARS TEST FOR SYSTEM REQUEST & CLEAR BIT.
JMP LINK3 SYSTEM: USE PRIORITY =0; =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 .
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:=0 START I/O;=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 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 .
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 =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