install approved copyright notice
[unix-history] / usr / src / usr.bin / window / error.c
index 9a44545..35aea19 100644 (file)
@@ -1,73 +1,76 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)error.c     2.1 83/07/30";
-#endif
+static char sccsid[] = "@(#)error.c    3.14 (Berkeley) %G%";
+#endif /* not lint */
 
 #include "defs.h"
 
 #include "defs.h"
+#include "value.h"
+#include "context.h"
+#include "char.h"
 
 
-struct ww *openwin();
-
-extern int lineno;                     /* line number in source file */
-
-static char *filename;                 /* source file name */
-static struct ww *errwin;              /* window for error reporting */
-static int errlineno;                  /* lineno in errwin */
-static char baderror;                  /* can't open the error window */
-
-#define ERRLINES 10                    /* number of lines in errwin */
+#define ERRLINES 10                    /* number of lines for errwin */
 
 /*VARARGS1*/
 error(fmt, a, b, c, d, e, f, g, h)
 char *fmt;
 {
 
 /*VARARGS1*/
 error(fmt, a, b, c, d, e, f, g, h)
 char *fmt;
 {
-       if (filename == 0) {
+       register struct context *x;
+       register struct ww *w;
+
+       for (x = &cx; x != 0 && x->x_type != X_FILE; x = x->x_link)
+               ;
+       if (x == 0) {
                if (terse)
                if (terse)
-                       Ding();
+                       wwbell();
                else {
                        wwprintf(cmdwin, fmt, a, b, c, d, e, f, g, h);
                        wwputs("  ", cmdwin);
                }
                return;
        }
                else {
                        wwprintf(cmdwin, fmt, a, b, c, d, e, f, g, h);
                        wwputs("  ", cmdwin);
                }
                return;
        }
-       if (baderror)
+       if (x->x_noerr)
                return;
                return;
-       if (errwin == 0) {
+       if ((w = x->x_errwin) == 0) {
                char buf[512];
 
                char buf[512];
 
-               (void) sprintf(buf, "Errors from %s", filename);
-               if ((errwin = openwin(ERRLINES, buf)) == 0) {
-                       wwprintf(cmdwin, "Can't open error window.  ");
-                       baderror++;
+               (void) sprintf(buf, "Errors from %s", x->x_filename);
+               if ((w = x->x_errwin = openiwin(ERRLINES, buf)) == 0) {
+                       wwputs("Can't open error window.  ", cmdwin);
+                       x->x_noerr = 1;
                        return;
                }
                        return;
                }
-               errlineno = 0;
        }
        }
-       if (errlineno++ > ERRLINES - 4) {
-               waitnl(errwin);
-               errlineno = 0;
+       if (more(w, 0) == 2) {
+               x->x_noerr = 1;
+               return;
        }
        }
-       if (lineno != 0)
-               wwprintf(errwin, "line %d: ", lineno);
-       wwprintf(errwin, fmt, a, b, c, d, e, f, g, h);
-       wwprintf(errwin, "\r\n");
-}
-
-beginerror(fn)
-char *fn;
-{
-       char *malloc();
-
-       filename = malloc(strlen(fn) + 1);
-       strcpy(filename, fn);
+       wwprintf(w, "line %d: ", x->x_lineno);
+       wwprintf(w, fmt, a, b, c, d, e, f, g, h);
+       wwputc('\n', w);
 }
 
 }
 
-enderror()
+err_end()
 {
 {
-       if (errwin != 0) {
-               waitnl(errwin);
-               closewin(errwin);
-               errwin = 0;
+       if (cx.x_type == X_FILE && cx.x_errwin != 0) {
+               if (!cx.x_noerr)
+                       waitnl(cx.x_errwin);
+               closeiwin(cx.x_errwin);
+               cx.x_errwin = 0;
        }
        }
-       baderror = 0;
-       free(filename);
-       filename = 0;
 }
 }