Author: janderwald Date: Fri Jun 30 00:19:26 2006 New Revision: 22698
URL: http://svn.reactos.org/svn/reactos?rev=22698&view=rev Log: * fix resource inconsistency (pointed out by Lohnegrim) * halfplemented reading console options
Modified: trunk/reactos/dll/win32/console/console.h trunk/reactos/dll/win32/console/console.rc trunk/reactos/dll/win32/console/options.c
Modified: trunk/reactos/dll/win32/console/console.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/console/console.h... ============================================================================== --- trunk/reactos/dll/win32/console/console.h (original) +++ trunk/reactos/dll/win32/console/console.h Fri Jun 30 00:19:26 2006 @@ -6,6 +6,8 @@ #include <windows.h> #include <commctrl.h> #include <cpl.h> +#include <tchar.h> +#include <stdio.h> #include "resource.h"
typedef struct @@ -16,4 +18,18 @@ APPLET_PROC AppletProc; } APPLET, *PAPPLET;
+typedef struct TAGConsoleInfo +{ + DWORD CursorSize; + DWORD NumberOfHistoryBuffers; + DWORD HistoryBufferSize; + DWORD HistoryNoDup; + DWORD FullScreen; + DWORD QuickEdit; + DWORD InsertMode; + +} ConsoleInfo, *PConsoleInfo; + +extern ConsoleInfo g_ConsoleInfo; + #endif /* CONSOLE_H__ */
Modified: trunk/reactos/dll/win32/console/console.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/console/console.r... ============================================================================== --- trunk/reactos/dll/win32/console/console.rc (original) +++ trunk/reactos/dll/win32/console/console.rc Fri Jun 30 00:19:26 2006 @@ -13,7 +13,7 @@
#define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Control Panel Console Applet\0" -#define REACTOS_STR_INTERNAL_NAME "powercfg\0" +#define REACTOS_STR_INTERNAL_NAME "console\0" #define REACTOS_STR_ORIGINAL_FILENAME "console.dll\0" #include <reactos/version.rc>
Modified: trunk/reactos/dll/win32/console/options.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/console/options.c... ============================================================================== --- trunk/reactos/dll/win32/console/options.c (original) +++ trunk/reactos/dll/win32/console/options.c Fri Jun 30 00:19:26 2006 @@ -10,6 +10,10 @@ #include "console.h"
+ConsoleInfo g_ConsoleInfo; + +BOOLEAN InitializeOptionsDialog(); + INT_PTR CALLBACK OptionsProc( @@ -22,7 +26,7 @@ switch(uMsg) { case WM_INITDIALOG: - return TRUE; + return InitializeOptionsDialog(hwndDlg);
default: break; @@ -30,3 +34,194 @@
return FALSE; } + +BOOL InitializeOptionsFromReg(TCHAR * Path) +{ + HKEY hKey; + HKEY hSubKey; + DWORD dwNumSubKeys = 0; + DWORD dwIndex; + DWORD dwValueName; + DWORD dwBufferSize; + TCHAR szValueName[MAX_PATH]; + BYTE szBuffer[MAX_PATH]; + + if ( RegOpenCurrentUser(KEY_READ, &hKey) != ERROR_SUCCESS ) + return FALSE; + + + if ( RegOpenKeyEx(hKey, Path, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return FALSE; + } + + RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwNumSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); + + for (dwIndex = 0; dwIndex < dwNumSubKeys; dwIndex++) + { + dwBufferSize = MAX_PATH; + dwValueName = MAX_PATH; + + if ( RegEnumValue(hSubKey, dwIndex, szValueName, &dwValueName, NULL, NULL, szBuffer, &dwBufferSize) != ERROR_SUCCESS) + break; + + if ( !_tcscmp(szValueName, _T("CursorSize")) ) + { + int val = _ttoi((TCHAR*)szBuffer); + if ( val == 0x32) + g_ConsoleInfo.CursorSize = val; + else if ( val == 0x64 ) + g_ConsoleInfo.CursorSize = val; + } + else if ( !_tcscmp(szValueName, _T("NumberOfHistoryBuffers")) ) + { + int val = _ttoi((TCHAR*)szBuffer); + g_ConsoleInfo.NumberOfHistoryBuffers = val; + } + else if ( !_tcscmp(szValueName, _T("HistoryBufferSize")) ) + { + int val = _ttoi((TCHAR*)szBuffer); + g_ConsoleInfo.HistoryBufferSize = val; + } + else if ( !_tcscmp(szValueName, _T("HistoryNoDup")) ) + { + int val = _ttoi((TCHAR*)szBuffer); + g_ConsoleInfo.HistoryNoDup = val; + } + else if ( !_tcscmp(szValueName, _T("FullScreen")) ) + { + int val = _ttoi((TCHAR*)szBuffer); + g_ConsoleInfo.FullScreen = val; + } + else if ( !_tcscmp(szValueName, _T("QuickEdit")) ) + { + int val = _ttoi((TCHAR*)szBuffer); + g_ConsoleInfo.QuickEdit = val; + } + else if ( !_tcscmp(szValueName, _T("InsertMode")) ) + { + int val = _ttoi((TCHAR*)szBuffer); + g_ConsoleInfo.InsertMode = val; + } + } + + RegCloseKey(hKey); + RegCloseKey(hSubKey); + return TRUE; +} + +void +UpdateDialogElements(HWND hwndDlg) +{ + HWND hDlgCtrl; + TCHAR szBuffer[MAX_PATH]; + + /* update cursor size */ + if ( g_ConsoleInfo.CursorSize == 0 ) + { + /* small cursor */ + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); + } + else if ( g_ConsoleInfo.CursorSize == 0x32 ) + { + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); + } + else if ( g_ConsoleInfo.CursorSize == 0x64 ) + { + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0); + } + + /* update num buffers */ + hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_NUM_BUFFER); + _stprintf(szBuffer, _T("%d"), g_ConsoleInfo.NumberOfHistoryBuffers); + SendMessage(hDlgCtrl, WM_SETTEXT, 0, (LPARAM)szBuffer); + + /* update buffer size */ + hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_BUFFER_SIZE); + _stprintf(szBuffer, _T("%d"), g_ConsoleInfo.HistoryBufferSize); + SendMessage(hDlgCtrl, WM_SETTEXT, 0, (LPARAM)szBuffer); + + /* update discard duplicates */ + hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_DISCARD_DUPLICATES); + if ( g_ConsoleInfo.HistoryNoDup ) + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + else + SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0); + + /* update full/window screen */ + if ( g_ConsoleInfo.FullScreen ) + { + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_FULL); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_WINDOW); + SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0); + } + else + { + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_WINDOW); + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + + hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_FULL); + SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0); + } + + /* update quick edit */ + hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_QUICK_EDIT); + if ( g_ConsoleInfo.QuickEdit ) + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + else + SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0); + + /* update insert mode */ + hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_INSERT_MODE); + if ( g_ConsoleInfo.InsertMode ) + SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); + else + SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0); +} + + +BOOLEAN InitializeOptionsDialog(HWND hwndDlg) +{ + STARTUPINFO StartupInfo; + + GetStartupInfo(&StartupInfo); + + if ( StartupInfo.lpTitle ) + { + if ( InitializeOptionsFromReg(StartupInfo.lpTitle) ) + { + UpdateDialogElements(hwndDlg); + return TRUE; + } + //TODO + // + // Windows XP uses unexpanded environment vars to get path + // i.e. c:\windows\system32\cmd.exe + // becomes + // %SystemRoot%_system32_cmd.exe + + } + + return TRUE; +}