ASMB,R,L,C
      HED "PRMPT" AMD SESSION ATTENTION ROUTINE 9-76 (DLB)
*9-7      NAM PRMPT,2,1 PRE-REL 7-29-76 (DLB) 
*10-5      NAM PRMPT,2,1 PRE-REL 9-13-76 (DLB)
*10-10      NAM PRMPT,2,1 PRE-REL 10-5-76 (DLB) 
*     NAM PRMPT,2,1 PRE-REL 10-14-76 (DLB)
*     NAM PRMPT,2,1 09570-16661 REV. A 761013 
*     NAM PRMPT,2,1 09570-16661 REV. A 761110 
      NAM PRMPT,1,1 PRE-REL REV D. 780526 (DLB) RTE-IV
* 
*-------------------------------------------------------- 
* 
*     RELOC.       09570-16661
*     SOURCE       09570-18661
* 
*     D. L. BASKINS      13 OCT 76 REV. A 
* 
*-------------------------------------------------------- 
      EXT EXEC,KYBRD,IDSGA
      EXT $LIBR,$LIBX 
      EXT .XSA,.XLA,.XLB  *780405 
      EXT ICLRW,GTSTB,MKIDS,CLAS# 
A     EQU 0 
B     EQU 1 
EQTA  EQU 1650B 
DRT   EQU 1652B 
LUMAX EQU 1653B 
XTEMP EQU 1721B 
      SPC 1 
*  :RUIH,PRMPT,<LU>,<ASC LU>   TO FAKE AN ATTENTION INTERRUPT TO
*                           SCHEDULE THE LOGON OR PROGENITIOR MODULE. 
      SPC 1 
PRMPT STB EQT4      SAVE B-REG VALUE
      CPB XTEMP     CHECK IF DIRECT CALL? 
      JMP PRMP2     YES, CHECK IF KEY SUPPLIED? 
      SPC 1 
*  PROBABLY SCHEDULED FROM DV.00  OR DV.05
      SPC 1 
      CLA           INIT LU = 0 
      STA LU        GET CURRENT LU # -1 
PRMP1 LDA LU        GET CURRENT LU #
      CPA LUMAX     CHECK IF SEARCHED ALL 
      JMP PRMP8     YES, IGNORE THE SCHEDULE
      ISZ LU        BUMP TO CURRENT LU
      ADA DRT       INDEX INTO THE DRT
      LDA A,I       AND GET CONTENTS
      AND O77       MASK TO EQU NUMBER
      MPY D15       CALCULATE ADDRESS OF WORD 4 
      ADA DM12      SUBTRACT ONE EQT + 3 WORDS
      ADA EQTA      INDEX TO EQT TABLE
      CPA EQT4      MATCH?
      RSS           YES, GO CHECK IF IT IS A TERMINAL?
      JMP PRMP1     NO, TRY NEXT LU 
      JSB KYBRD     CHECK IF LU IS A TERMINAL 
      DEF *+2 
      DEF LU
      CLE,SSA       CHECK IF OK?
      JMP PRMP1     NO, TRY NEXT EQT
      LDA LU
      JSB CASCI     CONVERT TO ASCII FOR PROMPT 
      JMP PRMPZ     YES, GO CONVERT TO ASCII
      SPC 1 
*  DIRECT SCHEDULE (OPERATOR?) -- CHECK IF KEY SUPPLIED?
      SPC 1 
PRMP2 JSB .XLA      GET 1ST PARAMETER 
EQT4  DEF *         B-REG POINTS TO XTEMP 
      ISZ EQT4      BUMP TO NEXT PARAMETER
      JSB CASCI     CONVERT TO ASCII
      JSB .XLB      CHECK IF PASSED BY CALLER CORRRECTLY
      DEF EQT4,I    ADDRESS OF XTEMP(2) 
      CPB ASCLU     P2 PARAMETER = ASCII LU?
      SZA,RSS       YES, CHECK IF NON ZERO
      JMP PRMP8     IGNORE IMPROPER DIRECT CALL 
      SPC 1 
PRMPZ IOR O400      READY PRINT BACK
      STA RLU       SAVE READ LU + PRINT BIT
      SPC 1 
*  NOW GET THE CLASS NUMBER ADDRESS IN THE SYSTEM MAP 
      SPC 1 
      LDA CLASS     GET CLASS NUMBER ADDRESS
      SZA,RSS       CHECK IF FOUND? 
      HLT 0         NO, SORRY ABOUT THAT!!
      RSS           NOW GET THE DIRECT ADDRESS
      LDA A,I       FOR THE RTE-III GENERATOR 
      RAL,CLE,SLA,ERA  BUG WORK AROUND
      JMP *-2 
      STA CLASS 
      SPC 1 
