Implement -pgnNumberTag option
[xboard.git] / args.h
diff --git a/args.h b/args.h
index 3a6449f..4848269 100644 (file)
--- a/args.h
+++ b/args.h
@@ -5,7 +5,7 @@
  * Massachusetts.
  *
  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
  *
  * Enhancements Copyright 2005 Alessandro Scotti
  *
@@ -423,7 +423,7 @@ ArgDescriptor argDescriptors[] = {
   { "xhighlight", ArgFalse, (void *) &appData.highlightLastMove, FALSE, INVALID },
   { "-highlight", ArgFalse, (void *) &appData.highlightLastMove, FALSE, INVALID },
   { "highlightDragging", ArgBoolean,
-    (void *) &appData.highlightDragging, TRUE, INVALID },
+    (void *) &appData.highlightDragging, !XBOARD, (ArgIniType) TRUE },
   { "highdrag", ArgTrue, (void *) &appData.highlightDragging, FALSE, INVALID },
   { "xhighdrag", ArgFalse, (void *) &appData.highlightDragging, FALSE, INVALID },
   { "-highdrag", ArgFalse, (void *) &appData.highlightDragging, FALSE, INVALID },
@@ -485,6 +485,8 @@ ArgDescriptor argDescriptors[] = {
   { "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 },
+  { "recentEngines", ArgInt, (void *) &appData.recentEngines, TRUE, (ArgIniType) 6 },
+  { "recentEngineList", ArgString, (void *) &appData.recentEngineList, TRUE, (ArgIniType) "" },
   { "firstChessProgramNames", ArgString, (void *) &firstChessProgramNames,
     TRUE, (ArgIniType) FCP_NAMES },
   { "secondChessProgramNames", ArgString, (void *) &secondChessProgramNames,
@@ -558,11 +560,14 @@ ArgDescriptor argDescriptors[] = {
   { "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
   { "tourneyFile", ArgFilename, (void *) &appData.tourneyFile, FALSE, (ArgIniType) "" },
@@ -575,6 +580,10 @@ 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 },
+  { "pgnNumberTag", ArgBoolean, (void *) &appData.numberTag, TRUE, (ArgIniType) FALSE },
+  { "afterGame", ArgString, (void *) &appData.afterGame, FALSE, INVALID },
+  { "afterTourney", ArgString, (void *) &appData.afterTourney, FALSE, INVALID },
 
   /* [HGM] board-size, adjudication and misc. options */
   { "oneClickMove", ArgBoolean, (void *) &appData.oneClick, TRUE, (ArgIniType) FALSE },
@@ -612,12 +621,15 @@ ArgDescriptor argDescriptors[] = {
   { "autoLogo", ArgBoolean, (void *) &appData.autoLogo, TRUE, INVALID },
   { "firstOptions", ArgString, (void *) &appData.firstOptions, FALSE, (ArgIniType) "" },
   { "secondOptions", ArgString, (void *) &appData.secondOptions, FALSE, (ArgIniType) "" },
+  { "firstFeatures", ArgString, (void *) &appData.features[0], FALSE, (ArgIniType) "" },
+  { "secondFeatures", ArgString, (void *) &appData.features[1], FALSE, (ArgIniType) "" },
+  { "featureDefaults", ArgString, (void *) &appData.featureDefaults, TRUE, (ArgIniType) "" },
   { "firstNeedsNoncompliantFEN", ArgString, (void *) &appData.fenOverride1, FALSE, (ArgIniType) NULL },
   { "secondNeedsNoncompliantFEN", ArgString, (void *) &appData.fenOverride2, FALSE, (ArgIniType) NULL },
   { "keepAlive", ArgInt, (void *) &appData.keepAlive, FALSE, INVALID },
   { "icstype", ArgInt, (void *) &ics_type, FALSE, INVALID },
   { "forceIllegalMoves", ArgTrue, (void *) &appData.forceIllegal, FALSE, INVALID },
-  { "showTargetSquares", ArgBoolean, (void *) &appData.markers, TRUE, FALSE },
+  { "showTargetSquares", ArgBoolean, (void *) &appData.markers, TRUE, (ArgIniType) 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) "" },
@@ -630,6 +642,15 @@ ArgDescriptor argDescriptors[] = {
   { "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 },
+  { "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" },
 
 #if ZIPPY
   { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
@@ -753,10 +774,10 @@ ExitArgError(char *msg, char *badArg, Boolean quit)
   int len;
 
   len = snprintf(buf,MSG_SIZ, "%s %s", msg, badArg);
-  if( (len > MSG_SIZ) && appData.debugMode )
+  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...
+  if(!quit) { printf(_("%s in settings file\n"), buf); return; } // DisplayError does not work yet at this stage...
   DisplayFatalError(buf, 0, 2);
   exit(2);
 }
@@ -766,7 +787,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, TRUE);
   return atoi(s);
 }
 
@@ -805,7 +826,7 @@ ParseSettingsFile(char *name, char **addr)
   if(!ok && strchr(name, '.') == NULL)
     { // append default file-name extension '.ini' when needed
       len = snprintf(buf,MSG_SIZ, "%s.ini", name);
-      if( (len > MSG_SIZ) && appData.debugMode )
+      if( (len >= MSG_SIZ) && appData.debugMode )
        fprintf(debugFP, "ParseSettingsFile: buffer truncated. Input: name=%s \n",name);
 
       ok = MySearchPath(installDir, buf, fullname);
@@ -857,7 +878,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"), 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
       }
@@ -886,7 +907,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"), argName, TRUE);
     }
     q = argValue;
     if (ch == '{') {
@@ -946,7 +967,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"), argName, TRUE);
            break;
          case 'n':
            *q++ = '\n';
@@ -1030,7 +1051,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"), argValue, TRUE);
          }
        }
       }
@@ -1047,7 +1068,7 @@ ParseArgs(GetFunc get, void *cl)
        *(Boolean *) ad->argLoc = FALSE;
        break;
       default:
-       ExitArgError("Unrecognized boolean argument value", argValue, TRUE);
+       ExitArgError(_("Unrecognized boolean argument value"), argValue, TRUE);
        break;
       }
       break;
