ASMB,Q,C
      HED HELLO: LOGON/LOGOFF TO HP3000 * (C) HEWLETT-PACKARD CO. 
      NAM HELLO,7 91750-1X125 REV.2013 800312 MEF 
      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 THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 1 
      ENT HELLO,BYE 
      EXT D$RQB,#LU3K,.ENTR,#RSAX,#TBRN,#QXCL 
      EXT D$INI,D$STW,D3KMS,D$3BF 
      EXT D$SMP,D$LOG,D$INP,D$ECH,D$BRK,D$CTY 
      EXT LUTRU,IFTTY,LOGLU,.MVW,EXEC,RNRQ
      SPC 3 
      UNL           NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING 
*  NAME: HELLO
*SOURCE: 91750-18125
* RELOC: 91750-1X125
*  PGMR: DMT
      LST 
****************************  HELLO  *****************************
*                                                                *
*      SOURCE: 91750-18125                                       *
*                                                                *
*      BINARY: 91750-1X125                                       *
*                                                                *
*      PROGRAMMER: JIM HARTSELL                                  *
*                                                                *
*      SEPTEMBER 29, 1975                                        *
*                                                                *
*----------------------------------------------------------------*
*                                                                *
*        MODIFIED BY DMT BEGINNING NOVEMBER 14, 1978             *
*        FOR DS/1000 ENHANCEMENTS AND SESSION COMPATIBILITY      *
*                                                                *
******************************************************************
      SPC 2 
B     EQU 1 
      SUP 
      SKP 
* SUBROUTINE HELLO MUST BE CALLED BY A USER PROGRAM BEFORE
* ANY MASTER COMMUNICATION FUNCTIONS WITH AN HP3000, SUCH AS
* RFA AND PTOP.  THIS SUBROUTINE ESTABLISHES COMMUNICATION
* AND CREATES A REMOTE SESSION MAIN PROCESS ON THE HP3000 WHICH 
* ACTS AS A LOGICAL EXTENSION TO THE LOCAL PROCESS. 
* 
* SUBROUTINE BYE IS CALLED TO TERMINATE COMMUNICATION WITH
* A REMOTE HP3000 AND TO RELEASE THE SESSION MAIN PROCESS NUMBER. 
* 
* CALLING SEQUENCES:
* 
*        JSB HELLO                                     JSB BYE
*        DEF *+7                                       DEF *+5
*        DEF ERRCD   <<<<<<<<< ERROR CODE >>>>>>>>>>   DEF ERRCD
*        DEF LDEV    <<<<<<< LU OF AN HP3000 >>>>>>>   DEF LDEV 
*        DEF LSTDV   <<<<<< LU OF LOG DEVICE >>>>>>>   DEF LSTDV
*        DEF SMPNM   <<< RETURNED PROCESS NUMBER >>>   DEF SMPNM
*        DEF LOGB    << ADDRESS OF LOGON MESSAGE       .
*        DEF LOGBL   < LENGTH OF LOGON MSG IN BYTES    .
*        .                                             .
*        .                                             .
*        .                                             .
*  LOGB  ASC 8,HELLO USER.ACCT
* 
*      RETURNED ERRCD:  0 = NO ERROR. 
*                       1 = HELLO FAILURE (SMPNM = 0) OR LINK DOWN. 
*                       2 = RESERVED FOR EXCLUSIVE ACCESS.
*                       4 = INVALID LU. 
*                       5 = TIMEOUT.
*                       6 = ILLEGAL (REJECTED) REQUEST. 
*                       7 = "RES" TABLE ACCESS ERROR. 
*                       8 = SYSTEM ERROR. 
* 
      SKP 
* 
HELLO NOP           ENTRY FOR "HELLO".
      LDA HELLO 
      LDB B20        STREAM = 20 OCTAL. 
      JMP PASAD 
* 
BYE   NOP           ENTRY FOR "BYE".
      LDA BYE 
      LDB B21        STREAM = 21 OCTAL. 
* 
PASAD STA RETRN     SET UP RETURN ADDRESS.
      STB STREM     SAVE STREAM TYPE. 
      CLA 
      STA PRAMS     CLEAR OLD PARAM ADDRESSES.
      STA PRAMS+1 
      STA PRAMS+2 
      STA PRAMS+3 
      STA PRAMS+4 
      STA PRAMS+5 
      JMP ENTER 
* 
PRAMS NOP           ERROR CODE. 
      NOP           LOGICAL UNIT OF HP3000. 
      NOP           LU OF LOG DEVICE. 
      NOP           RETURNED PROCESS NUMBER.
      NOP           ADDR OF LOGON MESSAGE.
      NOP           LENGTH OF LOGON MESSAGE (BYTES).
* 
RETRN NOP 
ENTER JSB .ENTR     GET PARAM ADDRESSES.
DPRAM DEF PRAMS 
* 
      LDA DPRAM     CHECK FOR MISSING PARAMETERS. 
      STA TEMP
      LDA STREM 
      LDB N6         6 PARAMS FOR HELLO,
      CPA B21         OR
      LDB N4         4 PARAMS FOR BYE.
