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