#include <u.h> | |
#include <libc.h> | |
#include <draw.h> | |
extern vlong _drawflength(int); | |
Font* | |
openfont(Display *d, char *name) | |
{ | |
Font *fnt; | |
int fd, i, n; | |
char *buf, *nambuf; | |
nambuf = 0; | |
fd = open(name, OREAD); | |
if(fd < 0 && strncmp(name, "/lib/font/bit/", 14) == 0){ | |
nambuf = smprint("#9/font/%s", name+14); | |
if(nambuf == nil) | |
return 0; | |
nambuf = unsharp(nambuf); | |
if(nambuf == nil) | |
return 0; | |
if((fd = open(nambuf, OREAD)) < 0){ | |
free(nambuf); | |
return 0; | |
} | |
name = nambuf; | |
} | |
if(fd < 0) | |
return 0; | |
n = _drawflength(fd); | |
buf = malloc(n+1); | |
if(buf == 0){ | |
close(fd); | |
free(nambuf); | |
return 0; | |
} | |
buf[n] = 0; | |
i = read(fd, buf, n); | |
close(fd); | |
if(i != n){ | |
free(buf); | |
free(nambuf); | |
return 0; | |
} | |
fnt = buildfont(d, buf, name); | |
free(buf); | |
free(nambuf); | |
return fnt; | |
} |