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