diff --git a/programs/demos/life2/life_bmp.bat b/programs/demos/life2/life_bmp.bat index 502954b2f..fdd421c73 100644 --- a/programs/demos/life2/life_bmp.bat +++ b/programs/demos/life2/life_bmp.bat @@ -1,4 +1,4 @@ -bmp2h < life_bmp.bat > life_bmp.h +life_bmp\bmp2h < life_bmp.bat > life_bmp.h rem menu_picture rem life_bmp\hidemenu.bmp diff --git a/programs/demos/life2/life_bmp/bmp2h.cpp b/programs/demos/life2/life_bmp/bmp2h.cpp index 0ac0ce45b..4bbbf07a2 100755 --- a/programs/demos/life2/life_bmp/bmp2h.cpp +++ b/programs/demos/life2/life_bmp/bmp2h.cpp @@ -1,194 +1,195 @@ +#include #include #include #include #include #include "picture.h" - + char str[1000], name[1000], *s; int type; - + int mx = 0, my = 0, slen; BYTE *tex = 0; - + inline void out_uc(unsigned char c, int &k) { - if (k < 0) {printf("\n\""); k = 0;} - printf("\\x%02X", c); - k++; - if (k >= 20) {printf("\""); k = -1;} + if (k < 0) {printf("\n\""); k = 0;} + printf("\\x%02X", c); + k++; + if (k >= 20) {printf("\""); k = -1;} } - + inline void out_cl(int &k) { - if (k >= 0) {printf("\""); k = -1;} + if (k >= 0) {printf("\""); k = -1;} } - + inline void out_end(int &k) { - if (k == -10) return; - if (type == 0) {out_uc(0, k); out_uc(255, k);} - out_cl(k); - printf(";\n\n"); - k = -10; + if (k == -10) return; + if (type == 0) {out_uc(0, k); out_uc(255, k);} + out_cl(k); + printf(";\n\n"); + k = -10; } - + void del_last_space(char *s0) { - char *s1; - for (s1 = s0; *s1; s1++) - { - if (!isspace(*s1)) s0 = s1 + 1; - } - *s0 = 0; + char *s1; + for (s1 = s0; *s1; s1++) + { + if (!isspace(*s1)) s0 = s1 + 1; + } + *s0 = 0; } - + int main() { - BYTE *t0; - int i, j, k, m, t, v; -// randomize(); - srand(time(NULL)); - i = rand() + (rand() << 16); - j = rand() + (rand() << 16); - k = rand() + (rand() << 16); - printf("#ifndef _INCLUDE_BITMAP_%08X_%08X_%08X__PICTURE_\n", i, j, k); - printf("#define _INCLUDE_BITMAP_%08X_%08X_%08X__PICTURE_\n", i, j, k); - strcpy(name, "bitmap_pictures"); - type = 0; - k = -10; - while (!feof(stdin)) - { - memset(str, 0, sizeof(str)); - fgets(str, sizeof(str)-1, stdin); - s = str; - while (*s && isspace(*s)) s++; - if (strncmp(s, "rem", 3) != 0) continue; - s += 3; - if (!isspace(*s)) continue; - while (*s && isspace(*s)) s++; - if (strncmp(s, "", 5) == 0) {s += 5; v = 0;} - else if (strncmp(s, ":set>", 5) == 0) {s += 5; v = 1;} - else if (strncmp(s, ":life>", 6) == 0) {s += 6; v = 2;} - else continue; - if (!isspace(*s)) continue; - while (*s && isspace(*s)) s++; - if (!*s) continue; - del_last_space(s); - strcpy(name, s); - out_end(k); - type = v; - continue; - } - else if (strncmp(s, "", 6) == 0) - { - s += 6; - if (!isspace(*s)) continue; - while (*s && isspace(*s)) s++; - if (!*s) continue; - i = 2*atoi(s); - while (--i >= 0) out_uc(0, k); - continue; - } - else if (strncmp(s, "') s++; - else continue; - } - else continue; - if (!isspace(*s)) continue; - while (*s && isspace(*s)) s++; - if (!*s) continue; - del_last_space(s); - if ((PictureFileOpen(mx, my, tex, s) & PFO_MASK_ERROR) != 0) continue; - if (!tex || mx <= 0 || my <= 0) continue; - if (type == 0 || type == 1) - { - if (mx >= 256 || my >= 256) continue; - } - else if (type == 2) - { - if (mx >= 65536 || my >= 65536) continue; - } - slen = GetStringPictLenght(mx); - if (k == -10) - { - printf("\nconst unsigned char %s[] = \"", name); - if (type == 2) printf("#LifeBin 2.0\\n"); - printf("\""); - k = -1; - } - if (v & 1) - { - for (i = 0; i < my; i++) - { - t0 = tex + slen * i; - for (j = 3*mx; j > 0; j--) - { - t0[0] = (unsigned char)~t0[0]; - t0++; - } - } - } - m = 0; t = 0; - if (type == 0 || type == 1) - { - out_uc((unsigned char)mx, k); out_uc((unsigned char)my, k); - } - else if (type == 2) - { - out_uc((unsigned char)mx, k); out_uc((unsigned char)(mx >> 8), k); - out_uc((unsigned char)my, k); out_uc((unsigned char)(my >> 8), k); - } - for (i = 0; i < my; i++) - { - t0 = tex + slen * i; - for (j = mx; j > 0; j--) - { - if (type == 0) - { - out_uc(t0[2], k); out_uc(t0[1], k); out_uc(t0[0], k); - } - else if (type == 1) - { - m |= ((int)t0[0] + (int)t0[1] + (int)t0[2] >= 384) << t; - if (++t >= 8) {out_uc((unsigned char)m, k); m = 0; t = 0;} - } - else if (type == 2) - { - if ((int)t0[0] + (int)t0[1] + (int)t0[2] >= 384) - { - if (m) {out_uc((unsigned char)m, k); m = 0;} - out_uc(0, k); - } - else - { - if (m == 255) {out_uc((unsigned char)m, k); m = 0;} - m++; - } - } - t0 += 3; - } - } - if (type == 1) - { - if (t) out_uc((unsigned char)m, k); - } - else if (type == 2) - { - if (m) out_uc((unsigned char)m, k); - } - } - if (tex) delete[] tex; - out_end(k); - printf("#endif\n"); - return 0; -} \ No newline at end of file + BYTE *t0; + int i, j, k, m, t, v; +// randomize(); + srand(time(NULL)); + i = rand() + (rand() << 16); + j = rand() + (rand() << 16); + k = rand() + (rand() << 16); + printf("#ifndef _INCLUDE_BITMAP_%08X_%08X_%08X__PICTURE_\n", i, j, k); + printf("#define _INCLUDE_BITMAP_%08X_%08X_%08X__PICTURE_\n", i, j, k); + strcpy(name, "bitmap_pictures"); + type = 0; + k = -10; + while (!feof(stdin)) + { + memset(str, 0, sizeof(str)); + fgets(str, sizeof(str)-1, stdin); + s = str; + while (*s && isspace(*s)) s++; + if (strncmp(s, "rem", 3) != 0) continue; + s += 3; + if (!isspace(*s)) continue; + while (*s && isspace(*s)) s++; + if (strncmp(s, "", 5) == 0) {s += 5; v = 0;} + else if (strncmp(s, ":set>", 5) == 0) {s += 5; v = 1;} + else if (strncmp(s, ":life>", 6) == 0) {s += 6; v = 2;} + else continue; + if (!isspace(*s)) continue; + while (*s && isspace(*s)) s++; + if (!*s) continue; + del_last_space(s); + strcpy(name, s); + out_end(k); + type = v; + continue; + } + else if (strncmp(s, "", 6) == 0) + { + s += 6; + if (!isspace(*s)) continue; + while (*s && isspace(*s)) s++; + if (!*s) continue; + i = 2*atoi(s); + while (--i >= 0) out_uc(0, k); + continue; + } + else if (strncmp(s, "') s++; + else continue; + } + else continue; + if (!isspace(*s)) continue; + while (*s && isspace(*s)) s++; + if (!*s) continue; + del_last_space(s); + if ((PictureFileOpen(mx, my, tex, s) & PFO_MASK_ERROR) != 0) continue; + if (!tex || mx <= 0 || my <= 0) continue; + if (type == 0 || type == 1) + { + if (mx >= 256 || my >= 256) continue; + } + else if (type == 2) + { + if (mx >= 65536 || my >= 65536) continue; + } + slen = GetStringPictLenght(mx); + if (k == -10) + { + printf("\nconst unsigned char %s[] = \"", name); + if (type == 2) printf("#LifeBin 2.0\\n"); + printf("\""); + k = -1; + } + if (v & 1) + { + for (i = 0; i < my; i++) + { + t0 = tex + slen * i; + for (j = 3*mx; j > 0; j--) + { + t0[0] = (unsigned char)~t0[0]; + t0++; + } + } + } + m = 0; t = 0; + if (type == 0 || type == 1) + { + out_uc((unsigned char)mx, k); out_uc((unsigned char)my, k); + } + else if (type == 2) + { + out_uc((unsigned char)mx, k); out_uc((unsigned char)(mx >> 8), k); + out_uc((unsigned char)my, k); out_uc((unsigned char)(my >> 8), k); + } + for (i = 0; i < my; i++) + { + t0 = tex + slen * i; + for (j = mx; j > 0; j--) + { + if (type == 0) + { + out_uc(t0[2], k); out_uc(t0[1], k); out_uc(t0[0], k); + } + else if (type == 1) + { + m |= ((int)t0[0] + (int)t0[1] + (int)t0[2] >= 384) << t; + if (++t >= 8) {out_uc((unsigned char)m, k); m = 0; t = 0;} + } + else if (type == 2) + { + if ((int)t0[0] + (int)t0[1] + (int)t0[2] >= 384) + { + if (m) {out_uc((unsigned char)m, k); m = 0;} + out_uc(0, k); + } + else + { + if (m == 255) {out_uc((unsigned char)m, k); m = 0;} + m++; + } + } + t0 += 3; + } + } + if (type == 1) + { + if (t) out_uc((unsigned char)m, k); + } + else if (type == 2) + { + if (m) out_uc((unsigned char)m, k); + } + } + if (tex) delete[] tex; + out_end(k); + printf("#endif\n"); + return 0; +}