rsc | ed7c8e8 | 2003-09-30 17:47:42 +0000 | [diff] [blame] | 1 | #include <u.h> |
| 2 | #include <libc.h> |
| 3 | #include <draw.h> |
| 4 | |
| 5 | static |
| 6 | void |
| 7 | packinfo(Fontchar *fc, uchar *p, int n) |
| 8 | { |
| 9 | int j; |
| 10 | |
| 11 | for(j=0; j<=n; j++){ |
| 12 | p[0] = fc->x; |
| 13 | p[1] = fc->x>>8; |
| 14 | p[2] = fc->top; |
| 15 | p[3] = fc->bottom; |
| 16 | p[4] = fc->left; |
| 17 | p[5] = fc->width; |
| 18 | fc++; |
| 19 | p += 6; |
| 20 | } |
| 21 | } |
| 22 | |
| 23 | int |
| 24 | writesubfont(int fd, Subfont *f) |
| 25 | { |
| 26 | char hdr[3*12+1]; |
| 27 | uchar *data; |
| 28 | int nb; |
| 29 | |
| 30 | sprint(hdr, "%11d %11d %11d ", f->n, f->height, f->ascent); |
| 31 | if(write(fd, hdr, 3*12) != 3*12){ |
| 32 | Err: |
| 33 | werrstr("writesubfont: bad write: %r"); |
| 34 | return -1; |
| 35 | } |
| 36 | nb = 6*(f->n+1); |
| 37 | data = malloc(nb); |
| 38 | if(data == nil) |
| 39 | return -1; |
| 40 | packinfo(f->info, data, f->n); |
| 41 | if(write(fd, data, nb) != nb) |
| 42 | goto Err; |
| 43 | free(data); |
| 44 | return 0; |
| 45 | } |