Author: dreimer
Date: Sun Nov 4 17:05:34 2007
New Revision: 30111
URL:
http://svn.reactos.org/svn/reactos?rev=30111&view=rev
Log:
Patch by Pierre Schweitzer:
This is first part to get rid of TODO list
- Reorganized code
- Added check to avoid buffer overflow
- Removed unused vars
- Improved Save button status
Added:
trunk/tools/RosBE-Windows/Tools/config/options.h (with props)
Modified:
trunk/tools/RosBE-Windows/Tools/config/options.c
trunk/tools/RosBE-Windows/Tools/config/resources.h
trunk/tools/RosBE-Windows/Tools/config/todo.txt
Modified: trunk/tools/RosBE-Windows/Tools/config/options.c
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/o…
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/options.c (original)
+++ trunk/tools/RosBE-Windows/Tools/config/options.c Sun Nov 4 17:05:34 2007
@@ -1,33 +1,14 @@
/*
- * RosBE Options Dialog (options.c)
+ * PROJECT: RosBE Options Dialog
+ * LICENSE: GPL - See LICENSE.txt in the top level directory.
+ * FILE: Tools/config/options.c
+ * PURPOSE: COnfiguring RosBE
+ * COPYRIGHT: Copyright 2007 Maarten Bosma
+ * Copyright 2007 Pierre Schweitzer
*
- * Copyright 2007 by Maarten Bosma
- * Pierre Schweitzer
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program ; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <windows.h>
-#include <stdio.h>
-#include <shlobj.h>
-#include <wchar.h>
-#include "resources.h"
-
-#define MINGWVERSION L"\\4.1.3"
-
-typedef LPITEMIDLIST (CALLBACK* ILCREATEFROMPATHW)(LPCWSTR path);
+#include "options.h"
// note: do not change the order - theses are the color under winxp they might differ in
another OSes
WCHAR *Colors[] = { L"black", L"dark blue", L"dark green",
L"turquoise", L"dark red", L"purple",
@@ -46,8 +27,8 @@
INT
WriteSettings(HWND hwnd)
{
- int foreground, background;
- BOOL showtime, writelog, useccache, strip, otherobj, otherout;
+ INT foreground, background;
+ BOOL showtime, writelog, useccache, strip;
WCHAR logdir[MAX_PATH], objdir[MAX_PATH], outdir[MAX_PATH], mingwpath[MAX_PATH],
checkmgw[MAX_PATH], checklog[MAX_PATH], optionsfile[MAX_PATH];
WCHAR msgerror[256];
HANDLE hFile;
@@ -57,10 +38,8 @@
writelog = (SendDlgItemMessage(hwnd, ID_SAVELOGS, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
useccache = (SendDlgItemMessage(hwnd, ID_USECCACHE, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
strip = (SendDlgItemMessageW(hwnd, ID_STRIP, BM_GETCHECK, 0, 0) == BST_CHECKED);
- otherobj = (SendDlgItemMessageW(hwnd, ID_OTHEROBJ, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
- otherout = (SendDlgItemMessageW(hwnd, ID_OTHEROUT, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
- foreground = (UINT)SendDlgItemMessageW(hwnd, IDC_FONT, CB_GETCURSEL, 0, 0);
- background = (UINT)SendDlgItemMessageW(hwnd, IDC_BACK, CB_GETCURSEL, 0, 0);
+ foreground = SendDlgItemMessageW(hwnd, IDC_FONT, CB_GETCURSEL, 0, 0);
+ background = SendDlgItemMessageW(hwnd, IDC_BACK, CB_GETCURSEL, 0, 0);
GetDlgItemTextW(hwnd, ID_LOGDIR, logdir, MAX_PATH);
GetDlgItemTextW(hwnd, ID_MGWDIR, mingwpath, MAX_PATH);
GetDlgItemTextW(hwnd, ID_OBJDIR, objdir, MAX_PATH);
@@ -97,7 +76,8 @@
CloseHandle(hFile);
wcscpy(optionsfile, _wgetenv(L"APPDATA"));
- wcscat(optionsfile, L"\\RosBE\\rosbe-options.cmd");
+ if ((wcslen(optionsfile) + wcslen(L"\\RosBE\\rosbe-options.cmd")) <
MAX_PATH)
+ wcscat(optionsfile, L"\\RosBE\\rosbe-options.cmd");
pFile = _wfopen(optionsfile, L"w");
if (pFile)
{
@@ -122,17 +102,93 @@
return FALSE;
}
+VOID LoadSettings(HWND hwnd, PSETTINGS LoadedSettings)
+{
+ // Loading settings is not yet implemented. This function just apply default
settings.
+#if 0
+ FILE *pFile;
+#endif
+ WCHAR optionsfile[MAX_PATH];
+
+ wcscpy(optionsfile, _wgetenv(L"APPDATA"));
+ if ((wcslen(optionsfile) + wcslen(L"\\RosBE\\rosbe-options.cmd")) <
MAX_PATH)
+ wcscat(optionsfile, L"\\RosBE\\rosbe-options.cmd");
+#if 0
+ pFile = _wfopen(optionsfile, L"r");
+ if (pFile)
+ {
+ fclose(pFile);
+ }
+ else
+ {
+#endif
+ LoadedSettings->foreground = 0xa;
+ LoadedSettings->background = 0;
+ GetCurrentDirectory(MAX_PATH, LoadedSettings->mingwpath);
+ if ((wcslen(LoadedSettings->mingwpath) + wcslen(MINGWVERSION)) < MAX_PATH)
+ wcscat(LoadedSettings->mingwpath, MINGWVERSION);
+#if 0
+ }
+#endif
+ SendDlgItemMessageW(hwnd, IDC_FONT, CB_SETCURSEL, LoadedSettings->foreground, 0);
+ SendDlgItemMessageW(hwnd, IDC_BACK, CB_SETCURSEL, LoadedSettings->background, 0);
+ SetDlgItemText(hwnd, ID_MGWDIR, LoadedSettings->mingwpath);
+}
+
+VOID SetSaveState(HWND hwnd, PSETTINGS DefaultSettings)
+{
+ INT foreground, background;
+ BOOL showtime, writelog, useccache, strip;
+ WCHAR logdir[MAX_PATH], objdir[MAX_PATH], outdir[MAX_PATH], mingwpath[MAX_PATH];
+ BOOL StateObj = TRUE, StateOut = TRUE, StateLog = TRUE, State = TRUE;
+
+ showtime = (SendDlgItemMessage(hwnd, ID_SHOWBUILDTIME, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
+ writelog = (SendDlgItemMessage(hwnd, ID_SAVELOGS, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
+ useccache = (SendDlgItemMessage(hwnd, ID_USECCACHE, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
+ strip = (SendDlgItemMessageW(hwnd, ID_STRIP, BM_GETCHECK, 0, 0) == BST_CHECKED);
+ foreground = SendDlgItemMessageW(hwnd, IDC_FONT, CB_GETCURSEL, 0, 0);
+ background = SendDlgItemMessageW(hwnd, IDC_BACK, CB_GETCURSEL, 0, 0);
+ GetDlgItemTextW(hwnd, ID_LOGDIR, logdir, MAX_PATH);
+ GetDlgItemTextW(hwnd, ID_MGWDIR, mingwpath, MAX_PATH);
+ GetDlgItemTextW(hwnd, ID_OBJDIR, objdir, MAX_PATH);
+ GetDlgItemTextW(hwnd, ID_OUTDIR, outdir, MAX_PATH);
+
+ if (SendDlgItemMessageW(hwnd, ID_OTHEROBJ, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ {
+ if ((wcscmp(objdir, DefaultSettings->objdir) != 0) && wcslen(objdir)
> 0)
+ StateObj = FALSE;
+ }
+ if (SendDlgItemMessageW(hwnd, ID_OTHEROUT, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ {
+ if ((wcscmp(outdir, DefaultSettings->outdir) != 0) && wcslen(outdir)
> 0)
+ StateOut = FALSE;
+ }
+ if (writelog)
+ {
+ if ((wcscmp(logdir, DefaultSettings->logdir) != 0) && wcslen(logdir)
> 0)
+ StateLog = FALSE;
+ }
+
+ State ^= ((foreground == DefaultSettings->foreground) && (background ==
DefaultSettings->background) &&
+ (showtime == DefaultSettings->showtime) && (writelog ==
DefaultSettings->writelog) &&
+ (useccache == DefaultSettings->useccache) && (strip ==
DefaultSettings->strip) &&
+ (StateLog) && (wcscmp(mingwpath, DefaultSettings->mingwpath) == 0)
&&
+ (StateObj) && (StateOut));
+
+ EnableWindow(GetDlgItem(hwnd, ID_OK), State);
+}
+
INT_PTR CALLBACK
DlgProc(HWND Dlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
static HICON hIcon;
static HFONT hFont;
+ static SETTINGS Settings;
switch (Msg)
{
case WM_INITDIALOG:
{
- WCHAR Path[MAX_PATH];
LOGFONT lf;
hIcon = LoadImage( hInstance,
@@ -155,13 +211,7 @@
SendDlgItemMessageW(Dlg, IDC_BACK, CB_ADDSTRING, 0, (LPARAM)
(Colors[i]));
SendDlgItemMessageW(Dlg, IDC_FONT, CB_ADDSTRING, 0, (LPARAM)
(Colors[i]));
}
- SendDlgItemMessageW(Dlg, IDC_FONT, CB_SETCURSEL, 0xa, 0);
- SendDlgItemMessageW(Dlg, IDC_BACK, CB_SETCURSEL, 0, 0);
- GetCurrentDirectory(MAX_PATH, Path);
- if ((wcslen(Path) + wcslen(MINGWVERSION)) < MAX_PATH)
- wcscat(Path, MINGWVERSION);
- SetDlgItemText(Dlg, ID_MGWDIR, Path);
-
+ LoadSettings(Dlg, &Settings);
return TRUE;
}
@@ -172,7 +222,6 @@
RECT rcWnd;
GetClientRect(GetDlgItem(Dlg, ID_EXAMPLE), &rcWnd);
InvalidateRect(GetDlgItem(Dlg, ID_EXAMPLE), &rcWnd, FALSE);
- EnableWindow(GetDlgItem(Dlg, ID_OK), TRUE);
}
else
{
@@ -231,20 +280,12 @@
}
}
pidl = SHBrowseForFolder(&PathInfo);
- if (!pidl || !SHGetPathFromIDList(pidl, path))
- break;
- SetDlgItemText(Dlg, Control, path);
+ if (pidl && SHGetPathFromIDList(pidl, path))
+ SetDlgItemText(Dlg, Control, path);
+ break;
}
- case ID_STRIP:
- case ID_USECCACHE:
- case ID_SHOWBUILDTIME:
case ID_OTHEROBJ:
case ID_OTHEROUT:
- {
- EnableWindow(GetDlgItem(Dlg, ID_OK), TRUE);
- if ((wParam != ID_OTHEROBJ) && (wParam != ID_OTHEROUT))
- break;
- }
case ID_SAVELOGS:
{
BOOL WriteLogSet;
@@ -269,6 +310,7 @@
}
}
+ SetSaveState(Dlg, &Settings);
return FALSE;
}
Added: trunk/tools/RosBE-Windows/Tools/config/options.h
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/o…
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/options.h (added)
+++ trunk/tools/RosBE-Windows/Tools/config/options.h Sun Nov 4 17:05:34 2007
@@ -1,0 +1,34 @@
+/*
+ * PROJECT: RosBE Options Dialog
+ * LICENSE: GPL - See LICENSE.txt in the top level directory.
+ * FILE: Tools/config/options.h
+ * PURPOSE: COnfiguring RosBE
+ * COPYRIGHT: Copyright 2007 Maarten Bosma
+ * Copyright 2007 Pierre Schweitzer
+ *
+ */
+
+#include <windows.h>
+#include <stdio.h>
+#include <shlobj.h>
+#include <wchar.h>
+#include "resources.h"
+
+#define MINGWVERSION L"\\4.1.3"
+
+typedef LPITEMIDLIST (CALLBACK* ILCREATEFROMPATHW)(LPCWSTR path);
+
+typedef struct _SETTINGS
+{
+ WCHAR logdir[MAX_PATH];
+ WCHAR objdir[MAX_PATH];
+ WCHAR outdir[MAX_PATH];
+ WCHAR mingwpath[MAX_PATH];
+ INT foreground;
+ INT background;
+ BOOL showtime;
+ BOOL useccache;
+ BOOL strip;
+ BOOL writelog;
+}
+SETTINGS, *PSETTINGS;
Propchange: trunk/tools/RosBE-Windows/Tools/config/options.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/tools/RosBE-Windows/Tools/config/resources.h
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/r…
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/resources.h (original)
+++ trunk/tools/RosBE-Windows/Tools/config/resources.h Sun Nov 4 17:05:34 2007
@@ -1,3 +1,13 @@
+/*
+ * PROJECT: RosBE Options Dialog
+ * LICENSE: GPL - See LICENSE.txt in the top level directory.
+ * FILE: Tools/config/resources.h
+ * PURPOSE: COnfiguring RosBE
+ * COPYRIGHT: Copyright 2007 Maarten Bosma
+ * Copyright 2007 Pierre Schweitzer
+ *
+ */
+
/* Controls */
#define ID_OK 0x01
#define ID_CANCEL 0x02
Modified: trunk/tools/RosBE-Windows/Tools/config/todo.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/t…
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/todo.txt (original)
+++ trunk/tools/RosBE-Windows/Tools/config/todo.txt Sun Nov 4 17:05:34 2007
@@ -1,3 +1,2 @@
ToDo:
- Load old settings
-- Improve Save button status (disabled if no changes, even if user played with param)