char *version = "0.1";
char *file = NULL;
-char mode = '\0';
+char mode = 'e';
+int speed = 5;
int xoffset = 1;
int yoffset = 1;
char *help =
- "< > Next generation\n"
+ "< > Play generations\n"
"<c> Put cells\n"
"<d> Mirror up/down\n"
"<e> Rotate counter cw\n"
int usage (int ret)
{
FILE *fd = ret ? stderr : stdout;
- fprintf (fd, "usage: %s [-e file] [-h] [-p file] [-v level] [-x int] [-y int]\n", progname);
+ fprintf (fd, "usage: %s [-e file] [-h] [-p file] [-s tens] [-v level] [-x int] [-y int]\n", progname);
fprintf (fd, " -e: edit file (%s)\n", (file) ? file : "none");
fprintf (fd, " -h: help message\n");
fprintf (fd, " -p: play file (%s)\n", (file) ? file : "none");
+ fprintf (fd, " -s: speed ĭn tens/sec (%d)\n", speed);
fprintf (fd, " -v: verbose level (%d)\n", verbose);
+ fprintf (fd, " -x: board height (%d)\n", x);
+ fprintf (fd, " -y: board width (%d)\n", y);
fprintf (fd, "%s version %s\n", progname, version);
return ret;
mode = 'p';
file = arg;
break;
+ case 's':
+ arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+ if (arg == NULL) {
+ VERBOSE (ERROR, fprintf (stderr, "%s: no speed specified\n", progname));
+ return usage (1);
+ }
+ speed = atoi (arg);
+ break;
case 'v':
arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
if (arg == NULL) {
VERBOSE (ERROR, fprintf (stderr, "no mode defined\n"));
return 1;
}
+ if ((speed < 1) || (speed > 255)) {
+ VERBOSE (ERROR, fprintf (stderr, "incorrect speed (%d)\n", speed));
+ return 1;
+ }
/* init curses window */
initscr ();
}
xelement = (xsize - element->xsize) / 2;
yelement = (ysize - element->ysize) / 2;
+ } else { /* mono cell */
+ element = initboard (1, 1);
+ element->tab[0] = 'X';
}
/* window positions */
char *ptr = NULL;
boardwindow (board, xboard, yboard, 1);
- if (element) {
+ if ((element) && (mode == 'e')) {
rotateelement (element, rotate);
mirrorelement (element, mirror);
elementwindow (board, xboard, yboard, element, xelement, yelement);
rotate = 0;
mirror = 0;
- switch (getch ()) {
- case ' ':
- case '\n':
- case '\r':
- computenextgen (board);
- break;
- case 'c':
- if (element) {
- putelement (board, element, xelement, yelement, 1);
- }
- break;
- case 'd':
- mirror = -1;
- break;
+ int ch = getch ();
+ switch (mode) {
case 'e':
- rotate = -1;
- break;
- case 'f':
- mirror = 1;
- break;
- case KEY_UP:
- case 'i':
- yelement = (yelement + board->ysize - 1) % board->ysize;
- break;
- case KEY_LEFT:
- case 'j':
- xelement = (xelement + board->xsize - 1) % board->xsize;
- break;
- case KEY_DOWN:
- case 'k':
- yelement = (yelement + 1) % board->ysize;
- break;
- case KEY_RIGHT:
- case 'l':
- xelement = (xelement + 1) % board->xsize;
- break;
- case KEY_ESC:
- case 'q':
- stop = 1;
- break;
- case 'r':
- rotate = 1;
- break;
- case 's':
- ptr = saveboard (board, "Board");
- if (writedata ("board.gol", ptr)) {
- VERBOSE (WARNING, printf ("issue writing Board\n"));
+ switch (ch) {
+ case ' ':
+ case '\n':
+ case '\r':
+ mode = 'p';
+ halfdelay (5);
+ break;
+ case 'c':
+ if (element) {
+ putelement (board, element, xelement, yelement, 1);
+ }
+ break;
+ case 'd':
+ mirror = -1;
+ break;
+ case 'e':
+ rotate = -1;
+ break;
+ case 'f':
+ mirror = 1;
+ break;
+ case KEY_UP:
+ case 'i':
+ yelement = (yelement + board->ysize - 1) % board->ysize;
+ break;
+ case KEY_LEFT:
+ case 'j':
+ xelement = (xelement + board->xsize - 1) % board->xsize;
+ break;
+ case KEY_DOWN:
+ case 'k':
+ yelement = (yelement + 1) % board->ysize;
+ break;
+ case KEY_RIGHT:
+ case 'l':
+ xelement = (xelement + 1) % board->xsize;
+ break;
+ case KEY_ESC:
+ case 'q':
+ stop = 1;
+ break;
+ case 'r':
+ rotate = 1;
+ break;
+ case 's':
+ ptr = saveboard (board, "Board");
+ if (writedata ("board.gol", ptr)) {
+ VERBOSE (WARNING, printf ("issue writing Board\n"));
+ }
+ free (ptr);
+ break;
+ case KEY_BACKSPACE:
+ case KEY_DELETE:
+ case 127:
+ case '\b':
+ case 'x':
+ if (element) {
+ putelement (board, element, xelement, yelement, 0);
+ }
+ break;
+ //case ERR:
+ //default:
}
- free (ptr);
break;
- case KEY_BACKSPACE:
- case KEY_DELETE:
- case 127:
- case '\b':
- case 'x':
- if (element) {
- putelement (board, element, xelement, yelement, 0);
+ case 'p':
+ switch (ch) {
+ case ' ':
+ case '\n':
+ case '\r':
+ mode = 'e';
+ halfdelay (0);
+ break;
+ case 'q':
+ stop = 1;
+ break;
+ case ERR:
+ default:
+ computenextgen (board);
}
break;
- break;
- //case ERR:
- //default:
}
}