summaryrefslogtreecommitdiff
path: root/Python/pythonmain.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/pythonmain.c')
-rw-r--r--Python/pythonmain.c67
1 files changed, 52 insertions, 15 deletions
diff --git a/Python/pythonmain.c b/Python/pythonmain.c
index 48ccd38309..a41a55953f 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)) &&