Blame


1 ed7c8e8d 2003-09-30 devnull #include <u.h>
2 ed7c8e8d 2003-09-30 devnull #include <libc.h>
3 ed7c8e8d 2003-09-30 devnull #include <draw.h>
4 ed7c8e8d 2003-09-30 devnull
5 ed7c8e8d 2003-09-30 devnull Subfont*
6 ed7c8e8d 2003-09-30 devnull getdefont(Display *d)
7 ed7c8e8d 2003-09-30 devnull {
8 ed7c8e8d 2003-09-30 devnull char *hdr, *p;
9 ed7c8e8d 2003-09-30 devnull int n;
10 ed7c8e8d 2003-09-30 devnull Fontchar *fc;
11 ed7c8e8d 2003-09-30 devnull Subfont *f;
12 ed7c8e8d 2003-09-30 devnull int ld;
13 ed7c8e8d 2003-09-30 devnull Rectangle r;
14 ed7c8e8d 2003-09-30 devnull Image *i;
15 ed7c8e8d 2003-09-30 devnull
16 ed7c8e8d 2003-09-30 devnull /*
17 ed7c8e8d 2003-09-30 devnull * make sure data is word-aligned. this is true with Plan 9 compilers
18 ed7c8e8d 2003-09-30 devnull * but not in general. the byte order is right because the data is
19 ed7c8e8d 2003-09-30 devnull * declared as char*, not ulong*.
20 ed7c8e8d 2003-09-30 devnull */
21 ed7c8e8d 2003-09-30 devnull p = (char*)defontdata;
22 ed7c8e8d 2003-09-30 devnull n = (ulong)p & 3;
23 ed7c8e8d 2003-09-30 devnull if(n != 0){
24 ed7c8e8d 2003-09-30 devnull memmove(p+(4-n), p, sizeofdefont-n);
25 ed7c8e8d 2003-09-30 devnull p += 4-n;
26 ed7c8e8d 2003-09-30 devnull }
27 ed7c8e8d 2003-09-30 devnull ld = atoi(p+0*12);
28 ed7c8e8d 2003-09-30 devnull r.min.x = atoi(p+1*12);
29 ed7c8e8d 2003-09-30 devnull r.min.y = atoi(p+2*12);
30 ed7c8e8d 2003-09-30 devnull r.max.x = atoi(p+3*12);
31 ed7c8e8d 2003-09-30 devnull r.max.y = atoi(p+4*12);
32 ed7c8e8d 2003-09-30 devnull
33 ed7c8e8d 2003-09-30 devnull i = allocimage(d, r, drawld2chan[ld], 0, 0);
34 ed7c8e8d 2003-09-30 devnull if(i == 0)
35 ed7c8e8d 2003-09-30 devnull return 0;
36 ed7c8e8d 2003-09-30 devnull
37 ed7c8e8d 2003-09-30 devnull p += 5*12;
38 ed7c8e8d 2003-09-30 devnull n = loadimage(i, r, (uchar*)p, (defontdata+sizeofdefont)-(uchar*)p);
39 ed7c8e8d 2003-09-30 devnull if(n < 0){
40 ed7c8e8d 2003-09-30 devnull freeimage(i);
41 ed7c8e8d 2003-09-30 devnull return 0;
42 ed7c8e8d 2003-09-30 devnull }
43 ed7c8e8d 2003-09-30 devnull
44 ed7c8e8d 2003-09-30 devnull hdr = p+n;
45 ed7c8e8d 2003-09-30 devnull n = atoi(hdr);
46 ed7c8e8d 2003-09-30 devnull p = hdr+3*12;
47 ed7c8e8d 2003-09-30 devnull fc = malloc(sizeof(Fontchar)*(n+1));
48 ed7c8e8d 2003-09-30 devnull if(fc == 0){
49 ed7c8e8d 2003-09-30 devnull freeimage(i);
50 ed7c8e8d 2003-09-30 devnull return 0;
51 ed7c8e8d 2003-09-30 devnull }
52 ed7c8e8d 2003-09-30 devnull _unpackinfo(fc, (uchar*)p, n);
53 ed7c8e8d 2003-09-30 devnull f = allocsubfont("*default*", n, atoi(hdr+12), atoi(hdr+24), fc, i);
54 ed7c8e8d 2003-09-30 devnull if(f == 0){
55 ed7c8e8d 2003-09-30 devnull freeimage(i);
56 ed7c8e8d 2003-09-30 devnull free(fc);
57 ed7c8e8d 2003-09-30 devnull return 0;
58 ed7c8e8d 2003-09-30 devnull }
59 ed7c8e8d 2003-09-30 devnull return f;
60 ed7c8e8d 2003-09-30 devnull }