Index: base/applications/calc/lang/en-US.rc =================================================================== --- base/applications/calc/lang/en-US.rc (revision 65632) +++ base/applications/calc/lang/en-US.rc (working copy) @@ -330,8 +330,8 @@ END POPUP "View" BEGIN - MENUITEM "Standard", IDM_VIEW_STANDARD, CHECKED - MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC, CHECKED + MENUITEM "Standard", IDM_VIEW_STANDARD + MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC MENUITEM "Conversion", IDM_VIEW_CONVERSION MENUITEM SEPARATOR MENUITEM "Hex\tF5", IDM_VIEW_HEX, CHECKED @@ -362,8 +362,8 @@ END POPUP "View" BEGIN - MENUITEM "Standard", IDM_VIEW_STANDARD, CHECKED - MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC, CHECKED + MENUITEM "Standard", IDM_VIEW_STANDARD + MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC MENUITEM "Conversion", IDM_VIEW_CONVERSION MENUITEM SEPARATOR MENUITEM "Hex\tF5", IDM_VIEW_HEX, CHECKED @@ -395,8 +395,8 @@ END POPUP "View" BEGIN - MENUITEM "Standard", IDM_VIEW_STANDARD, CHECKED - MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC, CHECKED + MENUITEM "Standard", IDM_VIEW_STANDARD + MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC MENUITEM "Conversion", IDM_VIEW_CONVERSION MENUITEM SEPARATOR MENUITEM "Group digits", IDM_VIEW_GROUP, CHECKED Index: base/applications/calc/winmain.c =================================================================== --- base/applications/calc/winmain.c (revision 65632) +++ base/applications/calc/winmain.c (working copy) @@ -225,12 +225,36 @@ static void load_config(void) { - TCHAR buf[32]; DWORD tmp; #if _WIN32_WINNT >= 0x0500 HKEY hKey; #endif + /* Get the configuration based on what version of Windows that's being used */ +#if _WIN32_WINNT >= 0x0500 + if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Calc"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { + /* Try to load last selected layout */ + tmp = sizeof(calc.layout); + if (RegQueryValueEx(hKey, TEXT("layout"), NULL, NULL, (LPBYTE)&calc.layout, &tmp) != ERROR_SUCCESS) + calc.layout = CALC_LAYOUT_STANDARD; + + /* Try to load last selected formatting option */ + tmp = sizeof(calc.usesep); + if (RegQueryValueEx(hKey, TEXT("UseSep"), NULL, NULL, (LPBYTE)&calc.usesep, &tmp) != ERROR_SUCCESS) + calc.usesep = FALSE; + + /* close the key */ + RegCloseKey(hKey); + } + else + { + /* If no settings are found in the registry, then use the default options */ + calc.layout = CALC_LAYOUT_STANDARD; + calc.usesep = FALSE; + } +#else + TCHAR buf[32]; /* Try to load last selected layout */ GetProfileString(TEXT("SciCalc"), TEXT("layout"), TEXT("0"), buf, SIZEOF(buf)); if (_stscanf(buf, TEXT("%lu"), &calc.layout) != 1) @@ -242,6 +266,7 @@ calc.usesep = FALSE; else calc.usesep = (tmp == 1) ? TRUE : FALSE; +#endif /* memory is empty at startup */ calc.is_memory = FALSE; @@ -252,11 +277,8 @@ calc.sThousand[0] = TEXT('\0'); /* try to open the registry */ - if (RegOpenKeyEx(HKEY_CURRENT_USER, - TEXT("Control Panel\\International"), - 0, - KEY_QUERY_VALUE, - &hKey) == ERROR_SUCCESS) { + if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\International"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { /* get these values (ignore errors) */ tmp = sizeof(calc.sDecimal); RegQueryValueEx(hKey, TEXT("sDecimal"), NULL, NULL, (LPBYTE)calc.sDecimal, &tmp); @@ -286,11 +308,25 @@ static void save_config(void) { +#if _WIN32_WINNT >= 0x0500 + HKEY hKey; + + if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Calc"), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS ) + { + DWORD sepValue = (calc.usesep) ? 1 : 0; + + RegSetValueEx(hKey, TEXT("layout"), 0, REG_DWORD, (const BYTE*)&calc.layout, sizeof(calc.layout)); + RegSetValueEx(hKey, TEXT("UseSep"), 0, REG_DWORD, (const BYTE*)&sepValue, sizeof(sepValue)); + + RegCloseKey(hKey); + } +#else TCHAR buf[32]; _stprintf(buf, TEXT("%lu"), calc.layout); WriteProfileString(TEXT("SciCalc"), TEXT("layout"), buf); WriteProfileString(TEXT("SciCalc"), TEXT("UseSep"), (calc.usesep==TRUE) ? TEXT("1") : TEXT("0")); +#endif } static LRESULT post_key_press(LPARAM lParam, WORD idc) @@ -657,7 +693,33 @@ HMENU hMenu = GetSubMenu(GetMenu(hwnd), 1); unsigned int x; - for (x=0; x