home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyth_os2.zip / python-1.0.2 / Python / getopt.c < prev    next >
C/C++ Source or Header  |  1994-04-28  |  2KB  |  86 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. #define TRUE    1
  32. #define FALSE    0
  33.  
  34.  
  35. bool    opterr = TRUE;          /* generate error messages */
  36. int     optind = 1;             /* index into argv array   */
  37. char *  optarg = NULL;          /* optional argument       */
  38.  
  39.  
  40. int getopt(int argc, char *argv[], const char optstring[])
  41. {
  42.     static   char *opt_ptr = "";
  43.     register char *ptr;
  44.              int   option;
  45.  
  46.     if (*opt_ptr == '\0') {
  47.  
  48.         if (optind >= argc || argv[optind][0] != '-')
  49.             return -1;
  50.  
  51.         else if (strcmp(argv[optind], "--") == 0) {
  52.             ++optind;
  53.             return -1;
  54.         }
  55.  
  56.         opt_ptr = &argv[optind++][1]; 
  57.     }
  58.  
  59.     if ((ptr = strchr(optstring, option = *opt_ptr++)) == NULL) {
  60.         if (opterr)
  61.             fprintf(stderr, "Unknown option: -%c\n", option);
  62.  
  63.         return '?';
  64.     }
  65.  
  66.     if (*(ptr + 1) == ':') {
  67.         if (*opt_ptr != '\0') {
  68.             optarg  = opt_ptr;
  69.             opt_ptr = "";
  70.         }
  71.  
  72.         else {
  73.             if (optind >= argc) {
  74.                 if (opterr)
  75.                     fprintf(stderr,
  76.                 "Argument expected for the -%c option\n", option);
  77.                 return '?';
  78.             }
  79.  
  80.             optarg = argv[optind++];
  81.         }
  82.     }
  83.  
  84.     return option;
  85. }
  86.