home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / com / bbs / downsrt / source / downfnt.c < prev    next >
C/C++ Source or Header  |  1991-06-05  |  26KB  |  483 lines

  1. /* ============================================================= */
  2. /*  Rob Hamerling's MAXIMUS DOWNload file SORT and list utility. */
  3. /*  -> Block font definitions and generation routine.            */
  4. /* ============================================================= */
  5.  
  6. #define INCL_BASE
  7. #include <os2.h>
  8.  
  9. #include <ctype.h>
  10. #include <stdio.h>
  11. #include <string.h>
  12.  
  13. #include "downsort.h"
  14.  
  15. struct _b8_patt {                       // 8 column font
  16.         unsigned c0:3, c1:3, c2:3, c3:3, c4:3, c5:3, c6:3, c7:3; };
  17. struct _b8x5 {                          // all fonts defined as 8x5
  18.          char           c;              // the character
  19.          unsigned char  k;              // number of active columns
  20.          struct _b8_patt p[5];          // 8 column x 5 lines pattern
  21.            };
  22.  
  23. /* ===================================================== */
  24. /* Generate string of block-characters (1 part per call) */
  25. /* ===================================================== */
  26. char *strnblk(b,n,f,k)
  27. char  *b;                               // b=input buffer (string)
  28. int   n;                                // number of characters
  29. int   f;                                // font number
  30. int   k;                                // part (relative line 0, 1 or 2)
  31. {
  32.   int   i,j,x,w;                        // counters
  33.  
  34.   static struct _b8x5 f1[] = {          // simple 5x3 font
  35.     {'A',6, 1,2,2,2,1,0,0,0, 3,1,1,1,3,0,0,0, 3,0,0,0,3,0,0,0,
  36.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  37.     {'B',6, 3,2,2,2,1,0,0,0, 3,2,2,2,1,0,0,0, 3,1,1,1,2,0,0,0,
  38.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  39.     {'C',6, 1,2,2,2,1,0,0,0, 3,0,0,0,0,0,0,0, 2,1,1,1,2,0,0,0,
  40.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  41.     {'D',6, 3,2,2,2,1,0,0,0, 3,0,0,0,3,0,0,0, 3,1,1,1,2,0,0,0,
  42.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  43.     {'E',6, 3,2,2,2,2,0,0,0, 3,2,2,0,0,0,0,0, 3,1,1,1,1,0,0,0,
  44.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  45.     {'F',6, 3,2,2,2,2,0,0,0, 3,1,1,0,0,0,0,0, 3,0,0,0,0,0,0,0,
  46.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  47.     {'G',6, 1,2,2,2,1,0,0,0, 3,0,0,1,1,0,0,0, 2,1,1,1,2,0,0,0,
  48.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  49.     {'H',6, 3,0,0,0,3,0,0,0, 3,1,1,1,3,0,0,0, 3,0,0,0,3,0,0,0,
  50.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  51.     {'I',4, 2,3,2,0,0,0,0,0, 0,3,0,0,0,0,0,0, 1,3,1,0,0,0,0,0,
  52.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  53.     {'J',6, 0,2,2,2,3,0,0,0, 0,0,0,0,3,0,0,0, 2,1,1,1,2,0,0,0,
  54.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  55.     {'K',6, 3,0,0,1,2,0,0,0, 3,2,2,1,0,0,0,0, 3,0,0,0,3,0,0,0,
  56.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  57.     {'L',6, 3,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0, 3,1,1,1,1,0,0,0,
  58.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  59.     {'M',6, 3,1,0,1,3,0,0,0, 3,2,3,2,3,0,0,0, 3,0,0,0,3,0,0,0,
  60.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  61.     {'N',6, 3,1,0,0,3,0,0,0, 3,2,3,1,3,0,0,0, 3,0,0,2,3,0,0,0,
  62.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  63.     {'O',6, 1,2,2,2,1,0,0,0, 3,0,0,0,3,0,0,0, 2,1,1,1,2,0,0,0,
  64.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  65.     {'P',6, 3,2,2,2,1,0,0,0, 3,1,1,1,2,0,0,0, 3,0,0,0,0,0,0,0,
  66.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  67.     {'Q',6, 1,2,2,2,1,0,0,0, 3,0,1,0,3,0,0,0, 2,1,1,2,1,0,0,0,
  68.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  69.     {'R',6, 3,2,2,2,1,0,0,0, 3,1,1,1,2,0,0,0, 3,0,2,1,1,0,0,0,
  70.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  71.     {'S',6, 1,2,2,2,2,0,0,0, 0,2,2,2,1,0,0,0, 1,1,1,1,2,0,0,0,
  72.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  73.     {'T',6, 2,2,3,2,2,0,0,0, 0,0,3,0,0,0,0,0, 0,0,3,0,0,0,0,0,
  74.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  75.     {'U',6, 3,0,0,0,3,0,0,0, 3,0,0,0,3,0,0,0, 2,1,1,1,2,0,0,0,
  76.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  77.     {'V',6, 3,0,0,0,3,0,0,0, 3,1,0,1,3,0,0,0, 0,2,3,2,0,0,0,0,
  78.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  79.     {'W',6, 3,0,0,0,3,0,0,0, 3,0,1,0,3,0,0,0, 2,3,2,3,2,0,0,0,
  80.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  81.     {'X',6, 2,1,0,1,2,0,0,0, 0,0,3,0,0,0,0,0, 1,2,0,2,1,0,0,0,
  82.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  83.     {'Y',6, 3,0,0,0,3,0,0,0, 2,3,1,3,2,0,0,0, 0,0,3,0,0,0,0,0,
  84.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  85.     {'Z',6, 2,2,2,2,3,0,0,0, 0,1,2,2,0,0,0,0, 3,1,1,1,1,0,0,0,
  86.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  87.     {'0',6, 1,2,2,3,1,0,0,0, 3,0,3,0,3,0,0,0, 2,3,1,1,2,0,0,0,
  88.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  89.     {'1',4, 1,3,0,0,0,0,0,0, 0,3,0,0,0,0,0,0, 1,3,1,0,0,0,
  90.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  91.     {'2',6, 1,2,2,2,1,0,0,0, 0,1,1,1,2,0,0,0, 3,1,1,1,1,0,0,0,
  92.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  93.     {'3',6, 1,2,2,2,1,0,0,0, 0,0,2,2,1,0,0,0, 2,1,1,1,2,0,0,0,
  94.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  95.     {'4',6, 0,0,1,2,3,0,0,0, 1,2,0,0,3,0,0,0, 2,2,2,2,3,0,0,0,
  96.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  97.     {'5',6, 3,2,2,2,2,0,0,0, 2,2,2,2,1,0,0,0, 2,1,1,1,2,0,0,0,
  98.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  99.     {'6',6, 1,2,2,2,0,0,0,0, 3,2,2,2,1,0,0,0, 2,1,1,1,2,0,0,0,
  100.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  101.     {'7',6, 2,2,2,2,3,0,0,0, 0,0,1,2,0,0,0,0, 0,3,0,0,0,0,0,0,
  102.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  103.     {'8',6, 1,2,2,2,1,0,0,0, 1,2,2,2,1,0,0,0, 2,1,1,1,2,0,0,0,
  104.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  105.     {'9',6, 1,2,2,2,1,0,0,0, 2,1,1,1,3,0,0,0, 0,1,1,1,2,0,0,0,
  106.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  107.     {'_',6, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,
  108.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  109.     {'*',6, 1,0,1,0,1,0,0,0, 1,3,2,3,1,0,0,0, 1,2,3,2,1,0,0,0,
  110.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  111.     {'-',4, 0,0,0,0,0,0,0,0, 1,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  112.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  113.     {'|',3, 0,3,0,0,0,0,0,0, 0,3,0,0,0,0,0,0, 0,3,0,0,0,0,0,0,
  114.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  115.     {'.',2, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,
  116.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  117.     {'(',4, 0,1,2,0,0,0,0,0, 3,0,0,0,0,0,0,0, 0,2,1,0,0,0,0,0,
  118.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  119.     {')',4, 2,1,0,0,0,0,0,0, 0,0,3,0,0,0,0,0, 1,2,0,0,0,0,0,0,
  120.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  121.     {'[',4, 3,2,2,0,0,0,0,0, 3,0,0,0,0,0,0,0, 3,1,1,0,0,0,0,0,
  122.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  123.     {']',4, 2,2,3,0,0,0,0,0, 0,0,3,0,0,0,0,0, 1,1,3,0,0,0,0,0,
  124.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  125.     {'/',6, 0,0,0,0,1,0,0,0, 0,0,1,2,0,0,0,0, 1,2,0,0,0,0,0,0,
  126.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  127.    {'\\',6, 1,0,0,0,0,0,0,0, 0,2,1,0,0,0,0,0, 0,0,0,2,1,0,0,0,
  128.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  129.     {'`',3, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  130.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  131.     {' ',4, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  132.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  133.         };
  134.  
  135.   static struct _b8x5 f2[] = {          // 7x5 pseudo stencil
  136.     {'A',8, 0,3,3,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,6,3,3,3,3,0,
  137.             3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0},
  138.     {'B',8, 3,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,6,3,3,3,0,0,
  139.             3,3,0,0,0,3,3,0, 3,3,6,3,3,3,0,0},
  140.     {'C',8, 0,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,0,0,0,0,0,0,
  141.             3,3,0,0,0,3,3,0, 0,3,6,3,3,3,0,0},
  142.     {'D',8, 3,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0,
  143.             3,3,0,0,0,3,3,0, 3,3,6,3,3,3,0,0},
  144.     {'E',8, 3,3,6,3,3,3,3,0, 3,3,0,0,0,0,0,0, 3,3,6,3,3,0,0,0,
  145.             3,3,0,0,0,0,0,0, 3,3,6,3,3,3,3,0},
  146.     {'F',8, 3,3,6,3,3,3,3,0, 3,3,0,0,0,0,0,0, 3,3,6,3,3,0,0,0,
  147.             3,3,0,0,0,0,0,0, 3,3,0,0,0,0,0,0},
  148.     {'G',8, 0,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,0,0,0,0,0,0,
  149.             3,3,0,0,2,3,3,0, 3,3,6,3,3,3,0,0},
  150.     {'H',8, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0, 3,3,6,3,3,3,3,0,
  151.             3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0},
  152.     {'I',6, 3,6,3,3,3,0,0,0, 0,6,3,3,0,0,0,0, 0,6,3,3,0,0,0,0,
  153.             0,6,3,3,0,0,0,0, 3,6,3,3,3,0,0,0},
  154.     {'J',8, 0,0,0,0,0,3,3,0, 0,0,0,0,0,3,3,0, 0,0,0,0,0,3,3,0,
  155.             3,6,0,0,0,3,3,0, 0,6,3,3,3,3,2,0},
  156.     {'K',8, 3,3,0,0,0,3,3,0, 3,3,0,3,3,0,0,0, 3,3,6,3,0,0,0,0,
  157.             3,3,0,3,3,0,0,0, 3,3,0,0,0,3,3,0},
  158.     {'L',8, 3,3,0,0,0,0,0,0, 3,3,0,0,0,0,0,0, 3,3,0,0,0,0,0,0,
  159.             3,3,0,0,0,0,0,0, 3,3,6,3,3,3,3,0},
  160.     {'M',8, 3,3,6,3,3,3,3,0, 3,3,0,3,0,3,3,0, 3,3,0,3,0,3,3,0,
  161.             3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0},
  162.     {'N',7, 3,3,6,3,3,3,0,0, 3,3,0,0,3,3,0,0, 3,3,0,0,3,3,0,0,
  163.             3,3,0,0,3,3,0,0, 3,3,0,0,3,3,0,0},
  164.     {'O',8, 0,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0,
  165.             3,3,0,0,0,3,3,0, 0,3,6,3,3,3,0,0},
  166.     {'P',8, 3,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,6,3,3,3,0,0,
  167.             3,3,0,0,0,0,0,0, 3,3,0,0,0,0,0,0},
  168.     {'Q',8, 0,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0,
  169.             3,3,0,0,3,3,0,0, 0,3,6,3,3,0,3,0},
  170.     {'R',8, 3,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 3,3,6,3,3,3,0,0,
  171.             3,3,0,3,0,0,0,0, 3,3,0,0,3,3,0,0},
  172.     {'S',8, 3,3,6,3,3,3,3,0, 3,3,0,0,0,0,0,0, 3,3,6,3,3,3,3,0,
  173.             0,0,0,0,0,3,3,0, 3,3,6,3,3,3,3,0},
  174.     {'T',8, 3,3,6,3,3,3,3,0, 0,0,6,3,3,0,0,0, 0,0,6,3,3,0,0,0,
  175.             0,0,6,3,3,0,0,0, 0,0,6,3,3,0,0,0},
  176.     {'U',8, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0,
  177.             3,3,0,0,0,3,3,0, 0,3,6,3,3,3,0,0},
  178.     {'V',8, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0,
  179.             0,3,6,0,3,3,0,0, 0,0,6,3,3,0,0,0},
  180.     {'W',8, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0, 3,3,0,3,0,3,3,0,
  181.             3,3,0,3,0,3,3,0, 0,3,6,3,3,3,0,0},
  182.     {'X',8, 3,3,0,0,0,3,3,0, 0,3,6,0,3,3,0,0, 0,0,6,3,3,0,0,0,
  183.             0,3,6,0,3,3,0,0, 3,3,0,0,0,3,3,0},
  184.     {'Y',8, 3,3,0,0,0,3,3,0, 3,3,0,0,0,3,3,0, 0,3,6,3,3,3,0,0,
  185.             0,0,0,3,3,0,0,0, 0,0,0,3,3,0,0,0},
  186.     {'Z',8, 3,6,3,3,3,3,3,0, 0,0,0,0,3,3,0,0, 0,0,0,3,3,0,0,0,
  187.             0,0,3,3,0,0,0,0, 3,6,3,3,3,3,3,0},
  188.     {'0',8, 0,6,3,3,3,3,0,0, 3,6,0,0,0,3,3,0, 3,6,0,3,0,3,3,0,
  189.             3,6,0,0,0,3,3,0, 0,6,3,3,3,3,0,0},
  190.     {'1',5, 3,3,3,0,0,0,0,0, 0,3,3,0,0,0,0,0, 0,3,3,0,0,0,0,0,
  191.             0,3,3,0,0,0,0,0, 3,3,3,3,0,0,0,0},
  192.     {'2',8, 3,3,6,3,3,3,0,0, 0,0,0,0,3,3,3,0, 3,3,6,3,3,3,0,0,
  193.             3,3,0,0,0,0,0,0, 3,3,6,3,3,3,3,0},
  194.     {'3',8, 0,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 0,0,0,0,3,3,0,0,
  195.             3,3,6,0,0,3,3,0, 0,3,6,3,3,3,0,0},
  196.     {'4',8, 3,3,0,0,3,3,0,0, 3,3,0,0,3,3,0,0, 3,3,6,3,3,3,3,0,
  197.             0,0,0,0,3,3,0,0, 0,0,0,0,3,3,0,0},
  198.     {'5',8, 3,3,6,3,3,3,3,0, 3,3,0,0,0,0,0,0, 3,3,6,3,3,3,0,0,
  199.             0,0,0,0,0,3,3,0, 3,3,6,3,3,3,0,0},
  200.     {'6',8, 0,6,3,3,3,3,0,0, 3,6,0,0,0,0,0,0, 3,6,3,3,3,3,0,0,
  201.             3,6,0,0,0,3,3,0, 0,6,3,3,3,3,0,0},
  202.     {'7',8, 3,6,3,3,3,3,0,0, 0,0,0,0,0,3,3,0, 0,0,0,3,3,0,0,0,
  203.             0,0,3,3,0,0,0,0, 0,0,3,3,0,0,0,0},
  204.     {'8',8, 0,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 0,3,6,3,3,3,0,0,
  205.             3,3,0,0,0,3,3,0, 0,3,6,3,3,3,0,0},
  206.     {'9',8, 0,3,6,3,3,3,0,0, 3,3,0,0,0,3,3,0, 0,3,6,3,3,3,3,0,
  207.             0,0,0,0,0,3,3,0, 0,3,6,3,3,3,3,0},
  208.     {'_',7, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  209.             0,0,0,0,0,0,0,0, 0,3,6,3,3,3,0,0},
  210.     {'*',8, 0,3,0,6,0,3,0,0, 0,0,3,6,3,0,0,0, 3,3,3,6,3,3,3,0,
  211.             0,0,3,6,3,0,0,0, 0,3,0,6,0,3,0,0},
  212.     {'-',5, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 3,6,3,3,0,0,0,0,
  213.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  214.     {'|',4, 0,3,3,0,0,0,0,0, 0,3,3,0,0,0,0,0, 0,3,3,0,0,0,0,0,
  215.             0,3,3,0,0,0,0,0, 0,3,3,0,0,0,0,0},
  216.     {'.',5, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  217.             0,0,0,0,0,0,0,0, 0,3,6,3,0,0,0,0},
  218.     {'(',5, 0,0,6,3,0,0,0,0, 0,3,6,0,0,0,0,0, 3,3,0,0,0,0,0,0,
  219.             0,3,6,0,0,0,0,0, 0,0,6,3,0,0,0,0},
  220.     {')',5, 0,3,5,0,0,0,0,0, 0,0,5,3,0,0,0,0, 0,0,0,3,3,0,0,0,
  221.             0,0,5,3,0,0,0,0, 0,3,5,0,0,0,0,0},
  222.     {'[',5, 0,3,6,3,0,0,0,0, 0,3,6,0,0,0,0,0, 0,3,6,0,0,0,0,0,
  223.             0,3,6,0,0,0,0,0, 0,3,6,3,0,0,0,0},
  224.     {']',5, 0,3,5,3,0,0,0,0, 0,0,5,3,0,0,0,0, 0,0,5,3,0,0,0,0,
  225.             0,0,5,3,0,0,0,0, 0,3,5,3,0,0,0,0},
  226.     {'/',7, 0,0,0,0,3,3,0,0, 0,0,0,3,3,0,0,0, 0,0,6,3,0,0,0,0,
  227.             0,3,6,0,0,0,0,0, 3,3,0,0,0,0,0,0},
  228.    {'\\',7, 0,3,3,0,0,0,0,0, 0,0,3,6,0,0,0,0, 0,0,0,6,3,0,0,0,
  229.             0,0,0,0,3,3,0,0, 0,0,0,0,0,3,3,0},
  230.     {'`',4, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  231.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  232.     {' ',5, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  233.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  234.      };
  235.  
  236.   static struct _b8x5 f3[] = {          // 7x4 robo-computer font
  237.     {'A',8, 0,3,2,2,2,3,0,0, 1,3,1,1,1,3,1,0, 3,3,0,0,0,0,3,0,
  238.             3,3,0,0,0,0,3,0, 0,0,0,0,0,0,0,0},
  239.     {'B',8, 3,2,2,2,2,3,0,0, 3,1,1,1,1,1,3,0, 3,3,0,0,0,0,3,0,
  240.             3,3,1,1,1,1,3,0, 0,0,0,0,0,0,0,0},
  241.     {'C',8, 3,2,2,2,2,2,3,0, 3,1,0,0,0,0,0,0, 3,3,0,0,0,0,0,0,
  242.             3,3,1,1,1,1,3,0, 0,0,0,0,0,0,0,0},
  243.     {'D',8, 3,2,2,2,2,2,3,0, 3,1,0,0,0,0,3,0, 3,3,0,0,0,0,3,0,
  244.             3,3,1,1,1,1,3,0, 0,0,0,0,0,0,0,0},
  245.     {'E',8, 3,2,2,2,2,2,2,0, 3,1,1,1,1,1,1,0, 3,3,0,0,0,0,0,0,
  246.             3,3,1,1,1,1,1,0, 0,0,0,0,0,0,0,0},
  247.     {'F',8, 3,2,2,2,2,2,2,0, 3,1,1,1,1,1,1,0, 3,3,0,0,0,0,0,0,
  248.             3,3,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  249.     {'G',8, 3,2,2,2,2,2,3,0, 3,1,0,0,1,1,1,0, 3,3,0,0,0,0,3,0,
  250.             3,3,1,1,1,1,3,0, 0,0,0,0,0,0,0,0},
  251.     {'H',8, 3,0,0,0,0,0,3,0, 3,1,1,1,1,1,3,0, 3,3,0,0,0,0,3,0,
  252.             3,3,0,0,0,0,3,0, 0,0,0,0,0,0,0,0},
  253.     {'I',5, 0,3,0,0,0,0,0,0, 0,3,1,0,0,0,0,0, 0,3,3,0,0,0,0,0,
  254.             0,3,3,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  255.     {'J',8, 0,0,0,0,0,3,0,0, 0,0,0,0,0,3,1,0, 0,0,0,0,0,3,3,0,
  256.             3,1,1,1,1,3,3,0, 0,0,0,0,0,0,0,0},
  257.     {'K',8, 3,0,0,0,3,0,0,0, 3,1,1,3,1,1,1,0, 3,3,0,0,0,0,3,0,
  258.             3,3,0,0,0,0,3,0, 0,0,0,0,0,0,0,0},
  259.     {'L',8, 3,0,0,0,0,0,0,0, 3,1,0,0,0,0,0,0, 3,3,0,0,0,0,0,0,
  260.             3,3,1,1,1,1,1,0, 0,0,0,0,0,0,0,0},
  261.     {'M',8, 3,2,2,3,2,2,3,0, 3,1,0,3,0,0,3,0, 3,3,0,3,0,0,3,0,
  262.             3,3,0,3,0,0,3,0, 0,0,0,0,0,0,0,0},
  263.     {'N',8, 3,2,2,2,2,2,3,0, 3,1,0,0,0,0,3,0, 3,3,0,0,0,0,3,0,
  264.             3,3,0,0,0,0,3,0, 0,0,0,0,0,0,0,0},
  265.     {'O',8, 3,2,2,2,3,3,3,0, 3,0,0,0,0,2,3,0, 3,0,0,0,0,0,3,0,
  266.             3,1,1,1,1,1,3,0, 0,0,0,0,0,0,0,0},
  267.     {'P',8, 3,2,2,2,2,2,3,0, 3,1,1,1,1,1,3,0, 3,3,0,0,0,0,0,0,
  268.             3,3,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  269.     {'Q',8, 3,2,2,2,2,2,3,0, 3,0,0,0,0,0,3,0, 3,0,0,0,0,0,3,0,
  270.             3,1,1,3,3,3,3,0, 0,0,0,0,0,0,0,0},
  271.     {'R',8, 3,2,2,2,2,3,0,0, 3,1,1,1,1,3,1,0, 3,3,0,0,0,0,3,0,
  272.             3,3,0,0,0,0,3,0, 0,0,0,0,0,0,0,0},
  273.     {'S',8, 3,2,2,2,2,2,3,0, 3,1,1,1,1,1,1,0, 0,0,0,0,0,3,3,0,
  274.             3,1,1,1,1,3,3,0, 0,0,0,0,0,0,0,0},
  275.     {'T',8, 2,2,2,3,2,2,2,0, 0,0,0,3,1,0,0,0, 0,0,0,3,3,0,0,0,
  276.             0,0,0,3,3,0,0,0, 0,0,0,0,0,0,0,0},
  277.     {'U',8, 3,0,0,0,0,0,3,0, 3,1,0,0,0,0,3,0, 3,3,0,0,0,0,3,0,
  278.             3,3,1,1,1,1,3,0, 0,0,0,0,0,0,0,0},
  279.     {'V',8, 3,3,0,0,0,0,3,0, 3,3,0,0,0,1,3,0, 0,3,0,0,0,3,0,0,
  280.             0,3,1,1,1,3,0,0, 0,0,0,0,0,0,0,0},
  281.     {'W',8, 3,0,0,3,0,0,3,0, 3,1,0,3,0,0,3,0, 3,3,0,3,0,0,3,0,
  282.             3,3,1,3,1,1,3,0, 0,0,0,0,0,0,0,0},
  283.     {'X',8, 3,0,0,0,0,0,3,0, 2,1,1,1,1,1,2,0, 3,3,0,0,0,0,3,0,
  284.             3,3,0,0,0,0,3,0, 0,0,0,0,0,0,0,0},
  285.     {'Y',8, 3,0,0,0,0,0,3,0, 3,1,1,1,1,1,3,0, 0,0,0,3,3,0,0,0,
  286.             0,0,0,3,3,0,0,0, 0,0,0,0,0,0,0,0},
  287.     {'Z',8, 2,2,2,2,2,2,3,0, 1,1,1,1,1,1,3,0, 3,3,0,0,0,0,0,0,
  288.             3,3,1,1,1,1,1,0, 0,0,0,0,0,0,0,0},
  289.     {'0',8, 3,2,2,2,2,2,3,0, 3,0,0,0,0,1,3,0, 3,0,0,0,0,3,3,0,
  290.             3,1,1,1,1,3,3,0, 0,0,0,0,0,0,0,0},
  291.     {'1',5, 0,0,3,0,0,0,0,0, 0,1,3,0,0,0,0,0, 0,3,3,0,0,0,0,0,
  292.             0,3,3,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  293.     {'2',8, 3,2,2,2,2,2,3,0, 0,0,0,0,0,0,3,0, 3,3,2,2,2,2,2,0,
  294.             3,3,1,1,1,1,3,0, 0,0,0,0,0,0,0,0},
  295.     {'3',8, 3,2,2,2,2,3,0,0, 0,1,1,1,1,3,1,0, 0,0,0,0,0,3,3,0,
  296.             3,1,1,1,1,3,3,0, 0,0,0,0,0,0,0,0},
  297.     {'4',8, 3,0,0,0,0,3,0,0, 3,0,0,0,0,3,0,0, 3,1,1,1,1,3,1,0,
  298.             0,0,0,0,3,3,0,0, 0,0,0,0,0,0,0,0},
  299.     {'5',8, 3,2,2,2,2,2,2,0, 3,1,1,1,1,1,1,0, 0,0,0,0,0,3,3,0,
  300.             3,1,1,1,1,3,3,0, 0,0,0,0,0,0,0,0},
  301.     {'6',8, 3,2,2,2,2,2,3,0, 3,1,1,1,1,1,1,0, 3,0,0,0,0,3,3,0,
  302.             3,1,1,1,1,3,3,0, 0,0,0,0,0,0,0,0},
  303.     {'7',8, 2,2,2,2,2,2,3,0, 0,0,0,0,0,1,3,0, 0,0,0,0,0,3,3,0,
  304.             0,0,0,0,0,3,3,0, 0,0,0,0,0,0,0,0},
  305.     {'8',8, 0,3,2,2,2,3,0,0, 1,3,1,1,1,3,1,0, 3,0,0,0,0,3,3,0,
  306.             3,1,1,1,1,3,3,0, 0,0,0,0,0,0,0,0},
  307.     {'9',8, 3,2,2,2,2,2,3,0, 3,0,0,0,0,0,3,0, 2,2,2,2,2,3,3,0,
  308.             0,0,0,0,0,3,3,0, 0,0,0,0,0,0,0,0},
  309.     {'-',5, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 3,3,3,3,0,0,0,0,
  310.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  311.     {'`',4, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  312.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  313.     {' ',5, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
  314.             0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
  315.       };
  316.  
  317.   static struct _b8x5 f4[] = {          // 7x4 reversed video FONT3
  318.     {'A',8, 3,2,2,2,2,2,3,3, 3,0,3,3,3,0,3,3, 0,0,1,1,1,1,0,3,
  319.             0,0,3,3,3,3,0,3, 1,1,3,3,3,3,1,3},
  320.     {'B',8, 2,2,2,2,2,2,3,3, 0,3,3,3,3,1,2,3, 0,0,1,1,1,1,0,3,
  321.             0,0,3,3,3,3,0,3, 1,1,1,1,1,1,1,3},
  322.     {'C',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,1,3, 0,0,3,3,3,3,3,3,
  323.             0,0,3,3,3,3,2,3, 1,1,1,1,1,1,1,3},
  324.     {'D',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,0,3, 0,0,3,3,3,3,0,3,
  325.             0,0,3,3,3,3,0,3, 1,1,1,1,1,1,1,3},
  326.     {'E',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,3,3, 0,0,1,1,1,1,1,3,
  327.             0,0,3,3,3,3,3,3, 1,1,1,1,1,1,1,3},
  328.     {'F',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,3,3, 0,0,1,1,1,1,1,3,
  329.             0,0,3,3,3,3,3,3, 1,1,3,3,3,3,3,3},
  330.     {'G',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,1,3, 0,0,3,3,1,1,0,3,
  331.             0,0,3,3,3,3,0,3, 1,1,1,1,1,1,1,3},
  332.     {'H',8, 2,3,3,3,3,3,2,3, 0,3,3,3,3,3,0,3, 0,0,1,1,1,1,0,3,
  333.             0,0,3,3,3,3,0,3, 1,1,3,3,3,3,1,3},
  334.     {'I',5, 3,2,3,3,3,3,3,3, 3,0,3,3,3,3,3,3, 3,0,0,3,3,3,3,3,
  335.             3,0,0,3,3,3,3,3, 3,1,1,3,3,3,3,3},
  336.     {'J',8, 3,3,3,3,3,2,3,3, 3,3,3,3,3,0,3,3, 3,3,3,3,3,0,0,3,
  337.             2,3,3,3,3,0,0,3, 1,1,1,1,1,1,1,3},
  338.     {'K',8, 2,3,3,3,2,3,3,3, 0,3,3,2,1,3,3,3, 0,0,1,1,1,1,0,3,
  339.             0,0,3,3,3,3,0,3, 1,1,3,3,3,3,1,3},
  340.     {'L',8, 2,3,3,3,3,3,3,3, 0,3,3,3,3,3,3,3, 0,0,3,3,3,3,3,3,
  341.             0,0,3,3,3,3,3,3, 1,1,1,1,1,1,1,3},
  342.     {'M',8, 2,2,2,2,2,2,2,3, 0,3,3,0,3,3,0,3, 0,0,3,0,3,3,0,3,
  343.             0,0,3,0,3,3,0,3, 1,1,3,1,3,3,1,3},
  344.     {'N',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,0,3, 0,0,3,3,3,3,0,3,
  345.             0,0,3,3,3,3,0,3, 1,1,3,3,3,3,1,3},
  346.     {'O',8, 2,2,2,2,2,2,2,3, 0,3,3,3,1,0,0,3, 0,3,3,3,3,3,0,3,
  347.             0,3,3,3,3,3,0,3, 1,1,1,1,1,1,1,3},
  348.     {'P',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,0,3, 0,0,1,1,1,1,1,3,
  349.             0,0,3,3,3,3,3,3, 1,1,3,3,3,3,3,3},
  350.     {'Q',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,0,3, 0,3,3,3,3,3,0,3,
  351.             0,3,3,3,2,2,0,3, 1,1,1,1,1,1,1,3},
  352.     {'R',8, 2,2,2,2,2,2,3,3, 0,3,3,3,3,0,3,3, 0,0,1,1,1,1,0,3,
  353.             0,0,3,3,3,3,0,3, 1,1,3,3,3,3,1,3},
  354.     {'S',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,1,3, 1,1,1,1,1,0,0,3,
  355.             2,3,3,3,3,0,0,3, 1,1,1,1,1,1,1,3},
  356.     {'T',8, 2,2,2,2,2,2,2,3, 3,3,3,0,3,3,3,3, 3,3,3,0,0,3,3,3,
  357.             3,3,3,0,0,3,3,3, 3,3,3,1,1,3,3,3},
  358.     {'U',8, 2,3,3,3,3,3,2,3, 0,3,3,3,3,3,0,3, 0,0,3,3,3,3,0,3,
  359.             0,0,3,3,3,3,0,3, 1,1,1,1,1,1,1,3},
  360.     {'V',8, 2,2,3,3,3,3,2,3, 0,0,3,3,3,3,0,3, 1,0,3,3,3,0,1,3,
  361.             3,0,3,3,3,0,3,3, 3,1,1,1,1,1,3,3},
  362.     {'W',8, 2,3,3,2,3,3,2,3, 0,3,3,0,3,3,0,3, 0,0,3,0,3,3,0,3,
  363.             0,0,3,0,3,3,0,3, 1,1,1,1,1,1,1,3},
  364.     {'X',8, 2,3,3,3,3,3,2,3, 0,3,3,3,3,3,0,3, 2,0,1,1,1,1,2,3,
  365.             0,0,3,3,3,3,0,3, 1,1,3,3,3,3,1,3},
  366.     {'Y',8, 2,3,3,3,3,3,2,3, 0,3,3,3,3,3,0,3, 1,1,1,0,0,1,1,3,
  367.             3,3,3,0,0,3,3,3, 3,3,3,1,1,3,3,3},
  368.     {'Z',8, 2,2,2,2,2,2,2,3, 3,3,3,3,3,3,0,3, 0,0,1,1,1,1,1,3,
  369.             0,0,3,3,3,3,3,3, 1,1,1,1,1,1,1,3},
  370.     {'0',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,0,3, 0,3,3,3,3,0,0,3,
  371.             0,3,3,3,3,0,0,3, 1,1,1,1,1,1,1,3},
  372.     {'1',5, 3,3,2,3,3,3,3,3, 3,3,0,3,3,3,3,3, 3,0,0,3,3,3,3,3,
  373.             3,0,0,3,3,3,3,3, 3,1,1,3,3,3,3,3},
  374.     {'2',8, 2,2,2,2,2,2,2,3, 1,3,3,3,3,3,0,3, 2,2,2,2,2,2,0,3,
  375.             0,0,3,3,3,3,2,3, 1,1,1,1,1,1,1,3},
  376.     {'3',8, 2,2,2,2,2,2,3,3, 1,3,3,3,3,0,3,3, 3,1,1,1,1,0,0,3,
  377.             2,3,3,3,3,0,0,3, 1,1,1,1,1,1,1,3},
  378.     {'4',8, 2,3,3,3,3,2,3,3, 0,3,3,3,3,0,3,3, 0,3,3,3,3,0,3,3,
  379.             1,1,1,1,0,0,1,3, 3,3,3,3,1,1,3,3},
  380.     {'5',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,3,3, 1,1,1,1,1,0,0,3,
  381.             2,3,3,3,3,0,0,3, 1,1,1,1,1,1,1,3},
  382.     {'6',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,1,3, 0,1,1,1,1,0,0,3,
  383.             0,3,3,3,3,0,0,3, 1,1,1,1,1,1,1,3},
  384.     {'7',8, 2,2,2,2,2,2,2,3, 3,3,3,3,3,3,0,3, 3,3,3,3,3,0,0,3,
  385.             3,3,3,3,3,0,0,3, 3,3,3,3,3,1,1,3},
  386.     {'8',8, 3,2,2,2,2,2,3,3, 3,0,3,3,3,0,3,3, 0,1,1,1,1,0,0,3,
  387.             0,3,3,3,3,0,0,3, 1,1,1,1,1,1,1,3},
  388.     {'9',8, 2,2,2,2,2,2,2,3, 0,3,3,3,3,3,0,3, 0,2,2,2,2,2,0,3,
  389.             3,3,3,3,3,0,0,3, 3,3,3,3,3,1,1,3},
  390.     {'-',5, 3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, 0,0,0,0,3,3,3,3,
  391.             3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3},
  392.     {'`',4, 3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,
  393.             3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3},
  394.     {' ',5, 3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,
  395.             3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3},
  396.       };
  397.  
  398.  
  399.   // NOTE: the font-table automatically adjusts to the variable number
  400.   //       of elements in the font definition array's!
  401.  
  402.   static struct _font_tab {             // font table structure
  403.          int  k;                        // (max) number of columns
  404.          int  r;                        // number of rows (lines)
  405.          int  n;                        // number of pattern entries
  406.          struct _b8x5 *d;               // pointer to font definition
  407.            } ft[] = {                   // FONT table
  408.          {0,0,0,NULL},                  // FONT0 dummy: suppress title
  409.          {6,3,sizeof(f1)/sizeof(struct _b8x5),f1}, // FONT1
  410.          {8,5,sizeof(f2)/sizeof(struct _b8x5),f2}, // FONT2
  411.          {8,4,sizeof(f3)/sizeof(struct _b8x5),f3}, // FONT3
  412.          {8,5,sizeof(f4)/sizeof(struct _b8x5),f4}, // FONT4
  413.            };
  414.  
  415.   static char a[80];                    // returned line buffer
  416.   static char b_array[]  = " ▄▀█░▌▐▒▓"; // block character elements
  417.                                         // codepage 437, 860, 863, 865
  418.   static char pg_multi[] = " ▄▀█░║║▒▓"; // Code Page 850: Multilingual
  419.  
  420.   if (c_info.codepage==850)            // codepage 850
  421.     strcpy(b_array,pg_multi);          // suitable blockchars
  422.  
  423.   if (f<FONT1 || f>FONT4)               // check range of selected font
  424.     f = FONT2;                          // reset to default if out of range
  425.  
  426.   if (k<LINE1 || k>ft[f].k-1)           // check range of LINE
  427.     k = LINE1;                          // prevent addressing violations
  428.  
  429.   i = 0;                                // zero count
  430.   w = 1;                                // width 1: leading char
  431.   while (i<n && b[i]!='\0' && w<=sizeof(a)) {   // limit width of output
  432.     for (j=0; j<ft[f].n &&
  433.               ft[f].d[j].c!=toupper(b[i]); j++);   // search char
  434.     if (j < ft[f].n) {                  // found
  435.       if (w + ft[f].d[j].k < sizeof(a)) {    // would it fit?
  436.         w += ft[f].d[j].k;              // add active columns + 1 blank
  437.         ++i;                            // accept character
  438.         }                               // endif
  439.       else
  440.         n = i;                          // indicate 'full'
  441.       }                                 // endif
  442.     else {                              // not found
  443.       if (w + ft[f].k < sizeof(a)) {    // would dummy fit?
  444.         w += ft[f].k;                   // add max columns + 1 blank
  445.         ++i;                            // accept character
  446.         }                               // endif
  447.       else
  448.         n = i;                          // indicate 'full'
  449.       }                                 // endif
  450.     }                                   // endif
  451.    n = i;                               // maximum # title characters
  452.  
  453.   a[0] = b_array[(f==FONT4) ? 3 : 0];   // leading character
  454.   for (i=0,w=1; i<n; ++i) {             // process string up till n
  455.     for (j=0; j<ft[f].n &&
  456.               ft[f].d[j].c!=(char)toupper(b[i]); j++);  // search
  457.     if (j < ft[f].n) {                  // char found
  458.       a[w++] = b_array[ft[f].d[j].p[k].c0];
  459.       if (ft[f].d[j].k > 1)
  460.         a[w++] = b_array[ft[f].d[j].p[k].c1];
  461.       if (ft[f].d[j].k > 2)
  462.         a[w++] = b_array[ft[f].d[j].p[k].c2];
  463.       if (ft[f].d[j].k > 3)
  464.         a[w++] = b_array[ft[f].d[j].p[k].c3];
  465.       if (ft[f].d[j].k > 4)
  466.         a[w++] = b_array[ft[f].d[j].p[k].c4];
  467.       if (ft[f].d[j].k > 5)
  468.         a[w++] = b_array[ft[f].d[j].p[k].c5];
  469.       if (ft[f].d[j].k > 6)
  470.         a[w++] = b_array[ft[f].d[j].p[k].c6];
  471.       if (ft[f].d[j].k > 7)
  472.         a[w++] = b_array[ft[f].d[j].p[k].c7];
  473.       }
  474.     else {                              // char not found
  475.       --j;                              // take last character in table
  476.       for (x=0; x<ft[f].k; x++)         // max columns
  477.         a[w++] = b_array[ft[f].d[j].p[0].c0];    // filler block
  478.       }                                 // endfor
  479.     }                                   // endfor
  480.   a[(f==FONT4) ? w : w-1] = '\0';       // end of string
  481.   return(a);                            // return ptr to outputstring
  482.   }
  483.