diff options
Diffstat (limited to 'src/cmd/tcs/font/main.c')
-rw-r--r-- | src/cmd/tcs/font/main.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/cmd/tcs/font/main.c b/src/cmd/tcs/font/main.c new file mode 100644 index 00000000..acc3ea3f --- /dev/null +++ b/src/cmd/tcs/font/main.c @@ -0,0 +1,87 @@ +#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"); +} |