ASMB,R,Q,C
      HED #UPSM 91750-1X038 REV 2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM #UPSM,7 91750-1X038 REV.2013 800324 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 #UPSM 
* 
      EXT XLUEX,$OPSY,$LIBR,$LIBX,#POOL 
      EXT #BREJ,#NRVS,#GRPM,#OTCV,#LEVL,#NODE,#MHCT 
* 
      SUP 
* 
* NAME:   #UPSM 
* SOURCE: 91750-18038 
* RELOC:  PART OF 91750-12014, -12015 
* PGMR:   JIM HARTSELL
* 
* SUBROUTINE TO PERFORM REMOTE HP1000 SESSION CLEANUP FOR UPLIN.
* 
*  CALLING SEQUENCES: 
* 
*     TO LOG OFF AN ABANDONED REMOTE HP 1000 SESSION: 
* 
*        (A) = ADDR OF PNL ENTRY
*        JSB #UPSM
* 
* 
*     BUMP "IDLE TIME" TIMER ON ALL ACTIVE #POOL ENTRIES: 
* 
*        CLA
*        JSB #UPSM
      SPC 5 
*********************************************************************** 
*                                                                     * 
*                  * * *   N O T E  ! !   * * *                       * 
*                                                                     * 
*                                                                     * 
*     THIS MODULE BUILDS A LEVEL 1 REQUEST AND WRITES IT DIRECTLY     * 
*     TO THE DRIVER (ON GRPM'S CLASS VIA XLUEX CALL).                 * 
*                                                                     * 
*********************************************************************** 
      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 
* 
#UPSM NOP           ENTRY.
* 
      SZA,RSS       CHECK TYPE OF CALL. 
      JMP CLOCK     GO BUMP #POOL TIMERS. 
* 
* PERFORM A NON-DLGOF NO-REPLY LOG-OFF OF A REMOTE HP 1000 SESSION
* THAT HAS BEEN ABANDONED DUE TO THE MASTER PROGRAM TERMINATING WITHOUT 
* LOGGING OFF OR BEING PREMATURELY ABORTED.  SIMILAR ROUTINE IN #MSSM 
* AND #DISM, BUT REQUEST IS BUILT FROM PNL ENTRY INFO.
* 
*   ON ENTRY, (A) = ADDRESS OF PNL ENTRY
* 
      STA B 
      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
      ADB B2        POINT TO 3RD WORD OF PNL ENTRY. 
      JSB LODWD     (CROSS) LOAD DEST NODE NUMBER.
      STA LGF+#DST  STORE IN LOG-OFF REQUEST. 
      LDA #NODE 
      STA LGF+#SRC  STORE SOURCE 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 4TH WORD OF PNL ENTRY. 
      JSB LODWD     (CROSS) LOAD SOURCE SESSION ID. 
      AND B377
      ALF,ALF 
      STA LGF+#SID  (DEST SID ZERO.)
      ADB B2        POINT TO 6TH WORD OF PNL ENTRY. 
      JSB LODWD     (CROSS) LOAD DEST. SESSION ID.
      AND B377
      STA LGF+#LNL  STORE SESSION ID TO BE LOGGED OFF.
* 
      SZA           IF NO REMOTE SESSION, 
      CPA D254
      JMP #UPSM,I     EXIT NOW. 
      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 #NRVS     SEARCH NRV (LU RETURNED IN (A)).
      DEF *+4 
      DEF LGF+#DST  NODE # FOR SEARCH.
      DEF TEMP      DUMMY.
      DEF UPLVL     UPGRADE LEVEL OF DEST. NODE.
      JMP #UPSM,I   ERROR.  NODE NOT IN NRV.
* 
      IOR BIT15     BYPASS SESSION SST. 
      STA LU        SAVE COMMUNICATIONS LINK LU.
      LDB #GRPM     GRPM'S CLASS NUMBER.
      STB CLASS 
* 
      LDA #LEVL     IS LOCAL UPGRADE LEVEL
      CMA,INA         HIGHER THAN 
      ADA UPLVL       THAT OF DEST. NODE? 
      SSA,RSS 
      JMP WRITE     NO. NO CONVERSION NEEDED. 
* 
      LDA #OTCV     YES. SEND TO MESSAGE CONVERTER. 
      STA CLASS 
      CLA 
      STA LU
* 
WRITE LDA L#LNL     GET LENGTH OF REQUEST.
      ADA C#LSZ     BUMP FOR LOCAL BUFFER.
      STA LEN 
      CCB 
      ADB @RQB
      ADB A         (B) -> LAST WORD OF REQUEST.
      LDA B,I 
      IOR BIT8      SET "DS STATUS" BIT.
      STA B,I 
* 
      JSB XLUEX     DO CLASS WRITE/READ TO DEST. LU.
      DEF *+8 
      DEF CLS20     NO ABORT. 
      DEF LU        DEST. LU & CONTROL WORD.
      DEF TEMP      NO DATA.
      DEF B0
@RQB  DEF LGF       REQUEST BUFFER. 
      DEF LEN       REQUEST LENGTH. 
      DEF CLASS     I/O CLASS.
      NOP           IGNORE ERROR. 
* 
      JMP #UPSM,I   RETURN. 
* 
LGF   BSS #LNL+1    "NO-REPLY" LOGOFF REQ BUFFER. 
      BSS 2         "APPENDAGE" AREA. 
      SKP 
* 
* LOAD WORD FROM S.A.M., CROSS-LOAD IF DMS SYSTEM.
* 
LODWD NOP 
      LDA $OPSY     OPERATING SYSTEM TYPE.
      RAR,SLA 
      JMP *+3 
      LDA B,I       NON-DMS.
      JMP LODWD,I 
      XLA B,I       DMS.
      JMP LODWD,I 
      SPC 3 
* 
* SUBROUTINE TO STORE A WORD IN SAM.
* 
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 
      DEF STUFF 
      SKP 
* 
* BUMP TIMER ON ALL ACTIVE #POOL ENTRIES. 
* 
CLOCK CLA 
      LDB $OPSY     SET UP "STUFF" ROUTINE. 
      RBR,SLB       SKIP IF NON-DMS.
      STA MOD1      MODIFY FOR DMS. 
* 
      LDB #POOL     GET ADDR OF SID POOL. 
      SZB,RSS 
      JMP #UPSM,I   IGNORE IF ZERO. 
      JSB LODWD 
      STA TEMP      SAVE # POOL ENTRIES (NEG.)
      INB 
SCAN  STB POOLA     SAVE POOL ENTRY ADDRESS.
      JSB LODWD     GET WORD 1 OF NEXT ENTRY. 
      SSA,RSS       ENTRY IN USE? 
      JMP BUMP      NO. GO TO NEXT ONE. 
* 
      ADB B6        YES. POINT TO TIMER WORD. 
      JSB LODWD     GET TIMER WORD. 
      CPA MAX       IS IT 32767?
      JMP BUMP      YES. LEAVE IT ALONE.
      INA           NO. ADD 1 (REPRESENTS ABOUT 5 SEC.).
      JSB STUFF     STORE BACK INTO #POOL ENTRY.
* 
BUMP  LDB POOLA     ADVANCE TO NEXT #POOL ENTRY.
      ADB POOSZ 
      ISZ TEMP      BUMP LOOP COUNT.
      JMP SCAN      LOOP TILL DONE. 
* 
      JMP #UPSM,I   RETURN TO CALLER (UPLIN). 
      SKP 
* 
* CONSTANTS AND STORAGE.
* 
B0    OCT 0 
B2    OCT 2 
B6    OCT 6 
B7    OCT 7 
BIT8  OCT 400 
BIT12 OCT 10000 
BIT15 OCT 100000
B377  OCT 377 
MAX   OCT 77777 
D254  DEC 254 
N2    DEC -2
CLS20 OCT 100024
"XX"  ASC 1,XX
POOLA NOP 
POOSZ DEC 7         SIZE OF #POOL ENTRY.
TEMP  NOP 
UPLVL NOP 
LU    NOP 
      OCT 10100     (LU+1) "Z" BIT & "WRITE". 
CLASS NOP 
LEN   NOP 
L#LNL ABS #LNL+1
C#LSZ ABS #LSZ
* 
      BSS 0         SIZE OF #UPSM.
* 
      END 
                                                                                                                                                