Beef up variant detection in New Variant dialog WB
authorH.G.Muller <hgm@hgm-xboard.(none)>
Sat, 5 Mar 2016 21:42:33 +0000 (22:42 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Tue, 8 Mar 2016 18:29:58 +0000 (19:29 +0100)
In WinBoard the enabling of radio buttons was still done when the
variant nameon the button was a sub-string of the variants feature,
without requiring a match of the full name (so that 'grande-acedrex'
would enable the 'grand' button of Grand Chess).

winboard/woptions.c

index 0d22012..d4f54d0 100644 (file)
@@ -896,13 +896,14 @@ 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<15; i++) { // initialize engine-defined variants\r