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
];
37 wcscpy(szBuffer
, szDrive
);
38 wcscat(szBuffer
, L
"freeldr.ini");
40 file
= _wfopen(szBuffer
, L
"rt");
43 wcscpy(szBuffer
, szDrive
);
44 wcscat(szBuffer
, L
"boot.ini");
45 file
= _wfopen(szBuffer
, L
"rt");
50 hDlgCtrl
= GetDlgItem(hDlg
, IDC_LIST_BOX
);
54 if (fgetws(szBuffer
, BUFFER_SIZE
, file
))
56 length
= wcslen(szBuffer
);
59 szBuffer
[length
] = L
'\0';
60 szBuffer
[length
- 1] = L
'\0';
62 pos
= SendMessageW(hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
64 if (szBuffer
[0] == L
'[')
67 if (!wcsncmp(szBuffer
, L
"timeout=", 8))
69 Settings
.TimeOut
= _wtoi(&szBuffer
[8]);
73 if (!wcsncmp(szBuffer
, L
"default=", 8))
75 wcscpy(Settings
.szDefaultOS
, &szBuffer
[8]);
79 SendMessage(hDlgCtrl
, LB_SETITEMDATA
, pos
, 1); // indicate that this item is an boot entry
80 Settings
.OSConfigurationCount
++;
86 Settings
.UseBootIni
= TRUE
;
88 pos
= SendMessageW(hDlgCtrl
, LB_FINDSTRING
, 3, (LPARAM
)Settings
.szDefaultOS
);
91 Settings
.szDefaultPos
= pos
;
92 SendMessage(hDlgCtrl
, LB_SETCURSEL
, pos
, 0);
95 SetDlgItemInt(hDlg
, IDC_TXT_BOOT_TIMEOUT
, Settings
.TimeOut
, FALSE
);
96 if (Settings
.OSConfigurationCount
< 2)
98 EnableWindow(GetDlgItem(hDlg
, IDC_BTN_SET_DEFAULT_BOOT
), FALSE
);
99 EnableWindow(GetDlgItem(hDlg
, IDC_BTN_MOVE_UP_BOOT_OPTION
), FALSE
);
100 EnableWindow(GetDlgItem(hDlg
, IDC_BTN_MOVE_DOWN_BOOT_OPTION
), FALSE
);
106 InitializeFreeLDRDialog(HWND hDlg
)
108 WCHAR winDir
[PATH_MAX
];
111 GetWindowsDirectoryW(winDir
, PATH_MAX
);
112 ptr
= wcschr(winDir
, L
'\\');
118 return LoadBootIni(winDir
, hDlg
);
122 FreeLdrPageWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
128 hFreeLdrDialog
= hDlg
;
129 SetWindowPos(hDlg
, NULL
, 10, 32, 0, 0, SWP_NOACTIVATE
| SWP_NOOWNERZORDER
| SWP_NOSIZE
| SWP_NOZORDER
);
130 InitializeFreeLDRDialog(hDlg
);
133 switch(HIWORD(wParam
))
136 pos
= SendMessage((HWND
)lParam
, LB_GETCURSEL
, 0, 0);
139 LPARAM res
= SendMessage((HWND
)lParam
, LB_GETITEMDATA
, pos
, 0);
140 if (!res
) //line is not a default one
141 SendMessage((HWND
)lParam
, LB_SETCURSEL
, Settings
.szDefaultPos
, 0);
143 Settings
.szDefaultPos
= pos
;