/* * --- public domain, no warranty. */ #include #include #include #include /* FONTX2 header */ #define CODETYPE_ASCII 0 #define CODETYPE_KANJI 1 /* common */ typedef struct { uint8_t identifier[6]; uint8_t fontname[8]; uint8_t xsize; uint8_t ysize; uint8_t codetype; } __attribute__((packed)) FONTX2_HEADER; /* font data buffer */ #define BUFFERSIZE (4096) static uint8_t Buf[BUFFERSIZE]; static void convert_ank(uint8_t *buf) { int i; uint8_t d[14]; FILE *fp; FONTX2_HEADER h; fp = fopen("tters7x14.fnt", "wb"); if (fp == NULL) goto fin0; /* header */ strncpy(h.identifier, "FONTX2", sizeof(h.identifier)); strncpy(h.fontname, "TEATERM ", sizeof(h.fontname)); h.xsize = 7; h.ysize = 14; h.codetype = CODETYPE_ASCII; fwrite(&h, sizeof(h), 1, fp); /* 0x00-0x1f: blank */ memset(d, 0, sizeof(d)); for (i = 0x00; i < 0x20; i++) fwrite(d, sizeof(d), 1, fp); /* 0x20-0x7f */ for (i = 0x20; i < 0x80; i++) { memcpy(d, &buf[(i - 0x20) * sizeof(d)], sizeof(d)); fwrite(d, sizeof(d), 1, fp); } /* 0x80-0x9f: blank */ memset(d, 0, sizeof(d)); for (i = 0x80; i < 0xa0; i++) fwrite(d, sizeof(d), 1, fp); /* 0xa0-0xdf */ for (i = 0xa0; i < 0xe0; i++) { memcpy(d, &buf[(i - 0xa0 + 0x60) * sizeof(d)], sizeof(d)); fwrite(d, sizeof(d), 1, fp); } /* 0xe0-ff: blank */ memset(d, 0, sizeof(d)); for (i = 0xe0; i < 0x100; i++) fwrite(d, sizeof(d), 1, fp); fclose(fp); fin0: return; } static int bload(char *filename, uint8_t *buf, int size) { int result; FILE *fp; fp = fopen(filename, "rb"); if (fp == NULL) { result = -1; goto fin0; } fread(buf, 1, size, fp); fclose(fp); result = 0; fin0: return result; } int main(int argc, char *argv[]) { if (bload("TTERS.FNT", Buf, 2304) < 0) { printf("TTERS.FNT not found\n"); goto fin0; } convert_ank(Buf); fin0: return 0; }