--- /dev/null
+/*
+ * File automatically generated by
+ * gengen 1.2 by Lorenzo Bettini
+ * http://www.gnu.org/software/gengen
+ */
+
+#include "generic_option.h"
+
+void
+generic_option_gen_class::generate_generic_option(ostream &stream, unsigned int indent)
+{
+ string indent_str (indent, ' ');
+ indent = 0;
+
+ if (has_short_option)
+ {
+ stream << "case '";
+ generate_string (short_option, stream, indent + indent_str.length ());
+ stream << "': /* ";
+ generate_string (option_comment, stream, indent + indent_str.length ());
+ stream << ". */";
+ stream << "\n";
+ stream << indent_str;
+ if (( short_option == "?" ))
+ {
+ stream << "\n";
+ stream << indent_str;
+ stream << " if (optopt) /* '?' represents an unrecognized option */";
+ stream << "\n";
+ stream << indent_str;
+ stream << " goto failure;";
+ stream << "\n";
+ stream << indent_str;
+ }
+ }
+ else
+ {
+ stream << "/* ";
+ generate_string (option_comment, stream, indent + indent_str.length ());
+ stream << ". */";
+ stream << "\n";
+ stream << indent_str;
+ generate_string (gen_else, stream, indent + indent_str.length ());
+ stream << "if (strcmp (long_options[option_index].name, \"";
+ generate_string (long_option, stream, indent + indent_str.length ());
+ stream << "\") == 0)";
+ stream << "\n";
+ stream << indent_str;
+ stream << "{";
+ stream << "\n";
+ stream << indent_str;
+ }
+ if (option_has_mode)
+ {
+ stream << " args_info->";
+ generate_string (group_var_name, stream, indent + indent_str.length ());
+ stream << "_mode_counter += 1;";
+ stream << "\n";
+ stream << indent_str;
+ }
+ stream << "\n";
+ stream << indent_str;
+ if (multiple)
+ {
+ if (option_has_type)
+ {
+ stream << " if (update_multiple_arg_temp(&";
+ generate_string (structure, stream, indent + indent_str.length ());
+ stream << ", ";
+ stream << "\n";
+ stream << indent_str;
+ stream << " &(local_args_info.";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_given), optarg, ";
+ generate_string (possible_values, stream, indent + indent_str.length ());
+ stream << ", ";
+ generate_string (default_value, stream, indent + indent_str.length ());
+ stream << ", ";
+ generate_string (arg_type, stream, indent + indent_str.length ());
+ stream << ",";
+ stream << "\n";
+ stream << indent_str;
+ stream << " \"";
+ generate_string (long_option, stream, indent + indent_str.length ());
+ stream << "\", '";
+ generate_string (short_option, stream, indent + indent_str.length ());
+ stream << "',";
+ stream << "\n";
+ stream << indent_str;
+ stream << " additional_error))";
+ stream << "\n";
+ stream << indent_str;
+ stream << " goto failure;";
+ stream << "\n";
+ stream << indent_str;
+ }
+ else
+ {
+ stream << " local_args_info.";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_given++;";
+ stream << "\n";
+ stream << indent_str;
+ }
+ if (option_has_group)
+ {
+ stream << " if (!args_info->";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_group)";
+ stream << "\n";
+ stream << indent_str;
+ stream << " {";
+ stream << "\n";
+ stream << indent_str;
+ stream << " args_info->";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_group = 1;";
+ stream << "\n";
+ stream << indent_str;
+ stream << " args_info->";
+ generate_string (group_var_name, stream, indent + indent_str.length ());
+ stream << "_group_counter += 1;";
+ stream << "\n";
+ stream << indent_str;
+ stream << " }";
+ stream << "\n";
+ stream << indent_str;
+ }
+ }
+ else
+ {
+ if (option_has_group)
+ {
+ stream << " if (args_info->";
+ generate_string (group_var_name, stream, indent + indent_str.length ());
+ stream << "_group_counter && override)";
+ stream << "\n";
+ stream << indent_str;
+ stream << " reset_group_";
+ generate_string (group_var_name, stream, indent + indent_str.length ());
+ stream << " (args_info);";
+ stream << "\n";
+ stream << indent_str;
+ stream << " args_info->";
+ generate_string (group_var_name, stream, indent + indent_str.length ());
+ stream << "_group_counter += 1;";
+ stream << "\n";
+ stream << indent_str;
+ }
+ stream << "\n";
+ stream << indent_str;
+ if (( arg_type == "ARG_FLAG" ))
+ {
+ stream << " if (update_arg((void *)&(args_info->";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_flag), 0, &(args_info->";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_given),";
+ stream << "\n";
+ stream << indent_str;
+ stream << " &(local_args_info.";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_given), optarg, 0, 0, ";
+ generate_string (arg_type, stream, indent + indent_str.length ());
+ stream << ",";
+ stream << "\n";
+ stream << indent_str;
+ stream << " check_ambiguity, override, 1, 0, \"";
+ generate_string (long_option, stream, indent + indent_str.length ());
+ stream << "\", '";
+ generate_string (short_option, stream, indent + indent_str.length ());
+ stream << "',";
+ stream << "\n";
+ stream << indent_str;
+ stream << " additional_error))";
+ stream << "\n";
+ stream << indent_str;
+ stream << " goto failure;";
+ stream << "\n";
+ stream << indent_str;
+ }
+ else
+ {
+ stream << " if (update_arg(";
+ if (( arg_type == "ARG_NO" ))
+ {
+ stream << " 0 ";
+ }
+ else
+ {
+ stream << " (void *)&(args_info->";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_arg)";
+ }
+ stream << ", ";
+ stream << "\n";
+ stream << indent_str;
+ indent = 6;
+ stream << " ";
+ if (( arg_type == "ARG_NO" ))
+ {
+ stream << " 0 ";
+ }
+ else
+ {
+ stream << " &(args_info->";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_orig)";
+ }
+ stream << ", &(args_info->";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_given),";
+ indent = 0;
+ stream << "\n";
+ stream << indent_str;
+ stream << " &(local_args_info.";
+ generate_string (option_var_name, stream, indent + indent_str.length ());
+ stream << "_given), optarg, ";
+ generate_string (possible_values, stream, indent + indent_str.length ());
+ stream << ", ";
+ generate_string (default_value, stream, indent + indent_str.length ());
+ stream << ", ";
+ generate_string (arg_type, stream, indent + indent_str.length ());
+ stream << ",";
+ stream << "\n";
+ stream << indent_str;
+ stream << " check_ambiguity, override, 0, 0,";
+ stream << "\n";
+ stream << indent_str;
+ stream << " \"";
+ generate_string (long_option, stream, indent + indent_str.length ());
+ stream << "\", '";
+ generate_string (short_option, stream, indent + indent_str.length ());
+ stream << "',";
+ stream << "\n";
+ stream << indent_str;
+ stream << " additional_error))";
+ stream << "\n";
+ stream << indent_str;
+ stream << " goto failure;";
+ stream << "\n";
+ stream << indent_str;
+ }
+ if (( final_instructions != "" ))
+ {
+ indent = 2;
+ stream << " ";
+ generate_string (final_instructions, stream, indent + indent_str.length ());
+ indent = 0;
+ stream << "\n";
+ stream << indent_str;
+ }
+ }
+ if (has_short_option)
+ {
+ stream << "\n";
+ stream << indent_str;
+ stream << " break;";
+ }
+ else
+ {
+ stream << "\n";
+ stream << indent_str;
+ stream << "}";
+ stream << "\n";
+ stream << indent_str;
+ }
+}