*DECK C$EC2EC 
          IDENT  C$EC2EC
          TITLE  C$EC2EC - MOVE CHARS FROM ECS TO ECS 
  
          MACHINE  ANY,I
          COMMENT  MOVE CHARS FROM ECS TO ECS 
          SST 
          B1=1
 C.MOVE   SPACE  4
**        CBEC2EC - MOVE CHARS FROM ECS TO ECS
* 
*         CALLING SEQUENCE
*                RJ   C.EC2EC 
* 
*         GIVEN-
*                B3= FWA OF RECEIVING FIELD 
*                B4= CHAR OFFSET OF RECEIVING FIELD 
*                B5= FWA OF SOURCE FIELD
*                B6= CHAR OFFSET OF SOURCE FIELD
*                B7= NUMBER OF CHARS TO STORE 
*                X2= NUMBER OF SPACES TO APPEND IF NEGATIVE 
*                  = NUMBER OF SPACES TO PREFIX IF POSITIVE 
* 
*         DOES- 
          SPACE  4
 CALCBCP  MACRO              COMPUTE BCP AND WORD OFFSET
          SX4    314632B     (1/10) * 2 ** 20 
          DX4    X4*X3
          AX4    20          WORD OFFSET
          BX6    X4 
          IX5    X4+X4
          LX6    3
          IX6    X6+X5       WO * 10
          IX3    X3-X6       BCP
          ENDM
          SPACE  2
          ENTRY  C.EC2EC
 C.EC2EC  DATA   0
  
*      IF B4>9 NEED TO CALCULATE BCP AND WORD OFFSET FOR RECEIVING FIELD
  
          SB2    10 
          LT     B4,B2,EC2EC100 
          SX3    B4 
          CALCBCP            COMPUTE BCP AND WORD OFFSET
          SB4    X3          NEW BCP
          SB3    B3+X4       NEW ADDRESS
  
*      IF B6>9 NEED TO CALCULATE BCP AND WORD OFFSET FOR SOURCE FIELD 
  
 EC2EC100 BSS    0
          LT     B6,B2,EC2EC150 
          SX3    B6 
          CALCBCP            COMPUTE BCP AND WORD OFFSET
          SB6    X3          NEW BCP
          SB5    B5+X4       NEW ADDRESS
  
*      IF BCP OF RECEIVING FIELD IS NOT ZERO  WE MUST SAVE THE
*      BACKGROUND CHARS IN THE FIRST WORD OF THE RECEIVING FIELD
  
 EC2EC150 BSS    0
          EQ     B4,EC2EC200
          SX0    B3 
          SA0    =XC.ECSBF
          RE     B1 
          EQ     ERROR       IF ECS TRANSFER ERROR
  
*      CALCULATE THE NUMBER OF WORDS SPANNED BY THE RECEIVING FIELD 
  
 EC2EC200 BSS    0
          BX6    X2          NO. OF BLANKS TO PAD (+ OR -)
          SX5    B7          SIZE OF SOURCE FIELD 
          AX6    59 
          BX4    X2-X6       NO. OF BLANKS TO PAD (+) 
          IX7    X4+X5       SIZE OF RECEIVING FIELD
          SA7    RECSIZE
          SX0    314632B     (1/10)*2**20 
          SX3    B4+X7       BR+SR
          SX4    100
          SX6    X3+9        (BR+SR)+9
          DX3    X0*X6       [(BR+SR)+9]*[(1/10)*2**20] 
          AX3    20          [(BR+SR)+9]*(1/10) 
          IX4    X4-X3
          NG     X4,EC2EC400
  
*      THIS IS THE EASY CASE- MOVE CAN BE DONE WITHOUT LOOPING
*      READ SOURCE FIELD INTO C.ECSBF+5 
  
          DX4    X0*X5
          AX4    20 
          SB2    X4+B1       NO. OF WORDS IN SOURCE FIELD 
          SA0    =XC.ECSBF+5
          SX0    B5 
          RE     B2 
          EQ     ERROR       IF ECS TRANSFER ERROR
  
