Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
5 extern vlong _drawflength(int);
7 Font*
8 openfont(Display *d, char *name)
9 {
10 Font *fnt;
11 int fd, i, n;
12 char *buf, *nambuf;
14 nambuf = 0;
15 fd = open(name, OREAD);
17 if(fd < 0 && strncmp(name, "/lib/font/bit/", 14) == 0){
18 nambuf = smprint("#9/font/%s", name+14);
19 if(nambuf == nil)
20 return 0;
21 if((fd = open(nambuf, OREAD)) < 0){
22 free(nambuf);
23 return 0;
24 }
25 name = nambuf;
26 }
27 if(fd < 0)
28 return 0;
30 n = _drawflength(fd);
31 buf = malloc(n+1);
32 if(buf == 0){
33 close(fd);
34 free(nambuf);
35 return 0;
36 }
37 buf[n] = 0;
38 i = read(fd, buf, n);
39 close(fd);
40 if(i != n){
41 free(buf);
42 free(nambuf);
43 return 0;
44 }
45 fnt = buildfont(d, buf, name);
46 free(buf);
47 free(nambuf);
48 return fnt;
49 }