Mercurial > hg > th-libs
annotate th_util.h @ 483:85039ab7e6ab
Add simplistic support for DJGPP/DOS.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 19 Feb 2019 06:12:18 +0200 |
parents | e4ce60239d16 |
children | 41c1d786ff08 |
rev | line source |
---|---|
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * Generic utility-functions, macros and defaults |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Programmed and designed by Matti 'ccr' Hamalainen |
481 | 4 * (C) Copyright 2002-2019 Tecnic Software productions (TNSP) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 * |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 * Please read file 'COPYING' for information on license and distribution. |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 */ |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
45
diff
changeset
|
8 #ifndef TH_UTIL_H |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
45
diff
changeset
|
9 #define TH_UTIL_H |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
45
diff
changeset
|
11 #ifdef HAVE_CONFIG_H |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
45
diff
changeset
|
12 #include "config.h" |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 #endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
14 |
183
8baec5a454c1
Define TH_PLAT_{WINDOWS,UNIX} depending on the platform we are on.
Matti Hamalainen <ccr@tnsp.org>
parents:
163
diff
changeset
|
15 #if defined(__WIN64) || defined(_WIN64) || defined(__WIN32) || defined(_WIN32) |
8baec5a454c1
Define TH_PLAT_{WINDOWS,UNIX} depending on the platform we are on.
Matti Hamalainen <ccr@tnsp.org>
parents:
163
diff
changeset
|
16 # define TH_PLAT_WINDOWS 1 |
483
85039ab7e6ab
Add simplistic support for DJGPP/DOS.
Matti Hamalainen <ccr@tnsp.org>
parents:
481
diff
changeset
|
17 #elif defined(__DJGPP__) && __DJGPP__ >= 2 |
85039ab7e6ab
Add simplistic support for DJGPP/DOS.
Matti Hamalainen <ccr@tnsp.org>
parents:
481
diff
changeset
|
18 # define TH_PLAT_DOS 1 |
85039ab7e6ab
Add simplistic support for DJGPP/DOS.
Matti Hamalainen <ccr@tnsp.org>
parents:
481
diff
changeset
|
19 # undef __STRICT_ANSI__ |
183
8baec5a454c1
Define TH_PLAT_{WINDOWS,UNIX} depending on the platform we are on.
Matti Hamalainen <ccr@tnsp.org>
parents:
163
diff
changeset
|
20 #else |
8baec5a454c1
Define TH_PLAT_{WINDOWS,UNIX} depending on the platform we are on.
Matti Hamalainen <ccr@tnsp.org>
parents:
163
diff
changeset
|
21 # define TH_PLAT_UNIX 1 |
8baec5a454c1
Define TH_PLAT_{WINDOWS,UNIX} depending on the platform we are on.
Matti Hamalainen <ccr@tnsp.org>
parents:
163
diff
changeset
|
22 #endif |
8baec5a454c1
Define TH_PLAT_{WINDOWS,UNIX} depending on the platform we are on.
Matti Hamalainen <ccr@tnsp.org>
parents:
163
diff
changeset
|
23 |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
24 #include "th_types.h" |
45
e031a062b731
Separate program "banner" printing from th_args_help() to th_print_banner().
Matti Hamalainen <ccr@tnsp.org>
parents:
33
diff
changeset
|
25 #include <stdio.h> |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 #include <stdarg.h> |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
27 #include <stdlib.h> |
75 | 28 #include <unistd.h> |
16 | 29 #include <sys/types.h> |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
30 #ifndef HAVE_NO_ASSERT |
466
bdee04d21282
Preprocessor stuff indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
31 # include <assert.h> |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
32 #endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
33 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
34 #ifdef HAVE_STRING_H |
466
bdee04d21282
Preprocessor stuff indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
35 # include <string.h> |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
36 #else |
466
bdee04d21282
Preprocessor stuff indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
37 # ifdef HAVE_STRINGS_H |
bdee04d21282
Preprocessor stuff indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
38 # include <strings.h> |
bdee04d21282
Preprocessor stuff indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
39 # endif |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
40 #endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
41 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
42 #ifdef HAVE_MEMORY_H |
466
bdee04d21282
Preprocessor stuff indentation.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
43 # include <memory.h> |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
44 #endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
45 |
92 | 46 |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
45
diff
changeset
|
47 #ifdef __cplusplus |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
45
diff
changeset
|
48 extern "C" { |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
45
diff
changeset
|
49 #endif |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 |
4
67f4a4233372
Move defaults to header file.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
51 |
95 | 52 // Replacement for assert() |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
53 #ifdef HAVE_NO_ASSERT |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
54 # ifdef NDEBUG |
129 | 55 # define assert(NEXPR) // stub |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 # else |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 # define assert(NEXPR) do { if (!(NEXPR)) { fprintf(stderr, "[%s:%d] assert(" # NEXPR ") failed!\n", __FILE__, __LINE__); abort(); } } while (0) |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
58 # endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
59 #endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
60 |
96 | 61 |
62 /* Error codes | |
63 */ | |
97 | 64 enum |
65 { | |
96 | 66 // General error codes |
67 THERR_OK = 0, | |
68 THERR_PROGRESS, // Status OK, but operation in progress | |
69 | |
70 THERR_INTERNAL, | |
71 | |
72 THERR_FOPEN, | |
73 THERR_FREAD, | |
74 THERR_FWRITE, | |
75 THERR_FSEEK, | |
76 THERR_NOT_FOUND, // Resource/data not found | |
77 | |
78 THERR_INVALID_DATA, // Some data was invalid | |
79 THERR_MALLOC, // Memory allocation failure | |
80 THERR_ALREADY_INIT, // Resource has already been initialized | |
81 THERR_INIT_FAIL, // General initialization failure | |
82 THERR_INVALID_ARGS, | |
83 | |
84 THERR_NULLPTR, // NULL pointer specified in critical argument | |
85 THERR_NOT_SUPPORTED,// Operation not supported | |
86 THERR_OUT_OF_DATA, | |
87 THERR_EXTRA_DATA, | |
88 THERR_BOUNDS, | |
163 | 89 |
96 | 90 THERR_TIMED_OUT, |
163 | 91 THERR_BUSY, |
92 THERR_IO_ERROR, | |
96 | 93 |
94 // Network errors | |
95 THERR_AUTH_FAILED, | |
96 }; | |
97 | |
98 #define TH_SYSTEM_ERRORS 100000 | |
99 | |
378 | 100 |
97 | 101 /* Log levels |
102 */ | |
103 enum | |
104 { | |
105 THLOG_NONE = 0, | |
106 THLOG_ERROR, | |
107 THLOG_WARNING, | |
108 THLOG_INFO, | |
109 THLOG_DEBUG, | |
110 }; | |
111 | |
96 | 112 |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
113 /* Global variables |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
114 */ |
469
fe5b803ae449
Rename the global variable th_verbosityLevel to th_verbosity.
Matti Hamalainen <ccr@tnsp.org>
parents:
468
diff
changeset
|
115 extern int th_verbosity; |
19 | 116 extern char *th_prog_name, |
60 | 117 *th_prog_desc, |
19 | 118 *th_prog_version, |
119 *th_prog_author, | |
120 *th_prog_license; | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
121 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
122 /* Functions |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
123 */ |
60 | 124 void th_init(char *name, char *desc, char *version, |
125 char *author, char *license); | |
126 void th_print_banner(FILE *outFile, const char *binName, const char *usage); | |
45
e031a062b731
Separate program "banner" printing from th_args_help() to th_print_banner().
Matti Hamalainen <ccr@tnsp.org>
parents:
33
diff
changeset
|
127 |
143 | 128 int th_term_width(); |
129 int th_term_height(); | |
130 | |
101
a8f732601fdc
Rename th_get_errno() to th_get_error(), it's more appropriate since it does
Matti Hamalainen <ccr@tnsp.org>
parents:
99
diff
changeset
|
131 int th_get_error(); |
99 | 132 int th_errno_to_error(int error); |
96 | 133 const char *th_error_str(int error); |
134 | |
194
87dac812cac4
Define some argument identifiers in function prototypes and rename some arguments.
Matti Hamalainen <ccr@tnsp.org>
parents:
192
diff
changeset
|
135 void THERR(const char *fmt, ...); |
87dac812cac4
Define some argument identifiers in function prototypes and rename some arguments.
Matti Hamalainen <ccr@tnsp.org>
parents:
192
diff
changeset
|
136 void THMSG(int level, const char *fmt, ...); |
87dac812cac4
Define some argument identifiers in function prototypes and rename some arguments.
Matti Hamalainen <ccr@tnsp.org>
parents:
192
diff
changeset
|
137 void THPRINT(int level, const char *fmt, ...); |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
138 |
194
87dac812cac4
Define some argument identifiers in function prototypes and rename some arguments.
Matti Hamalainen <ccr@tnsp.org>
parents:
192
diff
changeset
|
139 void THERR_V(const char *fmt, va_list ap); |
87dac812cac4
Define some argument identifiers in function prototypes and rename some arguments.
Matti Hamalainen <ccr@tnsp.org>
parents:
192
diff
changeset
|
140 void THMSG_V(int level, const char *fmt, va_list ap); |
87dac812cac4
Define some argument identifiers in function prototypes and rename some arguments.
Matti Hamalainen <ccr@tnsp.org>
parents:
192
diff
changeset
|
141 void THPRINT_V(int level, const char *fmt, va_list ap); |
11 | 142 |
462 | 143 void *th_malloc(size_t len); |
144 void *th_malloc0(size_t len); | |
145 void *th_calloc(size_t n, size_t len); | |
146 void *th_realloc(void *ptr, size_t len); | |
194
87dac812cac4
Define some argument identifiers in function prototypes and rename some arguments.
Matti Hamalainen <ccr@tnsp.org>
parents:
192
diff
changeset
|
147 void th_free(void *ptr); |
197
88986d0b56ef
Rename th_free_r() to th_free_r_real() and #define a macro wrapper for
Matti Hamalainen <ccr@tnsp.org>
parents:
194
diff
changeset
|
148 void th_free_r_real(void **ptr); |
88986d0b56ef
Rename th_free_r() to th_free_r_real() and #define a macro wrapper for
Matti Hamalainen <ccr@tnsp.org>
parents:
194
diff
changeset
|
149 |
88986d0b56ef
Rename th_free_r() to th_free_r_real() and #define a macro wrapper for
Matti Hamalainen <ccr@tnsp.org>
parents:
194
diff
changeset
|
150 #define th_free_r(ptr) th_free_r_real((void **) ptr) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
151 |
16 | 152 |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
153 #ifdef __cplusplus |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
154 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
155 #endif |
129 | 156 #endif // TH_UTIL_H |