From: Laurent Mazet Date: Tue, 15 Apr 2025 21:45:56 +0000 (+0200) Subject: full adaptation to c99 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=34df8e7e22b9e874f48be2f1a6173012c007ed88;p=sudoku.git full adaptation to c99 --- diff --git a/debug.c b/debug.c index b9eba44..d2a70bf 100644 --- 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: */ diff --git a/display.c b/display.c index 0b6f93b..fa0ad7c 100644 --- 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: */ diff --git a/function.c b/function.c index 42701b6..be13c40 100644 --- a/function.c +++ b/function.c @@ -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: */ diff --git a/function.h b/function.h index 55d88e0..c960c79 100644 --- a/function.h +++ b/function.h @@ -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: */ diff --git a/makefile b/makefile index 8abae4b..09ecb8b 100644 --- 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 diff --git a/sudoku.c b/sudoku.c index 074d5dc..5f65ce8 100644 --- 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: */