]> git.saurik.com Git - apt.git/blob - apt-pkg/contrib/cmndline.h
Fixes for file opening
[apt.git] / apt-pkg / contrib / cmndline.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: cmndline.h,v 1.4 1998/11/25 23:54:31 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 // Header section: pkglib
42 #ifndef PKGLIB_CMNDLINE_H
43 #define PKGLIB_CMNDLINE_H
44
45 #ifdef __GNUG__
46 #pragma interface "apt-pkg/cmndline.h"
47 #endif
48
49 #include <apt-pkg/configuration.h>
50
51 class CommandLine
52 {
53 public:
54 struct Args;
55 struct Dispatch;
56
57 protected:
58
59 Args *ArgList;
60 Configuration *Conf;
61 bool HandleOpt(int &I,int argc,const char *argv[],
62 const char *&Opt,Args *A,bool PreceedeMatch = false);
63
64 public:
65
66 enum AFlags
67 {
68 HasArg = (1 << 0),
69 IntLevel = (1 << 1),
70 Boolean = (1 << 2),
71 InvBoolean = (1 << 3),
72 ConfigFile = (1 << 4) | HasArg,
73 ArbItem = (1 << 5) | HasArg
74 };
75
76 const char **FileList;
77
78 bool Parse(int argc,const char **argv);
79 void ShowHelp();
80 unsigned int FileSize() const;
81 bool DispatchArg(Dispatch *List);
82
83 CommandLine(Args *AList,Configuration *Conf);
84 ~CommandLine();
85 };
86
87 struct CommandLine::Args
88 {
89 char ShortOpt;
90 const char *LongOpt;
91 const char *ConfName;
92 unsigned long Flags;
93
94 inline bool end() {return ShortOpt == 0 && LongOpt == 0;};
95 inline bool IsBoolean() {return Flags == 0 || (Flags & (Boolean|InvBoolean)) != 0;};
96 };
97
98 struct CommandLine::Dispatch
99 {
100 const char *Match;
101 bool (*Handler)(CommandLine &);
102 };
103
104 #endif