%LTFATARGHELPER  Parse arguments for LTFAT
%   Usage: [flags,varargout]  = ltfatarghelper(posdepnames,definput,arglist,callfun);
%
%   Input parameters:
%      posdepnames : Names of the position dependant parameters.
%      definput    : Struct to define the allowed input
%      arglist     : Commandline of the calling function (varargin)
%      callfun     : Name of calling function (optional)
%
%   Output parameters:
%      flags       : Struct with information about flags.
%      keyvals     : Struct with key / values.
%      varargout   : The position dependant pars. properly initialized
%
%   `[flags,keyvals]=ltfatarghelper(posdepnames,definput,arglist)` assists in
%   parsing input parameters for a function in LTFAT. Parameters come in
%   four categories:
%  
%   * Position dependant parameters. These must not be strings. These are
%     the first parameters passed to a function, and they are really just a
%     short way of specifying key/value pairs. See below.
%
%   * Flags. These are single string appearing after the position dependant
%     parameters.
%
%   * Key/value pairs. The key is always a string followed by the value,
%     which can be anything.
%
%   * Expansions. These appear as flags, that expand into a pre-defined list
%     of parameters.  This is a short-hand way of specifying standard sets of
%     flags and key/value pairs.
%
%   The parameters are parsed in order, so parameters appearing later in
%   varargin will override previously set values.
%
%   The following example for calling `ltfatarghelper` is taken from |dgt|::
%  
%     definput.keyvals.L=[];
%     definput.flags.phase={'freqinv','timeinv'};
%     [flags,kv]=ltfatarghelper({'L'},definput,varargin);
%
%   The first line defines a key/value pair with the key `'L'` having an
%   initial value of `[]` (the empty matrix).
%
%   The second line defines a group of flags by the name of `phase`.  The
%   group `phase` contains the flags `'freqinv'` and `'timeinv'`, which can
%   both be specified on the command line by the user. The group-name
%   `phase` is just for internal use, and does not appear to the user. The
%   flag mentioned first in the list will be selected by default, and only
%   one flag in a group can be selected at any time. A group can contain as
%   many flags as desired.
%   
%   The third line is the actual call to `ltfatarghelper` which defines the
%   output `flags` and `kv`.  The input `{'L'}` indicates that the value of
%   the parameter `'L'` can also be given as the very first value in
%   varargin.
%
%   The output struct `kv` contains the key/value pairs, so the value
%   associated to `'L'` is stored in `kv.L`.
%
%   The output struct `flags` contains information about the flags choosen
%   by the user. The value of `flags.phase` will be set to the selected flag
%   in the group `phase` and additionally, the value of `flags.do_timeinv`
%   will be 1 if `'timeinv'` was selected and 0 otherwise, and similarly for
%   `'freqinv'`. This allows for easy checking of selected flags.
%
%   See also: ltfatgetdefaults, ltfatsetdefaults
%

