History

add hg and python

cinap_lenrek committed 15 years ago

Commit 4bb9e221 parent 987265c3706 files · +1228772 −-233Browse files

Showing the changes to sys/src/cmd/python/Python/getopt.c (1 of 3706 files). Show all

Unified · Split

sys/src/cmd/python/Python/getopt.c+115−0
@@ -0,0 +1,115 @@
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 ((ptr = strchr(optstring, option)) == NULL) {
85+ if (_PyOS_opterr)
86+ fprintf(stderr, "Unknown option: -%c\n", option);
87+
88+ return '_';
89+ }
90+
91+ if (*(ptr + 1) == ':') {
92+ if (*opt_ptr != '\0') {
93+ _PyOS_optarg = opt_ptr;
94+ opt_ptr = "";
95+ }
96+
97+ else {
98+ if (_PyOS_optind >= argc) {
99+ if (_PyOS_opterr)
100+ fprintf(stderr,
101+ "Argument expected for the -%c option\n", option);
102+ return '_';
103+ }
104+
105+ _PyOS_optarg = argv[_PyOS_optind++];
106+ }
107+ }
108+
109+ return option;
110+}
111+
112+#ifdef __cplusplus
113+}
114+#endif
115+