*COMDECK  COMCWTS            WRITE CODED LINE FROM STRING BUFFER.        COMCWTS
 WTS      CTEXT  COMCWTS - WRITE CODED LINE FROM STRING BUFFER.          COMCWTS
 WTS      SPACE  4,10                                                    COMCWTS
          IF     -DEF,QUAL$,1                                            COMCWTS
          QUAL   COMCWTS                                                 COMCWTS
          BASE   D                                                       COMCWTS
*         COMMENT COPYRIGHT CONTROL DATA CORPORATION. 1970, 1978.        COMCWTS
 WTS      SPACE  4,10                                                    COMCWTS
***       WTS - WRITE CODED LINE FROM STRING BUFFER.                     COMCWTS
*                                                                        COMCWTS
*         R. S. HORECK.      71/05/19.                                   COMCWTS
*         S. R. MCPHERSON.   74/09/30.                                   COMCWTS
*         C. J. CONRAD.      81/08/06.
* 
*         ******************************************************* 
*         * THIS COMMON DECK IS PART OF THE COMMON COMMON DECKS * 
*         * RESIDING ON THE COMPASS PROGRAM LIBRARY, AND BEING  * 
*         * MAINTAINED BY THE COMPASS PROJECT.  ANY CHANGES     * 
*         * REQUIRED SHOULD BE DIRECTED TO THE COMPASS PROJECT  * 
*         * THROUGH THE PROPER PROCEDURE.                       * 
*         ******************************************************* 
* 
*                                                                        COMCWTS
*         WTS PACKS A STRING INTO WORDS AND WRITES A LINE.               COMCWTS
 WTS      SPACE  4,10                                                    COMCWTS
***       WTS TRANSFERS 1 CODED LINE FROM A STRING BUFFER TO             COMCWTS
*         A CIO BUFFER WITH TRAILING SPACE SUPPRESSION.                  COMCWTS
*         CHARACTERS IN THE WORKING BUFFER ARE PACKED AND STORED IN      COMCWTS
*         THE CIRCULAR BUFFER.                                           COMCWTS
*         IF THE BUFFER BECOMES SUFFICIENTLY FULL TO REQUIRE WRITING,    COMCWTS
*         OR THE DEVICE TYPE INDICATES A NOS/BE TERMINAL,                COMCWTS
*         WTS WILL PERFORM A *WRITE* FUNCTION UNLESS THE SYMBOL *WRIF$*  COMCWTS
*         IS DEFINED. IN THIS CASE, THE CIO FUNCTION THAT IS IN THE FET  COMCWTS
*         WILL BE RE-ISSUED.                                             COMCWTS
*                                                                        COMCWTS
*         ENTRY  (X2) = ADDRESS OF FET FOR FILE.                         COMCWTS
*                (B6) = FWA WORKING BUFFER.                              COMCWTS
*                (B7) = WORD COUNT OF WORKING BUFFER.                    COMCWTS
*                IF (B7) = 0, NO TRANSFER WILL BE PERFORMED.             COMCWTS
*                                                                        COMCWTS
*         EXIT   (X2) = ADDRESS OF FET FOR FILE.                         COMCWTS
*                (B6) = WORD COUNT OF DATA WRITTEN.                      COMCWTS
*                (B1) = 1.                                               COMCWTS
*                                                                        COMCWTS
*         USES   X - 1, 2, 3, 4, 6, 7.                                   COMCWTS
*                B - 1, 2, 3, 4, 5, 6, 7.                                COMCWTS
*                A - 1, 2, 3, 4, 6, 7.                                   COMCWTS
*                                                                        COMCWTS
*         CALLS  DCB=, WTX=.                                             COMCWTS
                                                                         COMCWTS
                                                                         COMCWTS
 +        EQ     WTS3        ENTRY FROM DCB= ON A WRITE REQUEST          COMCWTS
                                                                         COMCWTS
 WTS=     SUBR               ENTRY/EXIT                                  COMCWTS
          SA4    WTS=        SET RETURN ADDRESS                          CPSA104
          IF     -DEF,B1=1,1                                             COMCWTS
          SB1    1                                                       COMCWTS
                                                                         COMCWTS
          ZR     B7,WTS=     IF WORKING BUFFER EMPTY, RETURN             CPSA104
          SA1    X2+4        (B5) = LIMIT                                COMCWTS
          SB4    B6+B7                                                   COMCWTS
          SB5    X1                                                      COMCWTS
          SX7    1R                                                      COMCWTS
          SA1    B4-B1       READ LAST CHARACTER                         COMCWTS
          SB2    B1+B1       (2)                                         COMCWTS
 WTS1     BX6    X1-X7       CHECK FOR BLANKS                            COMCWTS
          SA1    A1-B1       DECREMENT CHARACTER POSITION                COMCWTS
          ZR     X6,WTS1     IF BLANK                                    COMCWTS
          SB7    A1+B2       (B7) = LWA + 1                              COMCWTS
          LT     B6,B7,WTS2  IF NOT TO PAST START OF BUFFER              COMCWTS
          SB7    B6+B1                                                   COMCWTS
 WTS2     SA3    X2+1        (A3) = ADDRESS OF FIRST                     COMCWTS
          SX4    0           (X4) = WORD COUNT TRANSFERED TO BUFFER      COMCWTS
                                                                         COMCWTS
