115 lines · 2.8 KB · C
RawDownload
/*---------------------------------------------------------------------------* * <RCS keywords> * * C++ Library * * Copyright 1992-1994, David Gottner * *                    All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its  * documentation for any purpose and without fee is hereby granted,  * provided that the above copyright notice, this permission notice and * the following disclaimer notice appear unmodified in all copies. * * I DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL I * BE LIABLE FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Nevertheless, I would like to know about bugs in this library or * suggestions for improvment.  Send bug reports and feedback to * davegottner@delphi.com. *---------------------------------------------------------------------------*/ /* Modified to support --help and --version, as well as /? on Windows * by Georg Brandl. */ #include <stdio.h>#include <string.h> #ifdef __cplusplusextern "C" {#endif int _PyOS_opterr = 1;          /* generate error messages */int _PyOS_optind = 1;          /* index into argv array   */char *_PyOS_optarg = NULL;     /* optional argument       */ int _PyOS_GetOpt(int argc, char **argv, char *optstring){	static char *opt_ptr = "";	char *ptr;	int option; 	if (*opt_ptr == '\0') { 		if (_PyOS_optind >= argc)			return -1;#ifdef MS_WINDOWS		else if (strcmp(argv[_PyOS_optind], "/?") == 0) {			++_PyOS_optind;			return 'h';		}#endif 		else if (argv[_PyOS_optind][0] != '-' ||		         argv[_PyOS_optind][1] == '\0' /* lone dash */ )			return -1; 		else if (strcmp(argv[_PyOS_optind], "--") == 0) {			++_PyOS_optind;			return -1;		} 		else if (strcmp(argv[_PyOS_optind], "--help") == 0) {			++_PyOS_optind;			return 'h';		} 		else if (strcmp(argv[_PyOS_optind], "--version") == 0) {			++_PyOS_optind;			return 'V';		}  		opt_ptr = &argv[_PyOS_optind++][1]; 	} 	if ( (option = *opt_ptr++) == '\0')		return -1;		if ((ptr = strchr(optstring, option)) == NULL) {		if (_PyOS_opterr)			fprintf(stderr, "Unknown option: -%c\n", option); 		return '_';	} 	if (*(ptr + 1) == ':') {		if (*opt_ptr != '\0') {			_PyOS_optarg  = opt_ptr;			opt_ptr = "";		} 		else {			if (_PyOS_optind >= argc) {				if (_PyOS_opterr)					fprintf(stderr,			    "Argument expected for the -%c option\n", option);				return '_';			} 			_PyOS_optarg = argv[_PyOS_optind++];		}	} 	return option;} #ifdef __cplusplus}#endif