diff src/sdl/getopt1.c @ 28:2efb971df515

bringing in SDL package
author Robert McIntyre <rlm@mit.edu>
date Sun, 04 Mar 2012 21:06:50 -0600
parents f9f4f1b99eed
children
line wrap: on
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/sdl/getopt1.c	Sun Mar 04 21:06:50 2012 -0600
     1.3 @@ -0,0 +1,190 @@
     1.4 +/* getopt_long and getopt_long_only entry points for GNU getopt.
     1.5 +   Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
     1.6 +     Free Software Foundation, Inc.
     1.7 +
     1.8 +   NOTE: This source is derived from an old version taken from the GNU C
     1.9 +   Library (glibc).
    1.10 +
    1.11 +   This program is free software; you can redistribute it and/or modify it
    1.12 +   under the terms of the GNU General Public License as published by the
    1.13 +   Free Software Foundation; either version 2, or (at your option) any
    1.14 +   later version.
    1.15 +
    1.16 +   This program is distributed in the hope that it will be useful,
    1.17 +   but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.18 +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1.19 +   GNU General Public License for more details.
    1.20 +
    1.21 +   You should have received a copy of the GNU General Public License
    1.22 +   along with this program; if not, write to the Free Software
    1.23 +   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
    1.24 +   USA.  */
    1.25 +
    1.26 +#ifdef HAVE_CONFIG_H
    1.27 +#include <config.h>
    1.28 +#endif
    1.29 +
    1.30 +#include "getopt.h"
    1.31 +
    1.32 +#if !defined __STDC__ || !__STDC__
    1.33 +/* This is a separate conditional since some stdc systems
    1.34 +   reject `defined (const)'.  */
    1.35 +#ifndef const
    1.36 +#define const
    1.37 +#endif
    1.38 +#endif
    1.39 +
    1.40 +#include <stdio.h>
    1.41 +
    1.42 +/* Comment out all this code if we are using the GNU C Library, and are not
    1.43 +   actually compiling the library itself.  This code is part of the GNU C
    1.44 +   Library, but also included in many other GNU distributions.  Compiling
    1.45 +   and linking in this code is a waste when using the GNU C library
    1.46 +   (especially if it is a shared library).  Rather than having every GNU
    1.47 +   program understand `configure --with-gnu-libc' and omit the object files,
    1.48 +   it is simpler to just do this in the source for each such file.  */
    1.49 +
    1.50 +#define GETOPT_INTERFACE_VERSION 2
    1.51 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
    1.52 +#include <gnu-versions.h>
    1.53 +#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
    1.54 +#define ELIDE_CODE
    1.55 +#endif
    1.56 +#endif
    1.57 +
    1.58 +#ifndef ELIDE_CODE
    1.59 +
    1.60 +
    1.61 +/* This needs to come after some library #include
    1.62 +   to get __GNU_LIBRARY__ defined.  */
    1.63 +#ifdef __GNU_LIBRARY__
    1.64 +#include <stdlib.h>
    1.65 +#endif
    1.66 +
    1.67 +#ifndef	NULL
    1.68 +#define NULL 0
    1.69 +#endif
    1.70 +
    1.71 +int
    1.72 +getopt_long (argc, argv, options, long_options, opt_index)
    1.73 +     int argc;
    1.74 +     char *const *argv;
    1.75 +     const char *options;
    1.76 +     const struct option *long_options;
    1.77 +     int *opt_index;
    1.78 +{
    1.79 +  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
    1.80 +}
    1.81 +
    1.82 +/* Like getopt_long, but '-' as well as '--' can indicate a long option.
    1.83 +   If an option that starts with '-' (not '--') doesn't match a long option,
    1.84 +   but does match a short option, it is parsed as a short option
    1.85 +   instead.  */
    1.86 +
    1.87 +int
    1.88 +getopt_long_only (argc, argv, options, long_options, opt_index)
    1.89 +     int argc;
    1.90 +     char *const *argv;
    1.91 +     const char *options;
    1.92 +     const struct option *long_options;
    1.93 +     int *opt_index;
    1.94 +{
    1.95 +  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
    1.96 +}
    1.97 +
    1.98 +
    1.99 +#endif	/* Not ELIDE_CODE.  */
   1.100 +
   1.101 +#ifdef TEST
   1.102 +
   1.103 +#include <stdio.h>
   1.104 +
   1.105 +int
   1.106 +main (argc, argv)
   1.107 +     int argc;
   1.108 +     char **argv;
   1.109 +{
   1.110 +  int c;
   1.111 +  int digit_optind = 0;
   1.112 +
   1.113 +  while (1)
   1.114 +    {
   1.115 +      int this_option_optind = optind ? optind : 1;
   1.116 +      int option_index = 0;
   1.117 +      static struct option long_options[] =
   1.118 +      {
   1.119 +	{"add", 1, 0, 0},
   1.120 +	{"append", 0, 0, 0},
   1.121 +	{"delete", 1, 0, 0},
   1.122 +	{"verbose", 0, 0, 0},
   1.123 +	{"create", 0, 0, 0},
   1.124 +	{"file", 1, 0, 0},
   1.125 +	{0, 0, 0, 0}
   1.126 +      };
   1.127 +
   1.128 +      c = getopt_long (argc, argv, "abc:d:0123456789",
   1.129 +		       long_options, &option_index);
   1.130 +      if (c == -1)
   1.131 +	break;
   1.132 +
   1.133 +      switch (c)
   1.134 +	{
   1.135 +	case 0:
   1.136 +	  printf ("option %s", long_options[option_index].name);
   1.137 +	  if (optarg)
   1.138 +	    printf (" with arg %s", optarg);
   1.139 +	  printf ("\n");
   1.140 +	  break;
   1.141 +
   1.142 +	case '0':
   1.143 +	case '1':
   1.144 +	case '2':
   1.145 +	case '3':
   1.146 +	case '4':
   1.147 +	case '5':
   1.148 +	case '6':
   1.149 +	case '7':
   1.150 +	case '8':
   1.151 +	case '9':
   1.152 +	  if (digit_optind != 0 && digit_optind != this_option_optind)
   1.153 +	    printf ("digits occur in two different argv-elements.\n");
   1.154 +	  digit_optind = this_option_optind;
   1.155 +	  printf ("option %c\n", c);
   1.156 +	  break;
   1.157 +
   1.158 +	case 'a':
   1.159 +	  printf ("option a\n");
   1.160 +	  break;
   1.161 +
   1.162 +	case 'b':
   1.163 +	  printf ("option b\n");
   1.164 +	  break;
   1.165 +
   1.166 +	case 'c':
   1.167 +	  printf ("option c with value `%s'\n", optarg);
   1.168 +	  break;
   1.169 +
   1.170 +	case 'd':
   1.171 +	  printf ("option d with value `%s'\n", optarg);
   1.172 +	  break;
   1.173 +
   1.174 +	case '?':
   1.175 +	  break;
   1.176 +
   1.177 +	default:
   1.178 +	  printf ("?? getopt returned character code 0%o ??\n", c);
   1.179 +	}
   1.180 +    }
   1.181 +
   1.182 +  if (optind < argc)
   1.183 +    {
   1.184 +      printf ("non-option ARGV-elements: ");
   1.185 +      while (optind < argc)
   1.186 +	printf ("%s ", argv[optind++]);
   1.187 +      printf ("\n");
   1.188 +    }
   1.189 +
   1.190 +  exit (0);
   1.191 +}
   1.192 +
   1.193 +#endif /* TEST */