viric@0: #include viric@0: #include viric@0: viric@0: viric@0: static int width, height; viric@0: static char bname[50] = "noname"; viric@0: static int perline = 13; viric@0: viric@0: static char mask[9] = { 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff }; viric@0: static char imask[9] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; viric@0: viric@0: void viric@0: parameters(const int argn, char **argc) viric@0: { viric@0: if (argn != 3) viric@0: { viric@0: fprintf(stderr, "usage: %s \n", argc[0]); viric@0: exit(1); viric@0: } viric@0: viric@0: width = atoi(argc[1]); viric@0: height = atoi(argc[2]); viric@0: } viric@0: viric@0: void viric@0: writesize(int w, int h) viric@0: { viric@0: printf("#define %s_width %i\n", bname, w); viric@0: printf("#define %s_height %i\n", bname, h); viric@0: } viric@0: viric@0: char viric@0: cstart(int p, int n) viric@0: { viric@0: char c; viric@0: viric@0: if (p==0) viric@0: c=0xaa; viric@0: else viric@0: c=0x55; viric@0: viric@0: return c & mask[n]; viric@0: } viric@0: viric@0: char viric@0: cend(int p, int n) viric@0: { viric@0: char c; viric@0: viric@0: if (p==0) viric@0: c=0xaa; viric@0: else viric@0: c=0x55; viric@0: viric@0: return c & imask[n]; viric@0: } viric@0: viric@0: void viric@0: writebits(int w, int h) viric@0: { viric@0: int column; viric@0: int i; viric@0: int bits; viric@0: unsigned char c; viric@0: int pair; /* boolean */ viric@0: int leftline; viric@0: viric@0: printf("static char %s_bits[] = {\n", bname); viric@0: viric@0: bits=w*h; viric@0: leftline=w; viric@0: i=0; viric@0: column=0; viric@0: pair=0; viric@0: while(i < bits) viric@0: { viric@0: if(column == 0) viric@0: putchar(' '); viric@0: viric@0: /*fprintf(stderr, "leftline=%i\n", leftline);*/ viric@0: if (leftline >= 8) viric@0: { viric@0: c = cstart(pair, 8); viric@0: printf("0x%2x", (unsigned int) c); viric@0: column++; viric@0: leftline -= 8; viric@0: i += 8; viric@0: } viric@0: else if (leftline > 0) viric@0: { viric@0: c = cend(pair, leftline); viric@0: pair ^= 1; /* 1->0, 0->1 */ viric@0: c |= cstart(pair, 8 - leftline); viric@0: printf("0x%2x", (unsigned int) c); viric@0: i += leftline; viric@0: leftline = w; viric@0: column++; viric@0: } viric@0: else if (leftline == 0) viric@0: { viric@0: leftline = w; viric@0: pair ^= 1; /* 1->0, 0->1 */ viric@0: } viric@0: viric@0: if(i < bits && leftline != 0) viric@0: putchar(','); viric@0: viric@0: if (column > perline && leftline != 0) viric@0: { viric@0: putchar('\n'); viric@0: column = 0; viric@0: } viric@0: viric@0: } viric@0: viric@0: printf("};\n"); viric@0: } viric@0: viric@0: int main(int argn, char **argc) viric@0: { viric@0: parameters(argn, argc); viric@0: writesize(width, height); viric@0: writebits(width, height); viric@0: return 0; viric@0: }