COMCUSB 
COMMON
          CTEXT  COMCUSB - UNPACK DATA BLOCK TO STRING BUFFER.
          SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCUSB
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 USB      SPACE  4
***       USB - UNPACK DATA BLOCK TO STRING BUFFER. 
*         D. A. HIVELEY.     72/03/01.
*         S. R. MCPHERSON.   74/09/30.
*         A. D. FORET.       74/12/04. RESEQUENCE.
 USB      SPACE  4
***       USB - UNPACK DATA BLOCK TO STRING BUFFER. 
* 
*         IF THE SYMBOL USBL$ IS DEFINED IN THE USER PROGRAM, THE 
*         VARIABLE LENGTH STRING BUFFER OPTION IS SELECTED.  THIS 
*         VARIABLE LENGTH OPTION REQUIRES THAT THE STRING BUFFER USBB,
*         OF LENGTH SPECIFIED BY B6 UPON ENTRY, ALSO BE DEFINED IN THE
*         USER PROGRAM. 
* 
*         IF THE SYMBOL USBA$ IS DEFINED IN THE USER PROGRAM, 12 BIT
*         ASCII CHARACTERS WILL BE CORRECTLY UNPACKED INTO THE STRING 
*         BUFFER.  (B3) DEFINES WHETHER OR NOT ASCII UNPACKING WILL 
*         BE DONE.
* 
*         ENTRY  (B1) - 1.
*                (B2) - FWA OF PACKED DATA. 
*                (B3) - .EQ. 0, IF NORMAL CHARACTER SET.
*                       .NE. 0, IF ASCII 6/12 CHARACTER SET.
*                       THIS CONDITION IS USED ONLY WHEN ASCII 6/12 
*                       UNPACKING OPTION (USBA$) IS DEFINED.
*                (B6) - STRING BUFFER LENGTH, REQUIRED AND USED ONLY
*                       WHEN VARIABLE LENGTH STRING BUFFER OPTION 
*                       SELECTED (USBL$ DEFINED). 
* 
*         EXIT   CHARACTER UNPACKED 1 TO A WORD, RIGHT JUSTIFIED
*                            STARTING AT (USBB). A MAXIMUM OF 
*                            80 CHARACTERS ARE ACCOMMODATED, BY 
*                            DEFAULT.  AN ADDITIONAL WORD IS PROVIDED 
*                            FOR THOSE PROGRAMS THAT GUARANTEE A
*                            TERMINATOR AT THE END OF STRING. 
*                (A1) = LWA PACKED DATA PROCESSED.
*                ((A6)) = LWA OF UNPACK BUFFER. 
*                (B2) = 0, IF MAXIMUM CHARACTERS PROCESSED. 
*                (B6) = FWA OF UNPACK BUFFER. 
*                (B7) = LWA OF UNPACKED BUFFER. 
*                (USBC) = LWA OF UNPACKED BUFFER. 
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 1, 6.
*                B - 2, 6, 7. 
  
  
 USB3     SX6    B7+         ADDRESS OF LAST CHARACTER
          SA6    USBC 
          SB6    USBB        SET BEGINNING ADDRESS OF STRING
  
 USB      PS                 ENTRY/EXIT 
          SA1    B2+         CONTROL CARD BUFFER
          SB7    USBB-1      DATA BLOCK STRING BUFFER 
          MX2    -6 
          IF     DEF,USBL$
          SB2    B6+
          ELSE   1
          SB2    80 
          SB6    B0          SET CHARACTER COUNT IN WORD
 .A       IF     DEF,USBA$
          SX7    B0+
 .A       ENDIF 
 USB1     LX1    6
          SB6    B6+B1       BUMP CHARACTER COUNT THIS WORD 
          BX6    -X2*X1 
 .B       IF     DEF,USBA$
          BX6    X6+X7
 .B       ENDIF 
          BX1    X2*X1       CLEAR CURRENT CHARACTER FROM WORD
 .C       IF     DEF,USBA$
          ZR     B3,USB2     IF ASCII 6/12 NOT SELECTED 
          SX3    X6-74B 
          ZR     X3,USB2.2   IF ESCAPE CHARACTER *74* 
          SX3    X6-76B 
          ZR     X3,USB2.2   IF ESCAPE CHARACTER *76* 
          SX7    B0+
 .C       ENDIF 
 USB2     SB7    B7+B1       INCREMENT STRING BUFFER ADDRESS
          SB2    B2-B1       DECREMENT CHARACTER COUNT
          SA6    B7+         STORE CURRENT CHARACTER IN STRING BUFFER 
          ZR     B2,USB3     IF MAXIMUM CHARACTERS PROCESSED
 USB2.1   NZ     X1,USB1     IF MORE CHARACTERS 
          SX6    B6-9        CHECK CHARACTERS PROCESSED THIS WORD 
          NG     X6,USB3     IF END OF LINE 
          SB6    B0          RESET CHARACTER COUNT WITHIN WORD
          SA1    A1+B1       GET NEXT WORD
          ZR     X1,USB3     IF END OF LINE 
          NZ     X6,USB1     IF LAST WORD COMPLETELY PROCESSED
          EQ     USB2        PROCESS *00* TERMINATING PREVIOUS WORD 
  
 .D       IF     DEF,USBA$
 USB2.2   BX7    X6 
          LX7    6
          EQ     USB2.1      PROCESS NEXT CHARACTER 
 .D       ENDIF 
          SPACE  4
          IF     -DEF,USBL$,2 
          IF     -DEF,USBB,1
 USBB     BSS    81          STRING BUFFER
          IF     -DEF,USBC,1
 USBC     BSS    1
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 USB      EQU    /COMCUSB/USB 
          IF     -DEF,USBL$,2 
          IF     -DEF,USBB,1
 USBB     EQU    /COMCUSB/USBB
          IF     -DEF,USBC,1
 USBC     EQU    /COMCUSB/USBC
 QUAL$    ENDIF 
          BASE   *
          ENDX