PLOOP LDA TEMP,I
      SZA,RSS 
      JMP ILL       ERROR - MISSING PARAM.
      ISZ TEMP
      INB,SZB 
      JMP PLOOP 
* 
* VERIFY VALID HP3000 LOGICAL UNIT. 
* 
      LDA D4        PRESET THE ERROR CODE.
      LDB #LU3K 
      CPB PRAMS+1,I 
      RSS 
      JMP NGOOD     INVALID LU. 
* 
* SET BREAK AND CONTROL-Y FLAGS AND TURN ECHO BIT ON
* 
      LDA B400
      STA D$ECH     SET ECHO BIT FOR D$INP. 
      STA D$BRK     ENABLE "BREAK"
      STA D$CTY      AND "CONTROL-Y". 
* 
* CHECK IF USER FOLLOWED A "HELLO" WITH ANOTHER "HELLO",
* AND IF SO, PERFORM "BYE" PROCESSING FOR PREVIOUS "HELLO". 
* 
      LDA STREM     IS THIS A "HELLO"?
      CPA B21 
      JMP GTLOG     NO. 
* 
      LDA D$SMP     GET CURRENT PROCESS NUMBER. 
      SZA,RSS       HAS IT ALREADY BEEN ESTABLISHED?
      JMP GTLOG     NO. 
* 
      JSB #RSAX     YES. DO "BYE" PROCESSING FOR
      DEF *+4        PREVIOUS "HELLO":
      DEF D10        REMOVE OLD ENTRY FROM THE PNL. 
      DEF D$SMP      PROCESS NUMBER.
      DEF N1         NODE NUMBER. 
* 
* SET INPUT AND OUTPUT LU NUMBERS.
* 
GTLOG JSB LOGLU     STORE 
      DEF *+2        LOG LU 
      DEF TEMP        IN TEMP.
      STA TEMP
      CLA 
      LDA PRAMS+2,I SET D$LOG TO 3RD
      AND B77        PRAMETER (MINUS
      SZA,RSS         CONTROL BITS),
      LDA TEMP         IF SUPPLIED, OR
      STA D$LOG         LOG LU. 
* 
      JSB IFTTY       
      DEF *+2 
      DEF D$LOG 
      LDB D$LOG     SET D$INP TO
      SZA,RSS        D$LOG (IF
      LDB TEMP        INTERACTIVE)
      STB D$INP        OR LOG LU. 
* 
* BEGIN CONSTRUCTION OF REQUEST BUFFER WITH 
* THE 8-WORD FIXED FORMAT FOR REMOTE HELLO OR BYE.
* 
      LDA DPRAM     POINT TO ADDR OF FIRST PARAM. 
      JSB D$INI     INITIALIZE BUFFER STUFFERS. 
* 
      LDA D6        STORE MESSAGE CLASS = 6.
      STA D$3BF 
      LDA STREM     STORE STREAM TYPE.
      STA D$3BF+2 
      CPA B20       HELLO?
      JMP MVMSG       YES. GO MOVE. 
* 
      LDA "BY"      BYE. MOVE 
      JSB D$STW      ASCII "BYE"
      LDA "E"         INTO APPENDAGE. 
      JSB D$STW 
      JMP SEND
* 
NOLEN CLA,INA 
      JMP NGOOD 
ILL   LDA D6
      JMP NGOOD 
TBLER LDA D7
      JMP NGOOD 
* 
* MOVE ASCII MESSAGE TO REQUEST BUFFER. 
* 
* 
MVMSG LDB PRAMS+5,I NUMBER OF BYTES.
      STB D$3BF+7   SAVE IN HEADER. 
      SZB,RSS       CHECK FOR ZERO. 
      JMP NOLEN       ILLEGAL!
      INB           ROUND UP. 
      CLE,ERB       MAKE WORDS. 
      STB TEMP
      LDA PRAMS+4   SOURCE ADDRESS. 
      LDB D$RQB 
      ADB D8        DESTINATION ADDRESS.
      JSB .MVW      MOVE THE MESSAGE. 
      DEF TEMP
      NOP 
* 
* SEND REQUEST TO THE 3000 BY WRITING TO QUEX'S CLASS.
* 
SEND  JSB D3KMS     SHIP THE REQUEST BUFFER TO QUEX.
      DEF *+2 
      DEF BIT15     NO-ABORT BIT SET IN CONWD.
      JMP ERRTN     ERROR RETURN. 
* 
      CLA           CLEAR ERROR CODE. 
      STA PRAMS,I 
      LDA STREM     HELLO OR BYE? 
      CPA B21 
      JMP BYEX      BYE: CLEAN UP.
* 
      LDB D$RQB     HELLO: GET PROCESS NUMBER 
      ADB D4         FROM REPLY BUFFER. 
      LDA B,I 
      ALF,ALF 
      AND B377
      STA D$SMP     STORE FOR MASTER REQUESTS.
      STA PRAMS+3,I PASS BACK TO CALLER.
      STA B 
      CLA,INA 
      SZB,RSS 
      JMP NGOOD     HELLO FAILURE.
