]> git.saurik.com Git - apt.git/blob - apt-pkg/contrib/cmndline.h
This is realloc, not reallocf: be more careful :/.
[apt.git] / apt-pkg / contrib / cmndline.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: cmndline.h,v 1.7 1999/10/31 06:32:28 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}};
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 ArbItem - Means the item is an arbitrary configuration string of
38 the form item=value, where item is passed directly
39 to the configuration class.
40 The default, if the flags are 0 is to use Boolean
41
42 ##################################################################### */
43 /*}}}*/
44 #ifndef PKGLIB_CMNDLINE_H
45 #define PKGLIB_CMNDLINE_H
46
47 #include <apt-pkg/macros.h>
48
49 #ifndef APT_8_CLEANER_HEADERS
50 #include <apt-pkg/configuration.h>
51 #endif
52
53 class Configuration;
54
55 class CommandLine
56 {
57 public:
58 struct Args;
59 struct Dispatch;
60 struct DispatchWithHelp;
61
62 protected:
63
64 Args *ArgList;
65 Configuration *Conf;
66 bool HandleOpt(int &I,int argc,const char *argv[],
67 const char *&Opt,Args *A,bool PreceedeMatch = false);
68 void static SaveInConfig(unsigned int const &argc, char const * const * const argv);
69
70 public:
71
72 enum AFlags
73 {
74 HasArg = (1 << 0),
75 IntLevel = (1 << 1),
76 Boolean = (1 << 2),
77 InvBoolean = (1 << 3),
78 ConfigFile = (1 << 4) | HasArg,
79 ArbItem = (1 << 5) | HasArg
80 };
81
82 const char **FileList;
83
84 bool Parse(int argc,const char **argv);
85 void ShowHelp();
86 unsigned int FileSize() const APT_PURE;
87 // FIXME: merge on next ABI break
88 bool DispatchArg(Dispatch *List,bool NoMatch = true);
89 bool DispatchArg(Dispatch const * const List,bool NoMatch = true);
90
91 static char const * GetCommand(Dispatch const * const Map,
92 unsigned int const argc, char const * const * const argv) APT_PURE;
93
94 static CommandLine::Args MakeArgs(char ShortOpt, char const *LongOpt,
95 char const *ConfName, unsigned long Flags) APT_CONST;
96
97 CommandLine();
98 CommandLine(Args *AList,Configuration *Conf);
99 ~CommandLine();
100 };
101
102 struct CommandLine::Args
103 {
104 char ShortOpt;
105 const char *LongOpt;
106 const char *ConfName;
107 unsigned long Flags;
108
109 inline bool end() {return ShortOpt == 0 && LongOpt == 0;};
110 inline bool IsBoolean() {return Flags == 0 || (Flags & (Boolean|InvBoolean)) != 0;};
111 };
112
113 struct CommandLine::Dispatch
114 {
115 const char *Match;
116 bool (*Handler)(CommandLine &);
117 };
118
119 #endif