ASMB,R,L,C
      HED OPERM 91750-16142 REV.2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM OPERM,19,30 91750-16142 REV.2013 800418 L 
      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,CNOPT 
      ENT CAM.O,ECH,C.BUF 
      EXT EXEC,#SLAV,#GET,#GETR,#RSAX 
      EXT BL..,CN..,LA..,TM..,TO..,IT..,ON..,SY.. 
      EXT .MVW,PARSE,#NODE,#RPB 
      EXT #ST07,.ENTR 
* 
* NAME:   OPERL 
* SOURCE: 91750-18142 
* RELOC:  91750-16142 
* PGMR:   JERRY BELDEN
* DATE: 18 JUN 79 
* 
*     OPERM IS THE CCE MONITOR WHICH RECEIVES OPERATOR REQUESTS INIT- 
*     IATED 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 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 
OPERM LDA B,I       GET INPUT PARAMETER 
      STA CLSN      NO - NORMAL SCHEDULE - SAVE CLASS NUMBER
* 
OPER1 JSB #GETR     WAIT FOR REQUEST
      DEF *+4 
      DEF CLSN      CLASS # 
A.RQB DEF RQB       REQUEST BUFFER
      DEF C#OLW     MAX LENGTH
      JMP DON3      IGNORE THE COMMUNICATION ERROR
* 
      CLA           CLEAR 
      CLB            ERROR
      DST RQB+#EC1    LOCATIONS.
      STA RQB+#ENO
* 
      LDA RQB+#DST  IS THIS A LOCAL 
      INA,SZA         REQUEST FROM COMND? 
      JMP REMOT     NO, REAL DS 
      LDA CLSN      YES,
      AND CLMSK       DE-ALLOCATE 
      IOR BIT13         BUFFER
      STA TEMP
      JSB EXEC
      DEF *+5 
      DEF .21 
      DEF TEMP
      DEF RQB 
      DEF .0
      LDB RQB+#EHD  GET LIST LU 
      JMP OPER2 
* 
REMOT JSB #GET      DE-ALLOCATE BUFFER
      DEF *+6         AND LOG IF NEEDED 
      DEF CLSN
      DEF RQB 
      DEF C#OLW 
      DEF .0
      DEF .0
      JMP DON3      IF ERROR, TERMINATE 
      CLB           GET REMOTE FLAG 
* 
OPER2 STB LOCLU     SAVE LOCAL LU OR 0
      CLA 
      STA OUTFL     RESET OUTPUT FLAG 
* 
      LDA RQB+#CML  GET LENGTH
      SZA,RSS       IF ZERO...SEND BACK ZERO TO THEM
      JMP DONE
* 
      CPA .2        IF COMMAND = "XX",
      RSS 
      JMP PARS
      LDA RQB+#CMS    I.E. LOGON/OFF TO 
      CPA "XX"          NON-SESSION NODE, 
      RSS 
      JMP PARS
      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
      DLD "RS04       ELSE
      DST RQB+#EC1    REPLY WITH "S.M. NOT INSTALLED".
      LDA #NODE     SET ASCII BIT AND NODE NUMBER.
      IOR BIT15 
      STA RQB+#ENO
      JMP DONE      GO SEND REPLY FOR ERROR.
* 
RLEAS JSB #RSAX     RELEASE TCB FOR IGNORED 
      DEF *+4         NO-REPLY UPLIN
      DEF .7          LOG-OFF REQUEST.
      DEF RQB+#SEQ
      DEF RQB+#STR
* 
      JMP OPER1     GO WAIT FOR ANOTHER REQUEST.
      SKP 
* 
*     CODE FOR COMND INSERTED HERE
* 
PARS  ARS           CONVERT MESSAGE LENGTH (CHARS)
      STA ECH       TO WORD COUNT 
      JSB PARSE     USE SYSTEM'S PARSER 
      DEF *+4 
      DEF RQB+#CMS  INPUT BUFFER
      DEF RQB+#CML  CHARACTER COUNT 
      DEF MRSLT     PARSED PARAMETER BUFFER 
      CCA           SUBTRACT ONE FROM THE 
      ADA P.CNT     PARAMETER COUNT SINCE NOT PASSING 
      STA P.CNT     THE COMMAND AS A PARAMETER
* 
*  CHANGE PARAMETER TYPE 2 TO 3 
* 
      LDA N8        SET LOOP COUNTER
      STA CNT         TO 8
      LDA DMRLT     GET PARSE RESULT BUFFER ADDRESS 
