diff options
| author | Guido van Rossum <guido@python.org> | 1994-08-30 08:27:36 +0000 | 
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1994-08-30 08:27:36 +0000 | 
| commit | 1d5735e84621a7fe68d361fa0e289fa2c3310836 (patch) | |
| tree | 4ee6f32fa4743f4c6641b04131e449bc71a5ea25 /Python/pythonmain.c | |
| parent | 013142a95fd63a05d09cec7b36b7c86cc98e30c1 (diff) | |
| download | cpython-git-1d5735e84621a7fe68d361fa0e289fa2c3310836.tar.gz | |
Merge back to main trunk
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 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)) && | 
