X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=output.c;h=bc19a4a84894e7e0801c363d5ada0f6c734ca7f2;hb=23bf530a0df2de1a5075a33a3eb790a286c304bd;hp=6e47275ca8842e32106a35d3b0117d95230c6975;hpb=99b227ec8c7dd8bb4116b643cc13ce39189195a0;p=pgn-extract diff --git a/output.c b/output.c index 6e47275..bc19a4a 100644 --- a/output.c +++ b/output.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "bool.h" #include "defs.h" #include "typedef.h" @@ -34,6 +35,7 @@ #include "apply.h" #include "output.h" #include "mymalloc.h" +#include "eco.h" /* Functions for outputting games in the required format. */ @@ -1204,8 +1206,30 @@ output_sesse_bin_game(Game current_game,FILE *outputfile, int white_elo = atoi(white_elo_tag); int black_elo = atoi(black_elo_tag); + // Parse date and time, if it exists. Set invalid dates to year 3000. + const char *date_tag = current_game.tags[DATE_TAG]; + const char *time_tag = current_game.tags[TIME_TAG]; + struct tm tm = {0}; + time_t timestamp; + int year, month, day; + if (date_tag && sscanf(date_tag, "%u.%u.%u", &year, &month, &day) == 3) { + int hour, minute, second; + tm.tm_year = year - 1900; + tm.tm_mon = month - 1; + tm.tm_mday = day; + + if (time_tag && sscanf(time_tag, "%u:%u:%u", &hour, &minute, &second) == 3) { + tm.tm_hour = hour; + tm.tm_min = minute; + tm.tm_sec = second; + } + timestamp = mktime(&tm); + } else { + timestamp = 32503680000; + } + for (move = current_game.moves; move != NULL; move = move->next) { - unsigned int opening = 0; // TODO + unsigned int opening = move->eco ? move->eco->cumulative_hash_value : 0; // Truncate to 32 bits. // key putc(move->bpfen_len + strlen((char *)move->move), outputfile); @@ -1217,6 +1241,7 @@ output_sesse_bin_game(Game current_game,FILE *outputfile, fwrite(&white_elo, sizeof(white_elo), 1, outputfile); fwrite(&black_elo, sizeof(black_elo), 1, outputfile); fwrite(&opening, sizeof(opening), 1, outputfile); + fwrite(×tamp, sizeof(timestamp), 1, outputfile); } }