diff options
author | Karel Kočí <cynerd@email.cz> | 2016-11-06 13:21:11 +0100 |
---|---|---|
committer | Karel Kočí <cynerd@email.cz> | 2016-11-06 13:21:11 +0100 |
commit | dd78f75171336b2cdff3eaad3af4523b1999940e (patch) | |
tree | c16c51ec2a1a437a49b35b9de84eded31cf02ac4 /src/utils.c | |
parent | 91407994092ae93ce09f5bec049b8662d0db27a5 (diff) | |
download | geml-dd78f75171336b2cdff3eaad3af4523b1999940e.tar.gz geml-dd78f75171336b2cdff3eaad3af4523b1999940e.tar.bz2 geml-dd78f75171336b2cdff3eaad3af4523b1999940e.zip |
Geml it self (just arguments parsing and some utils)
Diffstat (limited to 'src/utils.c')
-rw-r--r-- | src/utils.c | 66 |
1 files changed, 66 insertions, 0 deletions
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 <stdio.h> +#include <stdarg.h> +#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); +} |