From 76589e64db896e1363b234be8f265bbc4e2420e9 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sat, 12 Apr 2025 20:54:57 +0200 Subject: [PATCH] full adaptation to c99 --- display.c | 25 +++++++----------- function.c | 76 ++++++++++++++++++++++++------------------------------ makefile | 6 ++++- scrabble.c | 17 +++++------- 4 files changed, 54 insertions(+), 70 deletions(-) diff --git a/display.c b/display.c index 5c87acb..af130c9 100644 --- a/display.c +++ b/display.c @@ -60,9 +60,8 @@ void showletter (char letter, int x, int y, int mode) void showboard (play_t *play, board_t *board, int xoffset, int yoffset, int full) { - int x, y; - for (x = -1; x <= board->xsize; x++) { - for (y = -1; y <= board->ysize; y++) { + for (int x = -1; x <= board->xsize; x++) { + for (int y = -1; y <= board->ysize; y++) { int c = ' '; char pos[12] = {0}; sprintf (pos, "%c%d", 'A' + y, 1 + x); @@ -140,8 +139,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); } @@ -154,7 +152,7 @@ int helpwindow (char *msg, char *msg2, int xoffset, int yoffset) int j = 2; j += _helpwindow (msg, xoffset, yoffset + j, length); j++; - j += _helpwindow (msg2, xoffset, yoffset + j, length); + /*j +=*/ _helpwindow (msg2, xoffset, yoffset + j, length); return length; } @@ -162,10 +160,9 @@ int helpwindow (char *msg, char *msg2, int xoffset, int yoffset) void valuewindow (bag_t *bag, int xoffset, int yoffset, int length, char current) { _displaytitle ("Tile values", xoffset, yoffset); - int i; int n = length / 5; int N = (bag->nbletters + n - 1) / n; - for (i = 0; i < bag->nbletters; i++) { + for (int i = 0; i < bag->nbletters; i++) { int x = xoffset + (i % 2) + 5 * (i / N); int y = yoffset + 2 + (i % N); set_color (((bag->lettervalues + i)->letter == current) ? yellow : black); @@ -179,9 +176,7 @@ void valuewindow (bag_t *bag, int xoffset, int yoffset, int length, char current void drawwindow (draw_t *game, int score, int xoffset, int yoffset, int mode) { - int i; - - for (i = 0; i < 2 * game->nbtiles - 1; i++) { + for (int i = 0; i < 2 * game->nbtiles - 1; i++) { mvaddch (yoffset - 1, xoffset + i, ACS_HLINE); mvaddch (yoffset, xoffset + i, ' '); mvaddch (yoffset + 1, xoffset + i, ACS_HLINE); @@ -199,7 +194,7 @@ void drawwindow (draw_t *game, int score, int xoffset, int yoffset, int mode) } set_color (black); - for (i = 0; i < game->nbtiles; i++) { + for (int i = 0; i < game->nbtiles; i++) { if (game->tiles[i] != ' ') { mvaddch (yoffset, xoffset + 2 * i, game->tiles[i]); } @@ -222,8 +217,7 @@ void scorewindow (int score, int xoffset, int yoffset) void spellwindow (word_t *words, int xoffset, int yoffset, int mode) { _displaytitle ("Spelling", xoffset, yoffset); - int i, n = 0; - for (i = 0; i < words->maxnbwords; i++) { + for (int i = 0, n = 0; i < words->maxnbwords; i++) { if (words->status[i] != none) { if (mode) { switch (words->status[i]) { @@ -240,8 +234,7 @@ void spellwindow (word_t *words, int xoffset, int yoffset, int mode) mvaddstr (yoffset + 2 + n, xoffset, words->tab[i]); set_color (white); } else { - int j; - for (j = 0; words->tab[i][j] != '\0'; j++) { + for (int j = 0; words->tab[i][j] != '\0'; j++) { mvaddch (yoffset + 2 + n, xoffset + j, ' '); } } diff --git a/function.c b/function.c index f217027..d0ab504 100644 --- a/function.c +++ b/function.c @@ -62,8 +62,8 @@ void cleanplay (play_t *play) int _nbletters (play_t *play) { - int i, n = 0; - for (i = 0; i < play->xsize * play->ysize; i++) { + int n = 0; + for (int i = 0; i < play->xsize * play->ysize; i++) { if (play->tab[i] != ' ') { n++; } @@ -125,16 +125,15 @@ void freedraw (draw_t *draw) void retrievetiles (draw_t *draw, draw_t *game, int mode) { - int i; if (mode) { - for (i = 0; i < game->nbtiles; i++) { + for (int i = 0; i < game->nbtiles; i++) { if (game->tiles[i] != ' ') { draw->tiles[draw->nbtiles++] = game->tiles[i]; game->tiles[i] = ' '; } } } - for (i = 0; (i < game->nbtiles) && (draw->nbtiles > 0); i++) { + for (int i = 0; (i < game->nbtiles) && (draw->nbtiles > 0); i++) { if (game->tiles[i] != ' ') { continue; } @@ -153,8 +152,7 @@ void retrievetiles (draw_t *draw, draw_t *game, int mode) char getnextletter (draw_t *game) { char letter = 0; - int i; - for (i = 0; i < game->nbtiles; i++) { + for (int i = 0; i < game->nbtiles; i++) { game->index = (game->index + 1) % game->nbtiles; if (game->tiles[game->index] != ' ') { letter = game->tiles[game->index]; @@ -174,8 +172,8 @@ char getnewletter (draw_t *game) int returnletter (draw_t *game, char letter) { - int i, ret = 0; - for (i = 0; i < game->nbtiles; i++) { + int ret = 0; + for (int i = 0; i < game->nbtiles; i++) { if (game->tiles[i] == ' ') { game->tiles[i] = letter; game->index = i - 1; @@ -238,8 +236,7 @@ int _letterfactor (board_t *board, play_t *turn, int i, int j) int _findvalue (bag_t *bag, char letter) { int value = 0; - int k; - for (k = 0; k < bag->nbletters; k++) { + for (int k = 0; k < bag->nbletters; k++) { if (bag->lettervalues[k].letter == letter) { value = bag->lettervalues[k].value; break; @@ -253,15 +250,13 @@ int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag) int intern = 0; int score = 0; - int i, j; - /* words in line */ - for (j = 0; j < play->ysize; j++) { + for (int j = 0; j < play->ysize; j++) { int s = 0; int accountable = 0; int wfactor = 1; int nbletters = 0; - for (i = 0; i < play->xsize; i++) { + for (int i = 0; i < play->xsize; i++) { char letter = *_getletteraddr (play, i, j); if (letter != ' ') { @@ -291,12 +286,12 @@ int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag) } /* words in column */ - for (i = 0; i < play->xsize; i++) { + for (int i = 0; i < play->xsize; i++) { int s = 0; int accountable = 0; int wfactor = 1; int nbletters = 0; - for (j = 0; j < play->ysize; j++) { + for (int j = 0; j < play->ysize; j++) { char letter = *_getletteraddr (play, i, j); if (letter != ' ') { @@ -328,8 +323,7 @@ int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag) int isturnempty (play_t *turn) { int ret = 1; - int i; - for (i = 0; i < turn->xsize * turn->ysize; i++) { + for (int i = 0; i < turn->xsize * turn->ysize; i++) { if (turn->tab[i] != ' ') { ret = 0; break; @@ -340,12 +334,11 @@ int isturnempty (play_t *turn) word_t *initword (int maxnbwords, int maxlength) { - int i; word_t *words = (word_t *) calloc (1, sizeof (word_t)); CHECKALLOC (words); words->tab = (char **) calloc (maxnbwords, sizeof (char *)); CHECKALLOC (words->tab); - for (i = 0; i < maxnbwords; i++) { + for (int i = 0; i < maxnbwords; i++) { words->tab[i] = (char *) calloc (maxlength, 1); CHECKALLOC (words->tab[i]); } @@ -359,8 +352,7 @@ void freeword (word_t *words) { if (words) { if (words->tab) { - int i; - for (i = 0; i < words->maxnbwords; i++) { + for (int i = 0; i < words->maxnbwords; i++) { free (words->tab[i]); } } @@ -372,10 +364,8 @@ void freeword (word_t *words) void findwords (word_t *words, play_t *play, play_t *turn) { - int i, j; - /* clean */ - for (i = 0; i < words->maxnbwords; i++) { + for (int i = 0; i < words->maxnbwords; i++) { words->tab[i][0] = '\0'; words->status[i] = none; } @@ -383,10 +373,10 @@ void findwords (word_t *words, play_t *play, play_t *turn) int n = 0; /* words in line */ - for (j = 0; j < play->ysize; j++) { + for (int j = 0; j < play->ysize; j++) { int nbletters = 0; int accountable = 0; - for (i = 0; i < play->xsize; i++) { + for (int i = 0; i < play->xsize; i++) { char letter = *_getletteraddr (play, i, j); if (letter != ' ') { words->tab[n][nbletters++] = letter; @@ -409,10 +399,10 @@ void findwords (word_t *words, play_t *play, play_t *turn) } /* words in column */ - for (i = 0; i < play->xsize; i++) { + for (int i = 0; i < play->xsize; i++) { int nbletters = 0; int accountable = 0; - for (j = 0; j < play->ysize; j++) { + for (int j = 0; j < play->ysize; j++) { char letter = *_getletteraddr (play, i, j); if (letter != ' ') { words->tab[n][nbletters++] = letter; @@ -441,8 +431,7 @@ int _strrcmp (char *str1, char *str2) int l1 = strlen (str1); int l2 = strlen (str2); int l = (l1 < l2) ? l1 : l2; - int i; - for (i = 0; i < l; i++) { + for (int i = 0; i < l; i++) { if (str1[i] != '.') { ret = str1[i] - str2[i]; if (ret != 0) { @@ -460,11 +449,10 @@ void checkspellingfromfile (word_t *words, char *dict) { FILE *fd = (dict) ? fopen (dict, "r") : NULL; if (fd) { - int i; char str[128] = {0}; while (fscanf (fd, "%s", str) > 0) { int stop = 1; - for (i = 0; i < words->maxnbwords; i++) { + for (int i = 0; i < words->maxnbwords; i++) { if (words->status[i] == notchecked) { if (_strrcmp (words->tab[i], str) == 0) { words->status[i] = correct; @@ -478,7 +466,7 @@ void checkspellingfromfile (word_t *words, char *dict) } } fclose (fd); - for (i = 0; i < words->maxnbwords; i++) { + for (int i = 0; i < words->maxnbwords; i++) { if (words->status[i] == notchecked) { words->status[i] = incorrect; } @@ -526,10 +514,9 @@ void freecache (char **listofwords) void checkspellingfromcache (word_t *words, char **listofwords) { if (listofwords) { - int i; while (*listofwords) { int stop = 1; - for (i = 0; i < words->maxnbwords; i++) { + for (int i = 0; i < words->maxnbwords; i++) { if (words->status[i] == notchecked) { if (_strrcmp (words->tab[i], *listofwords) == 0) { words->status[i] = correct; @@ -543,7 +530,7 @@ void checkspellingfromcache (word_t *words, char **listofwords) break; } } - for (i = 0; i < words->maxnbwords; i++) { + for (int i = 0; i < words->maxnbwords; i++) { if (words->status[i] == notchecked) { words->status[i] = incorrect; } @@ -553,7 +540,6 @@ void checkspellingfromcache (word_t *words, char **listofwords) char *savedata (int nbplayers, char *lang, char *board, play_t *play, draw_t *draw, draw_t **game, int n, play_t **turn, int *score) { - int i; char *buffer = (char *) calloc (10000, 1); CHECKALLOC (buffer); @@ -563,13 +549,13 @@ char *savedata (int nbplayers, char *lang, char *board, play_t *play, draw_t *dr l += sprintf (buffer + l, "play->tab: \"%s\"\n", play->tab); l += sprintf (buffer + l, "draw->nbtiles: %d\n", draw->nbtiles); l += sprintf (buffer + l, "draw->tiles: \"%s\"\n", draw->tiles); - for (i = 0; i < nbplayers; i++) { + for (int i = 0; i < nbplayers; i++) { l += sprintf (buffer + l, "game[%d]->nbtiles: %d\n", i, game[i]->nbtiles); l += sprintf (buffer + l, "game[%d]->tiles: \"%s\"\n", i, game[i]->tiles); } l += sprintf (buffer + l, "current: %d\n", n); l += sprintf (buffer + l, "turn[%d]->tab: \"%s\"\n", n, turn[n]->tab); - for (i = 0; i < nbplayers; i++) { + for (int i = 0; i < nbplayers; i++) { l += sprintf (buffer + l, "score[%d]: %d\n", i, score[i]); } @@ -610,6 +596,11 @@ char *loaddata (char *filename) 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); @@ -716,10 +707,9 @@ int restoredata (char *str, int *nbplayers, board_t **board, bag_t **bag, play_t } if (*board) { - int i; play->xsize = (*board)->xsize; play->ysize = (*board)->ysize; - for (i = 0; i < MAXNBPLAYERS; i++) { + for (int i = 0; i < MAXNBPLAYERS; i++) { turn[i]->xsize = (*board)->xsize; turn[i]->ysize = (*board)->ysize; } diff --git a/makefile b/makefile index 15082bf..dcc3a3b 100644 --- a/makefile +++ b/makefile @@ -56,6 +56,10 @@ GETCOMMENTS = awk '/\/\*\s*$(1):/,/\*\// { sub(/.*\/\*\s*$(1):/, ""); sub (/\s*\ all: depends $(MAKE) $(ALLEXE:%=%.exe) +analyze: + make purge + scan-build make + count: wc $(wildcard *.c *.h) $(MAKEFILE_LIST) @@ -170,7 +174,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/scrabble.c b/scrabble.c index d86616c..e2c376b 100644 --- a/scrabble.c +++ b/scrabble.c @@ -72,8 +72,6 @@ int usage (int ret) /* main function */ int main (int argc, char *argv[]) { - int n; - /* get basename */ char *pt = progname = argv[0]; while (*pt) { @@ -196,17 +194,17 @@ int main (int argc, char *argv[]) draw_t *draw = initdraw (bag); draw_t **game = (draw_t **) calloc (MAXNBPLAYERS, sizeof (draw_t *)); CHECKALLOC (game); - for (n = 0; n < MAXNBPLAYERS; n++) { + for (int n = 0; n < MAXNBPLAYERS; n++) { game[n] = newdraw (board->length); } - for (n = 0; n < nbplayers; n++) { + for (int n = 0; n < nbplayers; n++) { retrievetiles (draw, game[n], 0); } VERBOSE (DEBUG, printf ("bag: 0x%p\ndraw: 0x%p\ngame: 0x%p\ngame[0]: 0x%p", bag, draw, game, game[0])); play_t **turn = (play_t **) calloc (MAXNBPLAYERS, sizeof (play_t *)); CHECKALLOC (turn); - for (n = 0; n < MAXNBPLAYERS; n++) { + for (int n = 0; n < MAXNBPLAYERS; n++) { turn[n] = initplay (board->xsize, board->ysize); } @@ -229,7 +227,7 @@ int main (int argc, char *argv[]) CHECKALLOC (xdrawwin); int *ydrawwin = (int *) calloc (MAXNBPLAYERS, sizeof (int)); CHECKALLOC (ydrawwin); - for (n = 0; n < MAXNBPLAYERS; n++) { + for (int n = 0; n < MAXNBPLAYERS; n++) { xdrawwin[n] = 1 + n * xoffset + n * (board->length * 2 - 1); ydrawwin[n] = 2 * yoffset + max (board->ysize, 1 + (bag->nbletters + 1) /2); } @@ -244,8 +242,8 @@ int main (int argc, char *argv[]) int *score = (int *) calloc (MAXNBPLAYERS, sizeof (int)); CHECKALLOC (score); - n = 0; + int n = 0; if (file) { char *buffer = loaddata (file); if (buffer) { @@ -260,8 +258,7 @@ int main (int argc, char *argv[]) free (buffer); } - int i; - for (i = 0; i < nbplayers; i++) { + for (int i = 0; i < nbplayers; i++) { drawwindow (game[i], score[i], xdrawwin[i], ydrawwin[i], 0); } @@ -398,7 +395,7 @@ int main (int argc, char *argv[]) endwin (); freeplay (play); - for (n = 0; n < MAXNBPLAYERS; n++) { + for (int n = 0; n < MAXNBPLAYERS; n++) { freeplay (turn[n]); freedraw (game[n]); } -- 2.30.2