summaryrefslogtreecommitdiff
path: root/Build/source/texk/ps2pk/t1test.c
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2014-12-15 14:15:50 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2014-12-15 14:15:50 +0000
commit6e80afc0d352d893cf66f956cb9a95d033ca4680 (patch)
treeebfcee96946ee99b0aeeebdfb54e0e6e73d285a3 /Build/source/texk/ps2pk/t1test.c
parent911dc67a9c87f978296ce19551a7e621aeedcfe8 (diff)
ps2pk 1.7
git-svn-id: svn://tug.org/texlive/trunk@35828 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/ps2pk/t1test.c')
-rw-r--r--Build/source/texk/ps2pk/t1test.c529
1 files changed, 529 insertions, 0 deletions
diff --git a/Build/source/texk/ps2pk/t1test.c b/Build/source/texk/ps2pk/t1test.c
new file mode 100644
index 00000000000..66291173785
--- /dev/null
+++ b/Build/source/texk/ps2pk/t1test.c
@@ -0,0 +1,529 @@
+/* $XConsortium: t1test.c,v 1.2 91/10/10 11:19:53 rws Exp $ */
+/* Copyright International Business Machines,Corp. 1991
+ * All Rights Reserved
+ *
+ * License to use, copy, modify, and distribute this software
+ * and its documentation for any purpose and without fee is
+ * hereby granted, provided that the above copyright notice
+ * appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation,
+ * and that the name of IBM not be used in advertising or
+ * publicity pertaining to distribution of the software without
+ * specific, written prior permission.
+ *
+ * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
+ * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
+ * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
+ * THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND
+ * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
+ * OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF
+ * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
+ * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN
+ * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+ * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+#include <stdlib.h>
+#include "ffilest.h"
+#ifdef XSERVER
+#include "FSproto.h"
+#endif
+
+void Display();
+
+#define DECIPOINTSPERINCH 722.7
+#define DEFAULTRES 75
+#define DEFAULTPOINTSIZE 120
+
+FontScalableRec vals;
+FontEntryRec entry;
+
+typedef char *encoding[256];
+
+/* PostScript ISOLatin1Encoding */
+
+char *ISOLatin1[256] = {
+ /* '000 000 "00 */ NULL,
+ /* '001 001 "01 */ NULL,
+ /* '002 002 "02 */ NULL,
+ /* '003 003 "03 */ NULL,
+ /* '004 004 "04 */ NULL,
+ /* '005 005 "05 */ NULL,
+ /* '006 006 "06 */ NULL,
+ /* '007 007 "07 */ NULL,
+ /* '010 008 "08 */ NULL,
+ /* '011 009 "09 */ NULL,
+ /* '012 010 "0A */ NULL,
+ /* '013 011 "0B */ NULL,
+ /* '014 012 "0C */ NULL,
+ /* '015 013 "0D */ NULL,
+ /* '016 014 "0E */ NULL,
+ /* '017 015 "0F */ NULL,
+ /* '020 016 "10 */ NULL,
+ /* '021 017 "11 */ NULL,
+ /* '022 018 "12 */ NULL,
+ /* '023 019 "13 */ NULL,
+ /* '024 020 "14 */ NULL,
+ /* '025 021 "15 */ NULL,
+ /* '026 022 "16 */ NULL,
+ /* '027 023 "17 */ NULL,
+ /* '030 024 "18 */ NULL,
+ /* '031 025 "19 */ NULL,
+ /* '032 026 "1A */ NULL,
+ /* '033 027 "1B */ NULL,
+ /* '034 028 "1C */ NULL,
+ /* '035 029 "1D */ NULL,
+ /* '036 030 "1E */ NULL,
+ /* '037 031 "1F */ NULL,
+ /* '040 032 "20 */ "space",
+ /* '041 033 "21 */ "exclam",
+ /* '042 034 "22 */ "quotedbl",
+ /* '043 035 "23 */ "numbersign",
+ /* '044 036 "24 */ "dollar",
+ /* '045 037 "25 */ "percent",
+ /* '046 038 "26 */ "ampersand",
+ /* '047 039 "27 */ "quoteright",
+ /* '050 040 "28 */ "parenleft",
+ /* '051 041 "29 */ "parenright",
+ /* '052 042 "2A */ "asterisk",
+ /* '053 043 "2B */ "plus",
+ /* '054 044 "2C */ "comma",
+ /* '055 045 "2D */ "hyphen",
+ /* '056 046 "2E */ "period",
+ /* '057 047 "2F */ "slash",
+ /* '060 048 "30 */ "zero",
+ /* '061 049 "31 */ "one",
+ /* '062 050 "32 */ "two",
+ /* '063 051 "33 */ "three",
+ /* '064 052 "34 */ "four",
+ /* '065 053 "35 */ "five",
+ /* '066 054 "36 */ "six",
+ /* '067 055 "37 */ "seven",
+ /* '070 056 "38 */ "eight",
+ /* '071 057 "39 */ "nine",
+ /* '072 058 "3A */ "colon",
+ /* '073 059 "3B */ "semicolon",
+ /* '074 060 "3C */ "less",
+ /* '075 061 "3D */ "equal",
+ /* '076 062 "3E */ "greater",
+ /* '077 063 "3F */ "question",
+ /* '100 064 "40 */ "at",
+ /* '101 065 "41 */ "A",
+ /* '102 066 "42 */ "B",
+ /* '103 067 "43 */ "C",
+ /* '104 068 "44 */ "D",
+ /* '105 069 "45 */ "E",
+ /* '106 070 "46 */ "F",
+ /* '107 071 "47 */ "G",
+ /* '110 072 "48 */ "H",
+ /* '111 073 "49 */ "I",
+ /* '112 074 "4A */ "J",
+ /* '113 075 "4B */ "K",
+ /* '114 076 "4C */ "L",
+ /* '115 077 "4D */ "M",
+ /* '116 078 "4E */ "N",
+ /* '117 079 "4F */ "O",
+ /* '120 080 "50 */ "P",
+ /* '121 081 "51 */ "Q",
+ /* '122 082 "52 */ "R",
+ /* '123 083 "53 */ "S",
+ /* '124 084 "54 */ "T",
+ /* '125 085 "55 */ "U",
+ /* '126 086 "56 */ "V",
+ /* '127 087 "57 */ "W",
+ /* '130 088 "58 */ "X",
+ /* '131 089 "59 */ "Y",
+ /* '132 090 "5A */ "Z",
+ /* '133 091 "5B */ "bracketleft",
+ /* '134 092 "5C */ "backslash",
+ /* '135 093 "5D */ "bracketright",
+ /* '136 094 "5E */ "asciicircum",
+ /* '137 095 "5F */ "underscore",
+ /* '140 096 "60 */ "quoteleft",
+ /* '141 097 "61 */ "a",
+ /* '142 098 "62 */ "b",
+ /* '143 099 "63 */ "c",
+ /* '144 100 "64 */ "d",
+ /* '145 101 "65 */ "e",
+ /* '146 102 "66 */ "f",
+ /* '147 103 "67 */ "g",
+ /* '150 104 "68 */ "h",
+ /* '151 105 "69 */ "i",
+ /* '152 106 "6A */ "j",
+ /* '153 107 "6B */ "k",
+ /* '154 108 "6C */ "l",
+ /* '155 109 "6D */ "m",
+ /* '156 110 "6E */ "n",
+ /* '157 111 "6F */ "o",
+ /* '160 112 "70 */ "p",
+ /* '161 113 "71 */ "q",
+ /* '162 114 "72 */ "r",
+ /* '163 115 "73 */ "s",
+ /* '164 116 "74 */ "t",
+ /* '165 117 "75 */ "u",
+ /* '166 118 "76 */ "v",
+ /* '167 119 "77 */ "w",
+ /* '170 120 "78 */ "x",
+ /* '171 121 "79 */ "y",
+ /* '172 122 "7A */ "z",
+ /* '173 123 "7B */ "braceleft",
+ /* '174 124 "7C */ "bar",
+ /* '175 125 "7D */ "braceright",
+ /* '176 126 "7E */ "asciitilde",
+ /* '177 127 "7F */ NULL,
+ /* '200 128 "80 */ NULL,
+ /* '201 129 "81 */ NULL,
+ /* '202 130 "82 */ NULL,
+ /* '203 131 "83 */ NULL,
+ /* '204 132 "84 */ NULL,
+ /* '205 133 "85 */ NULL,
+ /* '206 134 "86 */ NULL,
+ /* '207 135 "87 */ NULL,
+ /* '210 136 "88 */ NULL,
+ /* '211 137 "89 */ NULL,
+ /* '212 138 "8A */ NULL,
+ /* '213 139 "8B */ NULL,
+ /* '214 140 "8C */ NULL,
+ /* '215 141 "8D */ NULL,
+ /* '216 142 "8E */ NULL,
+ /* '217 143 "8F */ NULL,
+ /* '220 144 "90 */ "dotlessi",
+ /* '221 145 "91 */ "grave",
+ /* '222 146 "92 */ "acute",
+ /* '223 147 "93 */ "circumflex",
+ /* '224 148 "94 */ "tilde",
+ /* '225 149 "95 */ "macron",
+ /* '226 150 "96 */ "breve",
+ /* '227 151 "97 */ "dotaccent",
+ /* '230 152 "98 */ "dieresis",
+ /* '231 153 "99 */ NULL,
+ /* '232 154 "9A */ "ring",
+ /* '233 155 "9B */ "cedilla",
+ /* '234 156 "9C */ NULL,
+ /* '235 157 "9D */ "hungarumlaut",
+ /* '236 158 "9E */ "ogonek",
+ /* '237 159 "9F */ "caron",
+ /* '240 160 "A0 */ "space",
+ /* '241 161 "A1 */ "exclamdown",
+ /* '242 162 "A2 */ "cent",
+ /* '243 163 "A3 */ "sterling",
+ /* '244 164 "A4 */ "currency",
+ /* '245 165 "A5 */ "yen",
+ /* '246 166 "A6 */ "brokenbar",
+ /* '247 167 "A7 */ "section",
+ /* '250 168 "A8 */ "dieresis",
+ /* '251 169 "A9 */ "copyright",
+ /* '252 170 "AA */ "ordfeminine",
+ /* '253 171 "AB */ "guillemotleft",
+ /* '254 172 "AC */ "logicalnot",
+ /* '255 173 "AD */ "hyphen",
+ /* '256 174 "AE */ "registered",
+ /* '257 175 "AF */ "macron",
+ /* '260 176 "B0 */ "degree",
+ /* '261 177 "B1 */ "plusminus",
+ /* '262 178 "B2 */ "twosuperior",
+ /* '263 179 "B3 */ "threesuperior",
+ /* '264 180 "B4 */ "acute",
+ /* '265 181 "B5 */ "mu",
+ /* '266 182 "B6 */ "paragraph",
+ /* '267 183 "B7 */ "periodcentered",
+ /* '270 184 "B8 */ "cedilla",
+ /* '271 185 "B9 */ "onesuperior",
+ /* '272 186 "BA */ "ordmasculine",
+ /* '273 187 "BB */ "guillemotright",
+ /* '274 188 "BC */ "onequarter",
+ /* '275 189 "BD */ "onehalf",
+ /* '276 190 "BE */ "threequarters",
+ /* '277 191 "BF */ "questiondown",
+ /* '300 192 "C0 */ "Agrave",
+ /* '301 193 "C1 */ "Aacute",
+ /* '302 194 "C2 */ "Acircumflex",
+ /* '303 195 "C3 */ "Atilde",
+ /* '304 196 "C4 */ "Adieresis",
+ /* '305 197 "C5 */ "Aring",
+ /* '306 198 "C6 */ "AE",
+ /* '307 199 "C7 */ "Ccedilla",
+ /* '310 200 "C8 */ "Egrave",
+ /* '311 201 "C9 */ "Eacute",
+ /* '312 202 "CA */ "Ecircumflex",
+ /* '313 203 "CB */ "Edieresis",
+ /* '314 204 "CC */ "Igrave",
+ /* '315 205 "CD */ "Iacute",
+ /* '316 206 "CE */ "Icircumflex",
+ /* '317 207 "CF */ "Idieresis",
+ /* '320 208 "D0 */ "Eth",
+ /* '321 209 "D1 */ "Ntilde",
+ /* '322 210 "D2 */ "Ograve",
+ /* '323 211 "D3 */ "Oacute",
+ /* '324 212 "D4 */ "Ocircumflex",
+ /* '325 213 "D5 */ "Otilde",
+ /* '326 214 "D6 */ "Odieresis",
+ /* '327 215 "D7 */ "multiply",
+ /* '330 216 "D8 */ "Oslash",
+ /* '331 217 "D9 */ "Ugrave",
+ /* '332 218 "DA */ "Uacute",
+ /* '333 219 "DB */ "Ucircumflex",
+ /* '334 220 "DC */ "Udieresis",
+ /* '335 221 "DD */ "Yacute",
+ /* '336 222 "DE */ "Thorn",
+ /* '337 223 "DF */ "Germandbls",
+ /* '340 224 "E0 */ "agrave",
+ /* '341 225 "E1 */ "aacute",
+ /* '342 226 "E2 */ "acircumflex",
+ /* '343 227 "E3 */ "atilde",
+ /* '344 228 "E4 */ "adieresis",
+ /* '345 229 "E5 */ "aring",
+ /* '346 230 "E6 */ "ae",
+ /* '347 231 "E7 */ "ccedilla",
+ /* '350 232 "E8 */ "egrave",
+ /* '351 233 "E9 */ "eacute",
+ /* '352 234 "EA */ "ecircumflex",
+ /* '353 235 "EB */ "edieresis",
+ /* '354 236 "EC */ "igrave",
+ /* '355 237 "ED */ "iacute",
+ /* '356 238 "EE */ "icircumflex",
+ /* '357 239 "EF */ "idieresis",
+ /* '360 240 "F0 */ "eth",
+ /* '361 241 "F1 */ "ntilde",
+ /* '362 242 "F2 */ "ograve",
+ /* '363 243 "F3 */ "oacute",
+ /* '364 244 "F4 */ "ocircumflex",
+ /* '365 245 "F5 */ "otilde",
+ /* '366 246 "F6 */ "odieresis",
+ /* '367 247 "F7 */ "divide",
+ /* '370 248 "F8 */ "oslash",
+ /* '371 249 "F9 */ "ugrave",
+ /* '372 250 "FA */ "uacute",
+ /* '373 251 "FB */ "ucircumflex",
+ /* '374 252 "FC */ "udieresis",
+ /* '375 253 "FD */ "yacute",
+ /* '376 254 "FE */ "thorn",
+ /* '377 255 "FF */ "ydieresis"};
+
+int main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ int h;
+ char temp[80];
+ char file[80];
+ char glyphcode[1];
+ FontPtr fontptr;
+ CharInfoRec *glyphs[1];
+ int count;
+ int code;
+ int rc = -1;
+ float efactor = 1.0, slant = 0.0;
+ encoding *ev = &ISOLatin1;
+
+ T1FillVals(&vals);
+ Type1RegisterFontFileFunctions();
+ entry.name.name = "-adobe-utopia-medium-r-normal--0-0-0-0-p-0-iso8859-1";
+
+ for (;;) {
+ printf("T1TEST: ");
+ gets(temp);
+ glyphcode[0] = '\0';
+
+ switch(temp[0]) {
+
+ case 'E':
+ if (1 != sscanf(&temp[2], "%f", &efactor))
+ printf("expansion factor?\n");
+ break;
+
+ case 'S':
+ if (1 != sscanf(&temp[2], "%f", &slant))
+ printf("slant?\n");
+ break;
+
+ case 'c':
+ if (1 != sscanf(&temp[2], "%c", glyphcode))
+ printf("glyph code?\n");
+ break;
+
+ case 'x':
+ if (1 != sscanf(&temp[2], "%x", &code))
+ printf("glyph code?\n");
+ else
+ glyphcode[0] = code;
+ break;
+
+ case 'd':
+ if (1 != sscanf(&temp[2], "%d", &code))
+ printf("glyph code?\n");
+ else
+ glyphcode[0] = code;
+ break;
+
+ case 'h':
+ if (1 != sscanf(&temp[2], "%d", &h))
+ printf("height?\n");
+ vals.pixel = h;
+ vals.point = (vals.pixel * DECIPOINTSPERINCH) / vals.y;
+ rc = Type1OpenScalable(*ev, &fontptr, 0, &entry,
+ file, &vals, 0, 0, efactor, slant);
+ break;
+
+ case 'f':
+ if (1 != sscanf(&temp[2], "%s", file))
+ printf("file name?\n");
+ rc = Type1OpenScalable(*ev, &fontptr, 0, &entry,
+ file, &vals, 0, 0, efactor, slant);
+ break;
+
+ case 't':
+ if (1 != sscanf(&temp[2], "%s", file))
+ printf("file name?\n");
+ vals.pixel = 8;
+ rc = Type1OpenScalable(*ev, &fontptr, 0, &entry,
+ file, &vals, 0, 0, efactor, slant);
+ if (rc != Successful) break;
+ vals.pixel = 20;
+ rc = Type1OpenScalable(*ev, &fontptr, 0, &entry,
+ file, &vals, 0, 0, efactor, slant);
+ if (rc != Successful) break;
+ vals.pixel = 50;
+ rc = Type1OpenScalable(*ev, &fontptr, 0, &entry,
+ file, &vals, 0, 0, efactor, slant);
+ glyphcode[0] = 'A';
+ printf("From font '%s':\n", file);
+ break;
+
+ case 'q':
+ return 0;
+
+ default:
+ printf("unknown command '%c', must one of 'ESqfchdxt'\n", temp[0]);
+
+ }
+ if (rc == Successful) {
+ if (glyphcode[0] != '\0') {
+ (*fontptr->get_glyphs)(fontptr, 1, glyphcode, 0, &count, glyphs);
+ if (count > 0)
+ Display(glyphs[0]);
+ else
+ printf("Code %x not valid in this font\n", glyphcode[0]);
+ }
+ }
+ else
+ printf("Bad font (rc = %d, file='%s')\n", rc, file);
+ }
+}
+
+void Display(glyph)
+ CharInfoRec *glyph;
+{
+ int h,w;
+ unsigned char *p;
+ int data;
+ int i;
+
+ p = (unsigned char *) glyph->bits;
+
+ printf("Metrics: left=%d, right=%d, w=%d, above=%d, below=%d\n",
+ glyph->metrics.leftSideBearing,
+ glyph->metrics.rightSideBearing,
+ glyph->metrics.characterWidth,
+ glyph->metrics.ascent,
+ glyph->metrics.descent);
+
+ for (h=glyph->metrics.ascent + glyph->metrics.descent; --h >= 0;) {
+ w = glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing;
+ while (w > 0) {
+ data = *p++;
+ for (i=0; i<8; i++) {
+ if (--w < 0)
+ break;
+ if (data & 0x80)
+ printf("X");
+ else
+ printf(".");
+ data <<= 1;
+ }
+ }
+ printf("\n");
+ }
+}
+
+T1FillVals(vals)
+ FontScalablePtr vals;
+{
+ fsResolution *res;
+ int x_res = DEFAULTRES;
+ int y_res = DEFAULTRES;
+ int pointsize = DEFAULTPOINTSIZE; /* decipoints */
+ int num_res;
+
+ /* Must have x, y, and pixel */
+ if (!vals->x || !vals->y || !vals->pixel) {
+ res = (fsResolution *) GetClientResolutions(&num_res);
+ if (num_res) {
+ if (res->x_resolution)
+ x_res = res->x_resolution;
+ if (res->y_resolution)
+ y_res = res->y_resolution;
+ if (res->point_size)
+ pointsize = res->point_size;
+ }
+ if (!vals->x)
+ vals->x = x_res;
+ if (!vals->y)
+ vals->y = y_res;
+ if (!vals->point) {
+ if (!vals->pixel) vals->point = pointsize;
+ else vals->point = (vals->pixel * DECIPOINTSPERINCH) / vals->y;
+ }
+ if (!vals->pixel)
+ vals->pixel = (vals->point * vals->y) / DECIPOINTSPERINCH;
+ /* Make sure above arithmetic is normally in range and will
+ round properly. +++ */
+ }
+}
+
+int CheckFSFormat(format, fmask, bit, byte, scan, glyph, image)
+ int format,fmask,*bit,*byte,*scan,*glyph,*image;
+{
+ *bit = *byte = 1;
+ *glyph = *scan = *image = 1;
+ return Successful;
+
+}
+
+char *MakeAtom(p)
+ char *p;
+{
+ return p;
+}
+GetClientResolutions(resP)
+ int *resP;
+{
+ *resP = 0;
+};
+
+char *Xalloc(size)
+ int size;
+{
+ extern char *malloc();
+ return(malloc(size));
+}
+
+void Xfree()
+{
+ free();
+}
+
+FontDefaultFormat() { ; }
+
+FontFileRegisterRenderer() { ; }
+
+GenericGetBitmaps() { ; }
+GenericGetExtents() { ; }
+
+FontParseXLFDName() { ; }
+FontComputeInfoAccelerators() { ; }