*  ROUTINE TO FIND A LOGICAL UNIT MATCH IN TABLE
*   THE TABLE ENTRYS LOOK AS FOLLOWS
*      !S!  F    !    M     ! 
*      !    G    !    0     ! 
*      !    7    !AT! LU=7  ! 
*      !  1ST PARAM         ! 
*      !  2ND PARAM         ! 
*      !  3RD PARAM         ! 
*      !  4TH PARAM         ! 
*      !  5TH PARAM         ! 
* 
*  WHERE 'AT' = AUTHORIZATION LEVEL 0 TO 3 (2 BITS) 
*  WHERE  'S' = PRMPT WILL IGNORE ATTENTION IF SET. 
*  THE 1ST WORD HAS THREE POSSIBILITIES.
*  1)  0 >> SCHEDULE LOGON
*  2)  - >> IGNORE INTERRUPT
*  3)  + >> CONTINUE
* 
      JSB GTSTB     GET PROGENTORS SESSION TABLE ENTRY
      DEF *+4 
      DEF LU        FROM THE TERMINAL LU NUMBER 
      DEF PNAME     8 WORD ARRAY
      DEF SYSAD     LOCATION IN SYSTEM MAP
      SPC 1 
*  NOTE: THIS ROUTINE WILL RETURN PNAME = 0 IF NO SESSION ENTRY 
*        AND SYSAD = 0 IF NO SESSION TABLE
*        SYSAD = ADDRESS OF NEW ENTRY IF PNAME = 0
*        A-REG IS NEG IF TERMINAL IS BUSY, = 0 IF NO SESSION PROGENTOR
      SPC 1 
*  BEGIN THE FOUR WAY BRANCH
*  1) R$PN$ IS BUSY PROCESSING A REQUEST FOR THIS TERMINAL--IGNORE. 
*  2) PROGENITOR IS NON-EXISTANT, RUN LOGON PROGRAM 
*  2A. LOGON IS NON-EXISTANT, DO MTM THING. 
*  3) PROGENITOR IS DORMANT, SCHEDULE AND EXIT. 
*  4) PROGENITOR IS BUSY, DO THE MTM THING. 
      SPC 1 
      SSA           SIGN BIT SET = DISABLED!
      JMP PRMP7     IGNORE SCHEDULE, R$PN$ IS BUSY!!
      SZA,RSS       CHECK IF THERE IS ONE?
      JMP PRMP4     NO, GO SCHEDULE LOGON 
      JSB IDSGA     CHECK IF A PROGENITOR ID? 
      DEF *+2 
      DEF PNAME 
      SZA,RSS       CHECK IF ONE? 
      JMP PRMP4     NO, DO THE LOGON THING
      ADA D8        INDEX TO THE POINT OF SUSPENSION WORD 
      JSB .XLA      IN THE ID & AND CHECK IF BUSY 
      DEF A,I 
      SZA           TRULY DORMANT?
      JMP PRMP5     NO, DO THE MTM THING
      JSB EXEC      SCHEDULE PROGENITOR IF DORMANT
      DEF *+8 
      DEF NA10      NO ABORT IF NON-EXISTANT
      DEF PNAME 
      DEF PNAME+3 
      DEF PNAME+4 
      DEF PNAME+5 
      DEF PNAME+6 
      DEF PNAME+7 
      JMP PRMP4     IF NON-EXISTANT, DO LOGON 
      SZA           CHECK IF SCHEDULED? 
      JMP PRMP5     NO, DO THE MTM THING
      JSB MKIDS     MAKE THE PROGENITORS ID SESSION-FIED
      DEF *+3 
      DEF PNAME     PROGRAMS NAME 
      DEF LU
      JSB ICLRW     GO DO CLASS WRITE OF PROGENTOR
      DEF *+7 
      DEF O2        WRITE 
      DEF CLASS     ADDRESS OF CLASS NUMBER 
      DEF LU
      DEF SYSAD     ADDRESS OF SESSION TABLE ENTRY
      DEF PNAME     NAME OF PROGENITOR
      DEF OM5       FIVE CHARACTERS 
      JMP PRMP7     DONE!!!, CLASS GET FROM R$PN$ 
      SPC 1 
*  WE MAY NOT HAVE A SESSION TABLE ENTRY, SO DEFAULT THE ADDRESS
*  TO SOME SEMI-SAFE LOCATION IN SYSTEM MAP.
      SPC 1 
