Fix multi-leg promotions
[xboard.git] / winboard / woptions.c
index a149b41..34e3800 100644 (file)
@@ -1,7 +1,8 @@
 /*\r
  * woptions.c -- Options dialog box routines for WinBoard\r
  *\r
- * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.\r
+ * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free\r
+ * Software Foundation, Inc.\r
  *\r
  * Enhancements Copyright 2005 Alessandro Scotti\r
  *\r
@@ -883,7 +884,7 @@ VariantWhichRadio(HWND hDlg)
        if(IsDlgButtonChecked(hDlg, j) &&\r
           (appData.noChessProgram || strstr(first.variants, VariantName(i-1)))) return (VariantClass) i-1;\r
   }\r
-  for(i=0; i<9; i++) { // check for engine-defined variants\r
+  for(i=0; i<15; i++) { // check for engine-defined variants\r
     if(IsDlgButtonChecked(hDlg, OPT_EngineVariant+i) ) {\r
        GetDlgItemText(hDlg, OPT_EngineVariant+i, engineVariant, MSG_SIZ); // remember name, so we can resolve it later\r
        return VariantUnknown;\r
@@ -895,16 +896,17 @@ VariantWhichRadio(HWND hDlg)
 void\r
 VariantShowRadio(HWND hDlg)\r
 {\r
-  char c = *engineVariant;\r
+  char c = *engineVariant, *v, *p;\r
   int i=0, j;\r
   CheckDlgButton(hDlg, radioButton[gameInfo.variant], TRUE);\r
   *engineVariant = NULLCHAR; // [HGM] kludge to prevent VariantName will always return engineVariant\r
   while((j = radioButton[i++]) != -2) {\r
        if(j == -1) continue; // no menu button\r
-       EnableWindow(GetDlgItem(hDlg, j), appData.noChessProgram || strstr(first.variants, VariantName(i-1)));\r
+       v = VariantName(i-1); p = strstr(first.variants, v);\r
+       EnableWindow(GetDlgItem(hDlg, j), appData.noChessProgram || p && (!*v || strlen(v) == strlen(p) || p[strlen(v)] == ','));\r
   }\r
   *engineVariant = c;\r
-  for(i=0; i<9; i++) { // initialize engine-defined variants\r
+  for(i=0; i<15; i++) { // initialize engine-defined variants\r
     char *v = EngineDefinedVariant(&first, i); // get name of #i\r
     if(v) { // there is such a variant\r
        EnableWindow(GetDlgItem(hDlg, OPT_EngineVariant+i), TRUE);     // and enable the button\r
@@ -967,7 +969,7 @@ NewVariantDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       }\r
 \r
       gameInfo.variant = v;\r
-      appData.variant = VariantName(v);\r
+      ASSIGN(appData.variant, VariantName(v));\r
 \r
       appData.NrFiles = (int) GetDlgItemInt(hDlg, IDC_Files, NULL, FALSE );\r
       appData.NrRanks = (int) GetDlgItemInt(hDlg, IDC_Ranks, NULL, FALSE );\r
@@ -980,6 +982,9 @@ NewVariantDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       shuffleOpenings = FALSE; /* [HGM] shuffle: possible shuffle reset when we switch */\r
       startedFromPositionFile = FALSE; /* [HGM] loadPos: no longer valid in new variant */\r
       appData.pieceToCharTable = NULL;\r
+      ASSIGN(appData.pieceNickNames, "");\r
+      ASSIGN(appData.colorNickNames, "");\r
+      ASSIGN(appData.men, "");\r
       Reset(TRUE, TRUE);\r
 \r
       return TRUE;\r