*DECK C$EC2AN 
          IDENT  C$EC2AN
          TITLE  CBEC2AN - MOVE CHARS FROM ECS TO CORE
  
          MACHINE  ANY,I
          COMMENT  MOVE CHARS FROM ECS TO CORE
          SST 
          B1=1
 C.MOVE   SPACE  4
**        CBEC2AN - MOVE CHARS FROM ECS TO CORE 
* 
*         CALLING SEQUENCE- 
*                RJ   C.EC2AN 
* 
*         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- 
  
          ENTRY  C.EC2AN
 C.EC2AN  DATA   0
  
*      IF B6>9 WE NEED TO CALCULATE THE BCP AND FWA OF THE SOURCE 
  
          SB2    10 
          SX0    314632B     (1/10)*2**20 
          LT     B6,B2,EC2AN200 
          SX3    B6          N = CHAR OFFSET
          DX4    X0*X3       (N/10)*2**20 
          AX4    20          N/10 
          BX6    X4 
          IX5    X4+X4       2*(N/10) 
          LX6    3           8*(N/10) 
          IX6    X6+X5       10*(N/10)
          IX3    X3-X6       N-10*(N/10)
          SB6    X3          BCP
          SB5    B5+X4       FWA
  
*      CALCULATE NUMBER OF WORDS OF ECS TO READ (@100)
  
 EC2AN200 BSS    0
          SX5    B6+B7       BS+SS
          SX4    100
          SX6    X5+9        BS+SS+9
          DX5    X0*X6       (BS+SS+9)*[(1/10)*2**20] 
          AX5    20          (BS+SS+9)/10 = NO. WORDS TO READ 
          IX6    X4-X5
          NG     X6,EC2AN300
  
*      LESS THAN 100 WORDS TO READ- THIS IS THE EASY CASE 
  
 EC2AN250 BSS    0
          SB2    X5          NO. WORDS TO READ
  
*      READ FROM ECS TO TEMP BUFFER 
  
          SA0    =XC.ECSBF
          SX0    B5 
          RE     B2 
          EQ     ERROR       JIF ECS TRANSFER ERROR 
  
*      NOW WE USE C.MOVE TO MOVE THE CHARS TO THE RECEIVING FIELD 
  
          SB5    =XC.ECSBF
          RJ     =XC.MOVE 
          EQ     C.EC2AN     DONE 
  
*      SOURCE FIELD IS GREATER THAN 100 WORDS.  SINCE WE CAN ONLY READ
*      100 WORDS AT A TIME WE HAVE TO LOOP
  
 EC2AN300 BSS    0
  
*      IF RECEIVING FIELD IS JUSTIFIED (OR THERE IS NO BLANK FILL) WE 
*      CAN CALL C.MOVE THE FIRST TIME TO DO THE PADDING 
*      IF RECEIVING FIELD IS NOT JUSTIFIED WE SAVE COUNT OF SPACES TO 
*      PAD UNTIL LAST CALL TO C.MOVE
  
          MX7    0           ASSUME JUSTIFICATION 
          PL     X2,EC2AN320 IF JUSTIFICATION OR NO PADDING 
          BX7    X2 
          MX2    0           NO BLANK PADDING FOR NOW 
 EC2AN320 BSS    0
          SA7    SAVX2       SAVE NO. OF BLANKS TO APPEND 
  
*      READ IN FIRST 100 WORDS
  
 EC2AN350 BSS    0
          SA0    =XC.ECSBF
          SX0    B5 
          RE     100
          EQ     ERROR       JIF ECS TRANSFER ERROR 
          SB5    B5+100      UPDATE FWA 
          SX7    B5 
          SA7    SAVFWA      SAVE FWA OF SOURCE AROUND C.MOVE CALL
  
*      CALL C.MOVE TO MOVE THE CHARS TO THE RECEIVING FIELD (AND DO 
*      ANY PADDING NECESSARY) 
  
          SB2    1000 
          SX7    B7 
          SB7    B2-B6       NO. OF. CHARS IN BUFFER
          SX6    B7 
          IX7    X7-X6
          SA7    SAVECT      NO. CHARS LEFT TO MOVE 
          SB5    =XC.ECSBF
          RJ     =XC.MOVE 
  
*      CALCULATE NO. WORDS LEFT TO MOVE 
  
          SA5    SAVECT      NO. CHARS LEFT TO MOVE 
          SX4    1000 
          SB7    X5 
          IX6    X4-X5
          MX2    0           NO. OF BLANKS TO PAD 
          SB6    B0          BCP OF SOURCE
          SA3    SAVFWA 
          SB5    X3          RESTORE FWA OF SOURCE
          NG     X6,EC2AN350 IF > 1000 CHARS LEFT 
          SX2    314632B           (1/10)*2**20 
          SX5    X5+9              SS+9 
          DX5    X5*X2             (BS+9)*[(1/10)*2**20]
          AX5    20                (SS+9)/10 = NO. WORDS TO READ
          SA2    SAVX2       NO. OF BLANKS TO PAD 
          EQ     EC2AN250 
  
*      ECS TRANSFER ERROR - PUT OUT MESSAGE AND ABORT 
  
 ERROR    BSS    0
          SX1    #ECSERR
          MX2    0
          SA3    C.EC2AN
          AX3    30 
          SX6    B1 
          IX3    X3-X6
          RJ     =XC.MSG
          EJECT 
**        C.ECARF - MOVE CHARACTERS FROM ECS TO CORE 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.EC2AN
          ENTRY  C.ECARF
 C.ECARF  DATA   0
          NZ     X0,ECARF20  JUSTIFIED
          SB7    X1 
          IX3    X1-X2
          NG     X3,ECARF30 
          SB7    X2 
          MX2    0
 ECARF10  SA1    C.ECARF
          BX7    X1 
          SA7    C.EC2AN
          EQ     C.EC2AN+1
          SPACE  3
 ECARF20  IX3    X2-X1
          SB7    X1 
          PL     X3,ECARF30 
          BX3    -X3
          SB6    B6+X3
          SB7    X2 
          MX2    0
          EQ     ECARF10
 ECARF30  BX2    X3 
          EQ     ECARF10
 SAVX2    DATA   0
 SAVFWA   DATA   0
 SAVECT   DATA   0
          END 
