int junk;
Boolean singleList;
-char *homeDir;\r
+char *homeDir;
void EnsureOnScreen(int *x, int *y, int minX, int minY);
char StringGet(void *getClosure);
{ "sweepPromotions", ArgBoolean, (void *) &appData.sweepSelect, 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 },
+ { "remoteUser", ArgString, (void *) &appData.remoteUser, FALSE, (ArgIniType) "" },
{ "ruser", ArgString, (void *) &appData.remoteUser, FALSE, INVALID },
{ "timeDelay", ArgFloat, (void *) &appData.timeDelay, TRUE, INVALID },
{ "td", ArgFloat, (void *) &appData.timeDelay, FALSE, INVALID },
{ "popUpErrors", ArgBoolean, (void *) &appData.popupMoveErrors,
FALSE, INVALID }, /* only so that old WinBoard.ini files from betas can be read */
{ "clockFont", ArgFont, (void *) CLOCK_FONT, TRUE, INVALID },
- { "messageFont", ArgFont, (void *) MESSAGE_FONT, !XBOARD, INVALID },
- { "font", ArgFont, (void *) MESSAGE_FONT, XBOARD, INVALID },
+ { "messageFont", ArgFont, (void *) MESSAGE_FONT, TRUE, INVALID },
+ { "font", ArgFont, (void *) MESSAGE_FONT, FALSE, INVALID }, /* only so that old .xboardrc files will parse. -font does not work from the command line because it is captured by the X libraries. */
{ "coordFont", ArgFont, (void *) COORD_FONT, TRUE, INVALID },
{ "tagsFont", ArgFont, (void *) EDITTAGS_FONT, TRUE, INVALID },
{ "commentFont", ArgFont, (void *) COMMENT_FONT, TRUE, INVALID },
{ "icsFont", ArgFont, (void *) CONSOLE_FONT, TRUE, INVALID },
{ "moveHistoryFont", ArgFont, (void *) MOVEHISTORY_FONT, TRUE, INVALID }, /* [AS] */
+ { "gameListFont", ArgFont, (void *) GAMELIST_FONT, TRUE, INVALID }, /* [HGM] */
{ "boardSize", ArgBoardSize, (void *) &boardSize,
TRUE, (ArgIniType) -1 }, /* must come after all fonts */
{ "size", ArgBoardSize, (void *) &boardSize, FALSE, INVALID },
{ "comPortSettings", ArgCommSettings, (void *) /*&dcb*/ 0, TRUE, INVALID },
{ "settingsFile", ArgSettingsFilename, (void *) &settingsFileName, FALSE, (ArgIniType) SETTINGS_FILE },
{ "ini", ArgSettingsFilename, (void *) &settingsFileName, FALSE, INVALID },
+ { "at", ArgSettingsFilename, (void *) NULL, FALSE, INVALID },
+ { "opt", ArgSettingsFilename, (void *) NULL, FALSE, INVALID },
{ "saveSettingsFile", ArgFilename, (void *) &settingsFileName, FALSE, INVALID },
{ "saveSettingsOnExit", ArgBoolean, (void *) &saveSettingsOnExit, TRUE, (ArgIniType) TRUE },
{ "chessProgram", ArgBoolean, (void *) &chessProgram, FALSE, (ArgIniType) FALSE },
{ "defaultPathEGTB", ArgFilename, (void *) &appData.defaultPathEGTB, TRUE, (ArgIniType) "c:\\egtb" },
{ "language", ArgFilename, (void *) &appData.language, TRUE, (ArgIniType) "" },
{ "userFileDirectory", ArgFilename, (void *) &homeDir, FALSE, (ArgIniType) installDir },
+ { "usePieceFont", ArgBoolean, (void *) &appData.useFont, TRUE, (ArgIniType) FALSE },
+ { "useBoardTexture", ArgBoolean, (void *) &appData.useBitmaps, TRUE, (ArgIniType) FALSE },
// [HGM] tournament options
- { "tourney", ArgFilename, (void *) &appData.tourneyFile, FALSE, (ArgIniType) "" },
+ { "tourneyFile", ArgFilename, (void *) &appData.tourneyFile, FALSE, (ArgIniType) "" },
{ "tf", ArgFilename, (void *) &appData.tourneyFile, FALSE, INVALID },
- { "processes", ArgString, (void *) &appData.processes, FALSE, (ArgIniType) " " },
{ "participants", ArgString, (void *) &appData.participants, FALSE, (ArgIniType) "" },
{ "tourneyType", ArgInt, (void *) &appData.tourneyType, FALSE, (ArgIniType) 0 },
{ "tt", ArgInt, (void *) &appData.tourneyType, FALSE, INVALID },
{ "results", ArgString, (void *) &appData.results, FALSE, (ArgIniType) "" },
{ "syncAfterRound", ArgBoolean, (void *) &appData.roundSync, FALSE, (ArgIniType) FALSE },
{ "syncAfterCycle", ArgBoolean, (void *) &appData.cycleSync, FALSE, (ArgIniType) TRUE },
+ { "seedBase", ArgInt, (void *) &appData.seedBase, FALSE, (ArgIniType) 1 },
+ { "afterGame", ArgString, (void *) &appData.afterGame, FALSE, INVALID },
/* [HGM] board-size, adjudication and misc. options */
{ "oneClickMove", ArgBoolean, (void *) &appData.oneClick, TRUE, (ArgIniType) FALSE },
{ "secondPgnName", ArgString, (void *) &appData.pgnName[1], FALSE, (ArgIniType) "" },
{ "sn", ArgString, (void *) &appData.pgnName[1], FALSE, INVALID },
{ "absoluteAnalysisScores", ArgBoolean, (void *) &appData.whitePOV, TRUE, FALSE },
+ { "scoreWhite", ArgBoolean, (void *) &appData.scoreWhite, TRUE, FALSE },
+ { "evalZoom", ArgInt, (void *) &appData.zoom, TRUE, (ArgIniType) 1 },
+ { "evalThreshold", ArgInt, (void *) &appData.evalThreshold, TRUE, (ArgIniType) 25 },
+ { "fSAN", ArgTrue, (void *) &appData.pvSAN[0], FALSE, FALSE },
+ { "sSAN", ArgTrue, (void *) &appData.pvSAN[1], FALSE, FALSE },
{ "pairingEngine", ArgFilename, (void *) &appData.pairingEngine, TRUE, "" },
+ { "defaultTourneyName", ArgFilename, (void *) &appData.defName, TRUE, "" },
+ { "eloThresholdAny", ArgInt, (void *) &appData.eloThreshold1, FALSE, (ArgIniType) 0 },
+ { "eloThresholdBoth", ArgInt, (void *) &appData.eloThreshold2, FALSE, (ArgIniType) 0 },
+ { "dateThreshold", ArgInt, (void *) &appData.dateThreshold, FALSE, (ArgIniType) 0 },
+ { "searchMode", ArgInt, (void *) &appData.searchMode, FALSE, (ArgIniType) 1 },
#if ZIPPY
{ "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
{ "", ArgSettingsFilename, (void *) NULL, FALSE };
void
-ExitArgError(char *msg, char *badArg)
+ExitArgError(char *msg, char *badArg, Boolean quit)
{
char buf[MSG_SIZ];
int len;
if( (len > MSG_SIZ) && appData.debugMode )
fprintf(debugFP, "ExitArgError: buffer truncated. Input: msg=%s badArg=%s\n", msg, badArg);
+ if(!quit) { printf("%s in settings file\n", buf); return; } // DisplayError does not work yet at this stage...
DisplayFatalError(buf, 0, 2);
exit(2);
}
{
char *p = s;
if(*p == '-' || *p == '+') p++;
- while(*p) if(!isdigit(*p++)) ExitArgError("Bad integer value", s);
+ while(*p) if(!isdigit(*p++)) ExitArgError("Bad integer value", s, TRUE);
return atoi(s);
}
*q = NULLCHAR;
for (ad = argDescriptors; ad->argName != NULL; ad++)
if (strcmp(ad->argName, argName + 1) == 0) break;
- if (ad->argName == NULL)
- ExitArgError("Unrecognized argument", argName);
-
+ if (ad->argName == NULL) {
+ ExitArgError("Unrecognized argument", argName, get != &FileGet); // [HGM] make unknown argument non-fatal
+ while (ch != '\n' && ch != NULLCHAR) ch = get(cl); // but skip rest of line it is on
+ continue; // so that when it is in a settings file, it is the only setting that will be purged from it
+ }
} else if (ch == '@') {
/* Indirection file */
ad = &argDescriptorIndirection;
while (ch == ' ' || ch == '=' || ch == ':' || ch == '\t') ch = get(cl);
if (ch == NULLCHAR || ch == '\n') {
- ExitArgError("No value provided for argument", argName);
+ ExitArgError("No value provided for argument", argName, TRUE);
}
q = argValue;
if (ch == '{') {
ch = get(cl);
switch (ch) {
case NULLCHAR:
- ExitArgError("Incomplete \\ escape in value for", argName);
+ ExitArgError("Incomplete \\ escape in value for", argName, TRUE);
break;
case 'n':
*q++ = '\n';
} else {
if (ad->argLoc != NULL) {
} else {
- ExitArgError("Failed to open indirection file", argValue);
+ ExitArgError("Failed to open indirection file", argValue, TRUE);
}
}
}
*(Boolean *) ad->argLoc = FALSE;
break;
default:
- ExitArgError("Unrecognized boolean argument value", argValue);
+ ExitArgError("Unrecognized boolean argument value", argValue, TRUE);
break;
}
break;
break;
case ArgNone:
- ExitArgError("Unrecognized argument", argValue);
+ ExitArgError("Unrecognized argument", argValue, TRUE);
break;
+ case ArgTwo:
case ArgTrue:
case ArgFalse: ;
}
if(argDescriptors[i].defaultValue != INVALID)
switch(argDescriptors[i].argType) {
case ArgBoolean:
+ case ArgTwo:
case ArgTrue:
case ArgFalse:
*(Boolean *) argDescriptors[i].argLoc = (int)(intptr_t)argDescriptors[i].defaultValue;
break;
case ArgCommSettings:
PrintCommPortSettings(f, ad->argName);
+ case ArgTwo:
case ArgNone:
case ArgSettingsFilename: ;
}