+static void
+output_sesse_bin_game(Game current_game,FILE *outputfile,
+ unsigned move_number,Boolean white_to_move)
+{
+ const char *result = NULL;
+ Move *move;
+
+ // Find the result. Skip games with no result.
+ for (move = current_game.moves; move != NULL; move = move->next) {
+ if (move->terminating_result) {
+ result = move->terminating_result;
+ }
+ }
+ if (result == NULL || strcmp(result, "*") == 0) {
+ return;
+ }
+
+ int result_int = -1;
+ if (strcmp(result, "1-0") == 0) {
+ result_int = 0;
+ } else if (strcmp(result, "1/2-1/2") == 0) {
+ result_int = 1;
+ } else if (strcmp(result, "0-1") == 0) {
+ result_int = 2;
+ } else {
+ fprintf(stderr, "Unknown result '%s'\n", result);
+ return;
+ }
+
+ // Find Black and White Elos. Skip games with no Elo.
+ const char *white_elo_tag = current_game.tags[WHITE_ELO_TAG];
+ const char *black_elo_tag = current_game.tags[BLACK_ELO_TAG];
+ if (white_elo_tag == NULL || black_elo_tag == NULL) {
+ return;
+ }
+
+ int white_elo = atoi(white_elo_tag);
+ int black_elo = atoi(black_elo_tag);
+
+ for (move = current_game.moves; move != NULL; move = move->next) {
+ unsigned int opening = 0; // TODO
+
+ // key
+ putc(move->bpfen_len + strlen((char *)move->move), outputfile);
+ fwrite(move->bpfen, move->bpfen_len, 1, outputfile);
+ fwrite(move->move, strlen((char *)move->move), 1, outputfile);
+
+ // value
+ putc(result_int, outputfile);
+ fwrite(&white_elo, sizeof(white_elo), 1, outputfile);
+ fwrite(&black_elo, sizeof(black_elo), 1, outputfile);
+ fwrite(&opening, sizeof(opening), 1, outputfile);
+ }
+}
+