blob: a761b80df9f9817c84fa2ee34aa6fdc46b698f6f [file] [log] [blame]
/*---------------------------------------------------------------------------*
* ptypes.h *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the 'License'); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an 'AS IS' BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*---------------------------------------------------------------------------*/
#ifndef __PTYPES_H
#define __PTYPES_H
#include <string.h>
#include <ctype.h>
#include "limits.h"
#include "PortPrefix.h"
#ifndef MAX
#define MAX(A,B) ((A)>(B)?(A):(B))
#endif
#ifndef MIN
#define MIN(A,B) ((A)<(B)?(A):(B))
#endif
/**
* Boolean definition.
*/
typedef enum ESR_BOOL
{
ESR_FALSE = 0,
ESR_TRUE = 1
} ESR_BOOL;
/**
* @addtogroup ESR_PortableModule ESR_Portable API functions
*
* @{
*/
#ifdef _WIN32
#pragma warning (disable: 4100 4127)
#pragma warning (error: 4133 4020)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
/**
* Portable 32-bit unsigned integer.
*/
typedef unsigned int asr_uint32_t;
/**
* Portable 32-bit signed integer.
*/
typedef int asr_int32_t;
/**
* Portable 16-bit unsigned integer.
*/
typedef unsigned short asr_uint16_t;
/**
* Portable 16-bit signed integer.
*/
typedef short asr_int16_t;
/**
* Portable 8-bit unsigned integer.
*/
typedef unsigned char asr_uint8_t;
/**
* Portable 8-bit signed integer.
*/
typedef signed char asr_int8_t;
#else
/**
* Portable 32-bit unsigned integer.
*/
typedef unsigned int asr_uint32_t;
/**
* Portable 32-bit signed integer.
*/
typedef int asr_int32_t;
/**
* Portable 16-bit unsigned integer.
*/
typedef unsigned short asr_uint16_t;
/**
* Portable 16-bit signed integer.
*/
typedef short asr_int16_t;
/**
* Portable 8-bit unsigned integer.
*/
typedef unsigned char asr_uint8_t;
/**
* Portable 8-bit signed integer.
*/
typedef signed char asr_int8_t;
///**
// * Boolean definition.
// */
//#ifdef __vxworks
///* VxWorks defines BOOL as: typedef int BOOL in vxTypesOld.h */
//#include <vxWorks.h>
//#define FALSE 0
//#define TRUE 1
//#endif
#ifdef _solaris_
#include <sys/int_types.h>
#elif defined(_decunix_)
#include <inttypes.h>
#elif defined(POSIX)
#include <time.h>
#include <errno.h>
#if (CPU != SIMNT)
typedef void * HANDLE;
#endif /* (CPU != SIMNT) */
#if defined(__vxworks) /* VxWorks */
#include <sys/times.h>
#include <types.h>
/* VxWorks does not support recursive mutex in POSIX.4 */
#define OS_NO_RECURSIVE_MUTEX_SUPPORT
#elif defined(_QNX_) /* QNX */
#include <sys/time.h>
#include <inttypes.h>
#elif (OS == OS_UNIX)
#include <string.h>
#include <pthread.h>
#else
#error "New OS support here"
#endif
#ifndef _POSIX_SOURCE
#define _POSIX_SOURCE
#endif
/* Both POSIX.1 and POSIX.4 (POSIX1003.1c) are supported */
#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 199309
#endif
#include <unistd.h>
/*
#ifndef _POSIX_VERSION
#error "POSIX is not supported!")
#elif _POSIX_VERSION == 199009
#pragma message("POSIX.1 is supported only")
#elif _POSIX_VERSION == 199309
#pragma message("POSIX.1 and POSIX.4 are supported")
#elif _POSIX_VERSION > 199309
#pragma message("Version is newer than POSIX.4")
#endif // _POSIX_VERSION
*/
#else
/* Linux, maybe others too */
#endif
#endif
/**
* Minimum value of UINT16_T.
*/
#define UINT16_TMIN 0
/**
* Maximum value of UINT16_T.
*/
#define UINT16_TMAX 65535
/*
* These should be platform-dependent. But for the moment, we will assume
* narrow character.
*/
#ifndef USE_NARROW_CHAR
#define USE_NARROW_CHAR
#endif
#ifdef USE_NARROW_CHAR
/**
* Locale-independant character.
*/
typedef char LCHAR;
/**
* Locale-independant integer-representation of a character. Used by fgetc() and others.
*/
typedef int LINT;
/**
* LCHAR version of string-constant
*/
#define L(x) x
/**
* LCHAR version of strcat()
*/
#define LSTRCAT strcat
/**
* LCHAR version of strchr()
*/
#define LSTRCHR strchr
/**
* LCHAR version of strrchr()
*/
#define LSTRRCHR strrchr
/**
* LCHAR version of strcmp()
*/
#define LSTRCMP strcmp
/**
* LCHAR version of strncmp()
*/
#define LSTRNCMP strncmp
/**
* LCHAR version of strcpy()
*/
#define LSTRCPY strcpy
/**
* LCHAR version of strftime()
*/
#define LSTRFTIME strftime
/**
* LCHAR version of strlen()
*/
#define LSTRLEN strlen
/**
* LCHAR version of strncpy()
*/
#define LSTRNCPY strncpy
/**
* LCHAR version of memmove()
*/
#define LMEMMOVE memmove
/**
* LCHAR version of strstr()
*/
#define LSTRSTR strstr
/**
* LCHAR version of strlwr() which converts a string to lowercase.
*/
#define LSTRLWR lstrlwr
/**
* LCHAR version of strupr() which converts a string to lowercase.
*/
#define LSTRUPR lstrupr
/**
* LCHAR version of strtod()
*/
#define LSTRTOD strtod
/**
* LCHAR version of strtol()
*/
#define LSTRTOL strtol
/**
* LCHAR version of strtoul()
*/
#define LSTRTOUL strtoul
/**
* LCHAR version of isspace()
*/
#define LISSPACE(c) isspace((unsigned char) c)
/**
* LCHAR version of strcspn()
*/
#define LSTRCSPN strcspn
/**
* LCHAR version of isalpha()
*/
#define LISALPHA isalpha
/**
* LCHAR version of isalnum()
*/
#define LISALNUM isalnum
/**
* LCHAR version of isdigit()
*/
#define LISDIGIT isdigit
/**
* LCHAR version of strtok()
*/
#define LSTRTOK strtok
/**
* LCHAR version of getenv()
*/
#define LGETENV getenv
/**
* Converts LCHAR character to uppercase.
*/
#define LTOUPPER toupper
/**
* Converts LCHAR character to lowercase.
*/
#define LTOLOWER tolower
/**
* Portable printf().
*/
#define LPRINTF printf
/**
* Portable fprintf().
*/
#define LFPRINTF fprintf
/**
* Portable sprintf().
*/
#define LSPRINTF sprintf
/**
* Portable sprintf().
*/
#define psprintf sprintf
/**
* Portable svprintf().
*/
#define pvsprintf vsprintf
#else
#include <wchar.h>
typedef wchar_t LCHAR;
/**
* Locale-independant integer-representation of a character. Used by fgetc() and others.
*/
typedef wint_t LINT;
#define L(x) L ## x
#define LSTRCAT wcscat
#define LSTRCHR wcschr
#define LSTRRCHR wcsrchr
#define LSTRCMP wcscmp
#define LSTRNCMP wcsncmp
#define LSTRCPY wcscpy
#define LSTRFTIME wcsftime
#define LPRINTF wprintf
#define LFPRINTF fwprintf
#define LSPRINTF swprintf
#ifdef _WIN32
/**
* LCHAR version of getenv()
*/
#define LGETENV wgetenv
/**
* LCHAR version of strlwr() which converts a string to lowercase.
*/
#define LSTRLWR _wcslwr
/**
* LCHAR version of strtok()
*/
#define LSTRTOK wcstok
/**
* LCHAR version of strupr() which converts a string to lowercase.
*/
#define LSTRUPR _wcsupr
#else
#define LSTRCASECMP wcscasecmp
#define LSTRLWR #error LSTRLWR not defined.
#define LSTRUPR #error LSTRUPR not defined.
#endif /* _WIN32 */
#define LSTRLEN wcslen
#define LSTRNCPY wcsncpy
#define LMEMMOVE wmemmove
#define LSTRSTR wcsstr
#define LSTRTOD wcstod
#define LSTRTOL wcstol
#define LSTRTOUL wcstoul
#define LISSPACE iswspace
#define LSTRCSPN wcscspn
#define LISALPHA iswalpha
#define LISALNUM iswalnum
#define LISDIGIT iswdigit
/**
* Converts LCHAR character to uppercase.
*/
#define LTOUPPER towupper
/**
* Converts LCHAR character to lowercase.
*/
#define LTOLOWER towlower
/**
* Portable sprintf().
*/
#define psprintf sprintf
/**
* Portable svprintf().
*/
#define pvsprintf vsprintf
#endif /* USE_NARROW_CHAR */
/**
* Log of 2 in base 10.
*/
#define LOG_10_2 (0.30102999566398)
/**
* Maximum number of characters used to represent a pointer as a string in
* hex. The +2 is for 0x that would preceed the address.
*/
#define MAX_POINTER_CHARS ((size_t) ((CHAR_BIT * sizeof(void*) * 2))+2)
/**
* Maximum number of digits used to represent an unsigned int as a string in
* base 10. The +1 is for taking into account the fact that the fractional
* part is removed and that we really need to take the ceiling.
*/
#define MAX_UINT_DIGITS ((size_t) ((CHAR_BIT * sizeof(int) * LOG_10_2) + 1))
/**
* Maximum number of digits used to represent an int as a string in base 10.
* +1 for sign character [+, -]
*/
#define MAX_INT_DIGITS ((size_t) (MAX_UINT_DIGITS + 1))
/**
* Indicates if text contains a number (and nothing else).
*
* @param text String to check
* @return ESR_TRUE if text is a number, ESR_FALSE otherwise.
*/
PORTABLE_API ESR_BOOL isNumber(const LCHAR* text);
/**
* @}
*/
#include "ESR_ReturnCode.h"
#include "pstdio.h"
#endif