PRMP4 LDA SYSAD     CHECK IF SESSION TABLE ENTRY
      SZA,RSS       IF = 0, THEN NO SESSION TABLE ENTRY 
      JMP PRMP6     GO DO THE STOCK MTM THING 
      JSB EXEC      SCHEDULE THE LOGON PROGRAM
      DEF *+4 
      DEF NA10      WITH CALL EXEC(10 NO ABORT) 
      DEF LOGON     PROGRAM NAME = LOGON
      DEF LU        PASS THE LOGICAL UNIT NUMBER
      JMP PRMP5     NON-EXISTANT, PLAY STOCK MTM
      SZA,RSS       CHECK IF DORMANT? 
      JSB IGNOR     YES, SET THE IGNORE BIT 
      JMP PRMP8     LET OPERATOR TRY AGAIN IF BUSY
      SPC 1 
*  IN THIS NEXT SERIES OF CLASS I/O THERE IS LITTLE CHANCE OF 
*  ANYBODY GETTING IN BETWEEN THEM, NO MATTER WHAT THE PRIORITY 
      SPC 1 
PRMP5 JSB IGNOR     SET THE IGNORE BIT
PRMP6 JSB ICLRW     WRITE ZERO LENGTH RECORD
      DEF *+5 
      DEF O2
      DEF CLASS 
      DEF LU
      DEF SYSAD 
      JSB ICLRW     NOW WRITE OUT THE PRMPT 
      DEF *+7 
      DEF O2
      DEF CLASS 
      DEF LU
      DEF SYSAD 
      DEF ASCLU     ASCII LU BUFFER 
      DEF O2        TWO WORDS 
      JSB ICLRW     GO DO CLASS READ OF 52 CHARACTERS 
      DEF *+7 
      DEF O1
      DEF CLASS 
      DEF RLU       LOGICAL UNIT WITH PRINT BIT 
      DEF SYSAD     PROGENITORS KEYWORD 
      DEF O0        DUMMY BUFFER
      DEF DM52      AND BUFFER LENGTH 
PRMP7 JSB EXEC      SCHEDULE R$PN$ W/O WAIT 
      DEF *+3 
      DEF D10 
      DEF R$PN$ 
* 
* IGNORE NOT SCHEDULED ERRORS SINCE R$PN$ IS CLASS GET SUSPENDED
* 
PRMP8 JSB EXEC      TERMINATE 
      DEF *+4 
      DEF O6          & 
      DEF O0
      DEF OM1       MAKE SERIAL RE-USABLE 
      SPC 1 
IGNOR NOP           ENTRY TO SET THE IGNORE BIT 
      LDB SYSAD     CHECK IF A SESSION ENTRY
      CCE,SZB,RSS   TO SET THE DISABLE THE TERMINAL BIT?
      JMP IGNOR,I   NO, SKIP THE DISABLE STUFF
      JSB $LIBR 
O0    NOP 
      JSB .XLA      GET THE 1ST WORD OF SESSION ENTRY 
      DEF B,I       ADDRESS THRU THE SYSTEM MAP 
      RAL,ERA       SET BIT 15
      JSB .XSA      AND SET THE R$PN$ BUSY BIT
      DEF B,I 
      JSB $LIBX 
      DEF IGNOR     RETURN
      SPC 1 
*  CONVERT A-REG TO ASCII 
      SPC 1 
CASCI NOP           ENTRY A-REG = LU
      STA LU        SAVE IN GLOBAL
      CLB 
      DIV D10 
      ALF,ALF       POSITION MOST SIG DIGIT 
      ADB A         MERGE IN WITH LEAST DIGIT 
      ADB ASC00     CHANGE TO ASCII 
      LDA LU        RESTORE A-REG 
      STB ASCLU     AND SAVE THE ASCII LOGICAL UNIT NUMBER
      JMP CASCI,I   AND RETURN
      SPC 1 
O400  OCT 400 
NA10  OCT 100012    NO ABORT 10 
O1    OCT 1 
O2    OCT 2 
O6    OCT 6 
D8    DEC 8 
D10   DEC 10
D15   DEC 15
O77   OCT 77
OM1   OCT -1
OM5   OCT -5
DM12  DEC -12 
DM52  DEC -52 
LU    NOP           LU OF TERMINAL
RLU   NOP           LU + 400B 
LOGON ASC 3,LOGON   !!!!!!LOG ON PROGRAM NAME!!!!!!!!!
ASCLU ASC 2,00>_    PROMPT MESSAGE
ASC00 ASC 1,00
R$PN$ ASC 3,R$PN$ 
PNAME BSS 8         HOLDS CURRENT SESSION TABLE ENTRY 
CLASS DEF CLAS#+0   ADDRESS OF CLASS NUMBER IN SYSTEM MAP.
SYSAD ABS 0         ADDRESS OF CURRENT SESSION ENTRY PROGENITORS NAME 
      END PRMPT 
                                          