xref: /csrg-svn/usr.bin/window/error.c (revision 14194)
1*14194Sedward #ifndef lint
2*14194Sedward static	char *sccsid = "@(#)error.c	1.1 83/07/28";
3*14194Sedward #endif
4*14194Sedward 
5*14194Sedward #include "defs.h"
6*14194Sedward 
7*14194Sedward struct ww *openwin();
8*14194Sedward 
9*14194Sedward extern int lineno;			/* line number in source file */
10*14194Sedward 
11*14194Sedward static char *filename;			/* source file name */
12*14194Sedward static struct ww *errwin;		/* window for error reporting */
13*14194Sedward static int errlineno;			/* lineno in errwin */
14*14194Sedward static char baderror;			/* can't open the error window */
15*14194Sedward 
16*14194Sedward #define ERRLINES 10			/* number of lines in errwin */
17*14194Sedward 
18*14194Sedward /*VARARGS1*/
19*14194Sedward error(fmt, a, b, c, d, e, f, g, h)
20*14194Sedward char *fmt;
21*14194Sedward {
22*14194Sedward 	if (filename == 0) {
23*14194Sedward 		if (terse)
24*14194Sedward 			Ding();
25*14194Sedward 		else {
26*14194Sedward 			wwprintf(cmdwin, fmt, a, b, c, d, e, f, g, h);
27*14194Sedward 			wwputs("  ", cmdwin);
28*14194Sedward 		}
29*14194Sedward 		return;
30*14194Sedward 	}
31*14194Sedward 	if (baderror)
32*14194Sedward 		return;
33*14194Sedward 	if (errwin == 0) {
34*14194Sedward 		char buf[512];
35*14194Sedward 
36*14194Sedward 		(void) sprintf(buf, "Errors from %s", filename);
37*14194Sedward 		if ((errwin = openwin(ERRLINES, buf)) == 0) {
38*14194Sedward 			wwprintf(cmdwin, "Can't open error window.  ");
39*14194Sedward 			baderror++;
40*14194Sedward 			return;
41*14194Sedward 		}
42*14194Sedward 		errlineno = 0;
43*14194Sedward 	}
44*14194Sedward 	if (errlineno++ > ERRLINES - 4) {
45*14194Sedward 		waitnl(errwin);
46*14194Sedward 		errlineno = 0;
47*14194Sedward 	}
48*14194Sedward 	if (lineno != 0)
49*14194Sedward 		wwprintf(errwin, "line %d: ", lineno);
50*14194Sedward 	wwprintf(errwin, fmt, a, b, c, d, e, f, g, h);
51*14194Sedward 	wwprintf(errwin, "\r\n");
52*14194Sedward }
53*14194Sedward 
54*14194Sedward beginerror(fn)
55*14194Sedward char *fn;
56*14194Sedward {
57*14194Sedward 	filename = fn;
58*14194Sedward }
59*14194Sedward 
60*14194Sedward enderror()
61*14194Sedward {
62*14194Sedward 	if (errwin != 0) {
63*14194Sedward 		waitnl(errwin);
64*14194Sedward 		closewin(errwin);
65*14194Sedward 		errwin = 0;
66*14194Sedward 	}
67*14194Sedward 	baderror = 0;
68*14194Sedward 	filename = 0;
69*14194Sedward }
70