Mercurial > hg > th-libs
comparison th_util.c @ 0:bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
here, because it's cluttered and commit messages are mostly crap.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 26 Mar 2008 04:41:58 +0200 |
parents | |
children | 67f4a4233372 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:bd61a80a6c54 |
---|---|
1 /* | |
2 * Generic utility-functions, macros and defaults | |
3 * Programmed and designed by Matti 'ccr' Hamalainen | |
4 * (C) Copyright 2002-2008 Tecnic Software productions (TNSP) | |
5 * | |
6 * Please read file 'COPYING' for information on license and distribution. | |
7 */ | |
8 #ifdef HAVE_CONFIG_H | |
9 #include "config.h" | |
10 #endif | |
11 #include "th_util.h" | |
12 #include <stdio.h> | |
13 | |
14 /* | |
15 * Default settings | |
16 */ | |
17 #ifdef TH_NO_DEFAULTS | |
18 #define TH_PROG_AUTHOR "" | |
19 #define TH_PROG_LICENSE "" | |
20 #else | |
21 #define TH_PROG_AUTHOR "By Matti 'ccr' Hämäläinen (C) Copyright 2008 TNSP" | |
22 #define TH_PROG_LICENSE "This software is licensed under GNU GPL version 2" | |
23 #endif | |
24 | |
25 BOOL th_isInitialized = FALSE; | |
26 int th_verbosityLevel = 2; | |
27 char *th_prog_name = NULL, | |
28 *th_prog_fullname = NULL, | |
29 *th_prog_version = NULL, | |
30 *th_prog_author = NULL, | |
31 *th_prog_license = NULL; | |
32 | |
33 | |
34 /* Initialize th_util-library and global variables | |
35 */ | |
36 void th_init(char *progName, char *progFullName, char *progVersion, | |
37 char *progAuthor, char *progLicense) | |
38 { | |
39 th_prog_name = progName; | |
40 th_prog_fullname = progFullName; | |
41 th_prog_version = progVersion; | |
42 | |
43 if (progAuthor) | |
44 th_prog_author = progAuthor; | |
45 else | |
46 th_prog_author = TH_PROG_AUTHOR; | |
47 | |
48 if (progLicense) | |
49 th_prog_license = progLicense; | |
50 else | |
51 th_prog_license = TH_PROG_LICENSE; | |
52 | |
53 th_isInitialized = TRUE; | |
54 } | |
55 | |
56 | |
57 /* Print formatted error, warning and information messages | |
58 * TODO: Implement th_vfprintf() and friends? | |
59 */ | |
60 void THERR(const char *pcFormat, ...) | |
61 { | |
62 va_list ap; | |
63 assert(th_isInitialized); | |
64 | |
65 va_start(ap, pcFormat); | |
66 fprintf(stderr, "%s: ", th_prog_name); | |
67 vfprintf(stderr, pcFormat, ap); | |
68 va_end(ap); | |
69 } | |
70 | |
71 | |
72 void THMSG(int verbLevel, const char *pcFormat, ...) | |
73 { | |
74 va_list ap; | |
75 assert(th_isInitialized); | |
76 | |
77 /* Check if the current verbosity level is enough */ | |
78 if (th_verbosityLevel >= verbLevel) { | |
79 va_start(ap, pcFormat); | |
80 fprintf(stderr, "%s: ", th_prog_name); | |
81 vfprintf(stderr, pcFormat, ap); | |
82 va_end(ap); | |
83 } | |
84 } | |
85 | |
86 | |
87 void THPRINT(int verbLevel, const char *pcFormat, ...) | |
88 { | |
89 va_list ap; | |
90 assert(th_isInitialized); | |
91 | |
92 /* Check if the current verbosity level is enough */ | |
93 if (th_verbosityLevel >= verbLevel) { | |
94 va_start(ap, pcFormat); | |
95 vfprintf(stderr, pcFormat, ap); | |
96 va_end(ap); | |
97 } | |
98 } | |
99 | |
100 | |
101 /* Memory handling routines | |
102 */ | |
103 void *th_malloc(size_t l) | |
104 { | |
105 return malloc(l); | |
106 } | |
107 | |
108 | |
109 void *th_calloc(size_t n, size_t l) | |
110 { | |
111 return calloc(n, l); | |
112 } | |
113 | |
114 | |
115 void *th_realloc(void *p, size_t l) | |
116 { | |
117 return realloc(p, l); | |
118 } | |
119 | |
120 | |
121 void th_free(void *p) | |
122 { | |
123 /* Check for NULL pointers for portability due to some libc | |
124 * implementations not handling free(NULL) too well. | |
125 */ | |
126 if (p) free(p); | |
127 } | |
128 | |
129 | |
130 #ifndef HAVE_MEMSET | |
131 void *th_memset(void *p, int c, size_t n) | |
132 { | |
133 unsigned char *dp = (unsigned char *) p; | |
134 | |
135 while (n--) | |
136 *(dp++) = c; | |
137 | |
138 return p; | |
139 } | |
140 #endif |