X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=winboard%2Fwoptions.c;h=00aca121bffae8c9de0ae50e1acba16b247f1438;hb=f2344ce98b5950c7a047c3ee29959ad9f26ae8ae;hp=93dde9ef2e7438580192b4938ca23db4d4fdfaae;hpb=e3e3615246633473d0ea262f6d3974d6a49cfd01;p=xboard.git diff --git a/winboard/woptions.c b/winboard/woptions.c index 93dde9e..00aca12 100644 --- a/winboard/woptions.c +++ b/winboard/woptions.c @@ -1,7 +1,7 @@ /* * woptions.c -- Options dialog box routines for WinBoard * - * Copyright 2000, 2009, 2010 Free Software Foundation, Inc. + * Copyright 2000, 2009, 2010, 2011 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * @@ -135,6 +135,28 @@ VOID SetLoadOptionEnables(HWND hDlg); VOID SetSaveOptionEnables(HWND hDlg); VOID SetTimeControlEnables(HWND hDlg); +char * +InterpretFileName(char *buf, char *homeDir) +{ // [HGM] file name relative to homeDir. (Taken out of SafeOptionsDialog, because it is generally useful) + char *result = NULL; + if ((isalpha(buf[0]) && buf[1] == ':') || + (buf[0] == '\\' && buf[1] == '\\')) { + return strdup(buf); + } else { + char buf2[MSG_SIZ], buf3[MSG_SIZ]; + char *dummy; + GetCurrentDirectory(MSG_SIZ, buf3); + SetCurrentDirectory(homeDir); + if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) { + result = strdup(buf2); + } else { + result = strdup(buf); + } + SetCurrentDirectory(buf3); + } + return result; +} + /*---------------------------------------------------------------------------*\ * * General Options Dialog functions @@ -756,40 +778,73 @@ BoardOptionsPopup(HWND hwnd) FreeProcInstance(lpProc); } +int radioButton[] = { + OPT_VariantNormal, + -1, // Loadable + OPT_VariantWildcastle, + OPT_VariantNocastle, + OPT_VariantFRC, + OPT_VariantBughouse, + OPT_VariantCrazyhouse, + OPT_VariantLosers, + OPT_VariantSuicide, + OPT_VariantGiveaway, + OPT_VariantTwoKings, + -1, //Kriegspiel + OPT_VariantAtomic, + OPT_Variant3Check, + OPT_VariantShatranj, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + OPT_VariantShogi, + OPT_VariantXiangqi, + OPT_VariantCourier, + OPT_VariantGothic, + OPT_VariantCapablanca, + OPT_VariantKnightmate, + OPT_VariantFairy, + OPT_VariantCylinder, + OPT_VariantFalcon, + OPT_VariantCRC, + OPT_VariantBerolina, + OPT_VariantJanus, + OPT_VariantSuper, + OPT_VariantGreat, + -1, // Twilight, + OPT_VariantMakruk, + OPT_VariantSChess, + OPT_VariantGrand, + OPT_VariantSpartan, // Spartan + -2 // sentinel +}; + VariantClass VariantWhichRadio(HWND hDlg) { - return (IsDlgButtonChecked(hDlg, OPT_VariantFairy) ? VariantFairy : - (IsDlgButtonChecked(hDlg, OPT_VariantGothic) ? VariantGothic : - (IsDlgButtonChecked(hDlg, OPT_VariantCrazyhouse) ? VariantCrazyhouse : - (IsDlgButtonChecked(hDlg, OPT_VariantBughouse) ? VariantBughouse : - (IsDlgButtonChecked(hDlg, OPT_VariantCourier) ? VariantCourier : - (IsDlgButtonChecked(hDlg, OPT_VariantShatranj) ? VariantShatranj : - (IsDlgButtonChecked(hDlg, OPT_VariantShogi) ? VariantShogi : - (IsDlgButtonChecked(hDlg, OPT_VariantXiangqi) ? VariantXiangqi : - (IsDlgButtonChecked(hDlg, OPT_VariantCapablanca) ? VariantCapablanca : - (IsDlgButtonChecked(hDlg, OPT_VariantTwoKings) ? VariantTwoKings : - (IsDlgButtonChecked(hDlg, OPT_VariantKnightmate) ? VariantKnightmate : - (IsDlgButtonChecked(hDlg, OPT_VariantLosers) ? VariantLosers : - (IsDlgButtonChecked(hDlg, OPT_VariantSuicide) ? VariantSuicide : - (IsDlgButtonChecked(hDlg, OPT_VariantAtomic) ? VariantAtomic : - (IsDlgButtonChecked(hDlg, OPT_VariantShatranj) ? VariantShatranj : - (IsDlgButtonChecked(hDlg, OPT_VariantFRC) ? VariantFischeRandom : - (IsDlgButtonChecked(hDlg, OPT_VariantCylinder) ? VariantCylinder : - (IsDlgButtonChecked(hDlg, OPT_VariantFalcon) ? VariantFalcon : - (IsDlgButtonChecked(hDlg, OPT_VariantCRC) ? VariantCapaRandom : - (IsDlgButtonChecked(hDlg, OPT_VariantSuper) ? VariantSuper : - (IsDlgButtonChecked(hDlg, OPT_VariantBerolina) ? VariantBerolina : - (IsDlgButtonChecked(hDlg, OPT_VariantJanus) ? VariantJanus : - (IsDlgButtonChecked(hDlg, OPT_VariantWildcastle) ? VariantWildCastle : - (IsDlgButtonChecked(hDlg, OPT_VariantNocastle) ? VariantNoCastle : - (IsDlgButtonChecked(hDlg, OPT_Variant3Check) ? Variant3Check : - (IsDlgButtonChecked(hDlg, OPT_VariantGreat) ? VariantGreat : - (IsDlgButtonChecked(hDlg, OPT_VariantGiveaway) ? VariantGiveaway : - (IsDlgButtonChecked(hDlg, OPT_VariantTwilight) ? VariantSpartan : - (IsDlgButtonChecked(hDlg, OPT_VariantMakruk) ? VariantMakruk : - (IsDlgButtonChecked(hDlg, OPT_VariantSChess) ? VariantSChess : - VariantNormal )))))))))))))))))))))))))))))); + int i=0, j; + while((j = radioButton[i++]) != -2) { + if(j == -1) continue; // no menu button + if(IsDlgButtonChecked(hDlg, j) && + (appData.noChessProgram || strstr(first.variants, VariantName(i-1)))) return (VariantClass) i-1; + } + return gameInfo.variant; // If no button checked, keep old +} + +void +VariantShowRadio(HWND hDlg) +{ + int i=0, j; + CheckDlgButton(hDlg, radioButton[gameInfo.variant], TRUE); + while((j = radioButton[i++]) != -2) { + if(j == -1) continue; // no menu button + EnableWindow(GetDlgItem(hDlg, j), appData.noChessProgram || strstr(first.variants, VariantName(i-1))); + } } LRESULT CALLBACK @@ -803,100 +858,9 @@ NewVariantDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_NewVariant); + /* Initialize the dialog items */ - switch (gameInfo.variant) { - case VariantNormal: - CheckDlgButton(hDlg, OPT_VariantNormal, TRUE); - break; - case VariantCrazyhouse: - CheckDlgButton(hDlg, OPT_VariantCrazyhouse, TRUE); - break; - case VariantBughouse: - CheckDlgButton(hDlg, OPT_VariantBughouse, TRUE); - break; - case VariantShogi: - CheckDlgButton(hDlg, OPT_VariantShogi, TRUE); - break; - case VariantXiangqi: - CheckDlgButton(hDlg, OPT_VariantXiangqi, TRUE); - break; - case VariantCapablanca: - CheckDlgButton(hDlg, OPT_VariantCapablanca, TRUE); - break; - case VariantGothic: - CheckDlgButton(hDlg, OPT_VariantGothic, TRUE); - break; - case VariantCourier: - CheckDlgButton(hDlg, OPT_VariantCourier, TRUE); - break; - case VariantKnightmate: - CheckDlgButton(hDlg, OPT_VariantKnightmate, TRUE); - break; - case VariantTwoKings: - CheckDlgButton(hDlg, OPT_VariantTwoKings, TRUE); - break; - case VariantFairy: - CheckDlgButton(hDlg, OPT_VariantFairy, TRUE); - break; - case VariantAtomic: - CheckDlgButton(hDlg, OPT_VariantAtomic, TRUE); - break; - case VariantSuicide: - CheckDlgButton(hDlg, OPT_VariantSuicide, TRUE); - break; - case VariantLosers: - CheckDlgButton(hDlg, OPT_VariantLosers, TRUE); - break; - case VariantShatranj: - CheckDlgButton(hDlg, OPT_VariantShatranj, TRUE); - break; - case VariantFischeRandom: - CheckDlgButton(hDlg, OPT_VariantFRC, TRUE); - break; - case VariantCapaRandom: - CheckDlgButton(hDlg, OPT_VariantCRC, TRUE); - break; - case VariantFalcon: - CheckDlgButton(hDlg, OPT_VariantFalcon, TRUE); - break; - case VariantCylinder: - CheckDlgButton(hDlg, OPT_VariantCylinder, TRUE); - break; - case Variant3Check: - CheckDlgButton(hDlg, OPT_Variant3Check, TRUE); - break; - case VariantSuper: - CheckDlgButton(hDlg, OPT_VariantSuper, TRUE); - break; - case VariantBerolina: - CheckDlgButton(hDlg, OPT_VariantBerolina, TRUE); - break; - case VariantJanus: - CheckDlgButton(hDlg, OPT_VariantJanus, TRUE); - break; - case VariantWildCastle: - CheckDlgButton(hDlg, OPT_VariantWildcastle, TRUE); - break; - case VariantNoCastle: - CheckDlgButton(hDlg, OPT_VariantNocastle, TRUE); - break; - case VariantGreat: - CheckDlgButton(hDlg, OPT_VariantGreat, TRUE); - break; - case VariantGiveaway: - CheckDlgButton(hDlg, OPT_VariantGiveaway, TRUE); - break; - case VariantSpartan: - CheckDlgButton(hDlg, OPT_VariantTwilight, TRUE); - break; - case VariantMakruk: - CheckDlgButton(hDlg, OPT_VariantMakruk, TRUE); - break; - case VariantSChess: - CheckDlgButton(hDlg, OPT_VariantSChess, TRUE); - break; - default: ; - } + VariantShowRadio(hDlg); SetDlgItemInt( hDlg, IDC_Files, -1, TRUE ); SendDlgItemMessage( hDlg, IDC_Files, EM_SETSEL, 0, -1 ); @@ -2170,7 +2134,7 @@ ParseCommSettings(char *arg, DCB *dcb) if (cd->label == NULL) goto cant_parse; return; cant_parse: - ExitArgError(_("Can't parse com port settings"), arg); + ExitArgError(_("Can't parse com port settings"), arg, TRUE); } @@ -2553,7 +2517,7 @@ SaveOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) if (IsDlgButtonChecked(hDlg, OPT_Autosave)) { appData.autoSaveGames = TRUE; if (IsDlgButtonChecked(hDlg, OPT_AVPrompt)) { - appData.saveGameFile = ""; + ASSIGN(appData.saveGameFile, ""); // [HGM] make sure value is ALWAYS in allocated memory } else /*if (IsDlgButtonChecked(hDlg, OPT_AVToFile))*/ { GetDlgItemText(hDlg, OPT_AVFilename, buf, MSG_SIZ); if (*buf == NULLCHAR) { @@ -2561,25 +2525,12 @@ SaveOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } - if ((isalpha(buf[0]) && buf[1] == ':') || - (buf[0] == '\\' && buf[1] == '\\')) { - appData.saveGameFile = strdup(buf); - } else { - char buf2[MSG_SIZ], buf3[MSG_SIZ]; - char *dummy; - GetCurrentDirectory(MSG_SIZ, buf3); - SetCurrentDirectory(installDir); - if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) { - appData.saveGameFile = strdup(buf2); - } else { - appData.saveGameFile = strdup(buf); - } - SetCurrentDirectory(buf3); - } + FREE(appData.saveGameFile); + appData.saveGameFile = InterpretFileName(buf, homeDir); } } else { appData.autoSaveGames = FALSE; - appData.saveGameFile = ""; + ASSIGN(appData.saveGameFile, ""); } appData.oldSaveStyle = IsDlgButtonChecked(hDlg, OPT_Old); appData.saveOutOfBookInfo = IsDlgButtonChecked( hDlg, OPT_OutOfBookInfo ); @@ -2888,7 +2839,7 @@ VOID EnginePlayOptionsPopup(HWND hwnd) * UCI Options Dialog functions * \*---------------------------------------------------------------------------*/ -static BOOL BrowseForFolder( const char * title, char * path ) +BOOL BrowseForFolder( const char * title, char * path ) { BOOL result = FALSE; BROWSEINFO bi;