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 e6f4b2e3 2003-10-13 devnull char *buf, *nambuf, *root;
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 e6f4b2e3 2003-10-13 devnull root = getenv("PLAN9");
19 e6f4b2e3 2003-10-13 devnull if(root == nil)
20 e6f4b2e3 2003-10-13 devnull return 0;
21 e6f4b2e3 2003-10-13 devnull nambuf = malloc(strlen(root)+5+strlen(name+13)+1);
22 e6f4b2e3 2003-10-13 devnull if(nambuf == nil)
23 e6f4b2e3 2003-10-13 devnull return 0;
24 e6f4b2e3 2003-10-13 devnull strcpy(nambuf, root);
25 e6f4b2e3 2003-10-13 devnull strcat(nambuf, "/font");
26 e6f4b2e3 2003-10-13 devnull strcat(nambuf, name+13);
27 e6f4b2e3 2003-10-13 devnull if((fd = open(nambuf, OREAD)) < 0){
28 e6f4b2e3 2003-10-13 devnull free(nambuf);
29 e6f4b2e3 2003-10-13 devnull return 0;
30 e6f4b2e3 2003-10-13 devnull }
31 e6f4b2e3 2003-10-13 devnull name = nambuf;
32 e6f4b2e3 2003-10-13 devnull }
33 76193d7c 2003-09-30 devnull if(fd < 0)
34 76193d7c 2003-09-30 devnull return 0;
35 76193d7c 2003-09-30 devnull
36 161060a4 2003-10-11 devnull n = _drawflength(fd);
37 76193d7c 2003-09-30 devnull buf = malloc(n+1);
38 76193d7c 2003-09-30 devnull if(buf == 0){
39 76193d7c 2003-09-30 devnull close(fd);
40 e6f4b2e3 2003-10-13 devnull free(nambuf);
41 76193d7c 2003-09-30 devnull return 0;
42 76193d7c 2003-09-30 devnull }
43 76193d7c 2003-09-30 devnull buf[n] = 0;
44 76193d7c 2003-09-30 devnull i = read(fd, buf, n);
45 76193d7c 2003-09-30 devnull close(fd);
46 76193d7c 2003-09-30 devnull if(i != n){
47 76193d7c 2003-09-30 devnull free(buf);
48 e6f4b2e3 2003-10-13 devnull free(nambuf);
49 76193d7c 2003-09-30 devnull return 0;
50 76193d7c 2003-09-30 devnull }
51 76193d7c 2003-09-30 devnull fnt = buildfont(d, buf, name);
52 76193d7c 2003-09-30 devnull free(buf);
53 e6f4b2e3 2003-10-13 devnull free(nambuf);
54 76193d7c 2003-09-30 devnull return fnt;
55 76193d7c 2003-09-30 devnull }