home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume20 / psroff / part06 / ljtables.c
Encoding:
C/C++ Source or Header  |  1989-10-17  |  22.6 KB  |  586 lines

  1. /*    Copyright 1985, 1986, 1987, 1988 Chris Lewis
  2.         All Rights Reserved
  3.  
  4.     Permission to copy and further distribute is freely given provided 
  5.     this copyright notice remains intact and that this software is not 
  6.     sold for profit.
  7.  
  8.     Project:    Generic Troff drivers
  9.     Module:        ljtables.c
  10.     Author:     Chris Lewis
  11.     Specs:        Contains character tables for various fonts.
  12.  */
  13. /*
  14.  * woods@cpi - Wed Feb  1 10:56:58 EST 1989
  15.  *
  16.  *    This has now been tested.  (on a DataProducts LZR1230)
  17.  *
  18.  *    The destination printer must have a resident TimesRoman font.
  19.  *    I would also suggested that the MathSymbol font be loaded, though
  20.  *    since I do not have such a cartidge, I have not tried this.
  21.  *
  22.  *    The symbol character definitions do require re-writing.
  23.  *
  24.  *    The troff font description files were obtained from another
  25.  *    similar package (troff2lj by Sverre Froyen <froyen@nmfecc.arpa>).
  26.  *    He generated them with an awk script from the HP font width tables.
  27.  *
  28.  *    I have somewhat mangled with the tables below, with some success.
  29.  *
  30.  *    There is no suggested placing for DOWNLOAD.
  31.  *
  32.  *    I've removed the orientation setting from the font sequences.
  33.  *    Orientation should be selected at initialization
  34.  */
  35.  
  36. #include "defs.h"
  37.  
  38. #if    defined(LJ) || defined(LK)
  39.  
  40. #ifndef    SVR3
  41. #ifndef    lint
  42. static char SCCSid[] = "@(#)ljtables.c: 1.2 Copyright 89/06/14 16:29:46 Chris Lewis";
  43. #endif
  44. #else
  45. #ident  "@(#)ljtables.c: 1.2 Copyright 89/06/14 16:29:46 Chris Lewis" /*(SVR3)*/
  46. #endif
  47.  
  48. #include "lj.h"
  49.  
  50. /*    Used for characters not in Roman8 Character set */
  51. #define    NOPE    "\377"
  52.  
  53. #ifdef    LJ
  54. struct troff2befont ljStdFont[108] = {
  55.  
  56. /*          +-------------------------------- Troff character number
  57.         |
  58.             |    +--------------------------- U: standard fonts
  59.             |    |                            S: symbol font
  60.             |    |                            D: draw macro
  61.             |    |                            n: new font
  62.             |    |
  63.             |    |  +------------------------ X-shift (scaled by deci-point)
  64.             |    |  |
  65.             |    |  |  +--------------------- Y-shift (scaled by deci-point)
  66.             |    |  |  |
  67.             |    |  |  |  +------------------ Point-scale
  68.             |    |  |  |  |
  69.             |    |  |  |  |   +-------------- Sequence
  70.             |    |  |  |  |   |
  71.             |    |  |  |  |   |               Printable sequence title
  72.             |    |  |  |  |   |                 |
  73.             |    |  |  |  |   |                 |
  74.             v    v  v  v  v   v                 v   */
  75.     /*  1*/    {U, 0, 0, 1, "h",        "h"},
  76.     /*  2*/    {U, 0, 0, 1, "t",        "t"},
  77.     /*  3*/    {U, 0, 0, 1, "n",        "n"},
  78.     /*  4*/    {U, 0.5, 0, 1, "m",        "m"},
  79.     /*  5*/    {U, 0, 0, 1, "l",        "l"},
  80.     /*  6*/    {U, 0, 0, 1, "i",        "i"},
  81.     /*  7*/    {U, 0, 0, 1, "z",        "z"},
  82.     /*  8*/    {U, 0, 0, 1, "s",        "s"},
  83.     /*  9*/    {U, 0, 0, 1, "d",        "d"},
  84.     /* 10*/    {U, 0, 0, 1, "b",        "b"},
  85.     /* 11*/    {U, 0.5, 0, 1, "x",        "x"},
  86.     /* 12*/    {U, 0, 0, 1, "f",        "f"},
  87.     /* 13*/    {U, 0, 0, 1, "j",        "j"},
  88.     /* 14*/    {U, 0, 0, 1, "u",        "u"},
  89.     /* 15*/    {U, 0, 0, 1, "k",        "k"},
  90.     /* 16*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  91.     /* 17*/    {U, 0, 0, 1, "p",        "p"},
  92.     /* 18*/    {S, 2.0, 0, 1, "\366",        "3/4 em"},
  93.     /* 19*/    {U, 0, 0, 1, ";",        ";"},
  94.     /* 20*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  95.     /* 21*/    {U, 0, 0, 1, "a",        "a"},
  96.     /* 22*/    {U, 0, 0, 1, "_",        "horizontal rule"},
  97.     /* 23*/    {U, 0, 0, 1, "c",        "c"},
  98.     /* 24*/    {U, 0, 0, 1, "`",        "` open"},
  99.     /* 25*/    {U, 0, 0, 1, "e",        "e"},
  100.     /* 26*/    {U, 0, 0, 1, "'",        "' close"},
  101.     /* 27*/    {U, 0, 0, 1, "o",        "o"},
  102.     /* 28*/    {S, 0, 0, 1, "\367",        "1/4"},
  103.     /* 29*/    {U, 0, 0, 1, "r",        "r"},
  104.     /* 30*/    {S, 0, 0, 1, "\370",        "1/2"},
  105.     /* 31*/    {U, 0.5, 0, 1, "v",        "v"},
  106.     /* 32*/    {U, 0, 0, 1, "-",        "- (hyphen)"},
  107.     /* 33*/    {U, 0, 0, 1, "w",        "w"},
  108.     /* 34*/    {U, 0, 0, 1, "q",        "q"},
  109.     /* 35*/    {U, 0, 0, 1, "/",        "/"},
  110.     /* 36*/    {U, 0, 0, 1, ".",        "."},
  111.     /* 37*/    {U, 0, 0, 1, "g",        "g"},
  112.     /* 38*/    {U, 0, 0, 1, "3/4",        "3/4"},
  113.     /* 39*/    {U, 0, 0, 1, ",",        ","},
  114.     /* 40*/    {U, 0, 0, 1, "&",        "&"},
  115.     /* 41*/    {U, 0, 0, 1, "y",        "y"},
  116.     /* 42*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  117.     /* 43*/    {U, 0, 0, 1, "\%",        "%"},
  118.     /* 44*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  119.     /* 45*/    {U, 0, 0, 1, "Q",        "Q"},
  120.     /* 46*/    {U, 0, 0, 1, "T",        "T"},
  121.     /* 47*/    {U, 0, 0, 1, "O",        "O"},
  122.     /* 48*/    {U, 0, 0, 1, "H",        "H"},
  123.     /* 49*/    {U, 0, 0, 1, "N",        "N"},
  124.     /* 50*/    {U, 0, 0, 1, "M",        "M"},
  125.     /* 51*/    {U, 0, 0, 1, "L",        "L"},
  126.     /* 52*/    {U, 0, 0, 1, "R",        "R"},
  127.     /* 53*/    {U, 0, 0, 1, "G",        "G"},
  128.     /* 54*/    {U, 0, 0, 1, "I",        "I"},
  129.     /* 55*/    {U, 0, 0, 1, "P",        "P"},
  130.     /* 56*/    {U, 0, 0, 1, "C",        "C"},
  131.     /* 57*/    {U, 0, 0, 1, "V",        "V"},
  132.     /* 58*/    {U, 0, 0, 1, "E",        "E"},
  133.     /* 59*/    {U, 0, 0, 1, "Z",        "Z"},
  134.     /* 60*/    {U, 0, 0, 1, "D",        "D"},
  135.     /* 61*/    {U, 0, 0, 1, "B",        "B"},
  136.     /* 62*/    {U, 0, 0, 1, "S",        "S"},
  137.     /* 63*/    {U, 0, 0, 1, "Y",        "Y"},
  138.     /*from here on are actually code 1-45, upper half of font */
  139.     /* 64*/    {U, 0, 0, 1, "F",        "F"},
  140.     /* 65*/    {U, 0, 0, 1, "X",        "X"},
  141.     /* 66*/    {U, 0, 0, 1, "A",        "A"},
  142.     /* 67*/    {U, 0, 0, 1, "W",        "W"},
  143.     /* 68*/    {U, 0, 0, 1, "J",        "J"},
  144.     /* 69*/    {U, 0, 0, 1, "U",        "U"},
  145.     /* 70*/    {U, 0, 0, 1, "K",        "K"},
  146.     /* 71*/    {U, 0, 0, 1, "0",        "0"},
  147.     /* 72*/    {U, 0, 0, 1, "1",        "1"},
  148.     /* 73*/    {U, 0, 0, 1, "2",        "2"},
  149.     /* 74*/    {U, 0, 0, 1, "3",        "3"},
  150.     /* 75*/    {U, 0, 0, 1, "4",        "4"},
  151.     /* 76*/    {U, 0, 0, 1, "5",        "5"},
  152.     /* 77*/    {U, 0, 0, 1, "6",        "6"},
  153.     /* 78*/    {U, 0, 0, 1, "7",        "7"},
  154.     /* 79*/    {U, 0, 0, 1, "8",        "8"},
  155.     /* 80*/    {U, 0, 0, 1, "9",        "9"},
  156.     /* 81*/    {U, 0, 0, 1, "*",        "*"},
  157.     /* 82*/    {S, 2.0, 0, 1, "\366",        "minus"},
  158.     /* 83*/    {U, 0, 0, 1, "fi",        "fi"},
  159.     /* 84*/    {U, 0, 0, 1, "fl",        "fl"},
  160.     /* 85*/    {U, 0, 0, 1, "ff",        "ff"},
  161.     /* 86*/    {S, 0, 0, 1, "\277",        "cent sign"},
  162.     /* 87*/    {U, 0, 0, 1, "ffl",        "ffl"},
  163.     /* 88*/    {U, 0, 0, 1, "ffi",        "ffi"},
  164.     /* 89*/    {U, 0, 0, 1, "(",        "("},
  165.     /* 90*/    {U, 0, 0, 1, ")",        ")"},
  166.     /* 91*/    {U, 0, 0, 1, "[",        "["},
  167.     /* 92*/    {U, 0, 0, 1, "]",        "]"},
  168.     /* 93*/    {S, 0, 0, 1, "\263",        "degree"},
  169.     /* 94*/    {S, 0, 0, 1, "\275",        "dagger"},    /* */
  170.     /* 95*/    {U, 0, 0, 1, "=",        "="},
  171.     /* 96*/    {S, 0, 0, 1, "O\br",        "registered"},
  172.     /* 97*/    {U, 0, 0, 1, ":",        ":"},
  173.     /* 98*/    {U, 0, 0, 1, "+",        "+"},
  174.     /* 99*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  175.     /*100*/    {U, 0, 0, 1, "!",        "!"},
  176.     /*101*/ {S, 0, 0, 1, "\272",        "bullet"},
  177.     /*102*/    {U, 0, 0, 1, "?",        "?"},
  178.     /*103*/ {S, 0, 0, 1, "'",        "foot mark"},
  179.     /*104*/    {U, 0, 0, 1, "|",        "|"},
  180.     /*105*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  181.     /*106*/    {S, 0, 0, 1, "O\bc",        "copyright"},
  182.     /*107*/    {S, 0, 0, 1, "\374",        "square"},
  183.     /*108*/    {U, 0, 0, 1, "$",        "$"}
  184. };
  185.  
  186. struct troff2befont ljSymFont[] = {
  187. /*          +-------------------------------- Troff character number
  188.         |
  189.             |    +--------------------------- U: standard fonts
  190.             |    |                            S: symbol font
  191.             |    |                            D: draw macro
  192.             |    |
  193.             |    |  +------------------------ X-shift (scaled by deci-point)
  194.             |    |  |
  195.             |    |  |  +--------------------- Y-shift (scaled by deci-point)
  196.             |    |  |  |
  197.             |    |  |  |  +------------------ Point-scale
  198.             |    |  |  |  |
  199.             |    |  |  |  |   +-------------- Sequence
  200.             |    |  |  |  |   |
  201.             |    |  |  |  |   |               Printable sequence title
  202.             |    |  |  |  |   |                 |
  203.             |    |  |  |  |   |                 |
  204.             v    v  v  v  v   v                 v                    */
  205. /****        0    {S, 0, 0, 1, NOCODE,        "unassigned"}, /* in htroff */
  206.     /*  1*/    {S, 0, 0, 1, NOPE,        "psi"},
  207.     /*  2*/    {S, 0, 0, 1, NOPE,        "theta"},
  208.     /*  3*/    {S, 0, 0, 1, NOPE,        "nu"},
  209.     /*  4*/    {S, 0, 0, 1, NOPE,        "mu"},
  210.     /*  5*/    {S, 0, 0, 1, NOPE,        "lambda"},
  211.     /*  6*/    {S, 0, 0, 1, NOPE,        "iota"},
  212.     /*  7*/    {S, 0, 0, 1, NOPE,        "zeta"},
  213.     /*  8*/    {S, 0, 0, 1, NOPE,        "sigma"},
  214.     /*  9*/    {S, 0, 0, 1, NOPE,        "delta"},
  215.     /* 10*/    {S, 0, 0, 1, NOPE,        "beta"},
  216.     /* 11*/    {S, 0, 0, 1, NOPE,        "xi"},
  217.     /* 12*/    {S, 0, 0, 1, NOPE,        "eta"},
  218.     /* 13*/    {S, 0, 0, 1, NOPE,        "phi"},
  219.     /* 14*/    {S, 0, 0, 1, NOPE,        "upsilon"},
  220.     /* 15*/    {S, 0, 0, 1, NOPE,        "kappa"},
  221.     /* 16*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  222.     /* 17*/    {S, 0, 0, 1, NOPE,        "pi"},
  223.     /* 18*/    {U, 0, 0, 1, "@",        "@"},
  224.     /* 19*/    {S, 0, 0, 1, NOPE,        "down arrow"},
  225.     /* 20*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  226.     /* 21*/    {S, 0, 0, 1, NOPE,        "alpha"},
  227.     /* 22*/    {S, -2.0, 0, 1, "|",        "or (was star)"},
  228.     /* 23*/    {S, 0, 0, 1, NOPE,        "chi"},
  229.     /* 24*/    {U, 0, 0, 1, "\042",        "double quote"},
  230.     /* 25*/    {S, 0, 0, 1, NOPE,        "epsilon"},
  231.     /* 26*/    {S, 0, 0, 1, "=",        "equation equal"},
  232.     /* 27*/    {S, 0, 0, 1, NOPE,        "omicron"},
  233.     /* 28*/    {S, 0, 0, 1, NOPE,        "left arrow"},
  234.     /* 29*/    {S, 0, 0, 1, NOPE,        "rho"},
  235.     /* 30*/    {S, 0, 0, 1, NOPE,        "up arrow"},
  236.     /* 31*/    {S, 0, 0, 1, NOPE,        "tau"},
  237.     /* 32*/    {S, 0.1, 0.7, 1, "_",        "_ underrule"},
  238.     /* 33*/    {U, 0, 0, 1, "\\",        "\\"},
  239.     /* 34*/    {S, 0, 0, 1, NOPE,        "Psi"},
  240.     /* 35*/    {S, 0, 0, 1, "\273",        "bell system sign"},
  241.     /* 36*/    {S, 0, 0, 1, NOPE,        "infinity"},
  242.     /* 37*/    {S, 0, 0, 1, NOPE,        "gamma"},
  243.     /* 38*/    {S, 0, 0, 1, NOPE,        "improper superset"},
  244.     /* 39*/    {S, 0, 0, 1, NOPE,        "proportional to"},
  245.     /* 40*/ {S, 0, 0, 1, NOPE,        "right hand"},
  246.     /* 41*/    {S, 0, 0, 1, NOPE,        "omega"},
  247.     /* 42*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  248.     /* 43*/    {S, 0, 0, 1, NOPE,        "gradient"},
  249.     /* 44*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  250.     /* 45*/    {S, 0, 0, 1, NOPE,        "Phi"},
  251.     /* 46*/    {S, 0, 0, 1, NOPE,        "Theta"},
  252.     /* 47*/    {S, 0, 0, 1, NOPE,        "Omega"},
  253.     /* 48*/    {S, 0, 0, 1, NOPE,        "union"},
  254.     /* 49*/    {S, -9.0, -3.0, 1, "\260",    "root en extender (and horiz. box rule)"},
  255.     /* 50*/    {S, 0, 0, 1, "\245",        "terminal sigma (was root em)"},
  256.     /* 51*/    {S, 0, 0, 1, NOPE,        "Lambda"},
  257.     /* 52*/    {S, 0, 0, 1, "\366",        "equation minus"},
  258.     /* 53*/    {S, 0, 0, 1, NOPE,        "Gamma"},
  259.     /* 54*/    {S, 0, 0, 1, NOPE,        "integral sign"},
  260.     /* 55*/    {S, 0, 0, 1, NOPE,        "Pi"},
  261.     /* 56*/    {S, 0, 0, 1, NOPE,        "subset of"},
  262.     /* 57*/    {S, 0, 0, 1, NOPE,        "superset of"},
  263.     /* 58*/    {S, -1.8, 0, 1, "~",        "approximates"},
  264.     /* 59*/    {S, 0, 0, 1, NOPE,        "partial derivative"},
  265.     /* 60*/    {S, 0, 0, 1, NOPE,        "Delta"},
  266.     /* 61*/    {S, 0, -1.5, 1.2, NOPE,        "square root"},
  267.     /* 62*/    {S, 0, 0, 1, NOPE,        "Sigma"},
  268.     /* 63*/    {S, 0, 0, 1, "\254\b=",        "approx ="},
  269.     /* 64*/    {U, 0, 0, 1, ">",        ">"},
  270.     /* 65*/    {S, 0, 0, 1, NOPE,        "Xi"},
  271.     /* 66*/    {U, 0, 0, 1, "<",        "<"},
  272.     /* 67*/    {S, 0, 0, 1, "/",        "long slash (longer)"},
  273.     /* 68*/    {S, 0, 0, 1, NOPE,        "intersect"},
  274.     /* 69*/    {S, 0, 0, 1, NOPE,        "Upsilon"},
  275.     /* 70*/    {S, -1.8, 0, 1, "^",        "logical not"},
  276.     /* 71*/    {S, -3.0, 0, 1, NOPE,        "right ceiling"},
  277.     /* 72*/    {S, -2.0, 0, 1, NOPE,        "left top brace"},
  278.     /* 73*/    {S, -2.0, 0, 1, "|\b|\b|",    "bold vertical"},
  279.     /* 74*/    {S, -2.0, 0, 1, "|",        "left ctr brace"},
  280.     /* 75*/    {S, -2.0, 0, 1, NOPE,        "left bot brace"},
  281.     /* 76*/    {S, -2.0, 0, 1, NOPE,        "right top brace"},
  282.     /* 77*/    {S, -2.0, 0, 1, "|",        "right ctr brace"},
  283.     /* 78*/    {S, -2.0, 0, 1, NOPE,        "right bot brace"},
  284.     /* 79*/    {S, -3.0, 0, 1, NOPE,        "right floor"},
  285.     /* 80*/    {S, 0, 0, 1, NOPE,        "left floor"},
  286.     /* 81*/    {S, 0, 0, 1, NOPE,        "left ceiling"},
  287.     /* 82*/    {U, 0, -1.0, 1, "*",        "multiply"},
  288.     /* 83*/    {S, 0, 0, 1, ":\b\366",        "divide"},
  289.     /* 84*/    {S, 0, 0, 1, "\376",        "plus-minus"},
  290.     /* 85*/    {S, 0, 0, 1, "<=",        "<="},
  291.     /* 86*/    {S, 0, 0, 1, ">=",        ">="},
  292.     /* 87*/    {S, 0, 0, 1, NOPE,        "identically equal"},
  293.     /* 88*/    {S, 0, 0, 1, "=\b/",        "not equal"},
  294.     /* 89*/    {U, 0, 0, 1, "{",        "{"},
  295.     /* 90*/    {U, 0, 0, 1, "}",        "}"},
  296.     /* 91*/    {S, 0, 0, 1, "\250",        "acute accent"},
  297.     /* 92*/    {S, 0, 0, 1, "\251",        "grave accent"},
  298.     /* 93*/    {S, -1.8, 0, 1, "^",        "^"},
  299.     /* 94*/    {U, 0, 0, 1, "#",        "#"},
  300.     /* 95*/    {S, 0, 0, 1, NOPE,        "left hand"},
  301.     /* 96*/    {S, 0, 0, 1, NOPE,        "member of"},
  302.     /* 97*/    {S, -1.8, 0, 1, "~",        "~"},
  303.     /* 98*/    {S, 0, 0, 1, NOPE,        "empty set"},
  304.     /* 99*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  305.     /*100*/    {S, 0, 0, 1, "\275\b|",        "dbl dagger"},
  306.     /*101*/    {S, -3.0, 0, 1, "|",        "box rule (was parallel sign)"},
  307.     /*102*/    {U, 0, 0, 1, "*",        "math * "},
  308.     /*103*/    {S, 0, 0, 1, NOPE,        "improper subset"},
  309.     /*104*/    {S, 0, 0, 1, NOPE,        "circle"},
  310.     /*105*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  311.     /*106*/    {S, 0, 0, 1, "+",        "equation plus"},
  312.     /*107*/    {S, 0, 0, 1, NOPE,        "right arrow"},
  313.     /*108*/    {S, 0, 0, 1, NOPE,        "section"}
  314. };
  315. #endif
  316.  
  317. #ifdef    LK
  318.  
  319. #define    CF(x)    ((x) - 'A')
  320.  
  321. struct troff2befont lkStdFont[108] = {
  322.  
  323. /*          +-------------------------------- Troff character number
  324.         |
  325.             |    +--------------------------- U: standard fonts
  326.             |    |                            S: symbol font
  327.             |    |                            D: draw macro
  328.             |    |                            n: new font
  329.             |    |
  330.             |    |  +------------------------ X-shift (scaled by point)
  331.             |    |  |
  332.             |    |  |  +--------------------- Y-shift (scaled by point)
  333.             |    |  |  |
  334.             |    |  |  |  +------------------ Point-scale
  335.             |    |  |  |  |
  336.             |    |  |  |  |   +-------------- Sequence
  337.             |    |  |  |  |   |
  338.             |    |  |  |  |   |               Printable sequence title
  339.             |    |  |  |  |   |                 |
  340.             |    |  |  |  |   |                 |
  341.             v    v  v  v  v   v                 v   */
  342.     /*  1*/    {U, 0, 0, 1, "h",        "h"},
  343.     /*  2*/    {U, 0, 0, 1, "t",        "t"},
  344.     /*  3*/    {U, 0, 0, 1, "n",        "n"},
  345.     /*  4*/    {U, 0, 0, 1, "m",        "m"},
  346.     /*  5*/    {U, 0, 0, 1, "l",        "l"},
  347.     /*  6*/    {U, 0, 0, 1, "i",        "i"},
  348.     /*  7*/    {U, 0, 0, 1, "z",        "z"},
  349.     /*  8*/    {U, 0, 0, 1, "s",        "s"},
  350.     /*  9*/    {U, 0, 0, 1, "d",        "d"},
  351.     /* 10*/    {U, 0, 0, 1, "b",        "b"},
  352.     /* 11*/    {U, 0, 0, 1, "x",        "x"},
  353.     /* 12*/    {U, 0, 0, 1, "f",        "f"},
  354.     /* 13*/    {U, 0, 0, 1, "j",        "j"},
  355.     /* 14*/    {U, 0, 0, 1, "u",        "u"},
  356.     /* 15*/    {U, 0, 0, 1, "k",        "k"},
  357.     /* 16*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  358.     /* 17*/    {U, 0, 0, 1, "p",        "p"},
  359.     /* 18*/    {S, 0, 0, 1, "v",        "3/4 em"},
  360.     /* 19*/    {U, 0, 0, 1, ";",        ";"},
  361.     /* 20*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  362.     /* 21*/    {U, 0, 0, 1, "a",        "a"},
  363.     /* 22*/    {U, 0, 0, 1, "_",        "horizontal rule"},
  364.     /* 23*/    {U, 0, 0, 1, "c",        "c"},
  365.     /* 24*/    {U, 0, 0, 1, "`",        "` open"},
  366.     /* 25*/    {U, 0, 0, 1, "e",        "e"},
  367.     /* 26*/    {U, 0, 0, 1, "'",        "' close"},
  368.     /* 27*/    {U, 0, 0, 1, "o",        "o"},
  369.     /* 28*/    {S, 0, 0, 1, "w",        "1/4"},
  370.     /* 29*/    {U, 0, 0, 1, "r",        "r"},
  371.     /* 30*/    {S, 0, 0, 1, "x",        "1/2"},
  372.     /* 31*/    {U, 0, 0, 1, "v",        "v"},
  373.     /* 32*/    {U, 0, 0, 1, "-",        "- (hyphen)"},
  374.     /* 33*/    {U, 0, 0, 1, "w",        "w"},
  375.     /* 34*/    {U, 0, 0, 1, "q",        "q"},
  376.     /* 35*/    {U, 0, 0, 1, "/",        "/"},
  377.     /* 36*/    {U, 0, 0, 1, ".",        "."},
  378.     /* 37*/    {U, 0, 0, 1, "g",        "g"},
  379.     /* 38*/    {U, 0, 0, 1, NOPE,        "3/4"},
  380.     /* 39*/    {U, 0, 0, 1, ",",        ","},
  381.     /* 40*/    {U, 0, 0, 1, "&",        "&"},
  382.     /* 41*/    {U, 0, 0, 1, "y",        "y"},
  383.     /* 42*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  384.     /* 43*/    {U, 0, 0, 1, "\%",        "%"},
  385.     /* 44*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  386.     /* 45*/    {U, 0, 0, 1, "Q",        "Q"},
  387.     /* 46*/    {U, 0, 0, 1, "T",        "T"},
  388.     /* 47*/    {U, 0, 0, 1, "O",        "O"},
  389.     /* 48*/    {U, 0, 0, 1, "H",        "H"},
  390.     /* 49*/    {U, 0, 0, 1, "N",        "N"},
  391.     /* 50*/    {U, 0, 0, 1, "M",        "M"},
  392.     /* 51*/    {U, 0, 0, 1, "L",        "L"},
  393.     /* 52*/    {U, 0, 0, 1, "R",        "R"},
  394.     /* 53*/    {U, 0, 0, 1, "G",        "G"},
  395.     /* 54*/    {U, 0, 0, 1, "I",        "I"},
  396.     /* 55*/    {U, 0, 0, 1, "P",        "P"},
  397.     /* 56*/    {U, 0, 0, 1, "C",        "C"},
  398.     /* 57*/    {U, 0, 0, 1, "V",        "V"},
  399.     /* 58*/    {U, 0, 0, 1, "E",        "E"},
  400.     /* 59*/    {U, 0, 0, 1, "Z",        "Z"},
  401.     /* 60*/    {U, 0, 0, 1, "D",        "D"},
  402.     /* 61*/    {U, 0, 0, 1, "B",        "B"},
  403.     /* 62*/    {U, 0, 0, 1, "S",        "S"},
  404.     /* 63*/    {U, 0, 0, 1, "Y",        "Y"},
  405.     /*from here on are actually code 1-45, upper half of font */
  406.     /* 64*/    {U, 0, 0, 1, "F",        "F"},
  407.     /* 65*/    {U, 0, 0, 1, "X",        "X"},
  408.     /* 66*/    {U, 0, 0, 1, "A",        "A"},
  409.     /* 67*/    {U, 0, 0, 1, "W",        "W"},
  410.     /* 68*/    {U, 0, 0, 1, "J",        "J"},
  411.     /* 69*/    {U, 0, 0, 1, "U",        "U"},
  412.     /* 70*/    {U, 0, 0, 1, "K",        "K"},
  413.     /* 71*/    {U, 0, 0, 1, "0",        "0"},
  414.     /* 72*/    {U, 0, 0, 1, "1",        "1"},
  415.     /* 73*/    {U, 0, 0, 1, "2",        "2"},
  416.     /* 74*/    {U, 0, 0, 1, "3",        "3"},
  417.     /* 75*/    {U, 0, 0, 1, "4",        "4"},
  418.     /* 76*/    {U, 0, 0, 1, "5",        "5"},
  419.     /* 77*/    {U, 0, 0, 1, "6",        "6"},
  420.     /* 78*/    {U, 0, 0, 1, "7",        "7"},
  421.     /* 79*/    {U, 0, 0, 1, "8",        "8"},
  422.     /* 80*/    {U, 0, 0, 1, "9",        "9"},
  423.     /* 81*/    {U, 0, 0, 1, "*",        "*"},
  424.     /* 82*/    {U, 0, 0, 1, "-",        "minus"},
  425.     /* 83*/    {U, 0, 0, 1, NOPE,        "fi"},
  426.     /* 84*/    {U, 0, 0, 1, NOPE,        "fl"},
  427.     /* 85*/    {U, 0, 0, 1, NOPE,        "ff"},
  428.     /* 86*/    {S, 0, 0, 1, "?",        "cent sign"},
  429.     /* 87*/    {U, 0, 0, 1, NOPE,        "ffl"},
  430.     /* 88*/    {U, 0, 0, 1, NOPE,        "ffi"},
  431.     /* 89*/    {U, 0, 0, 1, "(",        "("},
  432.     /* 90*/    {U, 0, 0, 1, ")",        ")"},
  433.     /* 91*/    {U, 0, 0, 1, "[",        "["},
  434.     /* 92*/    {U, 0, 0, 1, "]",        "]"},
  435.     /* 93*/    {S, 0, 0, 1, "3",        "degree"},
  436.     /* 94*/    {CF('J'), 0, 0, 1, "N",        "dagger"},    /* Math 8b */
  437.     /* 95*/    {U, 0, 0, 1, "=",        "="},
  438.     /* 96*/    {CF('L'), 0, 0, 1, ",",        "registered"},    /* PiFonta */
  439.     /* 97*/    {U, 0, 0, 1, ":",        ":"},
  440.     /* 98*/    {U, 0, 0, 1, "+",        "+"},
  441.     /* 99*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  442.     /*100*/    {U, 0, 0, 1, "!",        "!"},
  443. /***    /*101    {U, 0, 0, 1, "*",        "bullet"},    /* faked! */
  444. /***/    /*101*/ {CF('J'), 0, 0, 1, "K",        "bullet"},    /* Math 8b */
  445.     /*102*/    {U, 0, 0, 1, "?",        "?"},
  446. /***    /*103    {U, 0, 0, 1, "'",        "foot mark"},    /* ' */
  447. /***/    /*103*/ {CF('I'), 0, 0, 1, "'",        "foot mark"},    /* Math 8a */
  448.     /*104*/    {U, 0, 0, 1, "|",        "|"},
  449.     /*105*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  450.     /*106*/    {CF('L'), 0, 0, 1, "-",        "copyright"},    /* PiFonta */
  451.     /*107*/    {CF('L'), 0, 0, 1, "l",        "square"},    /* PiFonta */
  452.     /*108*/    {U, 0, 0, 1, "$",        "$"}
  453. };
  454.  
  455. struct troff2befont lkSymFont[] = {
  456. /*          +-------------------------------- Troff character number
  457.         |
  458.             |    +--------------------------- U: standard fonts
  459.             |    |                            S: symbol font
  460.             |    |                            D: draw macro
  461.             |    |
  462.             |    |  +------------------------ X-shift (scaled by point)
  463.             |    |  |
  464.             |    |  |  +--------------------- Y-shift (scaled by point)
  465.             |    |  |  |
  466.             |    |  |  |  +------------------ Point-scale
  467.             |    |  |  |  |
  468.             |    |  |  |  |   +-------------- Sequence
  469.             |    |  |  |  |   |
  470.             |    |  |  |  |   |               Printable sequence title
  471.             |    |  |  |  |   |                 |
  472.             |    |  |  |  |   |                 |
  473.             v    v  v  v  v   v                 v                    */
  474. /****        {S, 0, 0, 1, NOCODE,        "unassigned"}, /* in htroff table */
  475.     /*  1*/    {S, 0, 0, 1, "w",        "psi"},
  476.     /*  2*/    {S, 0, 0, 1, "h",        "theta"},
  477.     /*  3*/    {S, 0, 0, 1, "m",        "nu"},
  478.     /*  4*/    {S, 0, 0, 1, "l",        "mu"},
  479.     /*  5*/    {S, 0, 0, 1, "k",        "lambda"},
  480.     /*  6*/    {S, 0, 0, 1, "i",        "iota"},
  481.     /*  7*/    {S, 0, 0, 1, "f",        "zeta"},
  482.     /*  8*/    {S, 0, 0, 1, "r",        "sigma"},
  483.     /*  9*/    {S, 0, 0, 1, "d",        "delta"},
  484.     /* 10*/    {S, 0, 0, 1, "b",        "beta"},
  485.     /* 11*/    {S, 0, 0, 1, "n",        "xi"},
  486.     /* 12*/    {S, 0, 0, 1, "g",        "eta"},
  487.     /* 13*/    {S, 0, 0, 1, "u",        "phi"},
  488.     /* 14*/    {S, 0, 0, 1, "t",        "upsilon"},
  489.     /* 15*/    {S, 0, 0, 1, "j",        "kappa"},
  490.     /* 16*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  491.     /* 17*/    {S, 0, 0, 1, "p",        "pi"},
  492.     /* 18*/    {U, 0, 0, 1, "@",        "@"},
  493.     /* 19*/    {CF('J'), 0, 0, 1, "#",        "down arrow"},
  494.     /* 20*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  495.     /* 21*/    {S, 0, 0, 1, "a",        "alpha"},
  496.     /* 22*/    {S, 0, 0, 1, "|",        "or (was star)"},
  497.     /* 23*/    {S, 0, 0, 1, "v",        "chi"},
  498.     /* 24*/    {U, 0, 0, 1, "\042",        "double quote"},
  499.     /* 25*/    {S, 0, 0, 1, "e",        "epsilon"},
  500.     /* 26*/    {S, 0, 0, 1, "=",        "equation equal"},
  501.     /* 27*/    {S, 0, 0, 1, "o",        "omicron"},
  502.     /* 28*/    {CF('J'), 0, 0, 1, "$",        "left arrow"},
  503.     /* 29*/    {S, 0, 0, 1, "q",        "rho"},
  504.     /* 30*/    {CF('J'), 0, 0, 1, "!",        "up arrow"},
  505.     /* 31*/    {S, 0, 0, 1, "s",        "tau"},
  506.     /* 32*/    {S, .01, .14, 1, "_",        "_ underrule"},
  507.     /* 33*/    {U, 0, 0, 1, "\\",        "\\"},
  508.     /* 34*/    {S, 0, 0, 1, "W",        "Psi"},
  509.     /* 35*/    {CF('L'), 0, 0, 1, "H",        "bell system sign"},
  510.     /* 36*/    {S, 0, 0, 1, "$",        "infinity"},
  511.     /* 37*/    {S, 0, 0, 1, "c",        "gamma"},
  512.     /* 38*/    {CF('J'), 0, 0, 1, "?",        "improper superset"},
  513.     /* 39*/    {S, 0, 0, 1, "&",        "proportional to"},
  514.     /* 40*/ {CF('J'), 0, 0, 1, "&",        "right hand"},
  515.     /* 41*/    {S, 0, 0, 1, "x",        "omega"},
  516.     /* 42*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  517.     /* 43*/    {S, 0, 0, 1, "Y",        "gradient"},
  518.     /* 44*/    {S, 0, 0, 1, NOCODE,        "unassigned"},
  519.     /* 45*/    {S, 0, 0, 1, "U",        "Phi"},
  520.     /* 46*/    {S, 0, 0, 1, "H",        "Theta"},
  521.     /* 47*/    {S, 0, 0, 1, "X",        "Omega"},
  522.     /* 48*/    {CF('J'), 0, 0, 1, "5",        "union"},
  523.     /* 49*/    {CF('J'), -.70, 0, 1, "0",    "root en extender"},
  524.     /* 50*/    {S, 0, 0, 1, "[",        "terminal sigma (was root em)"},
  525.     /* 51*/    {S, 0, 0, 1, "K",        "Lambda"},
  526.     /* 52*/    {S, 0, 0, 1, "-",        "equation minus"},
  527.     /* 53*/    {S, 0, 0, 1, "C",        "Gamma"},
  528.     /* 54*/    {CF('J'), 0, 0, 1, "U",        "integral sign"},
  529.     /* 55*/    {S, 0, 0, 1, "P",        "Pi"},
  530.     /* 56*/    {CF('J'), 0, 0, 1, ":",        "subset of"},
  531.     /* 57*/    {CF('J'), 0, 0, 1, ";",        "superset of"},
  532.     /* 58*/    {U, 0, 0, 1, "~",        "approximates"},
  533.     /* 59*/    {S, 0, 0, 1, "Z",        "partial derivative"},
  534.     /* 60*/    {S, 0, 0, 1, "D",        "Delta"},
  535.     /* 61*/    {S, 0, -.15, 1.2, "!",        "square root"},
  536.     /* 62*/    {S, 0, 0, 1, "R",        "Sigma"},
  537.     /* 63*/    {S, 0, 0, 1, "?",        "approx ="},
  538.     /* 64*/    {U, 0, 0, 1, ">",        ">"},
  539.     /* 65*/    {S, 0, 0, 1, "N",        "Xi"},
  540.     /* 66*/    {U, 0, 0, 1, "<",        "<"},
  541.     /* 67*/    {S, 0, 0, 1, "/",        "long slash (longer)"},
  542.     /* 68*/    {CF('J'), 0, 0, 1, "6",        "intersect"},
  543.     /* 69*/    {S, 0, 0, 1, "T",        "Upsilon"},
  544.     /* 70*/    {CF('J'), 0, 0, 1, "H",        "logical not"},
  545.     /* 71*/    {CF('J'), -.3, 0, 1, "p",    "right ceiling"},
  546.     /* 72*/    {CF('J'), -.2, 0, 1, "b",    "left top brace"},
  547.     /* 73*/    {CF('J'), 0, 0, 1, "v",        "bold vertical"},
  548.     /* 74*/    {CF('J'), -.2, 0, 1, "c",    "left ctr brace"},
  549.     /* 75*/    {CF('J'), -.2, 0, 1, "d",    "left bot brace"},
  550.     /* 76*/    {CF('J'), -.2, 0, 1, "r",    "right top brace"},
  551.     /* 77*/    {CF('J'), -.2, 0, 1, "s",    "right ctr brace"},
  552.     /* 78*/    {CF('J'), -.2, 0, 1, "t",    "right bot brace"},
  553.     /* 79*/    {CF('J'), -.3, 0, 1, "q",    "right floor"},
  554.     /* 80*/    {CF('J'), 0, 0, 1, "a",        "left floor"},
  555.     /* 81*/    {CF('J'), 0, 0, 1, "'",        "left ceiling"},
  556.     /* 82*/    {S, 0, 0, 1, "*",        "multiply"},
  557.     /* 83*/    {S, 0, 0, 1, "%",        "divide"},
  558.     /* 84*/    {CF('J'), 0, 0, 1, "~",        "plus-minus"},
  559.     /* 85*/    {S, 0, 0, 1, "\\",        "<="},
  560.     /* 86*/    {S, 0, 0, 1, "^",        ">="},
  561.     /* 87*/    {S, 0, 0, 1, "}",        "identically equal"},
  562.     /* 88*/    {S, 0, 0, 1, "]",        "not equal"},
  563.     /* 89*/    {U, 0, 0, 1, "{",        "{"},
  564.     /* 90*/    {U, 0, 0, 1, "}",        "}"},
  565.     /* 91*/    {S, 0, 0, 1, "(",        "acute accent"},
  566.     /* 92*/    {S, 0, 0, 1, ")",        "grave accent"},
  567.     /* 93*/    {S, 0, 0, 1, "*",        "^"},
  568.     /* 94*/    {U, 0, 0, 1, "#",        "#"},
  569.     /* 95*/    {CF('J'), 0, 0, 1, "(",        "left hand"},
  570.     /* 96*/    {CF('J'), 0, 0, 1, "7",        "member of"},
  571.     /* 97*/    {S, 0, 0, 1, ",",        "~"},
  572.     /* 98*/    {CF('J'), 0, 0, 1, "X",        "empty set"},
  573.     /* 99*/    {U, 0, 0, 1, NOCODE,        "unassigned"},
  574.     /*100*/    {CF('J'), 0, 0, 1, "O",        "dbl dagger"},
  575.     /*101*/    {CF('J'), -.2, 0, 1, "v",    "box rule (was parallel sign)"},
  576.     /*102*/    {U, 0, 0, 1, "*",        "math * "},
  577.     /*103*/    {CF('J'), 0, 0, 1, ">",        "improper subset"},
  578.     /*104*/    {CF('J'), 0, 0, 1, "M",        "circle"},
  579.     /*105*/    {CF('I'), 0, 0, 1, NOCODE,    "unassigned"},
  580.     /*106*/    {CF('I'), 0, 0, 1, "+",        "equation plus"},
  581.     /*107*/    {CF('J'), 0, 0, 1, "\042",    "right arrow"},
  582.     /*108*/    {S, 0, 0, 1, "=",        "section"}
  583. };
  584. #endif
  585. #endif
  586.