PARLP LDB A,I       GET PARAMETER TYPE
      CPB .2        IS IT 2?
      INB           YES, INCREMENT IT TO 3
      STB A,I       STORE BACK INTO BUFFER
      ADA .4        INCREMENT TO NEXT PARAMETER 
      ISZ CNT       INCREMENT THE COUNT 
      JMP PARLP     GO DO NEXT PARAMETER
* 
      LDB DMRLT     GET ADDRESS OF THE FIRST PARAMETER
      INB           POINT TO ACTUAL PARAMETER 
      LDB B,I       GET PARAMETER 
      STB OPP       STORE AS STOP WORD IN COMMAND TABLE 
* 
*     GET COMMAND ADDRESS 
* 
      LDA C.TAB     GET COMMAND TABLE ADDRESS 
CMND? CPB A,I       IF COMMAND SAME AS IN TABLE 
      JMP CALL        THEN GO SET UP COMMAND ADDRESS (CAD.) 
      ADA .2        SKIP ADDRESS AND POINT TO NEXT COMMAND
      JMP CMND?     CHECK NEXT ENTRY IN TABLE 
* 
CALL  INA           GET POINTER TO COMMAND ADDRESS
      LDA A,I       THEN FETCH COMMAND ADDRESS
      STA CAD.      AND STORE 
      SKP 
* 
*     CALL ACTION ROUTINE 
* 
      CLA           CLEAR ERROR CODE
      STA ER          TO PASS TO ACTION ROUTINE 
      JSB CAD.,I    CALL ACTION ROUTINE 
      DEF CALR
      DEF P.CNT     PARAMETER COUNT 
      DEF P.RAM     PARAMETER LIST
      DEF ER        ERROR CODE
* 
CALR  LDA ER        DID THE ROUTINE PASS BACK 
      SZA             AN ERROR? 
      JMP ELOG      GO REPORT ERROR 
* 
DONE  LDA OUTFL     ANY OUTPUT ?
      SZA 
      JMP DON1      YES CONTINUE
      STA RQB+#RLN  NO, SO INDICATE 
DON1  LDB LOCLU     LOCAL ORIGINATION 
      SZB 
      JMP DON2      YES 
      LDA RQB+#RLN SAVE LENGTH IN WORDS INTO REPLY
      ADA L#RLN     ADD STANDARD LENGTH OF PARMB
      STA LEN       SAVE AS REPLY LENGTH
* 
      LDA RQB+#STR  GET STREAM TYPE 
      IOR BIT14     SET IN FOR REPLY
      STA RQB+#STR  SAVE AS REPLY STREAM
* 
      LDA A.RQB     MOVE REPLY
      LDB A#RPB       INTO #SLAV
      JSB .MVW
      DEF C#OLW 
      NOP 
* 
      JSB #SLAV     SEND REPLY
      DEF *+4 
      DEF LEN 
      DEF .0
      DEF .0
      NOP           IGNORE THE ERROR RETURN 
* 
      JMP OPER1     WAIT FOR ANOTHER REQUEST
      SKP 
* 
*     LOCAL ORIGINATOR - DO OUTPUT
* 
DON2  SZA,RSS       ANY OUTPUT ?
      JMP DON3      NO
      JSB EXEC      LOCAL, SO OUTPUT DIRECTLY 
      DEF *+5 
      DEF .2
      DEF LOCLU 
      DEF RQB+#MSG
      DEF RQB+#RLN  (+ WORDS) 
* 
*     NOTE THAT #ST07+1 CONTAINS A NON-ZERO # IF OPERM WAS
*     SCHEDULED BY UPLIN OR LSTEN. OTHERWISE, MUST TERMINATE
*     & DEALLOCATE CLASS. 
* 
DON3  LDA #ST07+1   CHECK FOR CLASS # 
      XOR CLSN      EQUAL TO THAT 
      AND CLMSK       OF DS 
      SZA,RSS 
      JMP OPER1     RUNNING UNDER DS, GO TO 'GET' 
* 
      JSB EXEC      TERMINATE, NO RESOURCES SAVED 
      DEF *+2 
      DEF .6
      SKP 
* 
*     COMMAND TABLE 
* 
C.TAB DEF *+1 
      ASC 1,BL
      DEF BL..
      ASC 1,CN
      DEF CN..
      ASC 1,LA
      DEF LA..
      ASC 1,TM
      DEF TM..
      ASC 1,TO
      DEF TO..
      ASC 1,IT
      DEF IT..
      ASC 1,ON
      DEF ON..
      ASC 1,EX
      DEF EX..
* 
OPP   NOP           END OF TABLE
      DEF SY..
      SKP 
