From: north Date: Thu, 25 Oct 2007 20:27:57 +0000 (+0000) Subject: Initial version of Cgraph created. X-Git-Tag: LAST_LIBGRAPH~32^2~5184 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ea68adb19f376aa10546e174210c406b74df2dda;p=graphviz Initial version of Cgraph created. --- diff --git a/lib/cgraph/agerror.c b/lib/cgraph/agerror.c new file mode 100644 index 000000000..f50c746d8 --- /dev/null +++ b/lib/cgraph/agerror.c @@ -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 +#include + +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; }