*DECK C$AN2EC 
          IDENT  C$AN2EC
          TITLE  CBAN2EC - MOVE CHARS FROM CORE TO ECS
  
          MACHINE  ANY,I
          COMMENT  MOVE CHARS FROM CORE TO ECS
          SST 
          B1=1
 C.MOVE   SPACE  4
**        CBAN2EC - MOVE CHARS FROM CORE TO ECS 
* 
*         CALLING SEQUENCE- 
*                RJ   C.AN2EC 
* 
*         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.AN2EC
 C.AN2EC  DATA   0
  
*      IF B4>9 WE MUST CALCULATE A BCP AND FWA FOR THE RECEIVING FIELD
  
          SX7    314632B     (1/10)*2**20 
          SB2    10 
          LT     B4,B2,AN2EC100 
          SX3    B4          N
          DX4    X7*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)
          SB4    X3          BCP
          SB3    B3+X4       FWA
  
*      IF BCP OF RECEIVING FIELD NOT = 0, WE MUST READ IN FIRST WORD
*      OF RECEIVING FIELD SO WE CAN RETAIN THE BACKGROUND CHARS 
  
 AN2EC100 BSS    0
          EQ     B4,AN2EC150
          SA0    =XC.ECSBF
          SX0    B3 
          RE     B1 
          EQ     ERROR       IF ECS TRANSFER ERROR
  
*      CALCULATE NO. OF WORDS SPANNED BY RECEIVING FIELD
  
 AN2EC150 BSS    0
          SX3    B7          SIZE OF SOURCE 
          BX6    X2          NO. BLANKS TO PAD (+ OR -) 
          AX6    59 
          BX4    X2-X6       NO. BLANKS TO PAD (+)
          IX4    X4+X3       TOTAL NUMBER OF CHARS TO XFER = SIZE OF
*                            RECEIVING FIELD = SR 
          SX5    B4+X4       BR+SR
          SX4    100
          SX6    X5+9        (BR+SR)+9
          DX5    X7*X6       [(BR+SR)+9]*[(1/10)*2**20] 
          AX5    20          [(BR+SR)+9]/10 = NO. WORDS TO READ 
          IX6    X4-X5
          NG     X6,AN2EC300 IF RECEIVING FIELD > 100 
  
*      THIS IS THE EASY CASE - WE CAN DO THE ENTIRE MOVE AT ONCE
  
          SX7    B3          FWA (ECS) OF RECEIVING FIELD 
          SA7    SAVFWA 
  
*      CALL C.MOVE TO MOVE FROM THE SOURCE TO C.ECSBF 
  
 AN2EC175 BSS    0
          SB3    =XC.ECSBF
          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 (ECS) TO GET THE BACKGROUND 
*      CHARS
  
          SA2    SAVFWA      FWA RECEIVING FIELD
          EQ     B4,AN2EC200
          SB5    B5+B1       ADJUST NO. WORDS IN RECEIVING FIELD
  
*      CALCULATE LWA OF RECEIVING FIELD 
  
          SX3    B5-B1       NO. WORDS IN RECEIVING FIELD - 1 
          IX0    X3+X2       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
  
          SA5    =XC.TEMP 
          SA1    =XC.MASK+B4
          BX5    -X1*X5      BACKGROUND CHARS 
          SA3    =XC.ECSBF+X3 
          BX3    X1*X3       MAKE HOLE FOR BACKGROUND CHARS 
          BX6    X5+X3
          SA6    A3 
  
*      WRITE FROM C.ECSBF TO RECEIVING FIELD
  
 AN2EC200 BSS    0
          SA0    =XC.ECSBF
          BX0    X2 
          WE     B5 
          EQ     ERROR       IF ECS TRANSFER ERROR
          EQ     C.AN2EC     DONE 
  
*      PROCESS ECS TRANSFER ERROR 
  
 ERROR    BSS    0
          SX1    #ECSERR
          MX2    0
          SA3    C.AN2EC
          AX3    30 
          SX6    B1 
          IX3    X3-X6
          RJ     =XC.MSG     PUT MESSAGE IN DAYFILE AND ABORT 
  