*         INITIALIZE REGISTERS FOR TRANSFER.                             COMCWTS
                                                                         COMCWTS
 WTS3     SA1    A3-B1       SAVE FET STATUS
          SA2    A3+B1       (X2) = IN
          BX6    X1 
          SA1    A2+B1       OUT
          SA6    WTSA 
          SB3    X2+B1       (B3) = IN+1                                 COMCWTS
          SB4    X1                                                      COMCWTS
          SX6    B4-B3       OUT - IN+1                                  COMCWTS
          PL     X6,WTS4     IF OUT .GE. IN+1                            COMCWTS
          SX6    B5-B3       LIMIT - IN+1                                COMCWTS
 WTS4     SB4    X6          (B4) = FREE BUFFER SPACE                    COMCWTS
          SX3    X2          (X3) = IN                                   COMCWTS
          NZ     X6,WTS6     IF SPACE AVAILABLE                          COMCWTS
                                                                         COMCWTS
*         PROCESS EXHAUSTED FREE BUFFER SPACE.                           COMCWTS
                                                                         COMCWTS
 WTS5     SA1    WTSA        GET FET STATUS 
          SA2    A3+B1       (A2) = ADDRESS OF IN 
          SB2    X1          (B2) = FET STATUS
          SX2    X3          (X2) = IN                                   COMCWTS
          NE     B3,B5,=XDCB=  IF IN+1 .NE. LIMIT                        COMCWTS
          SA1    A3          (X1) = FIRST                                COMCWTS
          SX6    X1                                                      COMCWTS
          SA1    A3-B1       FET+0
          SB2    X1          (B2) = FET STATUS
          SA1    A2+B1       OUT                                         COMCWTS
          IX7    X1-X6       OUT - IN+1                                  COMCWTS
          SB3    X6          IN+1 = FIRST                                COMCWTS
          ZR     X7,=XDCB=   IF IN+1 = OUT                               COMCWTS
          SB4    X7          (B4) = FREE BUFFER SPACE                    COMCWTS
                                                                         COMCWTS
*         CHECK ASSEMBLY BUFFER.                                         COMCWTS
                                                                         COMCWTS
 WTS6     SB2    B6+10       SET LAST CHARACTER                          COMCWTS
          MX6    0           CLEAR ASSEMBLY                              COMCWTS
          SA1    B6          GET FIRST CHARACTER                         COMCWTS
          LT     B7,B2,WTS8  IF ASSEMBLY OVERRUNS WORKING BUFFER         COMCWTS
          SA2    A1+B1       GET SECOND CHARACTER                        COMCWTS
          SB6    A2+B1       INCREMENT CHARACTER ADDRESS                 COMCWTS
                                                                         COMCWTS
*         ASSEMBLE WORD.                                                 COMCWTS
                                                                         COMCWTS
 WTS7     LX1    6           POSITION ODD CHARACTER                      COMCWTS
          SB6    B6+2        ADVANCE CHARACTER ADDRESS                   COMCWTS
          BX6    X6+X1       ASSEMBLE CHARACTER                          COMCWTS
          SA1    A2+B1       GET NEXT ODD CHARACTER                      COMCWTS
          BX6    X6+X2       ASSEMBLE CHARACTER                          COMCWTS
          SA2    A1+B1       GET NEXT EVEN CHARACTER                     COMCWTS
          LX6    12          POSITION ASSEMBLY                           COMCWTS
          NE     B6,B2,WTS7  LOOP FOR 10 CHARACTERS                      COMCWTS
          LX1    6           POSITION 9TH CHARACTER                      COMCWTS
          BX6    X6+X2       ASSEMBLE CHARACTER                          COMCWTS
          SB3    B3+B1       IN+1 = IN+1 + 1                             COMCWTS
          BX6    X6+X1       ASSEMBLE CHARACTER                          COMCWTS
          SB4    B4-B1       DECREMENT FREE BUFFER SPACE                 COMCWTS
          SA6    X3          STORE WORD                                  COMCWTS
          SX4    X4+B1       COUNT WORD                                  COMCWTS
          SX3    B3-B1       IN = IN+1                                   COMCWTS
          NZ     B4,WTS6     LOOP TO LAST CHARACTER OF FULL BUFFER       COMCWTS
          EQ     WTS5        CHECK BUFFER POINTERS                       COMCWTS
                                                                         COMCWTS
