X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gamelist.c;h=da123a47554b3f880eb7151b7ca9c1eb561d678e;hb=d9a803f2e64634ff75f89b7e3b0a65ac085f0e36;hp=2be1fe8b6444793f0b4bf3417d306b889454f69d;hpb=2380bd9a886c088ba6040d99932c20cdf080fbbb;p=xboard.git diff --git a/gamelist.c b/gamelist.c old mode 100644 new mode 100755 index 2be1fe8..da123a4 --- a/gamelist.c +++ b/gamelist.c @@ -1,25 +1,27 @@ /* * gamelist.c -- Functions to manage a gamelist - * XBoard $Id: gamelist.c,v 2.1 2003/10/27 19:21:00 mann Exp $ * - * Copyright 1995 Free Software Foundation, Inc. + * Copyright 1995,2009 Free Software Foundation, Inc. + * + * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ - * This program is free software; you can redistribute it and/or modify + * + * GNU XBoard is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * GNU XBoard is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - * ------------------------------------------------------------------------ - */ + * along with this program. If not, see http://www.gnu.org/licenses/. + * + *------------------------------------------------------------------------ + ** See the file ChangeLog for a revision history. */ #include "config.h" @@ -109,6 +111,7 @@ void GameListInitGameInfo(gameInfo) gameInfo->blackRating = -1; /* unknown */ gameInfo->variant = VariantNormal; gameInfo->outOfBook = NULL; + gameInfo->resultDetails = NULL; } @@ -153,6 +156,7 @@ int GameListBuild(f) ListGame *currentListGame = NULL; int error; int offset; + char lastComment[MSG_SIZ]; GameListFree(&gameList); yynewfile(f); @@ -238,6 +242,19 @@ int GameListBuild(f) lastStart = MoveNumberOne; } break; + case WhiteWins: // [HGM] rescom: save last comment as result details + case BlackWins: + case GameIsDrawn: + case GameUnfinished: + if (currentListGame->gameInfo.resultDetails != NULL) { + free(currentListGame->gameInfo.resultDetails); + } + if(yy_text[0] == '{') { char *p; + strcpy(lastComment, yy_text+1); + if(p = strchr(lastComment, '}')) *p = 0; + currentListGame->gameInfo.resultDetails = StrSave(lastComment); + } + break; default: break; } @@ -300,7 +317,6 @@ void ClearGameInfo(gameInfo) if (gameInfo->outOfBook != NULL) { free(gameInfo->outOfBook); } - GameListInitGameInfo(gameInfo); } @@ -323,14 +339,14 @@ GameListLineOld(number, gameInfo) return ret; } -#define MAX_FIELD_LEN 64 /* To avoid overflowing the buffer */ +#define MAX_FIELD_LEN 80 /* To avoid overflowing the buffer */ char * GameListLine( int number, GameInfo * gameInfo ) { char buffer[1024]; char * buf = buffer; char * glt = appData.gameListTags; - + buf += sprintf( buffer, "%d.", number ); while( *glt != '\0' ) { @@ -379,6 +395,9 @@ char * GameListLine( int number, GameInfo * gameInfo ) case GLT_OUT_OF_BOOK: strncpy( buf, gameInfo->outOfBook ? gameInfo->outOfBook : "?", MAX_FIELD_LEN ); break; + case GLT_RESULT_COMMENT: + strncpy( buf, gameInfo->resultDetails ? gameInfo->resultDetails : "res?", MAX_FIELD_LEN ); + break; default: break; } @@ -408,12 +427,14 @@ char * GameListLineFull( int number, GameInfo * gameInfo ) char * round = gameInfo->round ? gameInfo->round : "?"; char * date = gameInfo->date ? gameInfo->date : "?"; char * oob = gameInfo->outOfBook ? gameInfo->outOfBook : ""; - - int len = 64 + strlen(event) + strlen(site) + strlen(white) + strlen(black) + strlen(date) + strlen(oob); + char * reason = gameInfo->resultDetails ? gameInfo->resultDetails : ""; + + int len = 64 + strlen(event) + strlen(site) + strlen(white) + strlen(black) + strlen(date) + strlen(oob) + strlen(reason); char *ret = (char *) malloc(len); - sprintf(ret, "%d, \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\"", number, event, site, round, white, black, PGNResult(gameInfo->result), date, oob ); + sprintf(ret, "%d, \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\"", + number, event, site, round, white, black, PGNResult(gameInfo->result), reason, date, oob ); return ret; }