+/* View debugging */
+extern void view_debug(const char *fmt, va_list ap);
+
+/* Helper functions */
+static void message(FILE *output_fd, const char *prefix, const char *fmt, va_list ap)
+{
+ va_list tmp;
+
+ /* Log to standard out */
+ if (output_fd) {
+ va_copy(tmp, ap);
+ fprintf(output_fd, "%s: ", prefix);
+ vfprintf(output_fd, fmt, tmp);
+ fprintf(output_fd, "\n");
+ fflush(output_fd);
+ }
+
+ /* Log to debug file */
+ if (debug_fd) {
+ va_copy(tmp, ap);
+ fprintf(debug_fd, "%s: ", prefix);
+ vfprintf(debug_fd, fmt, tmp);
+ fprintf(debug_fd, "\n");
+ fflush(debug_fd);
+ }
+
+ /* Log to status bar */
+ if (&view_debug) {
+ va_copy(tmp, ap);
+ view_debug(fmt, tmp);
+ }
+}
+