Path: seismo!harvard!talcott!panda!sources-request From: sources-request@panda.UUCP Newsgroups: mod.sources Subject: Troff->HP Laserjet filter - newfonts.c Message-ID: <1363@panda.UUCP> Date: 31 Jan 86 22:34:14 GMT Sender: jpn@panda.UUCP Lines: 241 Approved: jpn@panda.UUCP Mod.sources: Volume 3, Issue 100 Submitted by: linus!mnetor!clewis (Chris Lewis) OOPS! I somehow forgot to ship one of the source files for my Troff->HP Laserjet filter. Here it is: [sorry about that] #!/bin/sh echo 'Start of pack.out, part 01 of 01:' echo 'x - newfonts.c' sed 's/^X//' > newfonts.c << '/' X/***************************************************************** X X Copyright 1985. All Rights Reserved Chris Lewis X X Module : newfonts.c 1.3 X Date submitted : 86/01/30 09:19:57 X Author : Chris Lewis X Origin : Permission to copy and further distribute is X freely given provided this copyright notice remains X intact and that this software is not sold for profit. X Description : Description of the file X X******************************************************************/ X X#ifndef lint Xstatic char SrcId[] = "@(#) newfonts.c:1.3"; X#endif X#include X#include "../fonts/mkfonts/vfont.h" X Xextern FILE *diagFile; X#define DEBUGPRINTF if (diagFile) debugprintf Xextern char *fontLib; X Xstatic int dpi = 75; X Xstatic struct header header; Xstatic struct dispatch D[256]; Xstatic unsigned char imageTable[BUFSIZ*10]; X X/* "s" is font name, point is desired point size, if (flag), use X bigger fonts if possible */ Xloadfont(s, point, quality) Xchar *s; Xint point; Xint quality; { X static char oldfont[BUFSIZ], buf[BUFSIZ], fontBuf[BUFSIZ]; X FILE *f; X register int i; X sprintf(buf, "%s.%d", s, point); X if (strcmp(oldfont, buf) == 0) X return(dpi); X strcpy(oldfont, buf); X if (s[0] != '/') { X strcpy(buf, fontLib); X strcat(buf, s); X } X if (quality > 1) { X i = point * 4; X dpi = 300; X do { X sprintf(fontBuf, "%s.%d", buf, i); X DEBUGPRINTF("Trying for font %s\n", fontBuf); X if (access(fontBuf, 04) == 0) X goto useit; X i >>= 1; X dpi /= 2; X } while (dpi >= 75); X dpi = 0; X return(0); X } else { X sprintf(fontBuf, "%s.%d", buf, point); X dpi = 75; X } X Xuseit: X X if (!(f = fopen(fontBuf, "r"))) { X fprintf(stderr, "lcat: Could not load font %s, using native\n", X fontBuf); X dpi = 0; X return(0); X } X DEBUGPRINTF("Loaded font %s (dpi: %d)\n", fontBuf, dpi); X if (fread(&header, sizeof(header), 1, f) != 1) { X fprintf(stderr, "lcat: Bad font file header\n"); X exit(1); X } X if (header.magic != 0436) { X fprintf(stderr, "lcat: Bad font magic number\n"); X exit(1); X } X if (fread(D, sizeof(struct dispatch), 256, f) != 256) { X fprintf(stderr, "lcat: Could not load font dispatch table\n"); X exit(1); X } X if (fread(imageTable, 1, header.size, f) != header.size) { X fprintf(stderr, "lcat: Error reading image table\n"); X exit(1); X } X return(dpi); X} X X#define UNASS 0 X Xstatic unsigned char flashtovfnt[108] = { X /* 1 */ 'h', /*h*/ X /* 2 */ 't', /*t*/ X /* 3 */ 'n', /*n*/ X /* 4 */ 'm', /*m*/ X /* 5 */ 'l', /*l*/ X /* 6 */ 'i', /*i*/ X /* 7 */ 'z', /*z*/ X /* 8 */ 's', /*s*/ X /* 9 */ 'd', /*d*/ X /* 10 */ 'b', /*b*/ X /* 11 */ 'x', /*x*/ X /* 12 */ 'f', /*f*/ X /* 13 */ 'j', /*j*/ X /* 14 */ 'u', /*u*/ X /* 15 */ 'k', /*k*/ X /* 16 */ UNASS, /*unassigned*/ X /* 17 */ 'p', /*p*/ X /* 18 */ UNASS, /*3/4 em*/ X /* 19 */ ';', /*;*/ X /* 20 */ UNASS, /*unassigned*/ X /* 21 */ 'a', /*a*/ X /* 22 */ '_', /*horizontal rule*/ X /* 23 */ 'c', /*c*/ X /* 24 */ '`', /*` open*/ X /* 25 */ 'e', /*e*/ X /* 26 */ '\'', /*' close*/ X /* 27 */ 'o', /*o*/ X /* 28 */ UNASS, /*1/4*/ X /* 29 */ 'r', /*r*/ X /* 30 */ UNASS, /*1/2*/ X /* 31 */ 'v', /*v*/ X /* 32 */ '-', /*- hyphen*/ X /* 33 */ 'w', /*w*/ X /* 34 */ 'q', /*q*/ X /* 35 */ '/', /*/*/ X /* 36 */ '.', /*.*/ X /* 37 */ 'g', /*g*/ X /* 38 */ UNASS, /*3/4*/ X /* 39 */ ',', /*,*/ X /* 40 */ '&', /*&*/ X /* 41 */ 'y', /*y*/ X /* 42 */ UNASS, /*unassigned*/ X /* 43 */ '%', /*%*/ X /* 44 */ UNASS, /*unassigned*/ X /* 45 */ 'Q', /*Q*/ X /* 46 */ 'T', /*T*/ X /* 47 */ 'O', /*O*/ X /* 48 */ 'H', /*H*/ X /* 49 */ 'N', /*N*/ X /* 50 */ 'M', /*M*/ X /* 51 */ 'L', /*L*/ X /* 52 */ 'R', /*R*/ X /* 53 */ 'G', /*G*/ X /* 54 */ 'I', /*I*/ X /* 55 */ 'P', /*P*/ X /* 56 */ 'C', /*C*/ X /* 57 */ 'V', /*V*/ X /* 58 */ 'E', /*E*/ X /* 59 */ 'Z', /*Z*/ X /* 60 */ 'D', /*D*/ X /* 61 */ 'B', /*B*/ X /* 62 */ 'S', /*S*/ X /* 63 */ 'Y', /*Y*/ X /* from here on are actually code 1-45, upper half of font */ X /* 64 */ 'F', /*F*/ X /* 65 */ 'X', /*X*/ X /* 66 */ 'A', /*A*/ X /* 67 */ 'W', /*W*/ X /* 68 */ 'J', /*J*/ X /* 69 */ 'U', /*U*/ X /* 70 */ 'K', /*K*/ X /* 71 */ '0', /*0*/ X /* 72 */ '1', /*1*/ X /* 73 */ '2', /*2*/ X /* 74 */ '3', /*3*/ X /* 75 */ '4', /*4*/ X /* 76 */ '5', /*5*/ X /* 77 */ '6', /*6*/ X /* 78 */ '7', /*7*/ X /* 79 */ '8', /*8*/ X /* 80 */ '9', /*9*/ X /* 81 */ '*', /***/ X /* 82 */ '-', /*minus*/ X /* 83 */ UNASS, /*fi*/ X /* 84 */ UNASS, /*fl*/ X /* 85 */ UNASS, /*ff*/ X /* 86 */ 0xa2, /*cent sign*/ X /* 87 */ UNASS, /*ffl*/ X /* 88 */ UNASS, /*ffi*/ X /* 89 */ '(', /*(*/ X /* 90 */ ')', /*)*/ X /* 91 */ '[', /*[*/ X /* 92 */ ']', /*]*/ X /* 93 */ UNASS, /*degree*/ X /* 94 */ UNASS, /*dagger*/ X /* 95 */ '=', /*=*/ X /* 96 */ 0xa8, /*registered*/ X /* 97 */ ':', /*:*/ X /* 98 */ '+', /*+*/ X /* 99 */ UNASS, /*unassigned*/ X /* 100 */ '!', /*!*/ X /* 101 */ 0xd7, /*bullet*/ X /* 102 */ '?', /*?*/ X /* 103 */ UNASS, /*foot mark*/ X /* 104 */ '|', /*|*/ X /* 105 */ UNASS, /*unassigned*/ X /* 106 */ 0xa9, /*copyright*/ X /* 107 */ UNASS, /*square*/ X /* 108 */ '$' /*$*/ X}; X Xflashrast(ch, points, ftype) Xint ch, points, ftype; { X register int idx = flashtovfnt[ch]; X register int i,j,H,V; X register unsigned char *bp; X V = D[idx].up + D[idx].down; X H = (D[idx].left + D[idx].right + 7) / 8; X bp = &imageTable[D[idx].addr]; X DEBUGPRINTF("ch=%d,idx=%d,V=%d,H=%d\n", ch, idx, V, H); X printf("\033&a-%dV", (D[idx].up * 720) / dpi); X printf("\033*t%dR", dpi); X for (i = 0; i < V; i++) { X printf("\033*r1A"); X printf("\033*b%dW", H); X for (j = 0; j < H; j++) X putchar(*bp++); X } X printf("\033*rB"); X} / echo 'Part 01 of pack.out complete.' exit