a
This commit is contained in:
53
libmemdraw/openmemsubfont.c
Normal file
53
libmemdraw/openmemsubfont.c
Normal file
@ -0,0 +1,53 @@
|
||||
#include <u.h>
|
||||
#include <libc.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;
|
||||
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user