*COMDECK /PUTDZ/
 PUT$Z    TITLE     GET RL FOR RT=Z PUT 
*#
*0        ENTRY PUT$Z.
*         IF RRL IS SPECIFIED, ASSUME USER KNOWS WHAT HE IS DOING 
*         AND START BACKWARD SEARCH AT WSA-1+(RRL/10). OTHERWISE
*         START BACKWARD SEARCH AT WSA-1+(FL/10). 
*         IF USER IS DOING PUTP-S, EXIT (WITH RRL/10 OR FL/10 IN X3)
*         BECAUSE WE ZERO TRAILING BLANKS ONLY ON THE LAST PUTP.
*#
*         KEEP BLANKS AMD MAGIC TOGETHER AND IN ORDER.
 BLANKS   DATA      10H 
 MAGIC    DATA      40404040404040404040B 
ABLANKS   DATA      00400040004000400040B 
AMAGIC    DATA      40004000400040004000B 
 PUT$Z    CAP.RM
          F.RM      RRL,3 
          NZ        X3,GOTLEN 
          F.RM      FL,3
 GOTLEN   BSS       0 
          ON.RM     PPT,JPB5       CANT FIND REC END ON Z PARTIALS
          BX7       X3
          SX4       B5             SAVE B5 AROUND CHWR$RM CALL
          SB5       GOTWDS
          EQ        =YCHWR$RM 
 GOTWDS   BSS       0 
          SB5       X4             RESTORE B5 
          F.RM      WSA,1,,,6 
 .MD      IFNE      #BETA#,0
WSA       COMPOSED  WSAB,1,WSAD,21
          LX1       59-21 
          AX1       59-21 
 WSA      COMPOSED  WSAB,1,WSAD,21
          LX1       -22 
          AX1       -22            PUT LCM INDICATOR IN SIGN BIT
 .MD      ENDIF 
          SX2       X7
          SX5       X7-1           NUM WORDS -1 
          AX7       18
          IX3       X2+X2          ROUND UP--WILL TAKE CARE OF UNUSED 
          LX2       3                CHARS AT COMXIT
          IX3       X2+X3 
          SX0       -10            REC LEN DECREMENTER (1WD)
          IX6       X1+X5          A(LAST WORD) 
 .MD      IFNE      #BETA#,0
          OFF.RM    WSAB,SCM1      IF SCM WSA 
          RX1       X6             FETCH LAST WORD FROM LCM WSA 
          EQ        NXT1
          SPACE     1 
 SCM1     BSS       0 
 .MD      ENDIF 
          SA1    X6                FRTCH LAST WORD
 .MD      IFNE      #BETA#,0
 NXT1     BSS       0 
 .MD      ENDIF 
          F.RM      ASCII,2,,,4 
          SA4       BLANKS
          ZR        X2,NASCII 
          SA4       ABLANKS 
*         A4 MUST REMAIN UNTOUCHED TILL /PUTDZ/.102 
NASCII    BSS       0 
          ZR        X7,CHOOSLP
*#
*         IF RRL/FL IS NOT A MULTIPLE OF TEN, BLANK UNUSED CHARACTERS 
*         IN LAST WORD. 
*#
          MX2    1
          SB2       X7-59 
          LX2       B2             FORM MASK
          BX7       X2*X1          GOOD CHARACTERS
          BX2    -X2*X4            BLANKS 
          BX1       X2+X7 
*#
*         SEARCH BACK THROUGH WSA, DECREMENTING RRL/FL (X3), UNTIL
*         A NON-BLANK WORD IS FOUND, CONVERT WORD COUNT BACK TO 
*         CHARACTERS, AND RETURN TO CALLER THROUGH B5 
*#
 CHOOSLP  BSS 
 .MD      IFNE      #BETA#,0
          PL        X6,ZLOOP       IF SCM 
          SX5       1 
  
 ZLCM     BSS 
          IX2       X1-X4 
          NZ        X2,COMXIT      IF NOT ALL BLANKS
          IX6       X6-X5 
          IX3       X3+X0          DECREMENT CHAR COUNT 
          RX1       X6             LOAD PREVIOUS WORD 
          NZ        X3,ZLCM        LOOP IF NOT AT START 
  
          SX3       B1             EMPTY RECORD--SET RL=1 
          NG        X4,NTASCII
          SX3       X3+B1          BLANK LINE IN ASCII, RL=2
NTASCII   BSS       0 
          JP        B5
 .MD      ENDIF 
  
 ZLOOP    BSS    0
          IX2       X1-X4 
          NZ        X2,COMXIT      NO, EXIT 
          IX3    X3+X0             DECREMENT WORD COUNT 
          SA1       A1-B1          LOAD PREVIOUS WORD 
          NZ        X3,ZLOOP       LOOP IF NOT AT START 
  
          SX3       B1             EMPTY RECORD--SET RL=1 
          NG        X4,JPB5 
          SX3       X3+B1          BLANK ASCII LINE, RL=2 
 JPB5     JP        B5
  
 COMXIT   BSS       0 
*#
*         FOUND A WORD WITH AT LEAST ONE NON-BLANK CHARACTER -- 
*         FIND OUT HOW MANY BLANKS AND DECREMENT THE CHARACTER
*         COUNT BY THAT MANY. 
*#
          SX7       B1
          BX2       X1-X4 
