11 |
|
|
12 |
|
#include "paths.h" |
13 |
|
#include "rtio.h" |
14 |
+ |
#include "rterror.h" |
15 |
|
#include "font.h" |
16 |
|
|
17 |
|
#define galloc(nv) (GLYPH *)malloc(sizeof(GLYPH)+2*sizeof(GORD)*(nv)) |
26 |
|
char *fname |
27 |
|
) |
28 |
|
{ |
29 |
+ |
char embuf[512]; |
30 |
|
FILE *fp; |
31 |
|
char *pathname, *err = NULL; |
32 |
|
unsigned wsum, hsum, ngly; |
42 |
|
} |
43 |
|
/* load the font file */ |
44 |
|
if ((pathname = getpath(fname, getrlibpath(), R_OK)) == NULL) { |
45 |
< |
fprintf(stderr, "cannot find font file \"%s\"\n", fname); |
45 |
> |
sprintf(embuf, "cannot find font file \"%s\"\n", fname); |
46 |
> |
eputs(embuf); |
47 |
|
return(NULL); |
48 |
|
} |
49 |
|
if ((fp = fopen(pathname, "r")) == NULL) { |
50 |
< |
fprintf(stderr, "cannot open font file \"%s\"\n", pathname); |
50 |
> |
sprintf(embuf, "cannot open font file \"%s\"\n", pathname); |
51 |
> |
eputs(embuf); |
52 |
|
return(NULL); |
53 |
|
} |
54 |
|
f = (FONT *)calloc(1, sizeof(FONT)); |
73 |
|
err = "bad # vertices for"; |
74 |
|
goto fonterr; |
75 |
|
} |
76 |
+ |
if (ngv > f->maxgv) |
77 |
+ |
f->maxgv = ngv; |
78 |
|
g = galloc(ngv); |
79 |
|
if (g == NULL) |
80 |
|
goto memerr; |
116 |
|
f->next = fontlist; |
117 |
|
return(fontlist = f); |
118 |
|
nonint: |
119 |
< |
fprintf(stderr, "non-integer in font file \"%s\"\n", pathname); |
119 |
> |
sprintf(embuf, "non-integer in font file \"%s\"\n", pathname); |
120 |
> |
eputs(embuf); |
121 |
|
fclose(fp); |
122 |
|
return(NULL); |
123 |
|
fonterr: |
124 |
< |
fprintf(stderr, "%s character (%d) in font file \"%s\"\n", |
124 |
> |
sprintf(embuf, "%s character (%d) in font file \"%s\"\n", |
125 |
|
err, gn, pathname); |
126 |
+ |
eputs(embuf); |
127 |
|
fclose(fp); |
128 |
|
return(NULL); |
129 |
|
memerr: |
130 |
< |
fprintf(stderr, "out of memory in getfont()\n"); |
130 |
> |
eputs("out of memory in getfont()\n"); |
131 |
|
fclose(fp); |
132 |
|
return(NULL); |
133 |
|
} |
142 |
|
FONT *fl, *f; |
143 |
|
int i; |
144 |
|
/* check reference count */ |
145 |
< |
if (fnt != NULL && ((fnt->nref-- > 1) | retainfonts)) |
145 |
> |
if (fnt != NULL && (fnt->nref -= (f->nref > 0)) | retainfonts)) |
146 |
|
return; |
147 |
|
head.next = fontlist; |
148 |
|
fl = &head; |