*COMDECK   COMSPRED  - MOVE CHARACTERS FROM WORD BUFFER TO STRING BUFFER
          B1=1
          LIST   F,X
          TITLE  SPREAD - MOVE CHARACTERS FROM WORD BUFFER TO STRING BUF
,FER. 
          COMMENT  MOVE CHARACTERS FROM WORD BUFFER TO STRING BUFFER. 
 SPREAD   SPACE  4,8
**        SPREAD - MOVE CHARACTERS FROM WORD BUFFER TO STRING BUFFER. 
* 
*         R. H. GOODELL.     76/06/23.
* 
*         SYMPL-CALLABLE ROUTINE TO MOVE AND UNPACK CHARACTERS
*         FROM A WORD BUFFER (TEN CHARACTERS PER WORD) TO A 
*         STRING BUFFER (ONE CHARACTER PER WORD, RIGHT JUSTIFIED
*         WITH BINARY ZERO FILL). 
* 
*         CALL SPREAD (N, W, I, S, C).
* 
*         ENTRY  N = NUMBER OF CHARACTERS TO MOVE.
*                W = WORD BUFFER ARRAY NAME.
*                I = STARTING WORD INDEX IN W.
*                S = STRING BUFFER ARRAY NAME.
*                C = STARTING WORD INDEX IN S.
* 
*         -OR-   N = 0. 
*                W = WORD NAME. 
*                I = 0. 
*                S = STRING BUFFER ARRAY NAME.
*                C = STARTING WORD INDEX IN S.
* 
*         EXIT   CHARACTERS MOVED.
*                C = C + NUMBER OF CHARACTERS MOVED.
* 
*         CALLS  NONE.
* 
*         THE N=0 CALL UNPACKS CHARACTERS FROM W, LEFT TO RIGHT,
*         UNTIL A 00 OR SPACE IS THE NEXT CHARACTER OR UNTIL TEN
*         CHARACTERS HAVE BEEN STORED, WHICHEVER COMES FIRST. 
  
  
 SPREAD   SUBR   =           ENTRY/EXIT 
          SB1    1           (B1) = CONSTANT 1
          SA2    X1          FETCH N
          SA1    A1+B1       FETCH LOC (W)
          SB7    X2          (B7) = N 
          SA3    A1+B1       FETCH LOC (I)
          SB6    X1 
          SA2    A3+B1       FETCH LOC (S)
          SA3    X3          FETCH I
          SA4    A2+B1       FETCH LOC (C)
          SA1    B6+X3       (A1) = LOC (W) + I 
          SB6    X2          (B6) = LOC (S) 
          SA2    X4          (X2) = C 
          MX0    -6          (X0) = MASK -6 
          SB5    10          (B5) = 10 CHARACTERS PER WORD
          ZR,B7  SPR3        IF N = 0 
          SB4    B5 
  
*         N .NE. 0  -  MOVE N CHARACTERS. 
  
 SPR1     LX1    6           RIGHT ADJUST NEXT CHARACTER
          SB4    B4-B1       COUNT CHARACTERS IN WORD 
          BX6    -X0*X1      EXTRACT CHARACTER
          SB7    B7-B1       COUNT TOTAL CHARACTERS 
          NZ,B4  SPR2        IF WORD NOT EXHAUSTED
          SA1    A1+B1       FETCH NEXT WORD
          SB4    B5          REFRESH COUNT
 SPR2     SA6    B6+X2       STORE CHARACTER
          SX2    X2+B1       C = C + 1
          NZ,B7  SPR1        LOOP UNTIL N CHARACTERS MOVED
  
          SX6    X2          STORE UPDATED C
          SA6    A2 
          JP     EXIT.       RETURN 
  
*         N .EQ. 0  -  MOVE UP TO ONE WORD BUT NOT 00 OR SPACE. 
  
 SPR3     MX4    1           CONSTRUCT A WORD WITH 1-BITS IN
          BX3    X4          POSITIONS 00B AND 55B, COUNTING
          LX4    -1R         0-59 FROM LEFTMOST BIT OF WORD 
          BX3    X3+X4
  
 SPR4     LX1    6           RIGHT ADJUST NEXT CHARACTER
          BX6    -X0*X1      EXTRACT CHARACTER
          SB4    X6          USE AS SHIFT COUNT 
          LX4    X3,B4       TEST CHARACTER 
          MI,X4  SPR5        IF 00 OR SPACE 
          SA6    B6+X2       STORE CHARACTER
          SB7    B7+B1       COUNT CHARACTERS 
          SX2    X2+B1       C = C + 1
          LT,B7,B5  SPR4     LOOP UNTIL WORD EXHAUSTED
  
 SPR5     SX6    X2          STORE UPDATED C
          SA6    A2 
          JP     EXIT.       RETURN 
  
  
          END 
