]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/cmdlpars.tex
corrected access to NULL parameters in wxGetOsVersion
[wxWidgets.git] / docs / latex / wx / cmdlpars.tex
CommitLineData
f6bcfd97
BP
1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2%% Name: cmdlpars.tex
3%% Purpose: wxCmdLineParser documentation
4%% Author: Vadim Zeitlin
5%% Modified by:
6%% Created: 27.03.00
7%% RCS-ID: $Id$
8%% Copyright: (c) Vadim Zeitlin
9%% License: wxWindows license
10%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11
12\section{\class{wxCmdLineParser}}\label{wxcmdlineparser}
13
14wxCmdLineParser is a class for parsing command line.
15
16It has the following features:
5e0e6ceb
JS
17
18\begin{enumerate}\itemsep=0pt
f6bcfd97
BP
19\item distinguishes options, switches and parameters; allows option grouping
20\item allows both short and long options
21\item automatically generates the usage message from the command line description
22\item does type checks on the options values (number, date, $\ldots$).
23\end{enumerate}
24
25To use it you should follow these steps:
5e0e6ceb
JS
26
27\begin{enumerate}\itemsep=0pt
f6bcfd97
BP
28\item \helpref{construct}{wxcmdlineparserconstruction} an object of this class
29giving it the command line to parse and optionally its description or use
30{\tt AddXXX()} functions later
31\item call {\tt Parse()}
32\item use {\tt Found()} to retrieve the results
33\end{enumerate}
34
35In the documentation below the following terminology is used:
36
37\begin{twocollist}\itemsep=0pt
38\twocolitem{switch}{This is a boolean option which can be given or not, but
39which doesn't have any value. We use the word switch to distinguish such boolean
40options from more generic options like those described below. For example,
41{\tt -v} might be a switch meaning "enable verbose mode".}
42\twocolitem{option}{Option for us here is something which comes with a value 0
43unlike a switch. For example, {\tt -o:filename} might be an option which allows
44to specify the name of the output file.}
45\twocolitem{parameter}{This is a required program argument.}
46\end{twocollist}
47
48\wxheading{Derived from}
49
50No base class
51
52\wxheading{Include files}
53
54<wx/cmdline.h>
55
56\wxheading{Constants}
57
58The structure wxCmdLineEntryDesc is used to describe the one command
59line switch, option or parameter. An array of such structures should be passed
60to \helpref{SetDesc()}{wxcmdlineparsersetdesc}. Also, the meanings of parameters
61of the {\tt AddXXX()} functions are the same as of the corresponding fields in
62this structure:
63
64\begin{verbatim}
65struct wxCmdLineEntryDesc
66{
67 wxCmdLineEntryType kind;
68 const wxChar *shortName;
69 const wxChar *longName;
70 const wxChar *description;
71 wxCmdLineParamType type;
72 int flags;
73};
74\end{verbatim}
75
76The type of a command line entity is in the {\tt kind} field and may be one of
77the following constants:
5e0e6ceb
JS
78
79{\small%
80\begin{verbatim}
f6bcfd97
BP
81enum wxCmdLineEntryType
82{
a66abda9
GT
83 wxCMD_LINE_SWITCH,
84 wxCMD_LINE_OPTION,
85 wxCMD_LINE_PARAM,
86 wxCMD_LINE_NONE // use this to terminate the list
f6bcfd97 87}
c57e060d
JS
88\end{verbatim}
89}
f6bcfd97
BP
90
91The field {\tt shortName} is the usual, short, name of the switch or the option.
92{\tt longName} is the corresponding long name or NULL if the option has no long
93name. Both of these fields are unused for the parameters. Both the short and
94long option names can contain only letters, digits and the underscores.
95
96{\tt description} is used by the \helpref{Usage()}{wxcmdlineparserusage} method
97to construct a help message explaining the syntax of the program.
98
99The possible values of {\tt type} which specifies the type of the value accepted
100by an option or parameter are:
5e0e6ceb
JS
101
102{\small%
103\begin{verbatim}
f6bcfd97
BP
104enum wxCmdLineParamType
105{
a66abda9
GT
106 wxCMD_LINE_VAL_STRING, // default
107 wxCMD_LINE_VAL_NUMBER,
108 wxCMD_LINE_VAL_DATE,
109 wxCMD_LINE_VAL_NONE
f6bcfd97 110}
c57e060d
JS
111\end{verbatim}
112}
f6bcfd97
BP
113
114Finally, the {\tt flags} field is a combination of the following bit masks:
5e0e6ceb
JS
115
116{\small%
117\begin{verbatim}
f6bcfd97
BP
118enum
119{
a66abda9
GT
120 wxCMD_LINE_OPTION_MANDATORY = 0x01, // this option must be given
121 wxCMD_LINE_PARAM_OPTIONAL = 0x02, // the parameter may be omitted
122 wxCMD_LINE_PARAM_MULTIPLE = 0x04, // the parameter may be repeated
123 wxCMD_LINE_OPTION_HELP = 0x08, // this option is a help request
124 wxCMD_LINE_NEEDS_SEPARATOR = 0x10, // must have sep before the value
f6bcfd97 125}
c57e060d
JS
126\end{verbatim}
127}
f6bcfd97
BP
128
129Notice that by default (i.e. if flags are just $0$), options are optional (sic)
130and each call to \helpref{AddParam()}{wxcmdlineparseraddparam} allows one more
131parameter - this may be changed by giving non-default flags to it, i.e. use
132{\tt wxCMD\_LINE\_OPTION\_MANDATORY} to require that the option is given and
133{\tt wxCMD\_LINE\_PARAM\_OPTIONAL} to make a parameter optional. Also,
134{\tt wxCMD\_LINE\_PARAM\_MULTIPLE} may be specified if the programs accepts a
135variable number of parameters - but it only can be given for the last parameter
136in the command line description. If you use this flag, you will probably need to
137use \helpref{GetParamCount}{wxcmdlineparsergetparamcount} to retrieve the number
138of parameters effectively specified after calling
139\helpref{Parse}{wxcmdlineparserparse}.
140
141The last flag {\tt wxCMD\_LINE\_NEEDS\_SEPARATOR} can be specified to require a
142separator (either a colon, an equal sign or white space) between the option
143name and its value. By default, no separator is required.
144
145\wxheading{See also}
146
147\helpref{wxApp::argc}{wxappargc} and \helpref{wxApp::argv}{wxappargv}\\
148console sample
149
150%%%%%%%%%%%%% Methods by group %%%%%%%%%%%%%
151\latexignore{\rtfignore{\wxheading{Function groups}}}
152
153\membersection{Construction}\label{wxcmdlineparserconstruction}
154
155Before \helpref{Parse}{wxcmdlineparserparse} can be called, the command line
156parser object must have the command line to parse and also the rules saying
157which switches, options and parameters are valid - this is called command line
158description in what follows.
159
160You have complete freedom of choice as to when specify the required information,
161the only restriction is that it must be done before calling
162\helpref{Parse}{wxcmdlineparserparse}.
163
164To specify the command line to parse you may use either one of constructors
165accepting it (\helpref{wxCmdLineParser(argc, argv)}{wxcmdlineparserwxcmdlineparserargc} or
166\helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserdescargc} usually) or,
167if you use \helpref{the default constructor}{wxcmdlineparserwxcmdlineparserdef},
168you can do it later by calling
169\helpref{SetCmdLine}{wxcmdlineparsersetcmdlineargc}.
170
171The same holds for command line description: it can be specified either in
172the constructor (\helpref{without command line}{wxcmdlineparserwxcmdlineparserdesc} or
173\helpref{together with it}{wxcmdlineparserwxcmdlineparserdescargc}) or
174constructed later using either \helpref{SetDesc}{wxcmdlineparsersetdesc} or
175combination of \helpref{AddSwitch}{wxcmdlineparseraddswitch},
176\helpref{AddOption}{wxcmdlineparseraddoption} and
177\helpref{AddParam}{wxcmdlineparseraddparam} methods.
178
179Using constructors or \helpref{SetDesc}{wxcmdlineparsersetdesc} uses a (usually
180{\tt const static}) table containing the command line description. If you want
181to decide which options to acccept during the run-time, using one of the
182{\tt AddXXX()} functions above might be preferable.
183
184\membersection{Customization}\label{wxcmdlineparsercustomization}
185
186wxCmdLineParser has several global options which may be changed by the
187application. All of the functions described in this section should be called
188before \helpref{Parse}{wxcmdlineparserparse}.
189
190First global option is the support for long (also known as GNU-style) options.
191The long options are the ones which start with two dashes ({\tt "--"}) and look
192like this: {\tt --verbose}, i.e. they generally are complete words and not some
193abbreviations of them. As long options are used by more and more applications,
194they are enabled by default, but may be disabled with
195\helpref{DisableLongOptions}{wxcmdlineparserdisablelongoptions}.
196
197Another global option is the set of characters which may be used to start an
198option (otherwise, the word on the command line is assumed to be a parameter).
199Under Unix, {\tt '-'} is always used, but Windows has at least two common
200choices for this: {\tt '-'} and {\tt '/'}. Some programs also use {\tt '+'}.
201The default is to use what suits most the current platform, but may be changed
202with \helpref{SetSwitchChars}{wxcmdlineparsersetswitchchars} method.
203
204Finally, \helpref{SetLogo}{wxcmdlineparsersetlogo} can be used to show some
205application-specific text before the explanation given by
206\helpref{Usage}{wxcmdlineparserusage} function.
207
208\membersection{Parsing command line}\label{wxcmdlineparserparsing}
209
97d59046 210After the command line description was constructed and the desired options were
f6bcfd97
BP
211set, you can finally call \helpref{Parse}{wxcmdlineparserparse} method.
212It returns $0$ if the command line was correct and was parsed, $-1$ if the help
213option was specified (this is a separate case as, normally, the program will
214terminate after this) or a positive number if there was an error during the
215command line parsing.
216
217In the latter case, the appropriate error message and usage information are
218logged by wxCmdLineParser itself using the standard wxWindows logging functions.
219
220\membersection{Getting results}\label{wxcmdlineparsergettingresults}
221
222After calling \helpref{Parse}{wxcmdlineparserparse} (and if it returned $0$),
223you may access the results of parsing using one of overloaded {\tt Found()}
224methods.
225
226For a simple switch, you will simply call
227\helpref{Found}{wxcmdlineparserfoundswitch} to determine if the switch was given
228or not, for an option or a parameter, you will call a version of {\tt Found()}
229which also returns the associated value in the provided variable. All
230{\tt Found()} functions return TRUE if the switch or option were found in the
231command line or FALSE if they were not specified.
232
233%%%%%%%%%%%%% Methods in alphabetic order %%%%%%%%%%%%%
234\helponly{\insertatlevel{2}{
235
236\wxheading{Members}
237
238}}
239
240\membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserdef}
241
242\func{}{wxCmdLineParser}{\void}
243
244Default constructor. You must use
97d59046 245\helpref{SetCmdLine}{wxcmdlineparsersetcmdlineargc} later.
f6bcfd97
BP
246
247\membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserargc}
248
249\func{}{wxCmdLineParser}{\param{int }{argc}, \param{char** }{argv}}
250
251Constructor specifies the command line to parse. This is the traditional
252(Unix) command line format. The parameters {\it argc} and {\it argv} have the
253same meaning as for {\tt main()} function.
254
255\membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserstr}
256
257\func{}{wxCmdLineParser}{\param{const wxString\& }{cmdline}}
258
259Constructor specifies the command line to parse in Windows format. The parameter
260{\it cmdline} has the same meaning as the corresponding parameter of
261{\tt WinMain()}.
262
263\membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserdesc}
264
265\func{}{wxCmdLineParser}{\param{const wxCmdLineEntryDesc* }{desc}}
266
267Same as \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserdef}, but also
268specifies the \helpref{command line description}{wxcmdlineparsersetdesc}.
269
270\membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserdescargc}
271
272\func{}{wxCmdLineParser}{\param{const wxCmdLineEntryDesc* }{desc}, \param{int }{argc}, \param{char** }{argv}}
273
274Same as \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserargc}, but also
275specifies the \helpref{command line description}{wxcmdlineparsersetdesc}.
276
277\membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserdescstr}
278
279\func{}{wxCmdLineParser}{\param{const wxCmdLineEntryDesc* }{desc}, \param{const wxString\& }{cmdline}}
280
281Same as \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserstr}, but also
282specifies the \helpref{command line description}{wxcmdlineparsersetdesc}.
283
284\membersection{wxCmdLineParser::SetCmdLine}\label{wxcmdlineparsersetcmdlineargc}
285
286\func{void}{SetCmdLine}{\param{int }{argc}, \param{char** }{argv}}
287
288Set command line to parse after using one of the constructors which don't do it.
289
290\wxheading{See also}
291
292\helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserargc}
293
294\membersection{wxCmdLineParser::SetCmdLine}\label{wxcmdlineparsersetcmdlinestr}
295
296\func{void}{SetCmdLine}{\param{const wxString\& }{cmdline}}
297
298Set command line to parse after using one of the constructors which don't do it.
299
300\wxheading{See also}
301
302\helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserstr}
303
304\membersection{wxCmdLineParser::\destruct{wxCmdLineParser}}\label{wxcmdlineparserdtor}
305
306\func{}{\destruct{wxCmdLineParser}}{\void}
307
308Frees resources allocated by the object.
309
310{\bf NB:} destructor is not virtual, don't use this class polymorphically.
311
312\membersection{wxCmdLineParser::SetSwitchChars}\label{wxcmdlineparsersetswitchchars}
313
314\func{void}{SetSwitchChars}{\param{const wxString\& }{switchChars}}
315
316{\it switchChars} contains all characters with which an option or switch may
317start. Default is {\tt "-"} for Unix, {\tt "-/"} for Windows.
318
319\membersection{wxCmdLineParser::EnableLongOptions}\label{wxcmdlineparserenablelongoptions}
320
321\func{void}{EnableLongOptions}{\param{bool }{enable = TRUE}}
322
323Enable or disable support for the long options.
324
325As long options are not (yet) POSIX-compliant, this option allows to disable
326them.
327
328\wxheading{See also}
329
330\helpref{Customization}{wxcmdlineparsercustomization}
331
332\membersection{wxCmdLineParser::DisableLongOptions}\label{wxcmdlineparserdisablelongoptions}
333
334\func{void}{DisableLongOptions}{\void}
335
336Ientical to \helpref{EnableLongOptions(FALSE)}{wxcmdlineparserenablelongoptions}.
337
338\membersection{wxCmdLineParser::SetLogo}\label{wxcmdlineparsersetlogo}
339
340\func{void}{SetLogo}{\param{const wxString\& }{logo}}
341
342{\it logo} is some extra text which will be shown by
343\helpref{Usage}{wxcmdlineparserusage} method.
344
345\membersection{wxCmdLineParser::SetDesc}\label{wxcmdlineparsersetdesc}
346
347\func{void}{SetDesc}{\param{const wxCmdLineEntryDesc* }{desc}}
348
349Construct the command line description
350
351Take the command line description from the wxCMD\_LINE\_NONE terminated table.
352
353Example of usage:
354
355\begin{verbatim}
356static const wxCmdLineEntryDesc cmdLineDesc[] =
357{
358 { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose" },
359 { wxCMD_LINE_SWITCH, "q", "quiet", "be quiet" },
360
361 { wxCMD_LINE_OPTION, "o", "output", "output file" },
362 { wxCMD_LINE_OPTION, "i", "input", "input dir" },
363 { wxCMD_LINE_OPTION, "s", "size", "output block size", wxCMD_LINE_VAL_NUMBER },
364 { wxCMD_LINE_OPTION, "d", "date", "output file date", wxCMD_LINE_VAL_DATE },
365
366 { wxCMD_LINE_PARAM, NULL, NULL, "input file", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE },
367
368 { wxCMD_LINE_NONE }
369};
370
371wxCmdLineParser parser;
372
373parser.SetDesc(cmdLineDesc);
374\end{verbatim}
375
376\membersection{wxCmdLineParser::AddSwitch}\label{wxcmdlineparseraddswitch}
377
378\func{void}{AddSwitch}{\param{const wxString\& }{name}, \param{const wxString\& }{lng = wxEmptyString}, \param{const wxString\& }{desc = wxEmptyString}, \param{int }{flags = 0}}
379
380Add a switch {\it name} with an optional long name {\it lng} (no long name if it
381is empty, which is default), description {\it desc} and flags {\it flags} to the
382command line description.
383
384\membersection{wxCmdLineParser::AddOption}\label{wxcmdlineparseraddoption}
385
386\func{void}{AddOption}{\param{const wxString\& }{name}, \param{const wxString\& }{lng = wxEmptyString}, \param{const wxString\& }{desc = wxEmptyString}, \param{wxCmdLineParamType }{type = wxCMD\_LINE\_VAL\_STRING}, \param{int }{flags = 0}}
387
388Add an option {\it name} with an optional long name {\it lng} (no long name if
389it is empty, which is default) taking a value of the given type (string by
390default) to the command line description.
391
392\membersection{wxCmdLineParser::AddParam}\label{wxcmdlineparseraddparam}
393
394\func{void}{AddParam}{\param{const wxString\& }{desc = wxEmptyString}, \param{wxCmdLineParamType }{type = wxCMD\_LINE\_VAL\_STRING}, \param{int }{flags = 0}}
395
396Add a parameter of the given {\it type} to the command line description.
397
398\membersection{wxCmdLineParser::Parse}\label{wxcmdlineparserparse}
399
400\func{int}{Parse}{\void}
401
402Parse the command line, return $0$ if ok, $-1$ if {\tt "-h"} or {\tt "--help"}
403option was encountered and the help message was given or a positive value if a
404syntax error occured.
405
406\membersection{wxCmdLineParser::Usage}\label{wxcmdlineparserusage}
407
408\func{void}{Usage}{\void}
409
410Give the standard usage message describing all program options. It will use the
411options and parameters descriptions specified earlier, so the resulting message
412will not be helpful to the user unless the descriptions were indeed specified.
413
414\wxheading{See also}
415
416\helpref{SetLogo}{wxcmdlineparsersetlogo}
417
418\membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfoundswitch}
419
420\constfunc{bool}{Found}{\param{const wxString\& }{name}}
421
422Returns TRUE if the given switch was found, FALSE otherwise.
423
424\membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfoundstringoption}
425
426\constfunc{bool}{Found}{\param{const wxString\& }{name}, \param{wxString* }{value}}
427
428Returns TRUE if an option taking a string value was found and stores the
429value in the provided pointer (which should not be NULL).
430
431\membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfoundintoption}
432
433\constfunc{bool}{Found}{\param{const wxString\& }{name}, \param{long* }{value}}
434
435Returns TRUE if an option taking an integer value was found and stores
436the value in the provided pointer (which should not be NULL).
437
438\membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfounddateoption}
439
440\constfunc{bool}{Found}{\param{const wxString\& }{name}, \param{wxDateTime* }{value}}
441
442Returns TRUE if an option taking a date value was found and stores the
443value in the provided pointer (which should not be NULL).
444
445\membersection{wxCmdLineParser::GetParamCount}\label{wxcmdlineparsergetparamcount}
446
447\constfunc{size\_t}{GetParamCount}{\void}
448
449Returns the number of parameters found. This function makes sense mostly if you
450had used {\tt wxCMD\_LINE\_PARAM\_MULTIPLE} flag.
451
452\membersection{wxCmdLineParser::GetParam}\label{wxcmdlineparsergetparam}
453
454\constfunc{wxString}{GetParam}{\param{size\_t }{n = 0u}}
455
456Returns the value of Nth parameter (as string only for now).
457
458\wxheading{See also}
459
460\helpref{GetParamCount}{wxcmdlineparsergetparamcount}
461