X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=args.h;h=2d2fc1d5cfaefe76c83fb434eae06b89d560b0e6;hb=69ce008d53a3c2fe16f7522b2c2dc7957fb5ea13;hp=9533406408eafd4291d7a8c284519fdc6ab3a44f;hpb=4af4152da761b1cc91723fa60a6fdffd0c481a9f;p=xboard.git diff --git a/args.h b/args.h index 9533406..2d2fc1d 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, ArgBackupSettingsFile, ArgTwo, + ArgSettingsFilename, ArgBackupSettingsFile, ArgTwo, ArgInstall, ArgX, ArgY, ArgZ // [HGM] placement: for window-placement options stored relative to main window } ArgType; @@ -468,6 +468,7 @@ ArgDescriptor argDescriptors[] = { { "soundSeek", ArgFilename, (void *) &appData.soundSeek, TRUE, (ArgIniType) "" }, { "soundMove", ArgFilename, (void *) &appData.soundMove, TRUE, (ArgIniType) "" }, { "soundBell", ArgFilename, (void *) &appData.soundBell, TRUE, (ArgIniType) SOUND_BELL }, + { "soundRoar", ArgFilename, (void *) &appData.soundRoar, TRUE, (ArgIniType) "" }, { "soundIcsWin", ArgFilename, (void *) &appData.soundIcsWin, TRUE, (ArgIniType) "" }, { "soundIcsLoss", ArgFilename, (void *) &appData.soundIcsLoss, TRUE, (ArgIniType) "" }, { "soundIcsDraw", ArgFilename, (void *) &appData.soundIcsDraw, TRUE, (ArgIniType) "" }, @@ -506,6 +507,7 @@ ArgDescriptor argDescriptors[] = { { "secondChessProgramNames", ArgString, (void *) &secondChessProgramNames, !XBOARD, (ArgIniType) SCP_NAMES }, { "themeNames", ArgString, (void *) &appData.themeNames, !XBOARD, (ArgIniType) "native -upf false -ub false -ubt false -pid \"\"\n" }, + { "installEngine", ArgInstall, (void *) &firstChessProgramNames, FALSE, (ArgIniType) "" }, { "initialMode", ArgString, (void *) &appData.initialMode, FALSE, (ArgIniType) "" }, { "mode", ArgString, (void *) &appData.initialMode, FALSE, INVALID }, { "variant", ArgString, (void *) &appData.variant, FALSE, (ArgIniType) "normal" }, @@ -597,6 +599,7 @@ ArgDescriptor argDescriptors[] = { { "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) "" }, @@ -873,6 +876,12 @@ ParseSettingsFile(char *name, char **addr) } if (ok) { f = fopen(fullname, "r"); +#ifdef DATADIR + if(f == NULL && *fullname != '/') { // when a relative name did not work + MySearchPath(DATADIR "/themes/conf", name, fullname); // also look in standard place + f = fopen(fullname, "r"); + } +#endif if (f != NULL) { if (addr != NULL) { ASSIGN(*addr, fullname); @@ -919,8 +928,10 @@ ParseArgs(GetFunc get, void *cl) 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 == '@') { @@ -1103,6 +1114,14 @@ ParseArgs(GetFunc get, void *cl) case ArgString: case ArgFilename: +#ifdef DATADIR + if(argValue[0] == '~' && argValue[1] == '~') { + char buf[4*MSG_SIZ]; // expand ~~ + snprintf(buf, 4*MSG_SIZ, DATADIR "%s", argValue+2); + ASSIGN(*(char **) ad->argLoc, buf); + break; + } +#endif ASSIGN(*(char **) ad->argLoc, argValue); break; @@ -1158,6 +1177,16 @@ ParseArgs(GetFunc get, void *cl) ParseCommPortSettings(argValue); break; + case ArgInstall: + q = *(char **) ad->argLoc; + if((strcmp(version, VERSION) || autoClose) && !strstr(q, argValue) ) { + int l = strlen(q) + strlen(argValue); + *(char **) ad->argLoc = malloc(l+2); + snprintf(*(char **) ad->argLoc, l+2, "%s%s\n", q, argValue); + free(q); + } + break; + case ArgNone: ExitArgError(_("Unrecognized argument %s"), argValue, TRUE); break; @@ -1542,6 +1571,7 @@ SaveSettings(char* name) case ArgNone: case ArgBackupSettingsFile: case ArgSettingsFilename: ; + case ArgInstall: ; } } fclose(f);