Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

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