aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/tcs/font/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/tcs/font/main.c')
-rw-r--r--src/cmd/tcs/font/main.c87
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");
+}