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