ASMB,R,L,C,Q
      HED LUTRU-FETCH "TRUE" SYSTEM LU
*     NAME:   LUTRU 
*     SOURCE: 92067-18308 
*     RELOC:  PART OF 92067-16268 
*     PGMR:   G.L.M.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  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.       *
*  ***************************************************************
* 
      NAM LUTRU,6 92067-1X308 REV.2013 790223 
      EXT $LUSW,.ENTP,.ZPRV 
* 
      ENT LUTRU 
* 
*  PURPOSE: TO TRANSLATE A SESSION OR BATCH LU INTO A TRUE
*           SYSTEM LOGICAL UNIT.
* 
*  CALLING SEQUENCE:  CALL LUTRU(LUTST,ISYS,ISCB) OR I=LUTRU(LUTST) 
*                                           ----
* 
*  WHERE:             LUTST= THE LOGICAL UNIT TO BE TESTED
*                     ISYS = LOCATION FOR RETURN OF RESULT
*                     ISCB = IF SUPPLIED, TEST SPECIFIED LOGICAL
*                            UNIT AGAINST THIS SESSION CONTROL BLOCK. 
* 
*  RETURNS:           ISYS AND/OR (A)=TRUE SYSTEM LU
*                           OR       =-1 IF LUTST NOT DEFINED FOR 
*                                     THIS SESSION. 
* 
*                                 (B)=0 
* 
      SKP 
* 
ILOG  NOP 
ISYS  NOP 
ISCB  NOP 
* 
LUTRU NOP 
      JSB .ZPRV 
      DEF LIBX
      JSB .ENTP 
      DEF ILOG      FETCH PARMS 
* 
*     CHECK FOR LU SWITCH REQUIRMENT
*     -BATCH FLAG=BIT 15 ID WORD 21 
*     -SESSION WORD=ID WORD 33
* 
      LDA ILOG,I     FETCH LOGICAL LU 
      ADA N1        ADJUST FOR TABLE DATA STRUCTURE (LU-1)
      AND B377      ISOLATE LU
      STA TEMP1     SAVE FOR CAPCK
      CPA B377      IF TEST LU IS ZERO
      JMP NOPE       THEN NO FUTHER CHECKS REQUIRED 
* 
* 
      CLA           PRESET (A) IN CASE SCB ADDR NOT PROVIDED
      LDB ISCB,I    FETCH POSSIBLE OVERRIDE SCB 
      SZB           IF DEFINED
      JMP SPCL        USE IT
* 
      LDB XSUSP     FETCH POINTER INTO ID SEG 
      ADB .12       ADVANCE TO BATCH FLAG 
      XLA B,I       FETCH IT
      ADB .12       ADVANCE TO SESSION WORD 
      XLB B,I       FETCH IT
* 
      SZB           IF SESSION WORD =0
      SSB             OR IS < 0 THEN
      JMP NSESS         PROG IS NOT IN SESSION
* 
*     THE PROGRAM IS A SESSION PROGRAM. 
*      MUST MAP TABLE PTN IN AT THIS POINT
*     -THE REQUESTED LOGICAL UNIT MUST BE DEFINED FOR 
*      THIS SESSION'S USE (MUST BE IN IT'S SST) OR ISYS IS SET =-1
* 
*SPCL  JSB MPTAB     GO MAP IN TABLE PTN( IF DEFINED). RETURNS LOGICAL
*                              ADDR IN (B). 
SPCL  XLA B,I       FETCH LENGTH OF SWITCH TABLE
      JSB SWTCK     GO SEE IF THIS LU IS SWITCHED 
       CCA          P+1 LU NOT DEFINED FOR SESSION USE
       JMP NOPE2    P+2 SWITCH FOUND, (A) =SYSTEM LU
* 
* 
*     THE PROGRAM IS NOT IN SESSION 
*       CHECK FOR BATCH SWITCH REQUIRMENT 
*       -(A)=ID WORD 21 (BATCH FLAG = BIT 15) 
* 
NSESS SSA,RSS       IS THIS A BATCH REQUEST?
      JMP NOPE         NOPE-- USE PASSED LU 
* 
      XLA $LUSW     FETCH LENGTH OF BST 
      CMA,INA       SET IT NEGATIVE 
      LDB D$LUT     FETCH ADDR OF BST 
      JSB SWTCK     GO SEE IF LU SWITCHED 
NOPE   LDA ILOG,I   P+1 NO SWITCH,USE SUPPLIED LU 
NOPE2  STA ISYS,I   P+2 SWITCH FOUND [IN (A) ]
      CLB           RESET OPTIONAL
      STB ISYS         PARM 
      STB ISCB
LIBX  JMP LUTRU,I   EXIT
      DEF LUTRU 
      SKP 
**
* 
*     SWTCK       (SWITCH TABLE CHECK)
* 
*  SCAN THE SPECIFIED TABLE (LOW BYTE OF SESSION OR BATCH SWITCH TABLE) 
*  FOR A MATCH, WITH THE VALUE IN TEMP1.
* 
*  CALLING SEQUENCE:LDA -LENGTH 
*                   LDB ADDRESS OF TABLE(POINTS AT LENGTH)
*                   <TEMP1 = ISOLATED SEARCH LU (LU-1)
*                   JSB SWTCK 
*      RETURN P+1    NO SWITCH FOUND
*             P+2    SWITCH FOUND,(A) AND TEMP1 = SWITCHED LU 
* 
* 
* 
SWTCK NOP 
      STA STMP1    SAVE NEG LENGTH
SWT.0 INB           ADVANCE TABLE ADDRESS 
      XLA B,I       FETCH ENTRY 
      AND B377      IF SAME 
      CPA TEMP1       AS CURRENT LU 
      JMP SWT.1          GO SWITCH IT 
* 
      ISZ STMP1     STEP COUNT
      JMP SWT.0    AND LOOP 
      JMP SWTCK,I   UNTIL DONE--NO MATCH FOUND,RTN P+1
* 
SWT.1 XLA B,I       FETCH SWITCH TABLE WORD 
      ALF,ALF       USE HIGH HALF OF TABLE
      INA           SET THE NEW LU (ADJUST FOR INTERNAL DATA STRUCTURE) 
      AND B377      ISOLATE "NEW" LU
      ISZ SWTCK     MATCH FOUND, RTN P+2
      JMP SWTCK,I   CONTINUE AT P+2, (A) ALSO = NEW LU
* 
      SKP 
* 
A     EQU 0 
B     EQU 1 
N1    OCT -1
.12   DEC 12
B377  OCT 377 
TEMP1 NOP 
XSUSP EQU 1730B 
D$LUT DEF $LUSW+0 
* 
* 
*MPTAB NOP           THIS ROUTINE WILL CALL A SYSTEM FUNCTION TO MAP IN THE 
*      JMP MPTAB,I   SCB IF THE SCB'S SHOULD BE MOVED OUT OF SAM. 
* 
STMP1 NOP 
      END 
                                          