ASMB,R,L,C
      HED HELLO 91741-16014 * (C) HEWLETT-PACKARD CO. 
      NAM HELLO,7 91741-16014 REV 1913 781114 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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,RNRQ
      EXT D$INI,D$STW,D3KMS,D$ZRO,D$WDC 
      EXT D$SMP,D$LOG,LUTRU 
      SPC 3 
****************************  HELLO  *****************************
*                                                                *
*      SOURCE: 91741-18014                                       *
*                                                                *
*      BINARY: 91741-16014                                       *
*                                                                *
*      PROGRAMMER: JIM HARTSELL                                  *
*                                                                *
*      SEPTEMBER 29, 1975                                        *
*                                                                *
*----------------------------------------------------------------*
*                                                                *
*        MODIFIED BY DMT BEGINNING NOVEMBER 14, 1978             *
*                                                                *
******************************************************************
      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 = IMPOSSIBLE 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 B4        PRESET THE ERROR CODE.
      LDB #LU3K 
      CPB PRAMS+1,I 
      RSS 
      JMP NGOOD     INVALID LU. 
* 
* 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 *+3        PREVIOUS "HELLO":
      DEF D10        REMOVE OLD ENTRY FROM THE PNL. 
      DEF D$SMP      PROCESS NUMBER.
* 
GTLOG LDA PRAMS+2,I GET LU OF LOG DEVICE. 
      SZA,RSS 
      CLA,INA       ZERO: SET DEFAULT = LU 1. 
      STA D$LOG     SAVE 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 B6        STORE MESSAGE CLASS = 6.
      JSB D$STW 
      CLA           CLEAR COMPUTER ID.
      JSB D$STW 
      LDA STREM     STORE STREAM TYPE.
      JSB D$STW 
      LDA N4        CLEAR SUB-STREAM, PROCESS #'S.
      JSB D$ZRO 
      CLA,INA 
      LDB STREM     HELLO OR BYE? 
      CPB B20       BYE: BYTE COUNT WILL BE 3.
      LDA PRAMS+5,I HELLO: USE SUPPLIED BYTE COUNT. 
      SZA,RSS 
      JMP NOLEN     ZERO LENGTH: ILLEGAL REQUEST. 
      ADA N2        ADJUST FOR D$STW. 
      JSB D$STW     STORE MESSAGE BYTE COUNT. 
      JMP MOVE
NOLEN CLA,INA 
      JMP NGOOD 
ILL   LDA B6
      JMP NGOOD 
TBLER LDA B7
      JMP NGOOD 
* 
* MOVE ASCII MESSAGE TO REQUEST BUFFER. 
* 
MOVE  LDA STREM     HELLO OR BYE? 
      CPA B20 
      JMP MVMSG     HELLO.
* 
      LDA "BY"      BYE. MOVE ASCII "BYE".
      JSB D$STW 
      LDA "E" 
      JSB D$STW      BYTE COUNT NOW = 3.
      LDA PRAMS+3,I  FORCE USER'S PROCESS # FOR D3KMS.
      STA D$SMP 
      JMP STCNT 
* 
MVMSG LDB PRAMS+5,I NUMBER OF BYTES.
      INB           ROUND UP. 
      CLE,ERB       MAKE WORDS. 
      STB TEMP
      LDA PRAMS+4   SOURCE ADDRESS. 
      LDB D$RQB 
      ADB D8        DESTINATION ADDRESS.
      MVW TEMP      MOVE THE MESSAGE. 
* 
STCNT JSB D$WDC     STORE WORD LENGTH OF REQUEST. 
* 
* SEND REQUEST TO THE 3000 BY WRITING TO QUEX'S CLASS.
* 
      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 B4         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 *+5 
      DEF D8
      DEF REALU      LOGGING LU.
      DEF XEQT       IDSEG ADDR OF USER.
      DEF D$SMP      PROCESS NUMBER.
* 
      SSB           ANY ERRORS? 
      JMP TBLER     YES.
* 
* SEND "DSLINE" COMMAND TO HP3000 AFTER "HELLO".
* 
      LDA DSLBF     MOVE REQUEST TO D3KMS BUFFER. 
      LDB D$RQB 
      MVW D12 
* 
      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. 
* 
* BYE: REMOVE AN ENTRY FROM THE PROCESS # LIST IN "RES".
* 
BYEX  JSB #RSAX 
      DEF *+3 
      DEF D10       REMOVE AN ENTRY.
      DEF D$SMP     PROCESS NUMBER. 
* 
      CLA           CLEAR 
      STA D$SMP      PROCESS NUMBER.
      JMP RETRN,I   RETURN TO USER. 
* 
ERRTN CPA "DS"
      RSS 
      JMP IMPOS     IMPOSSIBLE ERROR. 
* 
      LDA B         GET NUMERIC PORTION OF "DSXX".
      CPA "00"
      JMP IMPOS     IMPOSSIBLE IF ZERO. 
      AND B7        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. 
* 
IMPOS LDA D8
      JMP NGOOD 
      SKP 
* 
* CONSTANTS AND WORKING STORAGE.
* 
B4    OCT 4 
B6    OCT 6 
B7    OCT 7 
B20   OCT 20
B21   OCT 21
BIT15 OCT 100000
B377  OCT 377 
D8    DEC 8 
D10   DEC 10
D12   DEC 12
N2    DEC -2
N4    DEC -4
N6    DEC -6
XEQT  EQU 1717B 
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 
                                                                                  