From dd78f75171336b2cdff3eaad3af4523b1999940e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Sun, 6 Nov 2016 13:21:11 +0100 Subject: Geml it self (just arguments parsing and some utils) --- src/utils.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/utils.c (limited to 'src/utils.c') diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..3d91753 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,66 @@ +/* geml - General extendable macro language + * utils.h Various utility functions + * + * Copyright (C) 2016 Karel Kočí + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include +#include +#include "utils.h" + +static enum Verbosity verbosity = V_INFO; + +void verbosity_set(enum Verbosity level) { + if (level > V_DIE) + level = V_DIE; + else if (level < V_DEVEL) + level = V_DEVEL; + verbosity = level; +} + +void verbosity_inc(void) { + verbosity--; + verbosity_set(verbosity); +} + +void verbosity_dec(void) { + verbosity++; + verbosity_set(verbosity); +} + +// TODO colors if terminal supports them +static const char *v_name[] = { + "DEVEL", + "DEBUG", + "INFO", + "WARN", + "ERROR", + "DIE" +}; + +void print_message(const char *file, const int line, enum Verbosity level, const char *msg, ...) { + ASSERT(level <= V_DIE && level >= V_DEVEL); + if (level < verbosity) + return; + fputs(v_name[level + 2], stderr); + if (verbosity <= V_DEBUG) + fprintf(stderr, ":%s:%d", file, line); + fputs(":", stderr); + va_list args; + va_start(args, msg); + vfprintf(stderr, msg, args); + fputs("\n", stderr); +} -- cgit v1.2.3