ref: 2b2c47d8c2f2572412994087c360a30fec5a6d71
dir: /tosubf.c/
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <memdraw.h>
void
usage(void)
{
fprint(2, "usage: %s [-a ASC] [-h HEIGHT] [-n NAME] [-o PATH] IMG [IMG..]\n", argv0);
exits("usage");
}
void
main(int argc, char **argv)
{
int x, k, n, fh, fa, fd, ofd;
char *name, *path;
Rectangle r;
Subfont *sf;
Fontchar *fc;
Memimage *i, **in, *out;
fh = 16;
fa = 12;
name = "urmom";
path = nil;
ofd = 1;
ARGBEGIN{
case 'a': fa = atoi(EARGF(usage())); break;
case 'h': fh = atoi(EARGF(usage())); break;
case 'n': name = EARGF(usage()); break;
case 'o': path = EARGF(usage()); break;
}ARGEND
if((n = argc) < 1)
usage();
if(path != nil && (ofd = create(path, OWRITE, 0664)) < 0)
sysfatal("open: %r");
if(memimageinit() < 0)
sysfatal("memimageinit: %r");
if((sf = mallocz(sizeof *sf, 1)) == nil
|| (fc = mallocz((n+1) * sizeof *fc, 1)) == nil
|| (in = mallocz(n * sizeof *in, 1)) == nil)
sysfatal("mallocz: %r");
x = k = 0;
while(*argv != nil){
if((fd = open(*argv, OREAD)) < 0)
sysfatal("open: %r");
if((i = readmemimage(fd)) == nil)
sysfatal("readmemimage: %r");
close(fd);
fc[k].x = x;
fc[k].top = i->r.min.y;
fc[k].bottom = i->r.max.y;
fc[k].left = i->r.min.x;
fc[k].width = Dx(i->r);
x += fc[k].width;
in[k] = i;
k++;
argv++;
}
fc[k].x = x;
if((out = allocmemimage(Rect(0, 0, x, fh), GREY1)) == nil)
sysfatal("allocmemimage: %r");
x = k = 0;
while(n-- > 0){
r = Rect(x, 0, x+fc[k].width, fc[k].bottom);
memimagedraw(out, r, in[k], in[k]->r.min, nil, ZP, SoverD);
x += fc[k].width;
k++;
}
sf->name = name;
sf->n = k;
sf->height = fh;
sf->ascent = fa;
sf->info = fc;
sf->ref = 1;
writememimage(ofd, out);
writesubfont(ofd, sf);
exits(nil);
}