add util functions for (x,y) to (file, rank) and vice versa - 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 6af435b4416d90cb27e447e2f0bf505721374e12
 (DIR) parent b7a52ecde26555a060898faaa5643851368c7467
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Mon, 25 Dec 2023 18:49:58 +0100
       
       add util functions for (x,y) to (file, rank) and vice versa
       
       Diffstat:
         M fen.c                               |      46 +++++++++++++++++++++++--------
       
       1 file changed, 35 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/fen.c b/fen.c
       @@ -97,12 +97,36 @@ getpiece(int x, int y)
        }
        
        int
       +xtofile(int c)
       +{
       +        return 'a' + c;
       +}
       +
       +int
       +ytorank(int c)
       +{
       +        return '8' - c;
       +}
       +
       +int
       +filetox(int c)
       +{
       +        return c - 'a';
       +}
       +
       +int
       +ranktoy(int c)
       +{
       +        return '8' - c;
       +}
       +
       +int
        squaretoxy(const char *s, int *x, int *y)
        {
                if (*s >= 'a' && *s <= 'h' &&
                    *(s + 1) >= '1' && *(s + 1) <= '8') {
       -                *x = *s - 'a';
       -                *y = '8' - *(s + 1);
       +                *x = filetox(*s);
       +                *y = ranktoy(*(s + 1));
                        return 1;
                }
                return 0;
       @@ -153,8 +177,8 @@ showboardfen(void)
                putchar(' ');
        
                if (enpassantsquare[0] != -1 && enpassantsquare[1] != -1) {
       -                putchar('a' + enpassantsquare[0]);
       -                putchar('8' - enpassantsquare[1]);
       +                putchar(xtofile(enpassantsquare[0]));
       +                putchar(ytorank(enpassantsquare[1]));
                } else {
                        putchar('-');
                }
       @@ -277,7 +301,7 @@ output_svg(void)
                                        color = highlight[y][x] ? lightsquarehi : lightsquare;
        
                                printf("<text x=\"%d\" y=\"%d\" fill=\"#%02x%02x%02x\" text-anchor=\"end\" style=\"font-family: sans-serif; font-size: 10px\">%c</text>\n",
       -                                (ix + 1) * 45 - 2, (iy * 45) + 10, color[0], color[1], color[2], '8' - y);
       +                                (ix + 1) * 45 - 2, (iy * 45) + 10, color[0], color[1], color[2], ytorank(y));
                        }
                        iy = 7;
                        y = flipboard ? 0 : 7;
       @@ -298,7 +322,7 @@ output_svg(void)
                                }
        
                                printf("<text x=\"%d\" y=\"%d\" fill=\"#%02x%02x%02x\" text-anchor=\"start\" style=\"font-family: sans-serif; font-size: 10px\">%c</text>\n",
       -                                (ix * 45) + 2, (iy + 1) * 45 - 3, color[0], color[1], color[2], x + 'a');
       +                                (ix * 45) + 2, (iy + 1) * 45 - 3, color[0], color[1], color[2], xtofile(x));
                        }
                }
        
       @@ -384,7 +408,7 @@ output_tty(void)
                        SETBGCOLOR(color[0], color[1], color[2]);
                        if (showcoords) {
                                fputs("\x1b[97m", stdout); /* bright white */
       -                        putchar('8' - y);
       +                        putchar(ytorank(y));
                                putchar(' ');
                        } else {
                                fputs("  ", stdout);
       @@ -455,7 +479,7 @@ output_ascii(void)
                        }
                        if (showcoords) {
                                putchar(' ');
       -                        putchar('8' - y);
       +                        putchar(ytorank(y));
                        }
                        putchar('\n');
                }
       @@ -857,15 +881,15 @@ parsemoves(const char *moves)
                                        if (piece != 'p' && piece != 'P') {
                                                pgn("%c", toupper(piece));
                                                /* TODO: check ambiguity for certain pieces and make the notation shorter */
       -                                        pgn("%c%c", 'a' + x, '8' - y);
       +                                        pgn("%c%c", xtofile(x), ytorank(y));
                                        }
                                        if (tookpiece) {
                                                /* pawn captures are prefixed by the file letter */
                                                if (piece == 'p' || piece == 'P')
       -                                                pgn("%c", 'a' + x);
       +                                                pgn("%c", xtofile(x));
                                                pgn("x");
                                        }
       -                                pgn("%c%c", 'a' + x2, '8' - y2);
       +                                pgn("%c%c", xtofile(x2), ytorank(y2));
        
                                        /* possible promotion: queen, knight, bishop */
                                        if (*s == 'q' || *s == 'n' || *s == 'b') {