diff options
Diffstat (limited to 'libmemdraw/openmemsubfont.c')
| -rw-r--r-- | libmemdraw/openmemsubfont.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/libmemdraw/openmemsubfont.c b/libmemdraw/openmemsubfont.c new file mode 100644 index 00000000..8fdf8101 --- /dev/null +++ b/libmemdraw/openmemsubfont.c @@ -0,0 +1,51 @@ +#include "lib9.h" +#include "draw.h" +#include "memdraw.h" + +Memsubfont* +openmemsubfont(char *name) +{ + Memsubfont *sf; + Memimage *i; + Fontchar *fc; + int fd, n; + char hdr[3*12+4+1]; + uchar *p = nil; + + fd = open(name, OREAD); + if(fd < 0) + return nil; + i = readmemimage(fd); + if(i == nil) + goto Err; + if(read(fd, hdr, 3*12) != 3*12){ + werrstr("openmemsubfont: header read error: %r"); + goto Err; + } + n = atoi(hdr); + p = malloc(6*(n+1)); + if(p == nil) + goto Err; + if(read(fd, p, 6*(n+1)) != 6*(n+1)){ + werrstr("openmemsubfont: fontchar read error: %r"); + goto Err; + } + fc = malloc(sizeof(Fontchar)*(n+1)); + if(fc == nil) + goto Err; + _unpackinfo(fc, p, n); + sf = allocmemsubfont(name, n, atoi(hdr+12), atoi(hdr+24), fc, i); + if(sf == nil){ + free(fc); + goto Err; + } + free(p); + return sf; +Err: + close(fd); + if (i != nil) + freememimage(i); + if (p != nil) + free(p); + return nil; +} |
