--- ray/src/common/font.c 1992/06/24 19:01:00 2.4 +++ ray/src/common/font.c 1992/11/21 21:35:36 2.6 @@ -17,6 +17,8 @@ static char SCCSid[] = "$SunId$ LBL"; extern char *libpath; /* list of library directories */ +extern char *fgetword(); + static FONT *fontlist = NULL; /* list of loaded fonts */ @@ -30,7 +32,7 @@ char *fname; unsigned wsum, hsum, ngly; int gn, ngv; register int gv; - register GLYPH *g; + register GLYPH *g; GORD *gp; register FONT *f; @@ -122,9 +124,32 @@ memerr: } +freefont(fname) /* free a font (free all if fname==NULL) */ +char *fname; +{ + FONT head; + register FONT *fl, *f; + register int i; + + head.next = fontlist; + fl = &head; + while ((f = fl->next) != NULL) + if (fname == NULL || !strcmp(fname, f->name)) { + fl->next = f->next; + for (i = 0; i < 256; i++) + if (f->fg[i] != NULL) + free((char *)f->fg[i]); + freestr(f->name); + free((char *)f); + } else + fl = f; + fontlist = head.next; +} + + int uniftext(sp, tp, f) /* uniformly space text line */ -register short *sp; /* returned character spacing */ +register short *sp; /* returned character spacing */ register char *tp; /* text line */ register FONT *f; /* font */ { @@ -148,7 +173,7 @@ FONT *f; /* font */ int cis; /* intercharacter spacing */ { int linelen; - register GLYPH *gp; + register GLYPH *gp; gp = NULL; while (*tp && (gp = f->fg[*tp++&0xff]) == NULL)