symbian-qemu-0.9.1-12/python-2.6.1/Python/getopt.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 /* Modified to support --help and --version, as well as /? on Windows
       
    28  * by Georg Brandl. */
       
    29 
       
    30 #include <stdio.h>
       
    31 #include <string.h>
       
    32 
       
    33 #ifdef __cplusplus
       
    34 extern "C" {
       
    35 #endif
       
    36 
       
    37 int _PyOS_opterr = 1;          /* generate error messages */
       
    38 int _PyOS_optind = 1;          /* index into argv array   */
       
    39 char *_PyOS_optarg = NULL;     /* optional argument       */
       
    40 
       
    41 int _PyOS_GetOpt(int argc, char **argv, char *optstring)
       
    42 {
       
    43 	static char *opt_ptr = "";
       
    44 	char *ptr;
       
    45 	int option;
       
    46 
       
    47 	if (*opt_ptr == '\0') {
       
    48 
       
    49 		if (_PyOS_optind >= argc)
       
    50 			return -1;
       
    51 #ifdef MS_WINDOWS
       
    52 		else if (strcmp(argv[_PyOS_optind], "/?") == 0) {
       
    53 			++_PyOS_optind;
       
    54 			return 'h';
       
    55 		}
       
    56 #endif
       
    57 
       
    58 		else if (argv[_PyOS_optind][0] != '-' ||
       
    59 		         argv[_PyOS_optind][1] == '\0' /* lone dash */ )
       
    60 			return -1;
       
    61 
       
    62 		else if (strcmp(argv[_PyOS_optind], "--") == 0) {
       
    63 			++_PyOS_optind;
       
    64 			return -1;
       
    65 		}
       
    66 
       
    67 		else if (strcmp(argv[_PyOS_optind], "--help") == 0) {
       
    68 			++_PyOS_optind;
       
    69 			return 'h';
       
    70 		}
       
    71 
       
    72 		else if (strcmp(argv[_PyOS_optind], "--version") == 0) {
       
    73 			++_PyOS_optind;
       
    74 			return 'V';
       
    75 		}
       
    76 
       
    77 
       
    78 		opt_ptr = &argv[_PyOS_optind++][1]; 
       
    79 	}
       
    80 
       
    81 	if ( (option = *opt_ptr++) == '\0')
       
    82 		return -1;
       
    83 
       
    84 	if (option == 'J') {
       
    85 		fprintf(stderr, "-J is reserved for Jython\n");
       
    86 		return '_';
       
    87 	}
       
    88 
       
    89 	if (option == 'X') {
       
    90 		fprintf(stderr,
       
    91 		  "-X is reserved for implementation-specific arguments\n");
       
    92 		return '_';
       
    93 	}
       
    94 
       
    95 	if ((ptr = strchr(optstring, option)) == NULL) {
       
    96 		if (_PyOS_opterr)
       
    97 			fprintf(stderr, "Unknown option: -%c\n", option);
       
    98 
       
    99 		return '_';
       
   100 	}
       
   101 
       
   102 	if (*(ptr + 1) == ':') {
       
   103 		if (*opt_ptr != '\0') {
       
   104 			_PyOS_optarg  = opt_ptr;
       
   105 			opt_ptr = "";
       
   106 		}
       
   107 
       
   108 		else {
       
   109 			if (_PyOS_optind >= argc) {
       
   110 				if (_PyOS_opterr)
       
   111 					fprintf(stderr,
       
   112 			    "Argument expected for the -%c option\n", option);
       
   113 				return '_';
       
   114 			}
       
   115 
       
   116 			_PyOS_optarg = argv[_PyOS_optind++];
       
   117 		}
       
   118 	}
       
   119 
       
   120 	return option;
       
   121 }
       
   122 
       
   123 #ifdef __cplusplus
       
   124 }
       
   125 #endif
       
   126