[MSCONFIG_NEW]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 20 Oct 2015 21:57:36 +0000 (21:57 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Tue, 20 Oct 2015 21:57:36 +0000 (21:57 +0000)
- Add some file utility functions, they will be used later for managing the startup programs.
- Half-plement the general page controls.
- Simplify some code; fix file headers; remove the old toolspage.c (replaced by its c++ equivalent).
CORE-9333

svn path=/trunk/; revision=69630

reactos/base/applications/msconfig_new/CMakeLists.txt
reactos/base/applications/msconfig_new/fileutils.c [new file with mode: 0644]
reactos/base/applications/msconfig_new/fileutils.h [new file with mode: 0644]
reactos/base/applications/msconfig_new/generalpage.c
reactos/base/applications/msconfig_new/generalpage.h
reactos/base/applications/msconfig_new/msconfig.c
reactos/base/applications/msconfig_new/toolspage.c [deleted file]
reactos/base/applications/msconfig_new/toolspage.cpp
reactos/base/applications/msconfig_new/toolspage.h
reactos/base/applications/msconfig_new/utils.c
reactos/base/applications/msconfig_new/utils.h

index 14d2b5d..aea1d2b 100644 (file)
@@ -10,11 +10,11 @@ include_directories(
 
 list(APPEND C_SOURCE
     comctl32ex/listviewfuncs.c
-    # toolspage.c
     # srvpage.c
     # systempage.c
     # startuppage.c
     # freeldrpage.c
+    fileutils.c
     generalpage.c
     msconfig.c
     stringutils.c
diff --git a/reactos/base/applications/msconfig_new/fileutils.c b/reactos/base/applications/msconfig_new/fileutils.c
new file mode 100644 (file)
index 0000000..c07d4ec
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * PROJECT:     ReactOS Applications
+ * LICENSE:     LGPL - See COPYING in the top level directory
+ * FILE:        base/applications/msconfig_new/fileutils.c
+ * PURPOSE:     File Utility Functions
+ * COPYRIGHT:   Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
+ */
+
+#include "precomp.h"
+#include "utils.h"
+#include "fileutils.h"
+
+//
+// NOTE: A function called "FileExists" with the very same prototype
+// already exists in the PSDK headers (in setupapi.h)
+//
+BOOL
+MyFileExists(IN  LPCWSTR           lpszFilePath,
+             OUT PWIN32_FIND_DATAW pFindData OPTIONAL)
+{
+    BOOL             bIsFound = FALSE;
+    WIN32_FIND_DATAW find_data;
+
+    DWORD  dwNumOfChars;
+    LPWSTR lpszCmdLine;
+    HANDLE search;
+
+    dwNumOfChars = ExpandEnvironmentStringsW(lpszFilePath, NULL, 0);
+    lpszCmdLine  = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
+    ExpandEnvironmentStringsW(lpszFilePath, lpszCmdLine, dwNumOfChars);
+
+    search = FindFirstFileW(lpszCmdLine, &find_data);
+    MemFree(lpszCmdLine);
+
+    bIsFound = (search != INVALID_HANDLE_VALUE);
+
+    FindClose(search);
+
+    if (bIsFound && pFindData)
+        *pFindData = find_data;
+
+    return bIsFound;
+}
+
+LRESULT
+FileQueryFiles(IN LPCWSTR Path,
+               IN LPCWSTR FileNamesQuery,
+               IN PQUERY_FILES_TABLE QueryTable,
+               IN PVOID   Context)
+{
+    LRESULT          res = ERROR_SUCCESS;
+    WIN32_FIND_DATAW find_data;
+
+    LPWSTR lpszQuery;
+    DWORD  dwNumOfChars;
+    LPWSTR lpszExpandedQuery;
+    HANDLE search;
+
+    lpszQuery = (LPWSTR)MemAlloc(0, (wcslen(Path) + 1 + wcslen(FileNamesQuery) + 1) * sizeof(WCHAR));
+    wcscpy(lpszQuery, Path);
+    wcscat(lpszQuery, L"\\");
+    wcscat(lpszQuery, FileNamesQuery);
+
+    dwNumOfChars      = ExpandEnvironmentStringsW(lpszQuery, NULL, 0);
+    lpszExpandedQuery = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
+    ExpandEnvironmentStringsW(lpszQuery, lpszExpandedQuery, dwNumOfChars);
+    MemFree(lpszQuery);
+
+    search = FindFirstFileW(lpszExpandedQuery, &find_data);
+    if (search != INVALID_HANDLE_VALUE)
+    {
+        do
+        {
+            PQUERY_FILES_TABLE pTable = QueryTable;
+            while (pTable && pTable->QueryRoutine)
+            {
+                pTable->QueryRoutine(Path, FileNamesQuery, lpszExpandedQuery, &find_data, Context, pTable->EntryContext);
+                ++pTable;
+            }
+        } while (/*res = */ FindNextFileW(search, &find_data));
+    }
+    else
+        res = ERROR_NO_MORE_FILES;
+
+    FindClose(search);
+
+    MemFree(lpszExpandedQuery);
+
+    return res;
+}
diff --git a/reactos/base/applications/msconfig_new/fileutils.h b/reactos/base/applications/msconfig_new/fileutils.h
new file mode 100644 (file)
index 0000000..4fffa5f
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * PROJECT:     ReactOS Applications
+ * LICENSE:     LGPL - See COPYING in the top level directory
+ * FILE:        base/applications/msconfig_new/fileutils.h
+ * PURPOSE:     File Utility Functions
+ * COPYRIGHT:   Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
+ */
+
+#ifndef __FILEUTILS_H__
+#define __FILEUTILS_H__
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//
+// NOTE: A function called "FileExists" with the very same prototype
+// already exists in the PSDK headers (in setupapi.h)
+//
+BOOL
+MyFileExists(IN  LPCWSTR           lpszFilePath,
+             OUT PWIN32_FIND_DATAW pFindData OPTIONAL);
+
+////////////////////////////////////////////////////////////////////////////////
+typedef LRESULT
+(*PQUERY_FILES_TABLE_ROUTINE)(IN LPCWSTR Path,
+                              IN LPCWSTR FileNamesQuery,
+                              IN LPCWSTR ExpandedFileNamesQuery,
+                              IN PWIN32_FIND_DATAW pfind_data,
+                              IN PVOID   Context,
+                              IN PVOID   EntryContext);
+
+#define QUERY_FILES_TABLE_ROUTINE(fnName)               \
+    LRESULT (fnName)(IN LPCWSTR Path,                   \
+                     IN LPCWSTR FileNamesQuery,         \
+                     IN LPCWSTR ExpandedFileNamesQuery, \
+                     IN PWIN32_FIND_DATAW pfind_data,   \
+                     IN PVOID   Context,                \
+                     IN PVOID   EntryContext)
+
+typedef struct __tagQUERY_FILES_TABLE
+{
+    PQUERY_FILES_TABLE_ROUTINE QueryRoutine;
+    PVOID EntryContext;
+    // Other fields ?
+} QUERY_FILES_TABLE, *PQUERY_FILES_TABLE;
+
+LRESULT
+FileQueryFiles(IN LPCWSTR Path,
+               IN LPCWSTR FileNamesQuery,
+               IN PQUERY_FILES_TABLE QueryTable,
+               IN PVOID   Context);
+
+////////////////////////////////////////////////////////////////////////////////
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // __FILEUTILS_H__
index 0d9920c..3896c7f 100644 (file)
@@ -4,17 +4,21 @@
  * FILE:        base/applications/msconfig_new/generalpage.c
  * PURPOSE:     General page message handler
  * COPYRIGHT:   Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
- *
+ *              Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
  */
 
 #include "precomp.h"
+#include "fileutils.h"
+#include "utils.h"
+#include "commctrldefs.h"
 
-// static LPCWSTR lpszRestoreProgPath1 = L"%SystemRoot%\\System32\\rstrui.exe";
-// static LPCWSTR lpszRestoreProgPath2 = L"%SystemRoot%\\System32\\restore\\rstrui.exe";
+static LPCWSTR lpszRestoreProgPath1 = L"%SystemRoot%\\System32\\rstrui.exe";
+static LPCWSTR lpszRestoreProgPath2 = L"%SystemRoot%\\System32\\restore\\rstrui.exe";
 
-HWND hGeneralPage;
+static HWND hGeneralPage       = NULL;
+static BOOL bIsOriginalBootIni    = TRUE;
+static BOOL bIsStartupNotModified = TRUE;
 
-#if 0 // TODO: Will be used later on...
 static VOID EnableSelectiveStartupControls(BOOL bEnable)
 {
     assert(hGeneralPage);
@@ -45,7 +49,6 @@ static VOID CheckSelectiveStartupControls(BOOL bCheck)
 
     return;
 }
-#endif
 
 INT_PTR CALLBACK
 GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
@@ -57,7 +60,14 @@ GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
         case WM_INITDIALOG:
         {
             hGeneralPage = hDlg;
-            PropSheet_UnChanged(hMainWnd, hGeneralPage);
+            PropSheet_UnChanged(GetParent(hGeneralPage), hGeneralPage);
+
+            /* Search for the restore program and enable its button if needed */
+            if ( MyFileExists(lpszRestoreProgPath1, NULL) ||
+                 MyFileExists(lpszRestoreProgPath2, NULL) )
+                Button_Enable(GetDlgItem(hGeneralPage, IDC_BTN_SYSTEM_RESTORE_START), TRUE);
+            else
+                Button_Enable(GetDlgItem(hGeneralPage, IDC_BTN_SYSTEM_RESTORE_START), FALSE);
 
 #if 0
             /* FIXME */
@@ -67,6 +77,141 @@ GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 
             return TRUE;
         }
+
+        case WM_COMMAND:
+        {
+            switch (LOWORD(wParam))
+            {
+                case IDC_RB_NORMAL_STARTUP:
+                {
+                    /* Be sure that only this button is activated and the others are not */
+                    CheckRadioButton(hGeneralPage, IDC_RB_NORMAL_STARTUP, IDC_RB_SELECTIVE_STARTUP, IDC_RB_NORMAL_STARTUP);
+
+                    bIsOriginalBootIni = TRUE;
+                    EnableSelectiveStartupControls(FALSE);
+                    CheckSelectiveStartupControls(TRUE);
+
+                    Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), (bIsOriginalBootIni ? BST_CHECKED : BST_UNCHECKED));
+
+                    PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage);
+                    break;
+                }
+
+                case IDC_RB_DIAGNOSTIC_STARTUP:
+                {
+                    /* Be sure that only this button is activated and the others are not */
+                    CheckRadioButton(hGeneralPage, IDC_RB_NORMAL_STARTUP, IDC_RB_SELECTIVE_STARTUP, IDC_RB_DIAGNOSTIC_STARTUP);
+
+                    EnableSelectiveStartupControls(FALSE);
+                    CheckSelectiveStartupControls(FALSE);
+
+                    PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage);
+                    break;
+                }
+
+                case IDC_RB_SELECTIVE_STARTUP:
+                {
+                    /* Be sure that only this button is activated and the others are not */
+                    CheckRadioButton(hGeneralPage, IDC_RB_NORMAL_STARTUP, IDC_RB_SELECTIVE_STARTUP, IDC_RB_SELECTIVE_STARTUP);
+
+                    EnableSelectiveStartupControls(TRUE);
+                    PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage);
+
+                    break;
+                }
+
+                case IDC_CBX_USE_ORIGINAL_BOOTCFG:
+                {
+                    bIsOriginalBootIni = TRUE;
+
+                    Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), (bIsOriginalBootIni ? BST_CHECKED : BST_UNCHECKED));
+                    EnableWindow(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), !bIsOriginalBootIni /*FALSE*/);
+
+                    PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage);
+
+                    break;
+                }
+
+                case IDC_BTN_SYSTEM_RESTORE_START:
+                {
+                    // NOTE: 'err' variable defined for debugging purposes only.
+                    DWORD err = RunCommand(lpszRestoreProgPath1, NULL, SW_SHOW);
+                    if (err == ERROR_FILE_NOT_FOUND)
+                        err = RunCommand(lpszRestoreProgPath2, NULL, SW_SHOW);
+
+                    break;
+                }
+
+                // case IDC_BTN_FILE_EXTRACTION:
+                    // DialogBox(hInst, MAKEINTRESOURCE(IDD_FILE_EXTRACT_DIALOG), hGeneralPage /* GetParent(hGeneralPage) */, FileExtractDialogWndProc);
+                    // break;
+
+                default:
+                    //break;
+                    return FALSE;
+            }
+            break;
+        }
+
+        case WM_NOTIFY:
+        {
+            switch (((LPNMHDR)lParam)->code)
+            {
+                case PSN_APPLY:
+                {
+                    // TODO: Try to apply the modifications to the system.
+                    PropSheet_UnChanged(GetParent(hGeneralPage), hGeneralPage);
+                    return TRUE;
+                }
+
+                case PSN_HELP:
+                {
+                    MessageBoxW(hGeneralPage, L"Help not implemented yet!", L"Help", MB_ICONINFORMATION | MB_OK);
+                    return TRUE;
+                }
+                
+                case PSN_KILLACTIVE: // Is going to lose activation.
+                {
+                    // Changes are always valid of course.
+                    SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT, FALSE);
+                    return TRUE;
+                }
+
+                case PSN_QUERYCANCEL:
+                {
+                    // Allows cancellation.
+                    SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT, FALSE);
+                    return TRUE;
+                }
+
+                case PSN_QUERYINITIALFOCUS:
+                {
+                    // SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT,
+                    //                  (LONG_PTR)GetDlgItem(hGeneralPage, (bIsOriginalBootIni ? IDC_RB_NORMAL_STARTUP : IDC_RB_SELECTIVE_STARTUP)));
+                    return TRUE;
+                }
+
+                //
+                // DO NOT TOUCH THESE NEXT MESSAGES, THEY ARE OK LIKE THIS...
+                //
+                case PSN_RESET: // Perform final cleaning, called before WM_DESTROY.
+                    return TRUE;
+
+                case PSN_SETACTIVE: // Is going to gain activation.
+                {
+                    SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT, 0);
+                    return TRUE;
+                }
+
+                default:
+                    break;
+            }
+
+            return FALSE;
+        }
+
+        default:
+            return FALSE;
     }
 
     return FALSE;
