* Massachusetts.
*
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
*
* Enhancements Copyright 2005 Alessandro Scotti
*
typedef enum {
ArgString, ArgInt, ArgFloat, ArgBoolean, ArgTrue, ArgFalse, ArgNone,
ArgColor, ArgAttribs, ArgFilename, ArgBoardSize, ArgFont, ArgCommSettings,
- ArgSettingsFilename, ArgTwo,
+ ArgSettingsFilename, ArgBackupSettingsFile, ArgTwo,
ArgX, ArgY, ArgZ // [HGM] placement: for window-placement options stored relative to main window
} ArgType;
char *firstEngineLine;
char *secondEngineLine;
char *icsNick;
+char *theme;
void EnsureOnScreen(int *x, int *y, int minX, int minY);
char StringGet(void *getClosure);
{ "secondDirectory", ArgFilename, (void *) &appData.secondDirectory, FALSE, (ArgIniType) SECOND_DIRECTORY },
{ "sd", ArgFilename, (void *) &appData.secondDirectory, FALSE, INVALID },
{ "variations", ArgBoolean, (void *) &appData.variations, TRUE, (ArgIniType) FALSE },
+ { "appendPV", ArgBoolean, (void *) &appData.autoExtend, TRUE, (ArgIniType) FALSE },
+ { "theme", ArgString, (void *) &theme, FALSE, (ArgIniType) "" },
/* some options only used by the XBoard front end, and ignored in WinBoard */
/* Their saving is controlled by XBOARD, which in WinBoard is defined as FALSE */
{ "xtitle", ArgFalse, (void *) &appData.titleInWindow, FALSE, INVALID },
{ "flashCount", ArgInt, (void *) &appData.flashCount, XBOARD, INVALID }, // let X handle this
{ "flashRate", ArgInt, (void *) &appData.flashRate, XBOARD, (ArgIniType) FLASH_RATE },
- { "pieceImageDirectory", ArgFilename, (void *) &appData.pieceDirectory, XBOARD, (ArgIniType) "" },
+ { "pieceImageDirectory", ArgFilename, (void *) &appData.pieceDirectory, TRUE, (ArgIniType) "" },
{ "pid", ArgFilename, (void *) &appData.pieceDirectory, FALSE, INVALID },
- { "fallbackPieceImageDirectory", ArgFilename, (void *) &appData.svgDirectory, FALSE, (ArgIniType) "" },
{ "trueColors", ArgBoolean, (void *) &appData.trueColors, TRUE, (ArgIniType) FALSE },
{ "soundDirectory", ArgFilename, (void *) &appData.soundDirectory, XBOARD, (ArgIniType) "" },
{ "msLoginDelay", ArgInt, (void *) &appData.msLoginDelay, XBOARD, (ArgIniType) MS_LOGIN_DELAY },
{ "seekGraph", ArgBoolean, (void *) &appData.seekGraph, TRUE, (ArgIniType) FALSE },
{ "sg", ArgTrue, (void *) &appData.seekGraph, FALSE, INVALID },
{ "autoRefresh", ArgBoolean, (void *) &appData.autoRefresh, TRUE, (ArgIniType) FALSE },
+ { "autoBox", ArgBoolean, (void *) &appData.autoBox, XBOARD, (ArgIniType) TRUE },
{ "gateway", ArgString, (void *) &appData.gateway, FALSE, (ArgIniType) "" },
{ "loadGameFile", ArgFilename, (void *) &appData.loadGameFile, FALSE, (ArgIniType) "" },
{ "lgf", ArgFilename, (void *) &appData.loadGameFile, FALSE, INVALID },
{ "autosave", ArgTrue, (void *) &appData.autoSaveGames, FALSE, INVALID },
{ "xautosave", ArgFalse, (void *) &appData.autoSaveGames, FALSE, INVALID },
{ "-autosave", ArgFalse, (void *) &appData.autoSaveGames, FALSE, INVALID },
+ { "onlyOwnGames", ArgBoolean, (void *) &appData.onlyOwn, TRUE, (ArgIniType) FALSE },
{ "loadPositionFile", ArgFilename, (void *) &appData.loadPositionFile, FALSE, (ArgIniType) "" },
{ "lpf", ArgFilename, (void *) &appData.loadPositionFile, FALSE, INVALID },
{ "loadPositionIndex", ArgInt, (void *) &appData.loadPositionIndex, FALSE, (ArgIniType) 1 },
{ "autocomm", ArgTrue, (void *) &appData.autoComment, FALSE, INVALID },
{ "xautocomm", ArgFalse, (void *) &appData.autoComment, FALSE, INVALID },
{ "-autocomm", ArgFalse, (void *) &appData.autoComment, FALSE, INVALID },
+ { "autoCreateLogon", ArgBoolean, (void *) &appData.autoCreateLogon, TRUE, (ArgIniType) FALSE },
{ "autoObserve", ArgBoolean, (void *) &appData.autoObserve, TRUE, (ArgIniType) FALSE },
{ "autobs", ArgTrue, (void *) &appData.autoObserve, FALSE, INVALID },
{ "xautobs", ArgFalse, (void *) &appData.autoObserve, FALSE, INVALID },
{ "at", ArgSettingsFilename, (void *) NULL, FALSE, INVALID },
{ "opt", ArgSettingsFilename, (void *) NULL, FALSE, INVALID },
{ "saveSettingsFile", ArgFilename, (void *) &settingsFileName, FALSE, INVALID },
+ { "backupSettingsFile", ArgBackupSettingsFile, (void *) &settingsFileName, FALSE, INVALID },
{ "saveSettingsOnExit", ArgBoolean, (void *) &saveSettingsOnExit, TRUE, (ArgIniType) TRUE },
{ "chessProgram", ArgBoolean, (void *) &chessProgram, FALSE, (ArgIniType) FALSE },
{ "cp", ArgTrue, (void *) &chessProgram, FALSE, INVALID },
TRUE, (ArgIniType) FCP_NAMES },
{ "secondChessProgramNames", ArgString, (void *) &secondChessProgramNames,
!XBOARD, (ArgIniType) SCP_NAMES },
+ { "themeNames", ArgString, (void *) &appData.themeNames, !XBOARD, (ArgIniType) "native -upf false -ub false -ubt false -pid \"\"\n" },
{ "initialMode", ArgString, (void *) &appData.initialMode, FALSE, (ArgIniType) "" },
{ "mode", ArgString, (void *) &appData.initialMode, FALSE, INVALID },
{ "variant", ArgString, (void *) &appData.variant, FALSE, (ArgIniType) "normal" },
{ "secondScoreAbs", ArgBoolean, (void *) &appData.secondScoreIsAbsolute, FALSE, (ArgIniType) FALSE },
{ "pgnExtendedInfo", ArgBoolean, (void *) &appData.saveExtendedInfoInPGN, TRUE, (ArgIniType) FALSE },
{ "hideThinkingFromHuman", ArgBoolean, (void *) &appData.hideThinkingFromHuman, TRUE, (ArgIniType) FALSE },
- { "liteBackTextureFile", ArgString, (void *) &appData.liteBackTextureFile, TRUE, (ArgIniType) "" },
- { "darkBackTextureFile", ArgString, (void *) &appData.darkBackTextureFile, TRUE, (ArgIniType) "" },
+ { "liteBackTextureFile", ArgFilename, (void *) &appData.liteBackTextureFile, TRUE, (ArgIniType) "" },
+ { "lbtf", ArgFilename, (void *) &appData.liteBackTextureFile, FALSE, INVALID },
+ { "darkBackTextureFile", ArgFilename, (void *) &appData.darkBackTextureFile, TRUE, (ArgIniType) "" },
+ { "dbtf", ArgFilename, (void *) &appData.darkBackTextureFile, FALSE, INVALID },
{ "liteBackTextureMode", ArgInt, (void *) &appData.liteBackTextureMode, TRUE, (ArgIniType) BACK_TEXTURE_MODE_PLAIN },
+ { "lbtm", ArgInt, (void *) &appData.liteBackTextureMode, FALSE, INVALID },
{ "darkBackTextureMode", ArgInt, (void *) &appData.darkBackTextureMode, TRUE, (ArgIniType) BACK_TEXTURE_MODE_PLAIN },
+ { "dbtm", ArgInt, (void *) &appData.darkBackTextureMode, FALSE, INVALID },
{ "renderPiecesWithFont", ArgString, (void *) &appData.renderPiecesWithFont, TRUE, (ArgIniType) "" },
+ { "pf", ArgString, (void *) &appData.renderPiecesWithFont, FALSE, INVALID },
{ "fontPieceToCharTable", ArgString, (void *) &appData.fontToPieceTable, TRUE, (ArgIniType) "" },
+ { "fptc", ArgString, (void *) &appData.fontToPieceTable, FALSE, INVALID },
{ "fontPieceBackColorWhite", ArgColor, (void *) 8, TRUE, (ArgIniType) WHITE_PIECE_COLOR },
{ "fontPieceForeColorWhite", ArgColor, (void *) 9, TRUE, (ArgIniType) WHITE_PIECE_COLOR },
{ "fontPieceBackColorBlack", ArgColor, (void *) 10, TRUE, (ArgIniType) BLACK_PIECE_COLOR },
{ "fontPieceForeColorBlack", ArgColor, (void *) 11, TRUE, (ArgIniType) BLACK_PIECE_COLOR },
+ { "fpfcw", ArgColor, (void *) 9, FALSE, INVALID },
+ { "fpbcb", ArgColor, (void *) 10, FALSE, INVALID },
{ "fontPieceSize", ArgInt, (void *) &appData.fontPieceSize, TRUE, (ArgIniType) 80 },
{ "overrideLineGap", ArgInt, (void *) &appData.overrideLineGap, TRUE, (ArgIniType) 1 },
{ "adjudicateLossThreshold", ArgInt, (void *) &appData.adjudicateLossThreshold, TRUE, (ArgIniType) 0 },
{ "bookDepth", ArgInt, (void *) &appData.bookDepth, TRUE, (ArgIniType) 12 },
{ "bookVariation", ArgInt, (void *) &appData.bookStrength, TRUE, (ArgIniType) 50 },
{ "discourageOwnBooks", ArgBoolean, (void *) &appData.defNoBook, TRUE, (ArgIniType) FALSE },
+ { "mcBookMode", ArgTrue, (void *) &mcMode, FALSE, (ArgIniType) FALSE },
{ "defaultHashSize", ArgInt, (void *) &appData.defaultHashSize, TRUE, (ArgIniType) 64 },
{ "defaultCacheSizeEGTB", ArgInt, (void *) &appData.defaultCacheSizeEGTB, TRUE, (ArgIniType) 4 },
{ "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 },
+ { "upf", ArgBoolean, (void *) &appData.useFont, FALSE, INVALID },
{ "useBoardTexture", ArgBoolean, (void *) &appData.useBitmaps, TRUE, (ArgIniType) FALSE },
+ { "ubt", ArgBoolean, (void *) &appData.useBitmaps, FALSE, INVALID },
+ { "useBorder", ArgBoolean, (void *) &appData.useBorder, TRUE, (ArgIniType) FALSE },
+ { "ub", ArgBoolean, (void *) &appData.useBorder, FALSE, INVALID },
+ { "border", ArgFilename, (void *) &appData.border, TRUE, (ArgIniType) "" },
+ { "finger", ArgFilename, (void *) &appData.finger, FALSE, (ArgIniType) "" },
// [HGM] tournament options
{ "tourneyFile", ArgFilename, (void *) &appData.tourneyFile, FALSE, (ArgIniType) "" },
{ "gameListY", ArgY, (void *) &wpGameList.y, TRUE, (ArgIniType) CW_USEDEFAULT },
{ "gameListW", ArgInt, (void *) &wpGameList.width, TRUE, (ArgIniType) CW_USEDEFAULT },
{ "gameListH", ArgInt, (void *) &wpGameList.height, TRUE, (ArgIniType) CW_USEDEFAULT },
+#if XBOARD
+ { "slaveX", ArgX, (void *) &wpDualBoard.x, TRUE, (ArgIniType) CW_USEDEFAULT },
+ { "slaveY", ArgY, (void *) &wpDualBoard.y, TRUE, (ArgIniType) CW_USEDEFAULT },
+ { "slaveW", ArgInt, (void *) &wpDualBoard.width, FALSE, (ArgIniType) CW_USEDEFAULT },
+ { "slaveH", ArgInt, (void *) &wpDualBoard.height, FALSE, (ArgIniType) CW_USEDEFAULT },
+#endif
/* [AS] Layout stuff */
{ "moveHistoryUp", ArgBoolean, (void *) &wpMoveHistory.visible, TRUE, (ArgIniType) TRUE },
{ "moveHistoryX", ArgX, (void *) &wpMoveHistory.x, TRUE, (ArgIniType) CW_USEDEFAULT },
for (ad = argDescriptors; ad->argName != NULL; ad++)
if (strcmp(ad->argName, argName + 1) == 0) break;
if (ad->argName == NULL) {
+ char endChar = (ch && ch != '\n' && (ch = get(cl)) == '{' ? '}' : '\n');
ExitArgError(_("Unrecognized argument %s"), 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
+ while (ch != endChar && ch != NULLCHAR) ch = get(cl); // but skip rest of line it is on (or until closing '}' )
+ if(ch == '}') ch = get(cl);
continue; // so that when it is in a settings file, it is the only setting that will be purged from it
}
} else if (ch == '@') {
ASSIGN(*(char **) ad->argLoc, argValue);
break;
+ case ArgBackupSettingsFile: // no-op if non-default settings-file already successfully read
+ if(strcmp(*(char**)ad->argLoc, SETTINGS_FILE)) break;
case ArgSettingsFilename:
{
if (ParseSettingsFile(argValue, (char**)ad->argLoc)) {
PrintCommPortSettings(f, ad->argName);
case ArgTwo:
case ArgNone:
+ case ArgBackupSettingsFile:
case ArgSettingsFilename: ;
}
}