ref: ecba7822e316d6cb8370eec97862215402811e82
dir: /sys/src/cmd/tcs/font/main.c/
#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"); }