1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef _FX_SYSTEM_H_ 8 #define _FX_SYSTEM_H_ 9 #define _FX_WIN32_DESKTOP_ 1 10 #define _FX_LINUX_DESKTOP_ 4 11 #define _FX_MACOSX_ 7 12 #define _FX_ANDROID_ 12 13 #define _FXM_PLATFORM_WINDOWS_ 1 14 #define _FXM_PLATFORM_LINUX_ 2 15 #define _FXM_PLATFORM_APPLE_ 3 16 #define _FXM_PLATFORM_ANDROID_ 4 17 #ifndef _FX_OS_ 18 #if defined(__ANDROID__) 19 #define _FX_OS_ _FX_ANDROID_ 20 #define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_ 21 #elif defined(_WIN32) || defined(_WIN64) 22 #define _FX_OS_ _FX_WIN32_DESKTOP_ 23 #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_ 24 #elif defined(__linux__) 25 #define _FX_OS_ _FX_LINUX_DESKTOP_ 26 #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_ 27 #elif defined(__APPLE__) 28 #define _FX_OS_ _FX_MACOSX_ 29 #define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_ 30 #endif 31 #endif 32 #if !defined(_FX_OS_) || _FX_OS_ == 0 33 #error Sorry, can not figure out what OS you are targeting to. Please specify _FX_OS_ macro. 34 #endif 35 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 36 #define _CRT_SECURE_NO_WARNINGS 37 #include <windows.h> 38 #endif 39 #define _FX_W32_ 1 40 #define _FX_W64_ 2 41 #ifndef _FX_WORDSIZE_ 42 #if defined(_WIN64) || defined(__arm64) || defined(__arm64__) || defined(_M_AMD64) || defined(_M_X64) || defined(_M_IA64) || defined(__powerpc64__) || defined(__x86_64__) || __WORDSIZE == 64 || defined(__LP64__) 43 #define _FX_WORDSIZE_ _FX_W64_ 44 #else 45 #define _FX_WORDSIZE_ _FX_W32_ 46 #endif 47 #endif 48 #include <stddef.h> 49 #include <stdarg.h> 50 #include <setjmp.h> 51 #include <stdlib.h> 52 #include <stdio.h> 53 #include <string.h> 54 #include <assert.h> 55 #include <wchar.h> 56 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 57 #include <libkern/OSAtomic.h> 58 #if _FX_OS_ == _FX_MACOSX_ 59 #include <Carbon/Carbon.h> 60 #elif _FX_OS_ == _FX_IOS_ 61 #include <CoreText/CoreText.h> 62 #include <CoreGraphics/CoreGraphics.h> 63 #endif 64 #endif 65 #ifdef __cplusplus 66 extern "C" { 67 #endif 68 typedef void* FX_LPVOID; 69 typedef void const* FX_LPCVOID; 70 typedef void* FX_POSITION; 71 typedef signed char FX_INT8; 72 typedef unsigned char FX_UINT8; 73 typedef unsigned char FX_BYTE; 74 typedef unsigned char* FX_LPBYTE; 75 typedef unsigned char const* FX_LPCBYTE; 76 typedef short FX_INT16; 77 typedef unsigned short FX_UINT16; 78 typedef short FX_SHORT; 79 typedef unsigned short FX_WORD; 80 typedef unsigned short* FX_LPWORD; 81 typedef unsigned short const* FX_LPCWORD; 82 typedef int FX_INT32; 83 typedef float FX_FLOAT; 84 typedef int FX_BOOL; 85 typedef int FX_ERR; 86 #define FX_SUCCEEDED(Status) ((FX_ERR)(Status) >= 0) 87 #define FX_FAILED(Status) ((FX_ERR)(Status) < 0) 88 typedef char FX_CHAR; 89 typedef char* FX_LPSTR; 90 typedef char const* FX_LPCSTR; 91 typedef unsigned int FX_DWORD; 92 typedef unsigned int* FX_LPDWORD; 93 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 94 typedef __int64 FX_INT64; 95 typedef unsigned __int64 FX_UINT64; 96 #else 97 typedef long long int FX_INT64; 98 typedef unsigned long long FX_UINT64; 99 #endif 100 #if _FX_WORDSIZE_ == _FX_W64_ 101 typedef FX_INT64 FX_INTPTR; 102 typedef FX_UINT64 FX_UINTPTR; 103 #else 104 typedef int FX_INTPTR; 105 typedef unsigned int FX_UINTPTR; 106 #endif 107 typedef wchar_t FX_WCHAR; 108 typedef wchar_t* FX_LPWSTR; 109 typedef wchar_t const* FX_LPCWSTR; 110 typedef FX_DWORD FX_UINT32; 111 typedef FX_UINT64 FX_QWORD; 112 #define FX_DEFINEHANDLE(name) typedef struct _##name {FX_LPVOID pData;} * name; 113 #if defined(DEBUG) && !defined(_DEBUG) 114 #define _DEBUG 115 #endif 116 #ifndef TRUE 117 118 #define TRUE 1 119 #endif 120 #ifndef FALSE 121 122 #define FALSE 0 123 #endif 124 #ifndef NULL 125 126 #define NULL 0 127 #endif 128 #define FXSYS_assert assert 129 #ifndef ASSERT 130 #ifdef _DEBUG 131 #define ASSERT FXSYS_assert 132 #else 133 134 #define ASSERT(a) 135 #endif 136 #endif 137 #define FX_MAX(a, b) (((a) > (b)) ? (a) : (b)) 138 #define FX_MIN(a, b) (((a) < (b)) ? (a) : (b)) 139 #define FX_PI 3.1415926535897932384626433832795f 140 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 141 #define FXSYS_snprintf _snprintf 142 #else 143 #define FXSYS_snprintf snprintf 144 #endif 145 #define FXSYS_sprintf sprintf 146 #define FXSYS_vsprintf vsprintf 147 #define FXSYS_strchr strchr 148 #define FXSYS_strlen strlen 149 #define FXSYS_strncmp strncmp 150 #define FXSYS_strcmp strcmp 151 #define FXSYS_strcpy strcpy 152 #define FXSYS_strncpy strncpy 153 #define FXSYS_strstr strstr 154 #define FXSYS_FILE FILE 155 #define FXSYS_fopen fopen 156 #define FXSYS_fclose fclose 157 #define FXSYS_SEEK_END SEEK_END 158 #define FXSYS_SEEK_SET SEEK_SET 159 #define FXSYS_fseek fseek 160 #define FXSYS_ftell ftell 161 #define FXSYS_fread fread 162 #define FXSYS_fwrite fwrite 163 #define FXSYS_fprintf fprintf 164 #define FXSYS_fflush fflush 165 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 166 #ifdef _NATIVE_WCHAR_T_DEFINED 167 #define FXSYS_wfopen(f, m) _wfopen((const wchar_t*)(f), (const wchar_t*)(m)) 168 #else 169 #define FXSYS_wfopen _wfopen 170 #endif 171 #else 172 FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode); 173 #endif 174 175 #define FXSYS_wcslen wcslen 176 #define FXSYS_wcscmp wcscmp 177 #define FXSYS_wcschr wcschr 178 #define FXSYS_wcsstr wcsstr 179 #define FXSYS_wcsncmp wcsncmp 180 #define FXSYS_vswprintf vswprintf 181 #define FXSYS_mbstowcs mbstowcs 182 #define FXSYS_wcstombs wcstombs 183 #define FXSYS_memcmp memcmp 184 #define FXSYS_memcpy memcpy 185 #define FXSYS_memmove memmove 186 #define FXSYS_memset memset 187 #define FXSYS_memchr memchr 188 #define FXSYS_qsort qsort 189 #define FXSYS_bsearch bsearch 190 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 191 #define FXSYS_GetACP GetACP 192 #define FXSYS_itoa _itoa 193 #define FXSYS_strlwr _strlwr 194 #define FXSYS_strupr _strupr 195 #define FXSYS_stricmp _stricmp 196 #ifdef _NATIVE_WCHAR_T_DEFINED 197 #define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2)) 198 #define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8) 199 #define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6) 200 #define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str)) 201 #define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str)) 202 #else 203 #define FXSYS_wcsicmp _wcsicmp 204 #define FXSYS_WideCharToMultiByte WideCharToMultiByte 205 #define FXSYS_MultiByteToWideChar MultiByteToWideChar 206 #define FXSYS_wcslwr _wcslwr 207 #define FXSYS_wcsupr _wcsupr 208 #endif 209 #define FXSYS_GetFullPathName GetFullPathName 210 #define FXSYS_GetModuleFileName GetModuleFileName 211 #else 212 int FXSYS_GetACP(void); 213 char* FXSYS_itoa(int value, char* string, int radix); 214 int FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen, 215 char* buf, int buflen, const char* default_str, int* pUseDefault); 216 int FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen, 217 wchar_t* buf, int buflen); 218 FX_DWORD FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart); 219 FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize); 220 char* FXSYS_strlwr(char* str); 221 char* FXSYS_strupr(char* str); 222 int FXSYS_stricmp(const char*, const char*); 223 int FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2); 224 wchar_t* FXSYS_wcslwr(wchar_t* str); 225 wchar_t* FXSYS_wcsupr(wchar_t* str); 226 #endif 227 #define FXSYS_memcpy32 FXSYS_memcpy 228 #define FXSYS_memcmp32 FXSYS_memcmp 229 #define FXSYS_memset32 FXSYS_memset 230 #define FXSYS_memset8 FXSYS_memset 231 #define FXSYS_memmove32 FXSYS_memmove 232 #ifdef __cplusplus 233 } 234 #endif 235 #include <math.h> 236 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 237 #define FXSYS_pow(a, b) (FX_FLOAT)powf(a, b) 238 #else 239 #define FXSYS_pow(a, b) (FX_FLOAT)pow(a, b) 240 #endif 241 #define FXSYS_sqrt(a) (FX_FLOAT)sqrt(a) 242 #define FXSYS_fabs(a) (FX_FLOAT)fabs(a) 243 #define FXSYS_atan2(a, b) (FX_FLOAT)atan2(a, b) 244 #define FXSYS_ceil(a) (FX_FLOAT)ceil(a) 245 #define FXSYS_floor(a) (FX_FLOAT)floor(a) 246 #define FXSYS_cos(a) (FX_FLOAT)cos(a) 247 #define FXSYS_acos(a) (FX_FLOAT)acos(a) 248 #define FXSYS_sin(a) (FX_FLOAT)sin(a) 249 #define FXSYS_log(a) (FX_FLOAT)log(a) 250 #define FXSYS_log10(a) (FX_FLOAT)log10(a) 251 #define FXSYS_fmod(a, b) (FX_FLOAT)fmod(a, b) 252 #define FXSYS_abs abs 253 #ifdef __cplusplus 254 extern "C" { 255 #endif 256 #define _FX_LSB_FIRST_ 257 #define FXDWORD_FROM_LSBFIRST(i) (i) 258 #define FXDWORD_FROM_MSBFIRST(i) (((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24)) 259 #define FXDWORD_GET_LSBFIRST(p) ((((FX_LPBYTE)(p))[3] << 24) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0])) 260 #define FXDWORD_GET_MSBFIRST(p) ((((FX_LPBYTE)(p))[0] << 24) | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | (((FX_LPBYTE)(p))[3])) 261 #define FXSYS_HIBYTE(word) ((FX_BYTE)((word) >> 8)) 262 #define FXSYS_LOBYTE(word) ((FX_BYTE)(word)) 263 #define FXSYS_HIWORD(dword) ((FX_WORD)((dword) >> 16)) 264 #define FXSYS_LOWORD(dword) ((FX_WORD)(dword)) 265 FX_INT32 FXSYS_atoi(FX_LPCSTR str); 266 FX_INT32 FXSYS_wtoi(FX_LPCWSTR str); 267 FX_INT64 FXSYS_atoi64(FX_LPCSTR str); 268 FX_INT64 FXSYS_wtoi64(FX_LPCWSTR str); 269 FX_LPCSTR FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix); 270 FX_LPCWSTR FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix); 271 int FXSYS_round(FX_FLOAT f); 272 #define FXSYS_Mul(a, b) ((a) * (b)) 273 #define FXSYS_Div(a, b) ((a) / (b)) 274 #define FXSYS_MulDiv(a, b, c) ((a) * (b) / (c)) 275 #define FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b)) 276 #ifdef __cplusplus 277 }; 278 #endif 279 #endif 280