home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pfm2afm / pfm2afm.h < prev    next >
Text File  |  1992-01-07  |  16KB  |  402 lines

  1. /********************************************************************
  2.  *                                                                  *
  3.  *  Title:  pfm2afm - Convert Windows .pfm files to .afm files      *
  4.  *                                                                  *
  5.  *  Author: Ken Borgendale   10/9/91                                *
  6.  *                                                                  *
  7.  *  Function:                                                       *
  8.  *      Declare types and constants for pfm2afm.                    *
  9.  *                                                                  *
  10.  *  Copyright:                                                      *
  11.  *      pfm2afm - Copyright (C) IBM Corp., 1991                     *
  12.  *                                                                  *
  13.  *      This code is released for public use as long as the         *
  14.  *      copyright remains intact.  This code is provided asis       *
  15.  *      without any warrenties, express or implied.                 *
  16.  *                                                                  *
  17.  *  Note:                                                           *
  18.  *      1. Be very careful of the packing of the PFM structure.     *
  19.  *         This is a very badly designed data structure.  (I just   *
  20.  *         read it, Microsoft designed it).                         *
  21.  *                                                                  *
  22.  ********************************************************************/
  23.  
  24. #define OPTSEP  '-'
  25.  
  26. /*
  27.  *  Declare Windows .pfm structure.  Many fields are not declared if
  28.  *  they are not used by this program.
  29.  */
  30.  
  31. /*
  32.  * This structure was created with no thought to alignment, so we must
  33.  * set the alignment to character.
  34.  */
  35. typedef struct pfm_ {
  36.     UWORD   vers;
  37.     ULONG   len;             /* Total length of .pfm file */
  38.     UBYTE   copyright[60];   /* Copyright string */
  39.     UWORD   type;
  40.     UWORD   points;
  41.     UWORD   verres;
  42.     UWORD   horres;
  43.     UWORD   ascent;
  44.     UWORD   intleading;
  45.     UWORD   extleading;
  46.     UBYTE   italic;
  47.     UBYTE   uline;
  48.     UBYTE   overs;
  49.     UWORD   weight;
  50.     UBYTE   charset;         /* 0=windows, otherwise nomap */
  51.     UWORD   pixwidth;        /* Width for mono fonts */
  52.     UWORD   pixheight;
  53.     UBYTE   kind;            /* Lower bit off in mono */
  54.     UWORD   avgwidth;        /* Mono if avg=max width */
  55.     UWORD   maxwidth;        /* Use to compute bounding box */
  56.     UBYTE   firstchar;       /* First char in table */
  57.     UBYTE   lastchar;        /* Last char in table */
  58.     UBYTE   defchar;
  59.     UBYTE   brkchar;
  60.     UWORD   widthby;
  61.     ULONG   device;
  62.     ULONG   face;            /* Face name */
  63.     ULONG   bits;
  64.     ULONG   bitoff;
  65.     UWORD   extlen;
  66.     ULONG   psext;           /* PostScript extension */
  67.     ULONG   chartab;         /* Character width tables */
  68.     ULONG   res1;
  69.     ULONG   kernpairs;       /* Kerning pairs */
  70.     ULONG   res2;
  71.     ULONG   fontname;        /* Font name */
  72. } PFM;
  73.  
  74. /*
  75.  *  Some metrics from the PostScript extension
  76.  */
  77. typedef struct psx_ {
  78.     UBYTE   res1[14];
  79.     UWORD   capheight;       /* Cap height */
  80.     UWORD   xheight;         /* X height */
  81.     UWORD   ascender;        /* Ascender */
  82.     WORD    descender;       /* Descender */
  83. } PSX;
  84.  
  85. /*
  86.  *  Kerning pairs
  87.  */
  88. typedef struct kern_ {
  89.     UBYTE   first;           /* First character */
  90.     UBYTE   second;          /* Second character */
  91.     WORD    kern;            /* Kern distance */
  92. } KERN;
  93.  
  94. /*
  95.  * Translate table from 1004 to psstd.  1004 is an extension of the
  96.  * Windows translate table used in PM.
  97.  */
  98. UBYTE Win2PSStd[] = {
  99.   0,   0,   0,   0, 197, 198, 199,   0, 202,   0, 205, 206, 207,   0,   0,   0,
  100.   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  101.  32,  33,  34,  35,  36,  37,  38, 169,  40,  41,  42,  43,  44,  45,  46,  47,
  102.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  103.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  104.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
  105. 193,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  106. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
  107.   0,   0, 184,   0, 185, 188, 178, 179,  94, 189,   0, 172, 234,   0,   0,   0,
  108.   0,  96,   0, 170, 186,   0, 177, 208, 126,   0,   0, 173, 250,   0,   0,   0,
  109.   0, 161, 162, 163, 168, 165,   0, 167, 200,   0, 227, 171,   0,   0,   0,   0,
  110.   0,   0,   0,   0, 194,   0, 182, 180, 203,   0, 235, 187,   0,   0,   0, 191,
  111.   0,   0,   0,   0,   0,   0, 225,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  112.   0,   0,   0,   0,   0,   0,   0,   0, 233,   0,   0,   0,   0,   0,   0, 251,
  113.   0,   0,   0,   0,   0,   0, 241,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  114.   0,   0,   0,   0,   0,   0,   0,   0, 249,   0,   0,   0,   0,   0,   0,   0,
  115. };
  116.  
  117. /*
  118.  *  Character class.  This is a minor attempt to overcome the problem that
  119.  *  in the pfm file, all unused characters are given the width of space.
  120.  */
  121. UBYTE WinClass[] = {
  122.     0, 0, 0, 0, 2, 2, 2, 0, 2, 0, 2, 2, 2, 0, 0, 0,   /* 00 */
  123.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 10 */
  124.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 20 */
  125.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 30 */
  126.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 40 */
  127.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 50 */
  128.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 60 */
  129.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,   /* 70 */
  130.     0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,   /* 80 */
  131.     0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2,   /* 90 */
  132.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* a0 */
  133.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* b0 */
  134.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* c0 */
  135.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* d0 */
  136.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* e0 */
  137.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* f0 */
  138. };
  139.  
  140. /*
  141.  *  Windows chararacter names.  Give a name to the usused locations
  142.  *  for when the all flag is specified.
  143.  */
  144. UBYTE *WinChars[] = {
  145.     "W00",              /*   00    */
  146.     "W01",              /*   01    */
  147.     "W02",              /*   02    */
  148.     "W03",              /*   03    */
  149.     "macron",           /*   04    */
  150.     "breve",            /*   05    */
  151.     "dotaccent",        /*   06    */
  152.     "W07",              /*   07    */
  153.     "ring",             /*   08    */
  154.     "W09",              /*   09    */
  155.     "W0a",              /*   0a    */
  156.     "W0b",              /*   0b    */
  157.     "W0c",              /*   0c    */
  158.     "W0d",              /*   0d    */
  159.     "W0e",              /*   0e    */
  160.     "W0f",              /*   0f    */
  161.     "hungarumlaut",     /*   10    */
  162.     "ogonek",           /*   11    */
  163.     "caron",            /*   12    */
  164.     "W13",              /*   13    */
  165.     "W14",              /*   14    */
  166.     "W15",              /*   15    */
  167.     "W16",              /*   16    */
  168.     "W17",              /*   17    */
  169.     "W18",              /*   18    */
  170.     "W19",              /*   19    */
  171.     "W1a",              /*   1a    */
  172.     "W1b",              /*   1b    */
  173.     "W1c",              /*   1c    */
  174.     "W1d",              /*   1d    */
  175.     "W1e",              /*   1e    */
  176.     "W1f",              /*   1f    */
  177.     "space",            /*   20    */
  178.     "exclam",           /*   21    */
  179.     "quotedbl",         /*   22    */
  180.     "numbersign",       /*   23    */
  181.     "dollar",           /*   24    */
  182.     "percent",          /*   25    */
  183.     "ampersand",        /*   26    */
  184.     "quotesingle",      /*   27    */
  185.     "parenleft",        /*   28    */
  186.     "parenright",       /*   29    */
  187.     "asterisk",         /*   2A    */
  188.     "plus",             /*   2B    */
  189.     "comma",            /*   2C    */
  190.     "hyphen",           /*   2D    */
  191.     "period",           /*   2E    */
  192.     "slash",            /*   2F    */
  193.     "zero",             /*   30    */
  194.     "one",              /*   31    */
  195.     "two",              /*   32    */
  196.     "three",            /*   33    */
  197.     "four",             /*   34    */
  198.     "five",             /*   35    */
  199.     "six",              /*   36    */
  200.     "seven",            /*   37    */
  201.     "eight",            /*   38    */
  202.     "nine",             /*   39    */
  203.     "colon",            /*   3A    */
  204.     "semicolon",        /*   3B    */
  205.     "less",             /*   3C    */
  206.     "equal",            /*   3D    */
  207.     "greater",          /*   3E    */
  208.     "question",         /*   3F    */
  209.     "at",               /*   40    */
  210.     "A",                /*   41    */
  211.     "B",                /*   42    */
  212.     "C",                /*   43    */
  213.     "D",                /*   44    */
  214.     "E",                /*   45    */
  215.     "F",                /*   46    */
  216.     "G",                /*   47    */
  217.     "H",                /*   48    */
  218.     "I",                /*   49    */
  219.     "J",                /*   4A    */
  220.     "K",                /*   4B    */
  221.     "L",                /*   4C    */
  222.     "M",                /*   4D    */
  223.     "N",                /*   4E    */
  224.     "O",                /*   4F    */
  225.     "P",                /*   50    */
  226.     "Q",                /*   51    */
  227.     "R",                /*   52    */
  228.     "S",                /*   53    */
  229.     "T",                /*   54    */
  230.     "U",                /*   55    */
  231.     "V",                /*   56    */
  232.     "W",                /*   57    */
  233.     "X",                /*   58    */
  234.     "Y",                /*   59    */
  235.     "Z",                /*   5A    */
  236.     "bracketleft",      /*   5B    */
  237.     "backslash",        /*   5C    */
  238.     "bracketright",     /*   5D    */
  239.     "asciicircum",      /*   5E    */
  240.     "underscore",       /*   5F    */
  241.     "grave",            /*   60    */
  242.     "a",                /*   61    */
  243.     "b",                /*   62    */
  244.     "c",                /*   63    */
  245.     "d",                /*   64    */
  246.     "e",                /*   65    */
  247.     "f",                /*   66    */
  248.     "g",                /*   67    */
  249.     "h",                /*   68    */
  250.     "i",                /*   69    */
  251.     "j",                /*   6A    */
  252.     "k",                /*   6B    */
  253.     "l",                /*   6C    */
  254.     "m",                /*   6D    */
  255.     "n",                /*   6E    */
  256.     "o",                /*   6F    */
  257.     "p",                /*   70    */
  258.     "q",                /*   71    */
  259.     "r",                /*   72    */
  260.     "s",                /*   73    */
  261.     "t",                /*   74    */
  262.     "u",                /*   75    */
  263.     "v",                /*   76    */
  264.     "w",                /*   77    */
  265.     "x",                /*   78    */
  266.     "y",                /*   79    */
  267.     "z",                /*   7A    */
  268.     "braceleft",        /*   7B    */
  269.     "bar",              /*   7C    */
  270.     "braceright",       /*   7D    */
  271.     "asciitilde",       /*   7E    */
  272.     "W7f",              /*   7F    */
  273.     "W80",              /*   80    */
  274.     "W81",              /*   81    */
  275.     "quotesinglbase",   /*   82    */
  276.     "W83",              /*   83    */
  277.     "quotedblbase",     /*   84    */
  278.     "ellipsis",         /*   85    */
  279.     "dagger",           /*   86    */
  280.     "daggerdbl",        /*   87    */
  281.     "asciicircum",      /*   88    */
  282.     "perthousand",      /*   89    */
  283.     "Scaron",           /*   8A    */
  284.     "guilsinglleft",    /*   8B    */
  285.     "OE",               /*   8C    */
  286.     "W8d",              /*   8D    */
  287.     "W8e",              /*   8E    */
  288.     "W8f",              /*   8F    */
  289.     "W90",              /*   90    */
  290.     "quoteleft",        /*   91    */
  291.     "quoteright",       /*   92    */
  292.     "quotedblleft",     /*   93    */
  293.     "quotedblright",    /*   94    */
  294.     "bullet1",          /*   95    */
  295.     "endash",           /*   96    */
  296.     "emdash",           /*   97    */
  297.     "asciitilde",       /*   98    */
  298.     "trademark",        /*   99    */
  299.     "scaron",           /*   9A    */
  300.     "guilsinglright",   /*   9B    */
  301.     "oe",               /*   9C    */
  302.     "W9d",              /*   9D    */
  303.     "W9e",              /*   9E    */
  304.     "Ydieresis",        /*   9F    */
  305.     "reqspace",         /*   A0    */
  306.     "exclamdown",       /*   A1    */
  307.     "cent",             /*   A2    */
  308.     "sterling",         /*   A3    */
  309.     "currency",         /*   A4    */
  310.     "yen",              /*   A5    */
  311.     "brokenbar",        /*   A6    */
  312.     "section",          /*   A7    */
  313.     "dieresis",         /*   A8    */
  314.     "copyright",        /*   A9    */
  315.     "ordfeminine",      /*   AA    */
  316.     "guillemotleft",    /*   AB    */
  317.     "logicalnot",       /*   AC    */
  318.     "syllable",         /*   AD    */
  319.     "registered",       /*   AE    */
  320.     "overbar",          /*   AF    */
  321.     "degree",           /*   B0    */
  322.     "plusminus",        /*   B1    */
  323.     "twosuperior",      /*   B2    */
  324.     "threesuperior",    /*   B3    */
  325.     "acute",            /*   B4    */
  326.     "mu",               /*   B5    */
  327.     "paragraph",        /*   B6    */
  328.     "periodcentered",   /*   B7    */
  329.     "cedilla",          /*   B8    */
  330.     "onesuperior",      /*   B9    */
  331.     "ordmasculine",     /*   BA    */
  332.     "guillemotright",   /*   BB    */
  333.     "onequarter",       /*   BC    */
  334.     "onehalf",          /*   BD    */
  335.     "threequarters",    /*   BE    */
  336.     "questiondown",     /*   BF    */
  337.     "Agrave",           /*   C0    */
  338.     "Aacute",           /*   C1    */
  339.     "Acircumflex",      /*   C2    */
  340.     "Atilde",           /*   C3    */
  341.     "Adieresis",        /*   C4    */
  342.     "Aring",            /*   C5    */
  343.     "AE",               /*   C6    */
  344.     "Ccedilla",         /*   C7    */
  345.     "Egrave",           /*   C8    */
  346.     "Eacute",           /*   C9    */
  347.     "Ecircumflex",      /*   CA    */
  348.     "Edieresis",        /*   CB    */
  349.     "Igrave",           /*   CC    */
  350.     "Iacute",           /*   CD    */
  351.     "Icircumflex",      /*   CE    */
  352.     "Idieresis",        /*   CF    */
  353.     "Eth",              /*   D0    */
  354.     "Ntilde",           /*   D1    */
  355.     "Ograve",           /*   D2    */
  356.     "Oacute",           /*   D3    */
  357.     "Ocircumflex",      /*   D4    */
  358.     "Otilde",           /*   D5    */
  359.     "Odieresis",        /*   D6    */
  360.     "multiply",         /*   D7    */
  361.     "Oslash",           /*   D8    */
  362.     "Ugrave",           /*   D9    */
  363.     "Uacute",           /*   DA    */
  364.     "Ucircumflex",      /*   DB    */
  365.     "Udieresis",        /*   DC    */
  366.     "Yacute",           /*   DD    */
  367.     "Thorn",            /*   DE    */
  368.     "germandbls",       /*   DF    */
  369.     "agrave",           /*   E0    */
  370.     "aacute",           /*   E1    */
  371.     "acircumflex",      /*   E2    */
  372.     "atilde",           /*   E3    */
  373.     "adieresis",        /*   E4    */
  374.     "aring",            /*   E5    */
  375.     "ae",               /*   E6    */
  376.     "ccedilla",         /*   E7    */
  377.     "egrave",           /*   E8    */
  378.     "eacute",           /*   E9    */
  379.     "ecircumflex",      /*   EA    */
  380.     "edieresis",        /*   EB    */
  381.     "igrave",           /*   EC    */
  382.     "iacute",           /*   ED    */
  383.     "icircumflex",      /*   EE    */
  384.     "idieresis",        /*   EF    */
  385.     "eth",              /*   F0    */
  386.     "ntilde",           /*   F1    */
  387.     "ograve",           /*   F2    */
  388.     "oacute",           /*   F3    */
  389.     "ocircumflex",      /*   F4    */
  390.     "otilde",           /*   F5    */
  391.     "odieresis",        /*   F6    */
  392.     "divide",           /*   F7    */
  393.     "oslash",           /*   F8    */
  394.     "ugrave",           /*   F9    */
  395.     "uacute",           /*   FA    */
  396.     "ucircumflex",      /*   FB    */
  397.     "udieresis",        /*   FC    */
  398.     "yacute",           /*   FD    */
  399.     "thorn",            /*   FE    */
  400.     "ydieresis",        /*   FF    */
  401. };
  402. ə