aboutsummaryrefslogtreecommitdiff
path: root/src/gensvm_print.c
diff options
context:
space:
mode:
authorGertjan van den Burg <gertjanvandenburg@gmail.com>2016-05-16 18:47:09 +0200
committerGertjan van den Burg <gertjanvandenburg@gmail.com>2016-05-16 18:47:09 +0200
commit044dc5a93c33d7aa4c9c98a626890c16446a56fc (patch)
tree23cc17a595d36a35ad9cb50e3ab18c2956b5f65c /src/gensvm_print.c
parentMove includes to header (diff)
downloadgensvm-044dc5a93c33d7aa4c9c98a626890c16446a56fc.tar.gz
gensvm-044dc5a93c33d7aa4c9c98a626890c16446a56fc.zip
major refactor of the code
Diffstat (limited to 'src/gensvm_print.c')
-rw-r--r--src/gensvm_print.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/gensvm_print.c b/src/gensvm_print.c
new file mode 100644
index 0000000..2c00512
--- /dev/null
+++ b/src/gensvm_print.c
@@ -0,0 +1,88 @@
+/**
+ * @file util.c
+ * @author Gertjan van den Burg
+ * @date January, 2014
+ * @brief Utility functions
+ *
+ * @details
+ * This file contains several utility functions for coordinating input and
+ * output of data and model files. It also contains string functions.
+ *
+ */
+
+#include "gensvm_print.h"
+
+FILE *GENSVM_OUTPUT_FILE; ///< The #GENSVM_OUTPUT_FILE specifies the
+ ///< output stream to which all output is
+ ///< written. This is done through the
+ ///< internal (!)
+ ///< function gensvm_print_string(). The
+ ///< advantage of using a global output
+ ///< stream variable is that the output can
+ ///< temporarily be suppressed by importing
+ ///< this variable through @c extern and
+ ///< (temporarily) setting it to NULL.
+
+/**
+ * @brief Print a given string to the specified output stream
+ *
+ * @details
+ * This function is used to print a given string to the output stream
+ * specified by #GENSVM_OUTPUT_FILE. The stream is flushed after the string
+ * is written to the stream. If #GENSVM_OUTPUT_FILE is NULL, nothing is
+ * written. Note that this function is only used by note(), it should never be
+ * used directly.
+ *
+ * @param[in] s string to write to the stream
+ *
+ */
+static void gensvm_print_string(const char *s)
+{
+ if (GENSVM_OUTPUT_FILE != NULL) {
+ fputs(s, GENSVM_OUTPUT_FILE);
+ fflush(GENSVM_OUTPUT_FILE);
+ }
+}
+
+/**
+ * @brief Parse a formatted string and write to the output stream
+ *
+ * @details
+ * This function is a replacement of fprintf(), such that the output stream
+ * does not have to be specified at each function call. The functionality is
+ * exactly the same however. Writing the formatted string to the output stream
+ * is handled by gensvm_print_string().
+ *
+ * @param[in] fmt String format
+ * @param[in] ... variable argument list for the string format
+ *
+ */
+void note(const char *fmt,...)
+{
+ char buf[BUFSIZ];
+ va_list ap;
+ va_start(ap,fmt);
+ vsprintf(buf,fmt,ap);
+ va_end(ap);
+ (*gensvm_print_string)(buf);
+}
+
+/**
+ * @brief Parse a formatted string and write it to standard error
+ *
+ * @details
+ * Shorthand for fprintf(stderr, ...)
+ *
+ * @param[in] fmt string format
+ * @param[in] ... variable argument list for the string format
+ */
+void err(const char *fmt, ...)
+{
+ char buf[BUFSIZ];
+ va_list ap;
+ va_start(ap, fmt);
+ vsprintf(buf, fmt, ap);
+ va_end(ap);
+ fputs(buf, stderr);
+ fflush(stderr);
+}