* 
*     ERROR HANDLER 
* 
ELOG  LDB BLNK      SET DEFAULT TO POSITIVE 
      SSA           POSITIVE OR NEGATIVE? 
      LDB BSIGN     NEGATIVE, GET MINUS SIGN
      STB ESGN      SAVE ASCII SIGN 
      SSA           NEGATIVE? 
      CMA,INA       YES SET POSITIVE
      CLB           CLEAR B FOR DIVIDE
      DIV .10       DIVIDE BY 10. TWO DIGIT ERRORS ONLY 
      ADB B60       MAKE REMAINDER ASCII
      ADA B60       MAKE QUOTIENT ASCII 
      ALF,ALF       POSITION QUOTIENT TO UPPER HALF 
      IOR B         PUT IN SECOND DIGIT 
      STA ERCDE     PUT INTO ERROR MESSAGE
* 
      LDA AERBF     TRANSFER TO REPLY BUFFER
      LDB A#MSG     DESTINATION 
      JSB .MVW
      DEF .4
      NOP 
      LDA .4
      STA RQB+#RLN  SAVE LENGTH IN WORDS IN REPLY 
      ISZ OUTFL     INDICATE SOME OUTPUT
      JMP DONE
* 
ERBUF ASC 2,CMND
ESGN  NOP           SIGN
ERCDE NOP           ERROR CODE IN ASCII 
* 
BLNK  ASC 1,
BSIGN ASC 1, -
      SKP 
* 
*     CENTRAL OUTPUT ROUTINE - CALLED FROM ACTION ROUTINES IN 
*      PLACE OF EXEC 2.  OUTPUT TO REMOTE SITES GOES BACK IN
*      THE REPLY SO ONLY ONE LINE OF OUTPUT IS ALLOWED.  LAST 
*      CALL TO THIS SUBROUTINE DICTATES WHAT IS RETURNED. 
* 
OCODE NOP           EXEC CODE 
      NOP           OUTPUT LU 
OBUFF NOP           OUTPUT BUFFER 
OLENG NOP           OUTPUT LENGTH 
* 
CNOPT NOP           ENTRY POINT 
      JSB .ENTR 
      DEF OCODE 
      LDA OLENG,I   CHECK LENGTH SPECIFIER
      SSA,RSS 
      JMP CNOP1     IN WORDS
      CMA,INA       CONVERT BYTES TO WORDS
      CLE,ERA 
CNOP1 SZA,RSS       ANYTHING THERE ?
      JMP CNOP2     NO
      STA RQB+#RLN  SAVE BUFFER LENGTH
      ISZ OUTFL     INDICATE OUTPUT WAITING 
      LDA OBUFF     MOVE MESSAGE TO REPLY BUFFER
      LDB A#MSG 
      JSB .MVW
      DEF RQB+#RLN
      NOP 
CNOP2 JMP CNOPT,I 
      SKP 
* 
*     EXIT ACTION ROUTINE 
* 
EX..  NOP 
      JMP DONE
      SKP 
* 
*     CONSTANTS 
* 
.0    DEC 0 
.2    DEC 2 
.4    DEC 4 
.6    DEC 6 
.7    DEC 7 
.10   DEC 10
.21   DEC 21
N1    DEC -1
N8    DEC -8
N18   DEC -18 
N64   DEC -64 
B60   OCT 60
BIT13 OCT 20000 
BIT14 OCT 40000 
BIT15 OCT 100000
CLMSK OCT 17777 
"XX"  ASC 1,XX
"RS04 ASC 2,RS04
* 
DMRLT DEF MRSLT 
A#MSG DEF RQB+#MSG
A#RPB DEF #RPB
AERBF DEF ERBUF 
* 
A     EQU 0 
B     EQU 1 
      SPC 2 
* 
*     VARIABLES 
* 
RQB   BSS #OLW      LOCAL BUFFER FOR REQUEST/REPLY
C.BUF EQU RQB+#CMS
CAM.O NOP           LOG LU
* 
CAD.  NOP           COMMAND ADDRESS FORM C.TAB
MRSLT BSS 4         \  ORDERED   COMMAND PARAMETER
P.RAM BSS 28         >           PARAMETER LIST 
P.CNT NOP           /            PARAMETER COUNT
ECH   NOP           INPUT WORD COUNT
CNT   NOP           LOOP COUNTER
ER    NOP           ERROR CODE FOR ACTION ROUTINES
CLSN  NOP 
TEMP  NOP 
C#OLW ABS #OLW
L#RLN ABS #RLN+1    HEADER LEN + 1 FOR MSG LEN WORD 
LEN   NOP 
OUTFL NOP           OUTPUT PENDING FLAG 
LOCLU NOP           LU IF LOCAL ORIGIN OR 0 
* 
      END OPERM 
                        