xref: /csrg-svn/usr.bin/window/error.c (revision 14292)
114194Sedward #ifndef lint
2*14292Sedward static	char *sccsid = "@(#)error.c	1.2 83/07/29";
314194Sedward #endif
414194Sedward 
514194Sedward #include "defs.h"
614194Sedward 
714194Sedward struct ww *openwin();
814194Sedward 
914194Sedward extern int lineno;			/* line number in source file */
1014194Sedward 
1114194Sedward static char *filename;			/* source file name */
1214194Sedward static struct ww *errwin;		/* window for error reporting */
1314194Sedward static int errlineno;			/* lineno in errwin */
1414194Sedward static char baderror;			/* can't open the error window */
1514194Sedward 
1614194Sedward #define ERRLINES 10			/* number of lines in errwin */
1714194Sedward 
1814194Sedward /*VARARGS1*/
1914194Sedward error(fmt, a, b, c, d, e, f, g, h)
2014194Sedward char *fmt;
2114194Sedward {
2214194Sedward 	if (filename == 0) {
2314194Sedward 		if (terse)
2414194Sedward 			Ding();
2514194Sedward 		else {
2614194Sedward 			wwprintf(cmdwin, fmt, a, b, c, d, e, f, g, h);
2714194Sedward 			wwputs("  ", cmdwin);
2814194Sedward 		}
2914194Sedward 		return;
3014194Sedward 	}
3114194Sedward 	if (baderror)
3214194Sedward 		return;
3314194Sedward 	if (errwin == 0) {
3414194Sedward 		char buf[512];
3514194Sedward 
3614194Sedward 		(void) sprintf(buf, "Errors from %s", filename);
3714194Sedward 		if ((errwin = openwin(ERRLINES, buf)) == 0) {
3814194Sedward 			wwprintf(cmdwin, "Can't open error window.  ");
3914194Sedward 			baderror++;
4014194Sedward 			return;
4114194Sedward 		}
4214194Sedward 		errlineno = 0;
4314194Sedward 	}
4414194Sedward 	if (errlineno++ > ERRLINES - 4) {
4514194Sedward 		waitnl(errwin);
4614194Sedward 		errlineno = 0;
4714194Sedward 	}
4814194Sedward 	if (lineno != 0)
4914194Sedward 		wwprintf(errwin, "line %d: ", lineno);
5014194Sedward 	wwprintf(errwin, fmt, a, b, c, d, e, f, g, h);
5114194Sedward 	wwprintf(errwin, "\r\n");
5214194Sedward }
5314194Sedward 
5414194Sedward beginerror(fn)
5514194Sedward char *fn;
5614194Sedward {
57*14292Sedward 	char *malloc();
58*14292Sedward 
59*14292Sedward 	filename = malloc(strlen(fn) + 1);
60*14292Sedward 	strcpy(filename, fn);
6114194Sedward }
6214194Sedward 
6314194Sedward enderror()
6414194Sedward {
6514194Sedward 	if (errwin != 0) {
6614194Sedward 		waitnl(errwin);
6714194Sedward 		closewin(errwin);
6814194Sedward 		errwin = 0;
6914194Sedward 	}
7014194Sedward 	baderror = 0;
71*14292Sedward 	free(filename);
7214194Sedward 	filename = 0;
7314194Sedward }
74