fx_system.h
Go to the documentation of this file.
1 
14 //<<<+++OPENSOURCE
15 //<<<+++OPENSOURCE_LICENSE
16 //<<<+++OPENSOURCE_BEGIN LIC==FOXIT||LIC==GOOGLE
17 
23 /*
24  * @brief System dependant service routines.
25  * All system-specific function and non-standard C/C++ routines go here
26  *
27  * FPDFAPI PREDEFINED MACROES
28  *
29  * FPDFAPI makes use of a number of predefined macroes to support all kind of platforms
30  * with a single set of codes. In most of times, application developers can ignore those
31  * macroes because they are properly defined according to system or compiler environment
32  * settings. However, sometimes, especially for cross platform development, FPDFAPI might
33  * take incorrect settings of the host platform, rather then the target platform. In such
34  * case, the application developers should manually set necessary macroes in their project
35  * settings.
36  *
37  *
38  * Currently the following macroes are defined:
39  * - #_FX_OS_ The target operating system
40  * - #_FX_COMPILER_ The compiler
41  * - #_FX_CPU_ The CPU
42  * - #_FX_ENDIAN_ Little endian or big endian
43  *
44  * #_FX_OS_ can be one of the followings:
45  * - #_FX_WIN32_DESKTOP_ Windows desktop OS (from Windows 95)
46  * - #_FX_WIN32_MOBILE_ Windows Mobile OS (from Windows CE 4.0)
47  * - #_FX_WIN64_ Windows 64 bit
48  * - #_FX_LINUX_DESKTOP_ Linux Desktop OS
49  * - #_FX_LINUX_EMBEDDED_ Embedded Linux OS
50  * - #_FX_SYMBIAN_ Symbian OS (from 7.0)
51  * - #_FX_MACOSX_ MAC OS X
52  * - #_FX_EMBEDDED_ Embedded OS
53  * - #_FX_SOLARIS_ Solaris 8 or later
54  * - #_FX_PALMOS_ PalmOS (5.0 or later)
55  * - #_FX_NETBSD_ NetBSD
56  * - #_FX_ANDROID_ Android
57  * - #_FX_VXWORKS_ VxWorks
58  *
59  * #_FX_COMPILER_ can be one of the following:
60  * - #_FX_VC6_ Microsoft Visual C++ 6.0
61  * - #_FX_VC7_ Microsoft Visual Studio.Net 2003
62  * - #_FX_VC8_ Microsoft Visual Studio.Net 2005
63  * - #_FX_GCC_ GNU C++ Compiler
64  * - #_FX_ADS_ ADS 1.2 Compiler
65  * - #_FX_RVCT_ RVCT 2.1 Compiler
66  * - #_FX_IARCC_ IAR C/C++ Compiler
67  * - #_FX_NOKIA_X86_ Nokia X86 Compiler
68  * - #_FX_METROWERKS_ Metrowerks C/C++ Compiler (with MSL)
69  * - #_FX_PACC_ Protein C/C++ Compiler (used by PalmOS)
70  * - #_FX_MIPS_SDE_ MIPS SDE
71  *
72  * #_FX_CPU_ can be one of the following:
73  * - #_FX_X86_ 32-bit x86 CPU
74  * - #_FX_X64_ 64-bit x86 CPU
75  * - #_FX_POWERPC_ Power PC
76  * - #_FX_ARM_ ARM
77  * - #_FX_SPARC_ Sparc
78  * - #_FX_MIPS_ MIPS
79  * - #_FX_ARM64_ 64-bit ARM
80  *
81  * #_FX_ENDIAN_ can be one of the following:
82  * - #_FX_BIG_ENDIAN_
83  * - #_FX_LITTLE_ENDIAN_
84  *
85  * #_FX_WORDSIZE_ can be one of the following:
86  * - #_FX_W32_ 32-bit instruct
87  * - #_FX_W64_ 64-bit instruct
88  */
89 
90 //<<<+++OPENSOURCE_MUST_BEGIN
91 #ifndef _FX_SYSTEM_H_
92 #define _FX_SYSTEM_H_
93 //<<<+++OPENSOURCE_MUST_END
94 
95 #ifdef _WIN32_WCE
96  #ifndef _SIZE_T_DEFINED
97  #define _SIZE_T_DEFINED
98  #endif //_SIZE_T_DEFINED
99 #endif
100 
105 
107 #define _FX_WIN32_DESKTOP_ 1
108  //<<<+++OPENSOURCE_BEGIN LIC==FOXIT
110  #define _FX_WIN32_MOBILE_ 2
111 
112  #define _FX_WIN64_ 3
113  //<<<+++OPENSOURCE_END
114 
116 #define _FX_LINUX_DESKTOP_ 4
117 
119  #define _FX_LINUX_EMBEDDED_ 5
120 
121  #define _FX_SYMBIAN_ 6
122 
124 #define _FX_MACOSX_ 7
125 
127  #define _FX_EMBEDDED_ 8
128 
129  #define _FX_SOLARIS_ 9
130 
131  #define _FX_PALMOS_ 10
132 
133  #define _FX_NETBSD_ 11
134  //<<<+++OPENSOURCE_END
135 
137 #define _FX_ANDROID_ 12
138 
140  #define _FX_VXWORKS_ 13
141 
142  #define _FX_MTK_ 14
143 
144  #define _FX_IOS_ 15
145 
147 #define _FXM_PLATFORM_WINDOWS_ 1
148 
149 #define _FXM_PLATFORM_LINUX_ 2
150 
151 #define _FXM_PLATFORM_APPLE_ 3
152 
153 #define _FXM_PLATFORM_ANDROID_ 4
154 
155 #ifdef __pnacl__
156 #define _CHROME_PNACL_
157 #endif
158 
159 #ifdef __EMSCRIPTEN__
160  #define _FXM_PLATFORM_LINUX_JS_
161 #endif
162 
163 #if defined(_FXM_PLATFORM_LINUX_JS_) || defined(_CHROME_PNACL_)
164  #define _FX_OS_ _FX_LINUX_DESKTOP_
165  #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
166 #endif
167 
168 /* OS */
169 
170 #ifndef _FX_OS_
171  #if defined(__SYMBIAN32__) || defined(__symbian__)
172  #define _FX_OS_ _FX_SYMBIAN_
173  #elif defined(_WIN32_WCE)
174  #define _FX_OS_ _FX_WIN32_MOBILE_
175  #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
176  #if defined (_WIN32_WCE) && (_WIN32_WCE == 0x600)
177  #define UNSUPPORT_CPP0X
178  #endif
179  #elif defined(__linux__) || (defined(FOXIT_CHROME_BUILD) && defined(__native_client__))
180  #if defined(__arm__) && (!defined(OS_CHROMEOS)) && (!defined(FOXIT_CHROME_BUILD))
181  #define _FX_OS_ _FX_LINUX_EMBEDDED_
182  #else
183  #define _FX_OS_ _FX_LINUX_DESKTOP_
184  #endif
185  #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
186  #elif defined(__NetBSD__)
187  #define _FX_OS_ _FX_NETBSD_
188  #elif defined(_WIN64)
189  #define _FX_OS_ _FX_WIN64_
190  #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
191  #elif defined(_WIN32)
192  #define _FX_OS_ _FX_WIN32_DESKTOP_
193  #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
194  #elif defined(__sparc__)
195  #define _FX_OS_ _FX_SOLARIS_
196  #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
197  #elif defined(__ARMCC_VERSION) || defined(__ICCARM__) || defined(__TMS470__)
198  #define _FX_OS_ _FX_EMBEDDED_
199  #elif defined(__APPLE__)
200  #include "TargetConditionals.h"
201  #if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) || (defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR == 1)
202  #define _FX_OS_ _FX_IOS_
203  #else
204  #define _FX_OS_ _FX_MACOSX_
205  #endif
206  #define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_
207  #elif defined(__ARM_EABI__)
208  #define _FX_OS_ _FX_EMBEDDED_
209  #endif
210 #else
211  #if _FX_OS_ == _FX_ANDROID_
212  #ifndef _FXM_PLATFORM_
213  #define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_
214  #endif
215  #elif (_FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_ || _FX_OS_ == _FX_WIN32_DESKTOP_)
216  #ifndef _FXM_PLATFORM_
217  #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
218  #endif
219  #elif (_FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_MACOSX_)
220  #ifndef _FXM_PLATFORM_
221  #define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_
222  #endif
223  #elif _FX_OS_ == _FX_SOLARIS_ || _FX_OS_ == _FX_LINUX_EMBEDDED_ || _FX_OS_ == _FX_LINUX_DESKTOP_
224  #ifndef _FXM_PLATFORM_
225  #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
226  #endif
227  #endif
228 #endif //_FX_OS_
229 
230 #if !defined(_FX_OS_) || _FX_OS_ == 0
231  #error Sorry, can not figure out what OS you are targeting to. Please specify _FX_OS_ macro.
232 #endif
233 
234 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
235 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
236 
237  #define _CRT_SECURE_NO_WARNINGS
238  #if defined(_MSC_VER) && _MSC_VER < 1300
239  #define _WIN32_WINNT 0x400
240  #endif
241  #if defined(_MSC_VER) && _MSC_VER < 1600
242  #define UNSUPPORT_CPP0X
243  #endif
244  #include <windows.h>
245 
246  #ifdef WINAPI_FAMILY
247  #if (0x00000001 == WINAPI_PARTITION_DESKTOP) && (0x00000002 == WINAPI_PARTITION_APP) //Macros in Windows Kit/8
248  #define _FX_WIN8_
249  #else //Macros in Windows Kit/8.1
250  #define _FX_WIN81_
251  #endif //(0x00000001 == WINAPI_PARTITION_DESKTOP) && (0x00000002 == WINAPI_PARTITION_APP)
252 
253  #ifdef _FX_WIN8_
254  #if /*defined(WINAPI_FAMILY) && */((WINAPI_FAMILY&WINAPI_PARTITION_APP) == WINAPI_PARTITION_APP)
255 
256  #define _FX_WINAPI_PARTITION_APP_
257  #endif
258  #if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY&WINAPI_PARTITION_DESKTOP) == WINAPI_PARTITION_DESKTOP)
259 
260  #define _FX_WINAPI_PARTITION_DESKTOP_
261  #endif
262  #endif //_FX_WIN8_
263 
264  #ifdef _FX_WIN81_
265 
266  #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
267 
268  #define _FX_WINAPI_PARTITION_APP_
269  #endif
270 
271  #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
272 
273  #define _FX_WINAPI_PARTITION_PHONE_APP_
274  #endif
275 
276  #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
277 
278  #define _FX_WINAPI_PARTITION_DESKTOP_
279  #endif
280  #endif //_FX_WIN81_
281  #else // !defined(WINAPI_FAMILY)
282  #ifndef _WIN32_WCE
283  #define _FX_WINAPI_PARTITION_DESKTOP_
284  #endif
285  #endif //WINAPI_FAMILY
286 #endif //(_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
287 //<<<+++OPENSOURCE_MUST_END
288 
295 
297 #define _FX_VC6_ 1
298 
299 #define _FX_VC7_ 2
300 
301 #define _FX_VC8_ 3
302 
303 #define _FX_GCC_ 4
304 
305 #define _FX_ADS_ 5
306 
307 #define _FX_RVCT_ 6
308 
309 #define _FX_IARCC_ 7
310 
311 #define _FX_NOKIA_X86_ 8
312 
313 #define _FX_METROWERKS_ 9
314 
315 #define _FX_PACC_ 10
316 
317 #define _FX_TMS470_ 11
318 
319 #define _FX_MIPS_SDE_ 12
320 
321 /* Compiler */
322 #ifndef _FX_COMPILER_
323  #ifdef _MSC_VER
324  #if _MSC_VER >= 1400
325  #define _FX_COMPILER_ _FX_VC8_
326  #elif _MSC_VER >= 1300
327  #define _FX_COMPILER_ _FX_VC7_
328  #else
329 
348  #define _FX_COMPILER_ _FX_VC6_
349  #endif
350  #elif defined(__GNUC__)
351  #define _FX_COMPILER_ _FX_GCC_
352  #elif defined(__ARMCC_VERSION)
353  #if __ARMCC_VERSION < 200000
354  #define _FX_COMPILER_ _FX_ADS_
355  #else
356  #define _FX_COMPILER_ _FX_RVCT_
357  #endif
358  #elif defined(__ICCARM__)
359  #define _FX_COMPILER_ _FX_IARCC_
360  #elif defined(_PACC_VER)
361  #define _FX_COMPILER_ _FX_PACC_
362  #elif defined(__TMS470__)
363  #define _FX_COMPILER_ _FX_TMS470_
364  #endif
365 #endif /* !_FX_COMPILER_ */
366 #if !defined(_FX_COMPILER_) || _FX_COMPILER_ == 0
367  #error Sorry, can not figure out what compiler you are using. Please specify _FX_COMPILER_ macro.
368 #endif
369 //<<<+++OPENSOURCE_MUST_END
370 
377 
379 #define _FX_X86_ 1
380 
381 #define _FX_ARM_ 2
382 
383 #define _FX_POWERPC_ 3
384 
385 #define _FX_SPARC_ 4
386 
387 #define _FX_IA64_ 5
388 
389 #define _FX_MIPS_ 6
390 
391 #define _FX_X64_ 7
392 
393 #define _FX_ARM64_ 8
394 
395 #if defined(_FXM_PLATFORM_LINUX_JS_)
396 #define _FX_CPU_ _FX_X64_
397 #endif
398 
399 #if defined(_CHROME_PNACL_)
400  #define _FX_CPU_ _FX_X86_
401 #endif
402 /* CPU */
403 #ifndef _FX_CPU_
404  #if defined(__arm__) || defined(ARM) || defined(_ARM_) || defined(__ARMCC_VERSION) || defined(__ICCARM__) || defined(__arm) || defined(arm9)
405  #define _FX_CPU_ _FX_ARM_
406  #elif defined(__arm64) || defined(__arm64__) || defined(__aarch64__)
407  #define _FX_CPU_ _FX_ARM64_
408  #elif defined(_M_IX86) || defined(__i386__)
409 
424  #define _FX_CPU_ _FX_X86_
425  #elif defined(_M_X64) || defined(__x86_64__)
426  #define _FX_CPU_ _FX_X64_
427  #elif defined(_M_IA64)
428  #define _FX_CPU_ _FX_IA64_
429  #elif defined(__POWERPC__)
430  #define _FX_CPU_ _FX_POWERPC_
431  #elif defined(__sparc__)
432  #define _FX_CPU_ _FX_SPARC_
433  #elif defined(MIPS) || defined(_MIPS_) || defined(__mips)
434  #define _FX_CPU_ _FX_MIPS_
435  #endif
436 #endif
437 #if !defined(_FX_CPU_) || _FX_CPU_ == 0
438  #error Sorry, can not figure out what CPU you are targeting to. Please specify _FX_CPU_ macro.
439 #endif
440 //<<<+++OPENSOURCE_MUST_END
441 
443 #ifdef _MSC_VER
444  #if _MSC_VER >= 1600
445  #define _FX_EMBEDFONT_PRINT_
446  #endif
447 #endif
448 
453 
454 //<<<+++OPENSOURCE_MUST_BEGIN
456 #define _FX_W32_ 1
457 
458 #define _FX_W64_ 2
459 
460 /* Word size or instruct length */
461 #ifndef _FX_WORDSIZE_
462 #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__)
463  #define _FX_WORDSIZE_ _FX_W64_
464  #else
465  #define _FX_WORDSIZE_ _FX_W32_
466  #endif
467 #endif
468 //<<<+++OPENSOURCE_MUST_END
469 
476 
478 #define _FX_BIG_ENDIAN_ 1
479 
480 #define _FX_LITTLE_ENDIAN_ 2
481 
482 /* Byte Order */
483 #ifndef _FX_ENDIAN_
484  #if _FX_CPU_ == _FX_POWERPC_ || _FX_CPU_ == _FX_SPARC_
485  #define _FX_ENDIAN_ _FX_BIG_ENDIAN_
486  #else
487 
496  #define _FX_ENDIAN_ _FX_LITTLE_ENDIAN_
497  #endif
498 #endif
499 
502 /* Include basic headers */
503 #include <stddef.h>
504 #include <stdarg.h>
505 #include <setjmp.h>
506 #include <float.h>
507 
508  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
509  #ifndef _FX_NO_ANSIC_
510  #include <stdlib.h>
511  #include <stdio.h>
512  #include <string.h>
513  #include <assert.h>
514  #if _FX_OS_ != _FX_VXWORKS_ && ((_FX_COMPILER_ == _FX_GCC_ && _FX_OS_ != _FX_SYMBIAN_) || _FX_COMPILER_ == _FX_NOKIA_X86_ || _FX_COMPILER_ == _FX_METROWERKS_ || _FX_COMPILER_ == _FX_IARCC_)
515  #include <wchar.h>
516  #endif
517  #endif
518  //<<<+++OPENSOURCE_MUST_END
519 
520 //<<<+++OPENSOURCE_MUST_BEGIN
521 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
522  #include <libkern/OSAtomic.h>
523  #if _FX_OS_ == _FX_MACOSX_
524  #include <Carbon/Carbon.h>
525  #elif _FX_OS_ == _FX_IOS_
526  #include <CoreText/CoreText.h>
527  #include <CoreGraphics/CoreGraphics.h>
528  #endif
529 #endif
530 //<<<+++OPENSOURCE_MUST_END
531 
532 #ifdef _UNICODE
533  #define GetObject GetObjectW
534  #define GetModuleFileName GetModuleFileNameW
535  #define GetFullPathName GetFullPathNameW
536 #else
537 
541  #define GetObject GetObjectA
542 
547  #define GetModuleFileName GetModuleFileNameA
548 
553  #define GetFullPathName GetFullPathNameA
554 #endif
555 
556 #if ( _FX_OS_ == _FX_IOS_ && (_FX_CPU_ == _FX_ARM_ || _FX_CPU_ == _FX_ARM64_)) || (_FX_OS_ == _FX_ANDROID_) || (_FX_OS_ == _FX_WIN32_MOBILE_)
557  #ifndef _FXCORE_LIMITED_MEMORY_
558  #define _FXCORE_LIMITED_MEMORY_
559  #endif
560  #ifndef _FXCORE_LIMITED_CPU_
561  #define _FXCORE_LIMITED_CPU_
562  #endif
563 #endif
564 
565 #if _FX_COMPILER_ == _FX_ADS_ || _FX_COMPILER_ == _FX_RVCT_ || _FX_COMPILER_ == _FX_TMS470_ || _FX_OS_ == _FX_ANDROID_
566  //#define _FX_NO_EXCEPTION_ //Removed by Malcolm J. Xue, Sep. 9th, 2010, should be defined outside
567  #define _FX_NO_NAMESPACE_
568 #endif
569 
574 
576 #define _FX_DEFAULT_TARGET_ 0
577 
578 #define _FX_BREW_ 1
579 
581 //<<<+++OPENSOURCE_MUST_END
582 
583 #if (((_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) && (defined(_FX_WINAPI_PARTITION_DESKTOP_) || defined(_FX_WINAPI_PARTITION_APP_))) || _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_MACOSX_)
584 #ifndef _FX_NO_SIMD_
585  #if !defined(_FXM_PLATFORM_LINUX_JS_) && !defined(_CHROME_PNACL_) && (_FX_CPU_ != _FX_ARM_) && (_FX_CPU_ != _FX_ARM64_)
586  #define _FXM_SIMD_
587  #endif
588 #endif
589 #endif
590 #if _FX_OS_ != _FX_MACOSX_
591  //#define _FXM_OPENMP_
592 #endif
593 
594 #ifndef _FX_NO_OPENSSL_
595  #define _FX_NO_OPENSSL_
596 #endif
597 
598 #if (((_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) && defined(_FX_WINAPI_PARTITION_DESKTOP_)) || _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_MACOSX_)
599 #ifndef _FX_NO_JPEG_TURBO_
600  #if !defined(_FXM_PLATFORM_LINUX_JS_) && !defined(_CHROME_PNACL_)
601  #define _FX_JPEG_TURBO_
602  #endif
603 #endif
604 #ifndef _FX_NO_OPENSSL_
605  #define _FXM_OPENSSL_
606 #endif
607  #define _FX_LARGEFILE_SUPPORT_
608 #ifndef _FX_NO_SIMD_
609  #define WITH_SIMD
610 #endif
611  #define _FPDF_STREAM_RENDER_
612 #ifndef _FX_ENABLE_OVERPRINT_
613  #define _FX_ENABLE_OVERPRINT_
614 #endif
615 #endif
616 
617 #ifdef _FX_WINAPI_PARTITION_APP_
618 #define _FPDF_STREAM_RENDER_
619 #endif
620 //<<<+++OPENSOURCE_MUST_END
621 
622 //<<<+++OPENSOURCE_MUST_BEGIN
623 #ifdef __cplusplus
624 extern "C" {
625 #endif
626 //<<<+++OPENSOURCE_MUST_END
627 
633 typedef void* FX_LPVOID;
635 typedef void const* FX_LPCVOID;
637 typedef void* FX_POSITION;
638 
640 typedef signed char FX_INT8;
642 typedef unsigned char FX_UINT8;
644 typedef unsigned char FX_BYTE;
646 typedef unsigned char* FX_LPBYTE;
648 typedef unsigned char const* FX_LPCBYTE;
650 typedef short FX_INT16;
652 typedef unsigned short FX_UINT16;
654 typedef short FX_SHORT;
656 typedef unsigned short FX_WORD;
658 typedef unsigned short* FX_LPWORD;
660 typedef unsigned short const* FX_LPCWORD;
662 typedef int FX_INT32;
664 typedef float FX_FLOAT;
666 typedef int FX_BOOL;
668 typedef int FX_ERR;
670 #define FX_SUCCEEDED(Status) ((FX_ERR)(Status) >= 0)
671 
672 #define FX_FAILED(Status) ((FX_ERR)(Status) < 0)
673 
675 typedef char FX_CHAR;
677 typedef char* FX_LPSTR;
679 typedef char const* FX_LPCSTR;
680 
681  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
691  #if !defined(_MSC_VER) && (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || _FX_CPU_ == _FX_ARM64_)
692 
693  typedef unsigned int FX_DWORD;
695  typedef unsigned int* FX_LPDWORD;
696  #else
697 
698  typedef unsigned long FX_DWORD;
700  typedef unsigned long* FX_LPDWORD;
701  #endif
702 
703  #ifdef _NATIVE_WCHAR_T_DEFINED
704  typedef unsigned short FX_WCHAR, *FX_LPWSTR;
705  typedef unsigned short const* FX_LPCWSTR;
706  #else
707 
708  typedef wchar_t FX_WCHAR;
710  typedef wchar_t* FX_LPWSTR;
712  typedef wchar_t const* FX_LPCWSTR;
713  #endif
714 
715  #ifdef _MSC_VER
716 
717  typedef __int64 FX_INT64;
719  typedef unsigned __int64 FX_UINT64;
720  #else
721  typedef long long int FX_INT64;
722  typedef unsigned long long FX_UINT64;
723  #endif
724 
725  #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
726 
727  typedef INT_PTR FX_INTPTR;
729  typedef UINT_PTR FX_UINTPTR;
730  #else
731  #if (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || _FX_CPU_ == _FX_ARM64_)
732  typedef FX_INT64 FX_INTPTR;
733  typedef FX_UINT64 FX_UINTPTR;
734  #else
735  typedef int FX_INTPTR;
736  typedef unsigned int FX_UINTPTR;
737  #endif
738  #endif
739  //<<<+++OPENSOURCE_MUST_END
740 
741 
742 //<<<+++OPENSOURCE_MUST_BEGIN
746 typedef FX_UINT64 FX_QWORD;
747 
749 #define FX_DEFINEHANDLE(name) typedef struct _##name {FX_LPVOID pData;} * name;
750 
751 #if defined(DEBUG) && !defined(_DEBUG)
752  #define _DEBUG
753 #endif
754 
755 #ifndef TRUE
756 
757  #define TRUE 1
758 #endif
759 
760 #ifndef FALSE
761 
762  #define FALSE 0
763 #endif
764 
765 #ifndef NULL
766 
767  #define NULL 0
768 #endif
769 //<<<+++OPENSOURCE_MUST_END
770 
771 /* Assertion */
772 
773  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
774  #if !defined(_FX_NO_ANSIC_)
775 
779  #define FXSYS_assert assert
780  #else
781  void FXSYS_assert(int condition);
782  #endif
783  //<<<+++OPENSOURCE_MUST_END
784 
785 //<<<+++OPENSOURCE_MUST_BEGIN
786 #ifndef ASSERT
787  #ifdef _DEBUG
788  #define ASSERT FXSYS_assert
789  #else
790 
794  #define ASSERT(a)
795  #endif
796 #endif
797 
799 #define FX_MAX(a, b) (((a) > (b)) ? (a) : (b))
800 
801 #define FX_MIN(a, b) (((a) < (b)) ? (a) : (b))
802 
804 #define FX_PI 3.1415926535897932384626433832795f
805 
807 #if _FX_WORDSIZE_ == _FX_W64_ && _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
808  #define _FX_CRT_MALLOC_LIMIT_ 0x7fffffffffffffffL
809 #else
810  #define _FX_CRT_MALLOC_LIMIT_ 0x7fffffffL
811 #endif
812 
813 //<<<+++OPENSOURCE_MUST_END
814 
821 
822  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
823  #if !defined(_FX_NO_ANSIC_)
824 
828  #define FXSYS_sprintf sprintf
829 
833  #ifdef _WIN32
834  #define FXSYS_snprintf _snprintf
835  #define FXSYS_vsnprintf _vsnprintf
836  #else
837  #define FXSYS_snprintf snprintf
838  #define FXSYS_vsnprintf vsnprintf
839  #endif
840 
844  #define FXSYS_vsprintf vsprintf
845 
849  #define FXSYS_strchr strchr
850 
854  #define FXSYS_strlen strlen
855 
859  #define FXSYS_strncmp strncmp
860 
864  #define FXSYS_strcmp strcmp
865 
869  #define FXSYS_strcpy strcpy
870 
874  #define FXSYS_strncpy strncpy
875 
879  #define FXSYS_strstr strstr
880  #else
881  int FXSYS_sprintf(char* buffer, const char* format, ...);
882  int FXSYS_vsprintf(char *buffer, const char *format, va_list args);
883  char* FXSYS_strchr(const char* str, int ch);
884  long FXSYS_strlen(const char* str);
885  int FXSYS_strncmp(const char* str1, const char* str2, size_t len);
886  int FXSYS_strcmp(const char* str1, const char* str2);
887  char* FXSYS_strcpy(char* dest, const char* src);
888  char* FXSYS_strncpy(char* dest, const char* src, size_t len);
889  char* FXSYS_strstr(const char *string, const char *strFind);
890  #endif
891  //<<<+++OPENSOURCE_MUST_END
892 
899  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
900  #if !defined(_FX_NO_ANSIC_)
901 
905  #define FXSYS_FILE FILE
906 
910  #define FXSYS_fopen fopen
911 
915  #define FXSYS_fclose fclose
916 
920  #define FXSYS_SEEK_END SEEK_END
921 
925  #define FXSYS_SEEK_SET SEEK_SET
926 
930  #define FXSYS_fseek fseek
931 
935  #define FXSYS_ftell ftell
936 
940  #define FXSYS_fread fread
941 
945  #define FXSYS_fwrite fwrite
946 
950  #define FXSYS_fprintf fprintf
951 
955  #define FXSYS_fflush fflush
956  #else
957  #define FXSYS_FILE void
958  FXSYS_FILE* FXSYS_fopen(const char* filename, const char* mode);
959  int FXSYS_fclose(FXSYS_FILE*);
960  #define FXSYS_SEEK_END 2
961  #define FXSYS_SEEK_SET 0
962  int FXSYS_fseek(FXSYS_FILE*, long, int);
963  long FXSYS_ftell(FXSYS_FILE*);
964  size_t FXSYS_fread(void*, size_t, size_t, FXSYS_FILE*);
965  long FXSYS_fwrite(const void*, long, long, FXSYS_FILE*);
966  int FXSYS_fprintf(FXSYS_FILE*, const char*, ...);
967  int FXSYS_fflush(FXSYS_FILE*);
968  #endif
969 
970  // For now, we provide wide-string file name support for Windows only
971  #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_
972 
976  #ifdef _NATIVE_WCHAR_T_DEFINED
977  #define FXSYS_wfopen(f, m) _wfopen((const wchar_t*)(f), (const wchar_t*)(m))
978  #else
979  #define FXSYS_wfopen _wfopen
980  #endif
981  #else
982  FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode);
983  #endif
984 
991 
992  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
993  /* Basic wide string operations, not available in ADS/RVCT/PACC/Android/MIPS_SDE */
994  #if _FX_OS_ != _FX_VXWORKS_ && _FX_OS_ != _FX_ANDROID_ && !defined(_FX_NO_ANSIC_) && _FX_COMPILER_ != _FX_ADS_ && _FX_COMPILER_ != _FX_RVCT_ && _FX_COMPILER_ != _FX_PACC_ && _FX_COMPILER_ != _FX_TMS470_ && _FX_COMPILER_ != _FX_MIPS_SDE_
995  #ifdef _NATIVE_WCHAR_T_DEFINED
996  #define FXSYS_wcslen(str) wcslen((wchar_t*)(str))
997  #define FXSYS_wcscmp(str1, str2) wcscmp((wchar_t*)(str1), (wchar_t*)(str2))
998  #else
999 
1003  #define FXSYS_wcslen wcslen
1004 
1008  #define FXSYS_wcscmp wcscmp
1009  #endif
1010  #else
1011  size_t FXSYS_wcslen(const wchar_t*);
1012  int FXSYS_wcscmp(const wchar_t*, const wchar_t*);
1013  #endif
1014 
1015  /* Some other wide string functions, not available in ADS/RVCT/GCCE/PACC/Android/MIPS_SDE */
1016  #if _FX_OS_ != _FX_VXWORKS_ && _FX_OS_ != _FX_ANDROID_ && !defined(_FX_NO_ANSIC_) && _FX_COMPILER_ != _FX_ADS_ && _FX_COMPILER_ != _FX_RVCT_ && !(_FX_COMPILER_ == _FX_GCC_ && _FX_OS_ == _FX_SYMBIAN_) && _FX_COMPILER_ != _FX_PACC_ && _FX_COMPILER_ != _FX_TMS470_ && _FX_COMPILER_ != _FX_MIPS_SDE_
1017  #ifdef _NATIVE_WCHAR_T_DEFINED
1018  #define FXSYS_wcschr(str, ch) (FX_LPCWSTR)wcschr((wchar_t*)(str), ch)
1019  #define FXSYS_wcsstr(str1, str2) (FX_LPCWSTR)wcsstr((wchar_t*)(str1), (wchar_t*)(str2))
1020  #define FXSYS_wcsncmp(str1, str2, n) wcsncmp((wchar_t*)(str1), (wchar_t*)(str2), n)
1021  #else
1022 
1026  #define FXSYS_wcschr wcschr
1027 
1031  #define FXSYS_wcsstr wcsstr
1032 
1036  #define FXSYS_wcsncmp wcsncmp
1037  #endif
1038 
1042  #define FXSYS_vswprintf vswprintf
1043  #else
1044  wchar_t* FXSYS_wcschr(const wchar_t*, wchar_t);
1045  wchar_t* FXSYS_wcsstr(const wchar_t*, const wchar_t*);
1046  int FXSYS_wcsncmp(const wchar_t*, const wchar_t*, size_t);
1047  #if _FX_OS_ != _FX_ANDROID_
1048  int FXSYS_vswprintf(wchar_t*, const wchar_t*, va_list);
1049  #else
1050  #define FXSYS_vswprintf vswprintf
1051  #endif
1052  #endif
1053 
1054  #if !defined(_FX_NO_ANSIC_) && _FX_COMPILER_ != _FX_TMS470_
1055 
1059  #define FXSYS_mbstowcs mbstowcs
1060 
1064  #define FXSYS_wcstombs wcstombs
1065  #else
1066  size_t FXSYS_mbstowcs(wchar_t *dest, const char *src, size_t n);
1067  size_t FXSYS_wcstombs(char *dest, const wchar_t *src, size_t n);
1068  #endif
1069  //<<<+++OPENSOURCE_MUST_END
1070 
1073  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
1078 
1079  #if !defined(_FX_NO_ANSIC_)
1080 
1084  #define FXSYS_memcmp memcmp
1085 
1089  #define FXSYS_memcpy memcpy
1090 
1096  #define FXSYS_memmove memmove
1097 
1101  #define FXSYS_memset memset
1102 
1106  #define FXSYS_memchr memchr
1107  #else
1108  int FXSYS_memcmp(const void*, const void*, size_t);
1109  void* FXSYS_memcpy(void*, const void*, size_t);
1110  void* FXSYS_memmove(void*, const void*, size_t);
1111  void* FXSYS_memset(void*, int, size_t);
1112  void* FXSYS_memchr(const void*, int, size_t);
1113  #endif
1114 
1117  /* Others */
1118  #if !defined(_FX_NO_ANSIC_)
1119 
1123  #define FXSYS_qsort qsort
1124  #else
1125  void FXSYS_qsort(void*, unsigned, unsigned, int (*)(const void*, const void*));
1126  #endif
1127 
1128  #if _FX_OS_ != _FX_WIN32_MOBILE_ && !defined(_FX_NO_ANSIC_) && _FX_OS_ != _FX_SYMBIAN_
1129 
1133  #define FXSYS_bsearch bsearch
1134  #else
1135  /* WinCE doesn't support bsearch. The bsearch function comes with Symbian also has crash problem. */
1136  void * FXSYS_bsearch(const void *key, const void *base, size_t num, size_t width, int (*compare)(const void *, const void *));
1137  #endif
1138 
1139  #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
1140  /* On Windows platform, we can replace more system calls */
1141 
1146  #define FXSYS_itoa _itoa
1147 
1151  #define FXSYS_strlwr _strlwr
1152 
1156  #define FXSYS_strupr _strupr
1157 
1161  #define FXSYS_stricmp _stricmp
1162 
1163  #ifdef _NATIVE_WCHAR_T_DEFINED
1164  #define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2))
1165  #define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8)
1166  #define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6)
1167  #define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str))
1168  #define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str))
1169  #else
1170 
1174  #define FXSYS_wcsicmp _wcsicmp
1175 
1179  #define FXSYS_WideCharToMultiByte WideCharToMultiByte
1180 
1184  #define FXSYS_MultiByteToWideChar MultiByteToWideChar
1185 
1189  #define FXSYS_wcslwr _wcslwr
1190 
1194  #define FXSYS_wcsupr _wcsupr
1195  #endif
1196 
1197  #ifndef _FX_WINAPI_PARTITION_DESKTOP_
1198  int FXSYS_IntersectRect(struct FX_RECT*, const struct FX_RECT*, const struct FX_RECT*);
1199  int FXSYS_GetACP(void);
1200  FX_DWORD FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);
1201  FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);
1202  #else
1203 
1207  #define FXSYS_GetFullPathName GetFullPathName
1208 
1212  #define FXSYS_GetModuleFileName GetModuleFileName
1213 
1217  #define FXSYS_GetACP GetACP
1218  #endif
1219  #else
1220  char* FXSYS_itoa(int value, char* string, int radix);
1221  int FXSYS_GetACP(void);
1222  int FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen,
1223  char* buf, int buflen, const char* default_str, int* pUseDefault);
1224  int FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen,
1225  wchar_t* buf, int buflen);
1226  FX_DWORD FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);
1227  FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);
1228 
1229  char* FXSYS_strlwr(char* str);
1230  char* FXSYS_strupr(char* str);
1231  int FXSYS_stricmp(const char*, const char*);
1232  int FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2);
1233 
1234  wchar_t* FXSYS_wcslwr(wchar_t* str);
1235  wchar_t* FXSYS_wcsupr(wchar_t* str);
1236  #endif
1237  //<<<+++OPENSOURCE_MUST_END
1238 
1239  //*****************************************************************************
1240  //* Memory utilities
1241  //*****************************************************************************
1246 
1259  void* FXSYS_memcpy32(void* dst, const void* src, size_t size);
1260 
1277  FX_INT32 FXSYS_memcmp32(const void* buf1, const void* buf2, size_t size);
1278 
1290  void* FXSYS_memset32(void* dst, FX_INT32 v, size_t size);
1291 
1303  void* FXSYS_memset8(void* dst, FX_BYTE v, size_t size);
1304 
1314  void* FXSYS_memmove32(void* dst, const void* src, size_t size);
1316 //<<<+++OPENSOURCE_MUST_END
1317 
1318 //<<<+++OPENSOURCE_MUST_BEGIN
1319 #ifdef __cplusplus
1320 }
1321 #endif
1322 //<<<+++OPENSOURCE_MUST_END
1323 
1324  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
1329 
1330  #if _FX_OS_ == _FX_PALMOS_ && _FX_COMPILER_ == _FX_METROWERKS_
1331  #ifdef __cplusplus
1332  extern "C" {
1333  #endif
1334 
1335  /* Metrowerks for Palm OS (9.3) doesn't support standard math.h */
1336  extern double __ieee754_pow(double, double);
1337  extern double __ieee754_sqrt(double);
1338  extern double __fabs(double);
1339  extern double __ieee754_atan2(double, double);
1340  extern double __ceil(double);
1341  extern double __floor(double);
1342  extern double __cos(double);
1343  extern double __ieee754_acos(double);
1344  extern double __sin(double);
1345  extern double __ieee754_log(double);
1346  extern double __ieee754_log10(double);
1347 
1348  #define FXSYS_pow(x, y) __ieee754_pow(x, y)
1349  #define FXSYS_sqrt(x) __ieee754_sqrt(x)
1350  #define FXSYS_fabs(x) __fabs(x)
1351  #define FXSYS_atan2(x, y) __ieee754_atan2(x, y)
1352  #define FXSYS_ceil(x) __ceil(x)
1353  #define FXSYS_floor(x) __floor(x)
1354  #define FXSYS_cos(x) __cos(x)
1355  #define FXSYS_acos(x) __ieee754_acos(x)
1356  #define FXSYS_sin(x) __sin(x)
1357  #define FXSYS_log(x) __ieee754_log(x)
1358  #define FXSYS_log10(x) __ieee754_log10(x)
1359 
1360  #ifdef __cplusplus
1361  }
1362  #endif
1363  #else
1364  #include <math.h>
1365  #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ || _FX_OS_ == _FX_LINUX_DESKTOP_
1366 
1370  #define FXSYS_pow powf
1371 
1375  #define FXSYS_sqrt sqrtf
1376 
1380  #define FXSYS_fabs fabsf
1381 
1385  #define FXSYS_atan2 atan2f
1386 
1390  #define FXSYS_ceil ceilf
1391 
1395  #define FXSYS_floor floorf
1396 
1400  #define FXSYS_cos cosf
1401 
1405  #define FXSYS_acos acosf
1406 
1410  #define FXSYS_sin sinf
1411 
1415  #define FXSYS_log logf
1416 
1420  #define FXSYS_log10 log10f
1421 
1425  #define FXSYS_fmod fmodf
1426  #else
1427  #define FXSYS_pow(a, b) (FX_FLOAT)pow(a, b)
1428  #define FXSYS_sqrt(a) (FX_FLOAT)sqrt(a)
1429  #define FXSYS_fabs(a) (FX_FLOAT)fabs(a)
1430  #define FXSYS_atan2(a, b) (FX_FLOAT)atan2(a, b)
1431  #define FXSYS_ceil(a) (FX_FLOAT)ceil(a)
1432  #define FXSYS_floor(a) (FX_FLOAT)floor(a)
1433  #define FXSYS_cos(a) (FX_FLOAT)cos(a)
1434  #define FXSYS_acos(a) (FX_FLOAT)acos(a)
1435  #define FXSYS_sin(a) (FX_FLOAT)sin(a)
1436  #define FXSYS_log(a) (FX_FLOAT)log(a)
1437  #define FXSYS_log10(a) (FX_FLOAT)log10(a)
1438  #define FXSYS_fmod(a, b) (FX_FLOAT)fmod(a, b)
1439  #endif
1440  #endif
1441 
1442  #if !defined(_FX_NO_ANSIC_)
1443 
1447  #define FXSYS_abs abs
1448  #else
1449  #define FXSYS_abs(a) ((a)<0?-(a):(a))
1450  #endif
1451 
1453  //<<<+++OPENSOURCE_MUST_END
1454 
1455 //<<<+++OPENSOURCE_MUST_BEGIN
1456 #ifdef __cplusplus
1457 extern "C" {
1458 #endif
1459 //<<<+++OPENSOURCE_MUST_END
1460 
1461  //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
1462  #ifdef _FX_NO_GLOBAL_
1463  /* If platform doesn't support global variable, then we have to get from static functions */
1465  void FXSYS_SetStaticPointer1(void*);
1467  void* FXSYS_GetStaticPointer1(void);
1469  void FXSYS_SetStaticPointer2(void*);
1471  void* FXSYS_GetStaticPointer2(void);
1472  #endif
1473 
1474  /* CPU byte order */
1475  #if _FX_ENDIAN_ == _FX_BIG_ENDIAN_
1476  #define _FX_MSB_FIRST_
1477  #define FXDWORD_FROM_LSBFIRST(i) ( ((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24) )
1478  #define FXDWORD_FROM_MSBFIRST(i) (i)
1479  #else
1480  #define _FX_LSB_FIRST_
1481  #define FXDWORD_FROM_LSBFIRST(i) (i)
1482  #define FXDWORD_FROM_MSBFIRST(i) ( ((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24) )
1483  #endif
1484 
1485  #if _FX_CPU_ == _FX_X86_ || _FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_ARM64_
1486  #define FXDWORD_GET_LSBFIRST(p) (*(FX_DWORD*)(p))
1487  #else
1488  #define FXDWORD_GET_LSBFIRST(p) ((((FX_LPBYTE)(p))[3] << 24) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0]))
1489  #endif
1490 
1491 #define FXDWORD_GET_MSBFIRST(p) ((((FX_LPBYTE)(p))[0] << 24) | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | (((FX_LPBYTE)(p))[3]))
1492 
1493 #define FXSYS_HIBYTE(word) ((FX_BYTE)((word) >> 8))
1494 #define FXSYS_LOBYTE(word) ((FX_BYTE)(word))
1495 #define FXSYS_HIWORD(dword) ((FX_WORD)((dword) >> 16))
1496 #define FXSYS_LOWORD(dword) ((FX_WORD)(dword))
1497 
1499 #define FXSYS_strtol strtol
1500 
1524 FX_INT64 FXSYS_atoi64(FX_LPCSTR str);
1532 FX_INT64 FXSYS_wtoi64(FX_LPCWSTR str);
1542 FX_LPCSTR FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix);
1552 FX_LPCWSTR FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix);
1560 int FXSYS_round(FX_FLOAT f);
1562 #define FXSYS_Mul(a, b) ((a) * (b))
1563 
1564 #define FXSYS_Div(a, b) ((a) / (b))
1565 
1566 #define FXSYS_MulDiv(a, b, c) ((a) * (b) / (c))
1567 
1568 #define FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b))
1569 
1570 //*****************************************************************************
1571 //* Multiple thread controls
1572 //*****************************************************************************
1574 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
1575  typedef CRITICAL_SECTION FX_MUTEX;
1576  FX_DEFINEHANDLE(FX_RWLOCK)
1577 #elif _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_LINUX_EMBEDDED_ || _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_ANDROID_
1578  #include <pthread.h>
1579  typedef pthread_mutex_t FX_MUTEX;
1580  #if _FX_OS_ == _FX_ANDROID_
1581  FX_DEFINEHANDLE(FX_RWLOCK)
1582  #else
1583  typedef pthread_rwlock_t FX_RWLOCK;
1584  #endif
1585 #else
1587  FX_DEFINEHANDLE(FX_RWLOCK)
1588 #endif
1589 // The following five functions are defined in fx_process.h, please refer there.
1591 void FX_Mutex_Destroy(FX_MUTEX* pMutex);
1593 void FX_Mutex_Lock(FX_MUTEX* pMutex);
1594 void FX_Mutex_Unlock(FX_MUTEX* pMutex);
1595 
1596 #define FX_CRITICAL_SECTION FX_MUTEX
1597 #define FX_InitializeCriticalSection(a) FX_Mutex_Initialize(a)
1598 #define FX_DeleteCriticalSection(a) FX_Mutex_Destroy(a)
1599 #define FX_TryEnterCriticalSection(a) FX_Mutex_TryLock(a)
1600 #define FX_EnterCriticalSection(a) FX_Mutex_Lock(a)
1601 #define FX_LeaveCriticalSection(a) FX_Mutex_Unlock(a)
1602 
1604 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
1605  typedef void* FX_SPINLOCK;
1606 #elif _FX_OS_ == _FX_LINUX_DESKTOP_
1607  #ifdef _FX_SPINLOCK_USEGCCCAS_
1608  typedef size_t FX_SPINLOCK;
1609  #else
1610 #ifndef _CHROME_PNACL_
1611  typedef pthread_spinlock_t FX_SPINLOCK;
1612 #else
1613  typedef size_t FX_SPINLOCK;
1614 #endif
1615  #endif
1616 #elif _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_
1617  typedef OSSpinLock FX_SPINLOCK;
1618 #else // android/embeded linux/other os
1620 #endif
1621 //<<<+++OPENSOURCE_MUST_END
1622 
1623 //<<<+++OPENSOURCE_MUST_BEGIN
1624 #ifdef __cplusplus
1625 };
1626 #endif
1627 //<<<+++OPENSOURCE_MUST_END
1628 
1629 #if _FX_OS_ == _FX_PALMOS_ && _FX_COMPILER_ == _FX_PACC_
1630  #include <errtrycatch.h>
1631  #define setjmp ErrSetJump
1632  #define longjmp ErrLongJump
1633  #define jmp_buf ErrJumpBuf
1634 #else
1635  #include <setjmp.h>
1636 #endif
1637 
1638 #if _FX_OS_ == _FX_MACOSX_
1639  #include <Carbon/Carbon.h>
1640 #elif _FX_OS_ == _FX_IOS_
1641  #include <CoreText/CoreText.h>
1642  #include <CoreGraphics/CoreGraphics.h>
1643 #endif
1644 //<<<+++OPENSOURCE_MUST_END
1645 //<<<+++OPENSOURCE_MUST_BEGIN
1646 #endif /* _FPDF_SYSTEM_H_ */
1647 //<<<+++OPENSOURCE_MUST_END
1648 
1651 //<<<+++OPENSOURCE_END
void * FXSYS_memset8(void *dst, FX_BYTE v, size_t size)
Set buffer data to specified value.
FX_BOOL FX_Mutex_TryLock(FX_MUTEX *pMutex)
Try to lock a mutex.
void * FX_LPVOID
Pointer to any type.
Definition: fx_system.h:633
FX_BOOL FX_Mutex_Initialize(FX_MUTEX *pMutex)
Initialize a mutex.
wchar_t FX_WCHAR
Compiler dependant Unicode character (16-bit for Microsoft Compiler, 32-bit for gcc).
Definition: fx_system.h:708
#define FXSYS_wcslwr
Convert a wide-character string to lowercase.
Definition: fx_system.h:1189
unsigned long FX_DWORD
32-bit unsigned integer.
Definition: fx_system.h:698
#define FXSYS_mbstowcs
Converts a sequence of multi-byte characters to a corresponding sequence of wide characters.
Definition: fx_system.h:1059
FX_LPCWSTR FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix)
Convert an integer to an wide string.
#define FXSYS_fwrite
Writes data to a file.
Definition: fx_system.h:945
#define FXSYS_fprintf
Print formatted data to a file.
Definition: fx_system.h:950
FX_LPCSTR FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix)
Convert an integer to an ANSI string.
#define FXSYS_wcsncmp
Compare characters of two wide-character strings.
Definition: fx_system.h:1036
#define FXSYS_FILE
File structure.
Definition: fx_system.h:905
void const * FX_LPCVOID
Pointer to any constant type.
Definition: fx_system.h:635
int FXSYS_round(FX_FLOAT f)
Get nearest integer.
#define FXSYS_strcpy
Copy an ANSIC string.
Definition: fx_system.h:869
#define FXSYS_fflush
Flush file.
Definition: fx_system.h:955
FX_DWORD FX_UINT32
unsigned 32bits integer.
Definition: fx_system.h:744
wchar_t const * FX_LPCWSTR
Pointer to constant Unicode characters.
Definition: fx_system.h:712
#define FXSYS_GetFullPathName
Get the full path and file name of a specified file.
Definition: fx_system.h:1207
#define FXSYS_strlen
Get the length of a ANSIC string.
Definition: fx_system.h:854
#define FXSYS_wcsupr
Convert a wide-character string to uppercase.
Definition: fx_system.h:1194
#define FXSYS_strncpy
Copy an ANSIC string with length limitation.
Definition: fx_system.h:874
#define FXSYS_wcschr
Find a wide-character in a wide-character string.
Definition: fx_system.h:1026
FX_INT32 FXSYS_memcmp32(const void *buf1, const void *buf2, size_t size)
Compare data in two buffers.
char * FX_LPSTR
Pointer to 8-bit Windows (ANSI) characters.
Definition: fx_system.h:677
#define FXSYS_wfopen
Open a file using wide-string parameters. Only supported on Windows platforms now.
Definition: fx_system.h:979
#define FXSYS_memmove
Moves one buffer to another. If some regions of the source area and the destination overlap...
Definition: fx_system.h:1096
CRITICAL_SECTION FX_MUTEX
Definition for mutex/critical section and read-write lock.
Definition: fx_system.h:1575
#define FXSYS_memcpy
Copy from one buffer to another.
Definition: fx_system.h:1089
void * FX_POSITION
A value used to denote the position of an element in a collection.
Definition: fx_system.h:637
#define FXSYS_vswprintf
Write formatted output wide character string using a pointer to a list of arguments.
Definition: fx_system.h:1042
#define FXSYS_itoa
Convert an integer to a ANSIC string.
Definition: fx_system.h:1146
FX_INT64 FXSYS_atoi64(FX_LPCSTR str)
Convert an ANSI string to an integer.
#define FXSYS_strchr
Find a character in a ANSIC string.
Definition: fx_system.h:849
#define FXSYS_strlwr
Convert a ANSIC string to lowercase.
Definition: fx_system.h:1151
int FX_INT32
32-bit signed integer.
Definition: fx_system.h:662
#define FXSYS_GetModuleFileName
Get the fully-qualified path for specified module.
Definition: fx_system.h:1212
void * FXSYS_memset32(void *dst, FX_INT32 v, size_t size)
Set buffer data to specified value.
#define FXSYS_memcmp
Compares two buffers.
Definition: fx_system.h:1084
int FX_BOOL
Boolean variable (should be TRUE or FALSE).
Definition: fx_system.h:666
unsigned short * FX_LPWORD
Pointer to a WORD.
Definition: fx_system.h:658
#define FXSYS_fseek
Moves the file pointer to a specified location.
Definition: fx_system.h:930
char const * FX_LPCSTR
Pointer to constant 8-bit Windows (ANSI) characters.
Definition: fx_system.h:679
#define FXSYS_wcslen
Get the length of a wide-character string.
Definition: fx_system.h:1003
FX_INT64 FXSYS_wtoi64(FX_LPCWSTR str)
Convert a wide string to an integer.
signed char FX_INT8
Signed 8bits integer.
Definition: fx_system.h:640
#define FXSYS_wcscmp
Compare wide-character strings.
Definition: fx_system.h:1008
#define FXSYS_GetACP
Retrieve the current ANSI code-page identifier for the system.
Definition: fx_system.h:1217
FX_INT32 FXSYS_wtoi(FX_LPCWSTR str)
Convert a wide string to an integer.
#define FXSYS_fread
Reads data from a file.
Definition: fx_system.h:940
UINT_PTR FX_UINTPTR
Unsigned integral type for pointer precision.
Definition: fx_system.h:729
#define FXSYS_qsort
Performs a quick sort. A generic algorithm.
Definition: fx_system.h:1123
#define FXSYS_wcsicmp
Compare two wide character strings. case-insensitive.
Definition: fx_system.h:1174
void * FX_SPINLOCK
Definition for spinlock.
Definition: fx_system.h:1605
unsigned long * FX_LPDWORD
Pointer to a DWORD.
Definition: fx_system.h:700
short FX_SHORT
Short integer (16 bits).
Definition: fx_system.h:654
#define FXSYS_fopen
Open a file.
Definition: fx_system.h:910
#define FXSYS_bsearch
Performs a binary search of a sorted array. A generic algorithm.
Definition: fx_system.h:1133
#define FXSYS_MultiByteToWideChar
Maps a character string to a wide-character string.
Definition: fx_system.h:1184
void FX_Mutex_Destroy(FX_MUTEX *pMutex)
Destroy a mutex.
unsigned char * FX_LPBYTE
Pointer to a FX_BYTE.
Definition: fx_system.h:646
#define FXSYS_strstr
Find a substring.
Definition: fx_system.h:879
#define FXSYS_wcsstr
Find a sub-wide-character-string.
Definition: fx_system.h:1031
char FX_CHAR
8-bit Windows (ANSI) character.
Definition: fx_system.h:675
float FX_FLOAT
32-bit floating-point number.
Definition: fx_system.h:664
#define FXSYS_assert
Assertion.
Definition: fx_system.h:779
unsigned short FX_UINT16
Unsigned 16bits integer.
Definition: fx_system.h:652
#define FXSYS_memchr
Search for a byte in a memory block.
Definition: fx_system.h:1106
#define FXSYS_strcmp
Compare ANSIC strings.
Definition: fx_system.h:864
#define FXSYS_WideCharToMultiByte
Maps a wide-character string to a character string.
Definition: fx_system.h:1179
Definition: fx_coordinates.h:458
unsigned char FX_UINT8
Unsigned 8bits integer.
Definition: fx_system.h:642
unsigned short const * FX_LPCWORD
Pointer to a WORD.
Definition: fx_system.h:660
#define FXSYS_fclose
Close a file.
Definition: fx_system.h:915
void FX_Mutex_Unlock(FX_MUTEX *pMutex)
Unlock a mutex.
#define FXSYS_ftell
Gets the current position of a file pointer.
Definition: fx_system.h:935
#define FXSYS_stricmp
Compare two ANSIC strings. case-insensitive.
Definition: fx_system.h:1161
#define FXSYS_strncmp
Compare characters of two ANSIC strings.
Definition: fx_system.h:859
void FX_Mutex_Lock(FX_MUTEX *pMutex)
Lock a mutex.
unsigned short FX_WORD
16-bit unsigned integer.
Definition: fx_system.h:656
short FX_INT16
Signed 16bits integer.
Definition: fx_system.h:650
#define FXSYS_memset
Use given character to initialize the buffer.
Definition: fx_system.h:1101
FX_INT32 FXSYS_atoi(FX_LPCSTR str)
Convert an ANSI string to an integer.
unsigned char const * FX_LPCBYTE
Pointer to a constant FX_BYTE.
Definition: fx_system.h:648
wchar_t * FX_LPWSTR
Pointer to Unicode characters.
Definition: fx_system.h:710
#define FXSYS_sprintf
Write formatted data to a ANSIC string.
Definition: fx_system.h:828
#define FX_DEFINEHANDLE(name)
Macro to define a handle type.
Definition: fx_system.h:749
#define FXSYS_wcstombs
Converts a sequence of wide characters to a corresponding sequence of multi-byte characters.
Definition: fx_system.h:1064
#define FXSYS_vsprintf
Write formatted output using a pointer to a list of arguments.
Definition: fx_system.h:844
void * FXSYS_memmove32(void *dst, const void *src, size_t size)
Move source buffer data into destination.
#define FXSYS_strupr
Convert a ANSIC string to uppercase.
Definition: fx_system.h:1156
void * FXSYS_memcpy32(void *dst, const void *src, size_t size)
Copy buffer data from source to destination.
FX_UINT64 FX_QWORD
unsigned quad-word integer.
Definition: fx_system.h:746
INT_PTR FX_INTPTR
Signed integral type for pointer precision.
Definition: fx_system.h:727
unsigned char FX_BYTE
Byte (8 bits).
Definition: fx_system.h:644
int FX_ERR
Error indicator.
Definition: fx_system.h:668

Foxit Software Corporation Logo
@2018 Foxit Software Incorporated. All rights reserved.