index d575ec8..5ac2f01 100644 (file)
@@ -1,8 +1,15 @@
+/*
+ * PROJECT:     ReactOS Applications
+ * LICENSE:     LGPL - See COPYING in the top level directory
+ * FILE:        base/applications/msconfig_new/generalpage.c
+ * PURPOSE:     General page message handler
+ * COPYRIGHT:   Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
+ *              Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
+ */
+
 #ifndef _GENERALPAGE_H_
 #define _GENERALPAGE_H_
 
-extern HWND hGeneralPage;
-
 INT_PTR CALLBACK GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
 
 #endif /* _GENERALPAGE_H_ */
index 4b5ebca..7b459c8 100644 (file)
@@ -116,7 +116,7 @@ INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 }
 
 
-/* Message handler for dialog box. */
+/* Message handler for dialog box */
 LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
 {
     switch (uMessage)
diff --git a/reactos/base/applications/msconfig_new/toolspage.c b/reactos/base/applications/msconfig_new/toolspage.c
deleted file mode 100644 (file)
index 9b6e50c..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * PROJECT:     ReactOS Applications
- * LICENSE:     LGPL - See COPYING in the top level directory
- * FILE:        base/applications/msconfig_new/toolspage.c
- * PURPOSE:     Tools page message handler
- * COPYRIGHT:   Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
- *
- */
-
-#include "precomp.h"
-
-#include <shlwapi.h>
-
-HWND hToolsPage;
-HWND hToolsListCtrl;
-HWND hToolsDialog;
-
-void AddItem ( DWORD, DWORD, DWORD, DWORD, int );
-void FillListView ( void );
-
-DWORD ListItems_Cmds[20];
-DWORD ListItems_Params[20];
-DWORD ListItems_Locations[20];
-
-void AddItem ( DWORD name_id, DWORD descr_id, DWORD cmd_id , DWORD param_id, int csidl ) {
-    TCHAR szTemp[256];
-    LV_ITEM item;
-
-    LoadString(hInst, name_id, szTemp, 256);
-    memset(&item, 0, sizeof(LV_ITEM));
-    item.mask = LVIF_TEXT;
-    item.iImage = 0;
-    item.pszText = szTemp;
-    item.iItem = ListView_GetItemCount(hToolsListCtrl);
-    item.lParam = 0;
-    (void)ListView_InsertItem(hToolsListCtrl, &item);
-
-    ListItems_Cmds[item.iItem] = cmd_id;
-    ListItems_Params[item.iItem] = param_id;
-    ListItems_Locations[item.iItem] = csidl;
-
-    LoadString(hInst, descr_id, szTemp, 256);
-    item.pszText = szTemp;
-    item.iSubItem = 1;
-    SendMessage(hToolsListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
-}
-
-void FillListView ( void ) {
-    AddItem(IDS_TOOLS_CMD_NAME, IDS_TOOLS_CMD_DESCR, IDS_TOOLS_CMD_CMD, IDS_TOOLS_CMD_PARAM, CSIDL_SYSTEM);
-    AddItem(IDS_TOOLS_REGEDIT_NAME, IDS_TOOLS_REGEDIT_DESCR, IDS_TOOLS_REGEDIT_CMD,IDS_TOOLS_REGEDIT_PARAM, CSIDL_WINDOWS);
-    AddItem(IDS_TOOLS_SYSDM_NAME, IDS_TOOLS_SYSDM_DESCR, IDS_TOOLS_SYSDM_CMD, IDS_TOOLS_SYSDM_PARAM, CSIDL_SYSTEM);
-    AddItem(IDS_TOOLS_INFO_NAME, IDS_TOOLS_INFO_DESCR, IDS_TOOLS_INFO_CMD, IDS_TOOLS_INFO_PARAM, CSIDL_SYSTEM);
-}
-
-INT_PTR CALLBACK
-ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-    LV_COLUMN   column;
-    TCHAR       szTemp[MAX_PATH*2];
-    TCHAR       szTemp2[256];
-    TCHAR * Ptr = NULL;
-    LPNMITEMACTIVATE lpnmitem;
-    LPNMHDR nmh;
-    DWORD dwStyle;
-    PROCESS_INFORMATION pi;
-    STARTUPINFO si;
-
-    switch (message)
-    {
-        case WM_INITDIALOG:
-        {
-            hToolsListCtrl = GetDlgItem(hDlg, IDC_TOOLS_LIST);
-            hToolsDialog = hDlg;
-
-            dwStyle = (DWORD) SendMessage(hToolsListCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
-            dwStyle = dwStyle | LVS_EX_FULLROWSELECT;
-            SendMessage(hToolsListCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
-
-            SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
-
-            // Initialize the application page's controls
-            column.mask = LVCF_TEXT | LVCF_WIDTH;
-
-            LoadString(hInst, IDS_TOOLS_COLUMN_NAME, szTemp, 256);
-            column.pszText = szTemp;
-            column.cx = 150;
-            (void)ListView_InsertColumn(hToolsListCtrl, 0, &column);
-
-            column.mask = LVCF_TEXT | LVCF_WIDTH;
-            LoadString(hInst, IDS_TOOLS_COLUMN_DESCR, szTemp, 256);
-            column.pszText = szTemp;
-            column.cx = 500;
-            (void)ListView_InsertColumn(hToolsListCtrl, 1, &column);
-
-            FillListView();
-            return TRUE;
-        }
-    case WM_COMMAND:
-        {
-            switch (LOWORD(wParam))
-            {
-                case IDC_BTN_RUN:
-                {
-                    if (ListView_GetSelectionMark(hToolsListCtrl) != -1)
-                    {
-                        if (SHGetSpecialFolderPath(NULL, szTemp, ListItems_Locations[ListView_GetSelectionMark(hToolsListCtrl)], FALSE))
-                            Ptr = PathAddBackslash(szTemp);
-    
-                        if (!Ptr)
-                            Ptr = szTemp;
-
-                        szTemp2[0] = _T('\0');
-                        LoadString(hInst, ListItems_Cmds[ListView_GetSelectionMark(hToolsListCtrl)], Ptr, 256);
-                        LoadString(hInst, ListItems_Params[ListView_GetSelectionMark(hToolsListCtrl)], szTemp2, 256);
-                        if (_tcslen(szTemp2))
-                        {
-                           _tcscat(szTemp, _T(" "));
-                           _tcscat(Ptr, szTemp2);
-                        }
-                        ZeroMemory(&si, sizeof(STARTUPINFO));
-                        si.cb = sizeof(STARTUPINFO);
-                        if (CreateProcess(NULL, szTemp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
-                        {
-                            CloseHandle(pi.hThread);
-                            CloseHandle(pi.hProcess);
-                        }
-                    }
-                }
-            }
-            break;
-        }
-        case WM_NOTIFY:
-        {
-            nmh = (LPNMHDR) lParam;
-            if (nmh->hwndFrom == hToolsListCtrl)
-            {
-                switch (nmh->code)
-                {
-                    case LVN_ITEMCHANGED:
-                    {
-                        lpnmitem = (LPNMITEMACTIVATE) lParam;
-                        if (lpnmitem->iItem > -1)
-                        {
-                            LoadString(hInst, ListItems_Cmds[lpnmitem->iItem], szTemp, 256);
-                            szTemp2[0] = _T('\0');
-                            LoadString(hInst, ListItems_Params[lpnmitem->iItem], szTemp2, 256);
-                            _tcscat(szTemp, _T(" "));
-                            _tcscat(szTemp, szTemp2);
-                            SendDlgItemMessage(hToolsDialog, IDC_TOOLS_CMDLINE, WM_SETTEXT, 0, (LPARAM) szTemp);
-                        }
-                        break;
-                    }
-                    case NM_DBLCLK:
-                    {
-                        lpnmitem = (LPNMITEMACTIVATE) lParam;
-                        if (lpnmitem->iItem > -1)
-                        {
-                            if (SHGetSpecialFolderPath(NULL, szTemp, ListItems_Locations[ListView_GetSelectionMark(hToolsListCtrl)], FALSE))
-                                Ptr = PathAddBackslash(szTemp);
-    
-                            if (!Ptr)
-                                Ptr = szTemp;
-
-                            szTemp2[0] = _T('\0');
-                            LoadString(hInst, ListItems_Cmds[lpnmitem->iItem], Ptr, 256);
-                            LoadString(hInst, ListItems_Params[lpnmitem->iItem], szTemp2, 256);
-                            if (_tcslen(szTemp2))
-                            {
-                                _tcscat(szTemp, _T(" "));
-                                _tcscat(Ptr, szTemp2);
-                            }
-                            ZeroMemory(&si, sizeof(STARTUPINFO));
-                            si.cb = sizeof(STARTUPINFO);
-                            if (CreateProcess(NULL, szTemp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
-                            {
-                                CloseHandle(pi.hThread);
-                                CloseHandle(pi.hProcess);
-                            }
-                        }
-                        break;
-                    }
-                }
-        }
-        }
-        break;
-    }
-    return 0;
-}
-
index 6838bcc..bf1b894 100644 (file)
@@ -16,7 +16,7 @@ static HWND hToolsPage     = NULL;
 static HWND hToolsListCtrl = NULL;
 static int  iSortedColumn  = 0;
 
-typedef struct TOOL
+struct TOOL
 {
     TOOL(const _bstr_t& Command,
          const _bstr_t& DefParam,
@@ -37,8 +37,7 @@ typedef struct TOOL
     _bstr_t m_Command;
     _bstr_t m_DefParam;
     _bstr_t m_AdvParam;
-
-} *PTOOL;
+};
 
 static void AddTool(IXMLDOMElement*, BOOL);
 
@@ -120,7 +119,7 @@ ParseToolsList(IXMLDOMDocument* pXMLDom, BOOL bIsStandard)
 }
 
 static void
-AddItem(BOOL bIsStandard, const _bstr_t& name, const _bstr_t& descr, PTOOL tool)
+AddItem(BOOL bIsStandard, const _bstr_t& name, const _bstr_t& descr, TOOL* tool)
 {
     LPTSTR lpszStandard;
     LVITEM item = {};
@@ -155,7 +154,7 @@ AddItem(BOOL bIsStandard, const _bstr_t& name, const _bstr_t& descr, PTOOL tool)
 static void
 AddTool(IXMLDOMElement* pXMLTool, BOOL bIsStandard)
 {
-    PTOOL tool;
+    TOOL* tool;
     _variant_t varLocID, varName, varPath,
                varDefOpt, varAdvOpt, varHelp;
 
@@ -234,7 +233,7 @@ BuildCommandLine(LPWSTR lpszDest, LPCWSTR lpszCmdLine, LPCWSTR lpszParam, size_t
 
 static void Update_States(int iSelectedItem)
 {
-    PTOOL tool;
+    TOOL* tool;
     LVITEM item = {};
 
     assert(hToolsPage);
@@ -246,7 +245,7 @@ static void Update_States(int iSelectedItem)
     {
         LPTSTR lpszCmdLine = NULL;
         size_t numOfChars  = 0;
-        tool = reinterpret_cast<PTOOL>(item.lParam);
+        tool = reinterpret_cast<TOOL*>(item.lParam);
 
         ListView_EnsureVisible(hToolsListCtrl, item.iItem, FALSE);
 
@@ -308,7 +307,7 @@ static BOOL RunSelectedTool(VOID)
             bUseAdvParams = FALSE;
 
         // Values greater (strictly) than 32 indicate success (see MSDN documentation for ShellExecute(...) API).
-        bRetVal = (reinterpret_cast<PTOOL>(item.lParam)->Run(bUseAdvParams) > 32);
+        bRetVal = (reinterpret_cast<TOOL*>(item.lParam)->Run(bUseAdvParams) > 32);
     }
 
     return bRetVal;
@@ -386,7 +385,7 @@ ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 
                 ListView_GetItem(hToolsListCtrl, &lvitem);
 
-                delete reinterpret_cast<PTOOL>(lvitem.lParam);
+                delete reinterpret_cast<TOOL*>(lvitem.lParam);
                 lvitem.lParam = NULL;
             }
             ListView_DeleteAllItems(hToolsListCtrl);
@@ -418,16 +417,16 @@ ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 
         case WM_NOTIFY:
         {
-            if (reinterpret_cast<LPNMHDR>(lParam)->hwndFrom == hToolsListCtrl)
+            if (((LPNMHDR)lParam)->hwndFrom == hToolsListCtrl)
             {
-                switch (reinterpret_cast<LPNMHDR>(lParam)->code)
+                switch (((LPNMHDR)lParam)->code)
                 {
                     case LVN_ITEMCHANGED:
                     {
-                        if ( (reinterpret_cast<LPNMLISTVIEW>(lParam)->uChanged  & LVIF_STATE) && /* The state has changed */
-                             (reinterpret_cast<LPNMLISTVIEW>(lParam)->uNewState & LVIS_SELECTED) /* The item has been (de)selected */ )
+                        if ( (((LPNMLISTVIEW)lParam)->uChanged  & LVIF_STATE) && /* The state has changed */
+                             (((LPNMLISTVIEW)lParam)->uNewState & LVIS_SELECTED) /* The item has been (de)selected */ )
                         {
-                            Update_States(reinterpret_cast<LPNMLISTVIEW>(lParam)->iItem);
+                            Update_States(((LPNMLISTVIEW)lParam)->iItem);
                         }
 
                         return TRUE;
@@ -442,7 +441,7 @@ ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 
                     case LVN_COLUMNCLICK:
                     {
-                        int iSortingColumn = reinterpret_cast<LPNMLISTVIEW>(lParam)->iSubItem;
+                        int iSortingColumn = ((LPNMLISTVIEW)lParam)->iSubItem;
 
                         ListView_SortEx(hToolsListCtrl, iSortingColumn, iSortedColumn);
                         iSortedColumn = iSortingColumn;
@@ -456,7 +455,7 @@ ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
             }
             else
             {
-                switch (reinterpret_cast<LPNMHDR>(lParam)->code)
+                switch (((LPNMHDR)lParam)->code)
                 {
                     case PSN_APPLY:
                     {
@@ -469,7 +468,7 @@ ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 
                     case PSN_HELP:
                     {
-                        MessageBox(hToolsPage, _T("Help not implemented yet!"), _T("Help"), MB_ICONINFORMATION | MB_OK);
+                        MessageBoxW(hToolsPage, L"Help not implemented yet!", L"Help", MB_ICONINFORMATION | MB_OK);
                         return TRUE;
                     }
                 
index 4d31691..33d113f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * PROJECT:     ReactOS Applications
  * LICENSE:     LGPL - See COPYING in the top level directory
- * FILE:        base/applications/msconfig_new/toolspage.cpp
+ * FILE:        base/applications/msconfig_new/toolspage.h
  * PURPOSE:     Tools page message handler
  * COPYRIGHT:   Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
  *              Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
index cac484f..53b7350 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * PROJECT:     ReactOS Applications
+ * LICENSE:     LGPL - See COPYING in the top level directory
+ * FILE:        base/applications/msconfig_new/utils.c
+ * PURPOSE:     Memory Management, Resources, ... Utility Functions
+ * COPYRIGHT:   Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
+ */
+
 #include "precomp.h"
 #include "utils.h"
 #include "stringutils.h"
index 54142f6..ab02aed 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * PROJECT:     ReactOS Applications
+ * LICENSE:     LGPL - See COPYING in the top level directory
+ * FILE:        base/applications/msconfig_new/utils.c
+ * PURPOSE:     Memory Management, Resources, ... Utility Functions
+ * COPYRIGHT:   Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
+ */
+
 #ifndef __UTILS_H__
 #define __UTILS_H__