Annotation of 43BSD/contrib/B/src/bed/erro.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
                      2: static char rcsid[] = "$Header: erro.c,v 2.5 85/08/22 16:02:02 timo Exp $";
                      3: 
                      4: /*
                      5:  * B editor -- Handle error messages.
                      6:  */
                      7: 
                      8: #include "b.h"
                      9: #include "feat.h"
                     10: #include "node.h"
                     11: 
                     12: 
                     13: extern bool hushbaby;
                     14: extern bool dflag;
                     15: 
                     16: string querepr();
                     17: 
                     18: extern int winheight; /* From scrn.c */
                     19: extern int winstart; /* From scrn.c */
                     20: extern int llength; /* From scrn.c */
                     21: 
                     22: #define SOBIT 0200 /* Interface with wind.c */
                     23: 
                     24: #define MAXMSG 1000
                     25: 
                     26: static char msgbuffer[MAXMSG];
                     27: static bool ringbell;
                     28: static int priority;
                     29: 
                     30: 
                     31: /*
                     32:  * Status line.  A combination of scroll bar, error message etc.
                     33:  * Put the message on the screen and clear the buffers for next time.
                     34:  * If there is no message, show status and copy buffer and recording mode.
                     35:  */
                     36: 
                     37: Visible Procedure
                     38: stsline(totlines, topline, scrlines, copybuffer, recording)
                     39:        int totlines;
                     40:        int topline;
                     41:        int scrlines;
                     42:        value copybuffer;
                     43:        bool recording;
                     44: {
                     45:        register string bp;
                     46: 
                     47:        if (ringbell && !hushbaby)
                     48:                trmbell();
                     49:        if (msgbuffer[0]) {
                     50:                msgbuffer[llength-1] = '\0'; /* Truncate */
                     51:                if (ringbell) {
                     52:                        for (bp = msgbuffer; *bp; ++bp)
                     53:                                *bp |= SOBIT;
                     54:                }
                     55:        }
                     56:        else {
                     57:                bp = msgbuffer;
                     58: #ifdef SCROLLBAR
                     59:                bp += addscrollbar(totlines, topline, scrlines);
                     60: #endif SCROLLBAR
                     61:                if (recording) {
                     62:                        strcpy(bp, "[Recording] ");
                     63:                        bp += (sizeof "[Recording] ") - 1;
                     64:                }
                     65:                if (copybuffer) {
                     66: #ifdef SHOWBUF
                     67:                        sprintf(bp, "[Copy buffer: %.80s]",
                     68:                                querepr(copybuffer));
                     69:                        while (*bp)
                     70:                                ++bp;
                     71:                        if (bp >= msgbuffer+80)
                     72:                                strcpy(msgbuffer+75, "...]");
                     73: #else !SHOWBUF
                     74:                        strcpy(bp, "[Copy buffer]");
                     75: #endif !SHOWBUF
                     76:                }
                     77:        }
                     78:        trmputdata(winheight, winheight, 0, msgbuffer);
                     79:        msgbuffer[0] = 0;
                     80:        priority = 0;
                     81:        ringbell = No;
                     82: }
                     83: 
                     84: #ifdef SCROLLBAR
                     85: 
                     86: /*
                     87:  * Paint a beautiful scroll bar so the user can see about what part of the
                     88:  * unit is visible on the screen (considering logical lines).
                     89:  */
                     90: 
                     91: Hidden int
                     92: addscrollbar(totlines, topline, scrlines)
                     93:        int totlines;
                     94:        int topline;
                     95:        int scrlines;
                     96: {
                     97:        int endline;
                     98:        register int i;
                     99: 
                    100:        if (winstart > 0 || scrlines > totlines)
                    101:                return 0; /* Nothing outside screen */
                    102:        if (totlines <= 0)
                    103:                totlines = 1; /* Don't want to divide by 0 */
                    104:        topline = topline*winheight / totlines;
                    105:        endline = topline + (scrlines*winheight + totlines-1) / totlines;
                    106:        if (endline > winheight)
                    107:                endline = winheight;
                    108:        if (topline >= endline)
                    109:                topline = endline-1;
                    110:        for (i = 0; i < topline; ++i)
                    111:                msgbuffer[i] = '-';
                    112:        for (; i < endline; ++i)
                    113:                msgbuffer[i] = '#';
                    114:        for (; i < winheight; ++i)
                    115:                msgbuffer[i] = '-';
                    116:        msgbuffer[i++] = ' ';
                    117:        msgbuffer[i] = '\0';
                    118:        return i;
                    119: }
                    120: 
                    121: #endif SCROLLBAR
                    122: 
                    123: /*
                    124:  * Issue an error message.  These have highest priority.
                    125:  * Once an error message is in the buffer, further error messages are ignored
                    126:  * until it has been displayed.
                    127:  */
                    128: 
                    129: /* VARARGS 1 */
                    130: Visible Procedure
                    131: error(fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
                    132:        string fmt;
                    133: {
                    134:        ringbell = Yes;
                    135:        if (fmt && priority < 3) {
                    136:                priority = 3;
                    137:                sprintf(msgbuffer, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
                    138:        }
                    139: }
                    140: 
                    141: 
                    142: /*
                    143:  * Issue an informative message.  These have medium priority.
                    144:  * Unlike error messages, the last such message is displayed.
                    145:  */
                    146: 
                    147: /* VARARGS 1 */
                    148: Visible Procedure
                    149: message(fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
                    150:        register string fmt;
                    151: {
                    152:        if (fmt && priority <= 2) {
                    153:                priority = 2;
                    154:                sprintf(msgbuffer, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
                    155:        }
                    156: }
                    157: 
                    158: 
                    159: /*
                    160:  * Issue a debugging message.  These  have lowest priority and
                    161:  * are not shown to ordinary users.
                    162:  */
                    163: 
                    164: /* VARARGS1 */
                    165: Visible Procedure
                    166: debug(fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
                    167:        string fmt;
                    168: {
                    169: #ifndef NDEBUG
                    170:        if (fmt && priority <= 1) {
                    171:                priority = 1;
                    172:                sprintf(msgbuffer,
                    173:                        fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
                    174:        }
                    175: #endif NDEBUG
                    176: }
                    177: 
                    178: 
                    179: /*
                    180:  * Dump any error message still remaining to stderr.
                    181:  */
                    182: 
                    183: Visible Procedure
                    184: enderro()
                    185: {
                    186:        if (msgbuffer[0]) {
                    187:                fprintf(stderr, "%s\n", msgbuffer);
                    188:        }
                    189:        msgbuffer[0] = 0;
                    190:        priority = 0;
                    191:        ringbell = No;
                    192: }
                    193: 
                    194: 
                    195: /*
                    196:  * This #define causes "erro.h" to compile a table of error messages.
                    197:  */
                    198: 
                    199: #define _ERROR(name, message) char name[] = message
                    200: 
                    201: #include "erro.h"

unix.superglobalmegacorp.com

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