Let XBoard propose name of tourney file
[xboard.git] / args.h
diff --git a/args.h b/args.h
index 0822aa7..b3776ee 100644 (file)
--- 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;
 
@@ -102,6 +102,8 @@ typedef struct {
 IcsTextMenuEntry icsTextMenuEntry[ICS_TEXT_MENU_SIZE];
 
 int junk;
+Boolean singleList;
+char *homeDir;\r
 
 void EnsureOnScreen(int *x, int *y, int minX, int minY);
 char StringGet(void *getClosure);
@@ -156,8 +158,8 @@ ArgDescriptor argDescriptors[] = {
   { "phc", ArgColor, (void *) 5, FALSE, INVALID },
   { "movesPerSession", ArgInt, (void *) &appData.movesPerSession, TRUE, (ArgIniType) MOVES_PER_SESSION },
   { "mps", ArgInt, (void *) &appData.movesPerSession, FALSE, INVALID },
-  { "initString", ArgString, (void *) &appData.initString, FALSE, INVALID },
-  { "firstInitString", ArgString, (void *) &appData.initString, FALSE, (ArgIniType) INIT_STRING },
+  { "initString", ArgString, (void *) &appData.firstInitString, FALSE, INVALID },
+  { "firstInitString", ArgString, (void *) &appData.firstInitString, FALSE, (ArgIniType) INIT_STRING },
   { "secondInitString", ArgString, (void *) &appData.secondInitString, FALSE, (ArgIniType) INIT_STRING },
   { "firstComputerString", ArgString, (void *) &appData.firstComputerString,
     FALSE, (ArgIniType) COMPUTER_STRING },
@@ -211,6 +213,8 @@ ArgDescriptor argDescriptors[] = {
   { "pasteSelection", ArgBoolean, (void *) &appData.pasteSelection, XBOARD, (ArgIniType) FALSE },
 
   { "dropMenu", ArgBoolean, (void *) &appData.dropMenu, TRUE, (ArgIniType) FALSE },
+  { "pieceMenu", ArgBoolean, (void *) &appData.pieceMenu, TRUE, (ArgIniType) TRUE },
+  { "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 },
@@ -312,8 +316,8 @@ 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 },
@@ -477,10 +481,11 @@ ArgDescriptor argDescriptors[] = {
   { "-cp", ArgFalse, (void *) &chessProgram, FALSE, INVALID },
   { "icsMenu", ArgString, (void *) &icsTextMenuString, TRUE, (ArgIniType) ICS_TEXT_MENU_DEFAULT },
   { "icsNames", ArgString, (void *) &icsNames, TRUE, (ArgIniType) ICS_NAMES },
+  { "singleEngineList", ArgBoolean, (void *) &singleList, !XBOARD, (ArgIniType) FALSE },
   { "firstChessProgramNames", ArgString, (void *) &firstChessProgramNames,
     TRUE, (ArgIniType) FCP_NAMES },
   { "secondChessProgramNames", ArgString, (void *) &secondChessProgramNames,
-    TRUE, (ArgIniType) SCP_NAMES },
+    !XBOARD, (ArgIniType) SCP_NAMES },
   { "initialMode", ArgString, (void *) &appData.initialMode, FALSE, (ArgIniType) "" },
   { "mode", ArgString, (void *) &appData.initialMode, FALSE, INVALID },
   { "variant", ArgString, (void *) &appData.variant, FALSE, (ArgIniType) "normal" },
@@ -532,6 +537,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 },
@@ -540,6 +549,7 @@ 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) "" },
@@ -549,6 +559,20 @@ ArgDescriptor argDescriptors[] = {
   { "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 },
+
+  // [HGM] tournament options
+  { "tourney", 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 },
+  { "tourneyCycles", ArgInt, (void *) &appData.tourneyCycles, FALSE, (ArgIniType) 1 },
+  { "cy", ArgInt, (void *) &appData.tourneyCycles, FALSE, INVALID },
+  { "results", ArgString, (void *) &appData.results, FALSE, (ArgIniType) "" },
+  { "syncAfterRound", ArgBoolean, (void *) &appData.roundSync, FALSE, (ArgIniType) FALSE },
+  { "syncAfterCycle", ArgBoolean, (void *) &appData.cycleSync, FALSE, (ArgIniType) TRUE },
 
   /* [HGM] board-size, adjudication and misc. options */
   { "oneClickMove", ArgBoolean, (void *) &appData.oneClick, TRUE, (ArgIniType) FALSE },
@@ -592,6 +616,13 @@ ArgDescriptor argDescriptors[] = {
   { "icstype", ArgInt, (void *) &ics_type, FALSE, INVALID },
   { "forceIllegalMoves", ArgTrue, (void *) &appData.forceIllegal, FALSE, INVALID },
   { "showTargetSquares", ArgBoolean, (void *) &appData.markers, TRUE, FALSE },
+  { "firstPgnName", ArgString, (void *) &appData.pgnName[0], FALSE, (ArgIniType) "" },
+  { "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 },
+  { "pairingEngine", ArgFilename, (void *) &appData.pairingEngine, TRUE, "" },
+  { "defaultTourneyName", ArgFilename, (void *) &appData.defName, TRUE, "" },
 
 #if ZIPPY
   { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
@@ -775,7 +806,7 @@ ParseSettingsFile(char *name, char **addr)
     f = fopen(fullname, "r");
     if (f != NULL) {
       if (addr != NULL) {
-           *addr = strdup(fullname);
+           ASSIGN(*addr, fullname);
       }
       ParseArgs(FileGet, f);
       fclose(f);
@@ -815,10 +846,8 @@ ParseArgs(GetFunc get, void *cl)
        ch = get(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);
 
@@ -832,6 +861,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;
@@ -978,7 +1011,7 @@ ParseArgs(GetFunc get, void *cl)
 
     case ArgString:
     case ArgFilename:
-      *(char **) ad->argLoc = strdup(argValue);
+      ASSIGN(*(char **) ad->argLoc, argValue);
       break;
 
     case ArgSettingsFilename:
@@ -1034,6 +1067,7 @@ ParseArgs(GetFunc get, void *cl)
     case ArgNone:
       ExitArgError("Unrecognized argument", argValue);
       break;
+    case ArgTwo:
     case ArgTrue:
     case ArgFalse: ;
     }
@@ -1041,6 +1075,18 @@ ParseArgs(GetFunc get, void *cl)
 }
 
 void
+ParseArgsFromString(char *p)
+{
+    ParseArgs(StringGet, &p);
+}
+
+void
+ParseArgsFromFile(FILE *f)
+{
+    ParseArgs(FileGet, f);
+}
+
+void
 ParseIcsTextMenu(char *icsTextMenuString)
 {
 //  int flags = 0;
@@ -1118,6 +1164,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;
@@ -1131,7 +1178,8 @@ SetDefaultsFromList()
         case ArgString:
         case ArgFilename:
         case ArgSettingsFilename:
-          *(char **) argDescriptors[i].argLoc = (char *)argDescriptors[i].defaultValue;
+          if((char *)argDescriptors[i].defaultValue)
+          *(char **) argDescriptors[i].argLoc = strdup((char *)argDescriptors[i].defaultValue);
           break;
         case ArgBoardSize:
           *(int *) argDescriptors[i].argLoc = (int)(intptr_t)argDescriptors[i].defaultValue;
@@ -1382,6 +1430,7 @@ SaveSettings(char* name)
       break;
     case ArgCommSettings:
       PrintCommPortSettings(f, ad->argName);
+    case ArgTwo:
     case ArgNone:
     case ArgSettingsFilename: ;
     }