+/* Parse a single option. */
+static error_t
+parse_opt(int key, char *arg, struct argp_state *state)
+{
+ switch (key) {
+ case 'd':
+ decode_debug_option(arg, state);
+ break;
+ case 'i':
+ decode_memory_size(arg, state, INT_MEM_ID);
+ break;
+ case 'x':
+ decode_memory_size(arg, state, EXT_MEM_ID);
+ break;
+ case ARGP_KEY_ARG:
+ if (state->arg_num >= ARGS_COUNT) {
+ /* Too many arguments. */
+ argp_usage(state);
+ }
+
+ options.filename = arg;
+ break;
+ case ARGP_KEY_END:
+ if (state->arg_num < ARGS_COUNT) {
+ /* Not enough arguments, but the filename is optional.
+ So no error. */
+ }
+ break;
+ default:
+ return ARGP_ERR_UNKNOWN;
+ }