// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef _FX_SYSTEM_H_ | |
#define _FX_SYSTEM_H_ | |
#define _FX_WIN32_DESKTOP_ 1 | |
#define _FX_LINUX_DESKTOP_ 4 | |
#define _FX_MACOSX_ 7 | |
#define _FX_ANDROID_ 12 | |
#define _FXM_PLATFORM_WINDOWS_ 1 | |
#define _FXM_PLATFORM_LINUX_ 2 | |
#define _FXM_PLATFORM_APPLE_ 3 | |
#define _FXM_PLATFORM_ANDROID_ 4 | |
#ifndef _FX_OS_ | |
#if defined(__ANDROID__) | |
#define _FX_OS_ _FX_ANDROID_ | |
#define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_ | |
#elif defined(_WIN32) || defined(_WIN64) | |
#define _FX_OS_ _FX_WIN32_DESKTOP_ | |
#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_ | |
#elif defined(__linux__) | |
#define _FX_OS_ _FX_LINUX_DESKTOP_ | |
#define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_ | |
#elif defined(__APPLE__) | |
#define _FX_OS_ _FX_MACOSX_ | |
#define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_ | |
#endif | |
#endif | |
#if !defined(_FX_OS_) || _FX_OS_ == 0 | |
#error Sorry, can not figure out what OS you are targeting to. Please specify _FX_OS_ macro. | |
#endif | |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | |
#define _CRT_SECURE_NO_WARNINGS | |
#include <windows.h> | |
#endif | |
#define _FX_W32_ 1 | |
#define _FX_W64_ 2 | |
#ifndef _FX_WORDSIZE_ | |
#if defined(_WIN64) || defined(__arm64) || defined(__arm64__) || defined(_M_AMD64) || defined(_M_X64) || defined(_M_IA64) || defined(__powerpc64__) || defined(__x86_64__) || __WORDSIZE == 64 | |
#define _FX_WORDSIZE_ _FX_W64_ | |
#else | |
#define _FX_WORDSIZE_ _FX_W32_ | |
#endif | |
#endif | |
#include <stddef.h> | |
#include <stdarg.h> | |
#include <setjmp.h> | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <string.h> | |
#include <assert.h> | |
#include <wchar.h> | |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | |
#include <libkern/OSAtomic.h> | |
#if _FX_OS_ == _FX_MACOSX_ | |
#include <Carbon/Carbon.h> | |
#elif _FX_OS_ == _FX_IOS_ | |
#include <CoreText/CoreText.h> | |
#include <CoreGraphics/CoreGraphics.h> | |
#endif | |
#endif | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
typedef void* FX_LPVOID; | |
typedef void const* FX_LPCVOID; | |
typedef void* FX_POSITION; | |
typedef signed char FX_INT8; | |
typedef unsigned char FX_UINT8; | |
typedef unsigned char FX_BYTE; | |
typedef unsigned char* FX_LPBYTE; | |
typedef unsigned char const* FX_LPCBYTE; | |
typedef short FX_INT16; | |
typedef unsigned short FX_UINT16; | |
typedef short FX_SHORT; | |
typedef unsigned short FX_WORD; | |
typedef unsigned short* FX_LPWORD; | |
typedef unsigned short const* FX_LPCWORD; | |
typedef int FX_INT32; | |
typedef float FX_FLOAT; | |
typedef int FX_BOOL; | |
typedef int FX_ERR; | |
#define FX_SUCCEEDED(Status) ((FX_ERR)(Status) >= 0) | |
#define FX_FAILED(Status) ((FX_ERR)(Status) < 0) | |
typedef char FX_CHAR; | |
typedef char* FX_LPSTR; | |
typedef char const* FX_LPCSTR; | |
typedef unsigned int FX_DWORD; | |
typedef unsigned int* FX_LPDWORD; | |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | |
typedef __int64 FX_INT64; | |
typedef unsigned __int64 FX_UINT64; | |
#else | |
typedef long long int FX_INT64; | |
typedef unsigned long long FX_UINT64; | |
#endif | |
#if _FX_WORDSIZE_ == _FX_W64_ | |
typedef FX_INT64 FX_INTPTR; | |
typedef FX_UINT64 FX_UINTPTR; | |
#else | |
typedef int FX_INTPTR; | |
typedef unsigned int FX_UINTPTR; | |
#endif | |
typedef wchar_t FX_WCHAR; | |
typedef wchar_t* FX_LPWSTR; | |
typedef wchar_t const* FX_LPCWSTR; | |
typedef FX_DWORD FX_UINT32; | |
typedef FX_UINT64 FX_QWORD; | |
#define FX_DEFINEHANDLE(name) typedef struct _##name {FX_LPVOID pData;} * name; | |
#if defined(DEBUG) && !defined(_DEBUG) | |
#define _DEBUG | |
#endif | |
#ifndef TRUE | |
#define TRUE 1 | |
#endif | |
#ifndef FALSE | |
#define FALSE 0 | |
#endif | |
#ifndef NULL | |
#define NULL 0 | |
#endif | |
#define FXSYS_assert assert | |
#ifndef ASSERT | |
#ifdef _DEBUG | |
#define ASSERT FXSYS_assert | |
#else | |
#define ASSERT(a) | |
#endif | |
#endif | |
#define FX_MAX(a, b) (((a) > (b)) ? (a) : (b)) | |
#define FX_MIN(a, b) (((a) < (b)) ? (a) : (b)) | |
#define FX_PI 3.1415926535897932384626433832795f | |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | |
#define FXSYS_snprintf _snprintf | |
#else | |
#define FXSYS_snprintf snprintf | |
#endif | |
#define FXSYS_sprintf sprintf | |
#define FXSYS_vsprintf vsprintf | |
#define FXSYS_strchr strchr | |
#define FXSYS_strlen strlen | |
#define FXSYS_strncmp strncmp | |
#define FXSYS_strcmp strcmp | |
#define FXSYS_strcpy strcpy | |
#define FXSYS_strncpy strncpy | |
#define FXSYS_strstr strstr | |
#define FXSYS_FILE FILE | |
#define FXSYS_fopen fopen | |
#define FXSYS_fclose fclose | |
#define FXSYS_SEEK_END SEEK_END | |
#define FXSYS_SEEK_SET SEEK_SET | |
#define FXSYS_fseek fseek | |
#define FXSYS_ftell ftell | |
#define FXSYS_fread fread | |
#define FXSYS_fwrite fwrite | |
#define FXSYS_fprintf fprintf | |
#define FXSYS_fflush fflush | |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | |
#ifdef _NATIVE_WCHAR_T_DEFINED | |
#define FXSYS_wfopen(f, m) _wfopen((const wchar_t*)(f), (const wchar_t*)(m)) | |
#else | |
#define FXSYS_wfopen _wfopen | |
#endif | |
#else | |
FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode); | |
#endif | |
#define FXSYS_wcslen wcslen | |
#define FXSYS_wcscmp wcscmp | |
#define FXSYS_wcschr wcschr | |
#define FXSYS_wcsstr wcsstr | |
#define FXSYS_wcsncmp wcsncmp | |
#define FXSYS_vswprintf vswprintf | |
#define FXSYS_mbstowcs mbstowcs | |
#define FXSYS_wcstombs wcstombs | |
#define FXSYS_memcmp memcmp | |
#define FXSYS_memcpy memcpy | |
#define FXSYS_memmove memmove | |
#define FXSYS_memset memset | |
#define FXSYS_memchr memchr | |
#define FXSYS_qsort qsort | |
#define FXSYS_bsearch bsearch | |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | |
#define FXSYS_GetACP GetACP | |
#define FXSYS_itoa _itoa | |
#define FXSYS_strlwr _strlwr | |
#define FXSYS_strupr _strupr | |
#define FXSYS_stricmp _stricmp | |
#ifdef _NATIVE_WCHAR_T_DEFINED | |
#define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2)) | |
#define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8) | |
#define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6) | |
#define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str)) | |
#define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str)) | |
#else | |
#define FXSYS_wcsicmp _wcsicmp | |
#define FXSYS_WideCharToMultiByte WideCharToMultiByte | |
#define FXSYS_MultiByteToWideChar MultiByteToWideChar | |
#define FXSYS_wcslwr _wcslwr | |
#define FXSYS_wcsupr _wcsupr | |
#endif | |
#define FXSYS_GetFullPathName GetFullPathName | |
#define FXSYS_GetModuleFileName GetModuleFileName | |
#else | |
int FXSYS_GetACP(void); | |
char* FXSYS_itoa(int value, char* string, int radix); | |
int FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen, | |
char* buf, int buflen, const char* default_str, int* pUseDefault); | |
int FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen, | |
wchar_t* buf, int buflen); | |
FX_DWORD FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart); | |
FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize); | |
char* FXSYS_strlwr(char* str); | |
char* FXSYS_strupr(char* str); | |
int FXSYS_stricmp(const char*, const char*); | |
int FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2); | |
wchar_t* FXSYS_wcslwr(wchar_t* str); | |
wchar_t* FXSYS_wcsupr(wchar_t* str); | |
#endif | |
#define FXSYS_memcpy32 FXSYS_memcpy | |
#define FXSYS_memcmp32 FXSYS_memcmp | |
#define FXSYS_memset32 FXSYS_memset | |
#define FXSYS_memset8 FXSYS_memset | |
#define FXSYS_memmove32 FXSYS_memmove | |
#ifdef __cplusplus | |
} | |
#endif | |
#include <math.h> | |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | |
#define FXSYS_pow(a, b) (FX_FLOAT)powf(a, b) | |
#else | |
#define FXSYS_pow(a, b) (FX_FLOAT)pow(a, b) | |
#endif | |
#define FXSYS_sqrt(a) (FX_FLOAT)sqrt(a) | |
#define FXSYS_fabs(a) (FX_FLOAT)fabs(a) | |
#define FXSYS_atan2(a, b) (FX_FLOAT)atan2(a, b) | |
#define FXSYS_ceil(a) (FX_FLOAT)ceil(a) | |
#define FXSYS_floor(a) (FX_FLOAT)floor(a) | |
#define FXSYS_cos(a) (FX_FLOAT)cos(a) | |
#define FXSYS_acos(a) (FX_FLOAT)acos(a) | |
#define FXSYS_sin(a) (FX_FLOAT)sin(a) | |
#define FXSYS_log(a) (FX_FLOAT)log(a) | |
#define FXSYS_log10(a) (FX_FLOAT)log10(a) | |
#define FXSYS_fmod(a, b) (FX_FLOAT)fmod(a, b) | |
#define FXSYS_abs abs | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
#define _FX_LSB_FIRST_ | |
#define FXDWORD_FROM_LSBFIRST(i) (i) | |
#define FXDWORD_FROM_MSBFIRST(i) (((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24)) | |
#define FXDWORD_GET_LSBFIRST(p) ((((FX_LPBYTE)(p))[3] << 24) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0])) | |
#define FXDWORD_GET_MSBFIRST(p) ((((FX_LPBYTE)(p))[0] << 24) | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | (((FX_LPBYTE)(p))[3])) | |
#define FXSYS_HIBYTE(word) ((FX_BYTE)((word) >> 8)) | |
#define FXSYS_LOBYTE(word) ((FX_BYTE)(word)) | |
#define FXSYS_HIWORD(dword) ((FX_WORD)((dword) >> 16)) | |
#define FXSYS_LOWORD(dword) ((FX_WORD)(dword)) | |
FX_INT32 FXSYS_atoi(FX_LPCSTR str); | |
FX_INT32 FXSYS_wtoi(FX_LPCWSTR str); | |
FX_INT64 FXSYS_atoi64(FX_LPCSTR str); | |
FX_INT64 FXSYS_wtoi64(FX_LPCWSTR str); | |
FX_LPCSTR FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix); | |
FX_LPCWSTR FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix); | |
int FXSYS_round(FX_FLOAT f); | |
#define FXSYS_Mul(a, b) ((a) * (b)) | |
#define FXSYS_Div(a, b) ((a) / (b)) | |
#define FXSYS_MulDiv(a, b, c) ((a) * (b) / (c)) | |
#define FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b)) | |
#ifdef __cplusplus | |
}; | |
#endif | |
#endif |