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);
return(TRUE);
}