blob: f72be0ffcbdb4a7503d910827f418c186203e7d0 [file] [log] [blame]
// 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