Renew the updater branch
Now with some actual consensus on what the updater will do!
This commit is contained in:
9
mmc_updater/depends/AnyOption/CMakeLists.txt
Normal file
9
mmc_updater/depends/AnyOption/CMakeLists.txt
Normal file
@ -0,0 +1,9 @@
|
||||
project(AnyOption)
|
||||
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
add_library(anyoption
|
||||
anyoption.cpp
|
||||
anyoption.h
|
||||
)
|
||||
|
16
mmc_updater/depends/AnyOption/README
Normal file
16
mmc_updater/depends/AnyOption/README
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
http://www.hackorama.com/anyoption/
|
||||
|
||||
AnyOption is a C++ class for easy parsing of complex commandline options. It also parses options from a rsourcefile in option value pair format.
|
||||
|
||||
AnyOption implements the traditional POSIX style character options ( -n ) as well as the newer GNU style long options ( --name ). Or you can use a simpler long option version ( -name ) by asking to ignore the POSIX style options.
|
||||
|
||||
AnyOption supports the traditional UNIX resourcefile syntax of, any line starting with "#" is a comment and the value pairs use ":" as a delimiter.
|
||||
|
||||
An option which expects a value is considered as an option value pair, while options without a value are considered flags.
|
||||
|
||||
Please read the header file for the documented public interface, and demo.cpp for an example of how easy it is to use AnyOption.
|
||||
|
||||
August 2004, added bug-fixes, and updates send by Michael Peters of Sandia Lab.
|
||||
September 2006, fix from Boyan Asenov for a bug in mixing up option type indexes.
|
||||
July 2011, fix from Min KJ and Costantino G for string allocation.
|
1176
mmc_updater/depends/AnyOption/anyoption.cpp
Normal file
1176
mmc_updater/depends/AnyOption/anyoption.cpp
Normal file
File diff suppressed because it is too large
Load Diff
270
mmc_updater/depends/AnyOption/anyoption.h
Normal file
270
mmc_updater/depends/AnyOption/anyoption.h
Normal file
@ -0,0 +1,270 @@
|
||||
#ifndef _ANYOPTION_H
|
||||
#define _ANYOPTION_H
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
|
||||
#define COMMON_OPT 1
|
||||
#define COMMAND_OPT 2
|
||||
#define FILE_OPT 3
|
||||
#define COMMON_FLAG 4
|
||||
#define COMMAND_FLAG 5
|
||||
#define FILE_FLAG 6
|
||||
|
||||
#define COMMAND_OPTION_TYPE 1
|
||||
#define COMMAND_FLAG_TYPE 2
|
||||
#define FILE_OPTION_TYPE 3
|
||||
#define FILE_FLAG_TYPE 4
|
||||
#define UNKNOWN_TYPE 5
|
||||
|
||||
#define DEFAULT_MAXOPTS 10
|
||||
#define MAX_LONG_PREFIX_LENGTH 2
|
||||
|
||||
#define DEFAULT_MAXUSAGE 3
|
||||
#define DEFAULT_MAXHELP 10
|
||||
|
||||
#define TRUE_FLAG "true"
|
||||
|
||||
using namespace std;
|
||||
|
||||
class AnyOption
|
||||
{
|
||||
|
||||
public: /* the public interface */
|
||||
AnyOption();
|
||||
AnyOption(int maxoptions );
|
||||
AnyOption(int maxoptions , int maxcharoptions);
|
||||
~AnyOption();
|
||||
|
||||
/*
|
||||
* following set methods specifies the
|
||||
* special characters and delimiters
|
||||
* if not set traditional defaults will be used
|
||||
*/
|
||||
|
||||
void setCommandPrefixChar( char _prefix ); /* '-' in "-w" */
|
||||
void setCommandLongPrefix( char *_prefix ); /* '--' in "--width" */
|
||||
void setFileCommentChar( char _comment ); /* '#' in shellscripts */
|
||||
void setFileDelimiterChar( char _delimiter );/* ':' in "width : 100" */
|
||||
|
||||
/*
|
||||
* provide the input for the options
|
||||
* like argv[] for commndline and the
|
||||
* option file name to use;
|
||||
*/
|
||||
|
||||
void useCommandArgs( int _argc, char **_argv );
|
||||
void useFiileName( const char *_filename );
|
||||
|
||||
/*
|
||||
* turn off the POSIX style options
|
||||
* this means anything starting with a '-' or "--"
|
||||
* will be considered a valid option
|
||||
* which alo means you cannot add a bunch of
|
||||
* POIX options chars together like "-lr" for "-l -r"
|
||||
*
|
||||
*/
|
||||
|
||||
void noPOSIX();
|
||||
|
||||
/*
|
||||
* prints warning verbose if you set anything wrong
|
||||
*/
|
||||
void setVerbose();
|
||||
|
||||
|
||||
/*
|
||||
* there are two types of options
|
||||
*
|
||||
* Option - has an associated value ( -w 100 )
|
||||
* Flag - no value, just a boolean flag ( -nogui )
|
||||
*
|
||||
* the options can be either a string ( GNU style )
|
||||
* or a character ( traditional POSIX style )
|
||||
* or both ( --width, -w )
|
||||
*
|
||||
* the options can be common to the commandline and
|
||||
* the optionfile, or can belong only to either of
|
||||
* commandline and optionfile
|
||||
*
|
||||
* following set methods, handle all the aboove
|
||||
* cases of options.
|
||||
*/
|
||||
|
||||
/* options comman to command line and option file */
|
||||
void setOption( const char *opt_string );
|
||||
void setOption( char opt_char );
|
||||
void setOption( const char *opt_string , char opt_char );
|
||||
void setFlag( const char *opt_string );
|
||||
void setFlag( char opt_char );
|
||||
void setFlag( const char *opt_string , char opt_char );
|
||||
|
||||
/* options read from commandline only */
|
||||
void setCommandOption( const char *opt_string );
|
||||
void setCommandOption( char opt_char );
|
||||
void setCommandOption( const char *opt_string , char opt_char );
|
||||
void setCommandFlag( const char *opt_string );
|
||||
void setCommandFlag( char opt_char );
|
||||
void setCommandFlag( const char *opt_string , char opt_char );
|
||||
|
||||
/* options read from an option file only */
|
||||
void setFileOption( const char *opt_string );
|
||||
void setFileOption( char opt_char );
|
||||
void setFileOption( const char *opt_string , char opt_char );
|
||||
void setFileFlag( const char *opt_string );
|
||||
void setFileFlag( char opt_char );
|
||||
void setFileFlag( const char *opt_string , char opt_char );
|
||||
|
||||
/*
|
||||
* process the options, registerd using
|
||||
* useCommandArgs() and useFileName();
|
||||
*/
|
||||
void processOptions();
|
||||
void processCommandArgs();
|
||||
void processCommandArgs( int max_args );
|
||||
bool processFile();
|
||||
|
||||
/*
|
||||
* process the specified options
|
||||
*/
|
||||
void processCommandArgs( int _argc, char **_argv );
|
||||
void processCommandArgs( int _argc, char **_argv, int max_args );
|
||||
bool processFile( const char *_filename );
|
||||
|
||||
/*
|
||||
* get the value of the options
|
||||
* will return NULL if no value is set
|
||||
*/
|
||||
char *getValue( const char *_option );
|
||||
bool getFlag( const char *_option );
|
||||
char *getValue( char _optchar );
|
||||
bool getFlag( char _optchar );
|
||||
|
||||
/*
|
||||
* Print Usage
|
||||
*/
|
||||
void printUsage();
|
||||
void printAutoUsage();
|
||||
void addUsage( const char *line );
|
||||
void printHelp();
|
||||
/* print auto usage printing for unknown options or flag */
|
||||
void autoUsagePrint(bool flag);
|
||||
|
||||
/*
|
||||
* get the argument count and arguments sans the options
|
||||
*/
|
||||
int getArgc();
|
||||
char* getArgv( int index );
|
||||
bool hasOptions();
|
||||
|
||||
private: /* the hidden data structure */
|
||||
int argc; /* commandline arg count */
|
||||
char **argv; /* commndline args */
|
||||
const char* filename; /* the option file */
|
||||
char* appname; /* the application name from argv[0] */
|
||||
|
||||
int *new_argv; /* arguments sans options (index to argv) */
|
||||
int new_argc; /* argument count sans the options */
|
||||
int max_legal_args; /* ignore extra arguments */
|
||||
|
||||
|
||||
/* option strings storage + indexing */
|
||||
int max_options; /* maximum number of options */
|
||||
const char **options; /* storage */
|
||||
int *optiontype; /* type - common, command, file */
|
||||
int *optionindex; /* index into value storage */
|
||||
int option_counter; /* counter for added options */
|
||||
|
||||
/* option chars storage + indexing */
|
||||
int max_char_options; /* maximum number options */
|
||||
char *optionchars; /* storage */
|
||||
int *optchartype; /* type - common, command, file */
|
||||
int *optcharindex; /* index into value storage */
|
||||
int optchar_counter; /* counter for added options */
|
||||
|
||||
/* values */
|
||||
char **values; /* common value storage */
|
||||
int g_value_counter; /* globally updated value index LAME! */
|
||||
|
||||
/* help and usage */
|
||||
const char **usage; /* usage */
|
||||
int max_usage_lines; /* max usage lines reseverd */
|
||||
int usage_lines; /* number of usage lines */
|
||||
|
||||
bool command_set; /* if argc/argv were provided */
|
||||
bool file_set; /* if a filename was provided */
|
||||
bool mem_allocated; /* if memory allocated in init() */
|
||||
bool posix_style; /* enables to turn off POSIX style options */
|
||||
bool verbose; /* silent|verbose */
|
||||
bool print_usage; /* usage verbose */
|
||||
bool print_help; /* help verbose */
|
||||
|
||||
char opt_prefix_char; /* '-' in "-w" */
|
||||
char long_opt_prefix[MAX_LONG_PREFIX_LENGTH + 1]; /* '--' in "--width" */
|
||||
char file_delimiter_char; /* ':' in width : 100 */
|
||||
char file_comment_char; /* '#' in "#this is a comment" */
|
||||
char equalsign;
|
||||
char comment;
|
||||
char delimiter;
|
||||
char endofline;
|
||||
char whitespace;
|
||||
char nullterminate;
|
||||
|
||||
bool set; //was static member
|
||||
bool once; //was static member
|
||||
|
||||
bool hasoptions;
|
||||
bool autousage;
|
||||
|
||||
private: /* the hidden utils */
|
||||
void init();
|
||||
void init(int maxopt, int maxcharopt );
|
||||
bool alloc();
|
||||
void cleanup();
|
||||
bool valueStoreOK();
|
||||
|
||||
/* grow storage arrays as required */
|
||||
bool doubleOptStorage();
|
||||
bool doubleCharStorage();
|
||||
bool doubleUsageStorage();
|
||||
|
||||
bool setValue( const char *option , char *value );
|
||||
bool setFlagOn( const char *option );
|
||||
bool setValue( char optchar , char *value);
|
||||
bool setFlagOn( char optchar );
|
||||
|
||||
void addOption( const char* option , int type );
|
||||
void addOption( char optchar , int type );
|
||||
void addOptionError( const char *opt);
|
||||
void addOptionError( char opt);
|
||||
bool findFlag( char* value );
|
||||
void addUsageError( const char *line );
|
||||
bool CommandSet();
|
||||
bool FileSet();
|
||||
bool POSIX();
|
||||
|
||||
char parsePOSIX( char* arg );
|
||||
int parseGNU( char *arg );
|
||||
bool matchChar( char c );
|
||||
int matchOpt( char *opt );
|
||||
|
||||
/* dot file methods */
|
||||
char *readFile();
|
||||
char *readFile( const char* fname );
|
||||
bool consumeFile( char *buffer );
|
||||
void processLine( char *theline, int length );
|
||||
char *chomp( char *str );
|
||||
void valuePairs( char *type, char *value );
|
||||
void justValue( char *value );
|
||||
|
||||
void printVerbose( const char *msg );
|
||||
void printVerbose( char *msg );
|
||||
void printVerbose( char ch );
|
||||
void printVerbose( );
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif /* ! _ANYOPTION_H */
|
Reference in New Issue
Block a user