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