"Fossies" - the Fresh Open Source Software Archive

Member "qdiff-0.9.1/tappconfig.h" (21 Oct 2008, 8892 Bytes) of package /linux/privat/old/qdiff-0.9.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "tappconfig.h" see the Fossies "Dox" file reference documentation.

    1 /*GPL*START*
    2  *
    3  * tappconfig.h - console application framework header file
    4  * 
    5  * Copyright (C) 1998 by Johannes Overmann <Johannes.Overmann@gmx.de>
    6  * 
    7  * This program is free software; you can redistribute it and/or modify
    8  * it under the terms of the GNU General Public License as published by
    9  * the Free Software Foundation; either version 2 of the License, or
   10  * (at your option) any later version.
   11  * 
   12  * This program is distributed in the hope that it will be useful,
   13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15  * GNU General Public License for more details.
   16  * 
   17  * You should have received a copy of the GNU General Public License
   18  * along with this program; if not, write to the Free Software
   19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   20  * *GPL*END*/  
   21 
   22 #ifndef _ngw_tappconfig_h_
   23 #define _ngw_tappconfig_h_
   24 
   25 #include "tmap.h"
   26 #include "tvector.h"
   27 #include "tstring.h"
   28 
   29 
   30 // global application pointer
   31 class TAppConfig;
   32 extern TAppConfig *tApp;
   33 
   34 // should be a private subclass of TAppConfig
   35 class TAppConfigItem {
   36  public:
   37    // types
   38 enum TACO_TYPE {TACO_TYPE_NONE, STRING, INT, DOUBLE, BOOL, SWITCH};
   39 enum TACO_STRING_MODE {OVERRIDE, APPEND, ONCE};
   40 enum TACO_SET_IN {NEVER, DEFAULT, COMMAND_LINE, RC_FILE, ENVIRONMENT, APPLICATION};
   41 
   42    // cons
   43    TAppConfigItem();
   44    TAppConfigItem(const char *confitem, const char *context, bool privat);
   45    
   46    // interface
   47    void printItemToFile(FILE *f) const; // print default
   48    void printCurItemToFile(FILE *f, bool simple) const; // print current
   49    void printValue(const tstring& env, const tstring& rcfile) const;
   50    void printHelp(int maxoptlen, bool globalonlycl) const;
   51    int getOptLen() const;
   52    tstring getTypeStr() const;
   53    void setValue(const tstring& par, TACO_SET_IN setin, 
   54          bool verbose=false, const tstring& env="", 
   55          const tstring& rcfile="",
   56          const tstring& context="command line");
   57    
   58    // set from application methods:
   59    
   60    // returns true if value is valid, else false
   61    // sets value from string according to any type (switch == bool here)
   62    bool setValueFromAppFromStr(const tstring& parameter);
   63    void setValueFromApp(const tstring& str);
   64    // returns true if value is valid, else false
   65    bool setValueFromApp(double d);
   66    // returns true if value is valid, else false
   67    bool setValueFromApp(int i);
   68    void setValueFromApp(bool b);
   69    
   70 
   71 
   72 
   73  private: 
   74    // private methods
   75    void setComp(const tvector<tstring>& a, bool privat);
   76    void validate(const char *context);
   77    void privateInit();
   78    tstring getParamStr() const;
   79    tstring getWasSetStr(const tstring& env, const tstring& rcfile) const;
   80    tstring getWasSetStr(TACO_SET_IN setin, const tstring& env, const tstring& rcfile) const;
   81    tstring getFlagsStr(const tstring& optprefix, bool globalonlycl) const;
   82    
   83 
   84  public:   
   85    // data
   86    bool must_have;
   87    bool should_have;
   88    bool only_cl;
   89    bool configopt;
   90    bool only_app;
   91    bool save;
   92    bool optional_param;
   93    bool hide;
   94    
   95    TACO_TYPE type;
   96    TACO_SET_IN set_in;
   97    TACO_STRING_MODE string_mode;
   98    tstring string_sep;
   99    double double_value, double_upper, double_lower, double_default;
  100    int int_value, int_upper, int_lower, int_default;
  101    bool bool_value, bool_default;
  102    
  103    // temp flag
  104    bool printed;
  105 
  106    tstring name;
  107    tstring context;
  108    tstring help;
  109    tstring headline;
  110    tstring char_name;
  111    tstring par;
  112    tvector<tstring> alias;
  113    tstring type_str;
  114    tstring upper, lower, def;
  115    tstring string_value, string_default;
  116 };
  117 
  118 
  119 // this is the main class of this h file
  120 class TAppConfig {
  121  public:
  122    // ctor & dtor
  123    TAppConfig(const char *conflist[], const char *listname,
  124           int argc, char *av[],
  125           const char *envstrname,
  126           const char *rcname,
  127           const tstring& version);
  128    ~TAppConfig();
  129       
  130    // main interface
  131    void printHelp(bool show_hidden = false) const;
  132    void printValues() const;
  133    bool save(tstring *rc_name_out = 0); // save items with item.save==true
  134    
  135    // typed options:
  136    const tstring& getString(const tstring& par) const;
  137    double getDouble(const tstring& par) const;
  138    int getInt(const tstring& par) const;
  139    bool getBool(const tstring& par) const;        // bool + switch
  140    bool getSwitch(const tstring& par) const;      // bool + switch
  141    bool operator() (const tstring& par) const; // bool + switch
  142    
  143    // untyped parameters:
  144    tstring param(int i) const { return _params[i]; }
  145    size_t numParam() const { return _params.size(); }
  146    const tvector<tstring>& params() const { return _params; }
  147    
  148    // set values: 
  149    // returns true if value is valid, else false
  150    // sets value from string according to any type (switch == bool here)
  151    bool setValueFromStr(const tstring &n, const tstring& str);
  152    void setValue(const tstring &n, const tstring& str);
  153    bool setValue(const tstring &n, double d);
  154    bool setValue(const tstring &n, int i);
  155    void setValue(const tstring &n, bool b);
  156 
  157    // return the upper and lower bounds and defaults for the type
  158    int intUpper(const tstring &n) const;
  159    int intLower(const tstring &n) const;
  160    int intDefault(const tstring &n) const;
  161    double doubleUpper(const tstring &n) const;
  162    double doubleLower(const tstring &n) const;
  163    double doubleDefault(const tstring &n) const;
  164    tstring stringDefault(const tstring &n) const;
  165    bool   boolDefault(const tstring &n) const;
  166 
  167    // return location where parameter was set
  168    TAppConfigItem::TACO_SET_IN wasSetIn(const tstring& n) const;
  169    bool wasSetByUser(const tstring& n) const;
  170    
  171  private:
  172    // readonly public data
  173    tvector<tstring> _params;
  174    
  175    // private data
  176    tmap<tstring,int> name;  // get index of long name
  177    int char2index[256];           // get index of short name
  178    tvector<TAppConfigItem> opt;    // all options in the order of conflist
  179    tmap<tstring,int> alias; // aliases for options
  180    tstring envname;    // name of env var
  181    tstring rc_name;    // name of loaded rc file
  182    tstring rc_str;     // namestr of rc file
  183    bool verbose_conf; // verbose configuration: warnings and values
  184    bool onlycl;       // true== dont use rcfile and envvar, only command line
  185    bool stopatdd;     // stop option scanning after --
  186    bool removedd;     // remove first -- param
  187    bool ignore_negnum;// something like -20 or -.57 is not trated as options
  188    tstring usage;      // usage string: printed before help
  189    tstring trailer;    // trailer string: printed after help
  190    tstring commonhead; // headline for common options
  191    
  192    int getMaxOptLen(bool show_hidden) const;
  193    void doMetaChar(const tstring& str, const tstring& context);
  194    void setComp(const tvector<tstring>& a, const tstring& context);
  195    void addConfigItems(const char **list, const char *listname, bool privat);
  196    void doCommandLine(int ac, char *av[], const tstring& version);
  197    void doEnvironVar(const char *envvar);
  198    void doRCFile(const tstring& rcfile, const tstring& clrcfile);
  199    void setFromStr(const tstring& str, const tstring& context, TAppConfigItem::TACO_SET_IN setin);
  200    tstring getName(const tstring& str, const tstring& context, const tstring& optprefix="", bool errorIfNotFound = true) const;
  201    void createRCFile(const tstring& fname, const tstring& rcname) const;
  202 };
  203 
  204 
  205 
  206 // global helper functions neede by tappconfig and other applications
  207 
  208 // file tools
  209 
  210 // return true if file is a directory
  211 bool fisdir(const char *fname);
  212 
  213 // return true if file is a regular file
  214 bool fisregular(const char *fname);
  215 
  216 // return true if file is a symbolic link
  217 bool fissymlink(const char *fname);
  218 
  219 // return false if nothing with this name exists
  220 bool fexists(const char *fname);
  221 
  222 // return length of file or -1 if file does not exist
  223 off_t flen(const char *fname);
  224 off_t flen(int fdes);
  225 off_t flen(FILE *file);
  226 
  227 
  228 // errors
  229 
  230 void userWarning(const char *message, ...)
  231 #ifdef __GNUC__
  232   __attribute__ ((format(printf,1,2)))
  233 #endif
  234     ;
  235 void userError(const char *message, ...) 
  236 #ifdef __GNUC__
  237   __attribute__ ((noreturn,format(printf,1,2)))
  238 #endif
  239     ;
  240 int setUserErrorExitStatus(int status);
  241 
  242 // checkpoint macros
  243 
  244 //#define CHECKPOINTS
  245 #define KEYWORD_CHECKPOINTS
  246 
  247 #ifdef CHECKPOINTS
  248 
  249 # ifdef __GNUC__
  250 #  define CP() addCheckpoint(__FILE__,__LINE__,__PRETTY_FUNCTION__)
  251 # else
  252 #  define CP() addCheckpoint(__FILE__,__LINE__)
  253 # endif
  254 int addCheckpoint(const char *file, int line, const char *func = 0);
  255 
  256 // keyword checkpoint
  257 # ifdef KEYWORD_CHECKPOINTS
  258 #  define for if(CP())for
  259 // #define while if(0);else while
  260 #  define do if(CP())do
  261 // #define if if(0);else if
  262 #  define else else if(CP())
  263 #  define switch if(CP())switch
  264 #  define break if(CP())break
  265 #  define return if(CP())return
  266 # endif
  267 
  268 // internal checkpoint data
  269 extern const char *checkpoint_file[];
  270 extern const char *checkpoint_func[];
  271 extern int checkpoint_line[];
  272 
  273 #endif
  274 
  275 
  276 #endif /* tappconfig.h */