@@ -1075,7 +1096,7 @@ ParseArgs(GetFunc get, void *cl)
       break;
 
     case ArgNone:
-      ExitArgError("Unrecognized argument", argValue, TRUE);
+      ExitArgError(_("Unrecognized argument"), argValue, TRUE);
       break;
     case ArgTwo:
     case ArgTrue:
@@ -1232,6 +1253,8 @@ InitAppData(char *lpCmdLine)
   /* Parse command line */
   ParseArgs(StringGet, &lpCmdLine);
 
+  if(appData.viewer && appData.viewerOptions[0]) ParseArgsFromString(appData.viewerOptions);
+
   /* [HGM] make sure board size is acceptable */
   if(appData.NrFiles > BOARD_FILES ||
      appData.NrRanks > BOARD_RANKS   )
@@ -1252,7 +1275,7 @@ InitAppData(char *lpCmdLine)
       if(p != NULL)
        { // engine command line contains WinBoard options
           len = snprintf(buf, MSG_SIZ, p+6, f, f, f, f, f, f, f, f, f, f); // replace %s in them by "first"
-         if( (len > MSG_SIZ) && appData.debugMode )
+         if( (len >= MSG_SIZ) && appData.debugMode )
            fprintf(debugFP, "InitAppData: buffer truncated.\n");
 
           ParseArgs(StringGet, &q);
@@ -1269,7 +1292,7 @@ InitAppData(char *lpCmdLine)
       if(p != NULL)
        { // engine command line contains WinBoard options
           len = snprintf(buf,MSG_SIZ, p+6, s, s, s, s, s, s, s, s, s, s); // replace %s in them by "first"
-         if( (len > MSG_SIZ) && appData.debugMode )
+         if( (len >= MSG_SIZ) && appData.debugMode )
            fprintf(debugFP, "InitAppData: buffer truncated.\n");
 
           ParseArgs(StringGet, &q);
@@ -1468,13 +1491,13 @@ GetArgValue(char *name)
       return TRUE;
     case ArgInt:
       len = snprintf(name, MSG_SIZ, "%d", *(int*) ad->argLoc);
-      if( (len > MSG_SIZ) && appData.debugMode )
+      if( (len >= MSG_SIZ) && appData.debugMode )
        fprintf(debugFP, "GetArgValue: buffer truncated.\n");
 
       return TRUE;
     case ArgBoolean:
       len = snprintf(name, MSG_SIZ, "%s", *(Boolean*) ad->argLoc ? "true" : "false");
-      if( (len > MSG_SIZ) && appData.debugMode )
+      if( (len >= MSG_SIZ) && appData.debugMode )
        fprintf(debugFP, "GetArgValue: buffer truncated.\n");
 
       return TRUE;