full adaptation to c99
authorLaurent Mazet <mazet@softndesign.org>
Sat, 12 Apr 2025 18:54:57 +0000 (20:54 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 12 Apr 2025 18:54:57 +0000 (20:54 +0200)
display.c
function.c
makefile
scrabble.c

index 5c87acbfbc8141280363ba75980959fce85aaa30..af130c957b9597b6a7345efeb77cd57523c729ca 100644 (file)
--- 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, ' ');
                 }
             }
index f217027515ea6373d90039cf6972df57f5fa52fa..d0ab504ba92ce90cfa9f7bffd6ff0bf5c71b5801 100644 (file)
@@ -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;
         }
index 15082bfecf983e42b6420c1ff2ad25b979322270..dcc3a3b5ae40255a300c0659dd3c405fe35c9767 100644 (file)
--- 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
 
index d86616ca7a67bbc6aa4f76f30d0172284ac67dba..e2c376bfc47d275b4104b88bb59b50b86ae5b2e4 100644 (file)
@@ -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]);
     }