*DECK C$CMUMV 
          IDENT  C$CMUMV
          TITLE  C$CMUMV - MOVE CHAR STRING AND BLANK FILL VIA CMU
  
          MACHINE   ANY,I 
          COMMENT   MOVE CHAR STRING AND BLANK FILL VIA CMU 
          SST 
          B1=1
          SPACE  4
**        C.CMUMV - MOVE CHAR STRING AND BLANK FILL VIA CMU 
* 
*         CALLING SEQUENCE
*                RJ   C.CMUMV 
* 
*         GIVEN-
*                X2 = NUMBER OF BLANKS TO PREFIX IF POSITIVE
*                   = NUMBER OF BLANKS TO APPEND IF NEGATIVE
*                X3 = INDIRECT MOVE DESCRIPTOR WORD SKELETON
*                X4 = SUBSCRIPT FOR RECEIVING FIELD 
*                X5 = SUBSCRIPT FOR SOURCE FIELD
* 
*         DOES- 
*                FIXES UP MD WORD TO REFLECT SUBSCRIPTING 
*                IF THERE ARE BLANKS TO PREFIX- GENERATES IM(S) FROM
*                C.BLANK
*                GENERATES AN IM TO MOVE CHAR STRING
*                IF THERE ARE BLANKS TO APPEND- GENERATES IM(S) FROM
*                C.BLANK
* 
*         USES- 
*                A1,A4,A6,A7,A3 
*                ALL X REGISTERS
**        CALCBCP - CALCULATE NEW BCP AND PUT IN MD 
* 
*         CALLING SEQUENCE- 
*                RJ   CALCBCP 
* 
*         GIVEN-
*                X4 = INCREMENT 
*                X3 = MD(POSSIBLY SHIFTED) WITH BCP OF "0-TH" OCCURRENCE
*                     OF ITEM IN BITS 18-21 
* 
*         DOES- 
*                CALCULATES BCP BY ADDING BCP IN MD TO INCREMENT IN X4. 
*                DIVIDES THIS BY 10, PUTS THE REMAINDER IN MD 
*                WORD AND RETURNS QUOTIENT IN X4
* 
*         USES- 
*                X0,X1,X3,X4,X6,X7
          SPACE  4
 CALCBCP  MACRO 
          MX7    56 
          LX3    60-18
          BX6    -X7*X3      BCP OF 0-TH OCCURRENCE OF ITEM 
          IX6    X6+X4       CHAR OFFSET OF THIS ITEM  (=N) 
          SX4    314632B     (1/10)* 2**20
          DX4    X4*X6       (N/10)* 2**20
          AX4    20          N/10 = WORD OFFSET FROM FWA OF 0-TH OCC. 
          BX1    X4 
          IX0    X4+X4       2*(N/10) 
          LX1    3           8*(N/10) 
          IX1    X1+X0       10*(N/10)
          IX6    X6-X1       N-10*(N/20) = BCP OF THIS ITEM 
          BX3    X7*X3       MAKE HOLE IN MD FOR BCP
          BX3    X3+X6       PUT BCP IN MD
          ENDM
          SPACE  4
          ENTRY  C.CMUMV
 C.CMUMV  DATA   0
          ZR     X4,MOV200
  
*      RECEIVING FIELD IS SUBSCRIPTED- CALCULATE NEW BCP AND ADDR FOR MD
  
          AX4    30          OFFSET*OCC LEN 
          CALCBCP 
          LX3    18          RIGHT JUSTIFY RECEIVING FIELD ADDR 
          IX3    X3+X4
  
*      IF SOURCE IS SUBSCRIPTED - CALCULATE NEW BCP AND ADDR FOR MD 
  
 MOV200   BSS    0
          ZR     X5,MOV400
          BX4    X5          CALCBCP REQUIRES SUBSCRIPT IN X4 
          AX4    30          OFFSET*OCC LEN 
          LX3    56          CALCBCP REQUIRES BCP IN BITS 18-21 
          CALCBCP 
          LX3    52          RIGHT JUSTIFY SOURCE FIELD ADDRESS 
          IX3    X3+X4
          LX3    30 
  
