118737Sedward /* 233514Sbostic * Copyright (c) 1983 Regents of the University of California. 333514Sbostic * All rights reserved. 433514Sbostic * 5*42835Sbostic * %sccs.include.redist.c% 618737Sedward */ 718737Sedward 833514Sbostic #ifndef lint 9*42835Sbostic static char sccsid[] = "@(#)error.c 3.15 (Berkeley) 06/02/90"; 1033514Sbostic #endif /* not lint */ 1133514Sbostic 1214194Sedward #include "defs.h" 1315580Sedward #include "value.h" 1415580Sedward #include "context.h" 1516309Sedward #include "char.h" 1614194Sedward 1714418Sedward #define ERRLINES 10 /* number of lines for errwin */ 1814194Sedward 1914194Sedward /*VARARGS1*/ 2014194Sedward error(fmt, a, b, c, d, e, f, g, h) 2114194Sedward char *fmt; 2214194Sedward { 2316445Sedward register struct context *x; 2415681Sedward register struct ww *w; 2515681Sedward 2616445Sedward for (x = &cx; x != 0 && x->x_type != X_FILE; x = x->x_link) 2716445Sedward ; 2816445Sedward if (x == 0) { 2914194Sedward if (terse) 3016313Sedward wwbell(); 3114194Sedward else { 3216121Sedward wwprintf(cmdwin, fmt, a, b, c, d, e, f, g, h); 3316121Sedward wwputs(" ", cmdwin); 3414194Sedward } 3514194Sedward return; 3614194Sedward } 3716445Sedward if (x->x_noerr) 3814194Sedward return; 3916445Sedward if ((w = x->x_errwin) == 0) { 4014194Sedward char buf[512]; 4114194Sedward 4216445Sedward (void) sprintf(buf, "Errors from %s", x->x_filename); 4316445Sedward if ((w = x->x_errwin = openiwin(ERRLINES, buf)) == 0) { 4416121Sedward wwputs("Can't open error window. ", cmdwin); 4516445Sedward x->x_noerr = 1; 4614194Sedward return; 4714194Sedward } 4814194Sedward } 4915857Sedward if (more(w, 0) == 2) { 5016445Sedward x->x_noerr = 1; 5115857Sedward return; 5215857Sedward } 5316445Sedward wwprintf(w, "line %d: ", x->x_lineno); 5416121Sedward wwprintf(w, fmt, a, b, c, d, e, f, g, h); 5516121Sedward wwputc('\n', w); 5614194Sedward } 5714194Sedward 5815580Sedward err_end() 5914194Sedward { 6016445Sedward if (cx.x_type == X_FILE && cx.x_errwin != 0) { 6115857Sedward if (!cx.x_noerr) 6215857Sedward waitnl(cx.x_errwin); 6315580Sedward closeiwin(cx.x_errwin); 6415580Sedward cx.x_errwin = 0; 6514194Sedward } 6614194Sedward } 67