more files
This commit is contained in:
parent
173302913e
commit
61f5c35c94
37 changed files with 5947 additions and 1 deletions
139
src/cmd/postscript/tr2post/readDESC.c
Normal file
139
src/cmd/postscript/tr2post/readDESC.c
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
#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;
|
||||
Biobuf *Bfd;
|
||||
int i, state = -1;
|
||||
int fontindex = 0;
|
||||
|
||||
if (debug) Bprint(Bstderr, "readDESC()\n");
|
||||
descfilename = galloc(descfilename, strlen(descnameformat)+strlen(FONTDIR)
|
||||
+strlen(devname)+1, "readdesc");
|
||||
sprint(descfilename, descnameformat, FONTDIR, devname);
|
||||
if ((bfd = Bopen(unsharp(descfilename), OREAD)) == 0) {
|
||||
error(WARNING, "cannot open file %s\n", descfilename);
|
||||
return(0);
|
||||
}
|
||||
Bfd = bfd;
|
||||
|
||||
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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue