home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / pippy-0.6beta-src.tar.gz / pippy-0.6beta-src.tar / pippy-0.6beta-src / src / Python / getopt.c < prev    next >
C/C++ Source or Header  |  2000-12-21  |  2KB  |  100 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(argc,argv,optstring)
  45. int argc; 
  46. char *argv[]; 
  47. char optstring[];
  48. #else
  49. int getopt( int argc, char *const *argv, const char *optstring )
  50. #endif
  51. {
  52.     static   char *opt_ptr = "";
  53.     register char *ptr;
  54.              int   option;
  55.  
  56.     if (*opt_ptr == '\0') {
  57.  
  58.         if (optind >= argc || argv[optind][0] != '-' ||
  59.             argv[optind][1] == '\0' /* lone dash */ )
  60.             return -1;
  61.  
  62.         else if (strcmp(argv[optind], "--") == 0) {
  63.             ++optind;
  64.             return -1;
  65.         }
  66.  
  67.         opt_ptr = &argv[optind++][1]; 
  68.     }
  69.  
  70.     if ( (option = *opt_ptr++) == '\0')
  71.       return -1;
  72.     
  73.     if ((ptr = strchr(optstring, option)) == NULL) {
  74.         if (opterr)
  75.             fprintf(stderr, "Unknown option: -%c\n", option);
  76.  
  77.         return '?';
  78.     }
  79.  
  80.     if (*(ptr + 1) == ':') {
  81.         if (*opt_ptr != '\0') {
  82.             optarg  = opt_ptr;
  83.             opt_ptr = "";
  84.         }
  85.  
  86.         else {
  87.             if (optind >= argc) {
  88.                 if (opterr)
  89.                     fprintf(stderr,
  90.                 "Argument expected for the -%c option\n", option);
  91.                 return '?';
  92.             }
  93.  
  94.             optarg = argv[optind++];
  95.         }
  96.     }
  97.  
  98.     return option;
  99. }
  100.