*     PROCESS RECEIVING FIELD > 100 WORDS 
  
 AN2EC300 BSS    0
          SX6    B4 
          SA6    =SSVB4      SAVE REC BCP 
          SX6    B3 
          SA6    SAVFWA      SAVE FWA RECEIVER
          NG     X2,AN2EC380 SPACES ARE TO BE APPENDED
  
          SX6    B4+X2       X6 = REC CHAR OFFSET + NO. OF SPACES 
          SX7    1000 
          IX6    X7-X6
          NG     X6,AN2EC370 FIRST(1000-OFFSET CHARS) ARE SPACES
  
          SX7    0
          SA7    =SSVX2      NO REMAINING SPACES TO MOVE
          SX4    B7          SOURCE SIZE
          IX7    X4-X6       SOURCE SIZE-(CHAR MOVED THIS TIME THRU LOOP
  
 AN2EC305 SA7    =SSVB7      SAVE REMAINING CHARS TO MOVE 
          SB7    X6          B7 = CHAR MOVED THIS TIME
          SX6    B7+B6       N
          SX7    314632B     (1/10)*2**20 
          IX7    X7*X6       (N/10)*2**20 
          AX7    20          N/10 
          SX6    X7+B5       N/10 + FWA OF SOURCE 
          SA6    SVB5AB6     SAVE NEW FWA OF SOURCE 
          SX6    10 
          IX7    X7*X6       (N/10)*10
          SX6    B7+B6       N
          IX7    X6-X7       N - (N/10)*10
          SA7    A6+B1       SAVE NEW BCP FOR SOURCE
          EQ     AN2EC320 
  
  
*     MAIN LOOP TO MOVE CHARS IN BLOCKS OF 100 WORDS TO ECS 
  
 AN2EC310 BSS    0
          SA7    =SSVB7      SAVE REMAINING CHARS TO MOVE 
          SB7    X6          B7 = CHAR MOVED THIS TIME
  
*     CALL CBMOVE TO MOVE SOURCE INTO BUFFER
  
 AN2EC320 SB3    =XC.ECSBF
          RJ     =XC.MOVE 
  
*     WRITE 100 WORDS TO ECS
  
          SA0    =XC.ECSBF
          SA2    SAVFWA 
          SX0    X2 
          WE     100
          EQ     ERROR       IF ECS TRANSFER ERROR
          SX7    X2+100 
          SA7    A2          NEW FWA FOR RECEIVER 
  
          SB4    B0          ZERO BCP OF RECEIVER 
          SX2    B0          NO SPACES LEFT TO PREFIX 
          SA4    SVB5AB6
          SB5    X4          B5 = FWA OF SOURCE 
          SA4    A4+B1
          SB6    X4          B6 = BCP OF SOURCE 
          SA4    SVB7        X4 = REMAINING SOURCE CHARS
          SX6    1000 
          IX7    X4-X6
          PL     X7,AN2EC310 LOOP IF MORE THAN 1000 CHARS LEFT TO MOVE
  
  
*         LESS THAN 1000 SOURCE CHARS TO MOVE 
  
          SA2    SVX2 
          IX3    X4-X2       NO. OF CHARS + SPACES TO MOVE
          IX7    X6-X3       1000 - (CHARS + SPACES)
          SA7    =SLPFLAG 
          NG     X7,AN2EC360 MORE THAN 1000 (CHARS + SPACES) YET TO MOVE
          NZ     X4,AN2EC355 JUMP IF CHARS LEFT TO MOVE 
          BX2    -X2         OTHERWISE SPACES MUST BE POSITIVE
  
*         LESS THAN 1000 SOURCE CHARS AND SPACES TO MOVE
  
 AN2EC355 BSS    0
          ZR     X3,C.AN2EC  DONE 
          SB7    X4 
          SA4    SVB4 
          SB4    X4 
          EQ     AN2EC175    LESS THAN 1000 REMAINING CHARS TO MOVE 
  
  
*     MOVE REMAINING CHARS AND APPENDED SPACES
  
 AN2EC360 ZR     X4,AN2EC365 ONLY SPACES TO MOVE
          IX2    X2-X7       SPACES TO MOVE THIS TIME 
          BX7    -X7
 AN2EC350 SA7    A2          NO. OF REMAINING SPACES TO APPEND
          SB7    X4          CHARS TO MOVE
  
*     CALL C.BMOVE TO MOVE SOURCE INTO BUFFER 
  
          SB3    =XC.ECSBF
          RJ     =XC.MOVE 
  
*     MOVE 100 WORDS TO ECS 
  
 AN2EC363 SA2    SAVFWA 
          SX0    X2 
          SA0    =XC.ECSBF
          WE     100
          EQ     ERROR       ECS TRANSFER ERROR 
          SX7    X2+100 
          SA7    A2 
  
          SX6    1000 
          SB7    B0 
          IX7    X2-X6       SPACES - 1000
          SX2    X6 
          PL     X7,AN2EC369 LOOP IF 1000 OR MORE SPACES TO MOVE
  
          SA2    A2          REMAINING SPACES 
          SX3    X2 
          SX4    B0 
          EQ     AN2EC355 
  
*     MOVE REMAINING SPACES 
  
 AN2EC365 SX2    X6          SPACES TO MOVE FIRST TIME
          BX7    -X7
          SX6    B0 
          SA6    LPFLAG 
          EQ     AN2EC350 
  
 AN2EC369 SA3    LPFLAG 
          SA2    SVX2        REMAINING SPACES 
          ZR     X3,AN2EC363 JUMP SPACES ALREADY IN BUFFER
          SX6    B0 
          SA6    A3 
          SX4    B0 
          EQ     AN2EC350    MOVE ALL SPACES TO BUFFER
  
  
*     MOVE OF 1000 LEADING BLANKS OR MORE 
  
AN2EC370  BSS    0
          SX6    B7 
          SA6    SVB7 
          SX6    B5 
          SA6    SVB5AB6
          SX6    B6 
          SA6    A6+B1
          IX6    X2-X7       SPACES - 1000
          SX6    X6+B4       SPACES - 1000 + BCP REC
          SX2    B4 
          IX2    X7-X2       SPACES TO MOVE - REC BCP 
  
*     LOOP FOR MOVING PREFIXED SPACES IN BLOCKS OF 100 WORDS TO ECS 
  
 AN2EC375 BSS    0
          SA6    SVX2        SAVE REMAINING SPACES
          SB7    B0          SPACES ONLY MOVED
  
*     CALL C.BMOVE TO MOVE SOURCE INTO BUFFER 
  
          SB3    =XC.ECSBF
          RJ     =XC.MOVE 
  
*     WRITE 1000 BLANKS TO ECS
  
          SA2    SAVFWA 
          SX0    X2 
          SA0    =XC.ECSBF
          WE     100
          EQ     ERROR       JUMP IF ECS TRANSFER ERROR 
          SX7    X2+100 
          SA7    A2 
  
          SB4    0           REC BCP
          SA3    SVX2 
          SX2    1000 
          IX6    X3-X2
          PL     X6,AN2EC375 LOOP IF 1000 SPACES LEFT TO MOVE 
  
          SA4    SVB5AB6     RESTORE
          SB5    X4          B5 
          SA4    A4+B1       AND
          SB6    X4          B6 
          SA4    SVB7        SOURCE CHARS LEFT
          SX6    X2          X6 = 1000
          SA2    A3          X2 = SPACES LEFT TO MOVE 
          IX6    X6-X2
          IX3    X4-X6       X7 = SOURCE CHARS + SPACES - 1000
          NG     X3,AN2EC355 LESS THAN 1000 (CHARS + SPACES) TO MOVE
  
          SX7    B0 
          SA7    SVX2        ZERO OUT REMAINING SPACES
          SX7    X3 
          EQ     AN2EC305    JUMP TO MAIN MOVE LOOP 
  
  
*     SPACES ARE TO BE APPENDED 
  
 AN2EC380 BSS    0
          SX7    B7-1000
          SX7    X7+B4
          NG     X7,AN2EC385 LESS THAN 1000 SOURCE CHARS TO MOVE
  
          SX6    X2 
          SA6    SVX2        SAVE NO OF SPACES TO APPEND
          SX6    1000 
          SX2    B4 
          IX6    X6-X2       SOURCE CHARS TO MOVE 
          SX2    B0          NO SPACES TO PREFIX
          EQ     AN2EC305    GO MOVE SOURCE CHARS 
  
*     LESS THAN 1000 SOURCE CHARS WITH SPACES APPENDED
  
 AN2EC385 IX6    X2-X7
          SA6    SVX2        NO. OF SPACES LEFT TO APPEND 
          BX2    X7          NO. OF SPACES TO MOVE FIRST TIME 
          SX7    0           NO. OF CAHRS REMAINING TO BE MOVED 
          SX6    B7          NO. OF CHARS TO MOVE FIRST TIME
          EQ     AN2EC305    GO MOVE FIRST 1000 
  
 SVB5AB6  BSS    2
 SAVFWA   DATA   0
          EJECT 
**        C.AECRF - MOVE CHARACTERS FROM CORE TO ECS WITH REFERENCE 
*                   MODIFICATION
*         GIVEN 
*                B3 - FWA RECEIVING FIELD 
*                B4 - BCP RECEIVING FIELD 
*                B5 - FWA SOURCE
*                B6 - BCP SOURCE
*                X0 - JUSTIFIED FLAG
*                X1 - LENGTH SOURCE 
*                X2 - LENGTH DESTINATION
*         DOES - COMPUTES PARAMETERS FOR AND CALLS C.AN2EC
          ENTRY  C.AECRF
 C.AECRF  DATA   0
          NZ     X0,AECRF20  JUSTIFIED
          SB7    X1 
          IX3    X1-X2
          NG     X3,AECRF30 
          SB7    X2 
          MX2    0
 AECRF10  SA1    C.AECRF
          BX7    X1 
          SA7    C.AN2EC
          EQ     C.AN2EC+1
          SPACE  3
 AECRF20  IX3    X2-X1
          SB7    X1 
          PL     X3,AECRF30 
          BX3    -X3
          SB6    B6+X3
          SB7    X2 
          MX2    0
          EQ     AECRF10
 AECRF30  BX2    X3 
          EQ     AECRF10
          END 
