ASMB,R,Q,C HED #SCSM 91750-1X033 REV 2013 * (C) HEWLETT-PACKARD CO. 1980 NAM #SCSM,7 91750-1X033 REV.2013 800507 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 #SCSM * EXT $DSCS,#RPB,#POOL,#CLON EXT $LIBR,$LIBX,$OPSY,.DRCT,.MVW * RQB EQU #RPB * SUP * * NAME: #SCSM * SOURCE: 91750-18033 * RELOC: PART OF 91750-12014, -12015 * PGMR: JIM HARTSELL * * * * SUBROUTINE TO PERFORM SESSION-MONITOR PREPROCESSING AND POSTPROCESSING * OF DEXEC SCHEDULE REQUESTS FOR THE EXECW MODULE AND FOR POPEN, FINIS * REQUESTS FOR THE PTOPM MODULE. * * CALLING SEQUENCES: * * PREPROCESSING: * * CLA * JSB #SCSM * P+1 ERROR RETURN. COULD NOT PERFORM REQUESTED CLONING. * P+2 NORMAL RETURN. * * * POSTPROCESSING...WHEN SCHEDULED PROGRAM TERMINATES: * * (A) = ADDRESS OF PROGRAM NAME * JSB #SCSM 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 * DXBLK-START * ****************************************************************** * * * D E X E C B L O C K REV 2013 800221 * * * * OFFSETS INTO DS/1000 DEXEC MESSAGE BUFFERS, USED BY: * * * * DEXEC, EXECM, EXECW, RQCNV, RPCNV, FLOAD, REMAT * * * ****************************************************************** * * OFFSETS INTO DEXEC REQUEST BUFFERS. * #ICD EQU #REQ ICODE FOR DEXEC(ALL) #CNW EQU #ICD+1 CONWD FOR DEXEC(1,2,3,13) #CWX EQU #CNW+1 DLUEX EXTENSION FOR DEXEC(1,2,3,13) #BFL EQU #CWX+1 IBUFL FOR DEXEC(1,2) #PM1 EQU #BFL+1 IPRM1 FOR DEXEC(1,2) #PM2 EQU #PM1+1 IPRM2 FOR DEXEC(1,2) #ZOF EQU #PM1 Z-BUFFER OFFSET FOR DEXEC(1,2,3,13) #ZLN EQU #PM2 Z-BUFFER LENGTH FOR DEXEC(1,2,3,13) #PR2 EQU #PM2+1 2ND OPT. PARAMETER FOR DEXEC(3) [RTE-L]. #KEY EQU #PR2+1 KEYWORD(RN) FOR DEXEC(1,2,3) [RTE-L]. #PRM EQU #CWX+1 IPRAM FOR DEXEC(3) #PGN EQU #ICD+1 PRGNM FOR DEXEC(6,9,10,12,23,24,99) #INU EQU #PGN+3 INUMB FOR DEXEC(6) #DPM EQU #INU+1 PARMS FOR DEXEC(6) (5-WORD AREA) #PMS EQU #PGN+3 PARMS FOR DEXEC(9,10,23,24)(5-WORD AREA) #IBF EQU #PMS+5 IBUFR FOR DEXEC(9,10,23,24) #IBL EQU #IBF+1 IBUFL FOR DEXEC(9,10,23,24) #FNO EQU #IBL+1 FNOD FOR DEXEC(9) (APLDR) #RSL EQU #PGN+3 IRESL FOR DEXEC(12) #MPL EQU #RSL+1 MTPLE FOR DEXEC(12) #HRS EQU #MPL+1 IHRS FOR DEXEC(12) #MIN EQU #HRS+1 IMIN FOR DEXEC(12) #SEC EQU #MIN+1 ISECS FOR DEXEC(12) #MSC EQU #SEC+1 MSECS FOR DEXEC(12) #PAR EQU #ICD+1 PARTI FOR DEXEC(25) (PARTITION #) #IST EQU #PGN+3 ISTAT FOR DEXEC(99) * * OFFSETS INTO DEXEC REPLY BUFFERS. * #EQ5 EQU #EC1 EQT 5 FOR DEXEC(1,2,3) #XML EQU #EC2 TRANSMISSION LOG (DEXEC 1,2) #RPM EQU #REP PRAMS FOR DEXEC(9,23) (5-WORD AREA) #TMS EQU #REP MSEC FOR DEXEC(11) #TSC EQU #TMS+1 SEC FOR DEXEC(11) #TMN EQU #TSC+1 MIN FOR DEXEC(11) #THR EQU #TMN+1 HRS FOR DEXEC(11) #TDA EQU #THR+1 DAY FOR DEXEC(11) #TYR EQU #TDA+1 YEAR FOR DEXEC(11) #ST1 EQU #REP ISTA1 FOR DEXEC(13) #ST2 EQU #ST1+1 ISTA2 FOR DEXEC(13) #ST3 EQU #ST2+1 ISTA3 FOR DEXEC(13) #ST4 EQU #ST3+1 ISTA4 FOR DEXEC(13) [RTE-L]. #PAG EQU #REP IPAGE FOR DEXEC(25) #IPN EQU #PAG+1 IPNUM FOR DEXEC(25) #PST EQU #IPN+1 ISTAT FOR DEXEC(25) #KST EQU #REP ISTAT FOR DEXEC(99) * * MAXIMUM SIZE OF DEXEC REQUEST/REPLY BUFFER. * #DLW EQU #MHD+11+#LSZ M A X I M U M S I Z E ! ! ! * * MAXIMUM SIZE OF DEXEC/EXECM DATA BUFFER. * #DBS EQU 512 M A X I M U M S I Z E ! ! ! * * DXBLK-END SPC 5 * PPBLK-START * ****************************************************************** * * * P T O P B L O C K REV 2013 791119 * * * * OFFSETS INTO DS/1000 PTOP MESSAGE BUFFERS, USED BY: * * * * POPEN, PTOPM, GET/ACEPT/REJCT, RQCNV, RPCNV, DINIT, REMAT * * #SCSM * ****************************************************************** * * OFFSETS INTO PTOP REQUEST AND REPLY BUFFERS. * #FCD EQU #REP FUNCTION CODE. #PCB EQU #FCD+1 PCB AREA (3 WORDS). #TAG EQU #PCB+3 TAG AREA (20 WORDS). * * MAXIMUM SIZE OF PTOP REQUEST/REPLY BUFFER. * #PLW EQU #MXR M A X I M U M S I Z E ! ! ! * * PPBLK-END SKP A EQU 0 B EQU 1 * * #SCSM NOP ENTRY. LDB $OPSY RBR,SLB SKIP IF NON-DMS. CLB,RSS JMP ENTYP STB MOD1 DMS. * ENTYP SZA CHECK TYPE OF ENTRY. JMP UNCLO GO HANDLE TERMINATION. * LDB #POOL IF #POOL NOT SET UP, SZB,RSS JMP EXIT DON'T DO ANYTHING. * LDA RQB+#STR CHECK TYPE OF REQUEST. AND B77 CPA B3 JMP SCSM1 CPA B4 JMP SCSM2 JMP SMNOD * SCSM1 JSB .DRCT DEXEC(9) REQUEST: DEF RQB+#PGN GET ADDR OF PROGRAM NAME. STA NAMAD LDA RQB+#ICD IF BIT 11 OF ICODE ALF IS SET, JMP SCSM3 SET "CLONE FLAG". * SCSM2 JSB .DRCT POPEN REQUEST: DEF RQB+#PCB GET ADDR OF SLAVE PROG NAME. STA NAMAD LDA RQB+#FCD IF BIT 13 OF FCODE RAL,RAL IS SET, SCSM3 CLB SET "CLONE FLAG". SSA INB STB CFLAG * SMNOD LDA $DSCS SESSION MONITOR NODE? SSA,RSS JMP CLONE YES. GO CHECK FOR CLONING. * * NON-SESSION NODE. BUILD A TEMPORARY #POOL ENTRY FROM WHICH THE * SCHEDULED PROGRAM'S #MSSM ROUTINE CAN FIND THE SOURCE NODE AND * SESSION FROM WHICH THE PROGRAM WAS SCHEDULED. THIS IS USED FOR * REDIRECTING THE PROGRAM'S REMOTE REQUESTS TO THE ORIGINATING SESSION * AT AN HP 1000 OR AN HP 3000. * >>>> CAUTION! <<<< WHEN EXECW GETS THE SMARTS TO SCHEDULE MORE * THAN ONE PROGRAM AT A TIME, THERE CAN BE MORE THAN ONE #POOL ENTRY * WITH THE SAME PROGRAM NAME (AND NO POOL SESSION ID)... WILL NEED * A WAY FOR #MSSM'S "ROOTS" ROUTINE (CASE 3) TO TELL WHICH ONE. * LDA RQB+#SID SOURCE SESSION ID IN REQUEST? ALF,ALF (OR MPE PROCESS NUMBER) AND B377 SZA,RSS JMP EXIT NO. RETURN. * STA SSID YES. SAVE THE SOURCE SESSION ID. LDB #POOL FIND AN AVAILABLE #POOL ENTRY. JSB LODWD GET # POOL ENTRIES (NEGATIVE). STA TEMP INB POINT TO 1ST POOL ENTRY. LOOP JSB LODWD (CROSS) LOAD WORD 1 OF ENTRY. SSA,RSS IS SIGN BIT SET? JMP IDFND NO. THIS ENTRY IS AVAILABLE. ADB POOSZ BUMP ADDR TO NEXT ENTRY. ISZ TEMP END OF POOL? JMP LOOP NO. CONTINUE. * JMP EXIT YES. CAN'T REDIRECT FOR THIS USER! * IDFND IOR BIT15 SET SIGN BIT FOR "IN USE". JSB STUFF STORE BACK TO S.A.M. STB POOLA SAVE ADDRESS OF #POOL ENTRY. * INB BUILD THE TEMP #POOL ENTRY. LDA RQB+#SRC STORE SOURCE NODE NUMBER. JSB STUFF INB LDA SSID STORE SOURCE SESSION ID. JSB STUFF CNAME INB LDA NAMAD STA ADDR LDA ADDR,I STORE SCHEDULEE'S NAME. JSB STUFF INB ISZ ADDR LDA ADDR,I JSB STUFF INB ISZ ADDR LDA ADDR,I JSB STUFF * LDA SEQNO BUMP #POOL ENTRY "EXECW SEQUENCE CPA B377 NUMBER" THAT #MSSM USES TO DETECT CLA A NEW SCHEDULE OF A CORE-RESIDENT INA PROGRAM BY EXECW (AND CAN THEN STA SEQNO CLEAR PRIOR NETWORK ACC'T TABLE). LDB POOLA ADB B2 STORE EXECW SEQ # IN #POOL ENTRY. JSB LODWD (FETCH SEQNO WORD, AND B377 CLEAR OLD SEQNO, ALF,ALF SWITCH BYTES, IOR SEQNO INSERT NEW SEQNO, ALF,ALF AND SWITCH BACK.) JSB STUFF * EXIT ISZ #SCSM EXIT TO NORMAL EXECW/PTOPM PROCESSING. JMP #SCSM,I * * SESSION NODE. CREATE A COPY OF THE PROGRAM IF "RW" FROM REMAT, * OR IF SPECIAL "CLONE" POPEN REQUEST. * CLONE CLA INITIALIZE "CLONED" FLAG STA CLONF FOR #POOL ENTRY. LDA CFLAG IS CLONING REQUESTED? SZA,RSS JMP CATLG NO. * LDA RQB+#SID YES. GET DESTINATION SESSION ID. AND B377 STA TEMP SAVE FOR #POOL SEARCH. CPA D254 IF USER HAS NON-SESSION ACCESS, JMP EXIT DON'T CLONE (NO #POOL ENTRY). * LDA RQB+#STR IF REQUEST IS FROM A 3000, SSA IGNORE "LOCAL NODE" TEST. JMP CLON1 LDA RQB+#SRC IF DESTINATION NODE = CPA RQB+#DST SOURCE NODE, JMP EXIT DON'T CLONE (NO #POOL ENTRY). * CLON1 LDA TEMP GET DESTINATION SID. LDB NAMAD GET ADDRESS OF PROGRAM NAME. * JSB #CLON CLONE THE PROGRAM. JMP #SCSM,I COULD NOT CLONE SP'D PROGRAM. JMP CATLG PROG KNOWN TO SYS BUT CAN'T CLONE IT. * LDA B PROGRAM WAS CLONED. LDB NAMAD MOVE NEW NAME TO JSB .MVW DEXEC/POPEN REQUEST. DEF B3 NOP * LDA BIT14 SET "CLONED" FLAG STA CLONF FOR #POOL ENTRY. * CATLG LDB #POOL FIND #POOL ENTRY AND STORE JSB LODWD NAME (CAN BE CLONED NAME). STA CNTR INB LOOP2 JSB LODWD (CROSS) LOAD NEXT POOL SID. SSA,RSS JMP NEXT1 NOT IN USE. AND B377 IN USE. COMPARE DEST SID. CPA TEMP JMP FOUND FOUND. NEXT1 ADB POOSZ GO TO NEXT #POOL ENTRY. ISZ CNTR JMP LOOP2 JMP EXIT NOT IN #POOL. * FOUND STB POOLA SAVE ADDRESS OF #POOL ENTRY. JSB LODWD SET "CLONED" BIT IN #POOL ENTRY IOR CLONF IF PROGRAM WAS CLONED. JSB STUFF ADB B2 BUMP POINTER. * JMP CNAME GO STORE PROGRAM NAME IN ENTRY. SKP * * PERFORM PROCESSING FOR TERMINATION OF EXECW-SCHEDULED PROGRAMS * AND FOR PTOP SLAVE PROGRAMS. * UNCLO EQU * STA NAMAD SAVE ADDR OF PROGRAM NAME. * * SEE IF PROGRAM NAME IN IN A #POOL ENTRY (WHETHER S.M. NODE OR NOT). * LDB #POOL GET ADDR OF SID POOL. SZB,RSS IF NOT SET UP, JMP #SCSM,I DON'T DO ANYTHING. JSB LODWD GET NEG. # OF POOL ENTRIES. STA CNTR SAVE COUNTER. INB POINT TO WORD 1 OF 1ST ENTRY. STB POOLA * LOOP1 LDA NAMAD RESET NAME ARRAY POINTER. STA PTR LDB POOLA JSB LODWD (CROSS) LOAD NEXT POOL SID. SSA,RSS JMP NEXT NOT IN USE. * ADB B3 IN USE. COMPARE PROGRAM NAMES. JSB LODWD CPA PTR,I RSS JMP NEXT INB JSB LODWD ISZ PTR CPA PTR,I RSS JMP NEXT INB JSB LODWD AND B1774 STA TEMP ISZ PTR LDA PTR,I AND B1774 CPA TEMP JMP CKSID NAMES MATCH. POOLA = POOL ENTRY ADDR. * NEXT LDB POOLA NO MATCH. ADB POOSZ STB POOLA ISZ CNTR JMP LOOP1 GO CHECK NEXT #POOL ENTRY. * JMP #SCSM,I NAME NOT FOUND IN #POOL. * * NAME FOUND IN A #POOL ENTRY. * CKSID LDA $DSCS SESSION NODE? SSA JMP RPOOL NO. * * CHECK IF PROGRAM WAS CLONED & RELEASE ITS ID SEGMENT. * LDB POOLA CHECK "CLONED" BIT IN #POOL ENTRY. JSB LODWD RAL (CHECK BIT 14) SSA,RSS JMP CLNAM NOT CLONED. GO CLEAR NAME. * ELA,CLE,ERA CLONED. CLEAR FLAG IN #POOL ENTRY. RAR JSB STUFF CLA LDB NAMAD JSB #CLON RELEASE CLONED ID SEGMENT. * CLNAM LDA N3 CLEAR PROG NAME IN #POOL ENTRY. STA TEMP LDB POOLA ADB B2 CLA JMP CLENT * * RELEASE TEMPORARY #POOL ENTRY. * RPOOL LDB POOLA JSB LODWD GET WORD 1. AND B377 CLEAR LEFT-BYTE FLAGS. JSB STUFF STORE BACK. * LDA POOSZ CLEAR WORDS 2-LAST. CMA,INA INA STA TEMP LDB POOLA CLA CLENT INB JSB STUFF ISZ TEMP JMP CLENT * JMP #SCSM,I RETURN TO CALLER. SKP * * LOAD WORD FROM S.A.M, CROSS-LOAD IF DMS SYSTEM. * LODWD NOP LDA $OPSY OPERATING SYSTEM TYPE. RAR,SLA SKIP IF NON-DMS. JMP *+3 DMS. GO EXECUTE XLA. LDA B,I NON-DMS. PICK UP SAM WORD. JMP LODWD,I RETURN. XLA B,I CROSS-LOAD SAM WORD. JMP LODWD,I RETURN. SPC 5 * * SUBROUTINE TO STORE A WORD IN S.A.M. * STUFF NOP JSB $LIBR GO PRIVILEGED. NOP MOD1 JMP STUF2 NOP HERE IF DMS. XSA B,I STORE IN ALTERNATE MAP. RSS STUF2 STA B,I JSB $LIBX RETURN. DEF STUFF SKP * * CONSTANTS AND STORAGE. * B377 OCT 377 BIT14 OCT 40000 BIT15 OCT 100000 B2 OCT 2 B3 OCT 3 B4 OCT 4 B77 OCT 77 B1774 OCT 177400 D254 DEC 254 N3 DEC -3 POOSZ DEC 7 SIZE OF #POOL ENTRY. SEQNO OCT 0 CLONF NOP CFLAG NOP ADDR NOP SSID NOP NAMAD NOP CNTR NOP POOLA NOP PTR NOP TEMP NOP * BSS 0 SIZE OF #SCSM. * END