void FEN_to_board(char* FENpos, struct game_state_t* gs)
{
- int f,r;\r
- char next;\r
-printf("FEN, var='%s'\n", gs->variant);\r
- for (r=gs->ranks-1; r >=0; r--) {\r
- f=0;\r
- while (f<gs->files) {\r
- next = *(FENpos++);\r
- if (isalpha(next))\r
- gs->board[f++][r] = CharToPiece(next, gs->variant);\r
- else if (next != '/') {\r
- int t = (next - '0');\r
- if(*FENpos >= '0' && *FENpos <= '9') // [HGM] can be double-digit\r
- t = 10*t + *(FENpos++) - '0';\r
- do\r
- gs->board[f++][r] = NOPIECE;\r
- while (--t && f < gs->files);\r
- }\r
- }\r
- }\r
- if (*(FENpos + 1) == 'w') /* the char after the space */\r
- gs->onMove = WHITE;\r
- else\r
- gs->onMove = BLACK;\r
+ int f,r;
+ char next;
+printf("FEN='%s', var='%s'\n", FENpos, gs->variant);
+ for (r=gs->ranks-1; r >=0; r--) {
+ f=0;
+ while (f<gs->files) {
+ next = *(FENpos++);
+ if (isalpha(next))
+ gs->board[f++][r] = CharToPiece(next, gs->variant);
+ else if (next != '/') {
+ int t = (next - '0');
+ if(*FENpos >= '0' && *FENpos <= '9') // [HGM] can be double-digit
+ t = 10*t + *(FENpos++) - '0';
+ do
+ gs->board[f++][r] = NOPIECE;
+ while (--t && f < gs->files);
+ }
+ }
+ }
+ if (*(FENpos + 1) == 'w') /* the char after the space */
+ gs->onMove = WHITE;
+ else
+ gs->onMove = BLACK;
}
/* converts a board to a FEN pos */
static void board_to_FEN(char* FENpos, struct game_state_t* gs)
{
- int f,r,count;\r
- char piece; \r
-\r
- for (r=gs->ranks-1; r>=0; r--) {\r
- count = 0;\r
- for (f=0; f<gs->files; f++) {\r
- if ((piece = PieceToChar(gs->board[f][r])) != ' ') {\r
- if (count) { \r
- if(count > 9) { count -= 10; *(FENpos++) = '1'; }\r
- *(FENpos++) = count + '0';\r
- count = 0;\r
- }\r
- *(FENpos++) = piece;\r
- } else {\r
- if (f == gs->files-1) {\r
- if(count > 8) { count -= 10; *(FENpos++) = '1'; }\r
- *(FENpos++) = count + '0' + 1;\r
- } else\r
- count++;\r
- }\r
- }\r
- *(FENpos++) = '/';\r
- }\r
-\r
- *(--FENpos) = ' ';\r
-\r
- if (gs->onMove == WHITE)\r
- *(++FENpos) = 'w';\r
- else\r
- *(++FENpos) = 'b';\r
- *(++FENpos) = '\0';\r
+ int f,r,count;
+ char piece;
+
+ for (r=gs->ranks-1; r>=0; r--) {
+ count = 0;
+ for (f=0; f<gs->files; f++) {
+ if ((piece = PieceToChar(gs->board[f][r])) != ' ') {
+ if (count) {
+ if(count > 9) { count -= 10; *(FENpos++) = '1'; }
+ *(FENpos++) = count + '0';
+ count = 0;
+ }
+ *(FENpos++) = piece;
+ } else {
+ if (f == gs->files-1) {
+ if(count > 8) { count -= 10; *(FENpos++) = '1'; }
+ *(FENpos++) = count + '0' + 1;
+ } else
+ count++;
+ }
+ }
+ *(FENpos++) = '/';
+ }
+
+ *(--FENpos) = ' ';
+
+ if (gs->onMove == WHITE)
+ *(++FENpos) = 'w';
+ else
+ *(++FENpos) = 'b';
+ *(++FENpos) = '\0';
}
char *boardToFEN(int g)