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