]> Creatis software - clitk.git/blob - utilities/gengetopt/skels/generic_option.cc
Sync gengetopt cmake files with rtk
[clitk.git] / utilities / gengetopt / skels / generic_option.cc
1 /*
2  * File automatically generated by
3  * gengen 1.2 by Lorenzo Bettini 
4  * http://www.gnu.org/software/gengen
5  */
6
7 #include "generic_option.h"
8
9 void
10 generic_option_gen_class::generate_generic_option(ostream &stream, unsigned int indent)
11 {
12   string indent_str (indent, ' ');
13   indent = 0;
14
15   if (has_short_option)
16     {
17       stream << "case '";
18       generate_string (short_option, stream, indent + indent_str.length ());
19       stream << "':     /* ";
20       generate_string (option_comment, stream, indent + indent_str.length ());
21       stream << ".  */";
22       stream << "\n";
23       stream << indent_str;
24       if (( short_option == "?" ))
25         {
26           stream << "\n";
27           stream << indent_str;
28           stream << "  if (optopt) /* '?' represents an unrecognized option */";
29           stream << "\n";
30           stream << indent_str;
31           stream << "    goto failure;";
32           stream << "\n";
33           stream << indent_str;
34         }
35     }
36   else
37     {
38       stream << "/* ";
39       generate_string (option_comment, stream, indent + indent_str.length ());
40       stream << ".  */";
41       stream << "\n";
42       stream << indent_str;
43       generate_string (gen_else, stream, indent + indent_str.length ());
44       stream << "if (strcmp (long_options[option_index].name, \"";
45       generate_string (long_option, stream, indent + indent_str.length ());
46       stream << "\") == 0)";
47       stream << "\n";
48       stream << indent_str;
49       stream << "{";
50       stream << "\n";
51       stream << indent_str;
52     }
53   if (option_has_mode)
54     {
55       stream << "  args_info->";
56       generate_string (group_var_name, stream, indent + indent_str.length ());
57       stream << "_mode_counter += 1;";
58       stream << "\n";
59       stream << indent_str;
60     }
61   stream << "\n";
62   stream << indent_str;
63   if (multiple)
64     {
65       if (option_has_type)
66         {
67           stream << "  if (update_multiple_arg_temp(&";
68           generate_string (structure, stream, indent + indent_str.length ());
69           stream << ", ";
70           stream << "\n";
71           stream << indent_str;
72           stream << "      &(local_args_info.";
73           generate_string (option_var_name, stream, indent + indent_str.length ());
74           stream << "_given), optarg, ";
75           generate_string (possible_values, stream, indent + indent_str.length ());
76           stream << ", ";
77           generate_string (default_value, stream, indent + indent_str.length ());
78           stream << ", ";
79           generate_string (arg_type, stream, indent + indent_str.length ());
80           stream << ",";
81           stream << "\n";
82           stream << indent_str;
83           stream << "      \"";
84           generate_string (long_option, stream, indent + indent_str.length ());
85           stream << "\", '";
86           generate_string (short_option, stream, indent + indent_str.length ());
87           stream << "',";
88           stream << "\n";
89           stream << indent_str;
90           stream << "      additional_error))";
91           stream << "\n";
92           stream << indent_str;
93           stream << "    goto failure;";
94           stream << "\n";
95           stream << indent_str;
96         }
97       else
98         {
99           stream << "  local_args_info.";
100           generate_string (option_var_name, stream, indent + indent_str.length ());
101           stream << "_given++;";
102           stream << "\n";
103           stream << indent_str;
104         }
105       if (option_has_group)
106         {
107           stream << "  if (!args_info->";
108           generate_string (option_var_name, stream, indent + indent_str.length ());
109           stream << "_group)";
110           stream << "\n";
111           stream << indent_str;
112           stream << "    {";
113           stream << "\n";
114           stream << indent_str;
115           stream << "      args_info->";
116           generate_string (option_var_name, stream, indent + indent_str.length ());
117           stream << "_group = 1;";
118           stream << "\n";
119           stream << indent_str;
120           stream << "      args_info->";
121           generate_string (group_var_name, stream, indent + indent_str.length ());
122           stream << "_group_counter += 1;";
123           stream << "\n";
124           stream << indent_str;
125           stream << "    }";
126           stream << "\n";
127           stream << indent_str;
128         }
129     }
130   else
131     {
132       if (option_has_group)
133         {
134           stream << "  if (args_info->";
135           generate_string (group_var_name, stream, indent + indent_str.length ());
136           stream << "_group_counter && override)";
137           stream << "\n";
138           stream << indent_str;
139           stream << "    reset_group_";
140           generate_string (group_var_name, stream, indent + indent_str.length ());
141           stream << " (args_info);";
142           stream << "\n";
143           stream << indent_str;
144           stream << "  args_info->";
145           generate_string (group_var_name, stream, indent + indent_str.length ());
146           stream << "_group_counter += 1;";
147           stream << "\n";
148           stream << indent_str;
149         }
150       stream << "\n";
151       stream << indent_str;
152       if (( arg_type == "ARG_FLAG" ))
153         {
154           stream << "  if (update_arg((void *)&(args_info->";
155           generate_string (option_var_name, stream, indent + indent_str.length ());
156           stream << "_flag), 0, &(args_info->";
157           generate_string (option_var_name, stream, indent + indent_str.length ());
158           stream << "_given),";
159           stream << "\n";
160           stream << indent_str;
161           stream << "      &(local_args_info.";
162           generate_string (option_var_name, stream, indent + indent_str.length ());
163           stream << "_given), optarg, 0, 0, ";
164           generate_string (arg_type, stream, indent + indent_str.length ());
165           stream << ",";
166           stream << "\n";
167           stream << indent_str;
168           stream << "      check_ambiguity, override, 1, 0, \"";
169           generate_string (long_option, stream, indent + indent_str.length ());
170           stream << "\", '";
171           generate_string (short_option, stream, indent + indent_str.length ());
172           stream << "',";
173           stream << "\n";
174           stream << indent_str;
175           stream << "      additional_error))";
176           stream << "\n";
177           stream << indent_str;
178           stream << "    goto failure;";
179           stream << "\n";
180           stream << indent_str;
181         }
182       else
183         {
184           stream << "  if (update_arg(";
185           if (( arg_type == "ARG_NO" ))
186             {
187               stream << " 0 ";
188             }
189           else
190             {
191               stream << " (void *)&(args_info->";
192               generate_string (option_var_name, stream, indent + indent_str.length ());
193               stream << "_arg)";
194             }
195           stream << ", ";
196           stream << "\n";
197           stream << indent_str;
198           indent = 6;
199           stream << "      ";
200           if (( arg_type == "ARG_NO" ))
201             {
202               stream << " 0 ";
203             }
204           else
205             {
206               stream << " &(args_info->";
207               generate_string (option_var_name, stream, indent + indent_str.length ());
208               stream << "_orig)";
209             }
210           stream << ", &(args_info->";
211           generate_string (option_var_name, stream, indent + indent_str.length ());
212           stream << "_given),";
213           indent = 0;
214           stream << "\n";
215           stream << indent_str;
216           stream << "      &(local_args_info.";
217           generate_string (option_var_name, stream, indent + indent_str.length ());
218           stream << "_given), optarg, ";
219           generate_string (possible_values, stream, indent + indent_str.length ());
220           stream << ", ";
221           generate_string (default_value, stream, indent + indent_str.length ());
222           stream << ", ";
223           generate_string (arg_type, stream, indent + indent_str.length ());
224           stream << ",";
225           stream << "\n";
226           stream << indent_str;
227           stream << "      check_ambiguity, override, 0, 0,";
228           stream << "\n";
229           stream << indent_str;
230           stream << "      \"";
231           generate_string (long_option, stream, indent + indent_str.length ());
232           stream << "\", '";
233           generate_string (short_option, stream, indent + indent_str.length ());
234           stream << "',";
235           stream << "\n";
236           stream << indent_str;
237           stream << "      additional_error))";
238           stream << "\n";
239           stream << indent_str;
240           stream << "    goto failure;";
241           stream << "\n";
242           stream << indent_str;
243         }
244       if (( final_instructions != "" ))
245         {
246           indent = 2;
247           stream << "  ";
248           generate_string (final_instructions, stream, indent + indent_str.length ());
249           indent = 0;
250           stream << "\n";
251           stream << indent_str;
252         }
253     }
254   if (has_short_option)
255     {
256       stream << "\n";
257       stream << indent_str;
258       stream << "  break;";
259     }
260   else
261     {
262       stream << "\n";
263       stream << indent_str;
264       stream << "}";
265       stream << "\n";
266       stream << indent_str;
267     }
268 }