2006-04-09 12:15:43 +00:00
|
|
|
/*
|
|
|
|
* PROJECT: ReactOS Applications
|
2007-01-05 20:15:07 +00:00
|
|
|
* LICENSE: LGPL - See COPYING in the top level directory
|
2006-04-09 12:15:43 +00:00
|
|
|
* FILE: base/applications/freeldrpage.c
|
|
|
|
* PURPOSE: Freeloader configuration page message handler
|
|
|
|
* COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2006-02-16 23:18:11 +00:00
|
|
|
#include <precomp.h>
|
|
|
|
|
|
|
|
HWND hFreeLdrPage;
|
|
|
|
HWND hFreeLdrDialog;
|
|
|
|
|
2008-03-07 16:48:07 +00:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
ULONG TimeOut;
|
|
|
|
WCHAR szDefaultOS[512];
|
|
|
|
ULONG szDefaultPos;
|
|
|
|
ULONG OSConfigurationCount;
|
|
|
|
BOOL UseBootIni;
|
2008-12-03 17:34:49 +00:00
|
|
|
} FREELDR_SETTINGS;
|
2008-03-07 16:48:07 +00:00
|
|
|
|
2008-12-03 17:34:49 +00:00
|
|
|
static FREELDR_SETTINGS Settings = { 0, { 0, }, 0, 0, FALSE };
|
2008-03-07 16:48:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
|
|
LoadBootIni(WCHAR * szDrive, HWND hDlg)
|
|
|
|
{
|
|
|
|
WCHAR szBuffer[512];
|
|
|
|
HWND hDlgCtrl;
|
|
|
|
FILE * file;
|
|
|
|
UINT length;
|
|
|
|
LRESULT pos;
|
|
|
|
|
|
|
|
wcscpy(szBuffer, szDrive);
|
|
|
|
wcscat(szBuffer, L"boot.ini");
|
|
|
|
|
|
|
|
file = _wfopen(szBuffer, L"rt");
|
|
|
|
if (!file)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hDlg, IDC_LIST_BOX);
|
|
|
|
|
|
|
|
while(!feof(file))
|
|
|
|
{
|
|
|
|
if (fgetws(szBuffer, sizeof(szBuffer) / sizeof(WCHAR), file))
|
|
|
|
{
|
|
|
|
length = wcslen(szBuffer);
|
|
|
|
while(szBuffer[length] < 14) //FIXME remove line feeds
|
|
|
|
szBuffer[length--] = 0;
|
|
|
|
|
|
|
|
pos = SendMessageW(hDlgCtrl, LB_ADDSTRING, 0, (LPARAM)szBuffer);
|
|
|
|
|
|
|
|
|
|
|
|
if (szBuffer[0] == L'[')
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (!wcsncmp(szBuffer, L"timeout=", 8))
|
|
|
|
{
|
|
|
|
Settings.TimeOut = _wtoi(&szBuffer[8]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!wcsncmp(szBuffer, L"default=", 8))
|
|
|
|
{
|
|
|
|
wcscpy(Settings.szDefaultOS, &szBuffer[8]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (pos != LB_ERR)
|
|
|
|
SendMessage(hDlgCtrl, LB_SETITEMDATA, pos, 1); // indicate that this item is an boot entry
|
|
|
|
Settings.OSConfigurationCount++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fclose(file);
|
|
|
|
Settings.UseBootIni = TRUE;
|
|
|
|
|
|
|
|
pos = SendMessageW(hDlgCtrl, LB_FINDSTRING, 3, (LPARAM)Settings.szDefaultOS);
|
|
|
|
if (pos != LB_ERR)
|
|
|
|
{
|
|
|
|
Settings.szDefaultPos = pos;
|
|
|
|
SendMessage(hDlgCtrl, LB_SETCURSEL, pos, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
SetDlgItemInt(hDlg, IDC_TXT_BOOT_TIMEOUT, Settings.TimeOut, FALSE);
|
|
|
|
if (Settings.OSConfigurationCount < 2)
|
|
|
|
{
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_BTN_SET_DEFAULT_BOOT), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_BTN_MOVE_UP_BOOT_OPTION), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_BTN_MOVE_DOWN_BOOT_OPTION), FALSE);
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
|
|
InitializeDialog(HWND hDlg)
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
// find real boot drive and handle freeldr configuration ini
|
|
|
|
return LoadBootIni(L"C:\\", hDlg);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-02-16 23:18:11 +00:00
|
|
|
INT_PTR CALLBACK
|
|
|
|
FreeLdrPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
|
|
{
|
2008-03-07 16:48:07 +00:00
|
|
|
LRESULT pos;
|
|
|
|
|
2006-06-29 22:12:40 +00:00
|
|
|
UNREFERENCED_PARAMETER(lParam);
|
|
|
|
UNREFERENCED_PARAMETER(wParam);
|
2006-06-23 20:49:21 +00:00
|
|
|
|
2006-02-16 23:18:11 +00:00
|
|
|
switch (message) {
|
|
|
|
case WM_INITDIALOG:
|
|
|
|
hFreeLdrDialog = hDlg;
|
2006-08-29 13:01:47 +00:00
|
|
|
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
2008-03-07 16:48:07 +00:00
|
|
|
InitializeDialog(hDlg);
|
2006-08-29 13:01:47 +00:00
|
|
|
return TRUE;
|
2008-03-07 16:48:07 +00:00
|
|
|
case WM_COMMAND:
|
|
|
|
switch(HIWORD(wParam))
|
|
|
|
{
|
|
|
|
case LBN_SELCHANGE:
|
|
|
|
pos = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0);
|
|
|
|
if (pos != LB_ERR)
|
|
|
|
{
|
|
|
|
LPARAM res = SendMessage((HWND)lParam, LB_GETITEMDATA, pos, 0);
|
|
|
|
if (!res) //line is not a default one
|
|
|
|
SendMessage((HWND)lParam, LB_SETCURSEL, Settings.szDefaultPos, 0);
|
|
|
|
else
|
|
|
|
Settings.szDefaultPos = pos;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2006-08-29 13:01:47 +00:00
|
|
|
}
|
|
|
|
return 0;
|
2006-02-16 23:18:11 +00:00
|
|
|
}
|