mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*---------------------------------------------------------------------------*
 | |
|  * <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 __cplusplus
 | |
| extern "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
 | |
| 
 | 
