]> git.saurik.com Git - wxWidgets.git/blob - docs/latex/wx/cmdlpars.tex
fixes error/usage messages given by the cmd line parsing logic in wxApp;
[wxWidgets.git] / docs / latex / wx / cmdlpars.tex
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
14 wxCmdLineParser is a class for parsing command line.
15
16 It has the following features:
17
18 \begin{enumerate}\itemsep=0pt
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
25 To use it you should follow these steps:
26
27 \begin{enumerate}\itemsep=0pt
28 \item \helpref{construct}{wxcmdlineparserconstruction} an object of this class
29 giving 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
35 In 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
39 which doesn't have any value. We use the word switch to distinguish such boolean
40 options 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
43 unlike a switch. For example, {\tt -o:filename} might be an option which allows
44 to 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
50 No base class
51
52 \wxheading{Include files}
53
54 <wx/cmdline.h>
55
56 \wxheading{Constants}
57
58 The structure wxCmdLineEntryDesc is used to describe the one command
59 line switch, option or parameter. An array of such structures should be passed
60 to \helpref{SetDesc()}{wxcmdlineparsersetdesc}. Also, the meanings of parameters
61 of the {\tt AddXXX()} functions are the same as of the corresponding fields in
62 this structure:
63
64 \begin{verbatim}
65 struct 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
76 The type of a command line entity is in the {\tt kind} field and may be one of
77 the following constants:
78
79 {\small%
80 \begin{verbatim}
81 enum wxCmdLineEntryType
82 {
83 wxCMD_LINE_SWITCH,
84 wxCMD_LINE_OPTION,
85 wxCMD_LINE_PARAM,
86 wxCMD_LINE_NONE // use this to terminate the list
87 }
88 \end{verbatim}
89 }
90
91 The 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
93 name. Both of these fields are unused for the parameters. Both the short and
94 long option names can contain only letters, digits and the underscores.
95
96 {\tt description} is used by the \helpref{Usage()}{wxcmdlineparserusage} method
97 to construct a help message explaining the syntax of the program.
98
99 The possible values of {\tt type} which specifies the type of the value accepted
100 by an option or parameter are:
101
102 {\small%
103 \begin{verbatim}
104 enum wxCmdLineParamType
105 {
106 wxCMD_LINE_VAL_STRING, // default
107 wxCMD_LINE_VAL_NUMBER,
108 wxCMD_LINE_VAL_DATE,
109 wxCMD_LINE_VAL_NONE
110 }
111 \end{verbatim}
112 }
113
114 Finally, the {\tt flags} field is a combination of the following bit masks:
115
116 {\small%
117 \begin{verbatim}
118 enum
119 {
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
125 }
126 \end{verbatim}
127 }
128
129 Notice that by default (i.e. if flags are just $0$), options are optional (sic)
130 and each call to \helpref{AddParam()}{wxcmdlineparseraddparam} allows one more
131 parameter - 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
135 variable number of parameters - but it only can be given for the last parameter
136 in the command line description. If you use this flag, you will probably need to
137 use \helpref{GetParamCount}{wxcmdlineparsergetparamcount} to retrieve the number
138 of parameters effectively specified after calling
139 \helpref{Parse}{wxcmdlineparserparse}.
140
141 The last flag {\tt wxCMD\_LINE\_NEEDS\_SEPARATOR} can be specified to require a
142 separator (either a colon, an equal sign or white space) between the option
143 name 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}\\
148 console sample
149
150 %%%%%%%%%%%%% Methods by group %%%%%%%%%%%%%
151 \latexignore{\rtfignore{\wxheading{Function groups}}}
152
153 \membersection{Construction}\label{wxcmdlineparserconstruction}
154
155 Before \helpref{Parse}{wxcmdlineparserparse} can be called, the command line
156 parser object must have the command line to parse and also the rules saying
157 which switches, options and parameters are valid - this is called command line
158 description in what follows.
159
160 You have complete freedom of choice as to when specify the required information,
161 the only restriction is that it must be done before calling
162 \helpref{Parse}{wxcmdlineparserparse}.
163
164 To specify the command line to parse you may use either one of constructors
165 accepting it (\helpref{wxCmdLineParser(argc, argv)}{wxcmdlineparserwxcmdlineparserargc} or
166 \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserdescargc} usually) or,
167 if you use \helpref{the default constructor}{wxcmdlineparserwxcmdlineparserdef},
168 you can do it later by calling
169 \helpref{SetCmdLine}{wxcmdlineparsersetcmdlineargc}.
170
171 The same holds for command line description: it can be specified either in
172 the constructor (\helpref{without command line}{wxcmdlineparserwxcmdlineparserdesc} or
173 \helpref{together with it}{wxcmdlineparserwxcmdlineparserdescargc}) or
174 constructed later using either \helpref{SetDesc}{wxcmdlineparsersetdesc} or
175 combination of \helpref{AddSwitch}{wxcmdlineparseraddswitch},
176 \helpref{AddOption}{wxcmdlineparseraddoption} and
177 \helpref{AddParam}{wxcmdlineparseraddparam} methods.
178
179 Using constructors or \helpref{SetDesc}{wxcmdlineparsersetdesc} uses a (usually
180 {\tt const static}) table containing the command line description. If you want
181 to 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
186 wxCmdLineParser has several global options which may be changed by the
187 application. All of the functions described in this section should be called
188 before \helpref{Parse}{wxcmdlineparserparse}.
189
190 First global option is the support for long (also known as GNU-style) options.
191 The long options are the ones which start with two dashes ({\tt "--"}) and look
192 like this: {\tt --verbose}, i.e. they generally are complete words and not some
193 abbreviations of them. As long options are used by more and more applications,
194 they are enabled by default, but may be disabled with
195 \helpref{DisableLongOptions}{wxcmdlineparserdisablelongoptions}.
196
197 Another global option is the set of characters which may be used to start an
198 option (otherwise, the word on the command line is assumed to be a parameter).
199 Under Unix, {\tt '-'} is always used, but Windows has at least two common
200 choices for this: {\tt '-'} and {\tt '/'}. Some programs also use {\tt '+'}.
201 The default is to use what suits most the current platform, but may be changed
202 with \helpref{SetSwitchChars}{wxcmdlineparsersetswitchchars} method.
203
204 Finally, \helpref{SetLogo}{wxcmdlineparsersetlogo} can be used to show some
205 application-specific text before the explanation given by
206 \helpref{Usage}{wxcmdlineparserusage} function.
207
208 \membersection{Parsing command line}\label{wxcmdlineparserparsing}
209
210 After the command line description was constructed and the desired options were
211 set, you can finally call \helpref{Parse}{wxcmdlineparserparse} method.
212 It returns $0$ if the command line was correct and was parsed, $-1$ if the help
213 option was specified (this is a separate case as, normally, the program will
214 terminate after this) or a positive number if there was an error during the
215 command line parsing.
216
217 In the latter case, the appropriate error message and usage information are
218 logged by wxCmdLineParser itself using the standard wxWindows logging functions.
219
220 \membersection{Getting results}\label{wxcmdlineparsergettingresults}
221
222 After calling \helpref{Parse}{wxcmdlineparserparse} (and if it returned $0$),
223 you may access the results of parsing using one of overloaded {\tt Found()}
224 methods.
225
226 For a simple switch, you will simply call
227 \helpref{Found}{wxcmdlineparserfoundswitch} to determine if the switch was given
228 or not, for an option or a parameter, you will call a version of {\tt Found()}
229 which 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
231 command 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
244 Default constructor. You must use
245 \helpref{SetCmdLine}{wxcmdlineparsersetcmdlineargc} later.
246
247 \membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserargc}
248
249 \func{}{wxCmdLineParser}{\param{int }{argc}, \param{char** }{argv}}
250
251 Constructor specifies the command line to parse. This is the traditional
252 (Unix) command line format. The parameters {\it argc} and {\it argv} have the
253 same meaning as for {\tt main()} function.
254
255 \membersection{wxCmdLineParser::wxCmdLineParser}\label{wxcmdlineparserwxcmdlineparserstr}
256
257 \func{}{wxCmdLineParser}{\param{const wxString\& }{cmdline}}
258
259 Constructor 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
267 Same as \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserdef}, but also
268 specifies 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
274 Same as \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserargc}, but also
275 specifies 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
281 Same as \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserstr}, but also
282 specifies the \helpref{command line description}{wxcmdlineparsersetdesc}.
283
284 \membersection{wxCmdLineParser::ConvertStringToArgs}\label{wxcmdlineparserconvertstringtoargs}
285
286 \func{static wxArrayString}{ConvertStringToArgs}{\param{const wxChar }{*cmdline}}
287
288 Breaks down the string containing the full command line in words. The words are
289 separated by whitespace. The quotes can be used in the input string to quote
290 the white space and the back slashes can be used to quote the quotes.
291
292 \membersection{wxCmdLineParser::SetCmdLine}\label{wxcmdlineparsersetcmdlineargc}
293
294 \func{void}{SetCmdLine}{\param{int }{argc}, \param{char** }{argv}}
295
296 Set command line to parse after using one of the constructors which don't do it.
297
298 \wxheading{See also}
299
300 \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserargc}
301
302 \membersection{wxCmdLineParser::SetCmdLine}\label{wxcmdlineparsersetcmdlinestr}
303
304 \func{void}{SetCmdLine}{\param{const wxString\& }{cmdline}}
305
306 Set command line to parse after using one of the constructors which don't do it.
307
308 \wxheading{See also}
309
310 \helpref{wxCmdLineParser}{wxcmdlineparserwxcmdlineparserstr}
311
312 \membersection{wxCmdLineParser::\destruct{wxCmdLineParser}}\label{wxcmdlineparserdtor}
313
314 \func{}{\destruct{wxCmdLineParser}}{\void}
315
316 Frees resources allocated by the object.
317
318 {\bf NB:} destructor is not virtual, don't use this class polymorphically.
319
320 \membersection{wxCmdLineParser::SetSwitchChars}\label{wxcmdlineparsersetswitchchars}
321
322 \func{void}{SetSwitchChars}{\param{const wxString\& }{switchChars}}
323
324 {\it switchChars} contains all characters with which an option or switch may
325 start. Default is {\tt "-"} for Unix, {\tt "-/"} for Windows.
326
327 \membersection{wxCmdLineParser::EnableLongOptions}\label{wxcmdlineparserenablelongoptions}
328
329 \func{void}{EnableLongOptions}{\param{bool }{enable = TRUE}}
330
331 Enable or disable support for the long options.
332
333 As long options are not (yet) POSIX-compliant, this option allows to disable
334 them.
335
336 \wxheading{See also}
337
338 \helpref{Customization}{wxcmdlineparsercustomization}
339
340 \membersection{wxCmdLineParser::DisableLongOptions}\label{wxcmdlineparserdisablelongoptions}
341
342 \func{void}{DisableLongOptions}{\void}
343
344 Ientical to \helpref{EnableLongOptions(FALSE)}{wxcmdlineparserenablelongoptions}.
345
346 \membersection{wxCmdLineParser::SetLogo}\label{wxcmdlineparsersetlogo}
347
348 \func{void}{SetLogo}{\param{const wxString\& }{logo}}
349
350 {\it logo} is some extra text which will be shown by
351 \helpref{Usage}{wxcmdlineparserusage} method.
352
353 \membersection{wxCmdLineParser::SetDesc}\label{wxcmdlineparsersetdesc}
354
355 \func{void}{SetDesc}{\param{const wxCmdLineEntryDesc* }{desc}}
356
357 Construct the command line description
358
359 Take the command line description from the wxCMD\_LINE\_NONE terminated table.
360
361 Example of usage:
362
363 \begin{verbatim}
364 static const wxCmdLineEntryDesc cmdLineDesc[] =
365 {
366 { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose" },
367 { wxCMD_LINE_SWITCH, "q", "quiet", "be quiet" },
368
369 { wxCMD_LINE_OPTION, "o", "output", "output file" },
370 { wxCMD_LINE_OPTION, "i", "input", "input dir" },
371 { wxCMD_LINE_OPTION, "s", "size", "output block size", wxCMD_LINE_VAL_NUMBER },
372 { wxCMD_LINE_OPTION, "d", "date", "output file date", wxCMD_LINE_VAL_DATE },
373
374 { wxCMD_LINE_PARAM, NULL, NULL, "input file", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE },
375
376 { wxCMD_LINE_NONE }
377 };
378
379 wxCmdLineParser parser;
380
381 parser.SetDesc(cmdLineDesc);
382 \end{verbatim}
383
384 \membersection{wxCmdLineParser::AddSwitch}\label{wxcmdlineparseraddswitch}
385
386 \func{void}{AddSwitch}{\param{const wxString\& }{name}, \param{const wxString\& }{lng = wxEmptyString}, \param{const wxString\& }{desc = wxEmptyString}, \param{int }{flags = 0}}
387
388 Add a switch {\it name} with an optional long name {\it lng} (no long name if it
389 is empty, which is default), description {\it desc} and flags {\it flags} to the
390 command line description.
391
392 \membersection{wxCmdLineParser::AddOption}\label{wxcmdlineparseraddoption}
393
394 \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}}
395
396 Add an option {\it name} with an optional long name {\it lng} (no long name if
397 it is empty, which is default) taking a value of the given type (string by
398 default) to the command line description.
399
400 \membersection{wxCmdLineParser::AddParam}\label{wxcmdlineparseraddparam}
401
402 \func{void}{AddParam}{\param{const wxString\& }{desc = wxEmptyString}, \param{wxCmdLineParamType }{type = wxCMD\_LINE\_VAL\_STRING}, \param{int }{flags = 0}}
403
404 Add a parameter of the given {\it type} to the command line description.
405
406 \membersection{wxCmdLineParser::Parse}\label{wxcmdlineparserparse}
407
408 \func{int}{Parse}{\param{bool }{giveUsage = {\tt TRUE}}}
409
410 Parse the command line, return $0$ if ok, $-1$ if {\tt "-h"} or {\tt "--help"}
411 option was encountered and the help message was given or a positive value if a
412 syntax error occured.
413
414 \wxheading{Parameters}
415
416 \docparam{giveUsage}{If {\tt TRUE} (default), the usage message is given if a
417 syntax error was encountered while parsing the command line or if help was
418 requested. If {\tt FALSE}, only error messages about possible syntax errors
419 are given, use \helpref{Usage}{wxcmdlineparserusage} to show the usage message
420 from the caller if needed.}
421
422 \membersection{wxCmdLineParser::Usage}\label{wxcmdlineparserusage}
423
424 \func{void}{Usage}{\void}
425
426 Give the standard usage message describing all program options. It will use the
427 options and parameters descriptions specified earlier, so the resulting message
428 will not be helpful to the user unless the descriptions were indeed specified.
429
430 \wxheading{See also}
431
432 \helpref{SetLogo}{wxcmdlineparsersetlogo}
433
434 \membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfoundswitch}
435
436 \constfunc{bool}{Found}{\param{const wxString\& }{name}}
437
438 Returns TRUE if the given switch was found, FALSE otherwise.
439
440 \membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfoundstringoption}
441
442 \constfunc{bool}{Found}{\param{const wxString\& }{name}, \param{wxString* }{value}}
443
444 Returns TRUE if an option taking a string value was found and stores the
445 value in the provided pointer (which should not be NULL).
446
447 \membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfoundintoption}
448
449 \constfunc{bool}{Found}{\param{const wxString\& }{name}, \param{long* }{value}}
450
451 Returns TRUE if an option taking an integer value was found and stores
452 the value in the provided pointer (which should not be NULL).
453
454 \membersection{wxCmdLineParser::Found}\label{wxcmdlineparserfounddateoption}
455
456 \constfunc{bool}{Found}{\param{const wxString\& }{name}, \param{wxDateTime* }{value}}
457
458 Returns TRUE if an option taking a date value was found and stores the
459 value in the provided pointer (which should not be NULL).
460
461 \membersection{wxCmdLineParser::GetParamCount}\label{wxcmdlineparsergetparamcount}
462
463 \constfunc{size\_t}{GetParamCount}{\void}
464
465 Returns the number of parameters found. This function makes sense mostly if you
466 had used {\tt wxCMD\_LINE\_PARAM\_MULTIPLE} flag.
467
468 \membersection{wxCmdLineParser::GetParam}\label{wxcmdlineparsergetparam}
469
470 \constfunc{wxString}{GetParam}{\param{size\_t }{n = 0u}}
471
472 Returns the value of Nth parameter (as string only for now).
473
474 \wxheading{See also}
475
476 \helpref{GetParamCount}{wxcmdlineparsergetparamcount}
477