Add secondry adapter command for UCCI or USI
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 14 May 2011 15:03:44 +0000 (17:03 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 14 May 2011 15:33:42 +0000 (17:33 +0200)
The option -uxiAdapter can define a second adapterCommand, which will be
invoked on encountering the options -fUCCI, -sUCCI and -fUSI, sUCI.

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

diff --git a/args.h b/args.h
index 2a3fd18..bc82aa7 100644 (file)
--- a/args.h
+++ b/args.h
@@ -60,7 +60,7 @@
 typedef enum {
   ArgString, ArgInt, ArgFloat, ArgBoolean, ArgTrue, ArgFalse, ArgNone,
   ArgColor, ArgAttribs, ArgFilename, ArgBoardSize, ArgFont, ArgCommSettings,
-  ArgSettingsFilename,
+  ArgSettingsFilename, ArgTwo,
   ArgX, ArgY, ArgZ // [HGM] placement: for window-placement options stored relative to main window
 } ArgType;
 
@@ -537,6 +537,10 @@ ArgDescriptor argDescriptors[] = {
   { "firstUCI", ArgTrue, (void *) &appData.firstIsUCI, FALSE, INVALID },
   { "secondIsUCI", ArgBoolean, (void *) &appData.secondIsUCI, FALSE, (ArgIniType) FALSE },
   { "sUCI", ArgTrue, (void *) &appData.secondIsUCI, FALSE, INVALID },
+  { "fUCCI", ArgTwo, (void *) &appData.firstIsUCI, FALSE, INVALID },
+  { "sUCCI", ArgTwo, (void *) &appData.secondIsUCI, FALSE, INVALID },
+  { "fUSI", ArgTwo, (void *) &appData.firstIsUCI, FALSE, INVALID },
+  { "sUSI", ArgTwo, (void *) &appData.secondIsUCI, FALSE, INVALID },
   { "secondUCI", ArgTrue, (void *) &appData.secondIsUCI, FALSE, INVALID },
   { "firstHasOwnBookUCI", ArgBoolean, (void *) &appData.firstHasOwnBookUCI, FALSE, (ArgIniType) TRUE },
   { "fNoOwnBookUCI", ArgFalse, (void *) &appData.firstHasOwnBookUCI, FALSE, INVALID },
@@ -545,6 +549,7 @@ ArgDescriptor argDescriptors[] = {
   { "sNoOwnBookUCI", ArgFalse, (void *) &appData.secondHasOwnBookUCI, FALSE, INVALID },
   { "secondXBook", ArgFalse, (void *) &appData.secondHasOwnBookUCI, FALSE, INVALID },
   { "adapterCommand", ArgFilename, (void *) &appData.adapterCommand, TRUE, (ArgIniType) "polyglot -noini -ec \"%fcp\" -ed \"%fd\"" },
+  { "uxiAdapter", ArgFilename, (void *) &appData.ucciAdapter, TRUE, (ArgIniType) "" },
   { "polyglotDir", ArgFilename, (void *) &appData.polyglotDir, TRUE, (ArgIniType) "" },
   { "usePolyglotBook", ArgBoolean, (void *) &appData.usePolyglotBook, TRUE, (ArgIniType) FALSE },
   { "polyglotBook", ArgFilename, (void *) &appData.polyglotBook, TRUE, (ArgIniType) "" },
@@ -854,6 +859,10 @@ ParseArgs(GetFunc get, void *cl)
       strncpy(argName, ad->argName,sizeof(argName)/sizeof(argName[0]));
     }
 
+    if (ad->argType == ArgTwo) { // [HGM] kludgey arg type, not suitable for saving
+      *(Boolean *) ad->argLoc = 2;
+      continue;
+    }
     if (ad->argType == ArgTrue) {
       *(Boolean *) ad->argLoc = TRUE;
       continue;
index da18261..e56bbb1 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -915,7 +915,7 @@ Load(ChessProgramState *cps, int i)
                        useNick ? "\"" : "",
                        v1 ? " -firstProtocolVersion 1" : "",
                        hasBook ? "" : " -fNoOwnBookUCI",
-                       isUCI ? " -fUCI" : "",
+                       isUCI ? (isUCI == TRUE ? " -fUCI" : gameInfo.variant == VariantShogi ? " -fUSI" : " -fUCCI") : "",
                        storeVariant ? " -variant " : "",
                        storeVariant ? VariantName(gameInfo.variant) : "");
        firstChessProgramNames = malloc(len = strlen(q) + strlen(buf) + 1);
index 94031ad..35c38fb 100644 (file)
--- a/common.h
+++ b/common.h
@@ -564,6 +564,7 @@ typedef struct {
     Boolean isUCI[ENGINES];
     Boolean hasOwnBookUCI[ENGINES];
     char * adapterCommand;
+    char * ucciAdapter;
     char * polyglotDir;
     Boolean usePolyglotBook;
     char * polyglotBook;
diff --git a/uci.c b/uci.c
index f78fb2c..1f39f6a 100644 (file)
--- a/uci.c
+++ b/uci.c
@@ -36,6 +36,7 @@ void InitEngineUCI( const char * iniDir, ChessProgramState * cps )
         char *p, *q;
         char polyglotCommand[MSG_SIZ];
 
+        if(cps->isUCI == 2) p = appData.ucciAdapter; else
         p = appData.adapterCommand;
         q = polyglotCommand;
         while(*p) {
index 6c9ba72..0c92fbc 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, useNick;\r
+Boolean isUCI, hasBook, storeVariant, v1, addToList, useNick, isUCCI;\r
 extern Option installOptions[], matchOptions[];\r
 char *engineNr[] = { N_("First"), N_("Second"), NULL };\r
 char *engineList[1000] = {" "}, *engineMnemonic[1000] = {""};\r
@@ -611,7 +611,8 @@ EngineOptionsPopup(HWND hwnd, ChessProgramState *cps)
 }\r
 \r
 void InstallOK()\r
-{\r
+{
+    if(isUCCI) isUCI = 2;\r
     if(engineChoice[0] == engineNr[0][0])  Load(&first, 0); else Load(&second, 1);\r
 }\r
 \r
@@ -625,6 +626,7 @@ Option installOptions[] = {
   {   0,  0,    0, NULL, (void*) &engineDir, NULL, NULL, PathName, N_("directory:") },\r
   {  95,  0,    0, NULL, NULL, NULL, NULL, Label, N_("(Directory will be derived from engine path when empty)") },\r
   {   0,  0,    0, NULL, (void*) &isUCI, NULL, NULL, CheckBox, N_("UCI") },\r
+  {   0,  0,    0, NULL, (void*) &isUCCI, NULL, NULL, CheckBox, N_("UCCI / USI (uses specified /uxiAdapter)") },\r
   {   0,  0,    0, NULL, (void*) &v1, NULL, NULL, CheckBox, N_("WB protocol v1 (skip waiting for features)") },\r
   {   0,  0,    0, NULL, (void*) &addToList, NULL, NULL, CheckBox, N_("Add this engine to the list") },\r
   {   0,  0,    0, NULL, (void*) &hasBook, NULL, NULL, CheckBox, N_("Must not use GUI book") },\r
@@ -655,7 +657,7 @@ void LoadEnginePopUp(HWND hwnd)
 {\r
     int n=0;\r
 \r
-    isUCI = storeVariant = v1 = useNick = FALSE; addToList = hasBook = TRUE; // defaults\r
+    isUCI = isUCCI = storeVariant = v1 = useNick = FALSE; addToList = 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