Annotation of 43BSD/ucb/lisp/franz/lisp.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char *rcsid =
                      3:    "$Header: lisp.c,v 1.3 83/11/26 12:00:58 sklower Exp $";
                      4: #endif
                      5: 
                      6: /*                                     -[Sat Jan 29 13:24:33 1983 by jkf]-
                      7:  *     lisp.c                          $Locker:  $
                      8:  * main program
                      9:  *
                     10:  * (c) copyright 1982, Regents of the University of California
                     11:  */
                     12: 
                     13: #include       "global.h"
                     14: #include       "frame.h"
                     15: 
                     16: /* main *****************************************************************/
                     17: /* Execution of the lisp system begins here.  This is the top level    */
                     18: /* executor which is an infinite loop.  The structure is similar to    */
                     19: /* error.                                                              */
                     20: 
                     21: extern lispval reborn;
                     22: extern int rlevel;
                     23: static int virgin = 0;
                     24: int    Xargc;
                     25: char   **Xargv;
                     26: extern char **environ;
                     27: 
                     28: main(argc,argv,arge)
                     29: char **argv,**arge;
                     30: {
                     31:        lispval matom(), Lapply();
                     32:        extern struct frame *errp;
                     33:        extern int holbeg,holend,usehole;
                     34:        extern int *curhbeg;
                     35:        pbuf pb;
                     36:        
                     37:        environ = arge;
                     38: #if sun_4_2 || sun_4_2beta
                     39:        setlinebuf(stdout);
                     40: #else
                     41:        {extern char _sobuf[]; setbuf(stdout,_sobuf);}
                     42: #endif
                     43:        Xargc = argc;
                     44:        Xargv = argv;
                     45:        virgin = 0;
                     46:        errp = (struct frame *)0;
                     47:        initial();
                     48: 
                     49:        errp = Pushframe(F_RESET,nil,nil);
                     50:        switch(retval)
                     51:        {
                     52:        case C_RESET: break;    /* what to do? */
                     53:        case C_INITIAL: break;  /* first time  */
                     54:        }
                     55: 
                     56:        for(EVER) {
                     57:                lbot = np = orgnp;
                     58:                rlevel = 0;
                     59:                depth = 0;
                     60:                clearerr(piport = stdin);
                     61:                clearerr(poport = stdout);
                     62:                np++->val = matom("top-level");
                     63:                np++->val = nil;
                     64:                Lapply();
                     65:        }
                     66: }
                     67: 
                     68: lispval
                     69: Ntpl()
                     70: {
                     71:        lispval Lread(),Istsrch();
                     72: 
                     73:        if (virgin == 0) {
                     74:                fputs((char *)Istsrch(matom("version"))->d.cdr->d.cdr->d.cdr,poport);
                     75:                virgin = 1;
                     76:        }
                     77:        lbot = np;
                     78:        np++->val = P(stdin);
                     79:        np++->val = eofa;
                     80:        while (TRUE)
                     81:                {
                     82:                fputs("\n-> ",stdout);
                     83:                dmpport(stdout);
                     84:                vtemp = Lread();
                     85:                if(vtemp == eofa) exit(0);
                     86:                printr(eval(vtemp),stdout);
                     87:                }
                     88:        }
                     89: 
                     90: /* franzexit :: give up the ghost
                     91:  * this function is called whenever one decides to kill this process. 
                     92:  * We clean up a bit then call then standard exit routine.  C code 
                     93:  * in franz should never call exit() directly.
                     94:  */
                     95: franzexit(code)
                     96: {
                     97:        extern int fvirgin;
                     98:        extern char *stabf;
                     99:        if(!fvirgin) unlink(stabf);     /* give up any /tmp symbol tables */
                    100:        exit(code);
                    101: /* is this something special?? _cleanup();
                    102:  *                             proflush();
                    103:  *                             _exit(code);
                    104:  */
                    105:                                
                    106: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.