#include #include #include #define FILESIZE 262144 #define X_CHAR 96 #define Y_CHAR 96 static uint8_t buf[FILESIZE]; static uint8_t px[Y_CHAR * 16][X_CHAR * 16]; int kuten2glyphno(int ku, int ten) { int n; n = ku * 96 + ten; if (n >= 8192) n = -1; return n; } int loadfile(char *filename) { int i; FILE *fp; fp = fopen(filename, "r"); if (fp == NULL) { printf("loadfile: %s open error\n", filename); return -1; } for (i = 0; i < FILESIZE; i++) { buf[i] = fgetc(fp); } fclose(fp); return 0; } void draw_char(int x, int y, int n) { int dx, dy; uint16_t d; x *= 16; y *= 16; for (dy = 0; dy < 16; dy++) { if (n >= 0) { if (dy < 8) { d = (buf[n * 0x20 + dy + 0] << 8) | buf[n * 0x20 + dy + 8]; } else { d = (buf[n * 0x20 + dy + 8] << 8) | buf[n * 0x20 + dy + 16]; } } else { d = ~0; } for (dx = 0; dx < 16; dx++) { if (d & (0x8000 >> dx)) { px[y + dy][x + dx] = 1; } else { px[y + dy][x + dx] = 0; } } } return; } int main(int argc, char *argv[]) { int n, x, y, c; if (argc < 2) { printf("usage: %s [filename]\n", argv[0]); goto fin0; } if (loadfile(argv[1])) { printf("file load error\n"); goto fin0; } for (y = 0; y < Y_CHAR; y++) { for (x = 0; x < X_CHAR; x++) { n = kuten2glyphno(y, x); draw_char(x, y, n); } } for (y = 0; y < Y_CHAR * 16; y++) { for (x = 0; x < X_CHAR * 16; x++) { c = px[y][x] ? 0xff : 0x00; putchar(c); putchar(c); putchar(c); } } fin0: return 0; }