forked from KolibriOS/kolibrios
Fix life_bmp
git-svn-id: svn://kolibrios.org@8138 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
fcfab37b30
commit
e923e0d4db
@ -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 <bitmap> life_bmp\hidemenu.bmp
|
||||
|
@ -1,194 +1,195 @@
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#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, "<array", 6) == 0)
|
||||
{
|
||||
s += 6;
|
||||
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, ":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, "<skip>", 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, "<bitmap", 7) == 0)
|
||||
{
|
||||
s += 7; v = 0;
|
||||
for (;;)
|
||||
{
|
||||
if (strncmp(s, ":inv", 4) == 0) {s += 4; v ^= 1;}
|
||||
else break;
|
||||
}
|
||||
if (s[0] == '>') 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;
|
||||
}
|
||||
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, "<array", 6) == 0)
|
||||
{
|
||||
s += 6;
|
||||
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, ":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, "<skip>", 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, "<bitmap", 7) == 0)
|
||||
{
|
||||
s += 7; v = 0;
|
||||
for (;;)
|
||||
{
|
||||
if (strncmp(s, ":inv", 4) == 0) {s += 4; v ^= 1;}
|
||||
else break;
|
||||
}
|
||||
if (s[0] == '>') 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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user