1/*---------------------------------------------------------------------------*
2 *  ptypes.h  *
3 *                                                                           *
4 *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5 *                                                                           *
6 *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7 *  you may not use this file except in compliance with the License.         *
8 *                                                                           *
9 *  You may obtain a copy of the License at                                  *
10 *      http://www.apache.org/licenses/LICENSE-2.0                           *
11 *                                                                           *
12 *  Unless required by applicable law or agreed to in writing, software      *
13 *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15 *  See the License for the specific language governing permissions and      *
16 *  limitations under the License.                                           *
17 *                                                                           *
18 *---------------------------------------------------------------------------*/
19
20#ifndef __PTYPES_H
21#define __PTYPES_H
22
23
24
25#include <string.h>
26#include <ctype.h>
27#include "limits.h"
28#include "PortPrefix.h"
29
30#ifndef MAX
31#define MAX(A,B) ((A)>(B)?(A):(B))
32#endif
33#ifndef MIN
34#define MIN(A,B) ((A)<(B)?(A):(B))
35#endif
36
37
38/**
39 * Boolean definition.
40 */
41typedef enum ESR_BOOL
42{
43  ESR_FALSE = 0,
44  ESR_TRUE = 1
45} ESR_BOOL;
46
47/**
48 * @addtogroup ESR_PortableModule ESR_Portable API functions
49 *
50 * @{
51 */
52
53#ifdef _WIN32
54
55#pragma warning (disable: 4100 4127)
56#pragma warning (error: 4133 4020)
57
58#ifndef WIN32_LEAN_AND_MEAN
59#define WIN32_LEAN_AND_MEAN
60#endif
61#include <windows.h>
62
63/**
64 * Portable 32-bit unsigned integer.
65 */
66typedef unsigned int   asr_uint32_t;
67
68/**
69 * Portable 32-bit signed integer.
70 */
71typedef int            asr_int32_t;
72
73/**
74 * Portable 16-bit unsigned integer.
75 */
76typedef unsigned short asr_uint16_t;
77
78/**
79 * Portable 16-bit signed integer.
80 */
81typedef short          asr_int16_t;
82
83/**
84 * Portable 8-bit unsigned integer.
85 */
86typedef unsigned char asr_uint8_t;
87
88/**
89 * Portable 8-bit signed integer.
90 */
91typedef signed char   asr_int8_t;
92
93#else
94
95
96/**
97 * Portable 32-bit unsigned integer.
98 */
99typedef unsigned int   asr_uint32_t;
100
101/**
102 * Portable 32-bit signed integer.
103 */
104typedef int            asr_int32_t;
105
106/**
107 * Portable 16-bit unsigned integer.
108 */
109typedef unsigned short asr_uint16_t;
110
111/**
112 * Portable 16-bit signed integer.
113 */
114typedef short          asr_int16_t;
115
116/**
117 * Portable 8-bit unsigned integer.
118 */
119typedef unsigned char asr_uint8_t;
120
121/**
122 * Portable 8-bit signed integer.
123 */
124typedef signed char   asr_int8_t;
125
126///**
127// * Boolean definition.
128// */
129//#ifdef __vxworks
130///* VxWorks defines BOOL as: typedef int BOOL in vxTypesOld.h */
131//#include <vxWorks.h>
132//#define FALSE 0
133//#define TRUE  1
134//#endif
135
136#ifdef _solaris_
137#include <sys/int_types.h>
138#elif defined(_decunix_)
139#include <inttypes.h>
140#elif defined(POSIX)
141
142#include <time.h>
143#include <errno.h>
144
145#if (CPU != SIMNT)
146typedef void * HANDLE;
147#endif /*  (CPU != SIMNT) */
148
149#if defined(__vxworks)  /* VxWorks */
150#include <sys/times.h>
151#include <types.h>
152/* VxWorks does not support recursive mutex in POSIX.4 */
153#define OS_NO_RECURSIVE_MUTEX_SUPPORT
154#elif defined(_QNX_) /* QNX */
155#include <sys/time.h>
156#include <inttypes.h>
157#elif (OS == OS_UNIX)
158#include <string.h>
159#include <pthread.h>
160#else
161#error "New OS support here"
162#endif
163
164#ifndef _POSIX_SOURCE
165#define _POSIX_SOURCE
166#endif
167
168/* Both POSIX.1 and POSIX.4 (POSIX1003.1c) are supported */
169#ifndef _POSIX_C_SOURCE
170#define _POSIX_C_SOURCE 199309
171#endif
172
173#include <unistd.h>
174/*
175#ifndef _POSIX_VERSION
176#error "POSIX is not supported!")
177#elif _POSIX_VERSION == 199009
178#pragma message("POSIX.1 is supported only")
179#elif _POSIX_VERSION == 199309
180#pragma message("POSIX.1 and POSIX.4 are supported")
181#elif _POSIX_VERSION > 199309
182#pragma message("Version is newer than POSIX.4")
183#endif // _POSIX_VERSION
184*/
185#else
186/* Linux, maybe others too */
187#endif
188#endif
189
190/**
191 * Minimum value of UINT16_T.
192 */
193#define UINT16_TMIN 0
194
195/**
196 * Maximum value of UINT16_T.
197 */
198#define UINT16_TMAX 65535
199
200/*
201 * These should be platform-dependent.  But for the moment, we will assume
202 * narrow character.
203 */
204#ifndef USE_NARROW_CHAR
205#define USE_NARROW_CHAR
206#endif
207
208#ifdef USE_NARROW_CHAR
209/**
210 * Locale-independant character.
211 */
212typedef char LCHAR;
213
214/**
215 * Locale-independant integer-representation of a character. Used by fgetc() and others.
216 */
217typedef int LINT;
218
219/**
220 * LCHAR version of string-constant
221 */
222#define L(x) x
223
224/**
225 * LCHAR version of strcat()
226 */
227#define LSTRCAT strcat
228
229/**
230 * LCHAR version of strchr()
231 */
232#define LSTRCHR strchr
233
234/**
235 * LCHAR version of strrchr()
236 */
237#define LSTRRCHR strrchr
238
239/**
240 * LCHAR version of strcmp()
241 */
242#define LSTRCMP strcmp
243
244/**
245 * LCHAR version of strncmp()
246 */
247#define LSTRNCMP strncmp
248
249/**
250 * LCHAR version of strcpy()
251 */
252#define LSTRCPY strcpy
253
254/**
255 * LCHAR version of strftime()
256 */
257#define LSTRFTIME strftime
258
259/**
260 * LCHAR version of strlen()
261 */
262#define LSTRLEN strlen
263
264/**
265 * LCHAR version of strncpy()
266 */
267#define LSTRNCPY strncpy
268
269/**
270 * LCHAR version of memmove()
271 */
272#define LMEMMOVE memmove
273
274/**
275 * LCHAR version of strstr()
276 */
277#define LSTRSTR strstr
278
279/**
280 * LCHAR version of strlwr() which converts a string to lowercase.
281 */
282#define LSTRLWR lstrlwr
283
284/**
285 * LCHAR version of strupr() which converts a string to lowercase.
286 */
287#define LSTRUPR lstrupr
288
289/**
290 * LCHAR version of strtod()
291 */
292#define LSTRTOD strtod
293
294/**
295 * LCHAR version of strtol()
296 */
297#define LSTRTOL strtol
298
299/**
300 * LCHAR version of strtoul()
301 */
302#define LSTRTOUL strtoul
303
304/**
305 * LCHAR version of isspace()
306 */
307#define LISSPACE(c) isspace((unsigned char) c)
308
309/**
310 * LCHAR version of strcspn()
311 */
312#define LSTRCSPN strcspn
313
314/**
315 * LCHAR version of isalpha()
316 */
317#define LISALPHA isalpha
318
319/**
320 * LCHAR version of isalnum()
321 */
322#define LISALNUM isalnum
323
324/**
325 * LCHAR version of isdigit()
326 */
327#define LISDIGIT isdigit
328
329/**
330 * LCHAR version of strtok()
331 */
332#define LSTRTOK strtok
333
334/**
335 * LCHAR version of getenv()
336 */
337#define LGETENV getenv
338
339/**
340 * Converts LCHAR character to uppercase.
341 */
342#define LTOUPPER toupper
343
344/**
345 * Converts LCHAR character to lowercase.
346 */
347#define LTOLOWER tolower
348
349/**
350 * Portable printf().
351 */
352#define LPRINTF   printf
353/**
354 * Portable fprintf().
355 */
356#define LFPRINTF fprintf
357/**
358 * Portable sprintf().
359 */
360#define LSPRINTF sprintf
361
362/**
363 * Portable sprintf().
364 */
365#define psprintf sprintf
366
367/**
368 * Portable svprintf().
369 */
370#define pvsprintf vsprintf
371
372#else
373
374#include <wchar.h>
375typedef wchar_t LCHAR;
376/**
377* Locale-independant integer-representation of a character. Used by fgetc() and others.
378*/
379typedef wint_t LINT;
380#define L(x) L ## x
381#define LSTRCAT wcscat
382#define LSTRCHR wcschr
383#define LSTRRCHR wcsrchr
384#define LSTRCMP wcscmp
385#define LSTRNCMP wcsncmp
386#define LSTRCPY wcscpy
387#define LSTRFTIME wcsftime
388
389#define LPRINTF   wprintf
390#define LFPRINTF fwprintf
391#define LSPRINTF swprintf
392
393#ifdef _WIN32
394
395/**
396* LCHAR version of getenv()
397*/
398#define LGETENV wgetenv
399
400/**
401* LCHAR version of strlwr() which converts a string to lowercase.
402*/
403#define LSTRLWR _wcslwr
404
405/**
406* LCHAR version of strtok()
407*/
408#define LSTRTOK wcstok
409
410/**
411* LCHAR version of strupr() which converts a string to lowercase.
412*/
413#define LSTRUPR _wcsupr
414#else
415#define LSTRCASECMP wcscasecmp
416#define LSTRLWR #error LSTRLWR not defined.
417#define LSTRUPR #error LSTRUPR not defined.
418#endif /* _WIN32 */
419
420#define LSTRLEN wcslen
421#define LSTRNCPY wcsncpy
422#define LMEMMOVE wmemmove
423#define LSTRSTR wcsstr
424#define LSTRTOD wcstod
425#define LSTRTOL wcstol
426#define LSTRTOUL wcstoul
427#define LISSPACE iswspace
428#define LSTRCSPN wcscspn
429#define LISALPHA iswalpha
430#define LISALNUM iswalnum
431#define LISDIGIT iswdigit
432
433/**
434* Converts LCHAR character to uppercase.
435*/
436#define LTOUPPER towupper
437
438/**
439* Converts LCHAR character to lowercase.
440*/
441#define LTOLOWER towlower
442
443/**
444* Portable sprintf().
445*/
446#define psprintf sprintf
447
448/**
449* Portable svprintf().
450*/
451#define pvsprintf vsprintf
452
453#endif /* USE_NARROW_CHAR */
454
455/**
456 * Log of 2 in base 10.
457 */
458#define LOG_10_2 (0.30102999566398)
459
460/**
461 * Maximum number of characters used to represent a pointer as a string in
462 * hex.  The +2 is for 0x that would preceed the address.
463 */
464#define MAX_POINTER_CHARS ((size_t) ((CHAR_BIT * sizeof(void*) * 2))+2)
465
466/**
467 * Maximum number of digits used to represent an unsigned int as a string in
468 * base 10.  The +1 is for taking into account the fact that the fractional
469 * part is removed and that we really need to take the ceiling.
470 */
471#define MAX_UINT_DIGITS ((size_t) ((CHAR_BIT * sizeof(int) * LOG_10_2) + 1))
472
473/**
474 * Maximum number of digits used to represent an int as a string in base 10.
475 * +1 for sign character [+, -]
476 */
477#define MAX_INT_DIGITS ((size_t) (MAX_UINT_DIGITS + 1))
478
479/**
480 * Indicates if text contains a number (and nothing else).
481 *
482 * @param text String to check
483 * @return ESR_TRUE if text is a number, ESR_FALSE otherwise.
484 */
485PORTABLE_API ESR_BOOL isNumber(const LCHAR* text);
486
487/**
488 * @}
489 */
490
491
492#include "ESR_ReturnCode.h"
493
494
495#include "pstdio.h"
496
497#endif
498
499
500