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

1.1       root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
                      2: /* $Header: b2err.c,v 1.1 84/06/28 00:49:07 timo Exp $ */
                      3: 
                      4: /* B error message handling */
                      5: #include "b.h"
                      6: #include "b0con.h"
                      7: #include "b1obj.h"
                      8: #include "b2err.h"
                      9: #include "b2scr.h"
                     10: #include "b2env.h"
                     11: #include "b2sem.h" /* for xeq */
                     12: #include "b2syn.h"
                     13: #include "b2sig.h"
                     14: #include "b2fil.h"
                     15: 
                     16: jmp_buf main_loop;
                     17: bool skipping;
                     18: 
                     19: 
                     20: #define Interactive ((cntxt == In_read || active_reads > 0) \
                     21:                                ? read_interactive : interactive)
                     22: #define Errout (Interactive ? stderr : stdout)
                     23: #define Skip() {if (skipping) proceed();}
                     24: 
                     25: Hidden Procedure Line() {
                     26:        if (interactive || Errout == stdout) line();
                     27: }
                     28: 
                     29: Hidden Procedure errmess(m) string m; {
                     30:        fprintf(Errout, m);
                     31: }
                     32: 
                     33: Hidden Procedure core_dump() {
                     34:        errmess("*** Core-dump for inspection purposes: ");
                     35:        fflush(stdout);
                     36:        dump();
                     37: }
                     38: 
                     39: Visible Procedure bye(ex) int ex; {
                     40:        at_nwl= Yes;
                     41:        putprmnv();
                     42:        exit(ex);
                     43: }
                     44: 
                     45: Hidden Procedure prname(name) value name; {
                     46:        value ch; int k, len;
                     47:        if (Is_text(name)) {
                     48:                len= length(name);
                     49:                k_Over_len {
                     50:                        ch= thof(k+1, name);
                     51:                        putc(charval(ch), Errout);
                     52:                        release(ch);
                     53:                }
                     54:        } else errmess("???");
                     55: }
                     56: 
                     57: value erruname= Vnil; literal errutype; intlet errlino= 0;
                     58: 
                     59: Hidden intlet display_line(ax) txptr ax; {
                     60:        /*displays the line that tx is in, and returns the column number that
                     61:          ax is at.
                     62:        */
                     63:        txptr lx= fcol(); intlet ap= -1, p= 0; char c;
                     64:        while (!Eol(lx) && Char(lx) != Eotc) {
                     65:                if (lx == ax) ap= p;
                     66:                c= *lx++;
                     67:                if (c == '\t') {
                     68:                        do { putc(' ', Errout); } while (((++p)%4)!=0);
                     69:                } else { putc(c, Errout); p++; }
                     70:        }
                     71:        putc('\n', Errout);
                     72:        if (ap < 0) return p;
                     73:        return ap;
                     74: }
                     75: 
                     76: Hidden Procedure prline(at) bool at; {
                     77:        txptr ax= tx; intlet p, ap;
                     78:        if (cntxt == In_read || cntxt == In_value) errmess(" in your ");
                     79:        else if (cntxt != In_formal)
                     80:                fprintf(Errout, " in line %d of your ", lino);
                     81:        switch (cntxt) {
                     82:        case In_command: errmess("command"); break;
                     83:        case In_read: errmess("expression to be read"); break;
                     84:        case In_value: errmess("edited value"); break;
                     85:        case In_unit:errmess("unit "); prname(uname);
                     86:                erruname= uname; errutype= utype; errlino= lino;
                     87:                break;
                     88:        case In_formal: break;
                     89:        case In_prmnv: errmess("permanent environment"); break;
                     90:        default: errmess("???\n"); return;
                     91:        }
                     92:        errmess("\n    ");
                     93:        if (!at) do ax--; while (Space(Char(ax)));
                     94:        ap= display_line(ax)+4;
                     95:        for (p= 0; p < ap; p++) putc(' ', Errout);
                     96:        putc('^', Errout);
                     97:        putc('\n', Errout);
                     98: }
                     99: 
                    100: Hidden Procedure show_where(at, wia) bool at, wia; {
                    101:        context cc;
                    102:        if (cntxt == In_formal) {
                    103:                sv_context(&cc);
                    104:                set_context(&how_context);
                    105:                prline(No);
                    106:                set_context(&cc);
                    107:                errmess("originating from your command");
                    108:        }
                    109:        prline(at);
                    110:        if (!Interactive || !wia) {
                    111:                fprintf(Errout,
                    112:        "(detected after reading %d input line%s of your input file ",
                    113:                alino, alino == 1 ? "" : "s");
                    114:                if (iname == Vnil) errmess("standard input)");
                    115:                else {
                    116:                        prname(iname);
                    117:                        errmess(")");
                    118:                }
                    119:                putc('\n', Errout);
                    120:        }
                    121: }
                    122: 
                    123: Visible Procedure syserr(m) string m; {
                    124:        Line();
                    125:        errmess("*** Sorry, B system malfunction");
                    126:        show_where(Yes, Yes);
                    127:        fprintf(Errout, "*** The problem is: %s\n", m);
                    128:        errmess("*** Please save pertinent data for inspection by B guru\n");
                    129:        core_dump();
                    130: }
                    131: 
                    132: Visible Procedure memexh() {
                    133:        Line();
                    134:        errmess("*** Sorry, memory exhausted");
                    135:        show_where(Yes, Yes);
                    136:        errmess("*** Get your boss to buy a larger computer\n");
                    137:        core_dump();
                    138: }
                    139: 
                    140: Hidden Procedure fix_files() {
                    141:        if (ifile != stdin) fclose(ifile);
                    142:        if (f_interactive(stdin) || filtered) {
                    143:                interactive= Yes;
                    144:                release(iname);
                    145:                iname = Vnil;
                    146:                ifile = stdin;
                    147:                Eof= Eof0= No;
                    148:        }
                    149: }
                    150: 
                    151: Hidden Procedure proceed() {
                    152:        if (cntxt == In_prmnv) exit(-1);
                    153:        else if (cntxt == In_read && read_interactive) {
                    154:                errmess("*** please enter a valid expression instead\n");
                    155:                longjmp(reading[active_reads-1], 1);
                    156:        } else if (active_reads > 0 && read_interactive) {
                    157:                errmess("*** please enter a suitable expression instead\n");
                    158:                longjmp(reading[active_reads-1], 1);
                    159:        } else {
                    160:                if (cntxt == In_value) fix_files();
                    161:                longjmp(main_loop, 1);
                    162:        }
                    163: }
                    164: 
                    165: Hidden Procedure message(m1, m2, m3, at) string m1, m2, m3; bool at; {
                    166:        Skip(); Line();
                    167:        errmess(m1);
                    168:        show_where(at, Yes);
                    169:        fprintf(Errout, "*** The problem is: %s%s\n", m2, m3);
                    170:        proceed();
                    171: }
                    172: 
                    173: Visible Procedure error(m) string m; {
                    174:        message("*** Cannot cope with problem", m, "", No);
                    175: }
                    176: 
                    177: Visible Procedure parerr(m, ss) string m, ss; {
                    178:        message("*** There's something I don't understand", m, ss, Yes);
                    179: }
                    180: 
                    181: Visible Procedure pprerr(m, ss) string m, ss; {
                    182:        message("*** There's something I don't understand", m, ss, No);
                    183: }
                    184:  
                    185: Visible Procedure checkerr() {
                    186:        Line();
                    187:        errmess("*** Your check failed");
                    188:        show_where(No, Yes);
                    189:        longjmp(main_loop, 1);
                    190: }
                    191: 
                    192: Visible Procedure int_signal(in_read) bool in_read; {
                    193:        if (cntxt == In_prmnv) exit(-1);
                    194:        else if (interactive) {
                    195:                interrupt(in_read);
                    196:                if (!in_read) accept_int();
                    197:                longjmp(main_loop, 1);
                    198:        } else {
                    199:                fix_files();
                    200:                if (interactive) {
                    201:                        interrupt(in_read);
                    202:                        if (!in_read) accept_int();
                    203:                        process();
                    204:                } else bye(1);
                    205:        }
                    206: }
                    207: 
                    208: Hidden Procedure interrupt(in_read) bool in_read; {
                    209:        if (!in_read) at_nwl= No;
                    210:        Line();
                    211:        errmess(in_read ? "*** READ aborted\n" : "*** interrupted\n");
                    212:        if (filtered) errmess("\177");
                    213:        if (cntxt == In_read || active_reads > 0) set_context(&read_context);
                    214:        /* show_where(No, was_interactive); */
                    215: }
                    216: 
                    217: bool bugs= No;
                    218: bool tracing= No;
                    219: 
                    220: Visible Procedure debug(m) string m; {
                    221:        if (bugs) {
                    222:                Line();
                    223:                fprintf(Errout, "*** Debugging (xeq = %s, cur_ilev = %d)",
                    224:                        xeq ? "Yes" : "No", cur_ilev);
                    225:                show_where(Yes, Yes);
                    226:                fprintf(Errout, "*** %s\n", m);
                    227:        }
                    228: }
                    229: 
                    230: Visible Procedure trace() {
                    231:        VOID display_line(tx);
                    232: }

unix.superglobalmegacorp.com

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