ASMB,R,Q,C
      HED DMESS 91750-1X075 REV 2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM DMESS,7 91750-1X075 REV.2013 800414 
      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 2 
      ENT DMESS 
* 
      EXT #MAST,#RQB,.ENTR,.MVW,#NODE 
* 
RQB   EQU #RQB
* 
* NAME:   DMESS 
* SOURCE: 91750-18075 
* RELOC:  PART OF 91750-12002 
* PGMR:   JIM HARTSELL, ET AL 
* 
* 
*     DMESS IS A UTILITY SUBROUTINE WHICH IS USED TO SEND OPERATOR
*     COMMANDS TO A REMOTE CPU. 
* 
*     CALLING SEQUENCE: 
* 
*        JSB DMESS
*        DEF *+4
*        DEF <DESTINATION NODE> 
*        DEF <BUFFER ADDRESS> 
*        DEF <BUFFER LENGTH> (IN + BYTES) 
*        <RETURN POINT> 
* 
*     ON RETURN, THE REGISTERS HAVE THE FOLLOWING MEANING:
* 
*        <A> = 0   NO RESPONSE FROM REMOTE
*            < 0   NEGATIVE OF NUMBER OF BYTES IN RESPONSE
*        <B> = -1  INDICATES AN ERROR 
* 
      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 
* 
NODE  NOP           DESTINATION 
BUFAA NOP           MESSAGE BUFFER
BUFLA NOP           MESSAGE LENGTH
DMESS NOP           START OF ROUTINE
      JSB .ENTR 
      DEF NODE      GET PRAMS 
* 
      LDB RQB+#CML  BLOCK "XX" COMMANDS 
      CPB D2          (USED FOR REMOTE
      RSS             SESSION LOG-ON/OFF).
      JMP DMES1 
      LDB RQB+#CMS
      CLA 
      CPB "XX"
      JMP EXIT
* 
DMES1 CLA           INITIALIZE MESSAGE BUFFER 
      STA RQB+#EC1    ERROR VALUES. 
      STA RQB+#EC2
      STA RQB+#ENO
* 
      LDA D7        REMOTE - GET STREAM TYPE
      STA RQB+#STR  AND PUT IT INTO REQUEST 
      LDA BUFLA,I   GET REQUEST LENGTH
      STA RQB+#CML  SAVE IN REQUEST 
      ADA DM41
      SSA,RSS       CHECK FOR ILLEGAL MESSAGE LENGTH
      JMP SZERR     TOO LONG
      LDA RQB+#CML
      SSA           NEGATIVE ?
      JMP SZERR     YES, ILLEGAL
      CLB           NO ERROR INDICATION FOR IMMEDIATE RETURN
      SZA,RSS       NOTHING ? 
      JMP DMESS,I   IMMEDIATE RETURN
      CLE,ERA       TRANSFORM INTO NUMBER 
      SEZ             OF WORDS
      INA               TO COMPUTE REQUEST LENGTH 
      STA LNG1      SAVE FOR REQUEST MOVE 
      ADA L#CML     ADD STANDARD REQ LENGTH 
      STA LEN 
      LDA BUFAA     GET BUFFER ADDRESS
      LDB MESSA     GET DESTINATION ADDRESS 
      JSB .MVW      MOVE STRING INTO REQUEST
      DEF LNG1
      NOP 
* 
      LDA NODE,I    GET DESTINATION 
      STA RQB+#DST  SET IN REQUEST
* 
      JSB #MAST     WRITE REQUEST TO REMOTE 
      DEF *+7 
      DEF BIT15      CONTROL WORD 
      DEF LEN 
      DEF D0
      DEF D0        NO DATA ASSOCIATED
      DEF D0        NO DATA ASSOCIATED
      DEF C#OLW     MAX REPLY LENGTH
* 
      JMP MSERR     ERROR RETURN POINT
      CLB           NO ERROR INDICATION 
      LDA RQB+#RLN  ANY RETURN MESSAGE? 
      SZA,RSS 
      JMP DMESS,I   NO RETURN MESSAGE 
      LDA MESSB     GET ADDRESS OF MESSAGE TO BE RETURNED 
      LDB BUFAA     GET ADDRESS OF USER'S BUFFER. 
      JSB .MVW      MOVE THE REPLY TO THE USER'S BUFFER 
      DEF RQB+#RLN
      NOP 
      LDA RQB+#RLN  GET LENGTH OF MESSAGE 
      CLE,ELA       MAKE THAT # OF BYTES
      CMA,INA       NEGATE
EXIT  CLB 
      JMP DMESS,I   AND RETURN
      SPC 2 
SZERR DLD "DS03     ILLEGAL COMMAND LENGTH. 
      DST RQB+#EC1  STORE ASCII ERROR CODE
      LDA #NODE       IN MESSAGE BUFFER 
      IOR BIT15       FOR "DSERR".
      STA RQB+#ENO
      LDA "DS03     RESTORE (A).
* 
MSERR DST BUFAA,I   SAVE ERROR CODES FOR USER'S ANALYSIS. 
      LDA D4        RETURN WITH <A>= -4, AND <B>= -1, 
      CMA,INA        TO INDICATE 4-BYTE ERROR-CODE MESSAGE. 
* 
      CCB           SET B TO -1 
      JMP DMESS,I   AND RETURN
      SPC 2 
* 
MESSA DEF RQB+#CMS
MESSB DEF RQB+#MSG
C#OLW ABS #OLW
L#CML ABS #CML+1
DM41  DEC -41 
D0    DEC 0 
D2    DEC 2 
D7    DEC 7 
D4    DEC 4 
"XX"  ASC 1,XX
"DS03 ASC 2,DS03
LNG1  NOP 
LEN   NOP 
BIT15 OCT 100000
* 
      END 
                                                      