ASMB,R,L,C
      HED "KYBRD" ROUTINE TO CHECK IF LU IS A TERMINAL 4-78 (DLB) 
      NAM KYBRD,6 PRE-REL 780509 (DLB) RTE-IV 
      ENT KYBRD 
      EXT .ENTP,$RNTB,.XLA,$LIBR,$LIBX
      SPC 1 
A     EQU 0 
B     EQU 1 
EQTA  EQU 1650B 
DRT   EQU 1652B 
LUMAX EQU 1653B 
      SPC 1 
* PURPOSE:
*  THIS ROUTINE CHECKS IF THE GIVEN LU IS AN INTERACTIVE DEVICE 
*  AND IT IS UP AND THEORITICALLY OPERABLE. 
* 
* CALLED: 
* 
*    JSB KYBRD             JSB KYBRD
*    DEF *+2               DEF *+3
*    DEF LU                DEF LU 
*    <RETURN>              DEF LULOK
*                          <RETURN> 
* WHERE:
* 
*   LU    = LOGICAL UNIT NUMBER TO TEST (MAY INCLUDE CONWD BITS)
*   LULOK = OPTIONAL PARAMETER THAT PASSES BACK THE LU LOCK 
*           OVERRIDE WORD THAT MAY BE PASSED IN THE EXEC CALL.
* 
* EXIT:   
*    A-REG =  6 BIT LU >> PASSED LU IS A TERMINAL THAT IS NOT DOWN  
*    E-REG =  0  >> LU IS OK
* ERRORS: 
*    A-REG = -2 >> THE LU OR EQT IS DOWN
*    A-REG = -1 >> THE PASSED LU IS NOT A LEGAL TERMINAL
*    E-REG = 1  >> ERROR  
      SPC 1 
ICNWD NOP           LOGICAL UNIT TO TEST
RNUMB DEF DFCLU     RETURNED LU-LOCK PUSHTHRU 
KYBRD NOP           ENTRY POINT 
      JSB $LIBR     MAKE PRIVLEDGE TO AVOID REAL
      NOP           TIME CHANGES TO TABLES
      JSB .ENTP     GET PARAMETER ADDRESSES 
      DEF ICNWD 
      LDA ICNWD,I   GET THE LOGICAL UNIT NUMBER 
      AND O77       MASK OFF CONTROL BITS 
      STA ICNWD     SAVE FOR EXIT 
      LDB LUMAX     GET HIGHEST LU NUMBER 
      CMB,CLE       NEGATE - 1
      ADB A         CHECK IF < HIGHEST + 1
      CMA,INA       SET E-REG IF LU = 0 
      CMA,SEZ       CHECK IF 0>LU->LUMAX
      JMP LUERR     YES, IGNORE 
      ADA DRT       TO CHECK IF LEGAL TERMINAL DEVICE 
      STA DFCLU     SAVE THE ADDRESS OF THE LU ENTRY
      ADA LUMAX     AND INDEX INTO 2ND HALF OF TABLE
      LDA A,I       TO GET UP/DOWN BIT
      SSA           CHECK IF LU IS UP?
      JMP DNERR     NO LU IS DOWN--FORGET IT
      LDA DFCLU,I   GET THE LU ENTRY
      AND O77       GET THE EQT ENTRY 
      CMA,INA,SZA,RSS CHECK IF EQT = 0? 
      JMP LUERR     YES, IGNORE 
      CMA           SUBTRACT ONE
      MPY D15       INDEX INTO THE EQT TABLE
      ADA EQTA      ADD IN START ADDRESS
      ADA O4        BUMP EQUIPMENT STATUS/TYPE CODE 
      LDA A,I       AND GET THE VALUE 
      RAL,CLE,ELA   POSITION DOWN BIT TO E-REG
      CLB,SEZ       CHECK IF EQT IS DOWN? 
      JMP DNERR     YES, EQT DOWN--FORGET IT
      LSL 6         PUT EQUIPMENT TYPE CODE IN B-REG
      LDA DFCLU,I   GET THE SUBCH/LOCK/EQT# AGAIN 
      AND OM4K      MASK TO JUST SUBCHANNEL BITS
      CPB O5        CHECK IF DRIVER TYPE IS 05? 
      LDB A         YES, SUBCHANNEL BITS MUST = 0 
      SZB           NO, IS DRIVER = DV.00?
      JMP LUERR     NOT LEGAL DRIVER/SUBCHANNEL 
      XOR DFCLU,I   NOW GET LOCK/EQT# BITS
      LSL 10        PUT LOCK BITS IN B-REG
      STB RNUMB,I   SAVE FOR LATER
      CLE,SZB,RSS   CHECK IF ANY? 
      JMP KYBR1     NO, LEAVE AT ZERO 
      LDA DRNTB     RTE-III GENERATOR SOMEHOW LOST  
      RSS           ITS ACT IN THE DSD PROCESS
      LDA A,I       GET NEXT LEVEL
      RAL,CLE,SLA,ERA CHECK AND STRIP INDIRECT BIT
      JMP *-2       SET, STRIP TO NEXT LEVEL
      ADB A         INDEX INTO TABLE
      JSB .XLA      AND GET THE CONTENTS
      DEF B,I 
      AND O377      MASK TO JUST LO BITS
      ALF,CLE,ALF   AND POSITION
      IOR RNUMB,I   MERGE IN LOCK FLAG BITS 
      STA RNUMB,I   AND SAVE FOR I/O PUSH THRU
KYBR1 LDA ICNWD     EXIT OK A-REG = LU
KYBR2 LDB DFTMP     GET A DEF TO LOCAL TEMP 
      STB RNUMB     SAVE FOR NEXT CALLER
      JSB $LIBX     NOW EXIT
      DEF KYBRD 
      SPC 1 
LUERR CLA,RSS       EXIT A-REG = -1 
DNERR CLA,INA       EXIT A-REG = -2 
      CMA,CCE 
      JMP KYBR2     AND EXIT
O377  OCT 377 
O4    OCT 4 
O5    OCT 5 
D15   DEC 15
O77   OCT 77
OM4K  OCT -4000 
DFTMP DEF DFCLU     USE INPLACE OF RNUMB
DFCLU NOP           ADDRESS OF LU INTO THE DRT
DRNTB DEF $RNTB+0   DIRECT ADDRESS OF RESOURCE NUMB TABLE 
      END 
                                                                                                                                                                                        