static void free_comment_list(CommentList *comment_list);
static void DealWithEcoLine(Move *move_list);
static void DealWithGame(Move *move_list);
-static Boolean finished_processing(void);
+static Boolean finished_processing(SourceFileType file_type);
/* Initialise the game header structure to contain
* space for the default number of tags.
* Conditions for finishing processing, other than all the input
* having been processed.
*/
-static Boolean finished_processing(void)
+static Boolean finished_processing(SourceFileType file_type)
{
- return (GlobalState.matching_game_number > 0 &&
- GlobalState.num_games_matched == GlobalState.matching_game_number);
+ return ((file_type != ECOFILE && at_end_of_input()) ||
+ (GlobalState.matching_game_number > 0 &&
+ GlobalState.num_games_matched == GlobalState.matching_game_number));
}
static void
ParseOptGameList(SourceFileType file_type)
{ Move *move_list = NULL;
- while(ParseGame(&move_list) && !finished_processing()){
+ while(ParseGame(&move_list) && !finished_processing(file_type)){
if(file_type == NORMALFILE){
DealWithGame(move_list);
}
current_game.moves_checked = FALSE;
current_game.moves_ok = FALSE;
current_game.error_ply = 0;
+ current_game.file_number = GlobalState.current_file_number;
current_game.start_position = game_start_position;
/* Determine whether or not this game is wanted, on the
int
yyparse(SourceFileType file_type)
{
+ if(file_type != ECOFILE) {
+ if(!seek_to_begin()) {
+ return 1;
+ }
+ }
setup_for_new_game();
current_symbol = skip_to_next_game(NO_TOKEN);
ParseOptGameList(file_type);
/* Ok -- EOF. */
return 0;
}
- else if(finished_processing()) {
+ else if(finished_processing(file_type)) {
/* Ok -- done all we need to. */
return 0;
}