*      STORE MD WORD
  
 MOV400   BSS    0
  
*      IF THERE ARE SPACES TO PREFIX- DO IT 
  
          ZR     X2,MOVCHAR  IF NO SPACE FILL 
          NG     X2,MOVCHAR  IF APPENDING SPACES
          RJ     MOVSPCS
          BX3   X6
          BX4    X2 
          CALCBCP 
          LX3    18 
          IX3    X3+X4
          MX2    0
  
*      MOVE CHAR STRING 
  
 MOVCHAR  BSS    0
          BX6    X3 
          SA6    MDWORD 
          IM     MDWORD 
  
*         IF THERE ARE NO SPACES TO APPEND- WE ARE DONE 
  
          ZR     X2,C.CMUMV  NO BLANK FILL
  
*      MUST UPDATE MD WORD TO REFLECT MOVE JUST DONE
*      GET CHAR COUNT OF MOVE 
  
          SA3    MDWORD 
          MX0    60-4 
          LX3    60-26
          BX5    -X0*X3      LOWER 4 BITS OF LENGTH 
          LX3    60-18-4
          MX0    60-9 
          BX6    -X0*X3      UPPER 9 BITS OF LENGTH 
          LX6    4
          BX4    X5+X6       LENGTH 
          LX3    26+18+4     REPOSITION MD
          CALCBCP 
          LX3    18          UPDATADR REQUIRES ADDRESS IN BITS 0-18 
          IX3    X3+X4
          BX6    X3 
          BX2    -X2         COUNT WAS NEGATIVE 
          RJ     MOVSPCS
          EQ     C.CMUMV     DONE 
          TITLE  CALCBCP - CALCULATE NEW BCP AND PUT IN MD
          TITLE  MOVSPCS - FILL A FIELD WITH SPACES VIA CMU 
**        TITLE  MOVSPCS - FILL A FIELD WITH SPACES VIA CMU 
* 
*         CALLING SEQUENCE- 
*                RJ   MOVSPCS 
* 
*         GIVEN-
*                MD WORD AT ADDR MDWORD CONTAINS CORRECT BCP AND ADDR 
*                OF RECEIVING FIELD 
*                X2 = NUMBER OF SPACES TO MOVE
* 
*         DOES- 
* 
*         USES- 
*                A1,A4,A7 
*                ALL X-REGISTERS
  
 MOVSPCS  DATA   0
          SX5    150
          BX6    X3 
          IX3    X2-X5
          NG     X3,MOVSP500 JIF <150 SPACES TO MOVE
          MX3    38 
          SA1    MDSP150     150-BLANKS MD
          MX4    42 
  
*      LOOP FOR MOVING 150 SPACES TO RECEIVING FIELD
  
 MOVSPLP  BSS    0
          BX0    -X3*X6      BCP+ADDR OF RECEIVING FIELD
          BX1    X3*X1       MAKE HOLE IN 150-BLANKS MD FOR BCP+ADDR
          BX7    X1+X0
          SA7    MDSP150
          IM     MDSP150     MOVE 150 SPACES
  
*      UPDATE RECEIVING FIELD ADDR IN MD TO REFLECT MOVE OF 150 BLANKS
*      BCP NOT CHANGED SINCE (BCP+150)MOD 10 = BCP
  
          SX0    15 
          BX7    -X4*X6      RECEIVING FIELD ADDR 
          IX7    X7+X0       BUMP ADDR BY 15
          BX6    X4*X6
          BX6    X6+X7
          IX2    X2-X5       DECREMENT COUNT BY 150 
          IX0    X2-X5
          ZR     X0,MOVSPLP 
          PL     X0,MOVSPLP 
  
