diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2016-05-16 18:47:09 +0200 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2016-05-16 18:47:09 +0200 |
| commit | 044dc5a93c33d7aa4c9c98a626890c16446a56fc (patch) | |
| tree | 23cc17a595d36a35ad9cb50e3ab18c2956b5f65c /src/gensvm_print.c | |
| parent | Move includes to header (diff) | |
| download | gensvm-044dc5a93c33d7aa4c9c98a626890c16446a56fc.tar.gz gensvm-044dc5a93c33d7aa4c9c98a626890c16446a56fc.zip | |
major refactor of the code
Diffstat (limited to 'src/gensvm_print.c')
| -rw-r--r-- | src/gensvm_print.c | 88 |
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); +} |