*      NOW WE USE C.MOVE TO MOVE THE CHARS FROM C.ECSBF+5 TO C.ECSBF
*      AND DO ANY SHIFTING AND/OR PADDING NECESSARY 
  
          SX7    B3 
          SA7    SAVFWA 
          SB3    =XC.ECSBF   FWA RECEIVING FIELD
          SB5    =XC.ECSBF+5 FWA SOURCE 
          RJ     =XC.MOVE 
  
*      CALCULATE NUMBER OF WORDS IN RECEIVING FIELD 
  
          SB5    =XC.ECSBF
          SB5    B3-B5       NO. OF WORDS (IF B4=0) 
  
*      IF THE LAST WORD STORED INTO IS NOT FULL WE HAVE TO READ IN THE
*      LAST WORD OF THE RECEIVING FIELD TO GET THE BACKGROUND CHARS 
  
          SA5    SAVFWA      FWA RECEIVING FIELD
          EQ     B4,EC2EC300
  
          SB5    B5+B1       ADJUST NO. WORDS IN RECEIVING FIELD
  
*      CALCULATE LWA OF RECEIVING FIELD 
  
          SX6    B5-B1       NO. WORDS IN RECEIVING FIELD - 1 
          IX0    X5+X6       LWA OF RECEIVING FIELD 
  
*      READ LAST WORD OF RECEIVING FIELD INTO C.TEMP
  
          SA0    =XC.TEMP 
          RE     B1 
          EQ     ERROR       IF ECS TRANSFER ERROR
  
*      MERGE BACKGROUND CHARS WITH LAST WORD
  
          SA2    =XC.TEMP 
          SA1    =XC.MASK+B4
          BX2    -X1*X2      BACKGROUND CHARS 
          SA3    =XC.ECSBF+X6 
          BX3    X1*X3       MAKE HOLE FOR BACKGROUND CHARS 
          BX6    X2+X3
          SA6    A3 
  
*      WRITE FROM C.ECSBF TO RECEIVING FIELD
  
 EC2EC300 BSS    0
          SA0    =XC.ECSBF
          BX0    X5 
          WE     B5 
          EQ     ERROR       IF ECS TRANSFER ERROR
          EQ     C.EC2EC     DONE 
 EC2EC400 BSS    0
          EQ     C.EC2EC
  
*      PROCESS ECS TRANSFER ERROR 
  
 ERROR    BSS    0
          SX1    #ECSERR
          MX2    0
          SA3    C.EC2EC
          AX3    30 
          SX6    B1 
          IX3    X3-X6
          RJ     =XC.MSG     PUT MESSAGE IN DAYFILE AND ABORT 
          EJECT 
**        C.ECERF - MOVE CHARACTERS FROM ECS TO ECS WITH REFERENCE
*                   MODIFICATION
*         GIVEN 
*                B3 - FWA DESTINATION 
*                B4 - BCP DESTINATION 
*                B5 - FWA SOURCE
*                B6 - BCP SOURCE
*                X0 - JUSTIFIED FLAG
*                X1 - LENGTH SOURCE 
*                X2 - LENGTH DESTINATION
*         DOES - COMPUTES PARAMETERS FOR AND CALLS C.EC2EC
          ENTRY  C.ECERF
 C.ECERF  DATA   0
          NZ     X0,ECERF20  JUSTIFIED
          SB7    X1 
          IX3    X1-X2
          NG     X3,ECERF30 
          SB7    X2 
          MX2    0
 ECERF10  SA1    C.ECERF
          BX7    X1 
          SA7    C.EC2EC
          EQ     C.EC2EC+1
          SPACE  3
 ECERF20  IX3    X2-X1
          SB7    X1 
          PL     X3,ECERF30 
          BX3    -X3
          SB6    B6+X3
          SB7    X2 
          MX2    0
          EQ     ECERF10
 ECERF30  BX2    X3 
          EQ     ECERF10
  
 SAVFWA   DATA   0
 RECSIZE  DATA   0
          EQ     C.EC2EC
          END 
