summaryrefslogtreecommitdiffstats
path: root/Python/pythonmain.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1992-08-04 12:41:02 (GMT)
committerGuido van Rossum <guido@python.org>1992-08-04 12:41:02 (GMT)
commit1984f1e1c6306d4e8073c28d2395638f80ea509b (patch)
tree4366039e7665e689aef04549c3e3d73f99bdab32 /Python/pythonmain.c
parent4fbf798f866b10ee50cc91a394d19c0d4b2f79ab (diff)
downloadcpython-1984f1e1c6306d4e8073c28d2395638f80ea509b.zip
cpython-1984f1e1c6306d4e8073c28d2395638f80ea509b.tar.gz
cpython-1984f1e1c6306d4e8073c28d2395638f80ea509b.tar.bz2
* Makefile adapted to changes below.
* split pythonmain.c in two: most stuff goes to pythonrun.c, in the library. * new optional built-in threadmodule.c, build upon Sjoerd's thread.{c,h}. * new module from Sjoerd: mmmodule.c (dynamically loaded). * new module from Sjoerd: sv (svgen.py, svmodule.c.proto). * new files thread.{c,h} (from Sjoerd). * new xxmodule.c (example only). * myselect.h: bzero -> memset * select.c: bzero -> memset; removed global variable
Diffstat (limited to 'Python/pythonmain.c')
-rw-r--r--Python/pythonmain.c384
1 files changed, 3 insertions, 381 deletions
diff --git a/Python/pythonmain.c b/Python/pythonmain.c
index a141168..0f76bfd 100644
--- a/Python/pythonmain.c
+++ b/Python/pythonmain.c
@@ -26,23 +26,10 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "allobjects.h"
-#include "grammar.h"
-#include "node.h"
-#include "parsetok.h"
-#include "graminit.h"
-#include "errcode.h"
-#include "sysmodule.h"
-#include "compile.h"
-#include "ceval.h"
-#include "pythonrun.h"
-#include "import.h"
-
extern char *getpythonpath();
-extern grammar gram; /* From graminit.c */
-
-int debugging; /* Needed by parser.c */
-int verbose; /* Needed by import.c */
+extern int debugging; /* Needed by parser.c */
+extern int verbose; /* Needed by import.c */
/* Interface to getopt(): */
extern int optind;
@@ -108,12 +95,12 @@ main(argc, argv)
initall();
- setpythonpath(getpythonpath());
if (command != NULL) {
/* Backup optind and force sys.argv[0] = '-c' */
optind--;
argv[optind] = "-c";
}
+
setpythonargv(argc-optind, argv+optind);
if (command) {
@@ -126,368 +113,3 @@ main(argc, argv)
goaway(sts);
/*NOTREACHED*/
}
-
-/* Initialize all */
-
-void
-initall()
-{
- static int inited;
-
- if (inited)
- return;
- inited = 1;
-
- initimport();
-
- /* Modules 'builtin' and 'sys' are initialized here,
- they are needed by random bits of the interpreter.
- All other modules are optional and should be initialized
- by the initcalls() of a specific configuration. */
-
- initbuiltin(); /* Also initializes builtin exceptions */
- initsys();
-
- initcalls(); /* Configuration-dependent initializations */
-
- initintr(); /* For intrcheck() */
-}
-
-/* Parse input from a file and execute it */
-
-int
-run(fp, filename)
- FILE *fp;
- char *filename;
-{
- if (filename == NULL)
- filename = "???";
- if (isatty((int)fileno(fp)))
- return run_tty_loop(fp, filename);
- else
- return run_script(fp, filename);
-}
-
-int
-run_tty_loop(fp, filename)
- FILE *fp;
- char *filename;
-{
- object *v;
- int ret;
- v = sysget("ps1");
- if (v == NULL) {
- sysset("ps1", v = newstringobject(">>> "));
- XDECREF(v);
- }
- v = sysget("ps2");
- if (v == NULL) {
- sysset("ps2", v = newstringobject("... "));
- XDECREF(v);
- }
- for (;;) {
- ret = run_tty_1(fp, filename);
-#ifdef REF_DEBUG
- fprintf(stderr, "[%ld refs]\n", ref_total);
-#endif
- if (ret == E_EOF)
- return 0;
- /*
- if (ret == E_NOMEM)
- return -1;
- */
- }
-}
-
-int
-run_tty_1(fp, filename)
- FILE *fp;
- char *filename;
-{
- object *m, *d, *v, *w;
- node *n;
- char *ps1, *ps2;
- int err;
- v = sysget("ps1");
- w = sysget("ps2");
- if (v != NULL && is_stringobject(v)) {
- INCREF(v);
- ps1 = getstringvalue(v);
- }
- else {
- v = NULL;
- ps1 = "";
- }
- if (w != NULL && is_stringobject(w)) {
- INCREF(w);
- ps2 = getstringvalue(w);
- }
- else {
- w = NULL;
- ps2 = "";
- }
- err = parsefile(fp, filename, &gram, single_input, ps1, ps2, &n);
- XDECREF(v);
- XDECREF(w);
- if (err == E_EOF)
- return E_EOF;
- if (err != E_DONE) {
- err_input(err);
- print_error();
- return err;
- }
- m = add_module("__main__");
- if (m == NULL)
- return -1;
- d = getmoduledict(m);
- v = run_node(n, filename, d, d);
- flushline();
- if (v == NULL) {
- print_error();
- return -1;
- }
- DECREF(v);
- return 0;
-}
-
-int
-run_script(fp, filename)
- FILE *fp;
- char *filename;
-{
- object *m, *d, *v;
- m = add_module("__main__");
- if (m == NULL)
- return -1;
- d = getmoduledict(m);
- v = run_file(fp, filename, file_input, d, d);
- flushline();
- if (v == NULL) {
- print_error();
- return -1;
- }
- DECREF(v);
- return 0;
-}
-
-int
-run_command(command)
- char *command;
-{
- object *m, *d, *v;
- m = add_module("__main__");
- if (m == NULL)
- return -1;
- d = getmoduledict(m);
- v = run_string(command, file_input, d, d);
- flushline();
- if (v == NULL) {
- print_error();
- return -1;
- }
- DECREF(v);
- return 0;
-}
-
-void
-print_error()
-{
- object *exception, *v;
- err_get(&exception, &v);
- if (exception == SystemExit) {
- if (v == NULL || v == None)
- goaway(0);
- if (is_intobject(v))
- goaway((int)getintvalue(v));
- else {
- printobject(v, stderr, PRINT_RAW);
- fprintf(stderr, "\n");
- goaway(1);
- }
- }
- sysset("last_type", exception);
- sysset("last_value", v);
- if (printobject(exception, stderr, PRINT_RAW) != 0)
- err_clear();
- if (v != NULL && v != None) {
- fprintf(stderr, ": ");
- if (printobject(v, stderr, PRINT_RAW) != 0)
- err_clear();
- }
- fprintf(stderr, "\n");
- XDECREF(exception);
- XDECREF(v);
- printtraceback(stderr);
-}
-
-object *
-run_string(str, start, globals, locals)
- char *str;
- int start;
- /*dict*/object *globals, *locals;
-{
- node *n;
- int err;
- err = parse_string(str, start, &n);
- return run_err_node(err, n, "<string>", globals, locals);
-}
-
-object *
-run_file(fp, filename, start, globals, locals)
- FILE *fp;
- char *filename;
- int start;
- /*dict*/object *globals, *locals;
-{
- node *n;
- int err;
- err = parse_file(fp, filename, start, &n);
- return run_err_node(err, n, filename, globals, locals);
-}
-
-object *
-run_err_node(err, n, filename, globals, locals)
- int err;
- node *n;
- char *filename;
- /*dict*/object *globals, *locals;
-{
- if (err != E_DONE) {
- err_input(err);
- return NULL;
- }
- return run_node(n, filename, globals, locals);
-}
-
-object *
-run_node(n, filename, globals, locals)
- node *n;
- char *filename;
- /*dict*/object *globals, *locals;
-{
- if (globals == NULL) {
- globals = getglobals();
- if (locals == NULL)
- locals = getlocals();
- }
- else {
- if (locals == NULL)
- locals = globals;
- }
- return eval_node(n, filename, globals, locals);
-}
-
-object *
-eval_node(n, filename, globals, locals)
- node *n;
- char *filename;
- object *globals;
- object *locals;
-{
- codeobject *co;
- object *v;
- co = compile(n, filename);
- freetree(n);
- if (co == NULL)
- return NULL;
- v = eval_code(co, globals, locals, (object *)NULL);
- DECREF(co);
- return v;
-}
-
-/* Simplified interface to parsefile */
-
-int
-parse_file(fp, filename, start, n_ret)
- FILE *fp;
- char *filename;
- int start;
- node **n_ret;
-{
- return parsefile(fp, filename, &gram, start,
- (char *)0, (char *)0, n_ret);
-}
-
-/* Simplified interface to parsestring */
-
-int
-parse_string(str, start, n_ret)
- char *str;
- int start;
- node **n_ret;
-{
- int err = parsestring(str, &gram, start, n_ret);
- /* Don't confuse early end of string with early end of input */
- if (err == E_EOF)
- err = E_SYNTAX;
- return err;
-}
-
-/* Print fatal error message and abort */
-
-void
-fatal(msg)
- char *msg;
-{
- fprintf(stderr, "Fatal error: %s\n", msg);
- abort();
-}
-
-/* Clean up and exit */
-
-void
-goaway(sts)
- int sts;
-{
- flushline();
-
- /* XXX Call doneimport() before donecalls(), since donecalls()
- calls wdone(), and doneimport() may close windows */
- doneimport();
- donecalls();
-
- err_clear();
-
-#ifdef REF_DEBUG
- fprintf(stderr, "[%ld refs]\n", ref_total);
-#endif
-
-#ifdef TRACE_REFS
- if (askyesno("Print left references?")) {
- printrefs(stderr);
- }
-#endif /* TRACE_REFS */
-
- exit(sts);
- /*NOTREACHED*/
-}
-
-#ifdef TRACE_REFS
-/* Ask a yes/no question */
-
-static int
-askyesno(prompt)
- char *prompt;
-{
- char buf[256];
-
- printf("%s [ny] ", prompt);
- if (fgets(buf, sizeof buf, stdin) == NULL)
- return 0;
- return buf[0] == 'y' || buf[0] == 'Y';
-}
-#endif
-
-#ifdef applec /* MPW (also usable for Think C 3.0) */
-
-/* Check for file descriptor connected to interactive device.
- Pretend that stdin is always interactive, other files never. */
-
-int
-isatty(fd)
- int fd;
-{
- return fd == fileno(stdin);
-}
-
-#endif