"XXXXXXX"
" XXXXX "
" XXX ",
- 1, 0, 0};
+ 0, 0, 0, 0, 0};
board_t _board_german = {9, 9,
" XXX "
" XXX "
" XXX "
" XXX ",
- 1, 0, 0};
+ 0, 0, 0, 0, 0};
board_t _board_assymetric = {8, 9,
" XXX "
" XXX "
" XXX "
" XXX ",
- 1, 0, 0};
+ 0, 0, 0, 0, 0};
board_t _board_english = {7, 7,
" XXX "
"XXXXXXX"
" XXX "
" XXX ",
- 1, 0, 0};
+ 0, 0, 0, 0, 0};
board_t _board_diamond = {9, 9,
" X "
" XXXXX "
" XXX "
" X ",
- 1, 0, 0};
+ 0, 0, 0, 0, 0};
board_t *getboard (char *name)
{
board->tab = (char *) calloc (1, width * height + 1);
CHECKALLOC (board->tab);
memset (board->tab, ' ', width * height);
- board->width = width;
- board->height = height;
- board->scale = 1;
+ board->scale = 0;
+ board->xsize = board->width = width;
+ board->ysize = board->height = height;
board->xoffset = 0;
board->yoffset = 0;
return board;
return newboard;
}
+board_t *setscale (board_t *board, int scale)
+{
+ board->scale = scale;
+ switch (scale) {
+ case 0:
+ board->xsize = board->width;
+ board->ysize = board->height;
+ break;
+ case 1:
+ board->xsize = board->width * 2;
+ board->ysize = board->height;
+ break;
+ case 2:
+ board->xsize = board->width * 2;
+ board->ysize = board->height * 2;
+ break;
+ case 3:
+ board->xsize = board->width * 3;
+ board->ysize = board->height * 2;
+ break;
+ }
+ return board;
+}
+
void freeboard (board_t *board)
{
if (board) {
char *boardname = "french";
char *filename = NULL;
+int scale = 0;
int xoffset = 1;
int yoffset = 1;
fprintf (fd, " -b: board name (%s|list)\n", boardname);
fprintf (fd, " -h: help message\n");
fprintf (fd, " -f: file name (%s)\n", (filename) ? filename : "none");
+ fprintf (fd, " -s: scale [0..3] (%d)\n", scale);
fprintf (fd, " -v: verbose level (%d)\n", verbose);
fprintf (fd, "%s version %s\n", progname, version);
}
/* process argument */
- while (argc-- > 1) {
+ while (argc-- > 1) {
char *arg = *(++argv);
if (arg[0] != '-') {
VERBOSE (ERROR, fprintf (stderr, "%s: invalid option -- %s\n", progname, arg));
}
filename = arg;
break;
+ case 's':
+ arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+ if (arg == NULL) {
+ VERBOSE (ERROR, fprintf (stderr, "%s: no scale specified\n", progname));
+ return usage (1);
+ }
+ scale = atoi (arg);
+ break;
case 'v':
arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
if (arg == NULL) {
}
}
+ /* check */
+ if ((scale < 0) || (scale > 4)) {
+ VERBOSE (ERROR, fprintf (stderr, "incorrect scale (%d)\n", scale));
+ }
+
/* load playground */
board_t *board = NULL;
if (filename) {
if (board == NULL) {
return 1;
}
+ setscale (board, scale);
/* init curses window */
initscr ();
/* window positions */
int xboard = board->xoffset = xoffset + 1;
int yboard = board->yoffset = xoffset + 1;
- int xhelp = xboard + xoffset + 1 + board->width * board->scale;
+ int xhelp = xboard + xoffset + 1 + board->xsize;
int xcursor = 0;
int ycursor = 0;
int yhelp = yboard;
- int xsave = max (xboard + (board->width * board->scale - savelen) / 2, 1);
- int ysave = yboard + (board->height * board->scale - 1) / 2;
+ int xsave = max (xboard + (board->xsize - savelen) / 2, 1);
+ int ysave = yboard + (board->ysize - 1) / 2;
char *savename = NULL;
/* init windows */
/* test: solitaire.exe -f nofile.sol 2>&1 | grep "can't read file" */
/* test: solitaire.exe -f bogus.sol 2>&1 | grep 'incorrect file' */
/* test: solitaire.exe -h | grep usage */
+/* test: solitaire.exe -s 2>&1 | grep missing */
+/* test: solitaire.exe -s 4 2>&1 | grep incorrect */
/* test: solitaire.exe -v 2>&1 | grep missing */
/* test: solitaire.exe _ 2>&1 | grep invalid */
/* test: echo -n q | solitaire.exe */