\r
\r
int sizeList[] = { 21, 25, 29, 33, 37, 40, 45, 49, 54, 58, 64, 72, 80, 87, 95, 108, 116, 129 };\r
-char *(pieceList[]) = {"p", "n", "b", "r", "q", "f", "e", "as", "c", "w", "m", \r
- "o", "h", "a", "dk", "g", "d", "v", "l", "s", "u", "k", \r
+char *(pieceList[]) = {"p", "n", "b", "r", "q", "f", "e", "as", "c", "w", "m",\r
+ "o", "h", "a", "dk", "g", "d", "v", "l", "s", "u", "k",\r
"wp", "wl", "wn", "ws", "cv", NULL };\r
char kindList[] = "sow";\r
\r
for(i=0; i<size; i++) for(j=0; j<size; j++) if(!src[i][j]) dest[i][j] = c;\r
}\r
\r
+FloodFill(char a[130][130], int size, int x, int y)\r
+{\r
+ char old = 'X', new = '.';\r
+ if(a[x][y] != old) return; else {\r
+ a[x][y] = new;\r
+ if(x > 0) FloodFill(a, size, x-1, y);\r
+ if(y > 0) FloodFill(a, size, x, y-1);\r
+ if(x < size-1) FloodFill(a, size, x+1, y);\r
+ if(y < size-1) FloodFill(a, size, x, y+1);\r
+ }\r
+\r
+}\r
+\r
void Save(FILE *f, char *name, char data[130][130], int size, char *col, int depth)\r
{ // write out data in source format for d x d pixmap with specified square color\r
int i, j;\r
\r
main(int argc, char **argv)\r
{\r
- int i, j, k, d, cnt, p, s, t; char c, h, w, *name, buf[80];\r
+\r
+#define BUFLEN 80\r
+\r
+ int i, j, k, d, cnt, p, s, t; char c, h, w, name[BUFLEN], buf[BUFLEN], transparent;\r
FILE *f;\r
\r
+ transparent = argc > 1 && !strcmp(argv[1], "-t");\r
+\r
for(s=0; s<18; s++) for(p=0; pieceList[p] != NULL; p++) {\r
\r
// Load the 3 kinds of Windows monochrome bitmaps (outline, solid, white fill)\r
\r
- sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 'o');\r
+ snprintf(buf, BUFLEN, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 'o');\r
printf("try %s\n", buf);\r
f = fopen(buf, "rb");\r
if(f == NULL) continue;\r
Load(f, oData, buf);\r
\r
- sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 's');\r
+ snprintf(buf, BUFLEN, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 's');\r
f = fopen(buf, "rb");\r
if(f == NULL) continue;\r
Load(f, sData, buf);\r
\r
- sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 'w');\r
+ snprintf(buf, BUFLEN, "../winboard/bitmaps/%s%d%c.bmp", pieceList[p], sizeList[s], 'w');\r
if(pieceList[p][0]=='w')\r
- sprintf(buf, "../winboard/bitmaps/%s%d%c.bmp", "w", sizeList[s], 'w');\r
+ snprintf(buf, BUFLEN, "../winboard/bitmaps/%s%d%c.bmp", "w", sizeList[s], 'w');\r
f = fopen(buf, "rb");\r
if(f == NULL) continue;\r
Load(f, wData, buf);\r
printf("%s loaded\n", buf);\r
// construct pixmaps as character arrays\r
d = sizeList[s];\r
- for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = '.'; data[i][d] = 0; } // fill square\r
+ for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = transparent? '.' : 'X'; data[i][d] = 0; } // fill square\r
\r
Paint(data, sData, d, ' '); // overay with solid piece bitmap\r
\r
- sprintf(buf, "%s%s%d.xpm", pieceList[p], "dd", d);\r
- sprintf(name, "%s%s%d", pieceList[p], "dd", d);\r
+ if(!transparent) { // background was painted same color as piece details; flood-fill it from corners\r
+ FloodFill(data, d, 0, 0);\r
+ FloodFill(data, d, 0, d-1);\r
+ FloodFill(data, d, d-1, 0);\r
+ FloodFill(data, d, d-1, d-1);\r
+ }\r
+\r
+ snprintf(buf, BUFLEN, "%s%s%d.xpm", pieceList[p], "dd", d);\r
+ snprintf(name, BUFLEN, "%s%s%d", pieceList[p], "dd", d);\r
f = fopen(buf, "w");\r
- Save(f, name, data, d, "c green s dark_square", 2);\r
+ Save(f, name, data, d, "c green s dark_square", 3);\r
\r
- sprintf(buf, "%s%s%d.xpm", pieceList[p], "dl", d);\r
- sprintf(name, "%s%s%d", pieceList[p], "dl", d);\r
+ snprintf(buf, BUFLEN, "%s%s%d.xpm", pieceList[p], "dl", d);\r
+ snprintf(name, BUFLEN, "%s%s%d", pieceList[p], "dl", d);\r
f = fopen(buf, "w");\r
- Save(f, name, data, d, "c gray s light_square", 2); // silly duplication; pixmap is te same, but other color\r
+ Save(f, name, data, d, "c gray s light_square", 3); // silly duplication; pixmap is te same, but other color\r
\r
// now the light piece\r
for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = '.'; data[i][d] = 0; } // fill square\r
Paint(data, wData, d, 'X'); // overay with white-filler piece bitmap\r
Paint(data, oData, d, ' '); // overay with outline piece bitmaps\r
\r
- sprintf(buf, "%s%s%d.xpm", pieceList[p], "ld", d);\r
- sprintf(name, "%s%s%d", pieceList[p], "ld", d);\r
+ snprintf(buf, BUFLEN, "%s%s%d.xpm", pieceList[p], "ld", d);\r
+ snprintf(name, BUFLEN, "%s%s%d", pieceList[p], "ld", d);\r
f = fopen(buf, "w");\r
Save(f, name, data, d, "c green s dark_square", 3);\r
\r
- sprintf(buf, "%s%s%d.xpm", pieceList[p], "ll", d);\r
- sprintf(name, "%s%s%d", pieceList[p], "ll", d);\r
+ snprintf(buf, BUFLEN, "%s%s%d.xpm", pieceList[p], "ll", d);\r
+ snprintf(name, BUFLEN, "%s%s%d", pieceList[p], "ll", d);\r
f = fopen(buf, "w");\r
Save(f, name, data, d, "c gray s light_square", 3);\r
\r