/*
* pgntags.c -- Functions to manage PGN tags
*
- * Copyright 1995, 2009, 2010, 2011 Free Software Foundation, Inc.
+ * Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free
+ * Software Foundation, Inc.
*
* Enhancements Copyright 2005 Alessandro Scotti
*
/* Parse PGN tags; returns 0 for success or error number
*/
-int ParsePGNTag(tag, gameInfo)
- char *tag;
- GameInfo *gameInfo;
+int
+ParsePGNTag (char *tag, GameInfo *gameInfo)
{
char *name, *value, *p, *oldTags;
int len;
success = TRUE;
} else if (StrCaseCmp(name, "Variant") == 0) {
/* xboard-defined extension */
- gameInfo->variant = StringToVariant(value);
- success = TRUE;
+ success = StrSavePtr(value, &gameInfo->variantName) != NULL;
+ if(*value && strcmp(value, engineVariant)) // keep current engine-defined variant if it matches
+ gameInfo->variant = StringToVariant(value);
+ } else if (StrCaseCmp(name, "VariantMen") == 0) {
+ success = LoadPieceDesc(value);
} else if (StrCaseCmp(name, PGN_OUT_OF_BOOK) == 0) {
/* [AS] Out of book annotation */
success = StrSavePtr(value, &gameInfo->outOfBook) != NULL;
}
-/* Print game info
- */
-void PrintPGNTags(fp, gameInfo)
- FILE *fp;
- GameInfo *gameInfo;
+/* Print game info */
+void
+PrintPGNTags (FILE *fp, GameInfo *gameInfo)
{
+ char *p;
fprintf(fp, "[Event \"%s\"]\n", gameInfo->event ? gameInfo->event : "?");
fprintf(fp, "[Site \"%s\"]\n", gameInfo->site ? gameInfo->site : "?");
fprintf(fp, "[Date \"%s\"]\n", gameInfo->date ? gameInfo->date : "?");
fprintf(fp, "[TimeControl \"%s\"]\n", gameInfo->timeControl);
if (gameInfo->variant != VariantNormal)
fprintf(fp, "[Variant \"%s\"]\n", VariantName(gameInfo->variant));
+ if (*(p = CollectPieceDescriptors()))
+ fprintf(fp, "[VariantMen \"%s\"]\n", p);
if (gameInfo->extraTags)
fputs(gameInfo->extraTags, fp);
}
/* Return a non-static buffer with a games info.
*/
-char *PGNTags(gameInfo)
- GameInfo *gameInfo;
+char *
+PGNTags (GameInfo *gameInfo)
{
size_t len;
char *buf;
/* Returns pointer to a static string with a result.
*/
-char *PGNResult(result)
- ChessMove result;
+char *
+PGNResult (ChessMove result)
{
switch (result) {
case GameUnfinished:
/* Returns 0 for success, nonzero for error */
int
-ReplaceTags(tags, gameInfo)
- char *tags;
- GameInfo *gameInfo;
+ReplaceTags (char *tags, GameInfo *gameInfo)
{
ChessMove moveType;
int err;