From 324891a5579d6f504201a6107369c64dab245a98 Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 25 Jun 2006 18:58:06 +0000 Subject: separate out --- src/libmemdraw/openmemsubfont.c | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/libmemdraw/openmemsubfont.c (limited to 'src/libmemdraw/openmemsubfont.c') diff --git a/src/libmemdraw/openmemsubfont.c b/src/libmemdraw/openmemsubfont.c new file mode 100644 index 00000000..c8d926e4 --- /dev/null +++ b/src/libmemdraw/openmemsubfont.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +Memsubfont* +openmemsubfont(char *name) +{ + Memsubfont *sf; + Memimage *i; + Fontchar *fc; + int fd, n; + char hdr[3*12+4+1]; + uchar *p; + + fd = open(name, OREAD); + if(fd < 0) + return nil; + p = 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; +} -- cgit v1.2.3