]> git.saurik.com Git - apt.git/blame - apt-pkg/contrib/cmndline.h
Clean support
[apt.git] / apt-pkg / contrib / cmndline.h
CommitLineData
08e8f724
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
7f25bdff 3// $Id: cmndline.h,v 1.6 1999/01/18 06:20:07 jgg Exp $
08e8f724
AL
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 /*}}}*/
08e8f724
AL
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
50class CommandLine
51{
52 public:
53 struct Args;
bc4af0b9 54 struct Dispatch;
08e8f724
AL
55
56 protected:
57
58 Args *ArgList;
59 Configuration *Conf;
0d47bd08
AL
60 bool HandleOpt(int &I,int argc,const char *argv[],
61 const char *&Opt,Args *A,bool PreceedeMatch = false);
62
08e8f724
AL
63 public:
64
65 enum AFlags
66 {
67 HasArg = (1 << 0),
68 IntLevel = (1 << 1),
69 Boolean = (1 << 2),
70 InvBoolean = (1 << 3),
e1b74f61
AL
71 ConfigFile = (1 << 4) | HasArg,
72 ArbItem = (1 << 5) | HasArg
08e8f724
AL
73 };
74
75 const char **FileList;
76
77 bool Parse(int argc,const char **argv);
78 void ShowHelp();
e1b74f61 79 unsigned int FileSize() const;
b0b4efb9 80 bool DispatchArg(Dispatch *List,bool NoMatch = true);
08e8f724
AL
81
82 CommandLine(Args *AList,Configuration *Conf);
e1b74f61 83 ~CommandLine();
08e8f724
AL
84};
85
86struct 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;};
e1b74f61 94 inline bool IsBoolean() {return Flags == 0 || (Flags & (Boolean|InvBoolean)) != 0;};
08e8f724 95};
bc4af0b9
AL
96
97struct CommandLine::Dispatch
98{
99 const char *Match;
100 bool (*Handler)(CommandLine &);
101};
102
08e8f724 103#endif