ASMB,R,Q,C
      HED <#PUTD> DS "PUT" SUBROUTINE * (C) HEWLETT-PACKARD CO. 1980* 
      NAM #PUTD,7 91750-1X211 REV 2013 800110 ALL 
* 
******************************************************************
*  * (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.       *
******************************************************************
* 
* 
      ENT #PUTD 
      SPC 1 
      EXT .ENTR,$LIBR,$LIBX 
      EXT #SBFA,#SDAL 
      EXT $OPSY 
      EXT .MVW,.LDX 
* 
*    NAME:   #PUTD
*    SOURCE: 91750-18211
*    RELOC:  91750-1X211
*    PGMR:   DOUG W. TSUI   NOV. 1979 
* 
* 
* 
*  PURPOSE: 
*     #PUTD IS CALLED BY GRPM WHEN IT NEEDS TO MODIFY PART
*     OF THE DATA AREA IN DS MESSAGE.  IT IS SIMILIAR TO
*     #PUTR WHICH MODIFIES THE HEADER PORTION.
* 
*  ****WARNING****
*     #PUTD ASSUMES THE Z BUFFER (DS HEADER) OF CLASS I/O 
*     FOLLOWS IMMEDIATELY AFTER THE USER BUFFER (DS DATA).
*     IF THIS STRUCTURE SHOULD CHANGE IN THE FUTURE RTE 
*     STSTEM, #PUTD NEEDS TO CHANGE ALSO. 
* 
*  CALLING SEQUENCE:
*     JSB #PUTD 
*     DEF *+4 
*     DEF <OFFSET>    OFFSET INTO DATA AREA TO START WRITING ( >= 0)
*     DEF <OVERLAY DATA AREA>  DATA TO OVERLAY DS AREA IN SAM 
*     DEF <OVERLAY LENGTH>
*  <ERROR RETURN>      ATTEMPT MADE TO WRITE PAST END OF BUFFER 
*  <NORMAL RETURN>     (A) & (B) MEANINGLESS
* 
      SKP 
@OFST NOP           OFFSET
@DATA NOP           OVERLAY DATA
@LEN  NOP           OVERLAY LEN 
* 
#PUTD NOP 
      JSB .ENTR     GET PARAMETER ADDRESSES 
      DEF @OFST 
* 
NOP   JSB CONFG    CONFIGURE DMS/NON-DMS ('NOP' AFTER 1ST CALL) 
* 
      LDB @OFST,I   LOAD OFFSET 
      LDA #SDAL 
      SSB,RSS 
      CMA,INA,SZA,RSS 
      JMP #PUTD,I   IF NEGATIVE OFFSET OR NO BUF, ERR RETN
      ADA @OFST,I 
      SSA,RSS       PAST END OF BUFFER? 
      JMP #PUTD,I   ERR RETN
      LDA @LEN,I    GET DATA
      STA SSLEN     STORE AS MOVE LEN 
      LDB #SDAL 
      CMB,INB 
      ADB #SBFA     FIND DATA AREA ADDR 
      ADB @OFST,I   ADD OFFSET
      LDA @DATA     OVERLAY ADDRESS 
      JSB STWS      OVERLAY SAM WORDS 
      ISZ #PUTD     ADJUST RETURN 
      JMP #PUTD,I 
      SKP 
* 
*  CONFIGURE THE SYSTEM ENVIRONMENT 
* 
CONFG NOP 
      CLB 
      STB NOP 
      LDA $OPSY 
      RAR,SLA 
      STB SSMOD 
      JMP CONFG,I 
*** 
* 
*  STWS MOVES WORDS FROM LOCAL BUFFER TO SAM BUFFER 
* 
*  CALLING SEQUENCE:
* 
*     <A> ==> LOCAL BUFFER
*     <B> ==> SAM BUFFER
* 
STWS  NOP 
      JSB $LIBR 
       NOP
SSMOD JMP SSMVW 
      JSB .LDX
       DEF SSLEN
      MWI 
      JMP SSJSB 
SSMVW JSB .MVW
       DEF SSLEN
      NOP 
SSJSB JSB $LIBX 
       DEF STWS 
* 
SSLEN DEC 2         2 WORD MOVE 
* 
*** 
      END 
                                                                                            