ASMB,R,Q,C
      HED LUQUE 91750-16134 REV.2013 800305 ALL 
      NAM LUQUE,18,25 91750-16134 REV.2013 800305 ALL 
      SPC 1 
******************************************************************
*  * (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.       *
******************************************************************
* 
* 
*    NAME: LUQUE
*  SOURCE: 91750-18134
*   RELOC: 91750-16134
*    PGMR: JOHN LAMPING 
* 
*    WRITTEN BY LYLE WEIMAN [MARCH 1979]
*    MODIFIED BY JOHN LAMPING [OCTOBER 1979]
* 
      EXT EXEC,RMPAR,CLRQ,RNRQ,#GRPM,XLUEX
      EXT #QRN,#LUMP,#NRVS
      EXT #LMPE,#SPLU 
      SUP 
* 
* 
* 
*     LUQUE IS THE DS/1000 PROGRAM SCHEDULED BY THE "VIRTUAL TERMINAL"
*     DRIVER WHEN AN I/O REQUEST IS MADE TO A "MAPPED" LU.
*     LUQUE DOES NOT HANDLE THE REQUEST, BUT ONLY ISSUES THE CLASS-I/O
*     "READ" REQUEST, WHICH ALLOWS THE DRIVER TO PASS INFORMATION ABOUT 
*     THE REQUEST (INCLUDING DATA, IN THE CASE OF "WRITE" REQUESTS) 
*     TO 'LUMAP', THE PROGRAM WHICH ACTUALLY CONVERTS THE I/O REQUEST 
*     INTO A "DEXEC" CALL.
* 
*     IF AN IMMEDIATE REJECT OF THE REQUEST OCCURS DUE TO 
*     INSUFFICIENT SYSTEM AVAILABLE MEMORY (SAM), OR THE NODE IS
*     QUIESCENT, LUQUE SENDS A "STOP" TO THE DRIVER.
* 
* 
*     IF AN ERROR OCCURS, THIS FACT IS RECORDED IN " #LMPE ", AN
*     ENTRY POINT IN SSGA, POSSIBLY INCLUDING THE NEXT TWO LOCATIONS, 
*     IF THE ERROR CODE IS ASCII.  #LMPE IS ONLY SET ON ERRORS.  THAT IS, 
*     ITS VALUE ONLY RECORDS THE LAST ERROR CONDITION, IF ANY.  THUS, IF
*     YOU ARE HAVING TROUBLE WITH "LU MAPPING", YOU MAY (IF YOU'VE INCLUDED 
*     PROGRAM "IOMAP" IN THE TROUBLESOME NODE) USE "IOMAP" TO RETURN THE
*     ERROR CODE(S) FROM #LMPE.  BEAR IN MIND, HOWEVER, THAT #LMPE DOES 
*     NOT NECESSARILY REFLECT THE LAST ERROR YOU SAW (THERE MAY BE OTHER
*     USERS OF "LU MAPPING" AT THE SAME NODE).  HOWEVER, IF YOU ARE THE 
*     ONLY USER OF "LU MAPPING" AT A GIVEN NODE, AND YOU CHECK #LMPE
*     IMMEDIATELY AFTER YOU FIND AN ERROR, YOU CAN FIND OUT WHAT WENT 
*     WRONG.
* 
*     THOSE ERROR CODES SET BY 'LUQUE' ARE SHOWN BELOW: 
* 
*   #LMPE     CAUSE                                   ACTION
*   ----- --------------------------------------      --------- 
*     1   SCHEDULE "SPECIAL" LU NOT DEVICE TYPE 0 -- IGNORE IT
*     2   SCHEDULE NOT FROM "LU MAPPING" DRIVER      IGNORE IT
*     3   SCHEDULE PARAMETER IS NON-EXISTANT LU      IGNORE IT
*     4   DS/1000 QUIESCENT RN IS SPECIFIED IN #QRN 
*         IS BAD (AN ERROR OCCURRED ON ATTEMPT
*         TO CHECK ITS STATUS)                       SEND 'STOP'
*     5   NODE IS QUIESCED                           SEND 'STOP'
*     6   LUMAP'S CLASS IS BAD                         "    " 
*     7   NOT ENOUGH SYSTEM AVAILABLE MEMORY           "    " 
*     8   ERROR ON ATTEMPT TO SCHEDULE 'LUMAP'
*         (MOST LIKELY, 'LUMAP' IS NOT IN SYSTEM)      "    " 
*     9   REMOTE NODE NUMBER NOT FOUND IN NRV          "    " 
*    10   DS/1000 NOT INITIALIZED, OR SHUT DOWN        "    " 
*    11   ERROR EXIT TAKEN ON CLASS # ALLOCATION       "    " 
*    12   NO CLASS #S AVAILABLE                        "    " 
* 
*   OTHER ASCII VALUES (> 20000B) OF #LMPE INDICATE "DS" OR OTHER 
*   SORT OF ERROR.  LOCATIONS #LMPE & #LMPE+1 WILL CONTAIN A 4-CHARACTER
*   ASCII ERROR CODE, DEFINED IN DS/1000 MANUALS IF "DS" ERROR, OR
*   RTE MANUALS OF OTHER ERROR.  #LMPE+2 CONTAINS THE REPORTING NODE
*   NUMBER
      SKP 
LUQUE EQU * 
      JSB RMPAR     RECOVER PARAMETERS
      DEF *+2 
      DEF PARAM 
      CLA           CLEAR "LUMAP" ERROR CODE
      STA  LMPE 
      LDA #SPLU     SPECIAL LU
      SZA,RSS         SET UP? 
      JMP EXIT      NO, NOT MUCH TO DO
      IOR BIT15     SET "TRUE LU" BIT 
      STA STPLU     SUBFUNCTION FOR STOP
      STA SPCLU     SUBFUNCTION FOR READ
* 
      LDA #GRPM     IS DS/1000 INITIALIZED
      SZA,RSS           OR SHUT DOWN? 
      JMP ERR10     UNINITIALIZED OR SHUT DOWN. 
* 
      JSB RNRQ      CHECK FOR QUIESCENT SYSTEM
      DEF *+4 
      DEF NWGLC     LOCK WORD:NO-WAIT,NO-ABORT,GLOBAL LOCK & CLEAR
      DEF #QRN      QUIESCENT SYSTEM RN 
      DEF EQT4      RETURN STATUS HERE
      JMP ERR4      BAD RN, ERROR # 4 
      LDA EQT4      IS THIS SYSTEM
      CPA K7          QUIESCED? 
      JMP ERR5      YES, ERROR # 5
      LDA #LUMP     PICK UP LUMAP'S CLASS NUMBER
      SZA           CLASS ALLOCATED?
      JMP X 
      JSB CLRQ      NO, ALLOCATE A CLASS NUMBER 
      DEF *+4 
      DEF K1N       ASSIGN A CLASS NUMBER, NO-WAIT, NO ABORT
      DEF CLASS     RETURN CLASS NUMBER HERE
      DEF ZERO        NO OWNERSHIP IS ASSIGNED. 
      JMP ERR11     --ERROR EXIT FROM CLRQ
      LDA CLASS 
      SZA,RSS       WAS ONE ALLOCATED?
      JMP ERR12     NO
      IOR  B200.    SET "DO NOT DE-ALLOCATE CLASS" BIT
      STA #LUMP     SAVE
X     EQU * 
      CCE 
      RAL,ERA       SET NO-WAIT BIT IN CLASS WORD.
      STA CLASS     SAVE LOCALLY
* 
      JSB EXEC      MAKE SURE LUMAP 
      DEF *+3         IS SCHEDULED
      DEF K10N
      DEF LUMAP 
      JMP ERR8      ERROR--PROBABLY NO 'LUMAP'
* 
      LDB DLEN      OBTAIN REQUEST LENGTH 
      SSB,RSS       CHARACTERS? 
      JMP *+4       NO
      CMB,INB       YES, CONVERT TO WORDS 
      INB 
      BRS 
      STB LEN       SAVE LENGTH 
* 
*     IF ORIGINAL REQUEST WAS A "WRITE", THEN INCREASE THE
*     BUFFER LENGTH FROM THE USER'S ORIGINAL LENGTH TO
*     INCLUDE THE CALLER'S ORIGINAL DATA
* 
      LDB HDRSZ     LOAD HEADER SIZE
      ADB LEN       ADD DATA SIZE 
      STB LEN 
      JSB #NRVS     FIND MASTER TIME-OUT
      DEF *+3 
      DEF RNODE     REMOTE NODE NUMBER
      DEF TOVAL 
      JMP ERR9      --ERROR: NODE NOT FOUND 
      LDA TOVAL     CONVERT MASTER TIME-OUT TO CENTOSECONDS 
      AND B377  
      CMA,INA       GET # TICKS LEFT
      ADA B377
      MPY  D500           TO GO IN EQT
      SSA           DID THIS OVERFLOW?
      LDA  B777.    YES, LOAD MAXIMUM TIME-OUT VALUE. 
      CMA,INA       CONVERT TO TWO'S COMPLEMENT 
      STA TOVAL       SAVE EQT TIME-OUT VALUE.
      JSB XLUEX     READ THE REQUEST TO LUMAP'S CLASS 
      DEF *+8 
      DEF K17N      NO ABORT
      DEF SPCLU     "SPECIAL" LU SUBFUNCTION 3700(8)
      DEF ZERO
      DEF LEN       DATA LENGTH 
      DEF VEQT      "VIRTUAL" EQT 
      DEF TOVAL     "MASTER" TIME-OUT VALUE TO SET IN EQT 
      DEF CLASS 
      JMP ERR6X     --ERROR, PROBABLY BAD CLASS NUMBER
* 
EXIT  JSB EXEC      TERMINATE LUQUE 
      DEF *+2 
      DEF K6
* 
      SKP 
* 
*     ERROR PROCESSING SECTION
* 
ERR6X EQU *         HERE ON BAD CLASS NUMBER ERROR
      CLA           CLEAR CLASS NUMBER
      STA #LUMP 
      JMP ERR6      SET ERROR CODE # 6, SEND 'STOP' & TERMINATE 
* 
ERR12 ISZ LMPE     ERROR # 12: LEAVE LMPE = 12
ERR11 ISZ LMPE     ERROR # 11: LEAVE LMPE = 11
ERR10 ISZ LMPE     ERROR # 10: LEAVE LMPE = 10
ERR9  ISZ LMPE     ERROR # 9: LEAVE LMPE = 9
ERR8  ISZ LMPE     ERROR # 8: LEAVE LMPE = 8
ERR7  ISZ LMPE     ERROR # 7: LEAVE LMPE = 7
ERR6  ISZ LMPE     ERROR # 6: LEAVE LMPE = 6
ERR5  ISZ LMPE     ERROR # 5: LEAVE LMPE = 5
ERR4  ISZ LMPE     ERROR # 4: LEAVE LMPE = 4
ERR3  ISZ LMPE     ERROR # 3: LEAVE LMPE = 3
ERR2  ISZ LMPE     ERROR # 2: LEAVE LMPE = 2
ERR1  ISZ LMPE     ERROR # 1: LEAVE LMPE = 1
      LDA LMPE
      STA #LMPE     RE-SET #LMPE ONLY ON ERRORS 
* 
*  CALL DRIVER TO SEND A STOP 
* 
      JSB XLUEX 
      DEF *+7 
      DEF K2N 
      DEF STPLU 
      DEF ZERO
      DEF ZERO
      DEF VEQT
      DEF SEQN
      NOP           IGNORE ERRORS 
      JMP EXIT
* 
      SKP 
* 
*     CONSTANTS AND STORAGE 
* 
* 
* 
* 
CLASS NOP 
LMPE  NOP           LOCAL STORAGE FOR ERROR CODE
B77   OCT 77
B377  OCT 377 
B200. OCT 20000     "DO NOT DE-ALLOCATE CLASS" BIT
BIT15 OCT 100000
B777. OCT 77777 
D500  DEC 500 
NWGLC OCT 140006    GLOBAL LOCK & CLEAR, WITHOUT WAITING, NO ABORT
ZERO  OCT 0 
K1N   OCT 140001    ALLOCATE CLASS#, NO-WAIT, NO-ABORT
K2    DEC 2 
K3    DEC 3 
K2N   OCT 100002    I/O WRITE REQUEST, NO-ABORT 
K6    DEC 6 
K7    DEC 7 
K10N  OCT 100012    SCHEDULE W/O WAIT, NO-ABORT 
K17N  OCT 100021
LUMAP ASC 3,LUMAP 
HDRSZ DEC 9         SIZE OF HEADER
LEN   NOP 
SPCLU NOP           "SPECIAL" LU NUMBER 
      OCT 3700      MUST FOLLOW SPCLU 
STPLU NOP           "STOP" LU AND SUBFUNCTION 
      OCT 3500      MUST FOLLOW STPLU 
TOVAL NOP           STORAGE FOR TIME-OUT VALUE TO SET (BY DRIVER) 
EQT4  NOP 
PARAM BSS 5 
VEQT  EQU PARAM     "VIRTUAL" EQT ADDRESS 
RNODE EQU PARAM+1   REMOTE NODE NUMBER
DLEN  EQU PARAM+2   BUFFER LENGTH 
SEQN  EQU PARAM+3   SEQUENCE NUMBER 
* 
* 
SIZE  BSS 0 
* 
      END LUQUE 
                                                                                                                                                            