*      MOVE REMAINING SPACES (<150) 
  
 MOVSP500 BSS    0
          SX3    =XC.BLANK
          LX3    30 
          MX0    12 
          BX5    X2 
          LX5    44 
          BX5    X0*X5       UPPER PART OF COUNT
          BX3    X3+X5       PUT UPPER PART OF COUNT IN MD
          BX5    X2 
          LX5    26 
          MX0    4
          LX0    30 
          BX5    X0*X5       LOWER PART OF COUNT
          BX7    X5+X3
          MX0    60-22
          BX5    -X0*X6      BCP + ADDRESS OF RECEIVING FIELD 
          BX7    X7+X5       PUT BCP + ADDRESS IN MD
          SA7    MDSPACE
          IM     MDSPACE
  
          EQ     MOVSPCS
 MDWORD   DATA   0           DESCRIPTOR WORD FOR MOVING CHAR STRING 
 MDSP150  MD     150,=XC.BLANK,0  DESCRIPTOR WORD FOR MOVING 150 BLANKS 
 MDSPACE  MD     0,=XC.BLANK,0  DESCRIPTOR WORD FOR MOVING < 150 BLANKS 
          TITLE  C.CMURF - MOVE CHARS WITH REFERENCE MODIFICATION 
          EJECT 
**        C.CMURF - MOVE CHARACTERS WITH REFERENCE MODIFICATION 
*         GIVEN 
*                X0 - JUSTIFIED FLAG
*                X1 - LENGTH SOURCE 
*                X2 - LENGTH DESTINATION
*                X3 - CMU DESCRIPTOR
*                X4 - OFFSET DESTINATION
*                X5 - OFFSET SOURCE 
*         DOES - COMPUTES PARAMETERS FOR AND CALLS C.CMUMV
          ENTRY  C.CMURF
 C.CMURF  DATA   0
          NZ     X0,CMURF20  JUSTIFIED
          IX6    X1-X2
          NG     X6,CMURF30 
          BX1    X2 
          MX2    0
 CMURF10  MX0    56 
          SX6    8192 
          IX7    X1-X6
          PL     X7,CMURF40 
          BX7    X0*X1
          LX7    44          TOP HALF OF LENGTH 
          BX3    X7+X3
          BX7    -X0*X1 
          LX7    26 
          BX3    X7+X3       SET LENGTH IN DESCRIPTOR 
          LX4    30 
          LX5    30 
          RJ     C.CMUMV
          EQ     C.CMURF
          SPACE  3
 CMURF20  IX6    X2-X1
          PL     X6,CMURF30 
          IX5    X5-X6
          BX1    X2 
          MX2    0
          EQ     CMURF10
 CMURF30  BX2    X6 
          EQ     CMURF10
  
 CMURF40  BX7    X3 
          SA7    DESCR
          BX7    X5 
          SA7    SRCOFF 
          SX6    8191 
          IX7    X1-X6
          SA7    LENGTH 
          IX7    X4+X2
          SA7    DESTOFF
          MX0    56 
          BX7    X0*X6
          LX7    44 
          BX3    X7+X3
          BX7    -X0*X6 
          LX7    26 
          BX3    X7+X3
          LX4    30 
          LX5    30 
          RJ     C.CMUMV
          SA4    DESTOFF
          SX7    8191 
          IX4    X4+X7
          SA5    SRCOFF 
          IX5    X7*X5
          SA3    DESCR
          SA1    LENGTH 
          MX2    0           NO SPACE FILL
          EQ     CMURF10
  
 CMURF50  BX7    X4 
          SA7    DESTOFF
          BX7    X2 
          SA7    NSPACE 
          MX0    56 
          BX7    X0*X6
          LX7    44 
          BX3    X7+X3
          BX7    -X0*X6 
          LX7    26 
          BX3    X7+X3
          LX4    30 
          LX5    30 
          RJ     C.CMUMV
          SA4    DESTOFF
          SX7    8191 
          IX4    X4+X7
          IX5    X5+X7
          SA3    DESCR
          SA1    LENGTH 
          SA2    NSPACE 
          EQ     CMURF10
  
 DESCR    BSS    1
 DESTOFF  BSS    1
 LENGTH   BSS    1
 NSPACE   BSS    1
 SRCOFF   BSS    1
          END 
