*DECK C$MOVE
          IDENT  C$MOVE 
          TITLE  C$MOVE - MOVE CHARACTER STRING AND BLANK FILL
  
          MACHINE  ANY,I
          COMMENT  MOVE CHARACTER STRING AND BLANK FILL 
          SST 
          B1=1
 C.MOVE   SPACE  4
**        C.MOVE - MOVE CHARACTER STRING AND BLANK FILL 
* 
*      CALLING SEQUENCE-
*         B3 = FWA OF RECEIVING FIELD 
*         B4 = CHARACTER OFFSET OF RECEIVING FIELD  (0 @ B4 < 2'18) 
*         B5 = FWA OF SOURCE FIELD
*         B6 = CHARACTER OFFSET OF SOURCE FIELD   (0 @ B6 < 2'18) 
*         B7 = NUMBER OF CHARACTERS TO COPY 
*         X2 = NUMBER OF SPACES TO APPEND IF NEGATIVE 
*            = NUMBER OF SPACES TO PREFIX IF POSITIVE 
* 
*         RJ     C.MOVE / C.MOVN / C.MOVS / C.MOVX
* 
*      DOES-
*         PERFORMS THE INDICATED MOVE,
*         WITH BLANKS INSERTED ACCORDING TO X2. 
*         LEAVES B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD. 
*         LEAVES B4 = BCP OF FIELD FOLLOWING RECEIVING FIELD  (0@B4@9). 
* 
*      USES-
*         ALL REGISTERS EXCEPT A0 
*         ASSUMES B1=1
*         C.MASK, C.RMASK, C.BLANK
* 
*      NOTE-
*         ALL OF THE ENTRY POINTS PERFORM IDENTICALLY.
*         THE DIFFERENT NAMES REFLECT DIFFERENT *OBJ* DEFINITIONS:  
* 
*         C.MOVE  --  MOVE CHARACTERS AND LATER REFERENCE B3, B4
*         C.MOVN  --  MOVE CHARACTERS WITHOUT LATER REFERENCING B3, B4
*         C.MOVS  --  FILL A FIELD WITH BLANKS (SPACES) 
*         C.MOVX  --  MOVE CHARACTERS WITHOUT ENDING A SEQUENCE,
*                     (TYPICALLY BY SA2RA WITH RECEIVING = C.BUFF)
          SPACE  4
 DONE     MACRO 
          PL     X2,C.MOVE   IF NOT APPENDING SPACES,  EXIT 
          BX2    -X2         MAKE COUNT POSITIVE
          SB5    C.MOVE      SET RETURN ADDRESS 
          EQ     MOVSPCS     GO MOVE SPACES, AND EXIT 
 DONE     ENDM
          SPACE  4
          EXT    C.BLANK
          EXT    C.MASK 
          EXT    C.RMASK
  
          ENTRY  C.MOVN 
 C.MOVN   BSS    0
          ENTRY  C.MOVS 
 C.MOVS   BSS    0
          ENTRY  C.MOVX 
 C.MOVX   BSS    0
          ENTRY  C.MOVE 
 C.MOVE   BSS    1           ENTRY/EXIT WORD
  
  
*      IF B4>9 NEED TO CALCULATE BCP AND WORD OFFSET FOR RECEIVING FIELD
  
          SB2    10 
          LT     B4,B2,MOV200 
          SX3    B4 
          SX4    314632B     (1/10)*2**20 
          DX4    X4*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          NEW BCP
          SB3    B3+X4       NEW ADDRESS
  
*      IF B6>9 NEED TO CALCULATE BCP AND WORD OFFSET FOR SOURCE FIELD 
  
 MOV200   BSS    0
          ZR     B7,MOV500   MOVING SPACES ONLY 
          LT     B6,B2,MOV300 
          SX3    B6 
          SX4    314632B     (1/10)*2**20 
          DX4    X4*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          NEW BCP
          SB5    B5+X4       NEW ADDRESS
  
 MOV300   SA5    B5          SAVE FWA SOURCE IN A5
  
  
*      IF PREFIXING SPACES,  GO DO IT 
  
          NZ     X2,MOV600   IF APPENDING/PREFIXING SPACES
  
 MOV305   BSS    0           (COMES HERE AFTER PREFIXING SPACES)
          SA3    B3          FIRST WORD OF RECEIVING FIELD
*         B1 = 1
*         B2 = 10 
*         A3 = FWA OF RECEIVING FIELD 
*         X3 = FW  OF RECEIVING FIELD 
*         B4 = BCP OF RECEIVING FIELD  (0 @ BCP @ 9)
*         A5 = FWA OF SOURCE FIELD
*         X5 = FW  OF SOURCE FIELD
*         B6 = BCP OF SOURCE FIELD   (0 @ BCP @ 9)
*         B7 = NUMBER OF CHARACTERS TO MOVE 
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          NE     B4,B6,MOV360  IF NOT ALIGNED 
          BX6    -X4*X5      EXTRACT SOURCE 
          SB4    B4+B7       BCP OF FIELD FOLLOWING RECEIVING FIELD 
          BX7    X4*X3       CHARACTERS BEFORE RECEIVING FIELD
          BX6    X6+X7       COMBINE
          GE     B4,B2,MOV310  IF NOT LESS THAN 1 WORD
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          BX7    X4*X6
          BX6    X7+X3       FINAL FORM OF WORD 
          SA6    A3          STORE
          DONE
  
*                            NOT LESS THAN ONE WORD 
 MOV310   EQ     B4,B2,MOV350  IF ONE WORD, RIGHT-JUSTIFIED 
          SA6    A3          STORE FIRST WORD 
          SB4    B4-B2
          SA5    A5+B1       GET SECOND WORD OF SOURCE
          BX6    X5          PREPARE TO STORE 
          GE     B4,B2,MOV320  IF NOT LESS THAN TWO WORDS 
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1       GET SECOND RECEIVING WORD
          BX7    X4*X6
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          SB3    A3          B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          BX6    X7+X3       FORM FINAL WORD
          SA6    A3          STORE
          DONE
  
*                            ALIGNED, NOT LESS THAN 2 WORDS 
 MOV320   EQ     B4,B2,MOV340  IF RIGHT-JUSTIFIED ON SECOND WORD
 MOV330   SA5    A5+B1       GET NEXT SOURCE WORD 
          SB4    B4-B2
          SA6    A6+B1       STORE LAST WORD
          BX6    X5 
          GT     B4,B2,MOV330  IF MORE WORDS,  LOOP 
          EQ     B4,B2,MOV340  IF LAST WORD IS RIGHT-JUSTIFIED
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1
          BX7    X4*X6
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          SB3    A3          B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          BX6    X7+X3
          SA6    A3 
          DONE
  
*                            NOT FIRST WORD,  STORE RIGHT-JUSTIFIED WORD
 MOV340   SA6    A6+B1       STORE LAST WORD
          SB4    0           B4 = BCP OF FIELD FOLLOWING RECEIVING FIELD
          SB3    A6+B1       B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          DONE
  
*                            FIRST WORD, STORE RIGHT-JUSTIFIED WORD 
 MOV350   SA6    A3          STORE FIRST AND ONLY WORD
          SB4    0           B4 = BCP OF FIELD FOLLOWING RECEIVING FIELD
          SB3    A3+B1       B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          DONE
  
*                            NOT ALIGNED
 MOV360   LT     B4,B6,MOV400  IF SHIFTING LEFT 
          SB6    B4-B6       DIFF 
          SB4    B4+B7       BCP OF FIELD FOLLOWING RECEIVING FIELD 
          SB7    B2-B6       10-DIFF
          SB5    B7+B7       20-2*DIFF
          BX6    X4*X3       CHARACTERS BEFORE RECEIVING FIELD
          SB7    B5+B5       40-4*DIFF
          SB5    B7+B5       60-6*DIFF
          LX7    X5,B5       POSITION SOURCE
          BX1    -X4*X7 
          BX6    X6+X1
          GE     B4,B2,MOV370  IF NOT LESS THAN 1 WORD
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          BX7    X4*X6
          BX6    X7+X3
          SA6    A3          STORE FIRST AND ONLY WORD
          DONE
  
*                            NOT ALIGNED, NOT LESS THAN 1 WORD
 MOV370   EQ     B4,B2,MOV350  IF FIRST WORD IS RIGHT-JUSTIFIED 
          SA4    C.MASK+B6   (DIFF)77-S, (10-DIFF)00-S
          SA5    A5+B1       GET SECOND SOURCE WORD 
          BX1    X4*X7       SOURCE CHARACTERS FROM FIRST WORD
          SA6    A3          STORE FIRST WORD 
          LX7    X5,B5       POSITION SOURCE
          BX6    -X4*X7      SOURCE CHARACTERS FROM SECOND WORD 
          SB4    B4-B2
          BX6    X1+X6
          GE     B4,B2,MOV380  IF NOT LESS THAN 2 WORDS 
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1       GET SECOND WORD OF RECEIVING FIELD 
          BX1    X4*X6
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          SB3    A3          B3 = FWA OF FIELD FOLLOIWNG RECEIVING FIELD
          BX6    X1+X3
          SA6    A3          STORE SECOND WORD
          DONE
  
*                            NOT ALIGNED, NOT LESS THAN 2 WORDS 
 MOV380   EQ     B4,B2,MOV340  IF SECOND WORD IS RIGHT-JUSTIFIED
 MOV390   SA5    A5+B1       GET NEXT SOURCE WORD 
          BX1    X4*X7       EXTRACT SOURCE CHARACTERS FROM PREVIOUS
          LX7    X5,B5       POSITION NEW SOURCE WORD 
          SA6    A6+B1       STORE LAST WORD
          BX6    -X4*X7 
          SB4    B4-B2
          BX6    X1+X6       COMBINE TO GET NEXT WORD 
          GT     B4,B2,MOV390  IF MORE WORDS,  LOOP 
          EQ     B4,B2,MOV340  IF LAST WORD IS RIGHT-JUSTIFIED
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1       GET LAST WORD OF RECEIVING FIELD 
          BX1    X4*X6
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          SB3    A3          B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          BX6    X1+X3
          SA6    A3 
          DONE
  
*                            NOT ALIGNED, SHIFTING LEFT 
 MOV400   SB6    B6-B4       DIFF 
          SB4    B4+B7       BCP OF FIELD FOLLOWING RECEIVING FIELD 
          SB5    B6+B6       2*DIFF 
          BX6    X4*X3       CHARACTERS BEFORE RECEIVING FIELD
          SB7    B5+B5       4*DIFF 
          SB5    B7+B5       6*DIFF 
          LX7    X5,B5       POSITION SOURCE
          SA5    A5+B1       GET SECOND SOURCE WORD 
          BX1    -X4*X7 
          SA4    C.RMASK+B6  (10-DIFF)00-S, (DIFF)77-S
          LX7    X5,B5       POSITION SOURCE
          BX6    X6+X1
          BX1    X4*X7
          BX6    -X4*X6 
          BX6    X6+X1
          GE     B4,B2,MOV410  IF NOT LESS THAN 1 WORD
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          BX7    X4*X6
          BX6    X7+X3
          SA6    A3          STORE FIRST AND ONLY WORD
          DONE
  
*                            NOT ALIGNED, SHIFTING LEFT, NOT < 1 WORD 
 MOV410   EQ     B4,B2,MOV350  IF FIRST WORD IS RIGHT-JUSTIFIED 
          SA5    A5+B1       GET THIRD SOURCE WORD
          SA6    A3          STORE FIRST WORD OF RECEIVING FIELD
          BX3    -X4*X7 
          LX7    X5,B5       POSITION SOURCE
          BX1    X4*X7
          SB4    B4-B2
          BX6    X3+X1
          GE     B4,B2,MOV420  IF NOT LESS THAN 2 WORDS 
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1       GET SECOND WORD OF RECEIVING FIELD 
          BX7    X4*X6
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          SB3    A3          B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          BX6    X7+X3
          SA6    A3          STORE SECOND WORD OF RECEIVING 
          DONE
  
*                            NOT ALIGNED, SHIFTING LEFT, NOT < 2 WORDS
 MOV420   EQ     B4,B2,MOV340  IF SECOND WORD IS RIGHT-JUSTIFIED
 MOV430   SA5    A5+B1       GET NEXT SOURCE WORD 
          BX3    -X4*X7      CHARACTERS FROM PREVIOUS SOURCE WORD 
          SA6    A6+B1       STORE PREVIOUS WORD
          LX7    X5,B5       POSITION SOURCE
          BX1    X4*X7       EXTRACT CHARACTERS FROM THIS SOURCE WORD 
          SB4    B4-B2
          BX6    X3+X1
          GT     B4,B2,MOV430  IF MORE WORDS TO STORE 
          EQ     B4,B2,MOV340  IF LAST WORD IS RIGHT-JUSTIFIED
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1       PICK UP LAST WORD OF RECEIVING FIELD 
          BX7    X4*X6
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          SB3    A3          B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          BX6    X7+X3
          SA6    A3          STORE LAST WORD OF RECEIVING FIELD 
          DONE
          SPACE  4
  
*      MOVE ONLY SPACES 
  
 MOV500   SB5    C.MOVE      SET RETURN ADDRESS 
          PL     X2,MOVSPCS  JP IF SPACE FILL TO LEFT - GO FILL ALL 
          BX2    -X2         SPACE FILL TO RIGNT - MAKE POSITIVE
          EQ     MOVSPCS     GO MOVE SPACES AND EXIT
          SPACE  4
  
*      PREFIX SPACES,  THEN MOVE
  
 MOV600   NG     X2,MOV305   IF ACTUALLY TO APPEND SPACES 
          SB5    MOV305      SET RETURN ADDRESS 
*         FALL THROUGH TO MOVSPCS 
          TITLE  MOVSPCS -  MOVE SPACES 
**        MOVSPCS -  MOVE SPACES TO RECEIVING FIELD 
* 
*      CALLING SEQUENCE-
*         B1 = 1
*         B2 = 10 
*         B3 = FWA OF RECEIVING FIELD 
*         B4 = BCP OF RECEIVING FIELD   (0 @ BCP @ 9) 
*         B5 = RETURN ADDRESS 
*         X2 = NUMBER OF SPACES TO STORE INSTO THE RECEIVING FIELD
* 
*         EQ     MOVSPCS
* 
*         MOVES (X2) SPACES.
*         LEAVES B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD. 
*         LEAVES B4 = BCP OF FIELD FOLLOWING RECEIVING FIELD  (0@B4@9). 
* 
*      PRESERVES- 
*         B1=1, B2=10, X2, A5, X5 
  
  
 MOVSPCS  BSS    0           (ALSO FALL TO HERE FROM MOV600)
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA1    C.BLANK     55555555555555555555B
          SA3    B3          FIRST WORD OF RECEIVING FIELD
          BX6    -X4*X1      EXTRACT BLANKS 
          SB4    B4+X2       BCP OF FIELD FOLLOWING RECEIVING FIELD 
          BX2    X4*X3       CHARACTERS BEFORE RECEIVING FIELD
          BX6    X2+X6       COMB NE
          SX2    B0          NOTE NO SPACES TO FILL AFTER EXIT
          GE     B4,B2,MOVS100  IF NOT LESS THAN 1 WORD 
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          BX3    -X4*X3      CHARACTERS AFTER RECEIVING FIELD 
          BX1    X4*X6
          BX6    X1+X3
          SA6    A3 
          JP     B5          EXIT 
  
  
*                            NOT LESS THAN 1 WORD 
 MOVS100  EQ     B4,B2,MOVS140  IF ONE WORD,  RIGHT-JUSTIFIED 
          SA6    A3          STORE FIRST WORD 
          SB4    B4-B2
          BX6    X1          PREPARE TO STORE 
          GE     B4,B2,MOVS110  IF NOT LESS THAN TWO WORDS
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1       GET SECOND WORD OF RECEIVING FIELD 
          BX1    X4*X6       STRIP EXCESS CHARACTERS
          BX3    -X4*X3      KEEP CHARACTERS AFTER RECEIVING FIELD
          SB3    A3          B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          BX6    X1+X3
          SA6    A3          STORE
          JP     B5          EXIT 
  
  
*                            NOT LESS THAN 2 WORDS
 MOVS110  EQ     B4,B2,MOVS130  IF RIGHT-JUSTIFIED ON SECOND WORD 
 MOVS120  SB4    B4-B2
          SA6    A6+B1       STORE BLANKS INTO NEXT WORD
          GT     B4,B2,MOVS120  IF MORE WORDS TO STORE
          EQ     B4,B2,MOVS130  IF RIGHT-JUSTIFIED
          SA4    C.MASK+B4   (B4)77-S, (10-B4)00-S
          SA3    A6+B1       GET LAST WORD OF RECEIVING FIELD 
          BX1    X4*X6       STRIP EXCESS BLANKS
          BX3    -X4*X3      KEEP CHARACTERS FOLLOWING RECEIVING FIELD
          SB3    A3          B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          BX6    X1+X3
          SA6    A3          STORE LAST WORD
          JP     B5          EXIT 
  
  
*                            STORE RIGHT-JUSTIFIED WORD, NOT FIRST
 MOVS130  SA6    A6+B1       STORE LAST WORD
          SB4    0           B4 = BCP OF FIELD FOLLOWING RECEIVING FIELD
          SB3    A6+B1       B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          JP     B5          EXIT 
  
  
*                            STORE RIGHT-JUSTIFIED FIRST WORD 
 MOVS140  SA6    A3          STORE FIRST WORD 
          SB4    0           B4 = BCP OF FIELD FOLLOWING RECEIVING FIELD
          SB3    A3+B1       B3 = FWA OF FIELD FOLLOWING RECEIVING FIELD
          JP     B5          EXIT 
          EJECT 
**        C.MOVRF - MOVE CHARACTERS 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.MOVE 
          ENTRY  C.MOVRF
 C.MOVRF  DATA   0
          NZ     X0,MOVRF20  JUSTIFIED
          SB7    X1 
          IX3    X1-X2
          NG     X3,MOVRF30 
          SB7    X2 
          MX2    0
 MOVRF10  SA1    C.MOVRF
          BX7    X1 
          SA7    C.MOVE 
          EQ     C.MOVE+1 
          SPACE  3
 MOVRF20  IX3    X2-X1
          SB7    X1 
          PL     X3,MOVRF30 
          SB7    X2 
          BX2    -X3
          SB6    B6+X2
          MX2    0
          EQ     MOVRF10
          SPACE   3 
 MOVRF30  BX2    X3 
          EQ     MOVRF10
          SPACE  4
          END 
