* Massachusetts.
*
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 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;
{ "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 },
{ "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 },
{ "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 },
ch = get(cl);
while (ch != '\n' && ch != NULLCHAR) ch = get(cl);
continue;
- } else if (ch == '/' || ch == '-') {
+ } else if (ch == SLASH || ch == '-') {
/* Switch */
q = argName;
while (ch != ' ' && ch != '=' && ch != ':' && ch != NULLCHAR &&
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 == '@') {
case ArgString:
case ArgFilename:
+ if(argValue[0] == '~' && argValue[1] == '~') {
+ char buf[4*MSG_SIZ]; // expand ~~
+ snprintf(buf, 4*MSG_SIZ, "%s%s", DATADIR, argValue+2);
+ ASSIGN(*(char **) ad->argLoc, buf);
+ break;
+ }
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: ;
}
}