full adaptation to c99 dev_ghost
authorLaurent Mazet <mazet@softndesign.org>
Tue, 15 Apr 2025 20:01:59 +0000 (22:01 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 15 Apr 2025 20:01:59 +0000 (22:01 +0200)
display.c
function.c
makefile
pacman.c

index bc04ba4a7d3089499735c98becc9ac94b11a8748..0cc6981c80849f52b088b541d1d8555b61e1c8d3 100644 (file)
--- a/display.c
+++ b/display.c
@@ -33,8 +33,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);
     }
@@ -42,13 +41,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);
     }
@@ -182,16 +179,14 @@ void displayelement (board_t *board, int x, int y)
 
 void boardwindow (board_t *board, int mode)
 {
-    int x, y;
-
     //setcolor (mode ? gray_black : black_gray);
     if (mode) {
         _dobound (board->width, board->height, board->xoffset, board->yoffset);
     }
     //setcolor (gray_black);
 
-    for (x = 0; x < board->width; x++) {
-        for (y = 0; y < board->height; y++) {
+    for (int x = 0; x < board->width; x++) {
+        for (int y = 0; y < board->height; y++) {
             displayelement (board, x, y);
         }
     }
@@ -207,10 +202,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);
@@ -255,7 +250,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';
             }
@@ -279,8 +274,7 @@ void msgwindow (char *msg, int xoffset, int yoffset, int length, int mode)
         setcolor (gray_black);
     }
     if (length > 0) {
-        int i;
-        for (i = 0; i < length; i++) {
+        for (int i = 0; i < length; i++) {
             mvaddch (yoffset, xoffset + i, ' ');
         }
     }
index 6ddcac287d97bdcbaff5c451a1c3fa89ca11f6e5..c8ee2644ea6934e1f74681a1c5a7313c48d6250e 100644 (file)
@@ -68,10 +68,10 @@ board_t *copyboard (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");
@@ -129,13 +129,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) {
+            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);
     }
@@ -186,8 +190,7 @@ board_t *loadboard (char *str)
             height = atoi (value);
             last = NULL;
         } else if (strcmp (keyword,  "tab") == 0) {
-            tab = strdup (atos (value));
-            last = tab;
+            last = tab = strdup (atos (value));
         } else if (strcmp (keyword,  "rem") == 0) {
             /* nothing to do with remark */
             last = NULL;
index 01777bf8265fcf900dc876855a1586de9b5863de..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 += pacman
+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 536445f33c3ddc0f1006b6da51f425424ab94d31..84be160954d9a28d728279cc9f4ad0df9e0e78f1 100644 (file)
--- a/pacman.c
+++ b/pacman.c
@@ -74,8 +74,6 @@ void getnewposition (board_t *board, int dir, int x, int y, int *px, int *py)
 /* main function */
 int main (int argc, char *argv[])
 {
-    int i;
-
     /* get basename */
     char *pt = progname = argv[0];
     while (*pt) {
@@ -199,7 +197,7 @@ int main (int argc, char *argv[])
     /* ghost positions */
     int gx[MAXNBGHOSTS] = {0};
     int gy[MAXNBGHOSTS] = {0};
-    for (i = 0; i < MAXNBGHOSTS; i++) {
+    for (int i = 0; i < MAXNBGHOSTS; i++) {
         if ((findchar (board, 'P' + i, gx + i, gy + i)) &&
             (findchar (board, 'p' + i, gx + i, gy + i)) &&
             (findchar (board, '$' + i, gx + i, gy + i))) {
@@ -298,7 +296,7 @@ int main (int argc, char *argv[])
             spin = 0;
 
             /* move ghosts */
-            for (i = 0; i < MAXNBGHOSTS; i++) {
+            for (int i = 0; i < MAXNBGHOSTS; i++) {
                 char *cell = getcell (board, gx[i], gy[i]);
                 if (*cell == 'x' + i) {
                 } else if ((*cell == 'P' + i) || (*cell == 'p' + i)) {
@@ -325,8 +323,7 @@ int main (int argc, char *argv[])
             spin = 1;
 
             /* commute ghost */
-            int i;
-            for (i = 0; i < 4; i++) {
+            for (int i = 0; i < 4; i++) {
                 int x, y;
                 if (commuteghost (board, i, &x, &y)) {
                     displayelement (board, x, y);
@@ -336,7 +333,7 @@ int main (int argc, char *argv[])
 
         /* test end of game */
         if (endofgame (board)) {
-            mode = 2;
+            //mode = 2;
             sprintf (msg, "End of game");
             msgwindow (msg, xboard + (board->width - strlen (msg)) / 2, yboard + (board->height - 1) / 2, strlen (msg), 1);
             waitforkey ('q');
@@ -350,8 +347,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);
@@ -417,9 +413,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 {