#include #include #define X 200 #define Y 200 void doprint(int x,int y,int dx,int dy); void invslope(int x,int y,int dx,int dy); void rwing(int x,int y,int dx,int dy); void lwing(int x,int y,int dx,int dy); char *grid[Y]; int z; main(int argc,char *argv[]) { int i,j; printf("#ifdef COLOR\n#undef COLOR\n#endif\n"); printf("#define COLOR yellow\n"); z=atoi(argv[1]); for (i=0;i1 && c!=' ') { int x=1,y=1; int a,b; while(grid[i][j+x]==c)++x; while(grid[i+y][j]==c)++y; if (c=='~') invslope(j,i,x,y); else if (c=='<') lwing(j,i,x,y); else if (c=='>') rwing(j,i,x,y); else doprint(j,i,x,y); for(a=0;a %d,%d\n",x,y,dx,dy); fprintf(stderr,"~%c\n%c\n",grid[y][x+1],grid[y+1][x]); fprintf(stderr,"Reality failure 1\n"); exit(1); } if (grid[y+dy-1][x+dx-1]!='~') { fprintf(stderr,"%d,%d -> %d,%d\n",x,y,dx,dy); fprintf(stderr,"~%c\n%c\n",grid[y][x+1],grid[y+1][x]); fprintf(stderr,"%d\t%s\n",y,grid[y]+x); fprintf(stderr,"%d\t%s\n",y+1,grid[y+1]+x); fprintf(stderr,"Reality failure 2\n"); exit(2); } if (dx==1 && dy==4) { printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x+1,y,z); printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+3,z,x-1,y+3,z); } else if (dx==4 && dy==1) { printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x,y-1,z); printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+3,y,z,x+3,y+1,z); } else if (dx==1) { if (grid[y+dy][x]&& grid[y+dy][x]!=' ') { printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dx,dy,x,y+1,z,x-1,y+1,z); } else { printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dx,dy,x,y,z,x+1,y,z); } } else if (dy==1) { if (grid[y][x+dx]&& grid[y][x+dx]!=' ') { printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dy,dx,x+1,y,z,x+1,y+1,z); } else { printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dy,dx,x,y,z,x,y-1,z); } } else if (dx!=2 || dy!=2) { fprintf(stderr,"Unable to deal with %dx%d slope\n",dx,dy); exit(1); } else if ((grid[y+dy][x]&&grid[y+dy][x]!=' ' && grid[y+dy][x+1]&&grid[y+dy][x+1]!=' ')) { printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+1,y+1,z,x,y+1,z); } else if ((grid[y-1][x]&&grid[y-1][x]!=' ' && grid[y-1][x+1]&&grid[y-1][x+1]!=' ')) { printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x+1,y,z); } else if ((grid[y][x+dx]&&grid[y][x+dx]!=' ' && grid[y][x+dx]&&grid[y][x+dx]!=' ')) { printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+1,y,z,x+1,y+1,z); } else if ((grid[y][x-1]&&grid[y][x-1]!=' ' && grid[y][x-1]&&grid[y][x-1]!=' ')) { printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+1,z,x,y,z); } else { fprintf(stderr,"Unable to deal with this %dx%d slope\n",dx,dy); exit(1); } } void rwing(int x,int y,int dx,int dy) /* '>' */ { if (dx==3 && dy==8) { if (grid[y+6][x+1]==' ') { printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x+1,y,z); } else { printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+2,y+7,z,x+1,y+7,z); } } else if (dx==8 && dy==3) { if (grid[y+1][x+6]==' ') { printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+2,z,x,y+1,z); } else { printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+7,y,z,x+7,y+1,z); } } } void lwing(int x,int y,int dx,int dy) /* '<' */ { if (dx==3 && dy==8) { if (grid[y+6][x+1]==' ') { printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+2,y,z,x+3,y,z); } else { printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+7,z,x-1,y+7,z); } } else if (dx==8 && dy==3) { if (grid[y+1][x+6]==' ') { printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x,y-1,z); } else { printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+7,y+2,z,x+7,y+3,z); } } }