From 7da916ff206453788ce0a8f110cf719f7e710cf3 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Tue, 15 Apr 2025 20:57:49 +0200 Subject: [PATCH] full adaptation to c99 --- block.c | 12 ++++---- constant.c | 5 ++-- display.c | 33 ++++++++------------- function.c | 85 ++++++++++++++++++++++++----------------------------- makefile | 16 +++++++--- pentomino.c | 20 +++++-------- 6 files changed, 78 insertions(+), 93 deletions(-) diff --git a/block.c b/block.c index 9c9fca8..5b8fd26 100644 --- a/block.c +++ b/block.c @@ -49,10 +49,10 @@ static int _color_trans (_color_t c) return color; } -static void _init_color_pairs () { - int fg, bg; - for (bg = 0; bg < 8; bg++) { - for (fg = 0; fg < 8; fg ++) { +static void _init_color_pairs () +{ + for (int bg = 0; bg < 8; bg++) { + for (int fg = 0; fg < 8; fg ++) { init_pair (_color_num (fg, bg), _color_trans (fg), _color_trans (bg)); } } @@ -60,13 +60,13 @@ static void _init_color_pairs () { void mvaddcb (int y, int x, cblock_t color) { - int init = 1; + static int init = 1; if (init) { _init_color_pairs (); init = 0; } - int symb = ACS_CKBOARD; + int symb; switch (color) { case black: case gray: diff --git a/constant.c b/constant.c index 630fd00..50e2bca 100644 --- a/constant.c +++ b/constant.c @@ -44,8 +44,7 @@ block_t _blocks_std[_nb_blocks_std] = { blocks_t *getblocks (char *name) { block_t *pt = NULL; - int nb; - int i; + int nb = 0; if (strcmp (name, "std") == 0) { nb = _nb_blocks_std; @@ -53,7 +52,7 @@ blocks_t *getblocks (char *name) } blocks_t *blocks = initblocks (nb); - for (i = 0; i < nb; i++) { + for (int i = 0; i < nb; i++) { blocks->block[i] = copyblock (pt + i); } diff --git a/display.c b/display.c index e42f430..9dcd206 100644 --- a/display.c +++ b/display.c @@ -13,8 +13,7 @@ int _helpwindow (char *msg, int xoffset, int yoffset, int length) { - int i = 0; - int j = 0; + int i = 0, j = 0; while ((msg) && (*msg != '\0')) { if ((*msg == '\n') || (i == length)) { i = 0; @@ -31,8 +30,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); } @@ -40,13 +38,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); } @@ -118,14 +114,12 @@ void _element (board_t *board, int x, int y, cblock_t color) void boardwindow (board_t *board, int mode) { - int i, j; - setcolor (mode ? gray_black : black_gray); _dobound (board->xsize, board->ysize, board->xoffset, board->yoffset); setcolor (gray_black); - 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, *getcell (board, i, j) - ' '); } } @@ -133,10 +127,8 @@ void boardwindow (board_t *board, int mode) void displayblock (board_t *board, block_t *block, int x, int y) { - int i, j; - - for (i = 0; i < block->width; i++) { - for (j = 0; j < block->height; j++) { + for (int i = 0; i < block->width; i++) { + for (int j = 0; j < block->height; j++) { if (*getcell (block, i, j) != ' ') { _element (board, x + i, y + j, block->color); } @@ -154,10 +146,10 @@ char *savewindow (int length, int xoffset, int yoffset) _dobound (length, 1, xoffset, yoffset); setcolor (gray_black); - 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++) { setcolor ((j == i) ? yellow_black : black_gray); mvaddch (yoffset, xoffset + j, name[j]); setcolor (gray_black); @@ -202,7 +194,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'; } @@ -221,8 +213,7 @@ void msgwindow (char *msg, int xoffset, int yoffset, int length) setcolor (gray_black); _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 1f4404b..5ceab90 100644 --- a/function.c +++ b/function.c @@ -73,10 +73,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", *getcell (board, i, j)); } l += sprintf (buffer + l, "\"\n"); @@ -96,9 +96,8 @@ int _ztoi (char x) int _sprinttab (char *buffer, char *name, int *tab, int nb) { - int i; int l = sprintf (buffer, "%s: \"", name); - for (i = 0; i < nb; i++) { + for (int i = 0; i < nb; i++) { l += sprintf (buffer + l, "%c", _itoz (tab[i])); } l += sprintf (buffer + l, "\"\n"); @@ -116,10 +115,9 @@ int _sprintblock (char *buffer, int id, block_t *block) char *saveboard (board_t *board, blocks_t *blocks) { - int i; int size = 3 * (8 + 2) + 7 + board->width * board->height; size += 3 * (8 + blocks->nb); - for (i = 0; i < blocks->nb; i++) { + for (int i = 0; i < blocks->nb; i++) { int nbdigits = (i < 10) ? 1 : 2; block_t *block = blocks->block[i]; size += 3 * (11 + nbdigits + 2) + 12 + nbdigits + block->width * block->height; @@ -136,7 +134,7 @@ char *saveboard (board_t *board, blocks_t *blocks) l += _sprinttab (buffer + l, "x", blocks->x, blocks->nb); l += _sprinttab (buffer + l, "y", blocks->y, blocks->nb); l += _sprinttab (buffer + l, "settle", blocks->settle, blocks->nb); - for (i = 0; i < blocks->nb; i++) { + for (int i = 0; i < blocks->nb; i++) { l += _sprintblock (buffer + l, i, blocks->block[i]); } @@ -168,13 +166,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); } @@ -209,7 +211,6 @@ int _checkblockref (char *str, char *ref) void loadboard (char *str, board_t **pboard, blocks_t **pblocks) { - int i; int width = 0; int height = 0; char *tab = NULL; @@ -247,22 +248,22 @@ void loadboard (char *str, board_t **pboard, blocks_t **pblocks) } else if (strcmp (keyword, "settle") == 0) { settle = atos (value); } else if (_checkblockref (keyword, "width")) { - i = atoi (keyword + 6); + int i = atoi (keyword + 6); if (i < MAXNBBLOCKS) { (block + i)->width = atoi (value); } } else if (_checkblockref (keyword, "height")) { - i = atoi (keyword + 7); + int i = atoi (keyword + 7); if (i < MAXNBBLOCKS) { (block + i)->height = atoi (value); } } else if (_checkblockref (keyword, "color")) { - i = atoi (keyword + 6); + int i = atoi (keyword + 6); if (i < MAXNBBLOCKS) { (block + i)->color = atoi (value); } } else if (_checkblockref (keyword, "block")) { - i = atoi (keyword + 6); + int i = atoi (keyword + 6); if (i < MAXNBBLOCKS) { (block + i)->tab = atos (value); } @@ -289,7 +290,7 @@ void loadboard (char *str, board_t **pboard, blocks_t **pblocks) (settle) && (strlen (settle) == (size_t)(nb))) { error = 0; blocks = initblocks (nb); - for (i = 0; i < nb; i++) { + for (int i = 0; i < nb; i++) { blocks->x[i] = _ztoi (x[i]); blocks->y[i] = _ztoi (y[i]); blocks->settle[i] = _ztoi (settle[i]); @@ -359,11 +360,10 @@ void freeblock (block_t *block) block_t *mirrorblock (block_t *block, int dir) { - int i, j; switch (dir % 2) { case 0: - for (i = 0; i < block->width; i++) { - for (j = 0; j < block->height / 2; j++) { + for (int i = 0; i < block->width; i++) { + for (int j = 0; j < block->height / 2; j++) { char t = *getcell (block, i, j); *getcell (block, i, j) = *getcell (block, i, block->height - 1 - j); *getcell (block, i, block->height - 1 - j) = t; @@ -371,8 +371,8 @@ block_t *mirrorblock (block_t *block, int dir) } break; case 1: - for (i = 0; i < block->width / 2; i++) { - for (j = 0; j < block->height; j++) { + for (int i = 0; i < block->width / 2; i++) { + for (int j = 0; j < block->height; j++) { char t = *getcell (block, i, j); *getcell (block, i, j) = *getcell (block, block->width - 1 - i, j); *getcell (block, block->width - 1 - i, j) = t; @@ -385,8 +385,6 @@ block_t *mirrorblock (block_t *block, int dir) block_t *rotateblock (block_t *block, int rot) { - int i, j; - rot = (rot > 0) ? rot % 4 : ((1 - rot / 4) * 4 + rot) % 4; block_t *newblock = NULL; @@ -398,8 +396,8 @@ block_t *rotateblock (block_t *block, int rot) case 1: newblock = initblock (block->height, block->width); newblock->color = block->color; - for (i = 0; i < block->width; i++) { - for (j = 0; j < block->height; j++) { + for (int i = 0; i < block->width; i++) { + for (int j = 0; j < block->height; j++) { *getcell (newblock, block->height - 1 - j, i) = *getcell (block, i, j); } } @@ -407,8 +405,8 @@ block_t *rotateblock (block_t *block, int rot) case 2: newblock = initblock (block->width, block->height); newblock->color = block->color; - for (i = 0; i < block->width; i++) { - for (j = 0; j < block->height; j++) { + for (int i = 0; i < block->width; i++) { + for (int j = 0; j < block->height; j++) { *getcell (newblock, block->width - 1 - i, block->height - 1 - j) = *getcell (block, i, j); } } @@ -416,8 +414,8 @@ block_t *rotateblock (block_t *block, int rot) case 3: newblock = initblock (block->height, block->width); newblock->color = block->color; - for (i = 0; i < block->width; i++) { - for (j = 0; j < block->height; j++) { + for (int i = 0; i < block->width; i++) { + for (int j = 0; j < block->height; j++) { *getcell (newblock, j, block->width - 1 - i) = *getcell (block, i, j); } } @@ -451,8 +449,7 @@ blocks_t *initblocks (int nb) void freeblocks (blocks_t *blocks) { if (blocks) { - int i; - for (i = 0; i < blocks->nb; i++) { + for (int i = 0; i < blocks->nb; i++) { freeblock (blocks->block[i]); } free (blocks->x); @@ -474,10 +471,8 @@ int findnext (int i, int n) int testposition (board_t *board, block_t *block, int x, int y) { - int i, j; - - for (i = 0; i < block->width; i++) { - for (j = 0; j < block->height; j++) { + for (int i = 0; i < block->width; i++) { + for (int j = 0; j < block->height; j++) { if (*getcell (block, i, j) != ' ') { if (*getcell (board, x + i, y + j) != ' ') { return 0; @@ -491,10 +486,8 @@ int testposition (board_t *board, block_t *block, int x, int y) void settleblock (board_t *board, block_t *block, int x, int y, int mode) { - int i, j; - - for (i = 0; i < block->width; i++) { - for (j = 0; j < block->height; j++) { + for (int i = 0; i < block->width; i++) { + for (int j = 0; j < block->height; j++) { if (*getcell (block, i, j) != ' ') { *getcell (board, x + i, y + j) = ' ' + ((mode) ? block->color : 0); } @@ -504,10 +497,8 @@ void settleblock (board_t *board, block_t *block, int x, int y, int mode) int endofgame (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++) { if (*getcell (board, i, j) == ' ') { return 0; } diff --git a/makefile b/makefile index 0c66e8e..09ecb8b 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 @@ -21,9 +22,11 @@ ifneq (, $(findstring linux, $(MAKE_HOST))) # Linux else ifneq (, $(findstring mingw, $(MAKE_HOST))) # Windows MinGw +CFLAGS += -DWIN32 #LDLIBS += -lws2_32 LDOPT = winlnk else ifneq (, $(findstring cygwin, $(MAKE_HOST))) +CFLAGS += -DWIN32 # Windows CygWin LDOPT = winlnk else ifneq (, $(findstring msdos, $(MAKE_HOST))) @@ -34,8 +37,7 @@ endif # Targets -ALLEXE = -ALLEXE += pentomino +ALLEXE = $(shell for f in *.c; do grep -q '/\*\slinker:' $$f && echo $${f/.c}; done) SHELL = bash @@ -64,6 +66,11 @@ GETCOMMENTS = awk '/\/\*\s*$(1):/,/\*\// { sub(/.*\/\*\s*$(1):/, ""); sub (/\s*\ all: depends $(MAKE) $(ALLEXE:%=%.exe) +analyze: + make purge + scan-build make + #scan-build -stats make + count: wc $(wildcard *.c *.h) $(MAKEFILE_LIST) @@ -116,7 +123,7 @@ gcov_%: touch gcov rm -f gcov $(wildcard *.gcda *.gcno) $(MAKE) purge - grep '#####' *.c.gcov || true + grep '^ *#####' *.c.gcov || true gprof_%: $(MAKE) purge @@ -150,6 +157,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 @@ -183,7 +191,7 @@ valgrind_%: %.exe ## Phony -.PHONY: all clean count depends gcovs purge tests +.PHONY: all analyze clean count depends gcovs purge tests ## Precious diff --git a/pentomino.c b/pentomino.c index df9e6b3..a7cdb61 100644 --- a/pentomino.c +++ b/pentomino.c @@ -56,8 +56,6 @@ int usage (int ret) /* main function */ int main (int argc, char *argv[]) { - int i; - /* get basename */ char *pt = progname = argv[0]; while (*pt) { @@ -167,7 +165,7 @@ int main (int argc, char *argv[]) /* define work bench */ int wblock = 0; int hblock = 0; - for (i = 0; i < blocks->nb; i++) { + for (int i = 0; i < blocks->nb; i++) { block_t *block = blocks->block[i]; if (wblock < block->width) { wblock = block->width; @@ -237,7 +235,7 @@ int main (int argc, char *argv[]) /* blocks positions */ boardwindow (bench, 1); - for (i = 0; i < blocks->nb; i++) { + for (int i = 0; i < blocks->nb; i++) { int x = xoffset + (xoffset + wblock) * (i / n) + (wblock - blocks->block[i]->width + 1) / 2; int y = (yoffset + hblock) * (i % n) + (hblock - blocks->block[i]->height + 1) / 2; displayblock (bench, blocks->block[i], x, y); @@ -275,8 +273,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); @@ -330,25 +327,25 @@ int main (int argc, char *argv[]) break; case KEY_UP: case 'i': - if (ycursor > - block->height / 2) { + if ((block) && (ycursor > - block->height / 2)) { ycursor--; } break; case KEY_LEFT: case 'j': - if (xcursor > - block->width / 2) { + if ((block) && (xcursor > - block->width / 2)) { xcursor--; } break; case KEY_DOWN: case 'k': - if (ycursor < board->height - (block->height + 1) / 2) { + if ((block) && (ycursor < board->height - (block->height + 1)) / 2) { ycursor++; } break; case KEY_RIGHT: case 'l': - if (xcursor < board->width - (block->width + 1) / 2) { + if ((block) && (xcursor < board->width - (block->width + 1)) / 2) { xcursor++; } break; @@ -379,9 +376,8 @@ int main (int argc, char *argv[]) endwin (); 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 { -- 2.30.2