ReactOS  0.4.15-dev-5463-g138eb58
diskpart.c File Reference
#include "diskpart.h"
Include dependency graph for diskpart.c:

Go to the source code of this file.

Functions

VOID ShowHeader (VOID)
 
BOOL RunScript (LPCWSTR filename)
 
int wmain (int argc, const LPWSTR argv[])
 

Function Documentation

◆ RunScript()

BOOL RunScript ( LPCWSTR  filename)

Definition at line 41 of file diskpart.c.

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  {
60  fclose(script);
61  return FALSE;
62  }
63  }
64 
65  /* Close the file */
66  fclose(script);
67 
68  return TRUE;
69 }
_Check_return_ _CRTIMP FILE *__cdecl _wfopen(_In_z_ const wchar_t *_Filename, _In_z_ const wchar_t *_Mode)
#define TRUE
Definition: types.h:120
const char * filename
Definition: ioapi.h:137
#define IDS_ERROR_MSG_NO_SCRIPT
Definition: resource.h:185
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
BOOL InterpretScript(LPWSTR line)
Definition: interpreter.c:183
script
Definition: msipriv.h:382
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define MAX_STRING_SIZE
Definition: diskpart.h:75
__wchar_t WCHAR
Definition: xmlstorage.h:180
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
#define NULL
Definition: types.h:112
wchar_t * fgetws(wchar_t *buf, int bufsize, FILE *file)
Definition: wmain.c:22
#define StdErr
Definition: fc.c:15

Referenced by wmain().

◆ ShowHeader()

VOID ShowHeader ( VOID  )

Definition at line 16 of file diskpart.c.

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");
32  ConResPrintf(StdOut, IDS_APP_CURR_COMPUTER, szComputerName);
33 }
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:446
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
#define L(x)
Definition: ntvdm.h:50
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define MAX_STRING_SIZE
Definition: diskpart.h:75
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
#define IDS_APP_HEADER
Definition: resource.h:14
#define StdOut
Definition: fc.c:14
#define IDS_APP_CURR_COMPUTER
Definition: resource.h:17
#define IDS_APP_LICENSE
Definition: resource.h:16

Referenced by wmain().

◆ wmain()

int wmain ( int  argc,
const LPWSTR  argv[] 
)

Definition at line 75 of file diskpart.c.

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();
103  InterpretMain();
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++;
147  timeout = _wtoi(argv[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 
193 done:
196 
197  return result;
198 }
PPARTLIST CreatePartitionList(VOID)
Definition: partlist.c:1847
static int argc
Definition: ServiceArgs.c:12
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
GLuint64EXT * result
Definition: glext.h:11304
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
INT WINAPI K32LoadStringW(IN HINSTANCE hInstance OPTIONAL, IN UINT uID, OUT LPWSTR lpBuffer, IN INT nBufferMax)
Definition: utils.c:173
Definition: dhcpd.h:245
#define argv
Definition: mplay32.c:18
NTSTATUS CreateVolumeList(VOID)
Definition: partlist.c:1412
GLbitfield GLuint64 timeout
Definition: glext.h:7164
VOID InterpretMain(VOID)
Definition: interpreter.c:231
#define IDS_ERROR_MSG_NO_SCRIPT
Definition: resource.h:185
#define EXIT_SUCCESS
Definition: rdjpgcom.c:55
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
VOID DestroyVolumeList(VOID)
Definition: partlist.c:1450
script
Definition: msipriv.h:382
GLuint index
Definition: glext.h:6031
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
VOID ShowHeader(VOID)
Definition: diskpart.c:16
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define EXIT_FAILURE
Definition: jerror.c:33
#define index(s, c)
Definition: various.h:29
BOOL RunScript(LPCWSTR filename)
Definition: diskpart.c:41
VOID DestroyPartitionList(IN PPARTLIST List)
Definition: partlist.c:1931
#define GetModuleHandle
Definition: winbase.h:3698
#define IDS_APP_LEAVING
Definition: resource.h:18
#define NULL
Definition: types.h:112
#define IDS_APP_HEADER
Definition: resource.h:14
#define IDS_ERROR_MSG_BAD_ARG
Definition: resource.h:186
#define StdOut
Definition: fc.c:14
#define ConInitStdStreams()
Definition: fc.c:13
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleTitleW(LPCWSTR lpConsoleTitle)
Definition: console.c:2290
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define IDS_APP_USAGE
Definition: resource.h:15
#define StdErr
Definition: fc.c:15