]> granicus.if.org Git - graphviz/commitdiff
Initial version of Cgraph created.
authornorth <devnull@localhost>
Thu, 25 Oct 2007 20:27:57 +0000 (20:27 +0000)
committernorth <devnull@localhost>
Thu, 25 Oct 2007 20:27:57 +0000 (20:27 +0000)
lib/cgraph/agerror.c [new file with mode: 0644]

diff --git a/lib/cgraph/agerror.c b/lib/cgraph/agerror.c
new file mode 100644 (file)
index 0000000..f50c746
--- /dev/null
@@ -0,0 +1,106 @@
+/* $Id$ $Revision$ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#include <stdio.h>
+#include <cghdr.h>
+
+agerrlevel_t agerrno;          /* Last error */
+static agerrlevel_t agerrlevel = AGWARN;       /* Report errors >= agerrlevel */
+static int agerrcnt;
+
+static long aglast;            /* Last message */
+static FILE *agerrout;         /* Message file */
+
+void agseterr(agerrlevel_t lvl)
+{
+    agerrlevel = lvl;
+}
+
+char *aglasterr()
+{
+    long endpos;
+    long len;
+    char *buf;
+
+    if (!agerrout)
+       return 0;
+    fflush(agerrout);
+    endpos = ftell(agerrout);
+    len = endpos - aglast;
+    buf = malloc(len + 1);
+    fseek(agerrout, aglast, SEEK_SET);
+    fread(buf, sizeof(char), len, agerrout);
+    buf[len] = '\0';
+    fseek(agerrout, endpos, SEEK_SET);
+
+    return buf;
+}
+
+static int agerr_va(agerrlevel_t level, char *fmt, va_list args)
+{
+    agerrlevel_t lvl;
+
+    lvl = (level == AGPREV ? agerrno : (level == AGMAX) ? AGERR : level);
+
+       agerrcnt++;
+    agerrno = lvl;
+    if (lvl >= agerrlevel) {
+       if (level != AGPREV)
+           fprintf(stderr, "%s: ",
+                   (level == AGERR) ? "Error" : "Warning");
+       vfprintf(stderr, fmt, args);
+       va_end(args);
+       return 0;
+    }
+
+    if (!agerrout) {
+       agerrout = tmpfile();
+       if (!agerrout)
+           return 1;
+    }
+
+    if (level != AGPREV)
+       aglast = ftell(agerrout);
+    vfprintf(agerrout, fmt, args);
+    va_end(args);
+    return 0;
+}
+
+int agerr(agerrlevel_t level, char *fmt, ...)
+{
+    va_list args;
+
+    va_start(args, fmt);
+    return agerr_va(level, fmt, args);
+}
+
+void agerrorf(char *fmt, ...)
+{
+    va_list args;
+
+    va_start(args, fmt);
+    agerr_va(AGERR, fmt, args);
+}
+
+void agwarningf(char *fmt, ...)
+{
+    va_list args;
+
+    va_start(args, fmt);
+    agerr_va(AGWARN, fmt, args);
+}
+
+int agerrors() { return agerrcnt; }