/usr/include/wvstreams/wvargs.h is in libwvstreams-dev 4.6.1-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 | /* -*- Mode: C++ -*-
* Copyright (C) 2004-2005 Net Integration Technologies, Inc.
*
* WvStreams interface for command-line argument processing
*/
#ifndef __WVARGS_H
#define __WVARGS_H
#include "wvstring.h"
#include "wvstringlist.h"
#include "wvtr1.h"
class WvArgsOption;
class WvArgsData;
/*!
@brief WvArgs - Sane command-line argument processing for WvStreams
WvArgs allows you to specify a series of typed or callback-enabled
command-line arguments. Once all of these arguments are specified,
the WvArgs::process(..) function can be called to perform the actual
argument processing.
Sample usage:
@code
#include "wvargs.h"
static void callback(void *userdata, WvStringParm value)
{
wvout->print("callback value = %s, userdata = %s\n",
value, (const char *)userdata);
}
int main(int argc, char **argv)
{
WvString str_opt = "default";
bool bool_opt = false;
int num_opt = 0;
WvArgs args;
args.add_option('s', "str", "Pass a string option", "string", str_opt);
args.add_set_bool_option('b', "bool", "Set a boolean option", bool_opt);
args.add_option('n', "num", "Pass a numeric option", "integer", num_opt);
args.add_option('c', "callback", "Callback option",
WvArgs::ArgCallback(callback), (void *)"demo");
WvStringList remaining_args;
args.process(argc, argv, &remaining_args);
wvout->print("str_opt=%s, bool_opt=%s, num_opt=%s\n",
str_opt, bool_opt, num_opt);
WvStringList::Iter i(remaining_args);
for (i.rewind(); i.next(); )
wvout->print("rem: %s\n", *i);
return 0;
}
@endcode
!*/
class WvArgs
{
public:
//!
//! The callback type used for switches that do not take a parameter.
//! It returns true if the switch was parsed correctly.
//!
typedef wv::function<bool(void*)> NoArgCallback;
//!
//! The callback type used for switches that take a parameter
//! It returns true if the switch was parsed correctly.
//!
typedef wv::function<bool(WvStringParm, void*)> ArgCallback;
private:
WvArgsData *data;
WvString args_doc;
WvString version;
WvString email;
WvString header;
WvString footer;
public:
WvArgs();
~WvArgs();
//!
//! Process the command line arguments passed to main() using the
//! options provided through calls to add_option(..). If
//! remaining_args is provided, any remaining arguments after the
//! command line switches will be appended to this list.
//!
bool process(int argc, char **argv,
WvStringList *remaining_args = NULL);
//! Set the --version string
void set_version(WvStringParm version);
//! Set the e-mail address for bug reports
void set_email(WvStringParm email);
//! Set the introductory help message, printed at the beginning of --help
void set_help_header(WvStringParm header);
//! Set the descriptive help message, printed at the end of --help
void set_help_footer(WvStringParm footer);
//!
//! Output the short usage message based on the provided options.
//! Useful when a bad value is passed as the parameter of a switch.
//!
void print_usage(int argc, char **argv);
//!
//! Output the long usage message based on the provided options.
//!
void print_help(int argc, char **argv);
//!
//! Add a boolean option, which, when specified, sets the specified
//! boolean variable to true.
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//!
//! \param val The boolean variable to set to true when the switch
//! is specified
//!
void add_set_bool_option(char short_option, WvStringParm long_option,
WvStringParm desc, bool &val);
//!
//! Add a boolean option, which, when spefied, sets the specified
//! boolean variable to false.
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//!
//! \param val The boolean variable to set to false when the switch
//! is specified
//!
void add_reset_bool_option(char short_option, WvStringParm long_option,
WvStringParm desc, bool &val);
//!
//! Add a boolean option, which, when spefied, changes the value
//! of the boolean variable from false to true or from true to false.
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//!
//! \param val The boolean variable to change when the switch
//! is specified
//!
void add_flip_bool_option(char short_option, WvStringParm long_option,
WvStringParm desc, bool &val);
//!
//! Add a switch that takes an integer argument
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//! \param arg_desc The (short) description of the argument;
//! NULL for none
//!
//! \param val The integer varible that gets the value of the argument
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, WvStringParm arg_desc, int &val);
//!
//! Add a switch that takes a long argument
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//! \param arg_desc The (short) description of the argument;
//! NULL for none
//!
//! \param val The long varible that gets the value of the argument
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, WvStringParm arg_desc, long &val);
//!
//! Add a switch that takes a float argument
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//! \param arg_desc The (short) description of the argument;
//! NULL for none
//!
//! \param val The float varible that gets the value of the argument
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, WvStringParm arg_desc, float &val);
//!
//! Add a switch that takes a double argument
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//! \param arg_desc The (short) description of the argument;
//! NULL for none
//!
//! \param val The double varible that gets the value of the argument
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, WvStringParm arg_desc, double &val);
//!
//! Add a switch that takes a string argument
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//! \param arg_desc The (short) description of the argument;
//! NULL for none
//!
//! \param val The string varible that gets the value of the argument
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, WvStringParm arg_desc, WvString &val);
//!
//! Add a switch that takes a string argument; the argument is
//! appended to a string list.
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//! \param arg_desc The (short) description of the argument;
//! NULL for none
//!
//! \param val The string list to which the argument is appended
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, WvStringParm arg_desc,
WvStringList &val);
//!
//! Add a switch which does not take an argument which invokes a
//! callback when it is specified.
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//!
//! \param cb The callback function to invoke when the switch is
//! encountered
//! \param ud A generic userdata pointer to pass to the callback
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, NoArgCallback cb, void *ud = NULL);
//!
//! Add a switch which takes an argument which invokes a
//! callback when it is specified.
//!
//! \param short_option The single-character version of the switch;
//! 0 for none
//! \param long_option The full-word version of the switch;
//! NULL for none
//! \param desc The description of the option; NULL for none
//! \param arg_desc The (short) description of the argument;
//! NULL for none
//!
//! \param cb The callback function to invoke when the switch is
//! encountered
//! \param ud A generic userdata pointer to pass to the callback
//!
void add_option(char short_option, WvStringParm long_option,
WvStringParm desc, WvStringParm arg_desc,
ArgCallback cb, void *ud = NULL);
//!
//! Add a required argument to the list of parameters. WvArgs will
//! return an error when run if it is not specified.
//!
//! \param The description of the parameter
//!
void add_required_arg(WvStringParm desc, bool multiple = false);
//!
//! Add an optional argument to the list of parameters.
//!
//! \param The description of the parameter
//!
void add_optional_arg(WvStringParm desc, bool multiple = false);
//!
//! Remove an option by specifying its short form.
//!
//! \note If an option has both a short and a long form they can only
//! both be removed with two seperate calls to
//!
void remove_option(char short_option);
//!
//! Remove an option by specifying its long form.
//!
//! \note If an option has both a short and a long form they can only
//! both be removed with two seperate calls to
//!
void remove_option(WvStringParm long_option);
//!
//! Remove all options
//!
void remove_all_options();
//!
//! An alias for remove_all_options()
//!
void zap()
{
remove_all_options();
}
//! These flags control the behaviour of WvArgs. By default, they are
//! all set to false.
enum flags_t
{
NO_EXIT_ON_ERRORS, // Do not exit when an error is encountered
FLAGS_SIZE // Number of flags that exist
};
//!
//! Get and set flags.
//!
bool get_flag(const flags_t flag) const;
void set_flag(const flags_t flag, const bool value);
};
#endif // __WVARGS_H
|