X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=args.h;h=d3b2d7097ed8d1da5f3d6dce3a7ec7b8e5f1d490;hb=ca6061cbffe88ff5eb2332e733e0a534b89cc5e7;hp=693877ef3cbbb1f922faf5864ac5b1a5d2a4264b;hpb=c90dc392ef0e30c7fd481ee47bd9a39aafebcdf4;p=xboard.git diff --git a/args.h b/args.h index 693877e..d3b2d70 100644 --- 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; @@ -103,6 +103,7 @@ IcsTextMenuEntry icsTextMenuEntry[ICS_TEXT_MENU_SIZE]; int junk; Boolean singleList; +char *homeDir; void EnsureOnScreen(int *x, int *y, int minX, int minY); char StringGet(void *getClosure); @@ -216,7 +217,7 @@ ArgDescriptor argDescriptors[] = { { "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 }, @@ -315,13 +316,14 @@ ArgDescriptor argDescriptors[] = { { "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 }, @@ -472,6 +474,8 @@ ArgDescriptor argDescriptors[] = { { "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 }, @@ -536,6 +540,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 }, @@ -544,20 +552,24 @@ 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) "" }, { "bookDepth", ArgInt, (void *) &appData.bookDepth, TRUE, (ArgIniType) 12 }, { "bookVariation", ArgInt, (void *) &appData.bookStrength, TRUE, (ArgIniType) 50 }, + { "discourageOwnBooks", ArgBoolean, (void *) &appData.defNoBook, TRUE, (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 }, + { "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 }, @@ -566,6 +578,8 @@ ArgDescriptor argDescriptors[] = { { "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 }, @@ -613,6 +627,20 @@ ArgDescriptor argDescriptors[] = { { "fn", ArgString, (void *) &appData.pgnName[0], FALSE, INVALID }, { "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 }, + { "stretch", ArgInt, (void *) &appData.stretch, FALSE, (ArgIniType) 1 }, + { "ignoreColors", ArgBoolean, (void *) &appData.ignoreColors, FALSE, FALSE }, #if ZIPPY { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK }, @@ -730,7 +758,7 @@ ArgDescriptor argDescriptorIndirection = { "", ArgSettingsFilename, (void *) NULL, FALSE }; void -ExitArgError(char *msg, char *badArg) +ExitArgError(char *msg, char *badArg, Boolean quit) { char buf[MSG_SIZ]; int len; @@ -739,6 +767,7 @@ ExitArgError(char *msg, char *badArg) 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); } @@ -748,7 +777,7 @@ ValidateInt(char *s) { 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); } @@ -838,9 +867,11 @@ ParseArgs(GetFunc get, void *cl) *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; @@ -851,6 +882,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; @@ -862,7 +897,7 @@ ParseArgs(GetFunc get, void *cl) 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 == '{') { @@ -922,7 +957,7 @@ ParseArgs(GetFunc get, void *cl) 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'; @@ -1006,7 +1041,7 @@ ParseArgs(GetFunc get, void *cl) } else { if (ad->argLoc != NULL) { } else { - ExitArgError("Failed to open indirection file", argValue); + ExitArgError("Failed to open indirection file", argValue, TRUE); } } } @@ -1023,7 +1058,7 @@ ParseArgs(GetFunc get, void *cl) *(Boolean *) ad->argLoc = FALSE; break; default: - ExitArgError("Unrecognized boolean argument value", argValue); + ExitArgError("Unrecognized boolean argument value", argValue, TRUE); break; } break; @@ -1051,8 +1086,9 @@ ParseArgs(GetFunc get, void *cl) break; case ArgNone: - ExitArgError("Unrecognized argument", argValue); + ExitArgError("Unrecognized argument", argValue, TRUE); break; + case ArgTwo: case ArgTrue: case ArgFalse: ; } @@ -1149,6 +1185,7 @@ SetDefaultsFromList() 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; @@ -1414,6 +1451,7 @@ SaveSettings(char* name) break; case ArgCommSettings: PrintCommPortSettings(f, ad->argName); + case ArgTwo: case ArgNone: case ArgSettingsFilename: ; }