* 
* BUILD PROCESS NUMBER LIST ENTRY IN "RES". 
* 
      JSB LUTRU     GET "REAL" LOG LU.
      DEF *+3 
      DEF D$LOG 
      DEF REALU 
* 
      JSB RNRQ      WAIT FOR AVAILABILITY OF LIST-ENTRY SPACE.
      DEF *+4 
      DEF LGW       LOCK GLOBAL RN/WAIT/NO ABORT. 
      DEF #TBRN     TABLE-ACCESS RN.
      DEF TEMP      DUMMY.
      JMP TBLER     ** RTE ERROR. 
* 
      JSB #RSAX     ADD PROCESS # LIST ENTRY. 
      DEF *+6 
      DEF D8
      DEF REALU      LOGGING LU.
      DEF D$SMP      PROCESS NUMBER.
      DEF N1         NODE NUMBER. 
      DEF BIT3K      MPE FLAG.
* 
      SSB           ANY ERRORS? 
      JMP TBLER     YES.
* 
* SEND "DSLINE" COMMAND TO HP3000 AFTER "HELLO".
* 
      LDA DSLBF     MOVE REQUEST TO D3KMS BUFFER. 
      LDB D$RQB 
      JSB .MVW
      DEF D12 
      NOP 
* 
      JSB D3KMS     SEND "DSLINE" TO HP3000,
      DEF *+2        AND WAIT FOR REPLY.
      DEF BIT15      NO ABORT.
      JMP ERRTN     ERROR RETURN. 
* 
      JMP RETRN,I   RETURN TO USER. 
* 
* CHECK BYE. "FROM" PROCESS NUMBER IS ZERO FOR CLEAN BYE. OTHERWISE,
* USER MAY HAVE REPLIED "NO" TO AN "ABORT?" PROMPT. 
* 
BYEX  LDB D$RQB     GET "FROM"
      ADB D4         PROCESS #
      LDA B,I         IN REPLY. 
      ALF,ALF 
      AND B377
      SZA           IF NON-ZERO,
      JMP GET8       SOMETHING IS WRONG.
* 
* BYE WAS GOOD: REMOVE ENTRY FROM THE PROCESS # LIST. 
* 
      JSB #RSAX 
      DEF *+4 
      DEF D10       REMOVE AN ENTRY.
      DEF D$SMP     PROCESS NUMBER. 
      DEF N1        NODE NUMBER.
* 
      CLA           CLEAR 
      STA D$SMP      PROCESS NUMBER.
      JMP RETRN,I   RETURN TO USER. 
* 
ERRTN CPA "DS"
      RSS 
      JMP SYSER     SYSTEM ERROR. 
* 
      LDA B         GET NUMERIC PORTION OF "DSXX".
      CPA "00"
      JMP SYSER     SYSTEM ERR IF ZERO. 
      AND D7        ISOLATE LAST DIGIT. 
* 
NGOOD LDB PRAMS     MAKE SURE ERROR PARAM 
      SZB           WAS SPECIFIED.
      STA PRAMS,I   RETURN ERROR CODE.
      JMP RETRN,I   RETURN TO CALLER. 
* 
* RTE SYSTEM ERROR (PROBABLY BAD LU). SEND KILL TO TERMINATE SESSION. 
SYSER LDB D$RQB     GET MPE 
      ADB D4         SESSION
      LDA B,I         NUMBER. 
      ALF,ALF 
      AND B377
      SZA,RSS 
      JMP GET8
      STA SMP#      STORE IN "KILL" MESSAGE.
      JSB EXEC      SEND KILL TO
      DEF *+8        3000 VIA CLASS 
      DEF SD20        I/O TO QUEX.
      DEF D0
      DEF KLBUF 
      DEF D8
      DEF D8
      DEF D0
      DEF #QXCL 
      NOP 
GET8  LDA D8         RETURN ERROR CODE
      JMP NGOOD       8 TO CALLER.
* 
KLBUF BYT 10,6      LENGTH, CLASS FOR KILL
D0    OCT 0 
      OCT 27        STREAM
      OCT 0 
SMP#  NOP           SMP NUMBER
      OCT 0,0,0 
      SKP 
* 
* CONSTANTS AND WORKING STORAGE.
* 
D4    DEC 4 
D6    DEC 6 
D7    DEC 7 
D8    DEC 8 
D10   DEC 10
D12   DEC 12
SD20  DEF 20,I
B20   OCT 20
B21   OCT 21
B77   OCT 77
BIT15 OCT 100000
BIT3K OCT 40000 
B377  OCT 377 
B400  OCT 400 
N1    DEC -1
N4    DEC -4
N6    DEC -6
LGW   OCT 40002 
STREM NOP 
"BY"  ASC 1,BY
"E"   ASC 1,E 
"DS"  ASC 1,DS
"00"  ASC 1,00
TEMP  NOP 
REALU NOP 
* 
DSLBF DEF *+1 
      OCT 006003    "DSLINE" REQUEST BUFFER.
      OCT 0 
      OCT 22
      OCT 0,0,0,0 
      OCT 10
      ASC 2,RFA 
      OCT 27
      OCT 0 
* 
      END 
                                                                                                                                                                                                                                                          