|
|
1.1 root 1: #include "global.h"
2:
3: /* main *****************************************************************/
4: /* Execution of the lisp system begins here. This is the top level */
5: /* executor which is an infinite loop. The structure is similar to */
6: /* error. */
7:
8: extern char _sobuf[];
9: extern lispval reborn;
10: extern int rlevel;
11: static int virgin = 0;
12: int Xargc;
13: char **Xargv;
14:
15: main(argc,argv)
16: char **argv;
17: {
18: lispval temp, matom();
19: extern int errp;
20: snpand(0);
21:
22: setbuf(stdout,_sobuf);
23: Xargc = argc;
24: Xargv = argv;
25: virgin = 0;
26: initial();
27: /* printf("poport = 0%o\n",poport); */
28: while(retval = setexit())
29: switch (retval) {
30:
31: case BRGOTO: error("GOTO LABEL NOT FOUND",FALSE);
32:
33: case BRRETN: error("NO PROG TO RETURN FROM",FALSE);
34:
35: case BRRETB:
36: default: popnames(orgbnp);
37:
38: }
39: for(EVER) {
40: lbot = np = orgnp;
41: rlevel = 0;
42: depth = 0;
43: errp = 0;
44: clearerr(piport = stdin);
45: clearerr(poport = stdout);
46: np++->val = matom("top-level");
47: np++->val = nil;
48: Lapply();
49: }
50: }
51: Ntpl()
52: {
53: lispval Lread();
54: snpand(0);
55:
56: if (virgin == 0) {
57: fputs("Franz Lisp, Opus 32",poport);
58: virgin = 1;
59: }
60: lbot = np;
61: np++->val = P(stdin);
62: np++->val = eofa;
63: while (TRUE)
64: {
65: fputs("\n-> ",stdout);
66: dmpport(stdout);
67: vtemp = Lread();
68: if(vtemp == eofa) exit(0);
69: printr(eval(vtemp),stdout);
70: }
71: }
72:
73: exit(code)
74: {
75: extern int fvirgin;
76: extern char *stabf;
77: if(!fvirgin) unlink(stabf);
78: _cleanup();
79: proflush();
80: _exit(code);
81: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.