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