X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=args.h;h=0ae9f7c5fcd103bf323bcf6f4f08c1066894247f;hb=ee7ad29e757ab4f99b8b776ce7e8ebee5081767a;hp=eb2833a52e091f6417032f7424e35b50e237bd9b;hpb=f4cc69edd466fda83f84629f40c086dd2a249616;p=xboard.git diff --git a/args.h b/args.h index eb2833a..0ae9f7c 100644 --- a/args.h +++ b/args.h @@ -123,8 +123,6 @@ void SaveColor(FILE *f, ArgDescriptor *ad); void SaveBoardSize(FILE *f, char *name, void *addr); void PrintCommPortSettings(FILE *f, char *name); void GetWindowCoords(); -int MySearchPath(char *installDir, char *name, char *fullname); -int MyGetFullPathName(char *name, char *fullname); int MainWindowUp(); void PopUpStartupDialog(); typedef char GetFunc(void *getClosure); @@ -140,6 +138,9 @@ char *defaultTextAttribs[] = ArgDescriptor argDescriptors[] = { /* positional arguments */ + { "opt", ArgSettingsFilename, (void *) NULL, FALSE, INVALID }, + { "loadPositionFile", ArgFilename, (void *) &appData.loadPositionFile, FALSE, INVALID }, + { "tourneyFile", ArgFilename, (void *) &appData.tourneyFile, FALSE, INVALID }, { "loadGameFile", ArgFilename, (void *) &appData.loadGameFile, FALSE, INVALID }, { "", ArgNone, NULL, FALSE, INVALID }, /* keyword arguments */ @@ -581,6 +582,7 @@ ArgDescriptor argDescriptors[] = { { "syncAfterRound", ArgBoolean, (void *) &appData.roundSync, FALSE, (ArgIniType) FALSE }, { "syncAfterCycle", ArgBoolean, (void *) &appData.cycleSync, FALSE, (ArgIniType) TRUE }, { "seedBase", ArgInt, (void *) &appData.seedBase, FALSE, (ArgIniType) 1 }, + { "pgnNumberTag", ArgBoolean, (void *) &appData.numberTag, TRUE, (ArgIniType) FALSE }, { "afterGame", ArgString, (void *) &appData.afterGame, FALSE, INVALID }, { "afterTourney", ArgString, (void *) &appData.afterTourney, FALSE, INVALID }, @@ -615,8 +617,10 @@ ArgDescriptor argDescriptors[] = { { "smpCores", ArgInt, (void *) &appData.smpCores, TRUE, (ArgIniType) 1 }, { "egtFormats", ArgString, (void *) &appData.egtFormats, TRUE, (ArgIniType) "" }, { "niceEngines", ArgInt, (void *) &appData.niceEngines, TRUE, INVALID }, - { "firstLogo", ArgFilename, (void *) &appData.firstLogo, FALSE, INVALID }, - { "secondLogo", ArgFilename, (void *) &appData.secondLogo, FALSE, INVALID }, + { "logoSize", ArgInt, (void *) &appData.logoSize, XBOARD, INVALID }, + { "logoDir", ArgFilename, (void *) &appData.logoDir, XBOARD, (ArgIniType) "." }, + { "firstLogo", ArgFilename, (void *) &appData.firstLogo, FALSE, (ArgIniType) "" }, + { "secondLogo", ArgFilename, (void *) &appData.secondLogo, FALSE, (ArgIniType) "" }, { "autoLogo", ArgBoolean, (void *) &appData.autoLogo, TRUE, INVALID }, { "firstOptions", ArgString, (void *) &appData.firstOptions, FALSE, (ArgIniType) "" }, { "secondOptions", ArgString, (void *) &appData.secondOptions, FALSE, (ArgIniType) "" }, @@ -650,6 +654,11 @@ ArgDescriptor argDescriptors[] = { { "findMirrorImage", ArgBoolean, (void *) &appData.findMirror, FALSE, FALSE }, { "viewer", ArgTrue, (void *) &appData.viewer, FALSE, FALSE }, { "viewerOptions", ArgString, (void *) &appData.viewerOptions, TRUE, (ArgIniType) "-ncp -engineOutputUp false -saveSettingsOnExit false" }, + { "tourneyOptions", ArgString, (void *) &appData.tourneyOptions, TRUE, (ArgIniType) "-ncp -mm -saveSettingsOnExit false" }, + { "autoCopyPV", ArgBoolean, (void *) &appData.autoCopyPV, TRUE, FALSE }, + { "topLevel", ArgBoolean, (void *) &appData.topLevel, XBOARD, (ArgIniType) TOPLEVEL }, + { "dialogColor", ArgString, (void *) &appData.dialogColor, XBOARD, (ArgIniType) "" }, + { "buttonColor", ArgString, (void *) &appData.buttonColor, XBOARD, (ArgIniType) "" }, #if ZIPPY { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK }, @@ -697,6 +706,7 @@ ArgDescriptor argDescriptors[] = { /* [HGM] options for broadcasting and time odds */ { "chatBoxes", ArgString, (void *) &appData.chatBoxes, !XBOARD, (ArgIniType) NULL }, { "serverMoves", ArgString, (void *) &appData.serverMovesName, FALSE, (ArgIniType) NULL }, + { "serverFile", ArgString, (void *) &appData.serverFileName, FALSE, (ArgIniType) NULL }, { "suppressLoadMoves", ArgBoolean, (void *) &appData.suppressLoadMoves, FALSE, (ArgIniType) FALSE }, { "serverPause", ArgInt, (void *) &appData.serverPause, FALSE, (ArgIniType) 15 }, { "firstTimeOdds", ArgInt, (void *) &appData.firstTimeOdds, FALSE, (ArgIniType) 1 }, @@ -710,9 +720,10 @@ ArgDescriptor argDescriptors[] = { { "keepLineBreaksICS", ArgBoolean, (void *) &appData.noJoin, TRUE, INVALID }, { "wrapContinuationSequence", ArgString, (void *) &appData.wrapContSeq, FALSE, INVALID }, { "useInternalWrap", ArgTrue, (void *) &appData.useInternalWrap, FALSE, INVALID }, /* noJoin usurps this if set */ + { "openCommand", ArgString, (void *) &appData.sysOpen, FALSE, "xdg-open" }, // [HGM] placement: put all window layouts last in ini file, but man X,Y before all others - { "minX", ArgZ, (void *) &minX, FALSE, INVALID }, // [HGM] placement: to make suer auxialary windows can be placed + { "minX", ArgZ, (void *) &minX, FALSE, INVALID }, // [HGM] placement: to make sure auxiliary windows can be placed { "minY", ArgZ, (void *) &minY, FALSE, INVALID }, { "winWidth", ArgInt, (void *) &wpMain.width, TRUE, INVALID }, // [HGM] placement: dummies to remember right & bottom { "winHeight", ArgInt, (void *) &wpMain.height, TRUE, INVALID }, // for attaching auxiliary windows to them @@ -772,7 +783,7 @@ ExitArgError(char *msg, char *badArg, Boolean quit) char buf[MSG_SIZ]; int len; - len = snprintf(buf,MSG_SIZ, "%s %s", msg, badArg); + len = snprintf(buf, MSG_SIZ, msg, badArg); if( (len >= MSG_SIZ) && appData.debugMode ) fprintf(debugFP, "ExitArgError: buffer truncated. Input: msg=%s badArg=%s\n", msg, badArg); @@ -786,7 +797,7 @@ ValidateInt(char *s) { char *p = s; if(*p == '-' || *p == '+') p++; - while(*p) if(!isdigit(*p++)) ExitArgError(_("Bad integer value"), s, TRUE); + while(*p) if(!isdigit(*p++)) ExitArgError(_("Bad integer value %s"), s, TRUE); return atoi(s); } @@ -854,10 +865,11 @@ ParseArgs(GetFunc get, void *cl) char *q; int i, octval; char ch; - int posarg = 0; + int posarg = 3; // default is game file ch = get(cl); for (;;) { + int posflag = 0; while (ch == ' ' || ch == '\n' || ch == '\t') ch = get(cl); if (ch == NULLCHAR) break; if (ch == ';') { @@ -877,7 +889,7 @@ ParseArgs(GetFunc get, void *cl) for (ad = argDescriptors; ad->argName != NULL; ad++) if (strcmp(ad->argName, argName + 1) == 0) break; if (ad->argName == NULL) { - ExitArgError(_("Unrecognized argument"), argName, get != &FileGet); // [HGM] make unknown argument non-fatal + 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 continue; // so that when it is in a settings file, it is the only setting that will be purged from it } @@ -888,6 +900,7 @@ ParseArgs(GetFunc get, void *cl) } else { /* Positional argument */ ad = &argDescriptors[posarg++]; + posflag++; strncpy(argName, ad->argName,sizeof(argName)/sizeof(argName[0])); } @@ -906,7 +919,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, TRUE); + ExitArgError(_("No value provided for argument %s"), argName, TRUE); } q = argValue; if (ch == '{') { @@ -966,7 +979,7 @@ ParseArgs(GetFunc get, void *cl) ch = get(cl); switch (ch) { case NULLCHAR: - ExitArgError(_("Incomplete \\ escape in value for"), argName, TRUE); + ExitArgError(_("Incomplete \\ escape in value for %s"), argName, TRUE); break; case 'n': *q++ = '\n'; @@ -1010,13 +1023,30 @@ ParseArgs(GetFunc get, void *cl) } } } else { - while (ch != ' ' && ch != NULLCHAR && ch != '\t' && ch != '\n') { + while ((ch != ' ' || posflag) && ch != NULLCHAR && ch != '\t' && ch != '\n') { // space allowed in positional arg *q++ = ch; ch = get(cl); } } *q = NULLCHAR; + if(posflag) { // positional argument: the argName was implied, and per default set as -lgf + int len = strlen(argValue) - 4; // start of filename extension + if(len < 0) len = 0; + if(!strcasecmp(argValue + len, ".trn")) { + ad = &argDescriptors[2]; // correct implied type to -tf + appData.tourney = TRUE; // let it parse -tourneyOptions later + } else if(!strcasecmp(argValue + len, ".fen") || !strcasecmp(argValue + len, ".epd")) { + ad = &argDescriptors[1]; // correct implied type to -lpf + appData.viewer = TRUE; + } else if(!strcasecmp(argValue + len, ".ini") || !strcasecmp(argValue + len, ".xop")) { + ad = &argDescriptors[0]; // correct implied type to -opt + } else { // keep default -lgf, but let it imply viewer mode as well + appData.viewer = TRUE; + } + strncpy(argName, ad->argName,sizeof(argName)/sizeof(argName[0])); + } + switch (ad->argType) { case ArgInt: *(int *) ad->argLoc = ValidateInt(argValue); @@ -1050,7 +1080,7 @@ ParseArgs(GetFunc get, void *cl) } else { if (ad->argLoc != NULL) { } else { - ExitArgError(_("Failed to open indirection file"), argValue, TRUE); + ExitArgError(_("Failed to open indirection file %s"), argValue, TRUE); } } } @@ -1067,7 +1097,7 @@ ParseArgs(GetFunc get, void *cl) *(Boolean *) ad->argLoc = FALSE; break; default: - ExitArgError(_("Unrecognized boolean argument value"), argValue, TRUE); + ExitArgError(_("Unrecognized boolean argument value %s"), argValue, TRUE); break; } break; @@ -1095,7 +1125,7 @@ ParseArgs(GetFunc get, void *cl) break; case ArgNone: - ExitArgError(_("Unrecognized argument"), argValue, TRUE); + ExitArgError(_("Unrecognized argument %s"), argValue, TRUE); break; case ArgTwo: case ArgTrue: @@ -1253,6 +1283,7 @@ InitAppData(char *lpCmdLine) ParseArgs(StringGet, &lpCmdLine); if(appData.viewer && appData.viewerOptions[0]) ParseArgsFromString(appData.viewerOptions); + if(appData.tourney && appData.tourneyOptions[0]) ParseArgsFromString(appData.tourneyOptions); /* [HGM] make sure board size is acceptable */ if(appData.NrFiles > BOARD_FILES ||