Mercurial > vba-clojure
view src/sdl/getopt1.c @ 566:a2ff0032119e
changed jump from relative to absolute to allow for display-glyph code greater than 128 numbers.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 01 Sep 2012 03:03:46 -0500 |
parents | f9f4f1b99eed |
children |
line wrap: on
line source
1 /* getopt_long and getopt_long_only entry points for GNU getopt.2 Copyright (C) 1987,88,89,90,91,92,93,94,96,97,983 Free Software Foundation, Inc.5 NOTE: This source is derived from an old version taken from the GNU C6 Library (glibc).8 This program is free software; you can redistribute it and/or modify it9 under the terms of the GNU General Public License as published by the10 Free Software Foundation; either version 2, or (at your option) any11 later version.13 This program is distributed in the hope that it will be useful,14 but WITHOUT ANY WARRANTY; without even the implied warranty of15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the16 GNU General Public License for more details.18 You should have received a copy of the GNU General Public License19 along with this program; if not, write to the Free Software20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,21 USA. */23 #ifdef HAVE_CONFIG_H24 #include <config.h>25 #endif27 #include "getopt.h"29 #if !defined __STDC__ || !__STDC__30 /* This is a separate conditional since some stdc systems31 reject `defined (const)'. */32 #ifndef const33 #define const34 #endif35 #endif37 #include <stdio.h>39 /* Comment out all this code if we are using the GNU C Library, and are not40 actually compiling the library itself. This code is part of the GNU C41 Library, but also included in many other GNU distributions. Compiling42 and linking in this code is a waste when using the GNU C library43 (especially if it is a shared library). Rather than having every GNU44 program understand `configure --with-gnu-libc' and omit the object files,45 it is simpler to just do this in the source for each such file. */47 #define GETOPT_INTERFACE_VERSION 248 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 249 #include <gnu-versions.h>50 #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION51 #define ELIDE_CODE52 #endif53 #endif55 #ifndef ELIDE_CODE58 /* This needs to come after some library #include59 to get __GNU_LIBRARY__ defined. */60 #ifdef __GNU_LIBRARY__61 #include <stdlib.h>62 #endif64 #ifndef NULL65 #define NULL 066 #endif68 int69 getopt_long (argc, argv, options, long_options, opt_index)70 int argc;71 char *const *argv;72 const char *options;73 const struct option *long_options;74 int *opt_index;75 {76 return _getopt_internal (argc, argv, options, long_options, opt_index, 0);77 }79 /* Like getopt_long, but '-' as well as '--' can indicate a long option.80 If an option that starts with '-' (not '--') doesn't match a long option,81 but does match a short option, it is parsed as a short option82 instead. */84 int85 getopt_long_only (argc, argv, options, long_options, opt_index)86 int argc;87 char *const *argv;88 const char *options;89 const struct option *long_options;90 int *opt_index;91 {92 return _getopt_internal (argc, argv, options, long_options, opt_index, 1);93 }96 #endif /* Not ELIDE_CODE. */98 #ifdef TEST100 #include <stdio.h>102 int103 main (argc, argv)104 int argc;105 char **argv;106 {107 int c;108 int digit_optind = 0;110 while (1)111 {112 int this_option_optind = optind ? optind : 1;113 int option_index = 0;114 static struct option long_options[] =115 {116 {"add", 1, 0, 0},117 {"append", 0, 0, 0},118 {"delete", 1, 0, 0},119 {"verbose", 0, 0, 0},120 {"create", 0, 0, 0},121 {"file", 1, 0, 0},122 {0, 0, 0, 0}123 };125 c = getopt_long (argc, argv, "abc:d:0123456789",126 long_options, &option_index);127 if (c == -1)128 break;130 switch (c)131 {132 case 0:133 printf ("option %s", long_options[option_index].name);134 if (optarg)135 printf (" with arg %s", optarg);136 printf ("\n");137 break;139 case '0':140 case '1':141 case '2':142 case '3':143 case '4':144 case '5':145 case '6':146 case '7':147 case '8':148 case '9':149 if (digit_optind != 0 && digit_optind != this_option_optind)150 printf ("digits occur in two different argv-elements.\n");151 digit_optind = this_option_optind;152 printf ("option %c\n", c);153 break;155 case 'a':156 printf ("option a\n");157 break;159 case 'b':160 printf ("option b\n");161 break;163 case 'c':164 printf ("option c with value `%s'\n", optarg);165 break;167 case 'd':168 printf ("option d with value `%s'\n", optarg);169 break;171 case '?':172 break;174 default:175 printf ("?? getopt returned character code 0%o ??\n", c);176 }177 }179 if (optind < argc)180 {181 printf ("non-option ARGV-elements: ");182 while (optind < argc)183 printf ("%s ", argv[optind++]);184 printf ("\n");185 }187 exit (0);188 }190 #endif /* TEST */