ReactOS 0.4.16-dev-297-gc569aee
diskpart.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS DiskPart
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/system/diskpart/diskpart.c
5 * PURPOSE: Manages all the partitions of the OS in an interactive way.
6 * PROGRAMMERS: Lee Schroeder
7 */
8
9/* INCLUDES ******************************************************************/
10
11#include "diskpart.h"
12
13/* FUNCTIONS ******************************************************************/
14
15VOID
17{
18 WCHAR szComputerName[MAX_STRING_SIZE];
19 DWORD comp_size = MAX_STRING_SIZE;
20
21 /* Get the name of the computer for us and change the value of comp_name */
22 GetComputerNameW(szComputerName, &comp_size);
23
24 /* TODO: Remove this section of code when program becomes stable enough for production use. */
25 ConPuts(StdOut, L"\n*WARNING*: This program is incomplete and may not work properly.\n");
26
27 /* Print the header information */
28 ConPuts(StdOut, L"\n");
30 ConPuts(StdOut, L"\n");
33}
34
35/*
36 * RunScript(const char *filename):
37 * opens the file, reads the contents, convert the text into readable
38 * code for the computer, and then execute commands in order.
39 */
40BOOL
42{
43 FILE *script;
44 WCHAR tmp_string[MAX_STRING_SIZE];
45
46 /* Open the file for processing */
47 script = _wfopen(filename, L"r");
48 if (script == NULL)
49 {
50 /* if there was problems opening the file */
52 return FALSE; /* if there is no script, exit the program */
53 }
54
55 /* Read and process the script */
56 while (fgetws(tmp_string, MAX_STRING_SIZE, script) != NULL)
57 {
58 if (InterpretScript(tmp_string) == FALSE)
59 {
61 return FALSE;
62 }
63 }
64
65 /* Close the file */
67
68 return TRUE;
69}
70
71/*
72 * wmain():
73 * Main entry point of the application.
74 */
75int wmain(int argc, const LPWSTR argv[])
76{
78 LPCWSTR tmpBuffer = NULL;
79 WCHAR appTitle[50];
80 int index, timeout;
81 int result = EXIT_SUCCESS;
82
83 /* Initialize the Console Standard Streams */
85
86 /* Sets the title of the program so the user will have an easier time
87 determining the current program, especially if diskpart is running a
88 script */
90 SetConsoleTitleW(appTitle);
91
92 /* Sets the timeout value to 0 just in case the user doesn't
93 specify a value */
94 timeout = 0;
95
98
99 /* If there are no command arguments, then go straight to the interpreter */
100 if (argc < 2)
101 {
102 ShowHeader();
104 }
105 /* If there are command arguments, then process them */
106 else
107 {
108 for (index = 1; index < argc; index++)
109 {
110 /* checks for flags */
111 if ((argv[index][0] == '/')||
112 (argv[index][0] == '-'))
113 {
114 tmpBuffer = argv[index] + 1;
115 }
116 else
117 {
118 /* If there is no flag, then return an error */
121 goto done;
122 }
123
124 /* Checks for the /? flag first since the program
125 exits as soon as the usage list is shown. */
126 if (_wcsicmp(tmpBuffer, L"?") == 0)
127 {
130 goto done;
131 }
132 /* Checks for the script flag */
133 else if (_wcsicmp(tmpBuffer, L"s") == 0)
134 {
135 if ((index + 1) < argc)
136 {
137 index++;
138 script = argv[index];
139 }
140 }
141 /* Checks for the timeout flag */
142 else if (_wcsicmp(tmpBuffer, L"t") == 0)
143 {
144 if ((index + 1) < argc)
145 {
146 index++;
148
149 /* If the number is a negative number, then
150 change it so that the time is executed properly. */
151 if (timeout < 0)
152 timeout = 0;
153 }
154 }
155 else
156 {
157 /* Assume that the flag doesn't exist. */
160 goto done;
161 }
162 }
163
164 /* Shows the program information */
165 ShowHeader();
166
167 /* Now we process the filename if it exists */
168 if (script != NULL)
169 {
170 /* if the timeout is greater than 0, then assume
171 that the user specified a specific time. */
172 if (timeout > 0)
173 Sleep(timeout * 1000);
174
175 if (RunScript(script) == FALSE)
176 {
178 goto done;
179 }
180 }
181 else
182 {
183 /* Exit failure since the user wanted to run a script */
186 goto done;
187 }
188 }
189
190 /* Let the user know the program is exiting */
192
193done:
196
197 return result;
198}
static int argc
Definition: ServiceArgs.c:12
BOOL InterpretScript(_In_ LPWSTR pszInputLine)
Definition: interpreter.c:150
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
#define ConInitStdStreams()
Definition: fc.c:13
#define StdOut
Definition: fc.c:14
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define StdErr
Definition: fc.c:15
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
#define index(s, c)
Definition: various.h:29
#define MAX_STRING_SIZE
Definition: precomp.h:34
#define IDS_APP_USAGE
Definition: resource.h:12
#define IDS_ERROR_MSG_NO_SCRIPT
Definition: resource.h:185
#define IDS_APP_CURR_COMPUTER
Definition: resource.h:17
#define IDS_APP_LICENSE
Definition: resource.h:16
#define IDS_APP_HEADER
Definition: resource.h:14
#define IDS_APP_LEAVING
Definition: resource.h:18
#define IDS_ERROR_MSG_BAD_ARG
Definition: resource.h:186
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:446
BOOL RunScript(LPCWSTR filename)
Definition: diskpart.c:41
VOID ShowHeader(VOID)
Definition: diskpart.c:16
VOID DestroyVolumeList(VOID)
Definition: partlist.c:1450
NTSTATUS CreateVolumeList(VOID)
Definition: partlist.c:1412
VOID InterpretMain(VOID)
Definition: interpreter.c:231
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleTitleW(LPCWSTR lpConsoleTitle)
Definition: console.c:2290
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint index
Definition: glext.h:6031
GLuint64EXT * result
Definition: glext.h:11304
_Check_return_ _CRTIMP FILE *__cdecl _wfopen(_In_z_ const wchar_t *_Filename, _In_z_ const wchar_t *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
const char * filename
Definition: ioapi.h:137
#define EXIT_FAILURE
Definition: jerror.c:33
#define argv
Definition: mplay32.c:18
script
Definition: msipriv.h:383
#define L(x)
Definition: ntvdm.h:50
int wmain()
#define EXIT_SUCCESS
Definition: rdjpgcom.c:55
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
INT WINAPI K32LoadStringW(IN HINSTANCE hInstance OPTIONAL, IN UINT uID, OUT LPWSTR lpBuffer, IN INT nBufferMax)
Definition: utils.c:173
VOID DestroyPartitionList(IN PPARTLIST List)
Definition: partlist.c:2072
PPARTLIST CreatePartitionList(VOID)
Definition: partlist.c:1987
Definition: dhcpd.h:245
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
#define GetModuleHandle
Definition: winbase.h:3852
wchar_t * fgetws(wchar_t *buf, int bufsize, FILE *file)
Definition: wmain.c:22
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185