ASMB
      NAM MOVCX,7 . 92903-16001 REV.1805  770512
* 
*     SOURCE 92903-18041
* 
      SPC 2 
**************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
* RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
* PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
* OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
**************************************************************
      SPC 2 
**********************************************************************
*                                                                    *
*                     THIS SUBROUTINE MOVES CHARACTERS FROM A        *
*    SOURCE BUFFER TO A DESTINATION BUFFER . SEVERAL FIELDS MAY BE   *
*    MOVED IN ONE CALL . THESE FIELDS MUST BE CONTIGUOUS IN THE      *
*    SOURCE BUFFER .                                                 *
*                                                                    *
*                      THE CALLING SEQUENCE IS :                     *
*                                                                    *
*               JSB MOVCX                                            *
*               DEF *+6                                              *
*               DEF BUFS      SOURCE BUFFER ADDRESS                  *
*               DEF SOF       SOURCE CHARACTER OFFSET ADDRESS (TABLE)*
*               DEF BUFD      DEST. BUFFER ADDRESS            (TABLE)*
*               DEF OFSET     OFFSET IN BYTE ADDED TO SOURCE OFFSET  *
*               DEF DBLEN     DEST. BUFFER LENGTH (IN BYTE)          *
*                             (USED ONLY FOR CONVERSION)             *
*                                                                    *
*    THREE TABLES ARE NECESSARY IN THE CALLING PROGRAM :             *
*                                                                    *
*     1)- TABLE OF THE OFFSETS IN THE SOURCE BUFFER : IF N FIELDS    *
*         ARE TO BE MOVED :                                          *
*               SOF DEC SOF1    SOURCE OFFSET OF FIELD # 1           *
*                   DEC SOF2    SOURCE OFFSET OF FIELD # 2           *
*                    .                                               *
*                    .                                               *
*                   DEC SOFN    SOURCE OFFSET OF FIELD # N           *
*                   DEC SOF(N+1)SOURCE OFFSET OF FIELD # N+1         *
*                   DEC -1      END OF TABLE                         *
*                                                                    *
*     2)- TABLE OF THE DESTINATIONS BUFFERS ADDRESSES  :             *
*              BUFD DEF BUFD1   DEST. BUFFER ADDRESS FOR FIELD # 1   *
*                   DEF BUFD2,I DEST. BUFFER ADDRESS FOR FIELD # 2   *
*                    .                                               *
*                    .                                               *
*                   DEF BUFDP,I DEST. BUFFER ADDRESS FOR FIELD # P   *
*                   DEF BUFDQ,I DEST. BUFFER ADDRESS FOR FIELD # Q   *
*                    .                                               *
*                    .                                               *
*                   DEF BUFDN   DEST. BUFFER ADDRESS FOR FIELD # N   *
*                                                                    *
*     3)- TABLE OF THE DESTINATIONS BUFFERS LENGTH :                 *
*         THIS TABLE IS USED ONLY WHEN INTEGER CONVERSION ARE        *
*         REQUIRED, THIS IS INDICATED BY AN INDIRECT ADDRESS IN      *
*         THE TABLE 2 : DESTINATIONS BUFFERS ADDRESSES.              *
*         THIS TABLE HAS NOT THE SAME LENGTH THAN TABLE 1 AND 2,     *
*         THIS TABLE SHOULD HAVE AN ENTRY ONLY WHEN IT IS NECESSARY. *
*                                                                    *
*             DBLEN DEC DBL2   DEST. BUFFER LENGTH FOR FIELD # 2     *
*                    .                                               *
*                   DEC DBLP   DEST. BUFFER LENGTH FOR FIELD # P     *
*                   DEC DBLQ   DEST. BUFFER LENGTH FOR FIELD # Q     *
*                                                                    *
**********************************************************************
* 
* 
      ENT MOVCX 
      EXT .ENTR,MOVCA,JASC
* 
* GET ADDRESSES OF CALLING PARAMETERS : 
* 
.P1   NOP           SOURCE BUFF.
.P2   NOP           SOURCE CHAR. OFFSET 
.P3   NOP           DEST. BUFFER
.P4   NOP           DEST. OFFSET
.P5   NOP           QUESTION #
MOVCX NOP           ENTRY POINT 
      JSB .ENTR 
      DEF .P1 
