ASMB,L,R,C
      HED DMESS 91740-16033 REV 1740 * (C) HEWLETT-PACKARD CO. 1977 
      NAM DMESS,7 91740-16033 REV 1740 771003 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  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 MESSS,#NODE 
      EXT D65MS,.ENTR 
* 
* 
* DMESS 
* SOURCE: 91740-18033 
* BINARY: 91740-16033 
* PRGMR: BOB SHATZER
* DATE: 09 DEC 75 
* 
* MODIFIED BY: C.C.H. 02-16-76
* MODIFIED BY: J.P.B. JUNE 1976 
* MODIFIED BY: C.H.W. FEB. 1977 
* 
*     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 
* 
* 
NODE  NOP           DESTINATION 
BUFAA NOP           MESSAGE BUFFER
BUFLA NOP           MESSAGE LENGTH
DMESS NOP           START OF ROUTINE
      JSB .ENTR 
      DEF NODE      GET PRAMS 
* 
      LDA D7        REMOTE - GET STREAM TYPE
      STA PARMB     AND PUT IT INTO PARMB 
      LDA BUFLA,I   GET REQUEST LENGTH
      STA LNGH      SAVE IN PARMB 
      ADA DM41
      SSA,RSS       CHECK FOR ILLEGAL MESSAGE LENGTH
      JMP SZERR     TOO LONG
      LDA LNGH
      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 D5        ADD STANDARD PARMB LENGTH 
      CPA D6        LESS THAN MIN ? 
      INA           YES 
      STA LEN 
      LDA BUFAA     GET BUFFER ADDRESS
      LDB MESSA     GET DESTINATION ADDRESS 
      MVW LNG1      MOVE REQUEST INTO PARMB 
* 
      LDA NODE,I    GET DESTINATION 
      STA PARMB+3   SET IN PARMB
* 
      CPA DM1       LOCAL ? 
      JMP LOCAL     YUP 
      CPA #NODE     FOR US ?
      JMP LOCAL     YES 
* 
      JSB D65MS     WRITE REQUEST TO REMOTE 
      DEF *+8 
      DEF CONWD      CONTROL WORD 
      DEF PARMB 
      DEF LEN 
      DEF D0
      DEF D0        NO DATA ASSOCIATED
      DEF D0        NO DATA ASSOCIATED
      DEF D27       MAX REPLY LENGTH
* 
      JMP MSERR     ERROR RETURN POINT
      CLB           NO ERROR INDICATION 
      LDA PARMB+7   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. 
      MVW PARMB+7   MOVE THE REPLY TO THE USER'S BUFFER 
      LDA PARMB+7   GET LENGTH OF MESSAGE 
      CLE,ELA       MAKE THAT # OF BYTES
      CMA,INA       NEGATE
      JMP DMESS,I   AND RETURN
      SPC 3 
LOCAL JSB MESSS 
      DEF *+3 
      DEF BUFAA,I   MESSAGE 
      DEF BUFLA,I   LENGTH
* 
      JMP DMESS,I   RETURN
      SPC 2 
* 
MSERR DST BUFAA,I   SAVE ERROR CODES FOR USER'S ANALYSIS. 
      LDA D4        RETURN WITH <A>= -4, AND <B>= -1, 
      CMA,INA,RSS    TO INDICATE 4-BYTE ERROR-CODE MESSAGE. 
* 
SZERR CLA           BUFFER SIZE ERROR - CLEAR A 
      CCB           AND SET B TO -1 
      JMP DMESS,I   AND RETURN
      SPC 2 
* 
B     EQU 1 
MESSA DEF PARMB+5 
MESSB DEF PARMB+8 
DM41  DEC -41 
D0    DEC 0 
D7    DEC 7 
D4    DEC 4 
D5    DEC 5 
D6    DEC 6 
D27   DEC 27
PARMB BSS 27
LNGH  EQU PARMB+4 
LNG1  NOP 
LEN   NOP 
CONWD OCT 100000
DM1   DEC -1
* 
      END 
                                                                                                                                                                        