198 lines
5.5 KiB
C
198 lines
5.5 KiB
C
|
|
//metadoc Common copyright Steve Dekorte 2002
|
|
//metadoc Common license BSD revised
|
|
/*metadoc Common description
|
|
This is a header that all other source files should include.
|
|
These defines are helpful for doing OS specific checks in the code.
|
|
*/
|
|
|
|
|
|
#ifndef IOCOMMON_DEFINED
|
|
#define IOCOMMON_DEFINED 1
|
|
|
|
/*#define LOW_MEMORY_SYSTEM 1*/
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stddef.h>
|
|
|
|
|
|
#if defined (__SVR4) && defined (__sun)
|
|
#include <inttypes.h>
|
|
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
|
|
#include <inttypes.h>
|
|
#elif !defined(__SYMBIAN32__) && !defined(__NeXT__)
|
|
#include <stdint.h>
|
|
#else
|
|
typedef unsigned char uint8_t;
|
|
typedef signed char int8_t;
|
|
typedef unsigned short uint16_t;
|
|
typedef signed short int16_t;
|
|
typedef unsigned long uint32_t;
|
|
typedef signed long int32_t;
|
|
/*
|
|
typedef unsigned long uint64_t;
|
|
typedef signed long int64_t;
|
|
*/
|
|
typedef unsigned long long uint64_t;
|
|
typedef long long int64_t;
|
|
#endif
|
|
|
|
/* Windows stuff */
|
|
|
|
#if defined(WIN32) || defined(__WINS__) || defined(__MINGW32__) || defined(_MSC_VER)
|
|
#define inline __inline
|
|
//#define snprintf _snprintf
|
|
#define usleep(x) Sleep(((x)+999)/1000)
|
|
|
|
#define HAS_FIBERS 1
|
|
|
|
#define ON_WINDOWS 1
|
|
|
|
// this also includes windows.h
|
|
#include <winsock2.h>
|
|
|
|
// Enable fibers
|
|
#ifndef _WIN32_WINNT
|
|
#define _WIN32_WINNT 0x0400
|
|
#endif
|
|
|
|
#if !defined(__MINGW32__) && 0
|
|
#if defined(BUILDING_BASEKIT_DLL) || defined(BUILDING_IOVMALL_DLL)
|
|
#define BASEKIT_API __declspec(dllexport)
|
|
#else
|
|
#define BASEKIT_API __declspec(dllimport)
|
|
#endif
|
|
#else
|
|
#define BASEKIT_API
|
|
#endif
|
|
/*
|
|
#ifndef _SYS_STDINT_H_
|
|
#include "PortableStdint.h"
|
|
#endif
|
|
*/
|
|
|
|
#if !defined(__MINGW32__)
|
|
/* disable compile warnings which are always treated
|
|
as errors in my dev settings */
|
|
|
|
#pragma warning( disable : 4244 )
|
|
/* warning C4244: 'function' : conversion from 'double ' to 'int ', possible loss of data */
|
|
|
|
#pragma warning( disable : 4996 )
|
|
/* warning C4996: 'function' : This function or variable may be unsafe. Consider using 'function_s' instead */
|
|
|
|
#pragma warning( disable : 4018 )
|
|
/* warning C4018: 'operator' : signed/unsigned mismatch */
|
|
|
|
/*#pragma warning( disable : 4090 ) */
|
|
/* warning C4090: 'function' : different 'const' qualifiers */
|
|
|
|
/*#pragma warning( disable : 4024 )*/
|
|
/* warning C4024: different types for formal and actual parameter */
|
|
|
|
/*#pragma warning( disable : 4761 ) */
|
|
/* warning C4761: integral size mismatch in argument; conversion supplied */
|
|
|
|
/*#pragma warning( disable : 4047 ) */
|
|
/* warning C4047: '=' : 'char *' differs in levels of indirection from 'int ' */
|
|
#define ARCHITECTURE_x86 1
|
|
#endif
|
|
|
|
/* io_malloc, io_realloc, io_free undefined */
|
|
#if !defined(__SYMBIAN32__)
|
|
#include <memory.h>
|
|
|
|
/* strlen undefined */
|
|
#include <string.h>
|
|
#include <malloc.h> /* for calloc */
|
|
#endif
|
|
#else
|
|
|
|
// Not on windows so define this away
|
|
#define BASEKIT_API
|
|
|
|
#endif
|
|
|
|
/*
|
|
[DBCS Enabling]
|
|
|
|
DBCS (Short for Double-Byte Character Set), a character set that uses two-byte (16-bit) characters. Some languages, such as Chinese, Japanese and Korean (CJK), have writing schemes with many different characters that cannot be represented with single-byte codes such as ASCII and EBCDIC.
|
|
|
|
In CJK world, CES (Character Encoding Scheme) and CCS (Coded Character Set) are actually different concept(one CES may contain multiple CCS).
|
|
For example, EUC-JP is a CES which includes CCS of ASCII and JIS X 0208 (optionally JIS X 0201 Kana and JIS X 0212).
|
|
|
|
In Japanese (because I am Japanese),
|
|
While EUC-JP and UTF-8 Map ASCII unchanged, ShiftJIS not (However ShiftJIS is de facto standard in Japan). For example, {0x95, 0x5c} represents one character. in ASCII, second byte(0x5c) is back slash character.
|
|
*/
|
|
|
|
/*
|
|
check whether double-byte character. supported only ShiftJIS.
|
|
if you want to use ShiftJIS characters in string literal, set compiler option -DDBCS_ENABLED=1.
|
|
*/
|
|
|
|
#if DBCS_ENABLED
|
|
#define ismbchar(c) ISSJIS((unsigned char)c)
|
|
#define mbcharlen(c) 2
|
|
#define ISSJIS(c) ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc))
|
|
#else
|
|
#define ismbchar(c) 0
|
|
#define mbcharlen(c) 1
|
|
#endif /* DBCS_ENABLED */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//#define IO_CHECK_ALLOC ENABLED(NOT_IN_CLEAN)
|
|
|
|
#ifdef IO_CHECK_ALLOC
|
|
BASEKIT_API size_t io_memsize(void *ptr);
|
|
|
|
#define io_malloc(size) io_real_malloc(size, __FILE__, __LINE__)
|
|
BASEKIT_API void *io_real_malloc(size_t size, char *file, int line);
|
|
|
|
#define io_calloc(count, size) io_real_calloc(count, size, __FILE__, __LINE__)
|
|
BASEKIT_API void *io_real_calloc(size_t count, size_t size, char *file, int line);
|
|
|
|
#define io_realloc(ptr, size) io_real_realloc(ptr, size, __FILE__, __LINE__)
|
|
BASEKIT_API void *io_real_realloc(void *ptr, size_t newSize, char *file, int line);
|
|
|
|
BASEKIT_API void io_free(void *ptr);
|
|
BASEKIT_API void io_show_mem(char *s);
|
|
BASEKIT_API size_t io_maxAllocatedBytes(void);
|
|
BASEKIT_API void io_resetMaxAllocatedBytes(void);
|
|
BASEKIT_API size_t io_frees(void);
|
|
BASEKIT_API size_t io_allocs(void);
|
|
BASEKIT_API size_t io_allocatedBytes(void);
|
|
|
|
BASEKIT_API void io_showUnfreed(void);
|
|
#else
|
|
#define io_memsize
|
|
#define io_malloc malloc
|
|
#define io_calloc calloc
|
|
#define io_realloc io_freerealloc
|
|
#define io_free free
|
|
#define io_show_mem
|
|
|
|
#define io_maxAllocatedBytes() 0
|
|
#define io_frees() 0
|
|
#define io_allocs() 0
|
|
#define io_allocatedBytes() 0
|
|
#define io_resetMaxAllocatedBytes()
|
|
#endif
|
|
|
|
BASEKIT_API void *cpalloc(const void *p, size_t size);
|
|
BASEKIT_API void *io_freerealloc(void *p, size_t size);
|
|
|
|
int io_isBigEndian(void);
|
|
BASEKIT_API uint32_t io_uint32InBigEndian(uint32_t i);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|