Rev 171 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 171 | Rev 185 | ||
|---|---|---|---|
| Line 138... | Line 138... | ||
| 138 | int char_index; | 138 | int char_index; | 
| 139 | int fieldstart; | 139 | int fieldstart; | 
| 140 | int fieldstop; | 140 | int fieldstop; | 
| 141 | int program_index; | 141 | int program_index; | 
| 142 | int variation_depth; | 142 | int variation_depth; | 
| - | 143 | int new_gamestate; | |
| 143 | char movenumber_string[8]; | 144 | char movenumber_string[8]; | 
| 144 | 145 | ||
| 145 |    // did we chose NO game ? | 146 |    // did we chose NO game ? | 
| 146 | if (game == NULL) | 147 | if (game == NULL) | 
| 147 |    { | 148 |    { | 
| Line 177... | Line 178... | ||
| 177 | new_move.source[1] = -1; | 178 | new_move.source[1] = -1; | 
| 178 | new_move.target[0] = -1; | 179 | new_move.target[0] = -1; | 
| 179 | new_move.target[1] = -1; | 180 | new_move.target[1] = -1; | 
| 180 | new_move.promotion_type = 0; | 181 | new_move.promotion_type = 0; | 
| 181 | pgn_comment[0] = 0; | 182 | pgn_comment[0] = 0; | 
| - | 183 | new_gamestate = STATE_PLAYING; // assume this is an unfinished game until told otherwise | |
| 182 | for (;;) | 184 | for (;;) | 
| 183 |    { | 185 |    { | 
| 184 |       // build the move number string | 186 |       // build the move number string | 
| 185 | sprintf_s (movenumber_string, sizeof (movenumber_string), "%d.", 1 + board->move_count / 2); | 187 | sprintf_s (movenumber_string, sizeof (movenumber_string), "%d.", 1 + board->move_count / 2); | 
| 186 | 188 | ||
| Line 297... | Line 299... | ||
| 297 | pgn_comment[0] = 0; // reset comment | 299 | pgn_comment[0] = 0; // reset comment | 
| 298 |          } | 300 |          } | 
| 299 | 301 | ||
| 300 |          // has the game been closed ? | 302 |          // has the game been closed ? | 
| 301 | if (strncmp (&pgnfile_data[char_index], "1/2-1/2", 7) == 0) | 303 | if (strncmp (&pgnfile_data[char_index], "1/2-1/2", 7) == 0) | 
| 302 | 
 | 304 | new_gamestate = STATE_DRAW_OTHER; // game closed on a draw (FIXME: identify variants) | 
| 303 | else if (strncmp (&pgnfile_data[char_index], "1-0", 7) == 0) | 305 | else if (strncmp (&pgnfile_data[char_index], "1-0", 7) == 0) | 
| 304 |          { | 306 |          { | 
| 305 |             // see if it's a checkmate | 307 |             // see if it's a checkmate | 
| 306 | if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate) | 308 | if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate) | 
| 307 | 
 | 309 | new_gamestate = STATE_WHITEWIN_CHECKMATE; // game was won by white on a checkmate (checkmate = check + stalemate) | 
| 308 |             else | 310 |             else | 
| 309 | 
 | 311 | new_gamestate = STATE_WHITEWIN_RESIGNORFORFEIT; // game was won by white for another reason | 
| 310 |          } | 312 |          } | 
| 311 | else if (strncmp (&pgnfile_data[char_index], "0-1", 7) == 0) | 313 | else if (strncmp (&pgnfile_data[char_index], "0-1", 7) == 0) | 
| 312 |          { | 314 |          { | 
| 313 |             // see if it's a checkmate | 315 |             // see if it's a checkmate | 
| 314 | if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate) | 316 | if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate) | 
| 315 | 
 | 317 | new_gamestate = STATE_BLACKWIN_CHECKMATE; // game was won by black on a checkmate (checkmate = check + stalemate) | 
| 316 |             else | 318 |             else | 
| 317 | 
 | 319 | new_gamestate = STATE_BLACKWIN_RESIGNORFORFEIT; // game was won by black for another reason | 
| 318 |          } | 320 |          } | 
| 319 | 321 | ||
| 320 | board->players[1 - board->moves[board->move_count - 1].color].should_wakeup = true; // wake the player whose turn it is | 322 | board->players[1 - board->moves[board->move_count - 1].color].should_wakeup = true; // wake the player whose turn it is | 
| 321 | break; // we've finished reading the game | 323 | break; // we've finished reading the game | 
| 322 |       } | 324 |       } | 
| Line 365... | Line 367... | ||
| 365 | PGNFile_GameList_Shutdown (); | 367 | PGNFile_GameList_Shutdown (); | 
| 366 | 368 | ||
| 367 |    // we no longer need the file data space, so free it | 369 |    // we no longer need the file data space, so free it | 
| 368 | SAFE_free ((void **) &pgnfile_data); | 370 | SAFE_free ((void **) &pgnfile_data); | 
| 369 | 371 | ||
| - | 372 | board->game_state = new_gamestate; // save the new game state | |
| 370 | return (true); // game loaded successfully, return TRUE | 373 | return (true); // game loaded successfully, return TRUE | 
| 371 | } | 374 | } | 
| 372 | 375 | ||
| 373 | 376 | ||
| 374 | bool PGNFile_Save (board_t *board, const wchar_t *pgnfile_pathname) | 377 | bool PGNFile_Save (board_t *board, const wchar_t *pgnfile_pathname) |