From b8c055dbdde4fc3ce946483ee69f76c737888549 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Mon, 12 Dec 2011 23:23:13 -0500 Subject: Initial commit; it builds, runs, and does nothing! --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78fffc2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Swap and backup files +.*.sw* +.sw* +*~ + +# Object files +*.o +cgol diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..15a5595 --- /dev/null +++ b/Makefile @@ -0,0 +1,67 @@ +# Makefile +# +# 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 . + +SRCDIR = . +PREFIX = /usr/local +BINDIR = $(PREFIX)/bin + +SHELL = /bin/sh +CC = gcc +INSTALL = /usr/bin/install -c + +CFLAGS = -Wall $(CMACROS) +LDFLAGS = +CDEBUG = -g -DDEBUG +OPTNONE = -O0 +OPTFULL = -O2 + +.SUFFIXES: +.SUFFIXES: .c .o + +SRCS = $(SRCDIR)/src/cgol.c +OBJS = $(SRCS:.c=.o) +LIBS = -lcurses +AUX = COPYING + +# `all' target +# Compiles with optimizations. +.PHONY: all +all: CFLAGS += $(OPTFULL) +all: cgol + +# `debug' target +# Compiles with debugging information and no optimizations. +.PHONY: debug +debug: CFLAGS += $(CDEBUG) $(OPTNONE) +debug: cgol + +# `profile' target +# Compiles with debugging information and optimizations. +.PHONY: profile +profile: CFLAGS += $(CDEBUG) $(OPTFULL) +profile: cgol + +cgol: $(OBJS) + $(CC) $(LDFLAGS) -o"$@" $(LIBS) $(OBJS) + +.PHONY: clean +clean: + rm -f $(OBJS) cgol + +.PHONY: install +install: all + $(INSTALL) cgol $(BINDIR)/cgol 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 . + */ + +#include +#include +#include +#include +#include + +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); +} -- cgit v0.9.1