ASMB,R,Q,C,Z IFZ HED #DISM 91750-1X203 REV.2013 * (C) HEWLETT-PACKARD CO. 1980 NAM #DISM,7 91750-1X203 REV.2013 800702 RTE-IVB W/S.M. XIF IFN HED #DISM 91750-1X204 REV.2013 * (C) HEWLETT-PACKARD CO. 1980 NAM #DISM,7 91750-1X204 REV.2013 800702 ALL, W/O S.M. XIF * * "Z" OPTION FOR SESSION MONITOR NODE, "N" OPTION FOR NON-SESSION NODE. 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 #DISM EXT EXEC,#PRNT,#INBF,REIO,$DSCS,#POOL EXT #DFUN,#PASS,$OPSY,$LIBR,$LIBX,.DRCT IFZ EXT .UACT,.MVW,XLUEX,CNUMD,#READ,#PRNL,#EXFR,#CLSB EXT #RSM.,#RSM,#MSKD,#ABRT,LUSES,#BREJ,#NODE,#MHCT EXT PGMAD,SESSN,ISMVE,DTACH,ATACH,$SMII XIF * * NAME: #DISM * SOURCE: 91750-18203 * RELOC: PART OF 91750-12014 ("Z"), -12015 ("N") * PGMR: JIM HARTSELL * * SUBROUTINES TO PERFORM OPTIONAL REMOTE SESSION INITIALIZATION FOR * THE DS/1000 DINIT PROGRAM. CALLING SEQUENCES: * * FOR SHUTDOWN, LOG OFF ALL REMOTELY OWNED SESSIONS: * * CCA * JSB #DISM * * FIND AMOUNT OF SAM REQUIRED FOR REMOTE SESSION: * * CLA * JSB #DISM * (A) = # SAM WORDS NEEDED. * * BUILD SESSION ID POOL, GET DEFAULT ACCOUNT NAME & NON-SESSION PASSWORD: * * CLA,INA * JSB #DISM * * PERFORM ABORT FUNCTIONS FOR REMOTE SESSION: * * LDA B2 * JSB #DISM 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 SUP PRINT EQU #PRNT INBUF EQU #INBF IFZ READ EQU #READ PRNTL EQU #PRNL ERXFR EQU #EXFR CLSUB EQU #CLSB MSKED EQU #MSKD ABORT EQU #ABRT XIF A EQU 0 B EQU 1 * * INITIALIZE. * #DISM NOP ENTRY. STA FCODE SAVE FUNCTION CODE. * JSB .DRCT RESOLVE INDIRECT EXTERNAL REFS. DEF INBUF STA DINBF JSB .DRCT DEF #DFUN STA DFUN JSB .DRCT DEF #PASS STA PASS * * CHECK #DISM FUNCTION REQUESTED. * LDA FCODE IFZ CPA N1 JMP SHUTD XIF SZA,RSS JMP AMNT CPA B1 JMP FILL CPA B2 JMP KILL CLA JMP #DISM,I SKP IFZ * * LOG OFF ALL SESSIONS CREATED FROM REMOTE NODES. USE THE SPECIAL * NO-REPLY LOG-OFF REQUEST (SIMILAR ROUTINE IN #MSSM & #UPSM, BUT * #DISM'S VERSION IS BUILT FROM #POOL ENTRY INFO). RSM IS HIGHER * PRIORITY THAN DINIT, THUS SESSIONS WILL GET RELEASED BEFORE DINIT * ABORTS RSM. THERE IS NO NEED TO CLEAR #POOL ENTRIES SINCE DINIT * WILL BE RELEASING THE S.A.M. AREA. * SHUTD LDA #RSM IS RSM STILL AROUND? SZA,RSS JMP #DISM,I NO. DON'T EVEN BOTHER. * LDB #POOL GET ADDRESS OF SID POOL. SZB,RSS DO WE HAVE ONE? JMP #DISM,I NO. DON'T BOTHER. JSB LODWD GET # POOL ENTRIES (NEGATIVE). STA CNTR INB POINT TO FIRST #POOL ENTRY. LOOP1 JSB LODWD (CROSS) LOAD WORD 1 OF POOL ENTRY. SSA,RSS IS ENTRY ACTIVE (CHECK BIT 15)? JMP NEXT1 NO. GO TO NEXT ENTRY. * STB POOLA YES. SAVE ADDRESS OF POOL ENTRY. AND B377 ISOLATE "IN-USE" SESSION ID. STA TEMP * JSB LUSES IS THE SESSION FOR THIS DEF *+2 #POOL ENTRY STILL AROUND? DEF TEMP * SZA,RSS JMP RSTOR NO. GO TO NEXT ENTRY. * LDB POOLA CLA RESET CERTAIN SLOTS. STA LGF+#SEQ STA LGF+#MAR STA LGF+#MAC LDA B7 BUILD STREAM WORD. IOR #BREJ IOR BIT12 SET "LEVEL 1 & ABOVE" BIT. STA LGF+#STR INB POINT TO 2ND WORD OF #POOL ENTRY. JSB LODWD (CROSS) LOAD SOURCE NODE NUMBER. SZA,RSS JMP RSTOR IF NONE, SKIP IT. STA LGF+#SRC STORE IN LOG-OFF REQUEST. LDA #NODE STA LGF+#DST STORE DEST NODE # IN REQUEST. CLA,INA STA LGF+#LVL STORE UPGRADE LEVEL # IN REQUEST. LDA N2 STA LGF+#MAS SET TO BYPASS MESSAGE ACCOUNTING. LDA #MHCT STA LGF+#HCT SET HOP COUNT. INB POINT TO 3RD WORD OF #POOL ENTRY. JSB LODWD (CROSS) LOAD SOURCE SESSION ID. AND B377 ALF,ALF STA LGF+#SID (DEST SID ZERO.) LDA TEMP STA LGF+#LNL STORE SESSION ID TO BE LOGGED OFF. * LDA B2 STORE COMMAND LENGTH. STA LGF+#CML LDA "XX" STORE "XX" COMMAND. STA LGF+#CMS CCA STORE "NO-REPLY" REQ CODE. STA LGF+#LGC * JSB EXEC DO CLASS WRITE/READ TO RSM. DEF *+8 DEF CLS20 NO ABORT. DEF CONWX DEF TEMP NO DATA. DEF B0 DEF LGF REQUEST BUFFER. DEF L#LNL REQUEST LENGTH. DEF #RSM I/O CLASS. NOP IGNORE ERROR. * RSTOR LDB POOLA RESTORE B-REGISTER. NEXT1 ADB POOSZ ADVANCE TO NEXT #POOL ENTRY. ISZ CNTR LOOP TILL DONE. JMP LOOP1 * JMP #DISM,I RETURN TO CALLER (DSMOD). SPC 5 * * SUBROUTINE TO LOAD A WORD FROM S.A.M., CROSS LOAD IF DMS SYSTEM. * LODWD NOP LDA $OPSY OP SYSTEM TYPE. RAR,SLA JMP *+3 LDA B,I NON-DMS. JMP LODWD,I XLA B,I DMS. JMP LODWD,I XIF SKP * * FIND AMOUNT OF S.A.M. NEEDED FOR REMOTE SESSION. * AMNT LDA B7 INITIALIZE DEFAULT NUMBER OF STA NPOOL CONCURRENT SESSIONS = 7. * LDA $DSCS IF NO SESSION MONITOR, OR S.M. NOT SSA INITIALIZED AT THIS NODE, JMP DSMD1 USE DEFAULT. IFN JSB PRNTW ISSUE WARNING IF NON-SESSION DEF WARN1 MODULE WAS LOADED IN JSB PRNTW A SESSION MONITOR NODE! DEF WARN2 JMP DSMD1 CONTINUE AS IF NON-SESSION NODE. XIF * IFZ JSB PRINT ASK USER TO SPECIFY DEF SMSG1 "MAX # LOCAL SESSIONS FOR REMOTE..." DSMR1 LDA B7 SET DEFAULT VALUE. STA NPOOL JSB READ READ RESPONSE. CPA B1 RESULT NUMERIC? JMP DSMV1 YES--PROCESS IT. CPB /D DEFAULT WANTED? JMP DSMD1 YES--USE DEFAULT. DSME1 JSB ERXFR IMPROPER REPLY: DEF IVRES INFORM USER OF ERROR JMP DSMR1 AND TRY AGAIN. DSMV1 STB NPOOL SAVE # POOL ENTRIES. SSB,RSS IF NEGATIVE - ERROR. CMB,INB,SZB,RSS NEGATE NUMBER & CHECK FOR ZERO. JMP DSME1 REPORT ERROR. ADB D253 ADD MAXIMUM NUMBER ALLOWED (253). SSB BEYOND RANGE? JMP DSME1 YES--REPORT ERROR. XIF DSMD1 LDA NPOOL GET # POOL ENTRIES. MPY POOSZ MULTIPLY BY SIZE OF POOL ENTRY. INA ADD COUNT WORD. STA BLKSZ SAVE SAM SIZE NEEDED. JMP #DISM,I RETURN AMOUNT OF SAM REQUIRED. SKP * * BUILD SESSION ID POOL: FIND AS MANY UNDEFINED LOGICAL UNIT NUMBERS * AS "MAX # CONCURRENT SESSIONS" ENTERED PREVIOUSLY. * FILL LDB $OPSY RBR,SLB SKIP IF NON-DMS. CLA,RSS JMP FILL1 STA MOD1 MODIFY FOR DMS. STA CLR1 * FILL1 LDA #POOL CLEAR POOL AREA IN S.A.M. INA STA ADDR START OF POOL AREA PAST COUNT WORD. LDB BLKSZ ADB N1 CMB,INB NEG. # WORDS (LESS COUNT WORD). JSB $LIBR GO PRIVILEGED. NOP CLA CLR1 JMP CLR2 NOP IF DMS. XSA ADDR,I STORE IN ALTERNATE MAP. RSS CLR2 STA ADDR,I ISZ ADDR INB,SZB JMP CLR1 JSB $LIBX GO UN-PRIVILEGED. DEF *+1 DEF *+1 * LDA $DSCS IF NO SESSION MONITOR, OR NOT SSA,RSS INITIALIZED AT THIS NODE, JMP SETAD XLIBX LDA NPOOL JUST SET CMA,INA COUNT WORD LDB #POOL FOR S.I.D. JSB STUFF POOL JMP #DISM,I AND RETURN. * SETAD EQU * IFN JMP XLIBX NON-SM LIBR IN SESSION NODE! XIF * IFZ CLA STA SID STA BUFR * JSB PGMAD GET DINIT'S ID SEGMENT ADDRESS. DEF *+3 DEF BUFR DEF TEMP * JSB SESSN IS DINIT RUNNING UNDER A SESSION? DEF *+2 DEF TEMP (ID SEG ADDR) * SEZ JMP POOL1 NO. * STB TEMP YES. SAVE POINTER TO SCB. * JSB ISMVE GET LOCAL SESSION ID FROM SCB. DEF *+5 DEF TEMP SESSION WORD FROM ID SEG. DEF $SMII POINT TO SESSION IDENTIFIER. DEF SID (RETURNED) SESSION ID. DEF B1 GET 1 WORD. * JSB DTACH DETACH TEMPORARILY FROM THE SESSION DEF *+1 SO THAT WE CAN LOOK AT ALL LUS. * POOL1 LDA #POOL SET ADDR OF 1ST POOL ENTRY. INA STA ADDR LDA NPOOL SET COUNTER FOR MAX # CMA,INA SESSION ID POOL ENTRIES. STA CNTR CLA INITIALIZE ACTUAL COUNT STA POOL# OF # POOL ENTRIES. LDA D253 SET 1ST SESSION ID CANDIDATE STA SLU AT HIGH END OF LOGICAL UNITS. * LOOP JSB XLUEX GET STATUS OF NEXT LU. DEF *+4 DEF ICD13 DEF SLU DEF TEMP JMP AVAIL ERR RTN: UNDEFINED LU NUMBER? * NEXT LDA SLU IN USE: DECR TO NEXT LOWER LU. ADA N1 STA SLU ISZ CNTR BUMP LOOP COUNTER, JMP LOOP AND LOOP TILL DONE. JMP CHECK DONE: GO SEE IF WE GOT ENOUGH. * AVAIL CPA "IO" MAKE SURE IT IS AN UNDEFINED LU. RSS JMP NEXT NO. GO TRY NEXT LU. CPB "02" RSS CPB "26" RSS JMP NEXT NO. GO TRY NEXT LU. * LDA SLU HAVE UNDEFINED LU NUMBER: LDB ADDR STORE IN 1ST WORD JSB STUFF OF POOL ENTRY. ADB POOSZ STB ADDR ADDR OF NEXT POOL ENTRY. ISZ POOL# INCREMENT # POOL ENTRIES. JMP NEXT GO LOOK FOR ANOTHER LU. * CHECK LDA POOL# GET # POOL ENTRIES ACQUIRED. CPA NPOOL YES. SAME AS # REQUESTED? JMP SPCNT YES. * JSB CNUMD NO. ISSUE WARNING MESSAGE. DEF *+3 DEF POOL# DEF SWARN+19 * JSB PRNTW DEF SWARN * LDA POOL# SZA,RSS GET ANY AT ALL? JMP ABORT NO. ** ABORT DINIT ** * SPCNT CMA,INA NEGATE # POOL ENTRIES AND LDB #POOL STORE IN POOL COUNT WORD. JSB STUFF * LDA SID WAS DINIT UNDER A SESSION? SZA,RSS JMP ASIGN NO. * JSB ATACH YES. RE-ATTACH TO THE SESSION. DEF *+2 (WE MIGHT BE A CLONE) DEF SID * * ALLOCATE CLASS NUMBER AND SCHEDULE RSM. * ASIGN CCA ASSIGN A JSB CLSUB CLASS NUMBER FOR DEF #RSM. "RSM". * JSB MSKED SCHEDULE RSM. DEF #RSM. SZA CATASTROPHIC ERROR? JMP ABORT YES. ** ABORT DINIT ** SKP * * GET DEFAULT ACCOUNT NAME. * LDB BLANK BLANK OUT #DFUN IN RES. LDA DFUN STB A,I LDB A INB JSB .MVW DEF D10 NOP * LDA B6 SET "USER.GENERAL" LENGTH. STA TEMP ALS STA LEN * JSB PRINT ASK THE USER TO DEF SMSG2 "ENTER DEFAULT SESSION USER-NAME:" DSMR2 JSB READ GET THE RESPONSE. CPA B2 RESULT ASCII? JMP DSMV2 YES--PROCESS IT. DSME2 JSB ERXFR IMPROPER REPLY: DEF IVRES INFORM USER OF ERROR JMP DSMR2 AND TRY AGAIN. DSMV2 LDA US.GN CPB /D IF "/D" WAS INPUT, JMP DSMD2 USE "USER.GENERAL". * LDA PRNTL COMPUTE # WORDS INPUT. STA LEN INA ARS STA TEMP SAVE FOR MOVE. ADA N12 IF GREATER THAN 11, SSA,RSS INFORM USER OF ERROR JMP DSME2 AND TRY AGAIN. * LDA DINBF MOVE USER-NAME TO #DFUN (IN RES). DSMD2 LDB DFUN JSB .MVW DEF TEMP NOP * LDA LEN VERIFY WHETHER VALID NAME. CMA,INA LDB DFUN * JSB .UACT DEF BUFR * SSA JMP DSME2 INVALID USER NAME. SKP * * GET PASSWORD FOR NON-SESSION ACCESS. * LDB BLANK BLANK OUT #PASS IN RES. LDA PASS STB A,I LDB A INB JSB .MVW DEF B4 NOP * JSB PRINT ASK THE USER TO DEF SMSG3 "ENTER PASSWORD FOR NON-SESSION ACCESS:" DSMR3 JSB READ GET THE RESPONSE. CPA B2 ASCII? JMP DSMV3 YES--PROCESS IT. DSME3 JSB ERXFR IMPROPER REPLY: DEF IVRES INFORM USER OF ERROR JMP DSMR3 AND TRY AGAIN. DSMV3 CPB /D IF "/D" WAS INPUT, JMP #DISM,I LEAVE PASSWORD = BLANKS. * LDA PRNTL GET # WORDS INPUT. INA ARS STA TEMP ADA N6 IF GREATER THAN 5, SSA,RSS INFORM USER OF ERROR JMP DSME3 AND TRY AGAIN. * LDA DINBF MOVE PASSWORD TO #PASS (IN RES). LDB PASS JSB .MVW DEF TEMP NOP * JMP #DISM,I RETURN TO DINIT. XIF SPC 3 * * SUBROUTINE TO STORE A WORD IN S.A.M. * STUFF NOP JSB $LIBR GO PRIVILEDGED. NOP MOD1 JMP STUF2 NOP HERE IF DMS. XSA B,I STORE IN ALTERNATE MAP. RSS STUF2 STA B,I JSB $LIBX DEF STUFF SKP * * PERFORM ABORT FUNCTIONS FOR REMOTE SESSION. * KILL CLA CLEAR POINTER TO S.I.D. POOL. STA #POOL * JMP #DISM,I RETURN TO DINIT. SPC 3 * * DISPLAY WARNING MESSAGE ON INTERACTIVE DEVICE AND SYSTEM CONSOLE. * PRNTW NOP LDA PRNTW,I GET ADDRESS OF MSG BUFFER. STA MSLOC * JSB PRINT DISPLAY ON INTERACTIVE DEVICE. MSLOC NOP * DLD MSLOC,I DISPLAY ON SYSTEM CONSOLE. STA ADDR LDB B,I STB CNTR * JSB REIO DEF *+5 DEF B2 DEF B1 DEF ADDR,I DEF CNTR * ISZ PRNTW JMP PRNTW,I RETURN. SKP * * CONSTANTS AND STORAGE. * B1 OCT 1 B2 OCT 2 B6 OCT 6 B7 OCT 7 D18 DEC 18 D20 DEC 20 N1 DEC -1 POOSZ DEC 7 SIZE OF #POOL ENTRY. FCODE NOP BLKSZ NOP NPOOL NOP ADDR NOP LEN NOP CNTR NOP DFUN NOP RESOLVED "DEF INBUF". PASS NOP RESOLVED "DEF #PASS". DINBF NOP RESOLVED "DEF INBUF". * IFZ B0 OCT 0 B4 OCT 4 B377 OCT 377 BIT12 OCT 10000 CLS20 OCT 100024 CONWX OCT 10100 D9 DEC 9 D10 DEC 10 D253 DEC 253 N2 DEC -2 N6 DEC -6 N12 DEC -12 ICD13 OCT 100015 "XX" ASC 1,XX "IO" ASC 1,IO "02" ASC 1,02 "26" ASC 1,26 BLANK ASC 1, /D ASC 1,/D TEMP NOP POOL# NOP SLU OCT 0,0 SID NOP POOLA NOP L#LNL ABS #LNL+1 * US.GN DEF *+1 ASC 6,USER.GENERAL * IVRES DEF *+2 DEF D9 ASC 9, INVALID RESPONSE! * SMSG1 DEF *+2 DEF D20 ASC 20, MAX # LOCAL SESSIONS FOR REMOTE NODES?_ * * SMSG2 DEF *+2 DEF D18 ASC 18, ENTER DEFAULT SESSION USER-NAME: _ * * SMSG3 DEF *+2 DEF D20 ASC 20, ENTER PASSWORD FOR NON-SESSION ACCESS:_ * * SWARN DEF *+2 DEF D20 ASC 20, WARNING - # SESSIONS FOR REMOTE = XXXXX * BUFR BSS 128 LGF EQU BUFR "NO-REPLY" LOGOFF REQ BUFFER. XIF * IFN WARN1 DEF *+2 DEF D18 ASC 18, WARNING - SESSION MONITOR NODE HAS WARN2 DEF *+2 DEF D20 ASC 20, WRONG REMOTE-SESSION LIBRARY! XIF * BSS 0 SIZE OF #DISM. * END