* 
*  COMPUTE # OF CHARACTERS TO MOVE FOR THIS FIELD 
* 
L1    LDA .P2       SOURCE CHAR. OFFSET ADDRESS 
      INA           INCREMENT ADDRESS 
      LDB A,I       GET NEXT SOURCE CHAR. OFFSET
      CPB .D1       -1 ? END OF TABLE ? 
      JMP MOVCX,I   YES RETURN !
      LDA .P2,I     NO COMPUTE
      CMA,INA       FIELD LENGTH
      ADB A         TO MOVE.
      STB LNGTH     STORE IT
* 
*  COMPUTE SOURCE CHAR. OFFSET .
* 
      LDB .P2,I     GET OFFSET
      ADB .P4,I     TRUE CHAR. OFFSET FOR THIS FIELD
      STB SOF       STORE IT
* 
*  CHECK FOR INTEGER CONVERSION 
* 
      LDA .P3,I     GET DEST. BUFF ADD
      STA DEBAD     SET IT TO MOVCA CALL
      SSA,RSS       INTEGER CONVERSION REQUIRED ? 
      JMP L4        NO, DO THE MOVE 
* 
      ELA,CLE,ERA   YES, CLEAR BIT15
      STA DEBA. 
      LDA LNGTH 
      ERA 
      DLD D1
      SEZ 
      SWP 
      DST BUF+1 
      CLA           INIT BINARY WORD TO NUL 
      STA TEMP
      JSB MOVCA     TRANSFERT BINARY DATA 
      DEF *+6       INTO A WORD TO DO 
      DEF .P1,I     THE CONVERSION
      DEF SOF 
      DEF TEMP      OUTPUT BUFFER (I HOPE THAT
      DEF BUF+1     SOURCE LENGTH IS NOT MORE THAN 2 CHAR.) 
      DEF BUF+2     FORCE LENGTH IN BYTE
* 
      JSB JASC      DO THE CONVERSION 
      DEF *+5 
      DEF TEMP
      DEF BUF       INTO A TEMPORARY BUFFER 
      DEF D1
      DEF D6
* 
      LDA BUF+2 
      LDB ASC.      SET SPACE IF IT IS ZERO 
      CPA ASC.0 
      STB BUF+2 
* 
      LDA .P5,I     GET DESTINATION LENGTH IN BYTE
      CMA,INA       COMPUTE OFSET IN THE TEMPORARY BUFFER 
      ADA D7
      STA TEMP
* 
      JSB MOVCA     MOVE BYTE IN DESTINATION BUFFER 
      DEF *+6 
      DEF BUF 
      DEF TEMP      OFFSET IN TEMPORARY BUFFER
DEBA. NOP           DESTINATION ADDR
      DEF D1
      DEF .P5,I     # OF CHAR. TO MOVE
      ISZ .P5       BUMP POINTER IN DEST. LEN TABLE 
      JMP L6
* 
*  MOVE CHARACTERS !
* 
L4    JSB MOVCA 
      DEF *+6 
      DEF .P1,I     SOURCE BUFF ADDRESS 
      DEF SOF       SOURCE OFFSET 
DEBAD NOP           DEST BUFF ADDRESS 
      DEF D1        DEST OFFSET 
      DEF LNGTH     # OF CHAR. TO MOVE
* 
*  INCREMENT ADDRESSES FOR NEXT MOVE
* 
L6    ISZ .P2       SOURCE OFFSET 
      ISZ .P3       DEST BUFFER 
      JMP L1         GO TO NEXT MOVE
* 
* DATA AND STORAGE
* 
A     EQU 0 
D1    DEC 1 
D2    DEC 2 
D6    DEC 6 
D7    DEC 7 
.D1   DEC -1
ASC.  ASC 1,
ASC.0 ASC 1, 0
LNGTH NOP           # OF CHARS TO MOVE
BUF   BSS 3 
TEMP  EQU DEBAD 
SOF   EQU BUF 
      END 
                                                                  