mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
39bf41f4eb
- Python static hello world now 1.8mb - Python static fully loaded now 10mb - Python HTTPS client now uses MbedTLS - Python REPL now completes import stmts - Increase stack size for Python for now - Begin synthesizing posixpath and ntpath - Restore Python \N{UNICODE NAME} support - Restore Python NFKD symbol normalization - Add optimized code path for Intel SHA-NI - Get more Python unit tests passing faster - Get Python help() pagination working on NT - Python hashlib now supports MbedTLS PBKDF2 - Make memcpy/memmove/memcmp/bcmp/etc. faster - Add Mersenne Twister and Vigna to LIBC_RAND - Provide privileged __printf() for error code - Fix zipos opendir() so that it reports ENOTDIR - Add basic chmod() implementation for Windows NT - Add Cosmo's best functions to Python cosmo module - Pin function trace indent depth to that of caller - Show memory diagram on invalid access in MODE=dbg - Differentiate stack overflow on crash in MODE=dbg - Add stb_truetype and tools for analyzing font files - Upgrade to UNICODE 13 and reduce its binary footprint - COMPILE.COM now logs resource usage of build commands - Start implementing basic poll() support on bare metal - Set getauxval(AT_EXECFN) to GetModuleFileName() on NT - Add descriptions to strerror() in non-TINY build modes - Add COUNTBRANCH() macro to help with micro-optimizations - Make error / backtrace / asan / memory code more unbreakable - Add fast perfect C implementation of μ-Law and a-Law audio codecs - Make strtol() functions consistent with other libc implementations - Improve Linenoise implementation (see also github.com/jart/bestline) - COMPILE.COM now suppresses stdout/stderr of successful build commands
118 lines
4.3 KiB
C
118 lines
4.3 KiB
C
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:4;tab-width:8;coding:utf-8 -*-│
|
|
│vi: set net ft=c ts=4 sts=4 sw=4 fenc=utf-8 :vi│
|
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
|
│ Python 3 │
|
|
│ https://docs.python.org/3/license.html │
|
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
#include "libc/stdio/stdio.h"
|
|
#include "libc/str/str.h"
|
|
#include "third_party/python/Include/pygetopt.h"
|
|
/* clang-format off */
|
|
|
|
asm(".ident\t\"\\n\\n\
|
|
python getopt (isc license)\\n\
|
|
Copyright 1992-1994 David Gottner\"");
|
|
/* clang-format off */
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
* <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. */
|
|
|
|
int _PyOS_opterr = 1; /* generate error messages */
|
|
int _PyOS_optind = 1; /* index into argv array */
|
|
wchar_t *_PyOS_optarg = NULL; /* optional argument */
|
|
|
|
static wchar_t *opt_ptr = L"";
|
|
|
|
void _PyOS_ResetGetOpt(void)
|
|
{
|
|
_PyOS_opterr = 1;
|
|
_PyOS_optind = 1;
|
|
_PyOS_optarg = NULL;
|
|
opt_ptr = L"";
|
|
}
|
|
|
|
int _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring)
|
|
{
|
|
wchar_t *ptr;
|
|
wchar_t option;
|
|
if (*opt_ptr == '\0') {
|
|
if (_PyOS_optind >= argc)
|
|
return -1;
|
|
#ifdef MS_WINDOWS
|
|
else if (wcscmp(argv[_PyOS_optind], L"/?") == 0) {
|
|
++_PyOS_optind;
|
|
return 'h';
|
|
}
|
|
#endif
|
|
else if (argv[_PyOS_optind][0] != L'-' ||
|
|
argv[_PyOS_optind][1] == L'\0' /* lone dash */ )
|
|
return -1;
|
|
else if (wcscmp(argv[_PyOS_optind], L"--") == 0) {
|
|
++_PyOS_optind;
|
|
return -1;
|
|
}
|
|
else if (wcscmp(argv[_PyOS_optind], L"--help") == 0) {
|
|
++_PyOS_optind;
|
|
return 'h';
|
|
}
|
|
else if (wcscmp(argv[_PyOS_optind], L"--version") == 0) {
|
|
++_PyOS_optind;
|
|
return 'V';
|
|
}
|
|
opt_ptr = &argv[_PyOS_optind++][1];
|
|
}
|
|
if ((option = *opt_ptr++) == L'\0')
|
|
return -1;
|
|
if (option == 'J') {
|
|
if (_PyOS_opterr)
|
|
fprintf(stderr, "-J is reserved for Jython\n");
|
|
return '_';
|
|
}
|
|
if ((ptr = wcschr(optstring, option)) == NULL) {
|
|
if (_PyOS_opterr)
|
|
fprintf(stderr, "Unknown option: -%c\n", (char)option);
|
|
return '_';
|
|
}
|
|
if (*(ptr + 1) == L':') {
|
|
if (*opt_ptr != L'\0') {
|
|
_PyOS_optarg = opt_ptr;
|
|
opt_ptr = L"";
|
|
}
|
|
else {
|
|
if (_PyOS_optind >= argc) {
|
|
if (_PyOS_opterr)
|
|
fprintf(stderr,
|
|
"Argument expected for the -%c option\n", (char)option);
|
|
return '_';
|
|
}
|
|
_PyOS_optarg = argv[_PyOS_optind++];
|
|
}
|
|
}
|
|
return option;
|
|
}
|