Blame


1 61f5c35c 2004-05-15 devnull #include <u.h>
2 61f5c35c 2004-05-15 devnull #include <libc.h>
3 61f5c35c 2004-05-15 devnull #include <bio.h>
4 61f5c35c 2004-05-15 devnull #include <ctype.h>
5 61f5c35c 2004-05-15 devnull #include "common.h"
6 61f5c35c 2004-05-15 devnull #include "tr2post.h"
7 61f5c35c 2004-05-15 devnull #include "comments.h"
8 61f5c35c 2004-05-15 devnull #include "path.h"
9 61f5c35c 2004-05-15 devnull
10 61f5c35c 2004-05-15 devnull char *printdesclang = 0;
11 61f5c35c 2004-05-15 devnull char *encoding = 0;
12 61f5c35c 2004-05-15 devnull int devres;
13 61f5c35c 2004-05-15 devnull int unitwidth;
14 61f5c35c 2004-05-15 devnull int nspechars = 0;
15 61f5c35c 2004-05-15 devnull struct charent spechars[MAXSPECHARS];
16 61f5c35c 2004-05-15 devnull
17 61f5c35c 2004-05-15 devnull #define NDESCTOKS 9
18 61f5c35c 2004-05-15 devnull static char *desctoks[NDESCTOKS] = {
19 61f5c35c 2004-05-15 devnull "PDL",
20 61f5c35c 2004-05-15 devnull "Encoding",
21 61f5c35c 2004-05-15 devnull "fonts",
22 61f5c35c 2004-05-15 devnull "sizes",
23 61f5c35c 2004-05-15 devnull "res",
24 61f5c35c 2004-05-15 devnull "hor",
25 61f5c35c 2004-05-15 devnull "vert",
26 61f5c35c 2004-05-15 devnull "unitwidth",
27 61f5c35c 2004-05-15 devnull "charset"
28 61f5c35c 2004-05-15 devnull };
29 61f5c35c 2004-05-15 devnull
30 61f5c35c 2004-05-15 devnull char *spechar[MAXSPECHARS];
31 61f5c35c 2004-05-15 devnull
32 61f5c35c 2004-05-15 devnull int
33 61f5c35c 2004-05-15 devnull hash(char *s, int l) {
34 61f5c35c 2004-05-15 devnull unsigned i;
35 61f5c35c 2004-05-15 devnull
36 61f5c35c 2004-05-15 devnull for (i=0; *s; s++)
37 61f5c35c 2004-05-15 devnull i = i*10 + *s;
38 61f5c35c 2004-05-15 devnull return(i % l);
39 61f5c35c 2004-05-15 devnull }
40 61f5c35c 2004-05-15 devnull
41 61f5c35c 2004-05-15 devnull BOOLEAN
42 61f5c35c 2004-05-15 devnull readDESC(void) {
43 61f5c35c 2004-05-15 devnull char token[MAXTOKENSIZE];
44 61f5c35c 2004-05-15 devnull char *descnameformat = "%s/dev%s/DESC";
45 61f5c35c 2004-05-15 devnull char *descfilename = 0;
46 61f5c35c 2004-05-15 devnull Biobuf *bfd;
47 e8fb1d3e 2004-05-17 devnull Biobuf *Bfd;
48 61f5c35c 2004-05-15 devnull int i, state = -1;
49 61f5c35c 2004-05-15 devnull int fontindex = 0;
50 61f5c35c 2004-05-15 devnull
51 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "readDESC()\n");
52 61f5c35c 2004-05-15 devnull descfilename = galloc(descfilename, strlen(descnameformat)+strlen(FONTDIR)
53 b855148c 2004-05-16 devnull +strlen(devname), "readdesc");
54 61f5c35c 2004-05-15 devnull sprint(descfilename, descnameformat, FONTDIR, devname);
55 e8fb1d3e 2004-05-17 devnull if ((bfd = Bopen(unsharp(descfilename), OREAD)) == 0) {
56 61f5c35c 2004-05-15 devnull error(WARNING, "cannot open file %s\n", descfilename);
57 61f5c35c 2004-05-15 devnull return(0);
58 61f5c35c 2004-05-15 devnull }
59 b855148c 2004-05-16 devnull Bfd = bfd; /* &(bfd->Biobufhdr); */
60 61f5c35c 2004-05-15 devnull
61 61f5c35c 2004-05-15 devnull while (Bgetfield(Bfd, 's', token, MAXTOKENSIZE) > 0) {
62 61f5c35c 2004-05-15 devnull for (i=0; i<NDESCTOKS; i++) {
63 61f5c35c 2004-05-15 devnull if (strcmp(desctoks[i], token) == 0) {
64 61f5c35c 2004-05-15 devnull state = i;
65 61f5c35c 2004-05-15 devnull break;
66 61f5c35c 2004-05-15 devnull }
67 61f5c35c 2004-05-15 devnull }
68 61f5c35c 2004-05-15 devnull if (i<NDESCTOKS) continue;
69 61f5c35c 2004-05-15 devnull switch (state) {
70 61f5c35c 2004-05-15 devnull case 0:
71 61f5c35c 2004-05-15 devnull printdesclang=galloc(printdesclang, strlen(token)+1, "readdesc:");
72 61f5c35c 2004-05-15 devnull strcpy(printdesclang, token);
73 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "PDL %s\n", token);
74 61f5c35c 2004-05-15 devnull break;
75 61f5c35c 2004-05-15 devnull case 1:
76 61f5c35c 2004-05-15 devnull encoding=galloc(encoding, strlen(token)+1, "readdesc:");
77 61f5c35c 2004-05-15 devnull strcpy(encoding, token);
78 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "encoding %s\n", token);
79 61f5c35c 2004-05-15 devnull break;
80 61f5c35c 2004-05-15 devnull case 2:
81 61f5c35c 2004-05-15 devnull if (fontmnt <=0) {
82 3bd56b04 2005-09-09 devnull if (!isdigit((uchar)*token)) {
83 61f5c35c 2004-05-15 devnull error(WARNING, "readdesc: expecting number of fonts in mount table.\n");
84 61f5c35c 2004-05-15 devnull return(FALSE);
85 61f5c35c 2004-05-15 devnull }
86 61f5c35c 2004-05-15 devnull fontmnt = atoi(token) + 1;
87 61f5c35c 2004-05-15 devnull fontmtab = galloc(fontmtab, fontmnt*sizeof(char *), "readdesc:");
88 61f5c35c 2004-05-15 devnull
89 61f5c35c 2004-05-15 devnull for (i=0; i<fontmnt; i++)
90 61f5c35c 2004-05-15 devnull fontmtab[i] = 0;
91 61f5c35c 2004-05-15 devnull fontindex = 0;
92 61f5c35c 2004-05-15 devnull } else {
93 61f5c35c 2004-05-15 devnull mountfont(++fontindex, token);
94 61f5c35c 2004-05-15 devnull findtfn(token, TRUE);
95 61f5c35c 2004-05-15 devnull }
96 61f5c35c 2004-05-15 devnull break;
97 61f5c35c 2004-05-15 devnull case 3:
98 61f5c35c 2004-05-15 devnull /* I don't really care about sizes */
99 61f5c35c 2004-05-15 devnull break;
100 61f5c35c 2004-05-15 devnull case 4:
101 61f5c35c 2004-05-15 devnull /* device resolution in dots per inch */
102 3bd56b04 2005-09-09 devnull if (!isdigit((uchar)*token)) {
103 61f5c35c 2004-05-15 devnull error(WARNING, "readdesc: expecting device resolution.\n");
104 61f5c35c 2004-05-15 devnull return(FALSE);
105 61f5c35c 2004-05-15 devnull }
106 61f5c35c 2004-05-15 devnull devres = atoi(token);
107 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "res %d\n", devres);
108 61f5c35c 2004-05-15 devnull break;
109 61f5c35c 2004-05-15 devnull case 5:
110 61f5c35c 2004-05-15 devnull /* I don't really care about horizontal motion resolution */
111 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "ignoring horizontal resolution\n");
112 61f5c35c 2004-05-15 devnull break;
113 61f5c35c 2004-05-15 devnull case 6:
114 61f5c35c 2004-05-15 devnull /* I don't really care about vertical motion resolution */
115 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "ignoring vertical resolution\n");
116 61f5c35c 2004-05-15 devnull break;
117 61f5c35c 2004-05-15 devnull case 7:
118 61f5c35c 2004-05-15 devnull /* unitwidth is the font size at which the character widths are 1:1 */
119 3bd56b04 2005-09-09 devnull if (!isdigit((uchar)*token)) {
120 61f5c35c 2004-05-15 devnull error(WARNING, "readdesc: expecting unitwidth.\n");
121 61f5c35c 2004-05-15 devnull return(FALSE);
122 61f5c35c 2004-05-15 devnull }
123 61f5c35c 2004-05-15 devnull unitwidth = atoi(token);
124 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "unitwidth %d\n", unitwidth);
125 61f5c35c 2004-05-15 devnull break;
126 61f5c35c 2004-05-15 devnull case 8:
127 61f5c35c 2004-05-15 devnull /* I don't really care about this list of special characters */
128 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "ignoring special character <%s>\n", token);
129 61f5c35c 2004-05-15 devnull break;
130 61f5c35c 2004-05-15 devnull default:
131 61f5c35c 2004-05-15 devnull if (*token == '#')
132 61f5c35c 2004-05-15 devnull Brdline(Bfd, '\n');
133 61f5c35c 2004-05-15 devnull else
134 61f5c35c 2004-05-15 devnull error(WARNING, "unknown token %s in DESC file.\n", token);
135 61f5c35c 2004-05-15 devnull break;
136 61f5c35c 2004-05-15 devnull }
137 61f5c35c 2004-05-15 devnull }
138 61f5c35c 2004-05-15 devnull Bterm(Bfd);
139 e8fb1d3e 2004-05-17 devnull return 0;
140 61f5c35c 2004-05-15 devnull }