summaryrefslogtreecommitdiff
path: root/Build/source/texk/gregorio/gregorio-4.0.0-beta2/src/messages.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/gregorio/gregorio-4.0.0-beta2/src/messages.c')
-rw-r--r--Build/source/texk/gregorio/gregorio-4.0.0-beta2/src/messages.c173
1 files changed, 173 insertions, 0 deletions
diff --git a/Build/source/texk/gregorio/gregorio-4.0.0-beta2/src/messages.c b/Build/source/texk/gregorio/gregorio-4.0.0-beta2/src/messages.c
new file mode 100644
index 00000000000..f5dc0c53d1a
--- /dev/null
+++ b/Build/source/texk/gregorio/gregorio-4.0.0-beta2/src/messages.c
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2009-2015 The Gregorio Project (see CONTRIBUTORS.md)
+ *
+ * This file is part of Gregorio.
+ *
+ * Gregorio 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Gregorio 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 Gregorio. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h> /* for exit() */
+#include <stdarg.h> /* for exit() */
+#include "bool.h"
+#include "messages.h"
+
+static FILE *error_out;
+static const char *file_name = NULL;
+static gregorio_verbosity verbosity_mode = 0;
+static bool debug_messages = false;
+static int return_value = 0;
+
+int gregorio_get_return_value(void)
+{
+ return return_value;
+}
+
+void gregorio_set_error_out(FILE *const f)
+{
+ error_out = f;
+}
+
+void gregorio_set_file_name(const char *const new_name)
+{
+ file_name = new_name;
+}
+
+void gregorio_set_verbosity_mode(const gregorio_verbosity verbosity)
+{
+ verbosity_mode = verbosity;
+}
+
+#if 0 /* unused */
+static void gregorio_set_debug_messages(bool debug)
+{
+ debug_messages = debug;
+}
+#endif
+
+static const char *verbosity_to_str(const gregorio_verbosity verbosity)
+{
+ const char *str;
+ switch (verbosity) {
+ case VERBOSITY_WARNING:
+ str = _("warning:");
+ break;
+ case VERBOSITY_DEPRECATION:
+ str = _("deprecation:");
+ break;
+ case VERBOSITY_ERROR:
+ str = _("error:");
+ break;
+ case VERBOSITY_FATAL:
+ str = _("fatal error:");
+ break;
+ default:
+ /* INFO, for example */
+ str = " ";
+ break;
+ }
+ return str;
+}
+
+void gregorio_messagef(const char *function_name,
+ gregorio_verbosity verbosity, int line_number,
+ const char *format, ...)
+{
+ va_list args;
+ const char *verbosity_str;
+
+ if (!debug_messages) {
+ line_number = 0;
+ function_name = NULL;
+ }
+
+ if (!error_out) {
+ fprintf(stderr, _("warning: error_out not set in gregorio_messages, "
+ "assumed stderr\n"));
+ error_out = stderr;
+ }
+ if (!verbosity_mode) {
+ fprintf(stderr, _("warning: verbosity mode not set in "
+ "gregorio_messages, assumed warnings\n"));
+ verbosity_mode = VERBOSITY_WARNING;
+ }
+ if (verbosity < verbosity_mode) {
+ return;
+ }
+ verbosity_str = verbosity_to_str(verbosity);
+ if (line_number) {
+ if (function_name) {
+ if (!file_name) {
+ fprintf(error_out, "line %d: in function `%s': %s",
+ line_number, function_name, verbosity_str);
+ } else {
+ fprintf(error_out, "%d: in function `%s': %s", line_number,
+ function_name, verbosity_str);
+ }
+ } else {
+ /* no function_name specified */
+ if (!file_name) {
+ fprintf(error_out, "line %d: %s", line_number, verbosity_str);
+ } else {
+ fprintf(error_out, "%d: %s", line_number, verbosity_str);
+ }
+ }
+ } else {
+ if (function_name) {
+ /*
+ * if (!file_name) {
+ * fprintf (error_out, "in function `%s': %s",
+ * function_name, verbosity_str);
+ * return;
+ * } else {
+ */
+ fprintf(error_out, "in function `%s': %s", function_name,
+ verbosity_str);
+ /* } */
+ } else {
+ /* no function_name specified */
+ /*
+ * if (!file_name) {
+ * fprintf (error_out, "%s", verbosity_str);
+ * return;
+ * } else {
+ */
+ fprintf(error_out, "%s", verbosity_str);
+ /* } */
+ }
+ }
+ va_start(args, format);
+ vfprintf(error_out, format, args);
+ va_end(args);
+ fprintf(error_out, "\n");
+
+ switch (verbosity) {
+ case VERBOSITY_ERROR:
+ return_value = 1;
+ break;
+ case VERBOSITY_FATAL:
+ exit(1);
+ break;
+ default:
+ break;
+ }
+}
+
+void gregorio_message(const char *string, const char *function_name,
+ gregorio_verbosity verbosity, int line_number)
+{
+ gregorio_messagef(function_name, verbosity, line_number, "%s", string);
+}
+