Fix life_bmp

git-svn-id: svn://kolibrios.org@8138 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
maxcodehack 2020-11-05 16:15:31 +00:00
parent fcfab37b30
commit e923e0d4db
2 changed files with 173 additions and 172 deletions

View File

@ -1,4 +1,4 @@
bmp2h < life_bmp.bat > life_bmp.h life_bmp\bmp2h < life_bmp.bat > life_bmp.h
rem <array:bmp> menu_picture rem <array:bmp> menu_picture
rem <bitmap> life_bmp\hidemenu.bmp rem <bitmap> life_bmp\hidemenu.bmp

View File

@ -1,194 +1,195 @@
#include <windows.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h> #include <ctype.h>
#include <time.h> #include <time.h>
#include "picture.h" #include "picture.h"
char str[1000], name[1000], *s; char str[1000], name[1000], *s;
int type; int type;
int mx = 0, my = 0, slen; int mx = 0, my = 0, slen;
BYTE *tex = 0; BYTE *tex = 0;
inline void out_uc(unsigned char c, int &k) inline void out_uc(unsigned char c, int &k)
{ {
if (k < 0) {printf("\n\""); k = 0;} if (k < 0) {printf("\n\""); k = 0;}
printf("\\x%02X", c); printf("\\x%02X", c);
k++; k++;
if (k >= 20) {printf("\""); k = -1;} if (k >= 20) {printf("\""); k = -1;}
} }
inline void out_cl(int &k) inline void out_cl(int &k)
{ {
if (k >= 0) {printf("\""); k = -1;} if (k >= 0) {printf("\""); k = -1;}
} }
inline void out_end(int &k) inline void out_end(int &k)
{ {
if (k == -10) return; if (k == -10) return;
if (type == 0) {out_uc(0, k); out_uc(255, k);} if (type == 0) {out_uc(0, k); out_uc(255, k);}
out_cl(k); out_cl(k);
printf(";\n\n"); printf(";\n\n");
k = -10; k = -10;
} }
void del_last_space(char *s0) void del_last_space(char *s0)
{ {
char *s1; char *s1;
for (s1 = s0; *s1; s1++) for (s1 = s0; *s1; s1++)
{ {
if (!isspace(*s1)) s0 = s1 + 1; if (!isspace(*s1)) s0 = s1 + 1;
} }
*s0 = 0; *s0 = 0;
} }
int main() int main()
{ {
BYTE *t0; BYTE *t0;
int i, j, k, m, t, v; int i, j, k, m, t, v;
// randomize(); // randomize();
srand(time(NULL)); srand(time(NULL));
i = rand() + (rand() << 16); i = rand() + (rand() << 16);
j = rand() + (rand() << 16); j = rand() + (rand() << 16);
k = rand() + (rand() << 16); k = rand() + (rand() << 16);
printf("#ifndef _INCLUDE_BITMAP_%08X_%08X_%08X__PICTURE_\n", i, j, k); printf("#ifndef _INCLUDE_BITMAP_%08X_%08X_%08X__PICTURE_\n", i, j, k);
printf("#define _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"); strcpy(name, "bitmap_pictures");
type = 0; type = 0;
k = -10; k = -10;
while (!feof(stdin)) while (!feof(stdin))
{ {
memset(str, 0, sizeof(str)); memset(str, 0, sizeof(str));
fgets(str, sizeof(str)-1, stdin); fgets(str, sizeof(str)-1, stdin);
s = str; s = str;
while (*s && isspace(*s)) s++; while (*s && isspace(*s)) s++;
if (strncmp(s, "rem", 3) != 0) continue; if (strncmp(s, "rem", 3) != 0) continue;
s += 3; s += 3;
if (!isspace(*s)) continue; if (!isspace(*s)) continue;
while (*s && isspace(*s)) s++; while (*s && isspace(*s)) s++;
if (strncmp(s, "<array", 6) == 0) if (strncmp(s, "<array", 6) == 0)
{ {
s += 6; s += 6;
if (strncmp(s, ":bmp>", 5) == 0) {s += 5; v = 0;} if (strncmp(s, ":bmp>", 5) == 0) {s += 5; v = 0;}
else if (strncmp(s, ":set>", 5) == 0) {s += 5; v = 1;} else if (strncmp(s, ":set>", 5) == 0) {s += 5; v = 1;}
else if (strncmp(s, ":life>", 6) == 0) {s += 6; v = 2;} else if (strncmp(s, ":life>", 6) == 0) {s += 6; v = 2;}
else continue; else continue;
if (!isspace(*s)) continue; if (!isspace(*s)) continue;
while (*s && isspace(*s)) s++; while (*s && isspace(*s)) s++;
if (!*s) continue; if (!*s) continue;
del_last_space(s); del_last_space(s);
strcpy(name, s); strcpy(name, s);
out_end(k); out_end(k);
type = v; type = v;
continue; continue;
} }
else if (strncmp(s, "<skip>", 6) == 0) else if (strncmp(s, "<skip>", 6) == 0)
{ {
s += 6; s += 6;
if (!isspace(*s)) continue; if (!isspace(*s)) continue;
while (*s && isspace(*s)) s++; while (*s && isspace(*s)) s++;
if (!*s) continue; if (!*s) continue;
i = 2*atoi(s); i = 2*atoi(s);
while (--i >= 0) out_uc(0, k); while (--i >= 0) out_uc(0, k);
continue; continue;
} }
else if (strncmp(s, "<bitmap", 7) == 0) else if (strncmp(s, "<bitmap", 7) == 0)
{ {
s += 7; v = 0; s += 7; v = 0;
for (;;) for (;;)
{ {
if (strncmp(s, ":inv", 4) == 0) {s += 4; v ^= 1;} if (strncmp(s, ":inv", 4) == 0) {s += 4; v ^= 1;}
else break; else break;
} }
if (s[0] == '>') s++; if (s[0] == '>') s++;
else continue; else continue;
} }
else continue; else continue;
if (!isspace(*s)) continue; if (!isspace(*s)) continue;
while (*s && isspace(*s)) s++; while (*s && isspace(*s)) s++;
if (!*s) continue; if (!*s) continue;
del_last_space(s); del_last_space(s);
if ((PictureFileOpen(mx, my, tex, s) & PFO_MASK_ERROR) != 0) continue; if ((PictureFileOpen(mx, my, tex, s) & PFO_MASK_ERROR) != 0) continue;
if (!tex || mx <= 0 || my <= 0) continue; if (!tex || mx <= 0 || my <= 0) continue;
if (type == 0 || type == 1) if (type == 0 || type == 1)
{ {
if (mx >= 256 || my >= 256) continue; if (mx >= 256 || my >= 256) continue;
} }
else if (type == 2) else if (type == 2)
{ {
if (mx >= 65536 || my >= 65536) continue; if (mx >= 65536 || my >= 65536) continue;
} }
slen = GetStringPictLenght(mx); slen = GetStringPictLenght(mx);
if (k == -10) if (k == -10)
{ {
printf("\nconst unsigned char %s[] = \"", name); printf("\nconst unsigned char %s[] = \"", name);
if (type == 2) printf("#LifeBin 2.0\\n"); if (type == 2) printf("#LifeBin 2.0\\n");
printf("\""); printf("\"");
k = -1; k = -1;
} }
if (v & 1) if (v & 1)
{ {
for (i = 0; i < my; i++) for (i = 0; i < my; i++)
{ {
t0 = tex + slen * i; t0 = tex + slen * i;
for (j = 3*mx; j > 0; j--) for (j = 3*mx; j > 0; j--)
{ {
t0[0] = (unsigned char)~t0[0]; t0[0] = (unsigned char)~t0[0];
t0++; t0++;
} }
} }
} }
m = 0; t = 0; m = 0; t = 0;
if (type == 0 || type == 1) if (type == 0 || type == 1)
{ {
out_uc((unsigned char)mx, k); out_uc((unsigned char)my, k); out_uc((unsigned char)mx, k); out_uc((unsigned char)my, k);
} }
else if (type == 2) else if (type == 2)
{ {
out_uc((unsigned char)mx, k); out_uc((unsigned char)(mx >> 8), k); 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); out_uc((unsigned char)my, k); out_uc((unsigned char)(my >> 8), k);
} }
for (i = 0; i < my; i++) for (i = 0; i < my; i++)
{ {
t0 = tex + slen * i; t0 = tex + slen * i;
for (j = mx; j > 0; j--) for (j = mx; j > 0; j--)
{ {
if (type == 0) if (type == 0)
{ {
out_uc(t0[2], k); out_uc(t0[1], k); out_uc(t0[0], k); out_uc(t0[2], k); out_uc(t0[1], k); out_uc(t0[0], k);
} }
else if (type == 1) else if (type == 1)
{ {
m |= ((int)t0[0] + (int)t0[1] + (int)t0[2] >= 384) << t; 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;} if (++t >= 8) {out_uc((unsigned char)m, k); m = 0; t = 0;}
} }
else if (type == 2) else if (type == 2)
{ {
if ((int)t0[0] + (int)t0[1] + (int)t0[2] >= 384) if ((int)t0[0] + (int)t0[1] + (int)t0[2] >= 384)
{ {
if (m) {out_uc((unsigned char)m, k); m = 0;} if (m) {out_uc((unsigned char)m, k); m = 0;}
out_uc(0, k); out_uc(0, k);
} }
else else
{ {
if (m == 255) {out_uc((unsigned char)m, k); m = 0;} if (m == 255) {out_uc((unsigned char)m, k); m = 0;}
m++; m++;
} }
} }
t0 += 3; t0 += 3;
} }
} }
if (type == 1) if (type == 1)
{ {
if (t) out_uc((unsigned char)m, k); if (t) out_uc((unsigned char)m, k);
} }
else if (type == 2) else if (type == 2)
{ {
if (m) out_uc((unsigned char)m, k); if (m) out_uc((unsigned char)m, k);
} }
} }
if (tex) delete[] tex; if (tex) delete[] tex;
out_end(k); out_end(k);
printf("#endif\n"); printf("#endif\n");
return 0; return 0;
} }