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 nambuf = unsharp(nambuf);
22 if(nambuf == nil)
23 return 0;
24 if((fd = open(nambuf, OREAD)) < 0){
25 free(nambuf);
26 return 0;
27 }
28 name = nambuf;
29 }
30 if(fd < 0)
31 return 0;
33 n = _drawflength(fd);
34 buf = malloc(n+1);
35 if(buf == 0){
36 close(fd);
37 free(nambuf);
38 return 0;
39 }
40 buf[n] = 0;
41 i = read(fd, buf, n);
42 close(fd);
43 if(i != n){
44 free(buf);
45 free(nambuf);
46 return 0;
47 }
48 fnt = buildfont(d, buf, name);
49 free(buf);
50 free(nambuf);
51 return fnt;
52 }