~ubuntu-branches/ubuntu/hardy/gengetopt/hardy

« back to all changes in this revision

Viewing changes to src/skels/generic_option.cc

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2008-01-29 14:55:40 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20080129145540-bkah1bl330gpelmh
Tags: 2.22-1ubuntu1
* Merge with Debian; remaining changes:
  - Fix build failures with g++-4.3.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
      stream << ".  */";
22
22
      stream << "\n";
23
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
        }
24
35
    }
25
36
  else
26
37
    {
39
50
      stream << "\n";
40
51
      stream << indent_str;
41
52
    }
42
 
  stream << "  if (local_args_info.";
43
 
  generate_string (option_var_name, stream, indent + indent_str.length ());
44
 
  stream << "_given || (check_ambiguity && args_info->";
45
 
  generate_string (option_var_name, stream, indent + indent_str.length ());
46
 
  stream << "_given))";
47
 
  stream << "\n";
48
 
  stream << indent_str;
49
 
  stream << "    {";
50
 
  stream << "\n";
51
 
  stream << indent_str;
52
 
  stream << "      fprintf (stderr, \"%s: `--";
53
 
  generate_string (long_option, stream, indent + indent_str.length ());
54
 
  stream << "'";
55
 
  if (has_short_option)
56
 
    {
57
 
      stream << " (`-";
58
 
      generate_string (short_option, stream, indent + indent_str.length ());
59
 
      stream << "')";
60
 
    }
61
 
  stream << " option given more than once%s\\n\", ";
62
 
  generate_string (package_var_name, stream, indent + indent_str.length ());
63
 
  stream << ", (additional_error ? additional_error : \"\"));";
64
 
  stream << "\n";
65
 
  stream << indent_str;
66
 
  stream << "      goto failure;";
67
 
  stream << "\n";
68
 
  stream << indent_str;
69
 
  stream << "    }";
70
 
  stream << "\n";
71
 
  stream << indent_str;
72
 
  if (option_has_values)
73
 
    {
74
 
      stream << "  if ((found = check_possible_values((optarg ? optarg : ";
75
 
      if (( defaultval != "" ))
76
 
        {
77
 
          stream << "\"";
78
 
          generate_string (defaultval, stream, indent + indent_str.length ());
79
 
          stream << "\" ";
80
 
        }
81
 
      else
82
 
        {
83
 
          stream << "0 ";
84
 
        }
85
 
      stream << "), ";
86
 
      generate_string (option_values, stream, indent + indent_str.length ());
87
 
      stream << ")) < 0)";
88
 
      stream << "\n";
89
 
      stream << indent_str;
90
 
      stream << "    {";
91
 
      stream << "\n";
92
 
      stream << indent_str;
93
 
      stream << "      fprintf (stderr, \"%s: %s argument, \\\"%s\\\", for option `--";
94
 
      generate_string (long_option, stream, indent + indent_str.length ());
95
 
      stream << "'";
96
 
      if (has_short_option)
97
 
        {
98
 
          stream << " (`-";
99
 
          generate_string (short_option, stream, indent + indent_str.length ());
100
 
          stream << "')";
101
 
        }
102
 
      stream << "%s\\n\", ";
103
 
      generate_string (package_var_name, stream, indent + indent_str.length ());
104
 
      stream << ", (found == -2) ? \"ambiguous\" : \"invalid\", optarg, (additional_error ? additional_error : \"\"));";
105
 
      stream << "\n";
106
 
      stream << indent_str;
107
 
      stream << "      goto failure;";
108
 
      stream << "\n";
109
 
      stream << indent_str;
110
 
      stream << "    }";
111
 
      stream << "\n";
112
 
      stream << indent_str;
113
 
    }
114
 
  stream << "  if (args_info->";
115
 
  generate_string (option_var_name, stream, indent + indent_str.length ());
116
 
  stream << "_given && ! override)";
117
 
  stream << "\n";
118
 
  stream << indent_str;
119
 
  stream << "    continue;";
120
 
  stream << "\n";
121
 
  stream << indent_str;
122
 
  stream << "  local_args_info.";
123
 
  generate_string (option_var_name, stream, indent + indent_str.length ());
124
 
  stream << "_given = 1;";
125
 
  stream << "\n";
126
 
  stream << indent_str;
127
 
  stream << "  args_info->";
128
 
  generate_string (option_var_name, stream, indent + indent_str.length ());
129
 
  stream << "_given = 1;";
130
 
  generate_string (update_group_count, stream, indent + indent_str.length ());
131
 
  stream << "\n";
132
 
  stream << indent_str;
133
 
  indent = 2;
134
 
  stream << "  ";
135
 
  generate_string (update_arg, stream, indent + indent_str.length ());
136
 
  if (has_short_option)
137
 
    {
138
 
      
139
 
 
 
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;";
140
259
    }
141
260
  else
142
261
    {