From: Laurent Mazet Date: Wed, 16 Apr 2025 19:37:33 +0000 (+0200) Subject: full adaptation to c99 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=HEAD;p=checkers.git full adaptation to c99 --- diff --git a/checkers.c b/checkers.c index 17903aa..79e0a58 100644 --- a/checkers.c +++ b/checkers.c @@ -289,8 +289,7 @@ int main (int argc, char *argv[]) if (nbrecords < maxnbrecords) { rec[nbrecords++] = ch; } else { - int i; - for (i = 0; i < nbrecords - 1; i++) { + for (int i = 0; i < nbrecords - 1; i++) { rec[i] = rec[i + 1]; } //memmove (rec, rec + 1, nbrecords - 1); @@ -431,9 +430,8 @@ int main (int argc, char *argv[]) } if (nbrecords) { - int i; printf ("records: "); - for (i = 0; i < nbrecords; i++) { + for (int i = 0; i < nbrecords; i++) { if ((rec[i] > 31) && (rec[i] < 128)) { printf ("%c", rec[i]); } else { diff --git a/display.c b/display.c index 5150caa..2e71d12 100644 --- a/display.c +++ b/display.c @@ -83,8 +83,7 @@ int _helpwindow (char *msg, int xoffset, int yoffset, int length) 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); } @@ -92,13 +91,11 @@ void _displaytitle (char *title, int xoffset, int yoffset) 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); } @@ -344,14 +341,12 @@ void _element (board_t *board, int x, int y, int symb) void boardwindow (board_t *board) { - int i, j; - set_color (black); _dobound (board->xsize, board->ysize, board->xoffset, board->yoffset); set_color (white); - for (i = 0; i < board->width; i++) { - for (j = 0; j < board->height; j++) { + for (int i = 0; i < board->width; i++) { + for (int j = 0; j < board->height; j++) { _element (board, i, j, getvalue (board, i, j)); } } @@ -534,10 +529,10 @@ char *savewindow (int length, int xoffset, int yoffset) _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); @@ -582,7 +577,7 @@ char *savewindow (int length, int xoffset, int yoffset) } if (name) { - for (j = length - 1; j >= 0; j--) { + for (int j = length - 1; j >= 0; j--) { if (name[j] == ' ') { name[j] = '\0'; } @@ -601,8 +596,7 @@ void msgwindow (char *msg, int xoffset, int yoffset, int length) set_color (white); _dobound ((length > 0) ? length : (int)strlen (msg), 1, xoffset, yoffset); if (length > 0) { - int i; - for (i = 0; i < length; i++) { + for (int i = 0; i < length; i++) { mvaddch (yoffset, xoffset + i, ' '); } } diff --git a/function.c b/function.c index d090d16..4c883f0 100644 --- a/function.c +++ b/function.c @@ -40,15 +40,13 @@ board_t *initboard (int width, int height) board_t *initplay (board_t *board) { - int i, j; - - for (j = 0; j < board->height / 2 - 1; j++) { - for (i = (j + 1) % 2; i < board->width; i += 2) { + for (int j = 0; j < board->height / 2 - 1; j++) { + for (int i = (j + 1) % 2; i < board->width; i += 2) { *getcell (board, i, j) = '0'; } } - for (j = board->height / 2 + 1; j < board->height; j++) { - for (i = (j + 1) % 2; i < board->width; i += 2) { + for (int j = board->height / 2 + 1; j < board->height; j++) { + for (int i = (j + 1) % 2; i < board->width; i += 2) { *getcell (board, i, j) = '1'; } } @@ -99,10 +97,10 @@ void freeboard (board_t *board) int _makecomments (char *buffer, board_t *board) { - int i, j, l = 0; - for (j = 0; j < board->height; j++) { + int l = 0; + for (int j = 0; j < board->height; j++) { l += sprintf (buffer + l, "rem: \""); - for (i = 0; i < board->width; i++) { + for (int i = 0; i < board->width; i++) { l += sprintf (buffer + l, "%c", getvalue (board, i, j)); } l += sprintf (buffer + l, "\"\n"); @@ -151,13 +149,17 @@ char *readdata (char *filename) if (fd) { fseek (fd, 0, SEEK_END); int size = ftell (fd); - buffer = (char *) calloc (size + 1, 1); - CHECKALLOC (buffer); + if (size == -1) { + VERBOSE (WARNING, printf ("can't read file (%s)\n", filename)); + } else { + buffer = (char *) calloc (size + 1, 1); + CHECKALLOC (buffer); - fseek (fd, 0, SEEK_SET); - int nb = fread (buffer, 1, size, fd); - if (nb != size) { - VERBOSE (WARNING, printf ("can't fully read file (%s)\n", filename)); + fseek (fd, 0, SEEK_SET); + int nb = fread (buffer, 1, size, fd); + if (nb != size) { + VERBOSE (WARNING, printf ("can't fully read file (%s)\n", filename)); + } } fclose (fd); } @@ -349,9 +351,8 @@ void dopetmove (board_t *board, int *x, int *y, int mode) void cleanafterjump (board_t *board) { - int i, j; - for (i = 0; i < board->width; i++) { - for (j = 0; j < board->height; j++) { + for (int i = 0; i < board->width; i++) { + for (int j = 0; j < board->height; j++) { char *cell = getcell (board, i, j); if (*cell == '/') { *cell = '.'; @@ -362,9 +363,8 @@ void cleanafterjump (board_t *board) void pettoqueen (board_t *board) { - int i; char *cell = NULL; - for (i = 0; i < board->width; i++) { + for (int i = 0; i < board->width; i++) { cell = getcell (board, i, board->height - 1); if (*cell == '0') { *cell = '6'; @@ -464,8 +464,7 @@ int testjump (board_t *board, int x, int y, int mode) int testalljumps (board_t *board, int x, int y) { int ret = 0; - int m; - for (m = 0; m < 4; m++) { + for (int m = 0; m < 4; m++) { if (_testjump (board, x, y, 0, m)) { ret = 1; break; diff --git a/makefile b/makefile index d6dd76f..9d45aab 100644 --- a/makefile +++ b/makefile @@ -5,6 +5,7 @@ CC = gcc #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 @@ -16,18 +17,29 @@ CFLAGS += $(OFLAGS) $(INCLUDES) $(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 += checkers +ALLEXE = $(shell for f in *.c; do grep -q '/\*\slinker:' $$f && echo $${f/.c}; done) + +ALLDLL = $(shell for f in *.c; do grep -q '/\*\sbuild:' $$f && echo $${f/.c}; done) SHELL = bash @@ -54,7 +66,12 @@ GETCOMMENTS = awk '/\/\*\s*$(1):/,/\*\// { sub(/.*\/\*\s*$(1):/, ""); sub (/\s*\ ## Generic rules all: depends - $(MAKE) $(ALLEXE:%=%.exe) + $(MAKE) $(ALLEXE:%=%.exe) $(ALLDLL:%=%.so) + +analyze: + make purge + scan-build make + #scan-build -stats make count: wc $(wildcard *.c *.h) $(MAKEFILE_LIST) @@ -62,10 +79,10 @@ count: 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)) +depends: $(patsubst %.c, %.d, $(wildcard *.c)) $(patsubst %, %.ld, $(ALLEXE)) $(patsubst %, %.ld, $(ALLDLL)) gcovs: $(MAKE) $(addprefix gcov_,$(ALLEXE)) @@ -76,12 +93,11 @@ gprofs: purge: clean $(call TITLE, "Purging") touch purge - rm -f purge $(ALLEXE:%=%.exe) + rm -f purge $(ALLEXE:%=%.exe) $(ALLDLL:%=%.so) $(call PASS, SUCCESS) valgrinds: - export LDOPTS="test.o"; \ - $(MAKE) test.o all + export LDOPTS="test.o"; $(MAKE) test.o all $(MAKE) $(addprefix valgrind_,$(ALLEXE)) wipe: purge @@ -90,9 +106,9 @@ wipe: purge rm -f wipe $(wildcard *.gcda *.gcno *.gcov *.glog) $(call PASS, SUCCESS) -tests: test.o +tests: -rm -f $(ALLEXE) - LDOPTS="test.o" $(MAKE) all + export LDOPTS="test.o"; $(MAKE) test.o all $(MAKE) $(addprefix test_,$(ALLEXE)) ## Main rules @@ -103,20 +119,18 @@ include $(wildcard *.ld) gcov_%: $(MAKE) purge $(MAKE) depends - $(MAKE) test.o - LDOPTS="test.o" OPTIONS="-coverage -O0" $(MAKE) ${@:gcov_%=%}.exe + 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 $(MAKE) depends - $(MAKE) test.o - LDOPTS="test.o" OPTIONS="-pg" $(MAKE) ${@:gprof_%=%}.exe + OPTIONS="-pg" $(MAKE) ${@:gprof_%=%}.exe $(MAKE) ${@:gprof_%=%}.test IFS=$$'\n'; id=1; \ for test in `cat ${@:gprof_%=%}.test | sed 's,${@:gprof_%=%}.exe,./${@:gprof_%=%}.exe,g'`; do \ @@ -145,6 +159,7 @@ test_%: %.test %.exe 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 @@ -157,7 +172,7 @@ valgrind_%: %.exe $(call TITLE, "Building $@") $(CC) $(INCLUDES) -MM $< -o $@~ echo ${<:.c=.o}: $(shell $(call GETCOMMENTS,depends, $<)) >> $@~ - mv $@~ $@ + $(MV) $@~ $@ $(call PASS, SUCCESS) %.ld: %.c @@ -176,9 +191,14 @@ valgrind_%: %.exe $(CC) $(LDFLAGS) $< $(shell $(call GETCOMMENTS,$(LDOPT), ${<:.o=.c})) $(LDLIBS) -o $@ $(call PASS, SUCCESS) +%.so: %.o %.d + $(call TITLE, "Building $@") + $(CC) $(LDFLAGS) $< $(shell $(call GETCOMMENTS,$(LDOPT), ${<:.o=.c})) $(LDLIBS) -shared -o $@ + $(call PASS, SUCCESS) + ## Phony -.PHONY: all clean count depends gcovs purge tests +.PHONY: all analyze clean count depends gcovs purge tests ## Precious