65 |
|
struct font *next; /* next font in list */ |
66 |
|
} FONT; |
67 |
|
|
68 |
+ |
extern char *fgetword(); |
69 |
+ |
|
70 |
|
extern GLYPH *getglyph(); |
71 |
|
|
72 |
|
extern FONT *getfont(); |
206 |
|
getfont(fname) /* return font fname */ |
207 |
|
char *fname; |
208 |
|
{ |
209 |
+ |
char buf[16]; |
210 |
|
FILE *fp; |
211 |
|
char *pathname, *err; |
212 |
|
int gn, ngv, gv; |
230 |
|
pathname); |
231 |
|
error(SYSTEM, errmsg); |
232 |
|
} |
233 |
< |
while (fscanf(fp, "%d", &gn) == 1) { /* get each glyph */ |
233 |
> |
while (fgetword(buf,sizeof(buf),fp) != NULL) { /* get each glyph */ |
234 |
> |
if (!isint(buf)) |
235 |
> |
goto nonint; |
236 |
> |
gn = atoi(buf); |
237 |
|
if (gn < 0 || gn > 255) { |
238 |
|
err = "illegal"; |
239 |
|
goto fonterr; |
242 |
|
err = "duplicate"; |
243 |
|
goto fonterr; |
244 |
|
} |
245 |
< |
if (fscanf(fp, "%d", &ngv) != 1 || |
246 |
< |
ngv < 0 || ngv > 255) { |
245 |
> |
if (fgetword(buf,sizeof(buf),fp) == NULL || !isint(buf) || |
246 |
> |
(ngv = atoi(buf)) < 0 || ngv > 255) { |
247 |
|
err = "bad # vertices for"; |
248 |
|
goto fonterr; |
249 |
|
} |
254 |
|
*g++ = ngv; |
255 |
|
ngv *= 2; |
256 |
|
while (ngv--) { |
257 |
< |
if (fscanf(fp, "%d", &gv) != 1 || |
258 |
< |
gv < 0 || gv > 255) { |
257 |
> |
if (fgetword(buf,sizeof(buf),fp) == NULL || |
258 |
> |
!isint(buf) || |
259 |
> |
(gv = atoi(buf)) < 0 || gv > 255) { |
260 |
|
err = "bad vertex for"; |
261 |
|
goto fonterr; |
262 |
|
} |
266 |
|
fclose(fp); |
267 |
|
f->next = fontlist; |
268 |
|
return(fontlist = f); |
269 |
+ |
nonint: |
270 |
+ |
sprintf(errmsg, "non-integer in font file \"%s\"", pathname); |
271 |
+ |
error(USER, errmsg); |
272 |
|
fonterr: |
273 |
|
sprintf(errmsg, "%s character (%d) in font file \"%s\"", |
274 |
|
err, gn, pathname); |