return dst;
}
-board_t *resizeboard (board_t *board, int xsize, int ysize)
+board_t *resizeboard (board_t *board, int xsize, int ysize, int xoffset, int yoffset)
{
int i, j;
board_t *newboard = initboard (xsize, ysize);
- for (i = 0; (i < board->xsize) && (i < xsize); i++) {
- for (j = 0; (j < board->ysize) && (j < ysize); j++) {
- *getcell (newboard, i, j) = *getcell (board, i, j);
+ for (i = 0; (i + xoffset < board->xsize) && (i < xsize); i++) {
+ for (j = 0; (j + yoffset < board->ysize) && (j < ysize); j++) {
+ *getcell (newboard, i, j) = *getcell (board, i + xoffset, j + yoffset);
}
}
return board;
}
+board_t *shrinkboard (board_t *board)
+{
+ int imin = 0;
+ int j = 0;
+ while (imin < board->xsize) {
+ if (*getcell (board, imin, j) != ' ') {
+ break;
+ }
+ j++;
+ if (j == board->ysize) {
+ imin++;
+ j = 0;
+ }
+ }
+ if (imin == board->xsize) {
+ return NULL;
+ }
+
+ int i = imin;
+ int jmin = 0;
+ while (jmin < board->ysize) {
+ if (*getcell (board, i, jmin) != ' ') {
+ break;
+ }
+ i++;
+ if (i == board->xsize) {
+ i = imin;
+ jmin++;
+ }
+ }
+
+ i = imin;
+ int jmax = board->ysize - 1;
+ while (jmax >= 0) {
+ if (*getcell (board, i, jmax) != ' ') {
+ break;
+ }
+ i++;
+ if (i == board->xsize) {
+ i = imin;
+ jmax--;
+ }
+ }
+
+ int imax = board->xsize - 1;
+ j = jmin;
+ while (imax >= 0) {
+ if (*getcell (board, imax, j) != ' ') {
+ break;
+ }
+ j++;
+ if (j == jmax) {
+ imax--;
+ j = jmin;
+ }
+ }
+
+ return resizeboard (board, imax - imin + 1, jmax - jmin + 1, imin, jmin);
+}
+
void freeboard (board_t *board)
{
if (board) {
board_t *copyboard (board_t *dst, board_t *src);
-board_t *resizeboard (board_t *board, int xsize, int ysize);
+board_t *resizeboard (board_t *board, int xsize, int ysize, int xoffset, int yoffset);
+
+board_t *shrinkboard (board_t *board);
void freeboard (board_t *board);
}
board_t *board = NULL;
if (playground) {
- board = resizeboard (playground, xsize, ysize);
+ board = resizeboard (playground, xsize, ysize, 0, 0);
} else {
board = initboard (xsize, ysize);
}
case 's':
savename = savewindow (savelen, xsave, ysave);
if (savename != NULL) {
- ptr = saveboard (board, "Board");
+ board_t *miniboard = shrinkboard (board);
+ board_t *temp = resizeboard (miniboard, miniboard->xsize + 2, miniboard->ysize + 2, 1, 1);
+ freeboard (miniboard);
+ ptr = saveboard (temp, "Board");
+ freeboard (temp);
if (writedata (savename, ptr)) {
VERBOSE (WARNING, printf ("issue writing Board\n"));
}