Blame


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