123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #include <u.h>
- #include <libc.h>
- #include <bio.h>
- #include <ctype.h>
- #include "common.h"
- #include "tr2post.h"
- #include "comments.h"
- #include "path.h"
- char *printdesclang = 0;
- char *encoding = 0;
- int devres;
- int unitwidth;
- int nspechars = 0;
- struct charent spechars[MAXSPECHARS];
- #define NDESCTOKS 9
- static char *desctoks[NDESCTOKS] = {
- "PDL",
- "Encoding",
- "fonts",
- "sizes",
- "res",
- "hor",
- "vert",
- "unitwidth",
- "charset"
- };
- char *spechar[MAXSPECHARS];
- int
- hash(char *s, int l) {
- unsigned i;
- for (i=0; *s; s++)
- i = i*10 + *s;
- return(i % l);
- }
- BOOLEAN
- readDESC(void) {
- char token[MAXTOKENSIZE];
- char *descnameformat = "%s/dev%s/DESC";
- char *descfilename = 0;
- Biobuf *bfd;
- Biobufhdr *Bfd;
- int i, state = -1;
- int fontindex = 0;
- if (debug) Bprint(Bstderr, "readDESC()\n");
- descfilename = galloc(descfilename, strlen(descnameformat)+strlen(FONTDIR)
- +strlen(devname), "readdesc");
- sprint(descfilename, descnameformat, FONTDIR, devname);
- if ((bfd = Bopen(descfilename, OREAD)) == 0) {
- error(WARNING, "cannot open file %s\n", descfilename);
- return(0);
- }
- Bfd = &(bfd->Biobufhdr);
- while (Bgetfield(Bfd, 's', token, MAXTOKENSIZE) > 0) {
- for (i=0; i<NDESCTOKS; i++) {
- if (strcmp(desctoks[i], token) == 0) {
- state = i;
- break;
- }
- }
- if (i<NDESCTOKS) continue;
- switch (state) {
- case 0:
- printdesclang=galloc(printdesclang, strlen(token)+1, "readdesc:");
- strcpy(printdesclang, token);
- if (debug) Bprint(Bstderr, "PDL %s\n", token);
- break;
- case 1:
- encoding=galloc(encoding, strlen(token)+1, "readdesc:");
- strcpy(encoding, token);
- if (debug) Bprint(Bstderr, "encoding %s\n", token);
- break;
- case 2:
- if (fontmnt <=0) {
- if (!isdigit(*token)) {
- error(WARNING, "readdesc: expecting number of fonts in mount table.\n");
- return(FALSE);
- }
- fontmnt = atoi(token) + 1;
- fontmtab = galloc(fontmtab, fontmnt*sizeof(char *), "readdesc:");
-
- for (i=0; i<fontmnt; i++)
- fontmtab[i] = 0;
- fontindex = 0;
- } else {
- mountfont(++fontindex, token);
- findtfn(token, TRUE);
- }
- break;
- case 3:
- /* I don't really care about sizes */
- break;
- case 4:
- /* device resolution in dots per inch */
- if (!isdigit(*token)) {
- error(WARNING, "readdesc: expecting device resolution.\n");
- return(FALSE);
- }
- devres = atoi(token);
- if (debug) Bprint(Bstderr, "res %d\n", devres);
- break;
- case 5:
- /* I don't really care about horizontal motion resolution */
- if (debug) Bprint(Bstderr, "ignoring horizontal resolution\n");
- break;
- case 6:
- /* I don't really care about vertical motion resolution */
- if (debug) Bprint(Bstderr, "ignoring vertical resolution\n");
- break;
- case 7:
- /* unitwidth is the font size at which the character widths are 1:1 */
- if (!isdigit(*token)) {
- error(WARNING, "readdesc: expecting unitwidth.\n");
- return(FALSE);
- }
- unitwidth = atoi(token);
- if (debug) Bprint(Bstderr, "unitwidth %d\n", unitwidth);
- break;
- case 8:
- /* I don't really care about this list of special characters */
- if (debug) Bprint(Bstderr, "ignoring special character <%s>\n", token);
- break;
- default:
- if (*token == '#')
- Brdline(Bfd, '\n');
- else
- error(WARNING, "unknown token %s in DESC file.\n", token);
- break;
- }
- }
- Bterm(Bfd);
- }
|