ReactOS 0.4.15-dev-8058-ga7cbb60
freeldr.c
Go to the documentation of this file.
1/*
2 * FreeLoader
3 * Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20/* INCLUDES *******************************************************************/
21
22#include <freeldr.h>
23
24#include <debug.h>
26
27/* GLOBALS ********************************************************************/
28
29#define TOSTRING_(X) #X
30#define TOSTRING(X) TOSTRING_(X)
31
33#if (FREELOADER_PATCH_VERSION == 0)
35#else
37#endif
38
40
41/* FUNCTIONS ******************************************************************/
42
44{
45 /* Load the default settings from the command-line */
47
48 /* Debugger pre-initialization */
50
52
53 TRACE("BootMain() called.\n");
54
55#ifndef UEFIBOOT
56 /* Check if the CPU is new enough */
57 FrLdrCheckCpuCompatibility(); // FIXME: Should be done inside MachInit!
58#endif
59
60 /* UI pre-initialization */
61 if (!UiInitialize(FALSE))
62 {
63 UiMessageBoxCritical("Unable to initialize UI.");
64 goto Quit;
65 }
66
67 /* Initialize memory manager */
69 {
70 UiMessageBoxCritical("Unable to initialize memory manager.");
71 goto Quit;
72 }
73
74 /* Initialize I/O subsystem */
75 FsInit();
76
77 RunLoader();
78
79Quit:
80 /* If we reach this point, something went wrong before, therefore reboot */
81 Reboot();
82}
83
84// We need to emulate these, because the original ones don't work in freeldr
85// These functions are here, because they need to be in the main compilation unit
86// and cannot be in a library.
87int __cdecl wctomb(char *mbchar, wchar_t wchar)
88{
89 *mbchar = (char)wchar;
90 return 1;
91}
92
93int __cdecl mbtowc(wchar_t *wchar, const char *mbchar, size_t count)
94{
95 *wchar = (wchar_t)*mbchar;
96 return 1;
97}
98
99// The wctype table is 144 KB, too much for poor freeldr
100int __cdecl iswctype(wint_t wc, wctype_t wctypeFlags)
101{
102 return _isctype((char)wc, wctypeFlags);
103}
104
105#ifdef _MSC_VER
106#pragma warning(disable:4164)
107#pragma function(pow)
108#pragma function(log)
109#pragma function(log10)
110#endif
111
112// Stubs to avoid pulling in data from CRT
113double pow(double x, double y)
114{
115 __debugbreak();
116 return 0.0;
117}
118
119double log(double x)
120{
121 __debugbreak();
122 return 0.0;
123}
124
125double log10(double x)
126{
127 __debugbreak();
128 return 0.0;
129}
#define WARNING
Definition: BusLogic958.h:56
int wint_t
Definition: _apple.h:38
#define __cdecl
Definition: accygwin.h:79
void LoadSettings(void)
Definition: settings.c:53
@ Reboot
Definition: bl.h:891
#define DebugInit(DebugString)
Definition: debug.h:120
#define DBG_DEFAULT_CHANNEL(ch)
Definition: debug.h:106
VOID FsInit(VOID)
Definition: fs.c:432
BOOLEAN MmInitializeMemoryManager(VOID)
Definition: meminit.c:315
BOOTMGRINFO BootMgrInfo
Definition: settings.c:18
VOID UiMessageBoxCritical(_In_ PCSTR MessageText)
Definition: ui.c:372
BOOLEAN UiInitialize(BOOLEAN ShowUi)
Definition: ui.c:92
unsigned short wctype_t
Definition: crtdefs.h:352
#define FALSE
Definition: types.h:117
#define MAX_PATH
Definition: compat.h:34
static const WCHAR CmdLine[]
Definition: install.c:48
unsigned char
Definition: typeof.h:29
VOID RunLoader(VOID)
Definition: bootmgr.c:356
VOID __cdecl BootMain(IN PCCH CmdLine)
Definition: freeldr.c:43
CCHAR FrLdrBootPath[MAX_PATH]
Definition: freeldr.c:39
#define TOSTRING(X)
Definition: freeldr.c:30
double log10(double x)
Definition: freeldr.c:125
double pow(double x, double y)
Definition: freeldr.c:113
int __cdecl iswctype(wint_t wc, wctype_t wctypeFlags)
Definition: freeldr.c:100
const PCSTR FrLdrVersionString
Definition: freeldr.c:32
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
_Check_return_ _CRTIMP int __cdecl _isctype(_In_ int _C, _In_ int _Type)
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698
VOID FrLdrCheckCpuCompatibility(VOID)
Definition: macharm.c:65
VOID MachInit(IN PCCH CommandLine)
Definition: macharm.c:182
CONST CHAR * PCCH
Definition: ntbasedef.h:392
#define log(outFile, fmt,...)
Definition: util.h:15
#define TRACE(s)
Definition: solgame.cpp:4
PCSTR DebugString
Definition: settings.h:12
#define wctomb(cp, wc)
Definition: wchar.h:161
#define wchar_t
Definition: wchar.h:102
#define mbtowc(wp, cp, len)
Definition: wchar.h:155
const char * PCSTR
Definition: typedefs.h:52
#define IN
Definition: typedefs.h:39
char CCHAR
Definition: typedefs.h:51
#define FREELOADER_MINOR_VERSION
Definition: ver.h:36
#define FREELOADER_PATCH_VERSION
Definition: ver.h:37
#define FREELOADER_MAJOR_VERSION
Definition: ver.h:35