X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=blobdiff_plain;f=gamelist.c;h=34e899a8a205fe45e5803607a9abccc8b3aeb26d;hp=876305529ffdde2f13148f553ab7a2e73dc7235b;hb=HEAD;hpb=e70077aab0199817f37aef9ed0bdba1bbca93b45 diff --git a/gamelist.c b/gamelist.c index 8763055..34e899a 100644 --- a/gamelist.c +++ b/gamelist.c @@ -1,7 +1,8 @@ /* * gamelist.c -- Functions to manage a gamelist * - * Copyright 1995, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. + * Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free + * Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * @@ -70,7 +71,7 @@ static int GameListNewGame P((ListGame **)); /* [AS] Wildcard pattern matching */ Boolean -HasPattern( const char * text, const char * pattern ) +HasPattern (const char * text, const char * pattern) { while( *pattern != '\0' ) { if( *pattern == '*' ) { @@ -102,7 +103,7 @@ HasPattern( const char * text, const char * pattern ) } Boolean -SearchPattern( const char * text, const char * pattern ) +SearchPattern (const char * text, const char * pattern) { Boolean result = TRUE; @@ -128,8 +129,8 @@ SearchPattern( const char * text, const char * pattern ) /* Delete a ListGame; implies removint it from a list. */ -static void GameListDeleteGame(listGame) - ListGame *listGame; +static void +GameListDeleteGame (ListGame *listGame) { if (listGame) { if (listGame->gameInfo.event) free(listGame->gameInfo.event); @@ -150,10 +151,10 @@ static void GameListDeleteGame(listGame) /* Free the previous list of games. */ -static void GameListFree(gameList) - List *gameList; +static void +GameListFree (List *gameList) { - while (!ListEmpty(gameList)) + while (!ListEmpty(gameList)) { GameListDeleteGame((ListGame *) gameList->head); } @@ -163,8 +164,8 @@ static void GameListFree(gameList) /* Initialize a new GameInfo structure. */ -void GameListInitGameInfo(gameInfo) - GameInfo *gameInfo; +void +GameListInitGameInfo (GameInfo *gameInfo) { gameInfo->event = NULL; gameInfo->site = NULL; @@ -180,6 +181,7 @@ void GameListInitGameInfo(gameInfo) gameInfo->whiteRating = -1; /* unknown */ gameInfo->blackRating = -1; /* unknown */ gameInfo->variant = VariantNormal; + gameInfo->variantName = NULL; gameInfo->outOfBook = NULL; gameInfo->resultDetails = NULL; } @@ -189,8 +191,8 @@ void GameListInitGameInfo(gameInfo) * * Note, that the ListGame is *not* added to any list */ -static ListGame *GameListCreate() - +static ListGame * +GameListCreate () { ListGame *listGame; @@ -203,8 +205,8 @@ static ListGame *GameListCreate() /* Creates a new game for the gamelist. */ -static int GameListNewGame(listGamePtr) - ListGame **listGamePtr; +static int +GameListNewGame (ListGame **listGamePtr) { if (!(*listGamePtr = (ListGame *) GameListCreate())) { GameListFree(&gameList); @@ -218,8 +220,8 @@ static int GameListNewGame(listGamePtr) /* Build the list of games in the open file f. * Returns 0 for success or error number. */ -int GameListBuild(f) - FILE *f; +int +GameListBuild (FILE *f) { ChessMove cm, lastStart; int gameNumber; @@ -305,7 +307,7 @@ int GameListBuild(f) } while (cm == PGNTag || cm == Comment); if(1) { int btm=0; - if(currentListGame->gameInfo.fen) ParseFEN(boards[scratch], &btm, currentListGame->gameInfo.fen); + if(currentListGame->gameInfo.fen) ParseFEN(boards[scratch], &btm, currentListGame->gameInfo.fen, FALSE); else CopyBoard(boards[scratch], initialPosition); plyNr = (btm != 0); currentListGame->moves = PackGame(boards[scratch]); @@ -358,6 +360,8 @@ int GameListBuild(f) case GameIsDrawn: case GameUnfinished: if(!currentListGame) break; + if(currentListGame->gameInfo.result == GameUnfinished) + currentListGame->gameInfo.result = cm; // correct result tag with actual result if (currentListGame->gameInfo.resultDetails != NULL) { free(currentListGame->gameInfo.resultDetails); } @@ -373,7 +377,7 @@ int GameListBuild(f) } if(gameNumber % 1000 == 0) { snprintf(buf, MSG_SIZ, _("Reading game file (%d)"), gameNumber); - DisplayTitle(buf); + DisplayTitle(buf); DoEvents(); } } while (cm != (ChessMove) 0); @@ -392,7 +396,7 @@ int GameListBuild(f) } } } -GetTimeMark(&t2);printf("GameListBuild %ld msec\n", SubtractTimeMarks(&t2,&t)); + if(appData.debugMode) { GetTimeMark(&t2);printf("GameListBuild %ld msec\n", SubtractTimeMarks(&t2,&t)); } quickFlag = 0; PackGame(boards[scratch]); // for appending end-of-game marker. DisplayTitle("WinBoard"); @@ -404,8 +408,8 @@ GetTimeMark(&t2);printf("GameListBuild %ld msec\n", SubtractTimeMarks(&t2,&t)); /* Clear an existing GameInfo structure. */ -void ClearGameInfo(gameInfo) - GameInfo *gameInfo; +void +ClearGameInfo (GameInfo *gameInfo) { if (gameInfo->event != NULL) { free(gameInfo->event); @@ -437,6 +441,9 @@ void ClearGameInfo(gameInfo) if (gameInfo->extraTags != NULL) { free(gameInfo->extraTags); } + if (gameInfo->variantName != NULL) { + free(gameInfo->variantName); + } if (gameInfo->outOfBook != NULL) { free(gameInfo->outOfBook); } @@ -445,9 +452,7 @@ void ClearGameInfo(gameInfo) /* [AS] Replaced by "dynamic" tag selection below */ char * -GameListLineOld(number, gameInfo) - int number; - GameInfo *gameInfo; +GameListLineOld (int number, GameInfo *gameInfo) { char *event = (gameInfo->event && strcmp(gameInfo->event, "?") != 0) ? gameInfo->event : gameInfo->site ? gameInfo->site : "?"; @@ -464,7 +469,8 @@ GameListLineOld(number, gameInfo) #define MAX_FIELD_LEN 80 /* To avoid overflowing the buffer */ -char * GameListLine( int number, GameInfo * gameInfo ) +char * +GameListLine (int number, GameInfo * gameInfo) { char buffer[2*MSG_SIZ]; char * buf = buffer; @@ -514,6 +520,8 @@ char * GameListLine( int number, GameInfo * gameInfo ) strncpy( buf, gameInfo->timeControl ? gameInfo->timeControl : "?", MAX_FIELD_LEN ); break; case GLT_VARIANT: + strncpy( buf, gameInfo->variantName ? gameInfo->variantName : VariantName(gameInfo->variant), MAX_FIELD_LEN ); +// strncpy( buf, VariantName(gameInfo->variant), MAX_FIELD_LEN ); break; case GLT_OUT_OF_BOOK: strncpy( buf, gameInfo->outOfBook ? gameInfo->outOfBook : "?", MAX_FIELD_LEN ); @@ -541,7 +549,8 @@ char * GameListLine( int number, GameInfo * gameInfo ) return strdup( buffer ); } -char * GameListLineFull( int number, GameInfo * gameInfo ) +char * +GameListLineFull (int number, GameInfo * gameInfo) { char * event = gameInfo->event ? gameInfo->event : "?"; char * site = gameInfo->site ? gameInfo->site : "?"; @@ -589,7 +598,8 @@ static GLT_Item GLT_ItemInfo[] = { char lpUserGLT[LPUSERGLT_SIZE]; // back-end: convert the tag id-char to a full tag name -char * GLT_FindItem( char id ) +char * +GLT_FindItem (char id) { char * result = 0; @@ -609,7 +619,7 @@ char * GLT_FindItem( char id ) // back-end: build the list of tag names void -GLT_TagsToList( char * tags ) +GLT_TagsToList (char *tags) { char * pc = tags; @@ -636,7 +646,7 @@ GLT_TagsToList( char * tags ) // back-end: retrieve item from dialog and translate to id-char char -GLT_ListItemToTag( int index ) +GLT_ListItemToTag (int index) { char result = '\0'; char name[MSG_SIZ]; @@ -659,7 +669,7 @@ GLT_ListItemToTag( int index ) // back-end: add items id-chars one-by-one to temp tags string void -GLT_ParseList() +GLT_ParseList () { char * pc = lpUserGLT; int idx = 0; @@ -671,4 +681,3 @@ GLT_ParseList() idx++; } while( id != '\0' ); } -