diff options
author | P. J. McDermott <pjm@nac.net> | 2011-12-12 23:23:13 (EST) |
---|---|---|
committer | P. J. McDermott <pjm@nac.net> | 2011-12-12 23:23:13 (EST) |
commit | b8c055dbdde4fc3ce946483ee69f76c737888549 (patch) | |
tree | 6a8b9fcd96859b2246f3302f72ebc8d30e9d1a6d /src | |
download | cgol-b8c055dbdde4fc3ce946483ee69f76c737888549.zip cgol-b8c055dbdde4fc3ce946483ee69f76c737888549.tar.gz cgol-b8c055dbdde4fc3ce946483ee69f76c737888549.tar.bz2 |
Initial commit; it builds, runs, and does nothing!
Diffstat (limited to 'src')
-rw-r--r-- | src/cgol.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/cgol.c b/src/cgol.c new file mode 100644 index 0000000..b6eec4d --- /dev/null +++ b/src/cgol.c @@ -0,0 +1,111 @@ +/* + * src/cgol.c + * Curses Game of Life + * + * Copyright (C) 2011 Patrick "P. J." McDermott + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <unistd.h> +#include <curses.h> + +void usage(const char *invocation); +void init_curses(); +void init_game(); +void fini_game(); +void fini_curses(); + +static int width, height, seedprob, genrate; +static bool *grid_cur, *grid_next; + +int +main(int argc, char **argv) +{ + int opt; + + while ((opt = getopt(argc, argv, "w:h:s:r:n:")) != -1) { + switch (opt) { + case 'w': + width = atoi(optarg); + break; + case 'h': + height = atoi(optarg); + break; + case 's': + seedprob = atoi(optarg); + break; + case 'r': + genrate = atoi(optarg); + break; + default: + usage(argv[0]); + return 1; + } + } + + init_curses(); + init_game(); + + mvprintw(1, 1, "Welcome to cgol!"); + getch(); + + fini_game(); + fini_curses(); + + return 0; +} + +void +init_curses() +{ + initscr(); + noecho(); + raw(); +} + +void +init_game() +{ + size_t size; + + size = sizeof(bool) * width * height; + grid_cur = malloc(size); + memset(grid_cur, 0, size); + grid_next = malloc(size); + memset(grid_next, 0, size); +} + +void +fini_game() +{ + free(grid_cur); + free(grid_next); +} + +void +fini_curses() +{ + endwin(); +} + +void +usage(const char *invocation) +{ + printf("Usage: %s [-w WIDTH] [-h HEIGHT] [-s SEEDPROB] [-r RATE] " + "[-n GENERATIONS]", invocation); +} |