ASMB,R,Q,C
      HED DMESG 91750-1X074 REV 2013 * (C) HEWLETT PACKARD CO. 1980 
      NAM DMESG,7 91750-1X074 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 DMESG 
      EXT DEXEC,#RQB,.ENTR,#NODE,CNUMD,.MVW 
* 
RQB   EQU #RQB
* 
* NAME:   DMESG 
* SOURCE: 91750-18074 
* RELOC:  PART OF 91750-12002 
* PGMR:   JIM HARTSELL, ET AL 
* 
* 
* TELLOP MESSAGE SUBROUTINE 
* 
* LIBRARY SUBROUTINE APPENDED TO RTE USER PROGRAM THAT SENDS
* MESSAGES TO THE SYSTEM CONSOLE AT THE GIVEN DESTINATION NODE. 
* 
*     CALLING SEQUENCE: 
*                   JSB DMESG 
*                   DEF *+4 
*                   DEF DESTINATION 
*                   DEF BUFFER
*                   DEF BUFFER LENGTH (MAX = +36 WORDS OR -72 BYTES)
*                    RETURN--A&B CONTAIN ASCII ERROR CODE IF ANY; 
*                            OTHERWISE A & B ARE BOTH ZERO. 
* 
      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 
      SUP 
A     EQU 0 
* 
* GET MESSAGE ADDRESS AND LENGTH. 
* 
DEST  NOP 
BUFAD NOP 
BUFL  NOP 
DMESG NOP 
      JSB .ENTR     GET PRAM ADDRESS
      DEF DEST
      LDB BUFL,I    GET LENGTH
      SSB           POSITIVE WORD COUNT?
      JMP DMES1     NO, TREAT AS BYTE COUNT 
      BLS           CONVERT LNGT IN WORDS TO
      CMB,INB,SZB,RSS  LNGT IN (-) BYTES
      JMP LENER     ERROR IF ZERO OR NOT PASSED 
DMES1 CLA 
      STA BUFL      INITIALIZE FOR NEXT TIME
      STB A 
      ADA N18       ADJUST ACTUAL BUFFER LENGTH 
      STA LNGT      SAVE FOR THE "DEXEC" CALL 
      ADA K90       NOW MAKE SURE ORIGINAL LNGT 
      SSA            WASN'T > 80 CHARACTERS 
      JMP LENER     IT WAS! ERROR 
      CMB,INB 
      INB           CONVERT TO WORD COUNT 
      BRS            FOR THE "MVW"
      STB MVLEN 
* 
* MOVE MESSAGE TO INTERNAL BUFFER.
* 
      LDA BUFAD     GET ORIGIN ADDRESS
      LDB DFOUT     GET DESTINATION ADDRESS 
      JSB .MVW      MOVE THE BUFFER 
      DEF MVLEN 
      NOP 
* 
      JSB CNUMD     CONVERT NODE NUMBER TO ASCII
      DEF *+3 
      DEF #NODE 
      DEF OUTBF+5 
* 
      LDA OUTBF+6 
      IOR "00"
      STA OUTBF+6 
      LDA OUTBF+7 
      IOR "00"
      STA OUTBF+7 
* 
* SEND THE MESSAGE WITH ID PREFIX.
* 
      JSB DEXEC 
      DEF *+6 
      DEF DEST,I
      DEF D2I       WRITE-NO ABORT
      DEF B1
      DEF OUTBF 
      DEF LNGT
* 
      JMP DMESG,I   RETURN TO CALLER WITH ERROR IN A & B. 
      CLA           NO ERROR--CLEAR 
      CLB            REGISTERS. 
      JMP DMESG,I   RETURN
      SPC 2 
LENER DLD DS03      STORE ASCII ERROR       
      DST RQB+#EC1    IN MESSAGE BUFFER 
      LDA #NODE       FOR POSSIBLE "DSERR" CALL.
      IOR BIT15 
      STA RQB+#ENO
      DLD DS03      RETURN WITH ASCII ERROR 
      JMP DMESG,I     CODE IN A & B REG.
* 
* 
* CONSTANTS AND WORKING STORAGE.
* 
MVLEN NOP 
LNGT  NOP 
B1    OCT 1 
D2I   OCT 100002
B3    OCT 3 
BIT15 OCT 100000
K90   DEC 90
N18   DEC -18 
DS03  ASC 2,DS03
"00"  ASC 1,00
DFOUT DEF OUTBF+9 
OUTBF ASC 9,(FROM NODE XXXXX):
      BSS 36
* 
SIZE  EQU * 
      END 
                                                                                                                                                                                                                                        