*         A4 SHOULD NOT HAVE BEEN CHANGED SINCE /PUTDZ/.8 
          SA1       A4+B1          MAGIC
          IX7       X2-X7 
          BX7       -X2*X7
          BX7       X7*X1 
          CX2       X7             NUMBER OF TRAILING BLANKS
          IX3       X3-X2          RECORD LENGTH
          NG        X4,JPB5 
          IX3       X3-X2          IF ASCII RL - 2 X NUMBER OF SPACES 
          JP        B5
 PUT$ZT   TITLE     ZERO TRAILING BLANKS RT=Z 
 36B      IS.IN     0 
*#
*0        ENTRY PUT$ZT. 
*         RECORD HAS BEEN TRANSFERRED TO THE BUFFER. LOAD LAST WORD 
*         TRANSFERRED.
*#
 PUT$ZT   BSS       0 
*#
*         IF BCC"0, RECORD DOES NOT END ON WORD BOUNDARY SO ZERO
*         UNUSED BITS IN LAST WORD. 
*#
          F.RM      BCC,X2                                              0030   9
          ZR        X2,ZSIMP                                            0030  10
          F.RM      LIMIT,B2
          LT        B3,B2,NOTLIM
          F.RM      FIRST,B3       IN CASE B3=LIMIT 
 NOTLIM   BSS 
          SX1       10
          SB3       B3+B1          ADJUST 
          IX3       X1-X2          10-NO. GOOD CHARS
          INC.RM    BL,X3          INCLUDE UNUSED CHARS IN BL 
          SA3       B3-B1 
          IX7       X2+X2          *2                                   0030  15
          LX2       2              *4                                   0030  16
          IX7       X7+X2          *6                                   0030  17
          MX2       1                                                   0030  18
          SB2       X7-1                                                0030  19
          AX1       X2,B2          MASK(6*BCC)
          SB2       B2-59 
          BX3       X1*X3          REMOVE TRASH 
          SB2       -B2            60-6*BCC 
          SET.RM    BCC,0                                               0030  24
          F.RM      ASCII 
          NZ        X1,CZBYTE      IF ASCII DO NOT CHECK FOR 00B OR 61B 
          EQ        ZEROED
*#
*         IF BCC=0, ZERO NON-BLANK CHARACTERS IN LAST WORD. 
*#
AZSIMP    BSS      0
*         ZERO TRAILING BLANKS FOR ASCII DATA 
          SA1       ABLANKS 
          SX7       B1
          BX2       X3-X1          REMOVE ASCII BLANKS
          IX7       X2-X7 
          LX1       6              MAGIC
          BX7       -X2*X7
          BX7       X7*X1 
          BX1       X7
          LX7       49
          IX2       X1-X7 
          BX1       X1+X2 
          BX3       -X1*X3
          CX2       X1
          SB2       X2
          EQ        CZBYTE
 ZSIMP    BSS       0                                                   0030  25
*         ZERO TRAILING BLANKS
          SA3       B3-B1 
          F.RM      ASCII 
          NZ        X1,AZSIMP 
          SA1       BLANKS
          SX7       B1
          BX2       X3-X1 
          IX7       X2-X7 
          SA1       A1+B1          40404040404040404040B
          BX7       -X2*X7
          BX7       X7*X1 
          BX1       X7
          LX7       55
          IX2       X1-X7 
          BX1       X1+X2          MASK 
          BX3       -X1*X3
          CX2       X1             NUMBER OF BLANKS IN BITS 
          SB2       X2
*#
*         CHECK LAST NON-BLANK CHARACTER FOR ZERO (COLON) OR
*         RIGHT BRACKET AND ADD A BLANK AFTER IT. IF THEY ARE 
*         IN RIGHT-MOST CHARACTER POSITION, USE ANOTHER WORD. 
*#
 ZEROED   BSS       0 
          MX7       -6
          AX2       X3,B2          SHIFT LAST CHAR TO BOTTOM OF WORD
          BX1       -X7*X2
          ZR        X1,ADDB        IF COLON 
          SX1       X1-63B
          NZ        X1,CZBYTE      IF NOT ] 
 ADDB     BSS       0 
          NZ        B2,MIDWD       JUMP IF NOT AT END OF WORD 
          GET1.SQ   OWM            CHECK FOR ONE WORD 
          SX7       55B 
          LX7       60-6           SET BLANK PLUS ZERO WORD 
          SA7       B3-B1          WRITE TO BUFFER
          EQ        =YPTRT$SQ 
 MIDWD    BSS       0 
          SB4      74B
          EQ       B2,B4,CZBYTE   TEST ALL BLANK-WORD 
          SX1       55B 
          SB2       B2-6
          LX1       B2
          BX3       X3+X1          ADD BLANK
*#
*         ADD ZERO BYTE TO LAST WORD. IF WORD ALREADY CONTAINS
*         9 OR 10 CHARACTERS, ADD A FULL ZERO WORD. RETURN DIRECTLY 
*         TO PUT$SQ VIA   EQ =YPTRT$SQ .
*#
 CZBYTE   BSS       0 
          BX7       X3
          SB2       B2-12 
          SA7       A3             RESET WORD WITH ZERO PAD 
          GE        B2,B0,=YPTRT$SQ 
          GET1.SQ   OWM 
          MX7       0 
          SA7       B3-B1          ADD ZERO WORD
          EQ        =YPTRT$SQ 
* END /PUTDZ/ 
