void _displaytitle (char *title, int xoffset, int yoffset)
{
- int i;
- for (i = 0; title[i] != '\0'; i++) {
+ for (int i = 0; title[i] != '\0'; i++) {
mvaddch (yoffset, xoffset + i, title[i]);
mvaddch (yoffset + 1, xoffset + i, ACS_HLINE);
}
void _dobound (int xsize, int ysize, int xoffset, int yoffset)
{
- int i, j;
-
- for (i = 0; i < xsize; i++) {
+ for (int i = 0; i < xsize; i++) {
mvaddch (yoffset - 1, xoffset + i, ACS_HLINE);
mvaddch (yoffset + ysize, xoffset + i, ACS_HLINE);
}
- for (j = 0; j < ysize; j++) {
+ for (int j = 0; j < ysize; j++) {
mvaddch (yoffset + j, xoffset - 1, ACS_VLINE);
mvaddch (yoffset + j, xoffset + xsize, ACS_VLINE);
}
mvaddstr (yoffset, xoffset + (LIBWIDTH - 7) / 2, "Library");
set_color (black);
- int i;
- for (i = 0; i < LIBWIDTH; i++) {
+ for (int i = 0; i < LIBWIDTH; i++) {
mvaddch (yoffset + 1, xoffset + i, ' ');
}
void boardwindow (board_t *board, int xoffset, int yoffset, int bound)
{
- int i, j;
-
if (bound) {
_dobound (board->xsize, board->ysize, xoffset, yoffset);
}
- for (i = 0; i < board->xsize; i++) {
- for (j = 0; j < board->ysize; j++) {
+ for (int i = 0; i < board->xsize; i++) {
+ for (int j = 0; j < board->ysize; j++) {
char cell = *getcell (board, i, j);
switch (cell) {
case '1':
void elementwindow (board_t *board, int xoffset, int yoffset, board_t *element, int x, int y)
{
- int i, j;
-
- for (i = 0; i < element->xsize; i++) {
- for (j = 0; j < element->ysize; j++) {
+ for (int i = 0; i < element->xsize; i++) {
+ for (int j = 0; j < element->ysize; j++) {
if (*getcell (element, i, j) == 'X') {
set_color (blue);
mvaddch (yoffset + (y + j) % board->ysize, xoffset + (x + i) % board->xsize, ' ');
_dobound (length, 1, xoffset, yoffset);
set_color (white);
- int i = 0, j;
+ int i = 0;
int stop = 0;
while (!stop) {
- for (j = 0; j < length; j++) {
+ for (int j = 0; j < length; j++) {
set_color ((j == i) ? yellow : black);
mvaddch (yoffset, xoffset + j, name[j]);
set_color (white);
}
if (name) {
- for (j = length - 1; j >= 0; j--) {
+ for (int j = length - 1; j >= 0; j--) {
if (name[j] == ' ') {
name[j] = '\0';
}
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 + max (0, xoffset) < board->xsize) && (i - min (0, xoffset) < xsize); i++) {
- for (j = 0; (j + max (0, yoffset) < board->ysize) && (j - min (0, yoffset) < ysize); j++) {
+ for (int i = 0; (i + max (0, xoffset) < board->xsize) && (i - min (0, xoffset) < xsize); i++) {
+ for (int j = 0; (j + max (0, yoffset) < board->ysize) && (j - min (0, yoffset) < ysize); j++) {
*getcell (newboard, i - min(0, xoffset), j - min (0, yoffset)) =
*getcell (board, i + max (0, xoffset), j + max (0, yoffset));
}
int _makecomments (char *buffer, board_t *board)
{
- int i, j, l = 0;
- for (j = 0; j < board->ysize; j++) {
+ int l = 0;
+ for (int j = 0; j < board->ysize; j++) {
l += sprintf (buffer + l, "rem: \"");
- for (i = 0; i < board->xsize; i++) {
+ for (int i = 0; i < board->xsize; i++) {
l += sprintf (buffer + l, "%c", *getcell (board, i, j));
}
l += sprintf (buffer + l, "\"\n");
if (fd) {
fseek (fd, 0, SEEK_END);
int size = ftell (fd);
+ if (size == -1) {
+ VERBOSE (WARNING, printf ("can't fully read file (%s)\n", filename));
+ fclose (fd);
+ return buffer;
+ }
buffer = (char *) calloc (size + 1, 1);
CHECKALLOC (buffer);
memcpy (board->tab, tab, xsize * ysize);
}
if ((board != NULL) && (pname != NULL)) {
- *pname = strdup (name);
+ *pname = strdup (name ? name : "");
}
return board;
board_t *computenextgen (board_t *board)
{
- int i, j;
board_t *nextboard = initboard (board->xsize, board->ysize);
- for (i = 0; i < board->xsize; i++) {
- for (j = 0; j < board->ysize; j++) {
+ for (int i = 0; i < board->xsize; i++) {
+ for (int j = 0; j < board->ysize; j++) {
int n = getnbneighbours (board, i, j);
if (*getcell (board, i, j) == ' ') {
if ((n >= 3) && (n <= 3)) {
}
}
- for (i = 0; i < nextboard->xsize; i++) {
- for (j = 0; j < nextboard->ysize; j++) {
+ for (int i = 0; i < nextboard->xsize; i++) {
+ for (int j = 0; j < nextboard->ysize; j++) {
char *cell = getcell (nextboard, i, j);
if (*cell != ' ') {
int n = getnbneighbours (nextboard, i, j);
board_t *rotateelement (board_t *element, int rot)
{
- int i, j;
-
rot = (rot > 0) ? rot % 4 : ((1 - rot / 4) * 4 + rot) % 4;
board_t *newelement = (rot % 2 == 0) ? initboard (element->xsize, element->ysize) : initboard (element->ysize, element->xsize);
copyboard (newelement, element);
break;
case 1:
- for (i = 0; i < element->xsize; i++) {
- for (j = 0; j < element->ysize; j++) {
+ for (int i = 0; i < element->xsize; i++) {
+ for (int j = 0; j < element->ysize; j++) {
*getcell (newelement, element->ysize - 1 - j, i) = *getcell (element, i, j);
}
}
break;
case 2:
- for (i = 0; i < element->xsize; i++) {
- for (j = 0; j < element->ysize; j++) {
+ for (int i = 0; i < element->xsize; i++) {
+ for (int j = 0; j < element->ysize; j++) {
*getcell (newelement, element->xsize - 1 - i, element->ysize - 1 - j) = *getcell (element, i, j);
}
}
break;
case 3:
- for (i = 0; i < element->xsize; i++) {
- for (j = 0; j < element->ysize; j++) {
+ for (int i = 0; i < element->xsize; i++) {
+ for (int j = 0; j < element->ysize; j++) {
*getcell (newelement, j, element->xsize - 1 - i) = *getcell (element, i, j);
}
}
board_t *mirrorelement (board_t *element, int mode)
{
- int i, j;
-
if (mode > 0) { /* verticaly */
- for (i = 0; i < element->xsize; i++) {
- for (j = 0; j < element->ysize / 2; j++) {
+ for (int i = 0; i < element->xsize; i++) {
+ for (int j = 0; j < element->ysize / 2; j++) {
char *pt1 = getcell (element, i, j);
char *pt2 = getcell (element, i, element->ysize - 1 - j);
char temp = *pt1;
}
}
if (mode < 0) { /* horizontaly */
- for (j = 0; j < element->ysize; j++) {
- for (i = 0; i < element->xsize / 2 ; i++) {
+ for (int j = 0; j < element->ysize; j++) {
+ for (int i = 0; i < element->xsize / 2 ; i++) {
char *pt1 = getcell (element, i, j);
char *pt2 = getcell (element, element->xsize - 1 - i, j);
char temp = *pt1;
board_t *putelement (board_t *board, board_t *element, int x, int y, int mode)
{
- int i, j;
-
- for (i = 0; i < element->xsize; i++) {
- for (j = 0; j < element->ysize; j++) {
+ for (int i = 0; i < element->xsize; i++) {
+ for (int j = 0; j < element->ysize; j++) {
if (*getcell (element, i, j) != ' ') {
*getcell (board, (x + i) % board->xsize, (y + j) % board->ysize) = (mode) ? 'X' : ' ';
}
#INCLUDES = -I../debug -D__MEMORY_ALLOCATION__
INCLUDES =
OFLAGS = -O4 -Os
+#OFLAGS = -O0
#OFLAGS = -O4 -ffast-math -finline-functions
#OFLAGS = -O4 -finline-functions
#OFLAGS += -mtune=pentium3 -mmmx -msse -msse2 -m3dnow
CFLAGS += -W -Wall -Wextra -g
#CFLAGS += -std=c99 -D_XOPEN_SOURCE=500
CFLAGS += $(OFLAGS) $(INCLUDES) $(OPTIONS)
-LDFLAGS += -g $(OPTIONS)
+LDFLAGS += -g $(LDOPTS) $(OPTIONS)
LDOPT = linker
-ifeq ($(OS),Windows_NT)
+MV = mv
+ifneq (, $(findstring linux, $(MAKE_HOST)))
+# Linux
+else ifneq (, $(findstring mingw, $(MAKE_HOST)))
+# Windows MinGw
+CFLAGS += -DWIN32
#LDLIBS += -lws2_32
LDOPT = winlnk
-endif
-ifeq ($(OS),Dos)
+else ifneq (, $(findstring cygwin, $(MAKE_HOST)))
+CFLAGS += -DWIN32
+# Windows CygWin
+LDOPT = winlnk
+else ifneq (, $(findstring msdos, $(MAKE_HOST)))
+# MSDOS
LDOPT = doslnk
+MV = move
endif
# Targets
-ALLEXE =
-ALLEXE += gameoflife
+ALLEXE = $(shell for f in *.c; do grep -q '/\*\slinker:' $$f && echo $${f/.c}; done)
SHELL = bash
all: depends
$(MAKE) $(ALLEXE:%=%.exe)
+analyze:
+ make purge
+ scan-build make
+ #scan-build -stats make
+
count:
wc $(wildcard *.c *.h) $(MAKEFILE_LIST)
clean:
$(call TITLE, "Cleaning")
touch clean
- rm -f clean $(wildcard *.d *.ld *.log *.o *.test *~ .exec_* gmon.out)
+ rm -f clean $(wildcard *.d *.ld *.log *.o *.test *~ .exec_* gmon.out _)
$(call PASS, SUCCESS)
depends: $(patsubst %.c, %.d, $(wildcard *.c)) $(patsubst %, %.ld, $(ALLEXE))
rm -f purge $(ALLEXE:%=%.exe)
$(call PASS, SUCCESS)
-valgrinds: all
+valgrinds:
+ $(MAKE) all
$(MAKE) $(addprefix valgrind_,$(ALLEXE))
wipe: purge
rm -f wipe $(wildcard *.gcda *.gcno *.gcov *.glog)
$(call PASS, SUCCESS)
-tests: all
+tests:
+ -rm -f $(ALLEXE)
+ $(MAKE) all
$(MAKE) $(addprefix test_,$(ALLEXE))
## Main rules
gcov_%:
$(MAKE) purge
- OPTIONS="-coverage -O0" $(MAKE)
+ $(MAKE) depends
+ OPTIONS="-coverage -O0" $(MAKE) ${@:gcov_%=%}.exe
$(MAKE) test_$(@:gcov_%=%)
gcov `sed -e 's/\.exe:/.c/;s/\.o/.c/g' $(@:gcov_%=%.ld)`
touch gcov
rm -f gcov $(wildcard *.gcda *.gcno)
$(MAKE) purge
- grep '#####' *.c.gcov || true
+ grep '^ *#####' *.c.gcov || true
gprof_%:
$(MAKE) purge
$(call TITLE, "Building $@")
$(call GETCOMMENTS,test, $<) > $@
$(call PASS, SUCCESS)
+ -rm -f _
test_%: %.test %.exe
IFS=$$'\n'; RC=0; \
eval $$test; \
[ $$? -eq 0 ] && echo -e "\033[1;32mSUCCESS\033[0;0m" \
|| { echo -e "\033[1;31mFAILED\033[0;0m"; RC=1; }; \
+ test "$$RC" = 1 -a "$(STOP)" = 1 && break; \
done; \
test "$$RC" -ne 1
$(call TITLE, "Building $@")
$(CC) $(INCLUDES) -MM $< -o $@~
echo ${<:.c=.o}: $(shell $(call GETCOMMENTS,depends, $<)) >> $@~
- mv $@~ $@
+ $(MV) $@~ $@
$(call PASS, SUCCESS)
%.ld: %.c
## Phony
-.PHONY: all clean count depends gcovs purge tests
+.PHONY: all analyze clean count depends gcovs purge tests
## Precious