From 11d3cb0dd56ddc7df49570e41c3f8f9f01d872d1 Mon Sep 17 00:00:00 2001
From: Simon Robertshaw <simon@hardwired.org.uk>
Date: Mon, 8 Aug 2011 10:16:31 +0100
Subject: [PATCH] Update font editor

---
 font/Makefile   |   6 +++
 font/font.bin   | Bin 30980 -> 30980 bytes
 font/unpacker.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 113 insertions(+)
 create mode 100644 font/unpacker.c

diff --git a/font/Makefile b/font/Makefile
index 7bb04e0a0..70f1ff809 100644
--- a/font/Makefile
+++ b/font/Makefile
@@ -1,5 +1,11 @@
 editor: editor.c
 	gcc -oeditor -DSCALE=2 -DFONTEDITOR editor.c -lSDL -lm -O3 -ffast-math -march=k8 -Wall -std=c99
+	
+packer: packer.c
+	gcc -opacker -DFONTEDITOR editor.c -lSDL -lm -O3 -ffast-math -march=k8 -Wall -std=c99
+	
+unpacker: unpacker.c
+	gcc -ounpacker -DFONTEDITOR editor.c -lSDL -lm -O3 -ffast-math -march=k8 -Wall -std=c99
 
 clean:
 	rm -f editor packer
diff --git a/font/font.bin b/font/font.bin
index b81615a3d7ad7e8a7aab2b62ac92e7c02939bfd5..3eabed0a25a614d24092d300e65a68ecfd23f78f 100644
GIT binary patch
literal 30980
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

delta 92
zcmZqq#MttQk(q~!eX^pk;zX6XjO?2Q8MFB(D=_+Rt`QJco1AUTwRxr)i!x9|e6oNK
m+vG<YBK*wE49pB*zzhPDA8Lq9{+=klS%EQzA4~vMy8r-QuNJQW

diff --git a/font/unpacker.c b/font/unpacker.c
new file mode 100644
index 000000000..a2a4cc661
--- /dev/null
+++ b/font/unpacker.c
@@ -0,0 +1,107 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "font.h"
+
+#define CELLW	12
+#define CELLH	10
+
+char xsize=CELLW, ysize=CELLH;
+char base=7, top=2;
+char font[256][CELLH][CELLW];
+char width[256];
+
+int bits_n = 0, bits_a = 0;
+int flush_bits(void)
+{
+    if(bits_n) {
+	bits_a >>= 8-bits_n;
+	printf("0x%02X, ", bits_a);
+	bits_a = 0;
+	bits_n = 0;
+	return 1;
+    }
+    return 0;
+}
+int stock_bits(int b, int nb)
+{
+    bits_a >>= nb;
+    bits_a |= b << (8-nb);
+    bits_n += nb;
+    if(bits_n >= 8) {
+	printf("0x%02X, ", bits_a);
+	bits_a = 0;
+	bits_n = 0;
+	return 1;
+    }
+    return 0;
+}
+
+int save_char(int c)
+{
+    int nb = 1;
+    int x, y;
+
+    if(!width[c])
+	return 0;
+
+    printf("    0x%02X, ", width[c]);
+
+    for(y=0; y<CELLH; y++)
+	for(x=0; x<width[c]; x++)
+	    nb += stock_bits(font[c][y][x]&3, 2);
+    nb += flush_bits();
+
+    printf("\n");
+
+    return nb;
+}
+
+void load_char(int c)
+{
+    unsigned char *start = font_data + font_ptrs[c];
+    int x, y, w, b;
+
+    w = *(start ++);
+
+    if(!w)
+	return;
+
+    b = 0;
+    for(y=0; y<CELLH; y++)
+	for(x=0; x<w; x++) {
+	    font[c][y][x] = ((*start) >> b) & 3;
+	    b += 2;
+	    if(b >= 8) {
+		start ++;
+		b = 0;
+	    }
+	}
+
+    width[c] = w;
+printf("%02x: %d\n", c, w);
+}
+
+char *tag = "(c) 2011 Stanislaw Skowronek";
+
+int main(int argc, char *argv[])
+{
+    FILE *f;
+    int i;
+
+    for(i=0; i<sizeof(font_ptrs)/sizeof(short); i++)
+	load_char(i);
+
+    f = fopen("font.bin", "w");
+    fwrite(&xsize, 1, 1, f);
+    fwrite(&ysize, 1, 1, f);
+    fwrite(&base, 1, 1, f);
+    fwrite(&top, 1, 1, f);
+    fwrite(width, 1, 256, f);
+    fwrite(font, CELLW*CELLH, 256, f);
+    fclose(f);
+
+    return 0;
+}
\ No newline at end of file