add LEN() macro and use it - chess-puzzles - chess puzzle book generator
 (HTM) git clone git://git.codemadness.org/chess-puzzles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f1daa80c1d6cf199c57d820e117255f38bd3d55e
 (DIR) parent 6af435b4416d90cb27e447e2f0bf505721374e12
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Mon, 25 Dec 2023 18:54:16 +0100
       
       add LEN() macro and use it
       
       Diffstat:
         M fen.c                               |      17 +++++++++--------
       
       1 file changed, 9 insertions(+), 8 deletions(-)
       ---
 (DIR) diff --git a/fen.c b/fen.c
       @@ -9,6 +9,8 @@
        #include <unistd.h>
        #endif
        
       +#define LEN(s)    (sizeof(s)/sizeof(*s))
       +
        /* macro for truecolor RGB output to tty */
        #define SETFGCOLOR(r,g,b)    printf("\x1b[38;2;%d;%d;%dm", r, g, b)
        #define SETBGCOLOR(r,g,b)    printf("\x1b[48;2;%d;%d;%dm", r, g, b)
       @@ -216,7 +218,7 @@ output_svg(void)
        {
                const char *s;
                char pieces[] = "pPKQRBNkqrbn"; /* pieces, check if they are used for definitions */
       -        unsigned char pieceused[sizeof("pPKQRBNkqrbn")];
       +        unsigned char pieceused[LEN("pPKQRBNkqrbn")] = { 0 };
                const int *color;
                int i, ix, iy, x, y, piece;
        
       @@ -225,8 +227,7 @@ output_svg(void)
                        "<svg width=\"360\" height=\"360\" viewBox=\"0 0 360 360\" xmlns=\"http://www.w3.org/2000/svg\">\n"
                        "<rect fill=\"#fff\" stroke=\"#000\" x=\"0\" y=\"0\" width=\"360\" height=\"360\"/>\n", stdout);
        
       -        memset(pieceused, 0, sizeof(pieceused));
       -        for (i = 0; i < sizeof(pieces) / sizeof(pieces[0]); i++) {
       +        for (i = 0; i < LEN(pieces); i++) {
                        for (y = 0; y < 8 && !pieceused[i]; y++) {
                                for (x = 0; x < 8; x++) {
                                        if (getpiece(x, y) == pieces[i]) {
       @@ -238,7 +239,7 @@ output_svg(void)
                }
        
                fputs("<defs>\n", stdout);
       -        for (i = 0; i < sizeof(pieces) / sizeof(pieces[0]); i++) {
       +        for (i = 0; i < LEN(pieces); i++) {
                        if (!pieceused[i])
                                continue;
                        s = NULL;
       @@ -533,7 +534,7 @@ ischecked(int side)
                        return 0; /* should not happen */
        
                /* check files and ranks (for queen and rook) */
       -        for (j = 0; j < 8; j += 2) {
       +        for (j = 0; j < LEN(line); j += 2) {
                        for (i = 1; i < 8; i ++) {
                                x = kingx + (i * line[j]);
                                y = kingy + (i * line[j + 1]);
       @@ -551,8 +552,8 @@ ischecked(int side)
                }
        
                /* check diagonals (queen and bishop) */
       -        for (j = 0; j < 8; j += 2) {
       -                for (i = 1; i < 8; i ++) {
       +        for (j = 0; j < LEN(diag); j += 2) {
       +                for (i = 1; i < 8; i++) {
                                x = kingx + (i * diag[j]);
                                y = kingy + (i * diag[j + 1]);
                                if (!(piece = getpiece(x, y)))
       @@ -570,7 +571,7 @@ ischecked(int side)
        
                /* check knights */
                piece = side == 'w' ? 'n' : 'N';
       -        for (j = 0; j < 16; j += 2) {
       +        for (j = 0; j < LEN(knight); j += 2) {
                        x = kingx + knight[j];
                        y = kingy + knight[j + 1];
        //                highlightmove(x, y); /* DEBUG */