2 * PROJECT: ReactOS Applications
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: base/applications/msconfig/freeldrpage.c
5 * PURPOSE: Freeloader configuration page message handler
6 * COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
7 * 2011 Gregor Schneider <Gregor.Schneider@reactos.org>
18 WCHAR szDefaultOS
[512];
20 ULONG OSConfigurationCount
;
24 static FREELDR_SETTINGS Settings
= { 0, { 0, }, 0, 0, FALSE
};
26 #define BUFFER_SIZE 512
29 LoadBootIni(WCHAR
*szDrive
, HWND hDlg
)
31 WCHAR szBuffer
[BUFFER_SIZE
];
38 hr
= StringCbCopyW(szBuffer
, sizeof(szBuffer
), szDrive
);
42 hr
= StringCbCatW(szBuffer
, sizeof(szBuffer
), L
"freeldr.ini");
46 file
= _wfopen(szBuffer
, L
"rt");
49 hr
= StringCbCopyW(szBuffer
, sizeof(szBuffer
), szDrive
);
53 hr
= StringCbCatW(szBuffer
, sizeof(szBuffer
), L
"boot.ini");
57 file
= _wfopen(szBuffer
, L
"rt");
62 hDlgCtrl
= GetDlgItem(hDlg
, IDC_LIST_BOX
);
66 if (fgetws(szBuffer
, BUFFER_SIZE
, file
))
68 length
= wcslen(szBuffer
);
71 szBuffer
[length
] = L
'\0';
72 szBuffer
[length
- 1] = L
'\0';
74 pos
= SendMessageW(hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
76 if (szBuffer
[0] == L
'[')
79 if (!_wcsnicmp(szBuffer
, L
"timeout=", 8))
81 Settings
.TimeOut
= _wtoi(&szBuffer
[8]);
85 if (!_wcsnicmp(szBuffer
, L
"default=", 8))
87 wcscpy(Settings
.szDefaultOS
, &szBuffer
[8]);
91 SendMessage(hDlgCtrl
, LB_SETITEMDATA
, pos
, 1); // indicate that this item is an boot entry
92 Settings
.OSConfigurationCount
++;
98 Settings
.UseBootIni
= TRUE
;
100 pos
= SendMessageW(hDlgCtrl
, LB_FINDSTRING
, 3, (LPARAM
)Settings
.szDefaultOS
);
103 Settings
.szDefaultPos
= pos
;
104 SendMessage(hDlgCtrl
, LB_SETCURSEL
, pos
, 0);
107 SetDlgItemInt(hDlg
, IDC_TXT_BOOT_TIMEOUT
, Settings
.TimeOut
, FALSE
);
108 if (Settings
.OSConfigurationCount
< 2)
110 EnableWindow(GetDlgItem(hDlg
, IDC_BTN_SET_DEFAULT_BOOT
), FALSE
);
111 EnableWindow(GetDlgItem(hDlg
, IDC_BTN_MOVE_UP_BOOT_OPTION
), FALSE
);
112 EnableWindow(GetDlgItem(hDlg
, IDC_BTN_MOVE_DOWN_BOOT_OPTION
), FALSE
);
118 InitializeFreeLDRDialog(HWND hDlg
)
120 WCHAR winDir
[PATH_MAX
];
123 GetWindowsDirectoryW(winDir
, PATH_MAX
);
124 ptr
= wcschr(winDir
, L
'\\');
130 return LoadBootIni(winDir
, hDlg
);
134 FreeLdrPageWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
140 hFreeLdrDialog
= hDlg
;
141 SetWindowPos(hDlg
, NULL
, 10, 32, 0, 0, SWP_NOACTIVATE
| SWP_NOOWNERZORDER
| SWP_NOSIZE
| SWP_NOZORDER
);
142 InitializeFreeLDRDialog(hDlg
);
145 switch(HIWORD(wParam
))
148 pos
= SendMessage((HWND
)lParam
, LB_GETCURSEL
, 0, 0);
151 LPARAM res
= SendMessage((HWND
)lParam
, LB_GETITEMDATA
, pos
, 0);
152 if (!res
) /* line is not a default one */
153 SendMessage((HWND
)lParam
, LB_SETCURSEL
, Settings
.szDefaultPos
, 0);
155 Settings
.szDefaultPos
= pos
;