Annotation of 43BSD/contrib/B/src/bsmall/b2mai.c, revision 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.