Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * OpenTyrian: A modern cross-platform port of Tyrian
  3.  * Copyright (C) 2007-2009  The OpenTyrian Development Team
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License
  7.  * as published by the Free Software Foundation; either version 2
  8.  * of the License, or (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  18.  */
  19. #ifndef ARG_PARSE_H
  20. #define ARG_PARSE_H
  21.  
  22. #include <stdbool.h>
  23.  
  24. // this is essentially a reimplementation of getopt_long()
  25.  
  26. typedef struct
  27. {
  28.         int value;
  29.         char short_opt;
  30.         const char *long_opt;
  31.         bool has_arg;
  32. }
  33. Options;
  34.  
  35. enum
  36. {
  37.         // indicates that argv[argn..argc) are not options
  38.         NOT_OPTION = 0,
  39.        
  40.         /* behavior of parse_args() is undefined after
  41.            it has returned any of the following values */
  42.         INVALID_OPTION = -1,
  43.         AMBIGUOUS_OPTION = -2,
  44.         OPTION_MISSING_ARG = -3
  45. };
  46.  
  47. typedef struct
  48. {
  49.         int value;
  50.         const char *arg;
  51.        
  52.         int argn;
  53. }
  54. Option;
  55.  
  56. Option parse_args( int argc, const char *argv[], const Options *options );
  57.  
  58. #endif /* ARG_PARSE_H */
  59.