home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / Programming / Python2 / Python20_source / Python / getopt.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-10-25  |  2.4 KB  |  97 lines

  1. /*---------------------------------------------------------------------------*
  2.  * <RCS keywords>
  3.  *
  4.  * C++ Library
  5.  *
  6.  * Copyright 1992-1994, David Gottner
  7.  *
  8.  *                    All Rights Reserved
  9.  *
  10.  * Permission to use, copy, modify, and distribute this software and its 
  11.  * documentation for any purpose and without fee is hereby granted, 
  12.  * provided that the above copyright notice, this permission notice and
  13.  * the following disclaimer notice appear unmodified in all copies.
  14.  *
  15.  * I DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL I
  17.  * BE LIABLE FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
  18.  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER
  19.  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
  20.  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  21.  *
  22.  * Nevertheless, I would like to know about bugs in this library or
  23.  * suggestions for improvment.  Send bug reports and feedback to
  24.  * davegottner@delphi.com.
  25.  *---------------------------------------------------------------------------*/
  26.  
  27. #include <stdio.h>
  28. #include <string.h>
  29.  
  30. #define bool    int
  31. #ifndef TRUE
  32. #define TRUE    1
  33. #endif
  34. #ifndef FALSE
  35. #define FALSE    0
  36. #endif
  37.  
  38. bool    opterr = TRUE;          /* generate error messages */
  39. int     optind = 1;             /* index into argv array   */
  40. char *  optarg = NULL;          /* optional argument       */
  41.  
  42.  
  43. #ifndef __BEOS__
  44. int getopt(int argc, char *argv[], char optstring[])
  45. #else
  46. int getopt(int argc, char *const *argv, const char *optstring)
  47. #endif
  48. {
  49.     static   char *opt_ptr = "";
  50.     register char *ptr;
  51.              int   option;
  52.  
  53.     if (*opt_ptr == '\0') {
  54.  
  55.         if (optind >= argc || argv[optind][0] != '-' ||
  56.             argv[optind][1] == '\0' /* lone dash */ )
  57.             return -1;
  58.  
  59.         else if (strcmp(argv[optind], "--") == 0) {
  60.             ++optind;
  61.             return -1;
  62.         }
  63.  
  64.         opt_ptr = &argv[optind++][1]; 
  65.     }
  66.  
  67.     if ( (option = *opt_ptr++) == '\0')
  68.       return -1;
  69.     
  70.     if ((ptr = strchr(optstring, option)) == NULL) {
  71.         if (opterr)
  72.             fprintf(stderr, "Unknown option: -%c\n", option);
  73.  
  74.         return '?';
  75.     }
  76.  
  77.     if (*(ptr + 1) == ':') {
  78.         if (*opt_ptr != '\0') {
  79.             optarg  = opt_ptr;
  80.             opt_ptr = "";
  81.         }
  82.  
  83.         else {
  84.             if (optind >= argc) {
  85.                 if (opterr)
  86.                     fprintf(stderr,
  87.                 "Argument expected for the -%c option\n", option);
  88.                 return '?';
  89.             }
  90.  
  91.             optarg = argv[optind++];
  92.         }
  93.     }
  94.  
  95.     return option;
  96. }
  97.