ASMB,R,Q,C HED DLGON 91750-1X066 REV 2013 * (C) HEWLETT-PACKARD CO.1980 NAM DLGON,7 91750-1X066 REV.2013 800725 ALL 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 DLGON,DLGOF,DLGNS * EXT #MAST,#NASR,#RSAX,#TBRN,RNRQ,$OPSY,#NODE EXT #NRVS,.ENTR,LUTRU,.MVW,PGMAD,#LDEF,.DRCT EXT #RQB,LOGLU,.LBT,#DFSN,#NEWX RQB EQU #RQB * SUP * * NAME: DLGON * SOURCE: 91750-18066 * RELOC: PART OF 91750-12014, -12015 * PGMR: JIM HARTSELL * * USER CALLABLE NON-INTERACTIVE LOG-ON UTILITY. * * SUBROUTINE DLGON MUST BE CALLED BY A USER PROGRAM BEFORE * ANY MASTER COMMUNICATION FUNCTIONS WITH A SPECIFIC SESSION * MONITOR ACCOUNT AT A REMOTE HP 1000. DLGON WILL LOG OFF PREVIOUS * SESSION, IF LEFT PENDING. CALLS TO LOCAL NODE ARE ILLEGAL. * * CALLING SEQUENCES: * * LOGON: LOGOFF: NON-SESSION: * * JSB DLGON JSB DLGOF JSB DLGNS * DEF *+5 DEF *+3 DEF *+5 * DEF IERR DEF IERR DEF IERR * DEF NODE DEF NODE DEF NODE * DEF IACCT . DEF JACCT * DEF LEN . DEF LEN * . . . * . (A) = NAT . . (A) = NAT * . ENTRY # . . ENTRY # * * WHERE: * * IACCT ASC 16,USERNAMEXX[.GROUPNAMEX][/PASSWORDXX] * JACCT ASC 5,PASSWORDXX (1ST CHAR = "/" IS OPTIONAL) * * * THE RETURNED IERR CAN BE EITHER -1 -> -7 FROM DLGON OR RSM ("RSXX"), * -50 -> -59 FROM DS ("DSXX"), OR +1 -> +13 FROM LOGON ("SMXX"). * "DSERR" WILL DISPLAY THE ASCII VERSION, E.G. "RSXX". SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2013 791213 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, DINIT, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * DSTIO, LUMAP, #CMGT, INCNV, OTCNV, RMTIO * * RSM, DLGON, #DISM, #DSSM, #MSSM, #SCSM, #UPSM * ****************************************************************** * ***!!!!! THE ORDER OF THE FIRST 8 WORDS (#STR THRU #LVL) IS * ***!!!!! FIXED BY THE REQUIREMENT THAT THE STREAM, ADDRESSES * ***!!!!! ERROR CODES & LEVEL # ALWAYS BE IN THE SAME PLACE, * ***!!!!! REGARDLESS OF MESSAGE FORMAT. THIS ALSO MAKES * ***!!!!! STORE-AND-FORWARD CODE MUCH SIMPLER. * #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) * #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * * GLBLK-END SKP * OPBLK-START * ****************************************************************** * * * O P R E Q B L O C K REV 2013 791119 * * * * OFFSETS INTO DS/1000 OPREQ MESSAGE BUFFERS, USED BY: * * * * DMESS, OPERM, RQCNV, RPCNV * * RSM, DLGON, #MSSM, #UPSM * ****************************************************************** * * OFFSETS INTO OPREQ REQUEST AND REPLY BUFFERS. * #CML EQU #REQ COMMAND LENGTH. #CMS EQU #CML+1 COMMAND STRING. #LGC EQU #CMS+1 LOGON REQUEST CODE #LNL EQU #LGC+1 LENGTH OF USER NAME #LUN EQU #LNL+1 LOGON USER NAME * #RLN EQU #REP REPLY LENGTH. #MSG EQU #RLN+1 REPLY MESSAGE. * * MAXIMUM SIZE OF OPREQ REQUEST/REPLY BUFFER. * #OLW EQU #CMS+23 M A X I M U M S I Z E ! ! ! * * OPBLK-END SKP * A EQU 0 B EQU 1 * DLGON NOP ENTRY FOR LOG-ON. LDA DLGON CLB,INB ICODE = 1. JMP PASAD * DLGOF NOP ENTRY FOR LOG-OFF. LDA DLGOF CLB ICODE = 0. JMP PASAD * DLGNS NOP ENTRY FOR NON-SESSION ACCESS. LDA DLGNS LDB B2 ICODE = 2. * PASAD STA RETRN SET UP FOR RETURN ADDRESS. STB ICODE SAVE REQUEST CODE. * CLA STA PRAMS CLEAR OLD PARAM ADDRESSES. STA PRAMS+1 STA PRAMS+2 STA PRAMS+3 JMP ENTER * PRAMS NOP ERROR CODE. NOP NODE NUMBER. NOP ADDR OF ASCII USER-NAME. NOP LENGTH OF USER-NAME (BYTES). * RETRN NOP ENTER JSB .ENTR GET PARAM ADDRESSES. DEF PRAMS * LDA PRAMS+1,I BLOCK DLGON CALLS CPA #NODE TO LOCAL NODE JMP LOCER (ERROR -7). CPA N1 JMP LOCER * JSB .DRCT CLEAR OLD REQUEST. DEF RQB STA TEMP LDB C#MXR CMB,INB CLA STA TEMP,I ISZ TEMP INB,SZB JMP *-3 * STA PRAMS,I CLEAR USER ERROR CODE. STA OLDSN CLEAR "OLD SESSION" FLAG. LDA #NODE INITIALIZE ERROR STA RQB+#ENO REPORTING NODE NUMBER. * * CHECK FOR MISSING PARAMETERS * LDB PRAMS+3 GET LAST PARAM ADDRESS. LDA ICODE GET REQUEST CODE. STA RCODE SAVE FOR RESTORE. SZA,RSS IF ZERO, LDB PRAMS+1 GET LOGOF LAST PARAM ADDRESS. SZB,RSS PARAMETERS SPECIFIED? JMP ILLRQ NO. ERROR. * * CONVERT LU TO DESTINATION NODE. * LDA PRAMS+1,I GET -LU/+NODE. STA TNODE SAVE. SSA,RSS JMP VERFY ALREADY +NODE. * JSB #NRVS DEF *+6 DEF PRAMS+1,I -LU OF NEIGHBOR. DEF TEMP DUMMY. DEF LEVEL LEVEL # OF DEST. NODE. DEF TEMP DUMMY. DEF TNODE RETURNED NODE NUMBER. JMP NSERR ERROR RETURN. (B) = "04". * LDA LEVEL IF DESTINATION NODE SZA,RSS IS AN OLD NODE, JMP OLDND RETURN "RS04". * VERFY JSB #NEWX CHECK FOR NEW EXECUTION. * * IF A LOG-OFF REQUEST, CHECK IF DESTINATION NODE IS NON-SESSION * AND VERIFY THAT A SON IS NOT LOGGING OFF A FATHER'S SESSION (SON MUST * BE THE OWNER (CREATOR) OF THE REMOTE SESSION). * LDA ICODE LOG-OFF REQUEST? SZA JMP CKREQ NO. * LDA TNODE YES. SEE IF DEST. NODE IS IN THE NAT. JSB #NASR SZB,RSS JMP OFRET NO. IGNORE THE LOG-OFF. STA OFSID YES. SAVE DEST. SESSION ID. STB NATAD SAVE NAT ENTRY ADDR. SZA IF DESTINATION SESSION ID CPA D254 IS 0 OR 254, JMP RPNL JUST RELEASE PNL & NAT ENTRIES. * FACHK CLA STA BUFR JSB PGMAD GET ID SEG ADDR OF USER. DEF *+3 DEF BUFR DEF XEQT * LDB #LDEF SEARCH PNL FOR ID SEG ADDR. ADB N1 LDB B,I ADDR OF PNL HEADER. PNLST JSB LODWD (CROSS) LOAD ADDR OF NEXT PNL ENTRY. SZA,RSS (A) = ADDR OF NEXT ENTRY. JMP SONOF NOT FOUND. ERROR. * LDB A POINT TO 5TH WORD IN PNL ENTRY. ADB B4 JSB LODWD (CROSS) LOAD 5TH WORD. CPA XEQT OUR ID SEGMENT ADDRESS? JMP BUILD YES. PROCEED WITH LOG-OFF. ADB N4 NO (ALSO NO MATCH IF "BAD ENTRY" JMP PNLST BIT IS SET IN PNL ENTRY). * * DETERMINE IF REQUESTING NON-SESSION ACCESS OR LOGGING ON TO A * NODE THAT STILL HAS AN ACTIVE SESSION OR NON-SESSION "PERMIT" FOR * THIS USER OR HAS ALREADY BEEN LOGGED AS A NON-SESSION-MONITOR NODE. * CKREQ LDA ICODE CHECK REQUEST CODE. CPA B2 JMP CKRQ1 NON-SESSION. CPA B1 RSS LOG-ON. JMP ILLRQ ILLEGAL REQUEST CODE. * CKRQ1 LDA TNODE GET DEST. NODE. JSB #NASR SEARCH NETWORK ACCOUNT TABLE. SZB,RSS (A) = DEST SID (CAN BE 0 OR 254). JMP SONCK NO ENTRY (NO PRIOR SESSION). * STA OFSID SAVE DESTINATION SESSION ID. STB NATAD SAVE ADDR OF NAT ENTRY. CLB,INB SET FLAG TO LOG OFF OLD SESSION BEFORE STB OLDSN LOG ON OR NON-SESSION ACCESS. SZA IF PRIOR WAS LOGGED AS NON-SM NODE, CPA D254 OR IF PRIOR WAS A NON-SESSION ACCESS, JMP RPNL JUST GO RELEASE PNL AND NAT. * CLA PRIOR SESSION: DUMMY THE REQUEST CODE STA ICODE TO "LOGOF" FOR THE TIME BEING. JMP FACHK MAKE SURE WE OWN THE SESSION! * * VERIFY THAT A PROGRAM IS NOT TRYING TO LOG ON OR GET NON-SESSION * ACCESS TO A NODE WHERE ANOTHER PROGRAM IN THIS "PROCESS" (SAME * SCHEDULING LU) ALREADY HAS A SESSION. * SONCK CLA,INA INIT SCHEDULING SYSTEM LU STA REALU FOR PNL ENTRY. * JSB LOGLU GET SCHEDULING LU. DEF *+2 DEF TEMP (DUMMY PARAM) * SZA,RSS JMP NAT IF ZERO, USE REALU = 1 FOR PNL. STA TEMP SAVE SCHEDULING LU. * JSB LUTRU MAKE SURE ITS A SYSTEM LU. DEF *+3 DEF TEMP DEF REALU (USE FOR PNL ENTRY LATER) * LDB #LDEF SEARCH PNL. ADB N1 LDB B,I ADDR OF PNL HEADER. PNLSR JSB LODWD GET ADDR OF NEXT PNL ENTRY. SZA,RSS JMP NAT NOT FOUND. ALL CLEAR TO PROCEED. * LDB A POINT TO WORD 3 OF PNL ENTRY. ADB B2 JSB LODWD GET REMOTE NODE #. CPA TNODE SAME AS USER'S DESTINATION? JMP *+3 YES. GO CHECK TERMINAL LU. ADB N2 NO. GO TO NEXT PNL ENTRY. JMP PNLSR INB POINT TO LOCAL TERMINAL LU. JSB LODWD GET TERMINAL LU. AND B377 CPA REALU SAME AS OUR SCHEDULING LU? RSS JMP PNLNX NO. GO CHECK NEXT PNL ENTRY. INB YES. BAD ID SEGMENT? JSB LODWD SSA,RSS JMP SONOF NO. ERROR "RS06". ADB N1 YES. IGNORE PNL. PNLNX ADB N3 GO CHECK NEXT PNL ENTRY JMP PNLSR (COULD BE GOOD ONE AFTER THIS ONE). * * IF REQUEST IS FOR LOG-ON OR NON-SESSION ACCESS, FIND AN * AVAILABLE ENTRY IN THE NETWORK ACCOUNT TABLE (D$NAT). * NAT CLA JSB #NASR SEARCH. SZB,RSS JMP NROOM NONE AVAILABLE. ERROR. STB NATAD OK. SAVE ENTRY ADDRESS. * * BUILD LOGON/LOGOFF/NON-SESSION REQUEST. * BUILD LDA B7 STORE OPREQ STREAM. STA RQB+#STR LDA PRAMS+1,I STORE DESTINATION NODE. STA RQB+#DST * LDA B2 SET COMMAND LEN = 2 BYTES. STA RQB+#CML LDA "XX" STORE COMMAND STRING. STA RQB+#CMS LDA ICODE STORE REQUEST CODE. STA RQB+#LGC * SZA IS THIS A LOG OFF? JMP BLDMO NO. GO CONTINUE BUILDING. * LDA L#LNL YES. SET REQUEST LENGTH. STA RQLEN * LDA TNODE GET NAT INFO (AGAIN). JSB #NASR STB NATAD AND B377 STORE SESSION ID STA RQB+#LNL IN LOGOFF REQUEST BUFFER. JMP SEND GO SEND LOGOFF REQUEST. * * * STORE USER NAME AND/OR PASSWORD IN REQUEST BUFFER. * BLDMO LDA PRAMS+3,I LENGTH IN +WORDS OR -BYTES. SZA,RSS JMP ILLRQ ERROR IF LENGTH = 0. SSA MAKE + BYTES. CMA,INA,RSS ALS STA RQB+#LNL STORE LENGTH IN REQUEST. CMA IF OVER 32 BYTES, ADA K33 SSA JMP NSUCH NAME IS TOO LONG. * LOOP LDB PRAMS+2 GET BYTE ADDR OF LAST CHAR. RBL ADB RQB+#LNL ADB N1 JSB .LBT IF LAST CHAR = BLANK, CPA B40 RSS JMP CORCT LDA RQB+#LNL DECREMENT BYTE LEN IN REQ. ADA N1 STA RQB+#LNL JMP LOOP GO CHECK FOR ANOTHER BLANK. * CORCT LDA RQB+#LNL GET CORRECTED CHAR. COUNT. INA MAKE WORDS. ARS STA TEMP SAVE AS WORD COUNT. ADA L#LNL SET REQUEST LENGTH. STA RQLEN * LDA PRAMS+2 STORE NAME IN REQUEST. LDB D#LUN JSB .MVW DEF TEMP NOP * * SEND REQUEST TO THE DESTINATION HP 1000. * SEND JSB #MAST SHIP THE REQUEST BUFFER. DEF *+7 DEF CONWD NO-ABORT BIT SET IN CONWD. DEF RQLEN REQUEST LENGTH. DEF B0 DEF B0 DEF B0 DEF L#REP MAX ALLOWED REPLY LEN. JMP DSER ERROR RETURN ("DSXX", "RSXX", "SMXX", ETC.). * LDA ICODE LOG-OFF? SZA,RSS JMP RPNL YES. GO RELEASE PNL ENTRY. * * BUILD PROCESS NUMBER LIST ENTRY IN "RES" FOR LOG-ON AND NON-SESSION. * 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. * LDA RQB+#SID ISOLATE RETURNED DEST SESSION ID. AND B377 STA TEMP * JSB #RSAX ADD PROCESS # LIST ENTRY. DEF *+6 DEF K8 DEF REALU LOGGING LU. DEF TEMP DEST. SESSION ID. DEF TNODE DEST. NODE. DEF B0 MPE/RTE BIT = RTE. * SSB ANY ERRORS? JMP TBLER YES. * * COMPLETE THE ENTRY IN THE NETWORK ACCOUNT TABLE (D$NAT) FOR * LOG-ON AND NON-SESSION ACCESS. * LDB NATAD ENTRY ADDRESS. LDA TNODE STA B,I STORE NODE NUMBER. INB LDA RQB+#SID AND B377 STA B,I STORE RETURNED DEST SESSION ID. INB (CAN BE 0 OR 254) CLA STA B,I CLEAR ADDR OF ASCII USER NAME. INB STA B,I CLEAR EXECW SEQ #. * LDA NATAD LOAD UP NAT ENTRY NUMBER FOR REMAT. JMP RETRN,I RETURN TO THE USER. * * REMOVE AN ENTRY FROM THE PROCESS # LIST IN "RES". * RPNL JSB #RSAX DEF *+4 DEF K10 REMOVE AN ENTRY. DEF OFSID DEST SESSION ID. DEF TNODE DEST NODE NUMBER. * * DELETE ENTRY IN NETWORK ACCOUNT TABLE. * LDB NATAD GET POINTER TO NATX ADB B2 ENTRY (IF ANY) IN LDB B,I REMAT'S #RMSM ROUTINE. SZB,RSS JMP OLNEW NO NATX. CPB #DFSN JMP OLNEW (SKIP "DEFAULT SESSION") CLA CLEAR NATX ENTRY STA B,I (ASCII ACCOUNT NAME FOR LDA B THIS REMOTE SESSION). INB JSB .MVW DEF K10 NOP * OLNEW LDA OLDSN WAS THIS AN OLD SESSION SZA OR NON-SESSION ACCESS? JMP GOBAK YES. STILL NEED TO LOG-ON. * LDB NATAD NO. GET NAT ENTRY ADDRESS. CLA RELEASE THE ENTRY. STA B,I LDA B INB JSB .MVW DEF B4 NOP * OFRET CLA JMP RETRN,I RETURN TO THE USER. * GOBAK CLA RELEASE ENTRY, BUT USE IT FOR STA NATAD,I LOG-ON OR NON-SESSION "PERMIT". STA OLDSN CLEAR "OLD SESSION" FLAG. LDA RCODE RESTORE ORIGINAL REQUEST CODE STA ICODE (LOG-ON OR NON-SESSION REQUEST). JMP SONCK GO DO LOG-ON. * NSUCH DLD "SM04 ACCOUNT NAME IS TOO LONG. JMP NGOOD NROOM DLD "RS03 LIMIT REACHED ON # SESSIONS. JMP NGOOD OLDND DLD "RS04 NO S.M. AT OLD NODES. JMP NGOOD SONOF DLD "RS06 SON PROG ATTEMPTED LOGON OR LOGOFF. JMP NGOOD LOCER DLD "RS07 LOG-ON/OFF TO LOCAL NODE. JMP NGOOD NSERR DLD "DS04 INVALID NODE/LU. JMP NGOOD TBLER DLD "DS07 "RES" TABLE ACCESS ERROR. JMP NGOOD ILLRQ DLD "DS09 ILLEGAL REQ CODE, OR MISSING PARAM. * NGOOD DST RQB+#EC1 KEEP "DSERR" HAPPY BY STUFFING LDA #NODE ERROR INFO IN REPLY BUFFER. IOR BIT15 STA RQB+#ENO LDA RQB+#ECQ AND NOTQ STA RQB+#ECQ * DSER LDA RQB+#EC2 GET ERROR NUMBER. LDB RQB+#ENO ASCII? SSB,RSS JMP DSER1 NO. CLB YES. CONVERT TO BINARY. RRR 4 GET LEAST SIGNIFICANT DIGIT. BLF STB TEMP SAVE IT TEMPORARILY. RRR 4 GET TENS DIGIT. AND B17 MPY K10 MULTIPLY BY TEN. ADA TEMP ADD UNITS DIGIT. * DSER1 LDB RQB+#EC1 CPB "DS" IF "DSXX", ADA K50 ADD 50. CPB "SM" IF NOT "SMXX", RSS (I.E. DSXX/RSXX), CMA,INA NEGATE. SZA IF 0 (RS00/SM00), JMP DSER2 DLD "RS04 DST RQB+#EC1 LDA N4 MAP TO -4. JMP RTERR * DSER2 CPB "DS" IF NOT "DS", JMP RTERR OR CPB "SM" "SM", JMP RTERR OR CPB "RS" "RS", JMP RTERR THEN LDA N59 USE -59 CATCH-ALL. * RTERR STA PRAMS,I RETURN ERROR CODE. * CLA JMP RETRN,I RETURN TO CALLER. * * LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS. * LODWD NOP LDA $OPSY OPERATING SYSTEM TYPE. RAR,SLA SKIP IF NON-DMS. JMP *+3 LDA B,I NON-DMS. JMP LODWD,I XLA B,I DMS CROSS-LOAD. JMP LODWD,I SKP * * CONSTANTS AND WORKING STORAGE. * B0 OCT 0 B1 OCT 1 B2 OCT 2 B4 OCT 4 B7 OCT 7 B17 OCT 17 B40 OCT 40 B377 OCT 377 BIT15 OCT 100000 NOTQ OCT 177417 D254 DEC 254 K8 DEC 8 K10 DEC 10 K33 DEC 33 K50 DEC 50 N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N59 DEC -59 "XX" ASC 1,XX "SM" ASC 1,SM "RS" ASC 1,RS "DS" ASC 1,DS "SM04 ASC 2,SM04 "RS03 ASC 2,RS03 "RS04 ASC 2,RS04 "RS06 ASC 2,RS06 "RS07 ASC 2,RS07 "DS04 ASC 2,DS04 "DS07 ASC 2,DS07 "DS09 ASC 2,DS09 BUFR BSS 3 D#LUN DEF RQB+#LUN OFSID NOP NATAD NOP ICODE NOP RCODE NOP TNODE NOP LEVEL NOP TEMP NOP XEQT NOP OLDSN NOP CONWD OCT 100000 LGW OCT 40002 REALU NOP RQLEN NOP L#LNL ABS #LNL+1 L#REP ABS #REP+1 C#MXR ABS #MXR * BSS 0 SIZE OF DLGON. * END