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