full adaptation to c99 master
authorLaurent Mazet <mazet@softndesign.org>
Tue, 15 Apr 2025 18:57:49 +0000 (20:57 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 15 Apr 2025 18:57:49 +0000 (20:57 +0200)
block.c
constant.c
display.c
function.c
makefile
pentomino.c

diff --git a/block.c b/block.c
index 9c9fca88d017363969da8b9c679d4bd2481ca936..5b8fd260163a6353ba0fd0584cd88660069a9207 100644 (file)
--- 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:
index 630fd006f3f5052d2123e37a1d44e03293ad23e4..50e2bcab6a58a157e99d45074a802d6ca9896853 100644 (file)
@@ -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);
     }
 
index e42f43086ece301b1edcc6242638f027c806d7dc..9dcd206c0953197eb6ab9f44590d5652964631c3 100644 (file)
--- 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, ' ');
         }
     }
index 1f4404b9cc44b34b2e09cb20f2ebb4ab2d86aeb3..5ceab9097e3ef383c76df02223b42794eb526e3f 100644 (file)
@@ -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;
             }
index 0c66e8eefd000f5a4a99c354fe65fd65828b4d78..09ecb8bc309abe5c9bba31812b7dfecc3743bcb9 100644 (file)
--- 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
 
index df9e6b37d79f316e221a0e058d93eef706c8d7b6..a7cdb61b8a9600c300b1d18b6057a108f7a2f051 100644 (file)
@@ -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 {