Index: base/applications/calc/lang/en-US.rc =================================================================== --- base/applications/calc/lang/en-US.rc (revision 63714) +++ 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 63714) +++ base/applications/calc/winmain.c (working copy) @@ -225,12 +225,37 @@ static void load_config(void) { - TCHAR buf[32]; DWORD tmp; -#if _WIN32_WINNT >= 0x0500 +#if _WIN32_WINNT >= 0x0500 /* Windows 2000 or later */ HKEY hKey; -#endif + 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 /* Windows 9x */ + 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,11 +267,12 @@ calc.usesep = FALSE; else calc.usesep = (tmp == 1) ? TRUE : FALSE; +#endif /* memory is empty at startup */ calc.is_memory = FALSE; -#if _WIN32_WINNT >= 0x0500 +#if _WIN32_WINNT >= 0x0500 /* Windows 2000 or later */ /* empty these values */ calc.sDecimal[0] = TEXT('\0'); calc.sThousand[0] = TEXT('\0'); @@ -277,7 +303,7 @@ /* get the string lengths */ calc.sDecimal_len = _tcslen(calc.sDecimal); calc.sThousand_len = _tcslen(calc.sThousand); -#else +#else /* Windows 9x */ /* acquire regional settings */ calc.sDecimal_len = GetProfileString(TEXT("intl"), TEXT("sDecimal"), TEXT("."), calc.sDecimal, SIZEOF(calc.sDecimal)); calc.sThousand_len = GetProfileString(TEXT("intl"), TEXT("sThousand"), TEXT(","), calc.sThousand, SIZEOF(calc.sThousand)); @@ -286,11 +312,28 @@ static void save_config(void) { +#if _WIN32_WINNT >= 0x0500 /* Windows 2000 or later */ + 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 /* Windows 9x */ 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) @@ -654,10 +697,36 @@ static void update_menu(HWND hwnd) { - HMENU hMenu = GetSubMenu(GetMenu(hwnd), 1); + HMENU hMenu = GetSubMenu(GetMenu(hwnd), 1); unsigned int x; - for (x=0; x= 0 && calc.y_coord >= 0) { int w, h, sw, sh; @@ -1287,7 +1366,7 @@ case WM_COMMAND: /* * if selection of category is changed, we must - * updatethe content of the "from/to" combo boxes. + * update the content of the "from/to" combo boxes. */ if (wp == MAKEWPARAM(IDC_COMBO_CATEGORY, CBN_SELCHANGE)) { ConvAdjust(hWnd, SendDlgItemMessage(hWnd, IDC_COMBO_CATEGORY, CB_GETCURSEL, 0, 0)); @@ -1312,6 +1391,12 @@ calc.action = IDM_VIEW_STANDARD; DestroyWindow(hWnd); save_config(); + + CheckMenuRadioItem(GetMenu(hWnd), + IDM_VIEW_STANDARD, + IDM_VIEW_CONVERSION, + IDM_VIEW_STANDARD, + MF_BYCOMMAND); return TRUE; case IDM_VIEW_SCIENTIFIC: calc.layout = CALC_LAYOUT_SCIENTIFIC; @@ -1318,6 +1403,12 @@ calc.action = IDM_VIEW_SCIENTIFIC; DestroyWindow(hWnd); save_config(); + + CheckMenuRadioItem(GetMenu(hWnd), + IDM_VIEW_STANDARD, + IDM_VIEW_CONVERSION, + IDM_VIEW_SCIENTIFIC, + MF_BYCOMMAND); return TRUE; case IDM_VIEW_CONVERSION: calc.layout = CALC_LAYOUT_CONVERSION; @@ -1324,6 +1415,12 @@ calc.action = IDM_VIEW_CONVERSION; DestroyWindow(hWnd); save_config(); + + CheckMenuRadioItem(GetMenu(hWnd), + IDM_VIEW_STANDARD, + IDM_VIEW_CONVERSION, + IDM_VIEW_CONVERSION, + MF_BYCOMMAND); return TRUE; case IDM_VIEW_HEX: case IDM_VIEW_DEC: @@ -1715,8 +1812,7 @@ /* ignore hwnd: dialogs are already visible! */ if (calc.layout == CALC_LAYOUT_SCIENTIFIC) dwLayout = IDD_DIALOG_SCIENTIFIC; - else - if (calc.layout == CALC_LAYOUT_CONVERSION) + else if (calc.layout == CALC_LAYOUT_CONVERSION) dwLayout = IDD_DIALOG_CONVERSION; else dwLayout = IDD_DIALOG_STANDARD; Index: boot/bootdata/hivedef.inf =================================================================== --- boot/bootdata/hivedef.inf (revision 63714) +++ boot/bootdata/hivedef.inf (working copy) @@ -1614,6 +1614,11 @@ HKCU,"SOFTWARE\Policies",,0x00000012 HKCU,"SOFTWARE\Microsoft",,0x00000012 +; ReactOS Calculator +HKCU,"SOFTWARE\Microsoft\Calc",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Calc","layout",0x00010001,0x00000001 +HKCU,"SOFTWARE\Microsoft\Calc","UseSep",0x00010001,0x00000001 + ; DirectX version report as DirectX 9.0 HKCU,"SOFTWARE\Microsoft\DirectX","Debug",0x00010001,0x00000000 HKCU,"SOFTWARE\Microsoft\DirectX","InstalledVersion",0x00000001,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00