home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / include / apt-pkg / cmndline.h < prev    next >
C/C++ Source or Header  |  1999-06-21  |  3KB  |  104 lines

  1. // -*- mode: cpp; mode: fold -*-
  2. // Description                                /*{{{*/
  3. // $Id: cmndline.h,v 1.6 1999/01/18 06:20:07 jgg Exp $
  4. /* ######################################################################
  5.  
  6.    Command Line Class - Sophisticated command line parser
  7.    
  8.    This class provides a unified command line parser/option handliner/
  9.    configuration mechanism. It allows the caller to specify the option
  10.    set and map the option set into the configuration class or other
  11.    special functioning.
  12.    
  13.    Filenames are stripped from the option stream and put into their
  14.    own array.
  15.    
  16.    The argument descriptor array can be initialized as:
  17.    
  18.  CommandLine::Args Args[] = 
  19.  {{'q',"quiet","apt::get::quiet",CommandLine::IntLevel},
  20.   {0,0,0,0,0}};
  21.    
  22.    The flags mean,
  23.      HasArg - Means the argument has a value
  24.      IntLevel - Means the argument is an integer level indication, the
  25.                 following -qqqq (+3) -q5 (=5) -q=5 (=5) are valid
  26.      Boolean  - Means it is true/false or yes/no. 
  27.                 -d (true) --no-d (false) --yes-d (true)
  28.                 --long (true) --no-long (false) --yes-long (true)
  29.                 -d=yes (true) -d=no (false) Words like enable, disable,
  30.                 true false, yes no and on off are recognized in logical 
  31.                 places.
  32.      InvBoolean - Same as boolean but the case with no specified sense
  33.                   (first case) is set to false.
  34.      ConfigFile - Means this flag should be interprited as the name of 
  35.                   a config file to read in at this point in option processing.
  36.                   Implies HasArg.
  37.    The default, if the flags are 0 is to use Boolean
  38.    
  39.    ##################################################################### */
  40.                                     /*}}}*/
  41. #ifndef PKGLIB_CMNDLINE_H
  42. #define PKGLIB_CMNDLINE_H
  43.  
  44. #ifdef __GNUG__
  45. #pragma interface "apt-pkg/cmndline.h"
  46. #endif 
  47.  
  48. #include <apt-pkg/configuration.h>
  49.  
  50. class CommandLine
  51. {
  52.    public:
  53.    struct Args;
  54.    struct Dispatch;
  55.    
  56.    protected:
  57.    
  58.    Args *ArgList;
  59.    Configuration *Conf;
  60.    bool HandleOpt(int &I,int argc,const char *argv[],
  61.           const char *&Opt,Args *A,bool PreceedeMatch = false);
  62.  
  63.    public:
  64.    
  65.    enum AFlags 
  66.    {
  67.       HasArg = (1 << 0),
  68.       IntLevel = (1 << 1),
  69.       Boolean = (1 << 2),
  70.       InvBoolean = (1 << 3),
  71.       ConfigFile = (1 << 4) | HasArg,
  72.       ArbItem = (1 << 5) | HasArg
  73.    };
  74.  
  75.    const char **FileList;
  76.    
  77.    bool Parse(int argc,const char **argv);
  78.    void ShowHelp();
  79.    unsigned int FileSize() const;
  80.    bool DispatchArg(Dispatch *List,bool NoMatch = true);
  81.       
  82.    CommandLine(Args *AList,Configuration *Conf);
  83.    ~CommandLine();
  84. };
  85.  
  86. struct CommandLine::Args
  87. {
  88.    char ShortOpt;
  89.    const char *LongOpt;
  90.    const char *ConfName;
  91.    unsigned long Flags;
  92.    
  93.    inline bool end() {return ShortOpt == 0 && LongOpt == 0;};
  94.    inline bool IsBoolean() {return Flags == 0 || (Flags & (Boolean|InvBoolean)) != 0;};
  95. };
  96.  
  97. struct CommandLine::Dispatch
  98. {
  99.    const char *Match;
  100.    bool (*Handler)(CommandLine &);
  101. };
  102.  
  103. #endif
  104.