Annotation of 43BSD/contrib/B/src/bsmall/b2mai.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
                      2: static char rcsid[]="$Header: b2mai.c,v 1.1 84/06/28 00:49:17 timo Exp $";
                      3: 
                      4: /* B driver for interpreter */
                      5: #include "b.h"
                      6: #include <sys/types.h>
                      7: 
                      8: #include "b1obj.h"
                      9: #include "b1mem.h"
                     10: #include "b2env.h"
                     11: #include "b2scr.h"
                     12: #include "b2err.h"
                     13: #include "b2fil.h"
                     14: #include "b2sig.h"
                     15: #include "b2syn.h"
                     16: #include "b2sem.h"
                     17: #include "b2sou.h"
                     18: 
                     19: bool call_error, in_process;
                     20: 
                     21: main(argc, argv) int argc; string argv[]; {
                     22:        in_process= No; call_error= No;
                     23:        call(argc, argv);
                     24:        if (call_error) exit(-1);
                     25:        in_process= Yes;
                     26:        init();
                     27:        call(argc, argv);
                     28:        bye(0);
                     29: }
                     30: 
                     31: #define Cllerr stderr
                     32: 
                     33: string pname;   /* program name */
                     34: 
                     35: Hidden Procedure erm(m, n, argc, pargc, pargv) string m, n; int argc, pargc; string pargv[]; {
                     36:        fprintf(Cllerr,
                     37:  "*** There is something I don't quite get in your call of %s\n", pname);
                     38:        show_call(argc, pargc, pargv);
                     39:        fprintf(Cllerr, "*** The problem is: %s %s\n", m, n);
                     40:        if (in_process) bye(-1);
                     41:        call_error= Yes;
                     42: }
                     43: 
                     44: Hidden Procedure call(pargc, pargv) int pargc; string pargv[]; {
                     45:        int argc; string *argv;
                     46: 
                     47:        pname = pargv[0];
                     48:        argc = pargc-1;
                     49:        argv = pargv+1;
                     50:        while (argc >= 0)
                     51:        if (argc > 0 && argv[0][0] == '-' && argv[0][1] != '\0') {
                     52:                if (argv[0][1] == 'q') { if (in_process) bye(0); }
                     53:                else if (argv[0][1] == 'i') {
                     54:                        filtered= Yes;
                     55:                        cmd_prompt= "\001>";
                     56:                        eg_prompt=  "\001E";
                     57:                        raw_prompt= "\001R";
                     58:                        qn_prompt=  "\001Y";
                     59:                } else erm("I never learned about the option", argv[0], argc, pargc, pargv);
                     60:                argc -= 1;
                     61:                argv += 1;
                     62:        } else {
                     63:                if (argc == 0 || (argv[0][0] == '-' && argv[0][1] == '\0')) {
                     64:                        release(iname);
                     65:                        iname = Vnil;
                     66:                        ifile = stdin;
                     67:                } else {
                     68:                        release(iname);
                     69:                        iname = mk_text(*argv);
                     70:                        ifile = fopen(*argv, "r");
                     71:                }
                     72:                if (ifile != NULL) { if (in_process) process();
                     73:                } else erm("can't open input file", *argv, argc, pargc, pargv);
                     74:                if (ifile != NULL && ifile != stdin) fclose(ifile);
                     75:                ++argv; --argc;
                     76:        }
                     77: }
                     78: 
                     79: Hidden Procedure show_call(eargc, pargc, pargv)
                     80:  int eargc, pargc; string pargv[]; {
                     81:        int argc= pargc; string *argv= pargv;
                     82:        intlet p, pos= 4;
                     83:        fprintf(Cllerr, "    ");
                     84:        while (argc > 0) {
                     85:                fprintf(Cllerr, *argv);
                     86:                pos+= strlen(*argv);
                     87:                if (argc == eargc) p= pos-1;
                     88:                ++argv; --argc;
                     89:                if (argc > 0) {
                     90:                        putc(' ', Cllerr);
                     91:                        pos++;
                     92:                }
                     93:        }
                     94:        putc('\n', Cllerr);
                     95:        for (pos= 0; pos < p; pos++) putc(' ', Cllerr);
                     96:        fprintf(Cllerr, "^\n");
                     97: }
                     98: 
                     99: Hidden Procedure init() {
                    100:        initmem();
                    101:        initnum();
                    102:        initenv();
                    103:        inittors();
                    104:        initsou();
                    105:        initfprs();
                    106:        inithow();
                    107:        initscr();
                    108:        setprmnv();
                    109:        getprmnv();
                    110:        inisigs();
                    111: }
                    112: 
                    113: Visible Procedure process() {
                    114:        re_screen();
                    115:        alino= 0; Eof= Eof0= No;
                    116:        xeq= Yes; skipping= No; cntxt= In_command;
                    117:        if (setjmp(main_loop) != 0) /* long jump occurred */ {
                    118:                re_files();
                    119:                if (Eof) return;
                    120:                xeq= interactive; skipping= !interactive;
                    121:                /* skipping may be reset by command() */
                    122:        }
                    123:        inistreams();
                    124:        re_env();
                    125:        active_reads= 0;
                    126:        while (!Eof) {
                    127:                re_streams();
                    128:                cntxt= In_command; resexp= Voi; lino= 0;
                    129:                cur_ilev= 0;
                    130:                terminated= No;
                    131:                if (ilev(Yes) > 0) parerr("outer indentation not zero", "");
                    132:                findceol(); command();
                    133:                re_files();
                    134:        }
                    135: }

unix.superglobalmegacorp.com

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