]> git.donarmstrong.com Git - lilypond.git/blob - flower/include/getopt-long.hh
opps. short option should be
[lilypond.git] / flower / include / getopt-long.hh
1 #ifndef GETOPT_LONG_HH
2 #define GETOPT_LONG_HH
3
4
5 #include "string.hh"
6
7 /**
8    a struct this for initialising the commandline options.
9 */
10 struct Long_option_init {
11   char const * take_arg_str0_;
12   char const * longname_str0_;
13
14   /*
15     = 0: don't take short version.
16   */
17   char shortname_char_;
18
19   char const * help_str0_;
20   
21   String to_string () const;
22   String str_for_help () const;
23   //   NO constructor!
24
25   static int compare (Long_option_init const&,Long_option_init const&);
26   static String table_string (Long_option_init *); 
27 };
28
29
30 /** C++ for version of long_getopt.  For processing GNU style command
31   line arguments.  No pointer (return values, arguments) contents are
32   copied.
33   
34   TODO: handle 
35   command  - , and command --
36   
37   argument reordering
38   */
39 class Getopt_long {
40
41   /// the option info.
42   const Long_option_init *option_a_;
43   int table_len_;
44     
45   /// if doing short option, arg_value_char_a_a_[optind][optindind] is processed next.
46   int argument_index_;
47
48   /// the option found
49   const Long_option_init *found_option_;
50
51
52 public: 
53   /** errorcodes: no error, argument expected, no argument expected,
54     unknown option, illegal argument (eg. int expected).  */
55   enum Errorcod { E_NOERROR = 0, E_ARGEXPECT, E_NOARGEXPECT, E_UNKNOWNOPTION,
56                   E_ILLEGALARG } ;
57
58   /// argument. Set to 0 if not present
59   char const * optional_argument_str0_;
60
61   /// current error status
62   Errorcod error_;
63
64   /// arg_value_char_a_a_[array_index_] will be processed next.
65   int array_index_;
66
67   /// the arguments
68   char **arg_value_char_a_a_;
69
70   /// the arg. count
71   int argument_count_;
72
73   FILE *error_out_;
74
75 public:
76   /// get ready for processing next error.
77   void next ();
78   const Long_option_init *parselong ();
79   const Long_option_init *parseshort ();
80   void OK () const;
81   bool ok () const;
82
83   /// report an error and abort
84   void report (Errorcod c);
85
86
87   /// return an integer (with err. detect)
88   long get_argument_index ();
89  
90     
91   /**
92     What to do with  errors. 
93     report messages on  #*os#, and abort.
94     if #os# is null, then do not report nor abort, just set #error#
95     */
96        
97   void seterror (FILE *os);
98
99   /// construct: pass arguments and option info.
100   Getopt_long (int c,  char **v, Long_option_init *lo);
101
102   /**  get the next option. 
103     @return pointer to next option found.
104     0 if error occurred, or next argument is no option.
105     */
106   const Long_option_init *operator () ();
107
108   char const *current_arg ();
109   char const * get_next_arg ();
110 };
111
112 #endif // GETOPT_LONG_HH