full adaptation to c99 master
authorLaurent Mazet <mazet@softndesign.org>
Tue, 15 Apr 2025 21:45:56 +0000 (23:45 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 15 Apr 2025 21:45:56 +0000 (23:45 +0200)
debug.c
display.c
function.c
function.h
makefile
sudoku.c

diff --git a/debug.c b/debug.c
index b9eba44982531dcb79cb2a31cc34623e7e830031..d2a70bf9eb3f619ccf65da653065a093ff217dcb 100644 (file)
--- a/debug.c
+++ b/debug.c
@@ -2,4 +2,4 @@
 
 int verbose = 0;
 
-/* vim: set ts=4 sw=4 et: */
+/* vim: set ts=4 sw=4 si et: */
index 0b6f93bba3c9cedefa621ece5d0a37ab7ac4cee0..fa0ad7ce10515f29b42a8d5badd1fc3fec27e927 100644 (file)
--- a/display.c
+++ b/display.c
@@ -188,4 +188,4 @@ void displayboard (board_t *board, int xoffset, int yoffset)
     }
 }
 
-/* vim: set ts=4 sw=4 et: */
+/* vim: set ts=4 sw=4 si et: */
index 42701b674ac63fcc5d080f0a2e713fbf4d4da747..be13c40c5d9461d0c42e0a5c7b18217ebd79baab 100644 (file)
@@ -77,9 +77,8 @@ board_t *_idemposition (board_t *board, char val)
 
     board_t *box = initboard (n);
 
