diff th_util.c @ 0:728243125263

Import.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 20 Mar 2008 00:15:03 +0000
parents
children ecfa4e3597e3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/th_util.c	Thu Mar 20 00:15:03 2008 +0000
@@ -0,0 +1,153 @@
+/*
+ * Generic utility-functions, macros and defaults
+ * Programmed and designed by Matti 'ccr' Hamalainen
+ * (C) Copyright 2002-2008 Tecnic Software productions (TNSP)
+ *
+ * Please read file 'COPYING' for information on license and distribution.
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "th_util.h"
+#include <stdio.h>
+
+/*
+ * Default settings
+ */
+#define	TH_PROG_NAME		"program"
+#define	TH_PROG_FULLNAME	"A Program"
+#define TH_PROG_VERSION		"0.0.0"
+#define TH_PROG_AUTHOR		"By Matti 'ccr' Hämäläinen (C) Copyright 2008 TNSP"
+#define TH_PROG_LICENSE		"This software is licensed under GNU GPL version 2"
+
+BOOL	th_isInitialized = FALSE;
+int	th_verbosityLevel = 2;
+char	*th_prog_name = NULL,
+	*th_prog_fullname = NULL,
+	*th_prog_version = NULL,
+	*th_prog_author = NULL,
+	*th_prog_license = NULL;
+
+
+/* Initialize th_util-library and global variables
+ */
+void th_init(char *progName, char *progFullName, char *progVersion,
+	char *progAuthor, char *progLicense)
+{
+	/* Free previous values */
+	if (progName)
+		th_prog_name = progName;
+	else
+		th_prog_name = TH_PROG_NAME;
+
+	if (progFullName)
+		th_prog_fullname = progFullName;
+	else
+		th_prog_fullname = TH_PROG_FULLNAME;
+
+	if (progVersion)
+		th_prog_version = progVersion;
+	else
+		th_prog_version = TH_PROG_VERSION;
+
+	if (progAuthor)
+		th_prog_author = progAuthor;
+	else
+		th_prog_author = TH_PROG_AUTHOR;
+
+	if (progLicense)
+		th_prog_license = progLicense;
+	else
+		th_prog_license = TH_PROG_LICENSE;
+
+	th_isInitialized = TRUE;
+}
+
+
+/* Print formatted error, warning and information messages
+ * TODO: Implement th_vfprintf() and friends?
+ */
+void THERR(const char *pcFormat, ...)
+{
+	va_list ap;
+	assert(th_isInitialized);
+
+	va_start(ap, pcFormat);
+	fprintf(stderr, "%s: ", th_prog_name);
+	vfprintf(stderr, pcFormat, ap);
+	va_end(ap);
+}
+
+
+void THMSG(int verbLevel, const char *pcFormat, ...)
+{
+	va_list ap;
+	assert(th_isInitialized);
+
+	/* Check if the current verbosity level is enough */
+	if (th_verbosityLevel >= verbLevel) {
+		va_start(ap, pcFormat);
+		fprintf(stderr, "%s: ", th_prog_name);
+		vfprintf(stderr, pcFormat, ap);
+		va_end(ap);
+	}
+}
+
+
+void THPRINT(int verbLevel, const char *pcFormat, ...)
+{
+	va_list ap;
+	assert(th_isInitialized);
+
+	/* Check if the current verbosity level is enough */
+	if (th_verbosityLevel >= verbLevel) {
+		va_start(ap, pcFormat);
+		vfprintf(stderr, pcFormat, ap);
+		va_end(ap);
+	}
+}
+
+
+/*
+ * Memory handling routines
+ * TODO: Write alternate implementations for calloc and realloc,
+ * to improve portability to platforms which don't implement them.
+ */
+void *th_malloc(size_t l)
+{
+	return malloc(l);
+}
+
+
+void *th_calloc(size_t n, size_t l)
+{
+	return calloc(n, l);
+}
+
+
+void *th_realloc(void *p, size_t l)
+{
+	return realloc(p, l);
+}
+
+
+void th_free(void *p)
+{
+	/* Check for NULL pointers for portability due to some libc
+	 * implementations not handling free(NULL) too well.
+	 */
+	if (p) free(p);
+}
+
+
+#ifndef HAVE_MEMSET
+void *th_memset(void *p, int c, size_t n)
+{
+	unsigned char *dp = (unsigned char *) p;
+	
+	while (n--)
+		*(dp++) = c;
+
+	return p;
+}
+#endif