xref: /csrg-svn/usr.bin/window/error.c (revision 14418)
114194Sedward #ifndef lint
2*14418Sedward static	char *sccsid = "@(#)error.c	2.1.1.1 83/08/09";
314194Sedward #endif
414194Sedward 
514194Sedward #include "defs.h"
614194Sedward 
714194Sedward static char *filename;			/* source file name */
814194Sedward static struct ww *errwin;		/* window for error reporting */
914194Sedward static int errlineno;			/* lineno in errwin */
1014194Sedward static char baderror;			/* can't open the error window */
1114194Sedward 
12*14418Sedward #define ERRLINES 10			/* number of lines for errwin */
1314194Sedward 
1414194Sedward /*VARARGS1*/
1514194Sedward error(fmt, a, b, c, d, e, f, g, h)
1614194Sedward char *fmt;
1714194Sedward {
1814194Sedward 	if (filename == 0) {
1914194Sedward 		if (terse)
20*14418Sedward 			wwbell();
2114194Sedward 		else {
22*14418Sedward 			(void) wwprintf(cmdwin, fmt, a, b, c, d, e, f, g, h);
23*14418Sedward 			(void) wwputs("  ", cmdwin);
2414194Sedward 		}
2514194Sedward 		return;
2614194Sedward 	}
2714194Sedward 	if (baderror)
2814194Sedward 		return;
2914194Sedward 	if (errwin == 0) {
3014194Sedward 		char buf[512];
3114194Sedward 
3214194Sedward 		(void) sprintf(buf, "Errors from %s", filename);
33*14418Sedward 		if ((errwin = openiwin(ERRLINES, buf)) == 0) {
34*14418Sedward 			(void) wwprintf(cmdwin, "Can't open error window.  ");
3514194Sedward 			baderror++;
3614194Sedward 			return;
3714194Sedward 		}
3814194Sedward 		errlineno = 0;
3914194Sedward 	}
4014194Sedward 	if (errlineno++ > ERRLINES - 4) {
4114194Sedward 		waitnl(errwin);
4214194Sedward 		errlineno = 0;
4314194Sedward 	}
4414194Sedward 	if (lineno != 0)
45*14418Sedward 		(void) wwprintf(errwin, "line %d: ", lineno);
46*14418Sedward 	(void) wwprintf(errwin, fmt, a, b, c, d, e, f, g, h);
47*14418Sedward 	(void) wwprintf(errwin, "\r\n");
4814194Sedward }
4914194Sedward 
5014194Sedward beginerror(fn)
5114194Sedward char *fn;
5214194Sedward {
53*14418Sedward 	filename = malloc((unsigned) strlen(fn) + 1);
54*14418Sedward 	(void) strcpy(filename, fn);
5514194Sedward }
5614194Sedward 
5714194Sedward enderror()
5814194Sedward {
5914194Sedward 	if (errwin != 0) {
6014194Sedward 		waitnl(errwin);
61*14418Sedward 		closeiwin(errwin);
6214194Sedward 		errwin = 0;
6314194Sedward 	}
6414194Sedward 	baderror = 0;
6514292Sedward 	free(filename);
6614194Sedward 	filename = 0;
6714194Sedward }
68