-    int i, j;
-    for (i = 0; i < board->length; i++) {
-        for (j = 0; j < board->length; j++) {
+    for (int i = 0; i < board->length; i++) {
+        for (int j = 0; j < board->length; j++) {
             if (getvalue (board, i, j) == val) {
                 *getcell (box, i % n, j % n) = '#';
             }
@@ -92,9 +91,8 @@ int _isinbox (board_t *board, int i, int j, char val)
 {
     int n = sqrti (board->length);
 
-    int k, l;
-    for (k = 0; k < n; k++) {
-        for (l = 0; l < n; l++) {
+    for (int k = 0; k < n; k++) {
+        for (int l = 0; l < n; l++) {
             if (getvalue (board, n * i + k, n * j + l) == val) {
                 return 1;
             }
@@ -106,10 +104,9 @@ int _isinbox (board_t *board, int i, int j, char val)
 
 board_t *_forbidenposition (board_t *board, board_t *box, int i, char val)
 {
-    int j;
     int n = sqrti (board->length);
 
-    for (j = 0; j < board->length; j++) {
+    for (int j = 0; j < board->length; j++) {
 
         /* box check */
         if (getvalue (board, n * (i % n) + j % n, n * (i / n) + j / n) != ' ') {
@@ -118,11 +115,9 @@ board_t *_forbidenposition (board_t *board, board_t *box, int i, char val)
 
         /* verical check */
         if ((j / n == i / n) && (j % n != i % n)) {
-            int l;
-            for (l = 0; l < board->length; l++) {
+            for (int l = 0; l < board->length; l++) {
                 if (getvalue (board, n * (j % n) + l % n, n * (j / n) + l / n) == val) {
-                    int t;
-                    for (t = 0; t < n; t++) {
+                    for (int t = 0; t < n; t++) {
                         *getcell (box, t, l / n) = '#';
                     }
                 }
@@ -131,11 +126,9 @@ board_t *_forbidenposition (board_t *board, board_t *box, int i, char val)
 
         /* horizontal check */
         if ((j / n != i / n) && (j % n == i % n)) {
-            int l;
-            for (l = 0; l < board->length; l++) {
+            for (int l = 0; l < board->length; l++) {
                 if (getvalue (board, n * (j % n) + l % n, n * (j / n) + l / n) == val) {
-                    int t;
-                    for (t = 0; t < n; t++) {
+                    for (int t = 0; t < n; t++) {
                         *getcell (box, l % n, t) = '#';
                     }
                 }
@@ -149,21 +142,17 @@ board_t *_forbidenposition (board_t *board, board_t *box, int i, char val)
 
 board_t *initplay (board_t *board, int nb_known_tiles)
 {
-    int t;
     int n = sqrti (board->length);
 
 char *buffer = (char *) calloc (board->length * (8 + board->length) + 1, 1);
 
-    for (t = 0; t < nb_known_tiles; t++) {
+    for (int t = 0; t < nb_known_tiles; t++) {
 
         /* k is value */
         int k = rand () % board->length;
         char val = _itoh (1 + k);
         board_t *box = _idemposition (board, val);
 
-_makecomments (buffer, box);
-printf ("box:\n%s", buffer);
-
         /* i in position */
         int i;
         do {
@@ -173,13 +162,9 @@ printf ("box:\n%s", buffer);
         /* look for forbiden position */
         _forbidenposition (board, box, i, val);
 
-_makecomments (buffer, box);
-printf ("box:\n%s", buffer);
-
         /* count avaliable position */
-        int j;
         int pos = 0;
-        for (j = 0; j < board->length; j++) {
+        for (int j = 0; j < board->length; j++) {
             if (getvalue (box, j % n, j / n) == ' ') {
                 pos++;
             }
@@ -189,7 +174,7 @@ printf ("box:\n%s", buffer);
         if (pos > 0) {
             pos = rand () % pos;
 
-            for (j = 0; (j < board->length) && (pos >= 0); j++) {
+            for (int j = 0; (j < board->length) && (pos >= 0); j++) {
                 if (getvalue (box, j % n, j / n) == ' ') {
                     if (pos == 0) {
                         *getcell (board, n * (i % n) + j % n, n * (i / n) + j / n) = val;
@@ -199,9 +184,6 @@ printf ("box:\n%s", buffer);
             }
         }
 
-        _makecomments (buffer, board);
-        printf ("board:\n%s", buffer);
-
         freeboard (box);
     }
 
@@ -220,10 +202,10 @@ void freeboard (board_t *board)
 
 int _makecomments (char *buffer, board_t *board)
 {
-    int i, j, l = 0;
-    for (j = 0; j < board->length; j++) {
+    int l = 0;
+    for (int j = 0; j < board->length; j++) {
         l += sprintf (buffer + l, "rem: \"");
-        for (i = 0; i < board->length; i++) {
+        for (int i = 0; i < board->length; i++) {
             l += sprintf (buffer + l, "%c", getvalue (board, i, j));
         }
         l += sprintf (buffer + l, "\"\n");
@@ -268,13 +250,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);
     }
@@ -348,4 +334,9 @@ char getvalue (board_t *board, int x, int y)
     return (x >= 0) && (x < board->length) && (y >= 0) && (y < board->length) ? *getcell (board, x, y) : 0;
 }
 
+board_t *solveboard (board_t *board)
+{
+    return board;
+}
+
 /* vim: set ts=4 sw=4 et: */
index 55d88e08fd3889799daa4efc6f91b76a9bb61ed1..c960c79c3aaeebfa1821ed6fa2f03f00006f7a7a 100644 (file)
@@ -43,6 +43,8 @@ char *getcell (board_t *board, int x, int y);
 
 char getvalue (board_t *board, int x, int y);
 
+board_t *solveboard (board_t *board);
+
 #endif /* __FUNCTION_H__ */
 
 /* vim: set ts=4 sw=4 et: */
index 8abae4bf908ab234ff15b162a38c0a524a9c01a7..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
@@ -36,8 +37,7 @@ endif
 
 # Targets
 
-ALLEXE  =
-ALLEXE += sudoku
+ALLEXE  = $(shell for f in *.c; do grep -q '/\*\slinker:' $$f && echo $${f/.c}; done)
 
 SHELL = bash
 
@@ -66,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)
 
@@ -186,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 074d5dc987711533588ac7e3de82cb5b39424e2c..5f65ce88bb4ab1a7c0ee3df22292917dc1fd4f50 100644 (file)
--- a/sudoku.c
+++ b/sudoku.c
@@ -112,6 +112,7 @@ int main (int argc, char *argv[])
     srand (seed);
     board_t *board = initboard (length * length);
     initplay (board, nb);
+    solveboard (board);
 
     /* init curses */
     initscr ();
@@ -145,6 +146,7 @@ int main (int argc, char *argv[])
             stop = 1;
             break;
         }
+
     }
 
     endwin ();
@@ -162,3 +164,4 @@ int main (int argc, char *argv[])
 
 /* test: { sleep 10; echo q; } | sudoku.exe */
 
+/* vim: set ts=4 sw=4 si et: */