COMCBAN 
COMMON
          CTEXT  COMCBAN - ENCODE BANNER MESSAGE. 
          SPACE  4
          IF     -DEF,QUAL$ 
          QUAL   COMCBAN
          ENDIF 
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       BAN - ENCODE BANNER MESSAGE.
* 
*         P. J. ENGLE        82/10/10.
          SPACE  4,10 
***       *COMCBAN* WILL ENCODE UP TO EIGHT LARGE CHARACTERS
*         (12 X 16) OR TEN SMALL CHARACTERS (10 X 10) INTO A
*         PATTERN AND WRITE IT TO THE SPECIFIED BUFFER. 
*         SMALL CHARACTERS ARE ENCODED IF THE SYMBOL *SMCH$*
*         IS DEFINED.  OTHERWISE, LARGE CHARACTERS ARE ENCODED. 
* 
*         ENTRY  (A2) = BUFFER ADDRESS. 
*                (X4) = WORD TO BE ENCODED, LEFT-JUSTIFIED, ZERO
*                       FILLED. 
* 
*         EXIT   MESSAGE ENCODED AND WRITTEN TO BUFFER. 
*                (A2) = LWA + 1 OF LAST WORD WRITTEN IN BUFFER. 
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 1, 2, 7. 
*                B - 2, 3, 4, 5, 6, 7.
* 
*         XREF   COMTBAN. 
          SPACE  4,10 
*         CONSTANTS.
  
  
 .SMCH    IF     DEF,SMCH$
  
 CHPW     EQU    10          MAXIMUM CHARACTERS TO ENCODE 
 LNCH     EQU    10          LINES PER CHARACTER
 NWPL     EQU    2           CM WORDS PER CHARACTER IN *COMTBAN* TABLE
*                            (THIS MUST BE A POWER OF 2)
  
 LDSZ     EQU    12          SIZE OF LINE DESCRIPTOR IN *COMTBAN* TABLE 
*                            (THIS MUST EVENLY DIVIDE INTO 60)
  
 TSPC     EQU    12          TOTAL SIZE OF CHARACTER (INCLUDES SPACES 
*                            AFTER THE CHARACTER) 
  
          ERRNG  LDSZ-TSPC   CHARACTER SIZE LARGER THAN DESCRIPTOR
  
 .SMCH    ELSE
  
 CHPW     EQU    8           MAXIMUM CHARACTERS TO ENCODE 
 LNCH     EQU    16          LINES PER CHARACTER
 NWPL     EQU    4           CM WORDS PER CHARACTER IN *COMTBAN* TABLE
*                            (THIS MUST BE A POWER OF 2)
  
 LDSZ     EQU    15          SIZE OF LINE DESCRIPTOR IN *COMTBAN* TABLE 
*                            (THIS MUST EVENLY DIVIDE INTO 60)
  
 TSPC     EQU    14          TOTAL SIZE OF CHARACTER (INCLUDES SPACES 
*                            AFTER THE CHARACTER) 
  
          ERRNG  LDSZ-TSPC   CHARACTER SIZE LARGER THAN DESCRIPTOR
  
 .SMCH    ENDIF 
  
 BLSP     CON    4L          FOUR BLANKS
 LNCT     CON    LNCH        LINE COUNT 
 CTSI     EQU    NWPL/2      CHARACTER TABLE SHIFT INDEX
          SPACE  4,10 
 BAN      SUBR               ENTRY/EXIT 
          SB3    B0+         BYTE BIT NUMBER
          SB4    B0+         CHARACTER TABLE WORD 
          SX6    LNCH        INITIALIZE LINE COUNT
          SA6    LNCT 
 BAN1     SB6    CHPW        MAXIMUM CHARACTERS TO ENCODE 
          SA1    BLSP        ENSURE FIRST FOUR CHARACTERS OF LINE BLANK 
          BX7    X1 
          SB2    30          INITIAL SHIFT FOR STORING WORD 
          SB5    6
  
*         GET CHARACTER.
  
 BAN2     LX2    X4,B5       SET NEXT CHARACTER 
          MX3    -6 
          BX3    -X3*X2 
          SB6    B6-B1
          ZR     X3,BAN6     IF THROUGH PROCESSING CHARACTERS FOR LINE
          NG     B6,BAN6     IF MAXIMUM CHARACTERS PROCESSED
          BX1    X3 
          LX1    CTSI 
          SB7    X1+TBAN
  
*         PROCESS CHARACTER BIT PATTERN.
  
          SA1    B7+B4       GET CHARACTER BIT PATTERN
          LX1    X1,B3
          SB7    TSPC 
 BAN3     SX6    1R 
          PL     X1,BAN4     IF BIT NOT SET 
          SX6    X3 
 BAN4     LX6    X6,B2
          BX7    X6+X7       BUILD WORD TO STORE
          SB2    B2-6        UPDATE SHIFT FOR STORING WORD
          PL     B2,BAN5     IF WORD NOT COMPLETE 
          SA7    A2          STORE WORD 
          SA2    A2+B1       UPDATE POINTER TO BUFFER 
          SX7    B0+
          SB2    54          RESET SHIFT COUNT
 BAN5     LX1    B1          CHECK FOR COMPLETION 
          SB7    B7-B1
          NZ     B7,BAN3     IF NOT ALL BITS PROCESSED
          SB5    B5+6 
          EQ     BAN2        CHECK NEXT CHARACTER 
  
*         IF FINISHED PROCESSING ONE LINE.
  
 BAN6     ZR     X7,BAN7     IF NO WORD TO BE WRITTEN 
          MX3    -12
          BX3    -X3*X7 
          ZR     X3,BAN7     IF WORD CONTAINS EOL 
          SA7    A2          WRITE WORD 
          SA2    A2+B1       UPDATE POINTER TO BUFFER 
          SX7    B0+
 BAN7     SA7    A2          WRITE EOL
          SA2    A2+B1
          SA1    LNCT        DECREMENT LINE COUNT 
          SX6    X1-1 
          SA6    A1 
          ZR     X6,BANX     IF BANNER MESSAGE ENCODED
          SB3    B3+LDSZ
          SX1    B3-60
          NZ     X1,BAN1     IF NOT AT CHARACTER TABLE WORD BOUNDARY
          SB4    B4+B1       UPDATE INDEX TO CHARACTER TABLE WORD 
          SB3    0
          EQ     BAN1        ENCODE NEXT LINE 
          SPACE  4,10 
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 BAN      EQU    /COMCBAN/BAN 
 QUAL$    ENDIF 
          ENDX