*         PROCESS LAST .LE. 9 CHARACTERS.                                COMCWTS
                                                                         COMCWTS
 WTS8     SX7    0           SET ADD-ON CHARACTER                        COMCWTS
          SB2    54          (B2) = SHIFT COUNT                          COMCWTS
          EQ     B6,B7,WTS10 IF WORKING BUFFER EMPTY                     COMCWTS
          SX2    B7-B6       SET CHARACTER COUNT REMAINING               COMCWTS
          LX2    59-0        CHECK FOR ODD OR EVEN CHARACTER COUNT       COMCWTS
          PL     X2,WTS9     IF EVEN CHARACTER COUNT                     COMCWTS
          SX7    1R                                                      COMCWTS
 WTS9     LX1    X1,B2       POSITION CHARACTER                          COMCWTS
          SB6    B6+B1       ADVANCE CHARACTER ADDRESS                   COMCWTS
          SB2    B2-6        DECREMENT SHIFT COUNT                       COMCWTS
          BX6    X6+X1       ASSEMBLE CHARACTER                          COMCWTS
          SA1    B6          GET NEXT CHARACTER                          COMCWTS
          NE     B6,B7,WTS9  LOOP TO END OF BUFFER                       COMCWTS
                                                                         COMCWTS
*         PROCESS LAST WORD.                                             COMCWTS
                                                                         COMCWTS
 WTS10    NZ     X7,WTS11    IF ODD NUMBER OF CHARACTERS                 COMCWTS
          ZR     B2,WTS11    IF WORD FULL                                COMCWTS
          SA1    A1-1        GET LAST CHARACTER IN BUFFER                COMCWTS
          NZ     X1,WTS11    IF NOT *00* CHARACTER                       COMCWTS
          SX7    2R          PRESERVE *00* CHARACTER WITH *  *           COMCWTS
          SB2    B2-6        REVISE SHIFT COUNT                          COMCWTS
 WTS11    LX7    X7,B2       ADD LAST CHARACTER(S)                       COMCWTS
          SA2    A3+B1       SET (A2) = IN                               COMCWTS
          MX1    -12                                                     COMCWTS
          BX6    X6+X7                                                   COMCWTS
          SX4    X4+B1       COUNT WORD                                  COMCWTS
          SA6    X3          STORE LAST WORD                             COMCWTS
          BX7    -X1*X6                                                  COMCWTS
          SX2    B3          IN = IN+1                                   COMCWTS
          SB6    X4          SET WORD COUNT TRANSFERRED                  COMCWTS
          SA3    A3          (X3) = FIRST                                COMCWTS
          ZR     X7,WTS13    IF VALID END OF LINE, EXIT                  COMCWTS
          SB3    B3+B1       ADVANCE IN+1                                COMCWTS
          SB4    B4-B1       DECREMENT FREE BUFFER SPACE                 COMCWTS
          MX1    -6                                                      COMCWTS
          BX1    -X1*X7      GET LAST CHARACTER                          COMCWTS
          SX3    X2+         (X3) = IN                                   COMCWTS
          SB6    B7+         RESET CHARACTER POSITION                    COMCWTS
          ZR     B4,WTS5     IF FREE SPACE EXHAUSTED                     COMCWTS
          SX6    B0+                                                     COMCWTS
          NZ     X1,WTS12    IF NOT *00* CHARACTER                       COMCWTS
          SX6    2R          PRESERVE *00* CHARACTER WITH *  *           COMCWTS
 WTS12    LX6    48                                                      COMCWTS
          SB6    X4+B1       RESET WORD COUNT                            COMCWTS
          SA6    X2                                                      COMCWTS
          SX2    B3          IN = IN+1                                   COMCWTS
 WTS13    SA1    A2+B1       SET OUT                                     COMCWTS
          SB4    X1                                                      COMCWTS
          EQ     =XWTX=      EXIT                                        COMCWTS
  
  
 WTSA     CON    0           FET STATUS PRIOR TO READING OUT
 WTS      SPACE  4,10                                                    COMCWTS
          BASE   *                                                       COMCWTS
 QUAL$    IF     -DEF,QUAL$                                              COMCWTS
          QUAL   *                                                       COMCWTS
 WTS=     EQU    /COMCWTS/WTS=                                           COMCWTS
 QUAL$    ENDIF                                                          COMCWTS
 WTS      ENDX                                                           COMCWTS
