ASMB,L,R,C
      HED DMESS 91700-16132 REV.A 760216 * (C) HEWLETT-PACKARD CO. 1976 
      NAM DMESS,7 91700-16132 REV.A 760216
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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 D65MS,MESSS,.ENTR 
* 
* 
* DMESS 
* SOURCE: 91700-18132 
* BINARY: 91700-16132 
* PRGMR: BOB SHATZER
* DATE: 09 DEC 75 
* 
* MODIFIED BY: C.C.H. 02-16-76
* 
*     DMESS IS A UTILITY SUBROUTINE WHICH IS USED TO SEND OPERATOR
*     COMMANDS TO A REMOTE CPU. 
* 
*     CALLING SEQUENCE: 
* 
*        JSB DMESS
*        DEF *+4
*        DEF <DESTINATION LU> 
*        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 ILLEGAL REQUEST LENGTH (>19 BYTES)
* 
* 
DLU   NOP           DESTINATION LU
BUFAA NOP           MESSAGE BUFFER
BUFLA NOP           MESSAGE LENGTH
DMESS NOP           START OF ROUTINE
      JSB .ENTR 
      DEF DLU       GET PRAMS 
      LDA DLU,I     GET REQUESTED LU
      CCE,SZA,RSS   IS IT LOCAL?
      JMP LOCAL     YES - SEND IT LOCALLY 
      RAL,ERA       SET SIGN-BIT FOR ERROR RETURN.
      STA DLU       SAVE LU# AND ERROR-FLAG, LOCALLY. 
      LDA D7        REMOTE - GET STREAM TYPE
      STA PARMB     AND PUT IT INTO PARMB 
      LDA BUFLA,I   GET REQUEST LENGTH
      STA LNGH      STORE IT INTO PARMB 
      STA BUFL1     AND SAVE IT FOR COUNTER 
      LDA BUFAA     GET BUFFER ADDRESS
      LDB MESSA     GET DESTINATION ADDRESS 
      JSB MOVE      MOVE BUFFER 
BUFL1 NOP           LENGTH GOES HERE
      SPC 1 
      JSB D65MS     WRITE REQUEST TO REMOTE 
      DEF *+7 
      DEF D2
      DEF DLU 
      DEF PARMB 
      DEF D35 
      DEF DUMMY 
      DEF DUMMY 
      JMP MSERR     ERROR RETURN POINT
      LDA LNGH      ANY RETURN MESSAGE? 
      SZA,RSS 
      JMP DMESS,I   NO RETURN MESSAGE 
      STA BUFL2     SAVE LENGTH AS POSITIVE BYTES.
      LDA MESSA     GET ADDRESS OF MESSAGE TO BE RETURNED 
      LDB BUFAA     GET ADDRESS OF USER'S BUFFER. 
      JSB MOVE      GO TRANSFER RESPONSE TO USER'S BUFFER.
BUFL2 NOP 
      LDA LNGH      GET LENGTH OF MESSAGE 
      CMA,INA 
      JMP DMESS,I   AND RETURN
      SPC 2 
LOCAL JSB MESSS     HERE IF LOCAL MESSAGE 
      DEF *+3 
      DEF BUFAA,I 
      DEF BUFLA,I 
      JMP DMESS,I   AND RETURN
* 
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 
* 
*     SUBROUTINE TO MOVE BUFFERS
*     CALLING SEQUENCE
*     JSB MOVE
*     DEC +# OF BYTES 
*     A REG=SOURCE ADDRESS
*     B REG=DESTINATION ADDRESS 
* 
MOVE  NOP 
      STA MOVEA     SAVE SOURCE ADDRESS 
      LDA MOVE,I    GET LENGTH
      SZA,RSS       IS LENGTH ZERO? 
      JMP SZERR     YES - BUFFER SIZE ERROR 
      ADA MXSIZ     ADD MAXIMUM BUFFER SIZE 
      SSA,RSS       DID IT OVERFLOW?
      JMP SZERR     YES - BUFFER SIZE ERROR 
      LDA MOVE,I    NO - GO MOVE DATA 
      CLE,ERA       CONVERT TO WORD LENGTH
      SEZ           ODD?
      INA           YES 
      CMA,INA       NEGATE FOR DOWN COUNT 
      STA MOVE,I    SAVE FOR DOWN COUNTER 
MOVE1 LDA MOVEA,I 
      STA B,I 
      INB 
      ISZ MOVEA 
      ISZ MOVE,I    DONE? 
      JMP MOVE1     NO...CONTINUE 
      ISZ MOVE
      JMP MOVE,I    AND RETURN
* 
B     EQU 1 
DUMMY NOP 
MOVEA NOP 
MXSIZ DEC -36 
MESSA DEF PARMB+6 
D7    DEC 7 
D2    DEC 2 
D4    DEC 4 
D35   DEC 35
PARMB BSS 35
LNGH  EQU PARMB+5 
* 
      END 
                                                                            