From 23bf530a0df2de1a5075a33a3eb790a286c304bd Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 12 Dec 2014 00:01:18 +0100 Subject: [PATCH] Output timestamps in the binary format. --- output.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/output.c b/output.c index 8a95f2a..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" @@ -1205,6 +1206,28 @@ 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 = move->eco ? move->eco->cumulative_hash_value : 0; // Truncate to 32 bits. @@ -1218,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); } } -- 2.39.2