xref: /reactos/base/setup/setup/setup.c (revision 8a978a17)
1 /*
2  * COPYRIGHT:       See COPYING in the top level directory
3  * PROJECT:         ReactOS GUI/console setup
4  * FILE:            base/setup/setup/setup.c
5  * PURPOSE:         Second stage setup
6  * PROGRAMMER:      Eric Kohl
7  */
8 
9 #include <stdarg.h>
10 #include <windef.h>
11 #include <winbase.h>
12 
13 #define NDEBUG
14 #include <debug.h>
15 
16 typedef INT (WINAPI *PINSTALL_REACTOS)(INT argc, WCHAR** argv);
17 
18 /* FUNCTIONS ****************************************************************/
19 
20 static
21 INT
22 RunInstallReactOS(INT argc, WCHAR* argv[])
23 {
24     INT RetVal;
25     HMODULE hDll;
26     PINSTALL_REACTOS InstallReactOS;
27 
28     hDll = LoadLibraryW(L"syssetup.dll");
29     if (hDll == NULL)
30     {
31         DPRINT("Failed to load 'syssetup.dll'!\n");
32         return GetLastError();
33     }
34     DPRINT("Loaded 'syssetup.dll'!\n");
35 
36     /* Call the standard Windows-compatible export */
37     InstallReactOS = (PINSTALL_REACTOS)GetProcAddress(hDll, "InstallWindowsNt");
38     if (InstallReactOS == NULL)
39     {
40         RetVal = GetLastError();
41         DPRINT("Failed to get address for 'InstallWindowsNt()'!\n");
42     }
43     else
44     {
45         RetVal = InstallReactOS(argc, argv);
46     }
47 
48     return RetVal;
49 }
50 
51 
52 /* Called from wmainCRTStartup */
53 INT wmain(INT argc, WCHAR* argv[])
54 {
55     LPWSTR CmdLine, p;
56 
57     // NOTE: Temporary, until we correctly use argc/argv.
58     CmdLine = GetCommandLineW();
59     DPRINT("CmdLine: <%S>\n", CmdLine);
60 
61     p = wcschr(CmdLine, L'-');
62     if (p == NULL)
63         return ERROR_INVALID_PARAMETER;
64     p++;
65 
66     // NOTE: On Windows, "mini" means "minimal UI", and can be used
67     // in addition to "newsetup"; these options are not exclusive.
68     if (_wcsicmp(p, L"newsetup") == 0 || _wcsicmp(p, L"mini") == 0)
69     {
70         RunInstallReactOS(argc, argv);
71     }
72 
73 #if 0
74     /* Add new setup types here */
75     else if (...)
76     {
77 
78     }
79 #endif
80 
81     return 0;
82 }
83 
84 /* EOF */
85