symbian-qemu-0.9.1-12/python-2.6.1/Python/getopt.c
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Python/getopt.c	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,126 @@
+/*---------------------------------------------------------------------------*
+ * <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 (option == 'J') {
+		fprintf(stderr, "-J is reserved for Jython\n");
+		return '_';
+	}
+
+	if (option == 'X') {
+		fprintf(stderr,
+		  "-X is reserved for implementation-specific arguments\n");
+		return '_';
+	}
+
+	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
+