diff options
Diffstat (limited to 'Python/pythonmain.c')
-rw-r--r-- | Python/pythonmain.c | 67 |
1 files changed, 52 insertions, 15 deletions
diff --git a/Python/pythonmain.c b/Python/pythonmain.c index 48ccd38..a41a559 100644 --- a/Python/pythonmain.c +++ b/Python/pythonmain.c @@ -1,5 +1,5 @@ /*********************************************************** -Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum, +Copyright 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved @@ -26,9 +26,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "allobjects.h" -extern int debugging; /* Defined in parser.c */ -extern int verbose; /* Defined in import.c */ -extern int killprint; /* Defined in ceval.c */ +extern int debugging; /* Needed in parser.c, declared in pythonrun.c */ +extern int verbose; /* Needed in import.c, declared in pythonrun.c */ +extern int suppress_print; /* Needed in ceval.c, declared in pythonrun.c */ /* Interface to getopt(): */ extern int optind; @@ -37,7 +37,11 @@ extern int getopt(); /* PROTO((int, char **, char *)); -- not standardized */ extern char *getenv(); -main(argc, argv) +extern char *getversion(); +extern char *getcopyright(); + +int +realmain(argc, argv) int argc; char **argv; { @@ -48,19 +52,20 @@ main(argc, argv) FILE *fp = stdin; char *p; int inspect = 0; + int unbuffered = 0; if ((p = getenv("PYTHONDEBUG")) && *p != '\0') debugging = 1; + if ((p = getenv("PYTHONSUPPRESS")) && *p != '\0') + suppress_print = 1; if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') verbose = 1; if ((p = getenv("PYTHONINSPECT")) && *p != '\0') inspect = 1; - if ((p = getenv("PYTHONKILLPRINT")) && *p != '\0') - killprint = 1; - - initargs(&argc, &argv); + if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0') + unbuffered = 1; - while ((c = getopt(argc, argv, "c:dikv")) != EOF) { + while ((c = getopt(argc, argv, "c:disuv")) != EOF) { if (c == 'c') { /* -c is the last option; following arguments that look like options are left for the @@ -82,8 +87,12 @@ main(argc, argv) inspect++; break; - case 'k': - killprint++; + case 's': + suppress_print++; + break; + + case 'u': + unbuffered++; break; case 'v': @@ -94,16 +103,21 @@ main(argc, argv) default: fprintf(stderr, -"usage: %s [-d] [-i] [-k] [-v] [-c cmd | file | -] [arg] ...\n", +"usage: %s [-d] [-i] [-s] [-u ] [-v] [-c cmd | file | -] [arg] ...\n", argv[0]); fprintf(stderr, "\ \n\ Options and arguments (and corresponding environment variables):\n\ -d : debug output from parser (also PYTHONDEBUG=x)\n\ -i : inspect interactively after running script (also PYTHONINSPECT=x)\n\ --k : kill printing expression statement (also PYTHONKILLPRINT=x)\n\ +-s : suppress the printing of top level expressions (also PYTHONSUPPRESS=x)\n\ +-u : unbuffered stdout and stderr (also PYTHONUNBUFFERED=x)\n\ -v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\ -c cmd : program passed in as string (terminates option list)\n\ +"); + /* ANSI does not allow strings > 512 chars + and MPW doesn't like it either -- so split it! */ + fprintf(stderr, "\ file : program read from script file\n\ - : program read from stdin (default; interactive mode if a tty)\n\ arg ...: arguments passed to program in sys.argv[1:]\n\ @@ -118,9 +132,25 @@ PYTHONPATH : colon-separated list of directories prefixed to the\n\ } } - + + if (unbuffered) { +#ifndef MPW + setbuf(stdout, (char *)NULL); + setbuf(stderr, (char *)NULL); +#else + /* On MPW (3.2) unbuffered seems to hang */ + setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); + setvbuf(stderr, (char *)NULL, _IOLBF, BUFSIZ); +#endif + } + if (command == NULL && optind < argc && strcmp(argv[optind], "-") != 0) filename = argv[optind]; + + if (verbose || + command == NULL && filename == NULL && isatty((int)fileno(fp))) + fprintf(stderr, "Python %s\n%s\n", + getversion(), getcopyright()); if (filename != NULL) { if ((fp = fopen(filename, "r")) == NULL) { @@ -146,15 +176,22 @@ PYTHONPATH : colon-separated list of directories prefixed to the\n\ else { if (filename == NULL && isatty((int)fileno(fp))) { char *startup = getenv("PYTHONSTARTUP"); +#ifdef macintosh + if (startup == NULL) + startup = "PythonStartup"; +#endif if (startup != NULL && startup[0] != '\0') { FILE *fp = fopen(startup, "r"); if (fp != NULL) { (void) run_script(fp, startup); err_clear(); + fclose(fp); } } } sts = run(fp, filename == NULL ? "<stdin>" : filename) != 0; + if (filename != NULL) + fclose(fp); } if (inspect && isatty((int)fileno(stdin)) && |