blob: db25152cdecd91aed78a400647d18eb293a8c227 [file] [log] [blame]
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
#include "hdr.h"
/*
produces the bitmap for the designated han characters
*/
static void usage(void);
enum { Jis = 0, Big5, Gb_bdf, Gb_qw };
enum { Size24 = 0, Size16 };
struct {
char *names[2];
mapfn *mfn;
readbitsfn *bfn;
} source[] = {
[Jis] { "../han/jis.bits", "../han/jis16.bits", kmap, kreadbits },
[Big5] { "no 24 bit file", "../han/big5.16.bits", bmap, breadbits },
[Gb_bdf] { "no 24 bit file", "../han/cclib16fs.bdf", gmap, greadbits },
[Gb_qw] { "no 24 bit file", "no 16bit file", gmap, qreadbits }
};
void
main(int argc, char **argv)
{
int from, to;
int size = 24;
int src = Jis;
char *file = 0;
long nc, nb;
int x;
uchar *bits;
long *chars;
int raw = 0;
Bitmap *b, *b1;
Subfont *f;
int *found;
ARGBEGIN{
case 'f': file = ARGF(); break;
case 'r': raw = 1; break;
case '5': src = Big5; break;
case 's': size = 16; break;
case 'g': src = Gb_bdf; break;
case 'q': src = Gb_qw; break;
default: usage();
}ARGEND
if(file == 0)
file = source[src].names[(size==24)? Size24:Size16];
if(argc != 2)
usage();
from = strtol(argv[0], (char **)0, 0);
to = strtol(argv[1], (char **)0, 0);
binit(0, 0, "fontgen");
nc = to-from+1;
nb = size*size/8; /* bytes per char */
nb *= nc;
bits = (uchar *)malloc(nb);
chars = (long *)malloc(sizeof(long)*nc);
found = (int *)malloc(sizeof(found[0])*nc);
if(bits == 0 || chars == 0){
fprint(2, "%s: couldn't malloc %d bytes for %d chars\n", argv0, nb, nc);
exits("out of memory");
}
if(raw){
for(x = from; x <= to; x++)
chars[x-from] = x;
} else
source[src].mfn(from, to, chars);
memset(bits, 0, nb);
b = source[src].bfn(file, nc, chars, size, bits, &found);
b1 = balloc(b->r, b->ldepth);
bitblt(b1, b1->r.min, b, b->r, S);
f = bf(nc, size, b1, found);
wrbitmapfile(1, b);
wrsubfontfile(1, f);/**/
exits(0);
}
static void
usage(void)
{
fprint(2, "Usage: %s [-s] from to\n", argv0);
exits("usage");
}