|  | #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"); | 
|  | } |