Add -first/secondPgnName option
authorH.G. Muller <h.g.muller@hccnet.nl>
Fri, 6 May 2011 16:51:20 +0000 (18:51 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 7 May 2011 14:36:20 +0000 (16:36 +0200)
This option replaces the tidy name of the engine in the PGN player tags
of engine-engine games. In WinBoard engines can be installed with this
option through a checkbox in the Load Engine dialog.

args.h
backend.c
common.h
winboard/wsettings.c
xoptions.c

diff --git a/args.h b/args.h
index c0e569b..693877e 100644 (file)
--- a/args.h
+++ b/args.h
@@ -609,6 +609,10 @@ ArgDescriptor argDescriptors[] = {
   { "icstype", ArgInt, (void *) &ics_type, FALSE, INVALID },
   { "forceIllegalMoves", ArgTrue, (void *) &appData.forceIllegal, FALSE, INVALID },
   { "showTargetSquares", ArgBoolean, (void *) &appData.markers, TRUE, FALSE },
+  { "firstPgnName", ArgString, (void *) &appData.pgnName[0], FALSE, (ArgIniType) "" },
+  { "fn", ArgString, (void *) &appData.pgnName[0], FALSE, INVALID },
+  { "secondPgnName", ArgString, (void *) &appData.pgnName[1], FALSE, (ArgIniType) "" },
+  { "sn", ArgString, (void *) &appData.pgnName[1], FALSE, INVALID },
 
 #if ZIPPY
   { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
index 20f9413..a0bffa5 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -862,7 +862,7 @@ ReplaceEngine(ChessProgramState *cps, int n)
 }
 
 extern char *engineName, *engineDir, *engineChoice, *engineLine, *nickName, *params;
-extern Boolean isUCI, hasBook, storeVariant, v1, addToList;
+extern Boolean isUCI, hasBook, storeVariant, v1, addToList, useNick;
 
 void
 Load(ChessProgramState *cps, int i)
@@ -871,7 +871,7 @@ Load(ChessProgramState *cps, int i)
     if(engineLine[0]) { // an engine was selected from the combo box
        snprintf(buf, MSG_SIZ, "-fcp %s", engineLine);
        SwapEngines(i); // kludge to parse -f* / -first* like it is -s* / -second*
-       ParseArgsFromString("-firstIsUCI false -firstHasOwnBookUCI true -firstTimeOdds 1");
+       ParseArgsFromString("-firstIsUCI false -firstHasOwnBookUCI true -firstTimeOdds 1 -fn \"\"");
        ParseArgsFromString(buf);
        SwapEngines(i);
        ReplaceEngine(cps, i);
@@ -895,11 +895,16 @@ Load(ChessProgramState *cps, int i)
     appData.isUCI[i] = isUCI;
     appData.protocolVersion[i] = v1 ? 1 : PROTOVER;
     appData.hasOwnBookUCI[i] = hasBook;
+    if(!nickName[0]) useNick = FALSE;
+    if(useNick) ASSIGN(appData.pgnName[i], nickName);
     if(addToList) {
        int len;
        q = firstChessProgramNames;
        if(nickName[0]) snprintf(buf, MSG_SIZ, "\"%s\" -fcp ", nickName); else buf[0] = NULLCHAR;
-       snprintf(buf+strlen(buf), MSG_SIZ-strlen(buf), "\"%s\" -fd \"%s\"%s%s%s%s%s\n", p, appData.directory[i], 
+       snprintf(buf+strlen(buf), MSG_SIZ-strlen(buf), "\"%s\" -fd \"%s\"%s%s%s%s%s%s%s%s\n", p, appData.directory[i], 
+                       useNick ? " -fn \"" : "",
+                       useNick ? nickName : "",
+                       useNick ? "\"" : "",
                        v1 ? " -firstProtocolVersion 1" : "",
                        hasBook ? "" : " -fNoOwnBookUCI",
                        isUCI ? " -fUCI" : "",
@@ -9544,6 +9549,7 @@ void SwapEngines(int n)
     SWAP(scoreIsAbsolute, h)
     SWAP(timeOdds, h)
     SWAP(logo, p)
+    SWAP(pgnName, p)
 }
 
 void
@@ -9552,7 +9558,7 @@ SetPlayer(int player)
     int i;
     char buf[MSG_SIZ], *engineName, *p = appData.participants;
     static char resetOptions[] = "-reuse -firstIsUCI false -firstHasOwnBookUCI true -firstTimeOdds 1 -firstOptions \"\" "
-                                "-firstNeedsNoncompliantFEN false -firstNPS -1";
+                                "-firstNeedsNoncompliantFEN false -firstNPS -1 -fn \"\"";
     for(i=0; i<player; i++) p = strchr(p, '\n') + 1;
     engineName = strdup(p); if(p = strchr(engineName, '\n')) *p = NULLCHAR;
     for(i=1; command[i]; i++) if(!strcmp(mnemonic[i], engineName)) break;
@@ -13950,11 +13956,11 @@ SetGameInfo()
            gameInfo.round = StrSave("-");
        }
        if (first.twoMachinesColor[0] == 'w') {
-           gameInfo.white = StrSave(first.tidy);
-           gameInfo.black = StrSave(second.tidy);
+           gameInfo.white = StrSave(appData.pgnName[0][0] ? appData.pgnName[0] : first.tidy);
+           gameInfo.black = StrSave(appData.pgnName[1][0] ? appData.pgnName[1] : second.tidy);
        } else {
-           gameInfo.white = StrSave(second.tidy);
-           gameInfo.black = StrSave(first.tidy);
+           gameInfo.white = StrSave(appData.pgnName[1][0] ? appData.pgnName[1] : second.tidy);
+           gameInfo.black = StrSave(appData.pgnName[0][0] ? appData.pgnName[0] : first.tidy);
        }
        gameInfo.timeControl = TimeControlTagValue();
        break;
index 791e5e5..b84760e 100644 (file)
--- a/common.h
+++ b/common.h
@@ -396,6 +396,7 @@ typedef struct {
     char *computerString[ENGINES];
     char *chessProgram[ENGINES];
     char *directory[ENGINES];
+    char *pgnName[ENGINES];
     Boolean firstPlaysBlack;
     Boolean noChessProgram;
     char *host[ENGINES];
index 82fcd6a..de12332 100644 (file)
@@ -34,7 +34,7 @@ int breaks[MAX_OPTIONS];
 int checks, combos, buttons, layout, groups;\r
 char title[MSG_SIZ];\r
 char *engineName, *engineDir, *engineChoice, *engineLine, *nickName, *params;\r
-Boolean isUCI, hasBook, storeVariant, v1, addToList;\r
+Boolean isUCI, hasBook, storeVariant, v1, addToList, useNick;\r
 extern Option installOptions[], matchOptions[];\r
 char *engineNr[] = { N_("First"), N_("Second"), NULL };\r
 char *engineList[1000] = {" "}, *engineMnemonic[1000] = {""};\r
@@ -619,6 +619,7 @@ Option installOptions[] = {
   {   0,  0,    0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") },\r
   {   0,  0,    0, NULL, NULL, NULL, NULL, Label, N_("or specify one below:") },\r
   {   0,  0,    0, NULL, (void*) &nickName, NULL, NULL, TextBox, N_("Nickname (optional):") },\r
+  {   0,  0,    0, NULL, (void*) &useNick, NULL, NULL, CheckBox, N_("Use nickname in PGN tag") },\r
   {   0,  0,    3, NULL, (void*) &engineName, NULL, NULL, FileName, N_("Engine Executable:") },\r
   {   0,  0,    0, NULL, (void*) &params, NULL, NULL, TextBox, N_("Engine command-line Parameters:") },\r
   {   0,  0,    0, NULL, (void*) &engineDir, NULL, NULL, PathName, N_("Engine Directory:") },\r
@@ -654,7 +655,7 @@ void LoadEnginePopUp(HWND hwnd)
 {\r
     int n=0;\r
 \r
-    isUCI = addToList = storeVariant = v1 = FALSE; hasBook = TRUE; // defaults\r
+    isUCI = addToList = storeVariant = v1 = useNick = FALSE; hasBook = TRUE; // defaults\r
     if(engineDir)    free(engineDir);    engineDir = strdup("");\r
     if(params)       free(params);       params = strdup("");\r
     if(nickName)     free(nickName);     nickName = strdup("");\r
index 52fa1a0..78bd9d7 100644 (file)
@@ -778,7 +778,7 @@ void GenericPopDown(w, event, prms, nprms)
 }
 
 char *engineName, *engineDir, *engineChoice, *engineLine, *nickName, *params;
-Boolean isUCI, hasBook, storeVariant, v1, addToList;
+Boolean isUCI, hasBook, storeVariant, v1, addToList, useNick;
 extern Option installOptions[], matchOptions[];
 char *engineNr[] = { N_("First Engine"), N_("Second Engine"), NULL };
 char *engineList[100] = {" "}, *engineMnemonic[100] = {""};
@@ -2042,6 +2042,7 @@ Option installOptions[] = {
 {   0,  0,    0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") },
 {   0,  0,    0, NULL, NULL, NULL, NULL, Label, N_("or specify one below:") },
 {   0,  0,    0, NULL, (void*) &nickName, NULL, NULL, TextBox, N_("Nickname (optional):") },
+{   0,  0,    0, NULL, (void*) &useNick, NULL, NULL, CheckBox, N_("Use nickname in PGN player tags of engine-engine games") },
 {   0,  0,    0, NULL, (void*) &engineDir, NULL, NULL, PathName, N_("Engine Directory:") },
 {   0,  0,    0, NULL, (void*) &engineName, NULL, NULL, FileName, N_("Engine Command:") },
 {   0,  0,    0, NULL, NULL, NULL, NULL, Label, N_("(Directory will be derived from engine path when empty)") },
@@ -2060,7 +2061,7 @@ void LoadEngineProc(w, event, prms, nprms)
      String *prms;
      Cardinal *nprms;
 {
-   isUCI = addToList = storeVariant = v1 = False; hasBook = True; // defaults
+   isUCI = addToList = storeVariant = v1 = useNick = False; hasBook = True; // defaults
    if(engineChoice) free(engineChoice); engineChoice = strdup(engineNr[0]);
    if(engineLine)   free(engineLine);   engineLine = strdup("");
    if(engineDir)    free(engineDir);    engineDir = strdup("");