* Massachusetts.
*
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
*
* Enhancements Copyright 2005 Alessandro Scotti
*
{ "msLoginDelay", ArgInt, (void *) &appData.msLoginDelay, XBOARD, (ArgIniType) MS_LOGIN_DELAY },
{ "pasteSelection", ArgBoolean, (void *) &appData.pasteSelection, XBOARD, (ArgIniType) FALSE },
+ { "dropMenu", ArgBoolean, (void *) &appData.dropMenu, TRUE, (ArgIniType) FALSE },
{ "remoteShell", ArgFilename, (void *) &appData.remoteShell, FALSE, (ArgIniType) REMOTE_SHELL },
{ "rsh", ArgFilename, (void *) &appData.remoteShell, FALSE, INVALID },
{ "remoteUser", ArgString, (void *) &appData.remoteUser, FALSE, INVALID },
{ "internetChessserverHelper", ArgFilename, (void *) &appData.icsHelper,
FALSE, INVALID }, // for XB
{ "icshelper", ArgFilename, (void *) &appData.icsHelper, FALSE, (ArgIniType) "" },
+ { "seekGraph", ArgBoolean, (void *) &appData.seekGraph, TRUE, (ArgIniType) FALSE },
+ { "sg", ArgTrue, (void *) &appData.seekGraph, FALSE, INVALID },
+ { "autoRefresh", ArgBoolean, (void *) &appData.autoRefresh, TRUE, (ArgIniType) FALSE },
{ "gateway", ArgString, (void *) &appData.gateway, FALSE, (ArgIniType) "" },
{ "loadGameFile", ArgFilename, (void *) &appData.loadGameFile, FALSE, (ArgIniType) "" },
{ "lgf", ArgFilename, (void *) &appData.loadGameFile, FALSE, INVALID },
{ "adjudicateLossThreshold", ArgInt, (void *) &appData.adjudicateLossThreshold, TRUE, (ArgIniType) 0 },
{ "delayBeforeQuit", ArgInt, (void *) &appData.delayBeforeQuit, TRUE, (ArgIniType) 0 },
{ "delayAfterQuit", ArgInt, (void *) &appData.delayAfterQuit, TRUE, (ArgIniType) 0 },
- { "nameOfDebugFile", ArgFilename, (void *) &appData.nameOfDebugFile, FALSE, (ArgIniType) "winboard.debug" },
+ { "nameOfDebugFile", ArgFilename, (void *) &appData.nameOfDebugFile, FALSE, (ArgIniType) DEBUG_FILE },
{ "debugfile", ArgFilename, (void *) &appData.nameOfDebugFile, FALSE, INVALID },
{ "pgnEventHeader", ArgString, (void *) &appData.pgnEventHeader, TRUE, (ArgIniType) "Computer Chess Game" },
{ "defaultFrcPosition", ArgInt, (void *) &appData.defaultFrcPosition, TRUE, (ArgIniType) -1 },
{ "secondHasOwnBookUCI", ArgBoolean, (void *) &appData.secondHasOwnBookUCI, FALSE, (ArgIniType) TRUE },
{ "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\"" },
{ "polyglotDir", ArgFilename, (void *) &appData.polyglotDir, TRUE, (ArgIniType) "" },
{ "usePolyglotBook", ArgBoolean, (void *) &appData.usePolyglotBook, TRUE, (ArgIniType) FALSE },
{ "polyglotBook", ArgFilename, (void *) &appData.polyglotBook, TRUE, (ArgIniType) "" },
{ "defaultPathEGTB", ArgFilename, (void *) &appData.defaultPathEGTB, TRUE, (ArgIniType) "c:\\egtb" },
/* [HGM] board-size, adjudication and misc. options */
+ { "oneClickMove", ArgBoolean, (void *) &appData.oneClick, TRUE, (ArgIniType) FALSE },
{ "boardWidth", ArgInt, (void *) &appData.NrFiles, TRUE, (ArgIniType) -1 },
{ "boardHeight", ArgInt, (void *) &appData.NrRanks, TRUE, (ArgIniType) -1 },
{ "holdingsSize", ArgInt, (void *) &appData.holdingsSize, TRUE, (ArgIniType) -1 },
{ "trivialDraws", ArgBoolean, (void *) &appData.trivialDraws, TRUE, (ArgIniType) FALSE },
{ "ruleMoves", ArgInt, (void *) &appData.ruleMoves, TRUE, (ArgIniType) 51 },
{ "repeatsToDraw", ArgInt, (void *) &appData.drawRepeats, TRUE, (ArgIniType) 6 },
+ { "backgroundObserve", ArgBoolean, (void *) &appData.bgObserve, TRUE, (ArgIniType) FALSE },
{ "autoKibitz", ArgTrue, (void *) &appData.autoKibitz, FALSE, INVALID },
{ "engineDebugOutput", ArgInt, (void *) &appData.engineComments, FALSE, (ArgIniType) 1 },
{ "userName", ArgString, (void *) &appData.userName, FALSE, INVALID },
{ "autoLogo", ArgBoolean, (void *) &appData.autoLogo, TRUE, INVALID },
{ "firstOptions", ArgString, (void *) &appData.firstOptions, FALSE, (ArgIniType) "" },
{ "secondOptions", ArgString, (void *) &appData.secondOptions, FALSE, (ArgIniType) "" },
- { "firstNeedsNoncompliantFEN", ArgString, (void *) &appData.fenOverride1, FALSE, (ArgIniType) "" },
- { "secondNeedsNoncompliantFEN", ArgString, (void *) &appData.fenOverride2, FALSE, (ArgIniType) "" },
+ { "firstNeedsNoncompliantFEN", ArgString, (void *) &appData.fenOverride1, FALSE, (ArgIniType) NULL },
+ { "secondNeedsNoncompliantFEN", ArgString, (void *) &appData.fenOverride2, FALSE, (ArgIniType) NULL },
{ "keepAlive", ArgInt, (void *) &appData.keepAlive, FALSE, INVALID },
{ "icstype", ArgInt, (void *) &ics_type, FALSE, INVALID },
{ "forceIllegalMoves", ArgTrue, (void *) &appData.forceIllegal, FALSE, INVALID },
+ { "showTargetSquares", ArgBoolean, (void *) &appData.markers, TRUE, FALSE },
#ifdef ZIPPY
{ "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
exit(2);
}
+int
+ValidateInt(char *s)
+{
+ char *p = s;
+ if(*p == '-' || *p == '+') p++;
+ while(*p) if(!isdigit(*p++)) ExitArgError("Bad integer value", s);
+ return atoi(s);
+}
char
StringGet(void *getClosure)
switch (ad->argType) {
case ArgInt:
- *(int *) ad->argLoc = atoi(argValue);
+ *(int *) ad->argLoc = ValidateInt(argValue);
break;
case ArgX:
- *(int *) ad->argLoc = atoi(argValue) + wpMain.x; // [HGM] placement: translate stored relative to absolute
+ *(int *) ad->argLoc = ValidateInt(argValue) + wpMain.x; // [HGM] placement: translate stored relative to absolute
break;
case ArgY:
- *(int *) ad->argLoc = atoi(argValue) + wpMain.y; // (this is really kludgey, it should be done where used...)
+ *(int *) ad->argLoc = ValidateInt(argValue) + wpMain.y; // (this is really kludgey, it should be done where used...)
break;
case ArgZ:
- *(int *) ad->argLoc = atoi(argValue);
+ *(int *) ad->argLoc = ValidateInt(argValue);
EnsureOnScreen(&wpMain.x, &wpMain.y, minX, minY);
break;
if ((strchr(p, '\\') || strchr(p, '\n')) && !strchr(p, '}')) {
/* Quote multiline values or \-containing values
with { } if possible */
- fprintf(f, "/%s={%s}\n", ad->argName, p);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "{%s}\n", ad->argName, p);
} else {
/* Else quote with " " */
- fprintf(f, "/%s=\"", ad->argName);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "\"", ad->argName);
while (*p) {
if (*p == '\n') fprintf(f, "\n");
else if (*p == '\r') fprintf(f, "\\r");
break;
case ArgInt:
case ArgZ:
- fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "%d\n", ad->argName, *(int *)ad->argLoc);
break;
case ArgX:
- fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - wpMain.x); // [HGM] placement: stor relative value
+ fprintf(f, OPTCHAR "%s" SEPCHAR "%d\n", ad->argName, *(int *)ad->argLoc - wpMain.x); // [HGM] placement: store relative value
break;
case ArgY:
- fprintf(f, "/%s=%d\n", ad->argName, *(int *)ad->argLoc - wpMain.y);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "%d\n", ad->argName, *(int *)ad->argLoc - wpMain.y);
break;
case ArgFloat:
- fprintf(f, "/%s=%g\n", ad->argName, *(float *)ad->argLoc);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "%g\n", ad->argName, *(float *)ad->argLoc);
break;
case ArgBoolean:
- fprintf(f, "/%s=%s\n", ad->argName,
+ fprintf(f, OPTCHAR "%s" SEPCHAR "%s\n", ad->argName,
(*(Boolean *)ad->argLoc) ? "true" : "false");
break;
case ArgTrue:
- if (*(Boolean *)ad->argLoc) fprintf(f, "/%s\n", ad->argName);
+ if (*(Boolean *)ad->argLoc) fprintf(f, OPTCHAR "%s\n", ad->argName);
break;
case ArgFalse:
- if (!*(Boolean *)ad->argLoc) fprintf(f, "/%s\n", ad->argName);
+ if (!*(Boolean *)ad->argLoc) fprintf(f, OPTCHAR "%s\n", ad->argName);
break;
case ArgColor:
SaveColor(f, ad);
case ArgFilename:
if(*(char**)ad->argLoc == NULL) break; // just in case
if (strchr(*(char **)ad->argLoc, '\"')) {
- fprintf(f, "/%s='%s'\n", ad->argName, *(char **)ad->argLoc);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "'%s'\n", ad->argName, *(char **)ad->argLoc);
} else {
- fprintf(f, "/%s=\"%s\"\n", ad->argName, *(char **)ad->argLoc);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "\"%s\"\n", ad->argName, *(char **)ad->argLoc);
}
break;
case ArgBoardSize:
}
fclose(f);
}
+
+Boolean
+GetArgValue(char *name)
+{ // retrieve (as text) current value of string or int argument given by name
+ // (this is used for maing the values available in the adapter command)
+ ArgDescriptor *ad;
+
+ for (ad = argDescriptors; ad->argName != NULL; ad++)
+ if (strcmp(ad->argName, name) == 0) break;
+
+ if (ad->argName == NULL) return FALSE;
+
+ switch(ad->argType) {
+ case ArgString:
+ case ArgFilename:
+ strcpy(name, *(char**) ad->argLoc);
+ return TRUE;
+ case ArgInt:
+ sprintf(name, "%d", *(int*) ad->argLoc);
+ return TRUE;
+ case ArgBoolean:
+ sprintf(name, "%s", *(Boolean*) ad->argLoc ? "true" : "false");
+ return TRUE;
+ default: ;
+ }
+
+ return FALSE;
+}