Mercurial > hg > nnchat
comparison th_util.c @ 0:728243125263
Import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 20 Mar 2008 00:15:03 +0000 |
parents | |
children | ecfa4e3597e3 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:728243125263 |
---|---|
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 #define TH_PROG_NAME "program" | |
18 #define TH_PROG_FULLNAME "A Program" | |
19 #define TH_PROG_VERSION "0.0.0" | |
20 #define TH_PROG_AUTHOR "By Matti 'ccr' Hämäläinen (C) Copyright 2008 TNSP" | |
21 #define TH_PROG_LICENSE "This software is licensed under GNU GPL version 2" | |
22 | |
23 BOOL th_isInitialized = FALSE; | |
24 int th_verbosityLevel = 2; | |
25 char *th_prog_name = NULL, | |
26 *th_prog_fullname = NULL, | |
27 *th_prog_version = NULL, | |
28 *th_prog_author = NULL, | |
29 *th_prog_license = NULL; | |
30 | |
31 | |
32 /* Initialize th_util-library and global variables | |
33 */ | |
34 void th_init(char *progName, char *progFullName, char *progVersion, | |
35 char *progAuthor, char *progLicense) | |
36 { | |
37 /* Free previous values */ | |
38 if (progName) | |
39 th_prog_name = progName; | |
40 else | |
41 th_prog_name = TH_PROG_NAME; | |
42 | |
43 if (progFullName) | |
44 th_prog_fullname = progFullName; | |
45 else | |
46 th_prog_fullname = TH_PROG_FULLNAME; | |
47 | |
48 if (progVersion) | |
49 th_prog_version = progVersion; | |
50 else | |
51 th_prog_version = TH_PROG_VERSION; | |
52 | |
53 if (progAuthor) | |
54 th_prog_author = progAuthor; | |
55 else | |
56 th_prog_author = TH_PROG_AUTHOR; | |
57 | |
58 if (progLicense) | |
59 th_prog_license = progLicense; | |
60 else | |
61 th_prog_license = TH_PROG_LICENSE; | |
62 | |
63 th_isInitialized = TRUE; | |
64 } | |
65 | |
66 | |
67 /* Print formatted error, warning and information messages | |
68 * TODO: Implement th_vfprintf() and friends? | |
69 */ | |
70 void THERR(const char *pcFormat, ...) | |
71 { | |
72 va_list ap; | |
73 assert(th_isInitialized); | |
74 | |
75 va_start(ap, pcFormat); | |
76 fprintf(stderr, "%s: ", th_prog_name); | |
77 vfprintf(stderr, pcFormat, ap); | |
78 va_end(ap); | |
79 } | |
80 | |
81 | |
82 void THMSG(int verbLevel, const char *pcFormat, ...) | |
83 { | |
84 va_list ap; | |
85 assert(th_isInitialized); | |
86 | |
87 /* Check if the current verbosity level is enough */ | |
88 if (th_verbosityLevel >= verbLevel) { | |
89 va_start(ap, pcFormat); | |
90 fprintf(stderr, "%s: ", th_prog_name); | |
91 vfprintf(stderr, pcFormat, ap); | |
92 va_end(ap); | |
93 } | |
94 } | |
95 | |
96 | |
97 void THPRINT(int verbLevel, const char *pcFormat, ...) | |
98 { | |
99 va_list ap; | |
100 assert(th_isInitialized); | |
101 | |
102 /* Check if the current verbosity level is enough */ | |
103 if (th_verbosityLevel >= verbLevel) { | |
104 va_start(ap, pcFormat); | |
105 vfprintf(stderr, pcFormat, ap); | |
106 va_end(ap); | |
107 } | |
108 } | |
109 | |
110 | |
111 /* | |
112 * Memory handling routines | |
113 * TODO: Write alternate implementations for calloc and realloc, | |
114 * to improve portability to platforms which don't implement them. | |
115 */ | |
116 void *th_malloc(size_t l) | |
117 { | |
118 return malloc(l); | |
119 } | |
120 | |
121 | |
122 void *th_calloc(size_t n, size_t l) | |
123 { | |
124 return calloc(n, l); | |
125 } | |
126 | |
127 | |
128 void *th_realloc(void *p, size_t l) | |
129 { | |
130 return realloc(p, l); | |
131 } | |
132 | |
133 | |
134 void th_free(void *p) | |
135 { | |
136 /* Check for NULL pointers for portability due to some libc | |
137 * implementations not handling free(NULL) too well. | |
138 */ | |
139 if (p) free(p); | |
140 } | |
141 | |
142 | |
143 #ifndef HAVE_MEMSET | |
144 void *th_memset(void *p, int c, size_t n) | |
145 { | |
146 unsigned char *dp = (unsigned char *) p; | |
147 | |
148 while (n--) | |
149 *(dp++) = c; | |
150 | |
151 return p; | |
152 } | |
153 #endif |