output.c

changeset 0
86b7f6f9c5c0
child 5
f878a9ffa3e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/output.c	Tue Feb 15 18:57:52 2005 +0100
@@ -0,0 +1,282 @@
+/*
+ * libtu/output.c
+ *
+ * Copyright (c) Tuomo Valkonen 1999-2000.
+ * 
+ * This file is distributed under the terms of the "Artistic License".
+ * See the included file LICENSE for details.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <strings.h>
+#include <string.h>
+
+#include "include/misc.h"
+#include "include/output.h"
+#include "include/util.h"
+
+
+/* verbose
+ */
+
+static bool verbose_mode=FALSE;
+static int verbose_indent_lvl=0;
+static bool progname_enable=TRUE;
+
+#define INDENTATOR_LENGTH 4
+
+static char indentator[]={' ', ' ', ' ', ' '};
+
+
+void verbose(const char *p, ...)
+{
+	va_list args;
+	
+	va_start(args, p);
+	
+	verbose_v(p, args);
+	
+	va_end(args);
+}
+		   
+
+void verbose_v(const char *p, va_list args)
+{
+	int i;
+	
+	if(verbose_mode){
+		for(i=0; i<verbose_indent_lvl; i++)
+			writef(stdout, indentator, INDENTATOR_LENGTH);
+		
+		vprintf(p, args);
+		fflush(stdout);
+	}
+}
+
+
+void verbose_enable(bool enable)
+{
+	verbose_mode=enable;
+}
+
+
+int verbose_indent(int depth)
+{
+	int old=verbose_indent_lvl;
+	
+	if(depth>=0)
+		verbose_indent_lvl=depth;
+	
+	return old;
+}
+		
+
+/* warn
+ */
+
+void warn_progname_enable(bool enable)
+{
+	progname_enable=enable;
+}
+
+
+static void put_prog_name()
+{
+	const char*progname;
+	
+	if(!progname_enable)
+		return;
+	
+	progname=prog_execname();
+	
+	if(progname==NULL)
+		return;
+	
+	fprintf(stderr, "%s: ", (char*)progname);
+}
+
+
+void warn(const char *p, ...)
+{
+	va_list args;
+	
+	va_start(args, p);
+	
+	warn_v(p, args);
+	
+	va_end(args);
+}
+
+
+void warn_v(const char *p, va_list args)
+{
+	put_prog_name();
+	vfprintf(stderr, p, args);
+	putc('\n', stderr);
+}
+
+
+void warn_obj(const char *obj, const char *p, ...)
+{
+	va_list args;
+	
+	va_start(args, p);
+	
+	warn_obj_v(obj, p, args);
+	
+	va_end(args);
+}
+
+
+void warn_obj_line(const char *obj, int line, const char *p, ...)
+{
+	va_list args;
+	
+	va_start(args, p);
+	
+	warn_obj_line_v(obj, line, p, args);
+	
+	va_end(args);
+}
+
+
+void warn_obj_v(const char *obj, const char *p, va_list args)
+{
+	put_prog_name();
+	if(obj!=NULL)
+		fprintf(stderr,"%s: ", obj);
+	vfprintf(stderr, p, args);
+	putc('\n', stderr);
+}
+
+
+void warn_obj_line_v(const char *obj, int line, const char *p, va_list args)
+{
+	put_prog_name();
+	if(obj!=NULL){
+		if(line>0)
+			fprintf(stderr, TR("%s:%d: "), obj, line);
+		else		
+			fprintf(stderr, "%s: ", obj);
+	}else{
+		if(line>0)
+			fprintf(stderr, TR("%d: "), line);
+	}
+	vfprintf(stderr, p, args);
+	putc('\n', stderr);
+}
+
+
+void warn_err()
+{
+	put_prog_name();
+	fprintf(stderr, "%s\n", strerror(errno));
+}
+
+
+void warn_err_obj(const char *obj)
+{
+	put_prog_name();
+	if(obj!=NULL)
+		fprintf(stderr, "%s: %s\n", obj, strerror(errno));
+	else
+		fprintf(stderr, "%s\n", strerror(errno));
+
+}
+
+
+void warn_err_obj_line(const char *obj, int line)
+{
+	put_prog_name();
+	if(obj!=NULL){
+		if(line>0)
+			fprintf(stderr, TR("%s:%d: %s\n"), obj, line, strerror(errno));
+		else
+			fprintf(stderr, "%s: %s\n", obj, strerror(errno));
+	}else{
+		if(line>0)
+			fprintf(stderr, TR("%d: %s\n"), line, strerror(errno));
+		else
+			fprintf(stderr, TR("%s\n"), strerror(errno));
+	}
+
+}
+
+
+/* die
+ */
+
+void die(const char *p, ...)
+{
+	va_list args;
+	
+	va_start(args, p);
+	
+	die_v(p, args);
+	
+	va_end(args);
+}
+
+
+void die_v(const char *p, va_list args)
+{
+	warn_v(p, args);
+	exit(EXIT_FAILURE);
+}
+
+
+void die_obj(const char *obj, const char *p, ...)
+{
+	va_list args;
+	
+	va_start(args, p);
+	die_obj_v(obj, p, args);
+	va_end(args);
+}
+
+
+void die_obj_line(const char *obj, int line, const char *p, ...)
+{
+	va_list args;
+	
+	va_start(args, p);
+	die_obj_line_v(obj, line, p, args);
+	va_end(args);
+}
+
+
+void die_obj_v(const char *obj, const char *p, va_list args)
+{
+	warn_obj_v(obj, p, args);
+	exit(EXIT_FAILURE);
+}
+
+
+void die_obj_line_v(const char *obj, int line, const char *p, va_list args)
+{
+	warn_obj_line_v(obj, line, p, args);
+	exit(EXIT_FAILURE);
+}
+
+
+void die_err()
+{
+	warn_err();
+	exit(EXIT_FAILURE);
+}
+
+
+void die_err_obj(const char *obj)
+{
+	warn_err_obj(obj);
+	exit(EXIT_FAILURE);
+}
+
+
+void die_err_obj_line(const char *obj, int line)
+{
+	warn_err_obj_line(obj, line);
+	exit(EXIT_FAILURE);
+}

mercurial