ASMB,R,Q,C
      HED OPERM 91750-16143 REV 2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM OPERM,19,30 91750-16143 REV.2013 800227 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 HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 1 
      ENT OPERM 
      EXT MESSS,#SLAV,#GET,#RSAX
      EXT #NODE,#RPB,#ATCH,DTACH
RQB   EQU #RPB
      SUP 
* 
* NAME:   OPERM 
* SOURCE: 91750-18143 
* RELOC:  91750-16143 
* PGMR:   JIM HARTSELL, ET AL 
* 
* MODIFIED BY JDH FOR DS REQUEST EQUATED OFFSETS 790220 
* MODIFIED BY GAB FOR 91750 PRODUCT 790604
* MODIFIED BY JDH FOR REMOTE SESSION 790822 
* 
*     OPERM IS THE DS/1000 SLAVE MONITOR WHICH RECEIVES OPERATOR REQUESTS 
*     INITIATED BY A REMOTE CPU. THIS MONITOR OPERATES ON STREAM 7. 
* 
      SKP 
* GLBLK-START 
* 
******************************************************************
*                                                                *
*     G L O B A L   B L O C K               REV XXXX 790531      *
*                                                                *
*     GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY:      *
*                                                                *
*         REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST        *
*         GET,   #SLAV, RQCNV, RPCNV, GRPM,  LSTEN, PTOPM        *
*         EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3        *
*                                                                *
******************************************************************
* 
***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!***
#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 XXXX 790531       *
*                                                                *
*      OFFSETS INTO DS/1000 OPREQ MESSAGE BUFFERS, USED BY:      *
*                                                                *
*                   DMESS, OPERM, RQCNV, RPCNV                   *
*                                                                *
******************************************************************
* 
* 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 
OPERM LDA B,I       GET INPUT PARAMETER 
      STA CLSN      SAVE CLASS NUMBER 
      JSB DTACH     DETACH IN CASE DINIT
      DEF *+1        WAS RUN UNDER SESSION
* 
OPER1 JSB #GET      WAIT FOR REQUEST. 
      DEF *+6 
      DEF CLSN      CLASS # 
      DEF RQB       REQUEST BUFFER
      DEF C#OLW     MAX LENGTH
      DEF TEMP      NO DATA.
      DEF B0
      JMP OPER1     IGNORE ERROR
* 
      CLA           CLEAR ERROR LOCATIONS.
      CLB 
      DST RQB+#EC1
      LDA #NODE     INITIALIZE FOR LOCAL NODE #.
      STA RQB+#ENO
      LDA C#MHD     INITIALIZE LEN PARAM. 
      STA LEN 
* 
      LDA RQB+#CML  GET LENGTH
      SZA,RSS       IF ZERO...SEND BACK ZERO TO THEM
      JMP DONE
* 
      CPA B2        IF COMMAND = "XX" 
      RSS 
      JMP GTSES 
      LDA RQB+#CMS    I.E. LOGON/OFF TO NON-SESSION NODE, 
      CPA "XX"
      RSS 
      JMP GTSES 
      LDA RQB+#LGC    (EXCEPT SPECIAL UPLIN LOG-OFF)
      CPA N1      
      JMP RLEAS       (IN WHICH CASE IGNORE REQUEST)
      SZA,RSS         IF LOG-OFF, REPLY WITH DEST SID = 0,
      JMP DONE        ELSE
      LDA "04"
      JMP RSERR       REPLY WITH "S.M. NOT INSTALLED".
* 
RLEAS JSB #RSAX     RELEASE TCB FOR IGNORED 
      DEF *+4         NO-REPLY UPLIN
      DEF B7          LOG-OFF REQUEST.
      DEF RQB+#SEQ
      DEF RQB+#STR
* 
      JMP OPER1     GO WAIT FOR ANOTHER REQUEST.
* 
GTSES LDA RQB+#SID  GET SESSION ID WORD FROM REQ. 
      AND B377      ISOLATE DEST. SESSION ID (IF ANY).
      STA TEMP      SAVE SESSION ID FOR CALL
* 
      JSB #ATCH     ATTACH TO THE SESSION CONTROL BLOCK.
      DEF *+2         (IF ANY)
      DEF TEMP
* 
      INA,SZA       CHECK STATUS. 
      JMP XCUTE     SUCCESSFUL ATTACH.
* 
      LDA "01"      "SCB NOT FOUND".
RSERR STA RQB+#EC2  STORE ERROR TYPE. 
      LDA "RS"
      STA RQB+#EC1
      LDA RQB+#ENO  SET "ASCII" BIT.
      IOR BIT15 
      STA RQB+#ENO
      CLA 
      JMP DONE      GO SEND REPLY FOR ERROR.
* 
XCUTE JSB MESSS     CALL SYSTEM MSG PROCESSOR WITH MESSAGE
      DEF *+3 
      DEF RQB+#CMS  THE REPLY WILL COME IN THE SAME AREA
      DEF RQB+#CML
* 
      CMA,INA       MAKE SYSTEM REPLY LENGTH POSITIVE BYTES 
      CLE,ERA       MAKE THIS POSITIVE WORDS
      SEZ 
      INA 
DONE  STA RQB+#RLN SAVE LENGTH IN WORDS INTO REPLY
      ADA L#MSG     ADD STD LENGTH OF PARMB & LENGTH WORD 
      STA LEN       SAVE AS REPLY LENGTH
* 
      JSB DTACH     DETACH FROM POSSIBLE SESSION CNTRL BLK
      DEF *+1 
* 
      LDA RQB+#STR  GET STREAM TYPE 
      IOR BIT14     SET IN FOR REPLY
      STA RQB+#STR  SAVE AS REPLY STREAM
* 
      JSB #SLAV     SEND REPLY
      DEF *+4 
      DEF LEN 
      DEF B0
      DEF B0
      NOP           IGNORE THE ERROR RETURN 
* 
      JMP OPER1     WAIT FOR ANOTHER REQUEST
* 
B     EQU 1 
B0    OCT 0 
B2    OCT 2 
B7    OCT 7 
N1    DEC -1
B377  OCT 377 
BIT14 OCT 40000 
BIT15 OCT 100000
"01"  ASC 1,01
"04"  ASC 1,04
"RS"  ASC 1,RS
"XX"  ASC 1,XX
TEMP  NOP 
CLSN  NOP 
C#OLW ABS #OLW
C#MHD ABS #MHD
L#MSG ABS #MSG
LEN   NOP 
* 
      END OPERM 
                                                                                                                                                                                                                                                