X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=args.h;h=6e3c3aca06b8abd30c99351960bd8ebe6b235d92;hb=cd286ef1302a2b6ce3aa591432de315f8e561948;hp=a72e95aca3dd6c5c193fcfc714a50c46834b82ec;hpb=2a47e175761e183633e73190665bce4a58e3cd86;p=xboard.git diff --git a/args.h b/args.h index a72e95a..6e3c3ac 100644 --- a/args.h +++ b/args.h @@ -104,6 +104,9 @@ IcsTextMenuEntry icsTextMenuEntry[ICS_TEXT_MENU_SIZE]; int junk; Boolean singleList; char *homeDir; +char *firstEngineLine; +char *secondEngineLine; +char *icsNick; void EnsureOnScreen(int *x, int *y, int minX, int minY); char StringGet(void *getClosure); @@ -123,8 +126,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 +141,10 @@ 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 }, + { "is", ArgString, (void *) &icsNick, FALSE, INVALID }, { "loadGameFile", ArgFilename, (void *) &appData.loadGameFile, FALSE, INVALID }, { "", ArgNone, NULL, FALSE, INVALID }, /* keyword arguments */ @@ -171,6 +176,8 @@ ArgDescriptor argDescriptors[] = { { "secondChessProgram", ArgFilename, (void *) &appData.secondChessProgram, FALSE, (ArgIniType) SECOND_CHESS_PROGRAM }, { "scp", ArgFilename, (void *) &appData.secondChessProgram, FALSE, INVALID }, + { "fe", ArgString, (void *) &firstEngineLine, FALSE, "" }, + { "se", ArgString, (void *) &secondEngineLine, FALSE, "" }, { "firstPlaysBlack", ArgBoolean, (void *) &appData.firstPlaysBlack, FALSE, FALSE }, { "fb", ArgTrue, (void *) &appData.firstPlaysBlack, FALSE, FALSE }, { "xfb", ArgFalse, (void *) &appData.firstPlaysBlack, FALSE, INVALID }, @@ -229,6 +236,7 @@ ArgDescriptor argDescriptors[] = { { "ics", ArgTrue, (void *) &appData.icsActive, FALSE, (ArgIniType) FALSE }, { "xics", ArgFalse, (void *) &appData.icsActive, FALSE, INVALID }, { "-ics", ArgFalse, (void *) &appData.icsActive, FALSE, INVALID }, + { "is", ArgString, (void *) &icsNick, FALSE, "" }, { "internetChessServerHost", ArgString, (void *) &appData.icsHost, FALSE, (ArgIniType) "" }, { "icshost", ArgString, (void *) &appData.icsHost, FALSE, INVALID }, { "internetChessServerPort", ArgString, (void *) &appData.icsPort, FALSE, (ArgIniType) ICS_PORT }, @@ -541,12 +549,12 @@ ArgDescriptor argDescriptors[] = { { "fUCI", ArgTrue, (void *) &appData.firstIsUCI, FALSE, INVALID }, { "firstUCI", ArgTrue, (void *) &appData.firstIsUCI, FALSE, INVALID }, { "secondIsUCI", ArgBoolean, (void *) &appData.secondIsUCI, FALSE, (ArgIniType) FALSE }, + { "secondUCI", ArgTrue, (void *) &appData.secondIsUCI, FALSE, INVALID }, { "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 }, { "firstXBook", ArgFalse, (void *) &appData.firstHasOwnBookUCI, FALSE, INVALID }, @@ -616,6 +624,8 @@ ArgDescriptor argDescriptors[] = { { "smpCores", ArgInt, (void *) &appData.smpCores, TRUE, (ArgIniType) 1 }, { "egtFormats", ArgString, (void *) &appData.egtFormats, TRUE, (ArgIniType) "" }, { "niceEngines", ArgInt, (void *) &appData.niceEngines, TRUE, 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 }, @@ -651,7 +661,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 }, @@ -726,10 +740,6 @@ ArgDescriptor argDescriptors[] = { { "icsY", ArgY, (void *) &wpConsole.y, TRUE, (ArgIniType) CW_USEDEFAULT }, { "icsW", ArgInt, (void *) &wpConsole.width, TRUE, (ArgIniType) CW_USEDEFAULT }, { "icsH", ArgInt, (void *) &wpConsole.height, TRUE, (ArgIniType) CW_USEDEFAULT }, - { "analysisX", ArgX, (void *) &junk, FALSE, INVALID }, // [HGM] placement: analysis window no longer exists - { "analysisY", ArgY, (void *) &junk, FALSE, INVALID }, // provided for compatibility with old ini files - { "analysisW", ArgInt, (void *) &junk, FALSE, INVALID }, - { "analysisH", ArgInt, (void *) &junk, FALSE, INVALID }, { "commentX", ArgX, (void *) &wpComment.x, TRUE, (ArgIniType) CW_USEDEFAULT }, { "commentY", ArgY, (void *) &wpComment.y, TRUE, (ArgIniType) CW_USEDEFAULT }, { "commentW", ArgInt, (void *) &wpComment.width, TRUE, (ArgIniType) CW_USEDEFAULT }, @@ -858,10 +868,11 @@ ParseArgs(GetFunc get, void *cl) char *q; int i, octval; char ch; - int posarg = 0; + int posarg = 4; // 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 == ';') { @@ -892,6 +903,7 @@ ParseArgs(GetFunc get, void *cl) } else { /* Positional argument */ ad = &argDescriptors[posarg++]; + posflag++; strncpy(argName, ad->argName,sizeof(argName)/sizeof(argName[0])); } @@ -1014,13 +1026,32 @@ 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 if(GetEngineLine(argValue, 11)) { + ad = &argDescriptors[3]; // correct implied type to -is + } 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); @@ -1257,6 +1288,9 @@ InitAppData(char *lpCmdLine) ParseArgs(StringGet, &lpCmdLine); if(appData.viewer && appData.viewerOptions[0]) ParseArgsFromString(appData.viewerOptions); + if(appData.tourney && appData.tourneyOptions[0]) ParseArgsFromString(appData.tourneyOptions); + chessProgram = GetEngineLine(firstEngineLine, 0) || GetEngineLine(secondEngineLine, 1); + appData.icsActive = GetEngineLine(icsNick, 10); /* [HGM] make sure board size is acceptable */ if(appData.NrFiles > BOARD_FILES ||