X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=pgntags.c;h=52cedba9ccf5368f0c9709b0944fbcdb0662ec18;hb=08a38fdd71f1fae28fb213d4c5f6fb0834967412;hp=d5321723e5fbf86dbc1fa32266270f7294a141d1;hpb=91d8e5853ca580769cc130aa6ea004869118d171;p=xboard.git diff --git a/pgntags.c b/pgntags.c index d532172..52cedba 100644 --- a/pgntags.c +++ b/pgntags.c @@ -1,8 +1,9 @@ /* * pgntags.c -- Functions to manage PGN tags - * XBoard $Id: pgntags.c,v 2.1 2003/10/27 19:21:00 mann Exp $ * - * Copyright 1995,2009 Free Software Foundation, Inc. + * Copyright 1995, 2009, 2010, 2011 Free Software Foundation, Inc. + * + * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * @@ -106,6 +107,10 @@ int ParsePGNTag(tag, gameInfo) else gameInfo->result = GameUnfinished; success = TRUE; + } else if (StrCaseCmp(name, "TimeControl") == 0) { +// int tc, mps, inc = -1; +// if(sscanf(value, "%d/%d", &mps, &tc) == 2 || ) + success = StrSavePtr(value, &gameInfo->timeControl) != NULL; } else if (StrCaseCmp(name, "FEN") == 0) { success = StrSavePtr(value, &gameInfo->fen) != NULL; } else if (StrCaseCmp(name, "SetUp") == 0) { @@ -150,41 +155,41 @@ static char *PGNTagsStatic(gameInfo) buf[0] = NULLCHAR; - sprintf(buf1, "[Event \"%s\"]\n", + snprintf(buf1, MSG_SIZ, "[Event \"%s\"]\n", gameInfo->event ? gameInfo->event : "?"); strcat(buf, buf1); - sprintf(buf1, "[Site \"%s\"]\n", + snprintf(buf1, MSG_SIZ, "[Site \"%s\"]\n", gameInfo->site ? gameInfo->site : "?"); strcat(buf, buf1); - sprintf(buf1, "[Date \"%s\"]\n", + snprintf(buf1, MSG_SIZ, "[Date \"%s\"]\n", gameInfo->date ? gameInfo->date : "?"); strcat(buf, buf1); - sprintf(buf1, "[Round \"%s\"]\n", + snprintf(buf1, MSG_SIZ, "[Round \"%s\"]\n", gameInfo->round ? gameInfo->round : "-"); strcat(buf, buf1); - sprintf(buf1, "[White \"%s\"]\n", + snprintf(buf1, MSG_SIZ, "[White \"%s\"]\n", gameInfo->white ? gameInfo->white : "?"); strcat(buf, buf1); - sprintf(buf1, "[Black \"%s\"]\n", + snprintf(buf1, MSG_SIZ, "[Black \"%s\"]\n", gameInfo->black ? gameInfo->black : "?"); strcat(buf, buf1); - sprintf(buf1, "[Result \"%s\"]\n", PGNResult(gameInfo->result)); + snprintf(buf1, MSG_SIZ, "[Result \"%s\"]\n", PGNResult(gameInfo->result)); strcat(buf, buf1); - + if (gameInfo->whiteRating >= 0 ) { - sprintf(buf1, "[WhiteElo \"%d\"]\n", gameInfo->whiteRating ); + snprintf(buf1, MSG_SIZ, "[WhiteElo \"%d\"]\n", gameInfo->whiteRating ); strcat(buf, buf1); } if ( gameInfo->blackRating >= 0 ) { - sprintf(buf1, "[BlackElo \"%d\"]\n", gameInfo->blackRating ); + snprintf(buf1, MSG_SIZ, "[BlackElo \"%d\"]\n", gameInfo->blackRating ); strcat(buf, buf1); - } + } if (gameInfo->timeControl != NULL) { - sprintf(buf1, "[TimeControl \"%s\"]\n", gameInfo->timeControl); + snprintf(buf1, MSG_SIZ, "[TimeControl \"%s\"]\n", gameInfo->timeControl); strcat(buf, buf1); } if (gameInfo->variant != VariantNormal) { - sprintf(buf1, "[Variant \"%s\"]\n", VariantName(gameInfo->variant)); + snprintf(buf1, MSG_SIZ, "[Variant \"%s\"]\n", VariantName(gameInfo->variant)); strcat(buf, buf1); } if (gameInfo->extraTags != NULL) { @@ -194,7 +199,7 @@ static char *PGNTagsStatic(gameInfo) } - + /* Print game info */ void PrintPGNTags(fp, gameInfo) @@ -230,7 +235,7 @@ char *PGNResult(result) case GameIsDrawn: return "1/2-1/2"; } -} +} /* Returns 0 for success, nonzero for error */ int @@ -245,13 +250,13 @@ ReplaceTags(tags, gameInfo) yynewstr(tags); for (;;) { yyboardindex = 0; - moveType = (ChessMove) yylex(); + moveType = (ChessMove) Myylex(); if (moveType == (ChessMove) 0) { break; } else if (moveType == PGNTag) { err = ParsePGNTag(yy_text, gameInfo); if (err != 0) return err; - } + } } /* just one problem...if there is a result in the new tags, * DisplayMove() won't ever show it because ClearGameInfo() set