// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: cmndline.h,v 1.1 1998/09/22 05:30:26 jgg Exp $
+// $Id: cmndline.h,v 1.7 1999/10/31 06:32:28 jgg Exp $
/* ######################################################################
Command Line Class - Sophisticated command line parser
CommandLine::Args Args[] =
{{'q',"quiet","apt::get::quiet",CommandLine::IntLevel},
- {0,0,0,0,0}};
+ {0,0,0,0}};
The flags mean,
HasArg - Means the argument has a value
ConfigFile - Means this flag should be interprited as the name of
a config file to read in at this point in option processing.
Implies HasArg.
+ ArbItem - Means the item is an arbitrary configuration string of
+ the form item=value, where item is passed directly
+ to the configuration class.
The default, if the flags are 0 is to use Boolean
##################################################################### */
/*}}}*/
-// Header section: pkglib
#ifndef PKGLIB_CMNDLINE_H
#define PKGLIB_CMNDLINE_H
-#ifdef __GNUG__
-#pragma interface "apt-pkg/cmndline.h"
-#endif
-
+#ifndef APT_8_CLEANER_HEADERS
#include <apt-pkg/configuration.h>
+#endif
+
+class Configuration;
class CommandLine
{
public:
struct Args;
+ struct Dispatch;
protected:
Args *ArgList;
Configuration *Conf;
- bool HandleOpt(int &I,int argc,const char *argv[],const char *&Opt,Args *A);
-
+ bool HandleOpt(int &I,int argc,const char *argv[],
+ const char *&Opt,Args *A,bool PreceedeMatch = false);
+ void static SaveInConfig(unsigned int const &argc, char const * const * const argv);
+
public:
enum AFlags
IntLevel = (1 << 1),
Boolean = (1 << 2),
InvBoolean = (1 << 3),
- ConfigFile = (1 << 4) | HasArg
+ ConfigFile = (1 << 4) | HasArg,
+ ArbItem = (1 << 5) | HasArg
};
const char **FileList;
bool Parse(int argc,const char **argv);
void ShowHelp();
+ unsigned int FileSize() const;
+ bool DispatchArg(Dispatch *List,bool NoMatch = true);
+ static char const * GetCommand(Dispatch const * const Map,
+ unsigned int const argc, char const * const * const argv);
+
+ static CommandLine::Args MakeArgs(char ShortOpt, char const *LongOpt,
+ char const *ConfName, unsigned long Flags);
+
CommandLine(Args *AList,Configuration *Conf);
+ ~CommandLine();
};
struct CommandLine::Args
unsigned long Flags;
inline bool end() {return ShortOpt == 0 && LongOpt == 0;};
+ inline bool IsBoolean() {return Flags == 0 || (Flags & (Boolean|InvBoolean)) != 0;};
};
-
+
+struct CommandLine::Dispatch
+{
+ const char *Match;
+ bool (*Handler)(CommandLine &);
+};
+
#endif