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