| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | /*---------------------------------------------------------------------------*
 | 
					
						
							|  |  |  |  * <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. | 
					
						
							|  |  |  |  *---------------------------------------------------------------------------*/ | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | int _PyOS_opterr = 1;          /* generate error messages */ | 
					
						
							|  |  |  | int _PyOS_optind = 1;          /* index into argv array   */ | 
					
						
							|  |  |  | char *_PyOS_optarg = NULL;     /* optional argument       */ | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | int _PyOS_GetOpt(int argc, char **argv, char *optstring) | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 	static char *opt_ptr = ""; | 
					
						
							|  |  |  | 	char *ptr; | 
					
						
							|  |  |  | 	int option; | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 	if (*opt_ptr == '\0') { | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 		if (_PyOS_optind >= argc || argv[_PyOS_optind][0] != '-' || | 
					
						
							|  |  |  | 		    argv[_PyOS_optind][1] == '\0' /* lone dash */ ) | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 			return -1; | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 		else if (strcmp(argv[_PyOS_optind], "--") == 0) { | 
					
						
							|  |  |  | 			++_PyOS_optind; | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 			return -1; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 		opt_ptr = &argv[_PyOS_optind++][1];  | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-09-30 22:00:13 +00:00
										 |  |  | 	if ( (option = *opt_ptr++) == '\0') | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 		return -1; | 
					
						
							| 
									
										
										
										
											1997-09-30 22:00:13 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	if ((ptr = strchr(optstring, option)) == NULL) { | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 		if (_PyOS_opterr) | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 			fprintf(stderr, "Unknown option: -%c\n", option); | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 		return '?'; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 	if (*(ptr + 1) == ':') { | 
					
						
							|  |  |  | 		if (*opt_ptr != '\0') { | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 			_PyOS_optarg  = opt_ptr; | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 			opt_ptr = ""; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 		else { | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 			if (_PyOS_optind >= argc) { | 
					
						
							|  |  |  | 				if (_PyOS_opterr) | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 					fprintf(stderr, | 
					
						
							|  |  |  | 			    "Argument expected for the -%c option\n", option); | 
					
						
							|  |  |  | 				return '?'; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-03 08:18:37 +00:00
										 |  |  | 			_PyOS_optarg = argv[_PyOS_optind++]; | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-04-28 12:33:58 +00:00
										 |  |  | 	return option; | 
					
						
							| 
									
										
										
										
											1994-04-14 14:08:22 +00:00
										 |  |  | } |