Home | History | Annotate | Download | only in include
      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  */
     41 typedef 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  */
     66 typedef unsigned int   asr_uint32_t;
     67 
     68 /**
     69  * Portable 32-bit signed integer.
     70  */
     71 typedef int            asr_int32_t;
     72 
     73 /**
     74  * Portable 16-bit unsigned integer.
     75  */
     76 typedef unsigned short asr_uint16_t;
     77 
     78 /**
     79  * Portable 16-bit signed integer.
     80  */
     81 typedef short          asr_int16_t;
     82 
     83 /**
     84  * Portable 8-bit unsigned integer.
     85  */
     86 typedef unsigned char asr_uint8_t;
     87 
     88 /**
     89  * Portable 8-bit signed integer.
     90  */
     91 typedef signed char   asr_int8_t;
     92 
     93 #else
     94 
     95 
     96 /**
     97  * Portable 32-bit unsigned integer.
     98  */
     99 typedef unsigned int   asr_uint32_t;
    100 
    101 /**
    102  * Portable 32-bit signed integer.
    103  */
    104 typedef int            asr_int32_t;
    105 
    106 /**
    107  * Portable 16-bit unsigned integer.
    108  */
    109 typedef unsigned short asr_uint16_t;
    110 
    111 /**
    112  * Portable 16-bit signed integer.
    113  */
    114 typedef short          asr_int16_t;
    115 
    116 /**
    117  * Portable 8-bit unsigned integer.
    118  */
    119 typedef unsigned char asr_uint8_t;
    120 
    121 /**
    122  * Portable 8-bit signed integer.
    123  */
    124 typedef 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)
    146 typedef 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  */
    212 typedef char LCHAR;
    213 
    214 /**
    215  * Locale-independant integer-representation of a character. Used by fgetc() and others.
    216  */
    217 typedef 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>
    375 typedef wchar_t LCHAR;
    376 /**
    377 * Locale-independant integer-representation of a character. Used by fgetc() and others.
    378 */
    379 typedef 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 /**
    462  * Maximum number of digits used to represent an unsigned int as a string in
    463  * base 10.  The +1 is for taking into account the fact that the fractional
    464  * part is removed and that we really need to take the ceiling.
    465  */
    466 #define MAX_UINT_DIGITS ((size_t) ((CHAR_BIT * sizeof(int) * LOG_10_2) + 1))
    467 
    468 /**
    469  * Maximum number of digits used to represent an int as a string in base 10.
    470  * +1 for sign character [+, -]
    471  */
    472 #define MAX_INT_DIGITS ((size_t) (MAX_UINT_DIGITS + 1))
    473 
    474 /**
    475  * Indicates if text contains a number (and nothing else).
    476  *
    477  * @param text String to check
    478  * @return ESR_TRUE if text is a number, ESR_FALSE otherwise.
    479  */
    480 PORTABLE_API ESR_BOOL isNumber(const LCHAR* text);
    481 
    482 /**
    483  * @}
    484  */
    485 
    486 
    487 #include "ESR_ReturnCode.h"
    488 
    489 
    490 #include "pstdio.h"
    491 
    492 #endif
    493 
    494 
    495