Node:Argp Special Keys, Next:Argp Parsing State, Up:Argp Parser Functions
In addition to key values corresponding to user options, the key argument to argp parser functions may have a number of other special values. In the following example arg and state refer to parser function arguments. See Argp Parser Functions.
ARGP_KEY_ARG
When there are multiple parser functions in play due to argp parsers
being combined, it's impossible to know which one will handle a specific
argument.  Each is called until one returns 0 or an error other than
ARGP_ERR_UNKNOWN; if an argument is not handled,
argp_parse immediately returns success, without parsing any more
arguments.
Once a parser function returns success for this key, that fact is
recorded, and the ARGP_KEY_NO_ARGS case won't be
used.  However, if while processing the argument a parser function
decrements the next field of its state argument, the option
won't be considered processed; this is to allow you to actually modify
the argument, perhaps into an option, and have it processed again.
ARGP_KEY_ARGS
ARGP_ERR_UNKNOWN for
ARGP_KEY_ARG, it is immediately called again with the key
ARGP_KEY_ARGS, which has a similar meaning, but is slightly more
convenient for consuming all remaining arguments.  arg is 0, and
the tail of the argument vector may be found at state->argv
+ state->next.  If success is returned for this key, and
state->next is unchanged, all remaining arguments are
considered to have been consumed.  Otherwise, the amount by which
state->next has been adjusted indicates how many were used. 
Here's an example that uses both, for different args:
...
case ARGP_KEY_ARG:
  if (state->arg_num == 0)
    /* First argument */
    first_arg = arg;
  else
    /* Let the next case parse it.  */
    return ARGP_KEY_UNKNOWN;
  break;
case ARGP_KEY_ARGS:
  remaining_args = state->argv + state->next;
  num_remaining_args = state->argc - state->next;
  break;
ARGP_KEY_END
ARGP_KEY_NO_ARGS
ARGP_KEY_END, where more general validity checks on
previously parsed arguments take place.
ARGP_KEY_INIT
child_input field of state, if any, are
copied to each child's state to be the initial value of the input
when their parsers are called.
ARGP_KEY_SUCCESS
ARGP_KEY_ERROR
ARGP_KEY_SUCCESS is never made.
ARGP_KEY_FINI
ARGP_KEY_SUCCESS and ARGP_KEY_ERROR.  Any resources
allocated by ARGP_KEY_INIT may be freed here.  At times, certain
resources allocated are to be returned to the caller after a successful
parse.  In that case, those particular resources can be freed in the
ARGP_KEY_ERROR case. 
In all cases, ARGP_KEY_INIT is the first key seen by parser
functions, and ARGP_KEY_FINI the last, unless an error was
returned by the parser for ARGP_KEY_INIT.  Other keys can occur
in one the following orders.  opt refers to an arbitrary option
key:
ARGP_KEY_NO_ARGS ARGP_KEY_END ARGP_KEY_SUCCESS
ARGP_KEY_ARG )... ARGP_KEY_END ARGP_KEY_SUCCESS
ARGP_KEY_ARG )... ARGP_KEY_SUCCESS
This occurs when every parser function returns ARGP_KEY_UNKNOWN
for an argument, in which case parsing stops at that argument if
arg_index is a null pointer.  Otherwise an error occurs. 
In all cases, if a non-null value for arg_index gets passed to
argp_parse, the index of the first unparsed command-line argument
is passed back in that value.
If an error occurs and is either detected by argp or because a parser
function returned an error value, each parser is called with
ARGP_KEY_ERROR.  No further calls are made, except the final call
with ARGP_KEY_FINI.