COMCMBS 
COMMON
          CTEXT  COMCMBS - MOVE BIT STRING PROCESSORS.
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   COMCMBS
 QUAL$    ENDIF 
          BASE   D
 COMCMBS  SPACE  4,10 
***       COMCMBS - MOVE BIT STRING PROCESSORS. 
* 
*         J. D. HOLMBECK.    84/03/31.
 MBS      SPACE  4,20 
**        MBS - MOVE BIT STRING.
* 
*         ENTRY  (A1) = ADDRESS OF SOURCE STRING. 
*                (A2) = ADDRESS OF DESTINATION STRING.
*                (B2) = UPPER BIT POSITION OF DESTINATION STRING. 
*                (B3) = UPPER BIT POSITION OF SOURCE STRING.
*                (B4) = BIT COUNT.
*                (X1) = FIRST WORD OF SOURCE STRING.
*                (X2) = FIRST WORD OF DESTINATION STRING. 
* 
*         EXIT   (A1) = ADDRESS OF REMAINDER OF SOURCE STRING.
*                (A2) = ADDRESS OF REMAINDER OF DESTINATION STRING. 
*                (B2) = UPPER BIT POSITION OF REMAINDER OF DESTINATION
*                       STRING. 
*                (B3) = UPPER BIT POSITION OF REMAINDER OF SOURCE 
*                       STRING. 
* 
*         USES   B - 4. 
*                X - 1, 2.
* 
*         CALLS  SBS. 
  
  
 MBS      SUBR               ENTRY/EXIT 
 MBS1     LE     B4,MBSX     IF NO MORE BITS TO TRANSFER
          RJ     SBS         SET BIT STRING 
          BX2    X6          GET NEW STRING 
          PL     B3,MBS2     IF MORE BITS IN SOURCE WORD
          SA1    A1+B1       GET NEXT SOURCE WORD 
          SB3    59 
 MBS2     SA6    A2          SET NEW STRING 
          PL     B2,MBS1     IF MORE BITS IN DESTINATION WORD 
          SA2    A2+B1       GET NEXT DESTINATION WORD
          SB2    59 
          EQ     MBS1        CHECK BIT COUNT
 SBS      SPACE  4,20 
**        SBS - SET BIT STRING. 
* 
*         ENTRY  (X1) = SOURCE STRING.
*                (X2) = DESTINATION STRING. 
*                (B2) = UPPER BIT POSITION OF DESTINATION STRING. 
*                (B3) = UPPER BIT POSITION OF SOURCE STRING.
*                (B4) = MAXIMUM BIT COUNT.
* 
*         EXIT   (X6) = NEW STRING. 
*                (B2) = LOWER BIT POSITION - 1 OF DESTINATION STRING. 
*                     .LT. 0 IF STRING AT END OF WORD.
*                (B3) = LOWER BIT POSITION - 1 OF SOURCE STRING.
*                     .LT. 0 IF STRING AT END OF WORD.
*                (B4) = REMAINING BIT COUNT.
*                (B6) = NUMBER OF BITS TRANSFERRED. 
* 
*         USES   B - 7. 
*                X - 0, 7.
  
  
 SBS      SUBR               ENTRY/EXIT 
          SB6    B4-B1
          LE     B6,B3,SBS1  IF UPPER BIT OF SOURCE .GT. BIT COUNT
          SB6    B3 
 SBS1     LE     B6,B2,SBS2  IF UPPER BIT OF DESTINATION .GT. COUNT 
          SB6    B2+
 SBS2     BX6    X2          PRESET DESTINATION IMAGE 
          NG     B6,SBS4     IF NO BIT COUNT
          MX0    1           CREATE MASK
          AX0    B6 
          SB7    B3+1        GET SOURCE STRING
          LX0    B7 
          BX6    X0*X1
          SB7    B2-B3       GET DESTINATION IMAGE
          PL     B7,SBS3     IF VALID SHIFT COUNT 
          SB7    B7+60
 SBS3     LX0    B7 
          BX0    -X0*X2 
          LX6    B7          SET NEW IMAGE
          BX6    X0+X6
 SBS4     SB6    B6+B1       SET NUMBER OF BITS SET 
          SB2    B2-B6       RESET UPPER BIT POSITIONS
          SB3    B3-B6
          SB4    B4-B6       RESET BIT COUNT
          EQ     SBSX        RETURN 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 MBS      EQU    /COMCMBS/MBS 
 SBS      EQU    /COMCMBS/SBS 
 QUAL$    ENDIF 
          ENDX
