Foxit PDF Conversion SDK

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 #if defined(_FXM_PLATFORM_LINUX_JS_) || defined(_CHROME_PNACL_)
160 #define _FX_OS_ _FX_LINUX_DESKTOP_
161 #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
162 #endif
163
164 /* OS */
165
166 #ifndef _FX_OS_
167 #if defined(__SYMBIAN32__) || defined(__symbian__)
168 #define _FX_OS_ _FX_SYMBIAN_
169 #elif defined(_WIN32_WCE)
170 #define _FX_OS_ _FX_WIN32_MOBILE_
171 #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
172 #if defined (_WIN32_WCE) && (_WIN32_WCE == 0x600)
173 #define UNSUPPORT_CPP0X
174 #endif
175 #elif defined(__linux__) || defined(__native_client__)
176 #if ((defined(__arm__) || defined(__aarch64__)) && defined(__ARM_EABI__)) && (!defined(OS_CHROMEOS))
177 #define _FX_OS_ _FX_LINUX_EMBEDDED_
178 #else
179 #define _FX_OS_ _FX_LINUX_DESKTOP_
180 #endif
181 #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
182 #elif defined(__NetBSD__)
183 #define _FX_OS_ _FX_NETBSD_
184 #elif defined(_WIN64)
185 #define _FX_OS_ _FX_WIN64_
186 #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
187 #elif defined(_WIN32)
188 #define _FX_OS_ _FX_WIN32_DESKTOP_
189 #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
190 #elif defined(__sparc__)
191 #define _FX_OS_ _FX_SOLARIS_
192 #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
193 #elif defined(__ARMCC_VERSION) || defined(__ICCARM__) || defined(__TMS470__)
194 #define _FX_OS_ _FX_EMBEDDED_
195 #elif defined(__APPLE__)
196 #include "TargetConditionals.h"
197 #if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) || (defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR == 1)
198 #define _FX_OS_ _FX_IOS_
199 #else
200 #define _FX_OS_ _FX_MACOSX_
201 #endif
202 #define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_
203 #elif defined(__ARM_EABI__)
204 #define _FX_OS_ _FX_EMBEDDED_
205 #endif
206 #else
207 #if _FX_OS_ == _FX_ANDROID_
208 #ifndef _FXM_PLATFORM_
209 #define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_
210 #endif
211 #elif (_FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_ || _FX_OS_ == _FX_WIN32_DESKTOP_)
212 #ifndef _FXM_PLATFORM_
213 #define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
214 #endif
215 #elif (_FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_MACOSX_)
216 #ifndef _FXM_PLATFORM_
217 #define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_
218 #endif
219 #elif _FX_OS_ == _FX_SOLARIS_ || _FX_OS_ == _FX_LINUX_EMBEDDED_ || _FX_OS_ == _FX_LINUX_DESKTOP_
220 #ifndef _FXM_PLATFORM_
221 #define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
222 #endif
223 #endif
224 #endif //_FX_OS_
225
226 #if !defined(_FX_OS_) || _FX_OS_ == 0
227 #error Sorry, can not figure out what OS you are targeting to. Please specify _FX_OS_ macro.
228 #endif
229
230 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
231 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
232
233 #define _CRT_SECURE_NO_WARNINGS
234 #if defined(_MSC_VER) && _MSC_VER < 1300
235 #define _WIN32_WINNT 0x400
236 #endif
237 #if defined(_MSC_VER) && _MSC_VER < 1600
238 #define UNSUPPORT_CPP0X
239 #endif
240 #ifndef NOMINMAX
241 #define NOMINMAX
242 #endif
243 #include <windows.h>
244
245 #ifdef WINAPI_FAMILY
246 #if (0x00000001 == WINAPI_PARTITION_DESKTOP) && (0x00000002 == WINAPI_PARTITION_APP) //Macros in Windows Kit/8
247 #define _FX_WIN8_
248 #else //Macros in Windows Kit/8.1
249 #define _FX_WIN81_
250 #endif //(0x00000001 == WINAPI_PARTITION_DESKTOP) && (0x00000002 == WINAPI_PARTITION_APP)
251
252 #ifdef _FX_WIN8_
253 #if /*defined(WINAPI_FAMILY) && */((WINAPI_FAMILY&WINAPI_PARTITION_APP) == WINAPI_PARTITION_APP)
254
255 #define _FX_WINAPI_PARTITION_APP_
256 #endif
257 #if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY&WINAPI_PARTITION_DESKTOP) == WINAPI_PARTITION_DESKTOP)
258
259 #define _FX_WINAPI_PARTITION_DESKTOP_
260 #endif
261 #endif //_FX_WIN8_
262
263 #ifdef _FX_WIN81_
264
265 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
266
267 #define _FX_WINAPI_PARTITION_APP_
268 #endif
269
270 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
271
272 #define _FX_WINAPI_PARTITION_PHONE_APP_
273 #endif
274
275 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
276
277 #define _FX_WINAPI_PARTITION_DESKTOP_
278 #endif
279 #endif //_FX_WIN81_
280 #else // !defined(WINAPI_FAMILY)
281 #ifndef _WIN32_WCE
282 #define _FX_WINAPI_PARTITION_DESKTOP_
283 #endif
284 #endif //WINAPI_FAMILY
285 #endif //(_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
286 //<<<+++OPENSOURCE_MUST_END
287
294
296 #define _FX_VC6_ 1
297
298 #define _FX_VC7_ 2
299
300 #define _FX_VC8_ 3
301
302 #define _FX_GCC_ 4
303
304 #define _FX_ADS_ 5
305
306 #define _FX_RVCT_ 6
307
308 #define _FX_IARCC_ 7
309
310 #define _FX_NOKIA_X86_ 8
311
312 #define _FX_METROWERKS_ 9
313
314 #define _FX_PACC_ 10
315
316 #define _FX_TMS470_ 11
317
318 #define _FX_MIPS_SDE_ 12
319
320 /* Compiler */
321 #ifndef _FX_COMPILER_
322 #ifdef _MSC_VER
323 #if _MSC_VER >= 1400
324 #define _FX_COMPILER_ _FX_VC8_
325 #elif _MSC_VER >= 1300
326 #define _FX_COMPILER_ _FX_VC7_
327 #else
328
347 #define _FX_COMPILER_ _FX_VC6_
348 #endif
349 #elif defined(__GNUC__)
350 #define _FX_COMPILER_ _FX_GCC_
351 #elif defined(__ARMCC_VERSION)
352 #if __ARMCC_VERSION < 200000
353 #define _FX_COMPILER_ _FX_ADS_
354 #else
355 #define _FX_COMPILER_ _FX_RVCT_
356 #endif
357 #elif defined(__ICCARM__)
358 #define _FX_COMPILER_ _FX_IARCC_
359 #elif defined(_PACC_VER)
360 #define _FX_COMPILER_ _FX_PACC_
361 #elif defined(__TMS470__)
362 #define _FX_COMPILER_ _FX_TMS470_
363 #endif
364 #endif /* !_FX_COMPILER_ */
365 #if !defined(_FX_COMPILER_) || _FX_COMPILER_ == 0
366 #error Sorry, can not figure out what compiler you are using. Please specify _FX_COMPILER_ macro.
367 #endif
368 //<<<+++OPENSOURCE_MUST_END
369
376
378 #define _FX_X86_ 1
379
380 #define _FX_ARM_ 2
381
382 #define _FX_POWERPC_ 3
383
384 #define _FX_SPARC_ 4
385
386 #define _FX_IA64_ 5
387
388 #define _FX_MIPS_ 6
389
390 #define _FX_X64_ 7
391
392 #define _FX_ARM64_ 8
393
394 #define _FX_MIPS64_ 9
395
396 #define _FX_LOONGARCH64_ 10
397
398 #if defined(_FXM_PLATFORM_LINUX_JS_)
399 #define _FX_CPU_ _FX_X86_
400 #endif
401
402 #if defined(_CHROME_PNACL_)
403 #define _FX_CPU_ _FX_X86_
404 #endif
405 /* CPU */
406 #ifndef _FX_CPU_
407 #if defined(__arm__) || defined(ARM) || defined(_ARM_) || defined(__ARMCC_VERSION) || defined(__ICCARM__) || defined(__arm) || defined(arm9)
408 #define _FX_CPU_ _FX_ARM_
409 #elif defined(__arm64) || defined(__arm64__) || defined(__aarch64__) || defined(_ARM64_)
410 #define _FX_CPU_ _FX_ARM64_
411 #elif defined(_M_IX86) || defined(__i386__)
412
427 #define _FX_CPU_ _FX_X86_
428 #elif defined(_M_X64) || defined(__x86_64__)
429 #define _FX_CPU_ _FX_X64_
430 #elif defined(_M_IA64)
431 #define _FX_CPU_ _FX_IA64_
432 #elif defined(__POWERPC__)
433 #define _FX_CPU_ _FX_POWERPC_
434 #elif defined(__sparc__)
435 #define _FX_CPU_ _FX_SPARC_
436 #elif defined(__mips64)
437 #define _FX_CPU_ _FX_MIPS64_
438 #elif defined(__loongarch64)
439 #define _FX_CPU_ _FX_LOONGARCH64_
440 #elif defined(MIPS) || defined(_MIPS_) || defined(__mips)
441 #define _FX_CPU_ _FX_MIPS_
442 #endif
443 #endif
444 #if !defined(_FX_CPU_) || _FX_CPU_ == 0
445 #error Sorry, can not figure out what CPU you are targeting to. Please specify _FX_CPU_ macro.
446 #endif
447 //<<<+++OPENSOURCE_MUST_END
448
450 #ifdef _MSC_VER
451 #if _MSC_VER >= 1600
452 #define _FX_EMBEDFONT_PRINT_
453 #endif
454 #endif
455
460
461 //<<<+++OPENSOURCE_MUST_BEGIN
463 #define _FX_W32_ 1
464
465 #define _FX_W64_ 2
466
467 /* Word size or instruct length */
468 #ifndef _FX_WORDSIZE_
469 #if defined(_WIN64) || defined(__arm64) || defined(__arm64__) || defined(_M_AMD64) || \
470 defined(_M_X64) || defined(_M_IA64) || defined(__powerpc64__) || defined(__x86_64__) || \
471 __WORDSIZE == 64 || defined(__LP64__) || defined(__mips64) || defined(__loongarch64)
472 #define _FX_WORDSIZE_ _FX_W64_
473 #else
474 #define _FX_WORDSIZE_ _FX_W32_
475 #endif
476 #endif
477 //<<<+++OPENSOURCE_MUST_END
478
485
487 #define _FX_BIG_ENDIAN_ 1
488
489 #define _FX_LITTLE_ENDIAN_ 2
490
491 /* Byte Order */
492 #ifndef _FX_ENDIAN_
493 #if _FX_CPU_ == _FX_POWERPC_ || _FX_CPU_ == _FX_SPARC_
494 #define _FX_ENDIAN_ _FX_BIG_ENDIAN_
495 #else
496
505 #define _FX_ENDIAN_ _FX_LITTLE_ENDIAN_
506 #endif
507 #endif
508
511 /* Include basic headers */
512 #include <stddef.h>
513 #include <stdarg.h>
514 #include <setjmp.h>
515 #include <float.h>
516
517 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
518 #ifndef _FX_NO_ANSIC_
519 #include <stdlib.h>
520 #include <stdio.h>
521 #include <string.h>
522 #include <assert.h>
523 #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_)
524 #include <wchar.h>
525 #endif
526 #endif
527 //<<<+++OPENSOURCE_MUST_END
528
529 //<<<+++OPENSOURCE_MUST_BEGIN
530 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
531 #include <libkern/OSAtomic.h>
532 #if _FX_OS_ == _FX_MACOSX_
533 #include <Carbon/Carbon.h>
534 #elif _FX_OS_ == _FX_IOS_
535 #include <CoreText/CoreText.h>
536 #include <CoreGraphics/CoreGraphics.h>
537 #endif
538 #endif
539 //<<<+++OPENSOURCE_MUST_END
540
541 #ifdef _UNICODE
542 #define GetObject GetObjectW
543 #define GetModuleFileName GetModuleFileNameW
544 #define GetFullPathName GetFullPathNameW
545 #else
546
550 #define GetObject GetObjectA
551
556 #define GetModuleFileName GetModuleFileNameA
557
562 #define GetFullPathName GetFullPathNameA
563 #endif
564
565 #if ( _FX_OS_ == _FX_IOS_ && (_FX_CPU_ == _FX_ARM_ || _FX_CPU_ == _FX_ARM64_)) || (_FX_OS_ == _FX_ANDROID_) || (_FX_OS_ == _FX_WIN32_MOBILE_)
566 #ifndef _FXCORE_LIMITED_MEMORY_
567 #define _FXCORE_LIMITED_MEMORY_
568 #endif
569 #ifndef _FXCORE_LIMITED_CPU_
570 #define _FXCORE_LIMITED_CPU_
571 #endif
572 #endif
573
574 #if _FX_COMPILER_ == _FX_ADS_ || _FX_COMPILER_ == _FX_RVCT_ || _FX_COMPILER_ == _FX_TMS470_ || _FX_OS_ == _FX_ANDROID_
575 //#define _FX_NO_EXCEPTION_ //Removed by Malcolm J. Xue, Sep. 9th, 2010, should be defined outside
576 #define _FX_NO_NAMESPACE_
577 #endif
578
583
585 #define _FX_DEFAULT_TARGET_ 0
586
587 #define _FX_BREW_ 1
588
590 //<<<+++OPENSOURCE_MUST_END
591
592 #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_)
593 #ifndef _FX_NO_SIMD_
594 #if !defined(_FXM_PLATFORM_LINUX_JS_) && !defined(_CHROME_PNACL_) && (_FX_CPU_ != _FX_ARM_) && \
595 (_FX_CPU_ != _FX_ARM64_) && (_FX_CPU_ != _FX_MIPS_) && (_FX_CPU_ != _FX_MIPS64_) && \
596 (_FX_CPU_ != _FX_LOONGARCH64_)
597 #define _FXM_SIMD_
598 #endif
599 #endif
600 #endif
601 #if _FX_OS_ != _FX_MACOSX_
602 //#define _FXM_OPENMP_
603 #endif
604
605 #ifndef _FX_NO_OPENSSL_
606 #define _FX_NO_OPENSSL_
607 #endif
608
609 #if (((_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) && defined(_FX_WINAPI_PARTITION_DESKTOP_)) || _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_MACOSX_)
610 #ifndef _FX_NO_JPEG_TURBO_
611 #if !defined(_CHROME_PNACL_)
612 #define _FX_JPEG_TURBO_
613 #endif
614 #endif
615 #ifndef _FX_NO_OPENSSL_
616 #define _FXM_OPENSSL_
617 #endif
618 #define _FX_LARGEFILE_SUPPORT_
619 #ifndef _FX_NO_SIMD_
620 #define WITH_SIMD
621 #endif
622 #define _FPDF_STREAM_RENDER_
623 #ifndef _FX_ENABLE_OVERPRINT_
624 #define _FX_ENABLE_OVERPRINT_
625 #endif
626 #endif
627
628 #if _FX_OS_ == _FX_LINUX_EMBEDDED_
629 #ifndef _FX_ENABLE_OVERPRINT_
630 #define _FX_ENABLE_OVERPRINT_
631 #endif
632 #endif
633
634 #ifdef _FX_WINAPI_PARTITION_APP_
635 #define _FPDF_STREAM_RENDER_
636 #endif
637 //<<<+++OPENSOURCE_MUST_END
638
639 //<<<+++OPENSOURCE_MUST_BEGIN
640 #ifdef __cplusplus
641 extern "C" {
642 #endif
643 //<<<+++OPENSOURCE_MUST_END
644
650 typedef void* FX_LPVOID;
652 typedef void const* FX_LPCVOID;
654 typedef void* FX_POSITION;
655
657 typedef signed char FX_INT8;
659 typedef unsigned char FX_UINT8;
661 typedef unsigned char FX_BYTE;
663 typedef unsigned char* FX_LPBYTE;
665 typedef unsigned char const* FX_LPCBYTE;
667 typedef short FX_INT16;
669 typedef unsigned short FX_UINT16;
671 typedef short FX_SHORT;
673 typedef unsigned short FX_WORD;
675 typedef unsigned short* FX_LPWORD;
677 typedef unsigned short const* FX_LPCWORD;
679 typedef int FX_INT32;
681 typedef float FX_FLOAT;
682 #ifdef __cplusplus
683
684 typedef bool FX_BOOL;
685 #else
686
687 typedef int FX_BOOL;
688 #endif
689
690 typedef int FX_ERR;
692 #define FX_SUCCEEDED(Status) ((FX_ERR)(Status) >= 0)
693
694 #define FX_FAILED(Status) ((FX_ERR)(Status) < 0)
695
697 typedef char FX_CHAR;
699 typedef char* FX_LPSTR;
701 typedef char const* FX_LPCSTR;
702
703 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
713 #if !defined(_MSC_VER) && (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || _FX_CPU_ == _FX_ARM64_ || _FX_CPU_ == _FX_MIPS64_ || _FX_CPU_ == _FX_LOONGARCH64_)
714
715 typedef unsigned int FX_DWORD;
717 typedef unsigned int* FX_LPDWORD;
718 #else
719
720 typedef unsigned long FX_DWORD;
722 typedef unsigned long* FX_LPDWORD;
723 #endif
724
726 typedef wchar_t FX_WCHAR;
728 typedef wchar_t* FX_LPWSTR;
730 typedef wchar_t const* FX_LPCWSTR;
731
732 #ifdef _MSC_VER
733
734 typedef __int64 FX_INT64;
736 typedef unsigned __int64 FX_UINT64;
737 #else
738 typedef long long int FX_INT64;
739 typedef unsigned long long FX_UINT64;
740 #endif
741
742 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
743
744 typedef INT_PTR FX_INTPTR;
746 typedef UINT_PTR FX_UINTPTR;
747 #else
748 #if (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || _FX_CPU_ == _FX_ARM64_ || _FX_CPU_ == _FX_MIPS64_ || _FX_CPU_ == _FX_LOONGARCH64_)
749 typedef FX_INT64 FX_INTPTR;
750 typedef FX_UINT64 FX_UINTPTR;
751 #else
752 typedef int FX_INTPTR;
753 typedef unsigned int FX_UINTPTR;
754 #endif
755 #endif
756 //<<<+++OPENSOURCE_MUST_END
757
758 //<<<+++OPENSOURCE_MUST_BEGIN
760 typedef FX_DWORD FX_UINT32;
762 typedef FX_UINT64 FX_QWORD;
763
765 #define FX_DEFINEHANDLE(name) typedef struct _##name {FX_LPVOID pData;} * name;
766
767 #if defined(DEBUG) && !defined(_DEBUG)
768 #define _DEBUG
769 #endif
770
771 #ifndef __cplusplus
772 #ifndef TRUE
773
774 #define TRUE 1
775 #endif
776
777 #ifndef FALSE
778
779 #define FALSE 0
780 #endif
781 #endif
782
783 #ifndef NULL
784
785 #define NULL 0
786 #endif
787 //<<<+++OPENSOURCE_MUST_END
788
789 /* Assertion */
790
791 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
792 #if !defined(_FX_NO_ANSIC_)
793
797 #define FXSYS_assert assert
798 #else
799 void FXSYS_assert(int condition);
800 #endif
801 //<<<+++OPENSOURCE_MUST_END
802
803 //<<<+++OPENSOURCE_MUST_BEGIN
804 #ifndef ASSERT
805 #ifdef _DEBUG
806 #define ASSERT FXSYS_assert
807 #else
808
812 #define ASSERT(a)
813 #endif
814 #endif
815
817 #define FX_MAX(a, b) (((a) > (b)) ? (a) : (b))
818
819 #define FX_MIN(a, b) (((a) < (b)) ? (a) : (b))
820
822 #define FX_PI 3.1415926535897932384626433832795f
823
825 #if _FX_WORDSIZE_ == _FX_W64_ && _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
826 #define _FX_CRT_MALLOC_LIMIT_ 0x7fffffffffffffffL
827 #else
828 #define _FX_CRT_MALLOC_LIMIT_ 0x7fffffffL
829 #endif
830
831 //<<<+++OPENSOURCE_MUST_END
832
839
840 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
841 #if !defined(_FX_NO_ANSIC_)
842
846 #define FXSYS_sprintf sprintf
847
851 #ifdef _WIN32
852 #define FXSYS_snprintf _snprintf
853 #define FXSYS_vsnprintf _vsnprintf
854 #else
855 #define FXSYS_snprintf snprintf
856 #define FXSYS_vsnprintf vsnprintf
857 #endif
858
862 #define FXSYS_vsprintf vsprintf
863
867 #define FXSYS_strchr strchr
868
872 #define FXSYS_strlen strlen
873
877 #define FXSYS_strncmp strncmp
878
882 #define FXSYS_strcmp strcmp
883
887 #define FXSYS_strcpy strcpy
888
892 #define FXSYS_strncpy strncpy
893
897 #define FXSYS_strstr strstr
898 #else
899 int FXSYS_sprintf(char* buffer, const char* format, ...);
900 int FXSYS_vsprintf(char *buffer, const char *format, va_list args);
901 char* FXSYS_strchr(const char* str, int ch);
902 long FXSYS_strlen(const char* str);
903 int FXSYS_strncmp(const char* str1, const char* str2, size_t len);
904 int FXSYS_strcmp(const char* str1, const char* str2);
905 char* FXSYS_strcpy(char* dest, const char* src);
906 char* FXSYS_strncpy(char* dest, const char* src, size_t len);
907 char* FXSYS_strstr(const char *string, const char *strFind);
908 #endif
909 //<<<+++OPENSOURCE_MUST_END
910
917 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
918 #if !defined(_FX_NO_ANSIC_) && !defined(__EMSCRIPTEN__)
919
923 #define FXSYS_FILE FILE
924
928 #define FXSYS_fopen fopen
929
933 #define FXSYS_fclose fclose
934
938 #define FXSYS_SEEK_END SEEK_END
939
943 #define FXSYS_SEEK_SET SEEK_SET
944
948 #define FXSYS_fseek fseek
949
953 #define FXSYS_ftell ftell
954
958 #define FXSYS_fread fread
959
963 #define FXSYS_fwrite fwrite
964
968 #define FXSYS_fprintf fprintf
969
973 #define FXSYS_fflush fflush
974 #else
975 #define FXSYS_FILE void
976 FXSYS_FILE* FXSYS_fopen(const char* filename, const char* mode);
977 int FXSYS_fclose(FXSYS_FILE*);
978 #define FXSYS_SEEK_END 2
979 #define FXSYS_SEEK_SET 0
980 int FXSYS_fseek(FXSYS_FILE*, long, int);
981 long FXSYS_ftell(FXSYS_FILE*);
982 size_t FXSYS_fread(void*, size_t, size_t, FXSYS_FILE*);
983 long FXSYS_fwrite(const void*, long, long, FXSYS_FILE*);
984 int FXSYS_fprintf(FXSYS_FILE*, const char*, ...);
985 int FXSYS_fflush(FXSYS_FILE*);
986 #endif
987
988 // For now, we provide wide-string file name support for Windows only
989 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_
990
994 #ifdef _NATIVE_WCHAR_T_DEFINED
995 #define FXSYS_wfopen(f, m) _wfopen((const wchar_t*)(f), (const wchar_t*)(m))
996 #else
997 #define FXSYS_wfopen _wfopen
998 #endif
999 #else
1000 FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode);
1001 #endif
1002
1009
1010 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
1011 /* Basic wide string operations, not available in ADS/RVCT/PACC/Android/MIPS_SDE */
1012 #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_
1013 #ifdef _NATIVE_WCHAR_T_DEFINED
1014 #define FXSYS_wcslen(str) wcslen((wchar_t*)(str))
1015 #define FXSYS_wcscmp(str1, str2) wcscmp((wchar_t*)(str1), (wchar_t*)(str2))
1016 #else
1017
1021 #define FXSYS_wcslen wcslen
1022
1026 #define FXSYS_wcscmp wcscmp
1027 #endif
1028 #else
1029 size_t FXSYS_wcslen(const wchar_t*);
1030 int FXSYS_wcscmp(const wchar_t*, const wchar_t*);
1031 #endif
1032
1033 /* Some other wide string functions, not available in ADS/RVCT/GCCE/PACC/Android/MIPS_SDE */
1034 #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_
1035 #ifdef _NATIVE_WCHAR_T_DEFINED
1036 #define FXSYS_wcschr(str, ch) (FX_LPCWSTR)wcschr((wchar_t*)(str), ch)
1037 #define FXSYS_wcsstr(str1, str2) (FX_LPCWSTR)wcsstr((wchar_t*)(str1), (wchar_t*)(str2))
1038 #define FXSYS_wcsncmp(str1, str2, n) wcsncmp((wchar_t*)(str1), (wchar_t*)(str2), n)
1039 #else
1040
1044 #define FXSYS_wcschr wcschr
1045
1049 #define FXSYS_wcsstr wcsstr
1050
1054 #define FXSYS_wcsncmp wcsncmp
1055 #endif
1056
1060 #define FXSYS_vswprintf vswprintf
1061 #else
1062 wchar_t* FXSYS_wcschr(const wchar_t*, wchar_t);
1063 wchar_t* FXSYS_wcsstr(const wchar_t*, const wchar_t*);
1064 int FXSYS_wcsncmp(const wchar_t*, const wchar_t*, size_t);
1065 #if _FX_OS_ != _FX_ANDROID_
1066 int FXSYS_vswprintf(wchar_t*, const wchar_t*, va_list);
1067 #else
1068 #define FXSYS_vswprintf vswprintf
1069 #endif
1070 #endif
1071
1072 #if !defined(_FX_NO_ANSIC_) && _FX_COMPILER_ != _FX_TMS470_
1073
1077 #define FXSYS_mbstowcs mbstowcs
1078
1082 #define FXSYS_wcstombs wcstombs
1083 #else
1084 size_t FXSYS_mbstowcs(wchar_t *dest, const char *src, size_t n);
1085 size_t FXSYS_wcstombs(char *dest, const wchar_t *src, size_t n);
1086 #endif
1087 //<<<+++OPENSOURCE_MUST_END
1088
1091 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
1096
1097 #if !defined(_FX_NO_ANSIC_)
1098
1102 #define FXSYS_memcmp memcmp
1103
1107 #define FXSYS_memcpy memcpy
1108
1114 #define FXSYS_memmove memmove
1115
1119 #define FXSYS_memset memset
1120
1124 #define FXSYS_memchr memchr
1125 #else
1126 int FXSYS_memcmp(const void*, const void*, size_t);
1127 void* FXSYS_memcpy(void*, const void*, size_t);
1128 void* FXSYS_memmove(void*, const void*, size_t);
1129 void* FXSYS_memset(void*, int, size_t);
1130 void* FXSYS_memchr(const void*, int, size_t);
1131 #endif
1132
1135 /* Others */
1136 #if !defined(_FX_NO_ANSIC_)
1137
1141 #define FXSYS_qsort qsort
1142 #else
1143 void FXSYS_qsort(void*, unsigned, unsigned, int (*)(const void*, const void*));
1144 #endif
1145
1146 #if _FX_OS_ != _FX_WIN32_MOBILE_ && !defined(_FX_NO_ANSIC_) && _FX_OS_ != _FX_SYMBIAN_
1147
1151 #define FXSYS_bsearch bsearch
1152 #else
1153 /* WinCE doesn't support bsearch. The bsearch function comes with Symbian also has crash problem. */
1154 void * FXSYS_bsearch(const void *key, const void *base, size_t num, size_t width, int (*compare)(const void *, const void *));
1155 #endif
1156
1157 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
1158 /* On Windows platform, we can replace more system calls */
1159
1164 #define FXSYS_itoa _itoa
1165
1169 #define FXSYS_strlwr _strlwr
1170
1174 #define FXSYS_strupr _strupr
1175
1179 #define FXSYS_stricmp _stricmp
1180
1181 #ifdef _NATIVE_WCHAR_T_DEFINED
1182 #define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2))
1183 #define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8)
1184 #define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6)
1185 #define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str))
1186 #define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str))
1187 #else
1188
1192 #define FXSYS_wcsicmp _wcsicmp
1193
1197 #define FXSYS_WideCharToMultiByte WideCharToMultiByte
1198
1202 #define FXSYS_MultiByteToWideChar MultiByteToWideChar
1203
1207 #define FXSYS_wcslwr _wcslwr
1208
1212 #define FXSYS_wcsupr _wcsupr
1213 #endif
1214
1215 #ifndef _FX_WINAPI_PARTITION_DESKTOP_
1216 int FXSYS_IntersectRect(struct FX_RECT*, const struct FX_RECT*, const struct FX_RECT*);
1217 int FXSYS_GetACP(void);
1218 FX_DWORD FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);
1219 FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);
1220 #else
1221
1225 #define FXSYS_GetFullPathName GetFullPathName
1226
1230 #define FXSYS_GetModuleFileName GetModuleFileName
1231
1235 #define FXSYS_GetACP GetACP
1236 #endif
1237 #else
1238 char* FXSYS_itoa(int value, char* string, int radix);
1239 int FXSYS_GetACP(void);
1240 int FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen,
1241 char* buf, int buflen, const char* default_str, int* pUseDefault);
1242 int FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen,
1243 wchar_t* buf, int buflen);
1244 FX_DWORD FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);
1245 FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);
1246
1247 char* FXSYS_strlwr(char* str);
1248 char* FXSYS_strupr(char* str);
1249 int FXSYS_stricmp(const char*, const char*);
1250 int FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2);
1251
1252 wchar_t* FXSYS_wcslwr(wchar_t* str);
1253 wchar_t* FXSYS_wcsupr(wchar_t* str);
1254 #endif
1255 //<<<+++OPENSOURCE_MUST_END
1256
1257 //*****************************************************************************
1258 //* Memory utilities
1259 //*****************************************************************************
1264
1277 void* FXSYS_memcpy32(void* dst, const void* src, size_t size);
1278
1295 FX_INT32 FXSYS_memcmp32(const void* buf1, const void* buf2, size_t size);
1296
1308 void* FXSYS_memset32(void* dst, FX_INT32 v, size_t size);
1309
1321 void* FXSYS_memset8(void* dst, FX_BYTE v, size_t size);
1322
1332 void* FXSYS_memmove32(void* dst, const void* src, size_t size);
1334 //<<<+++OPENSOURCE_MUST_END
1335
1336 //<<<+++OPENSOURCE_MUST_BEGIN
1337 #ifdef __cplusplus
1338 }
1339 #endif
1340 //<<<+++OPENSOURCE_MUST_END
1341
1342 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
1347
1348 #if _FX_OS_ == _FX_PALMOS_ && _FX_COMPILER_ == _FX_METROWERKS_
1349 #ifdef __cplusplus
1350 extern "C" {
1351 #endif
1352
1353 /* Metrowerks for Palm OS (9.3) doesn't support standard math.h */
1354 extern double __ieee754_pow(double, double);
1355 extern double __ieee754_sqrt(double);
1356 extern double __fabs(double);
1357 extern double __ieee754_atan2(double, double);
1358 extern double __ceil(double);
1359 extern double __floor(double);
1360 extern double __cos(double);
1361 extern double __ieee754_acos(double);
1362 extern double __sin(double);
1363 extern double __ieee754_log(double);
1364 extern double __ieee754_log10(double);
1365
1366 #define FXSYS_pow(x, y) __ieee754_pow(x, y)
1367 #define FXSYS_sqrt(x) __ieee754_sqrt(x)
1368 #define FXSYS_fabs(x) __fabs(x)
1369 #define FXSYS_atan2(x, y) __ieee754_atan2(x, y)
1370 #define FXSYS_ceil(x) __ceil(x)
1371 #define FXSYS_floor(x) __floor(x)
1372 #define FXSYS_cos(x) __cos(x)
1373 #define FXSYS_acos(x) __ieee754_acos(x)
1374 #define FXSYS_sin(x) __sin(x)
1375 #define FXSYS_log(x) __ieee754_log(x)
1376 #define FXSYS_log10(x) __ieee754_log10(x)
1377
1378 #ifdef __cplusplus
1379 }
1380 #endif
1381 #else
1382 #include <math.h>
1383 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ || _FX_OS_ == _FX_LINUX_DESKTOP_
1384
1388 #define FXSYS_pow powf
1389
1393 #define FXSYS_sqrt sqrtf
1394
1398 #define FXSYS_fabs fabsf
1399
1403 #define FXSYS_atan2 atan2f
1404
1408 #define FXSYS_ceil ceilf
1409
1413 #define FXSYS_floor floorf
1414
1418 #define FXSYS_cos cosf
1419
1423 #define FXSYS_acos acosf
1424
1428 #define FXSYS_sin sinf
1429
1433 #define FXSYS_log logf
1434
1438 #define FXSYS_log10 log10f
1439
1443 #define FXSYS_fmod fmodf
1444 #else
1445 #define FXSYS_pow(a, b) (FX_FLOAT)pow(a, b)
1446 #define FXSYS_sqrt(a) (FX_FLOAT)sqrt(a)
1447 #define FXSYS_fabs(a) (FX_FLOAT)fabs(a)
1448 #define FXSYS_atan2(a, b) (FX_FLOAT)atan2(a, b)
1449 #define FXSYS_ceil(a) (FX_FLOAT)ceil(a)
1450 #define FXSYS_floor(a) (FX_FLOAT)floor(a)
1451 #define FXSYS_cos(a) (FX_FLOAT)cos(a)
1452 #define FXSYS_acos(a) (FX_FLOAT)acos(a)
1453 #define FXSYS_sin(a) (FX_FLOAT)sin(a)
1454 #define FXSYS_log(a) (FX_FLOAT)log(a)
1455 #define FXSYS_log10(a) (FX_FLOAT)log10(a)
1456 #define FXSYS_fmod(a, b) (FX_FLOAT)fmod(a, b)
1457 #endif
1458 #endif
1459
1460 #if !defined(_FX_NO_ANSIC_)
1461
1465 #define FXSYS_abs abs
1466 #else
1467 #define FXSYS_abs(a) ((a)<0?-(a):(a))
1468 #endif
1469
1471 //<<<+++OPENSOURCE_MUST_END
1472
1473 //<<<+++OPENSOURCE_MUST_BEGIN
1474 #ifdef __cplusplus
1475 extern "C" {
1476 #endif
1477 //<<<+++OPENSOURCE_MUST_END
1478
1479 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
1480 #ifdef _FX_NO_GLOBAL_
1481 /* If platform doesn't support global variable, then we have to get from static functions */
1483 void FXSYS_SetStaticPointer1(void*);
1485 void* FXSYS_GetStaticPointer1(void);
1487 void FXSYS_SetStaticPointer2(void*);
1489 void* FXSYS_GetStaticPointer2(void);
1490 #endif
1491
1492 /* CPU byte order */
1493 #if _FX_ENDIAN_ == _FX_BIG_ENDIAN_
1494 #define _FX_MSB_FIRST_
1495 #define FXDWORD_FROM_LSBFIRST(i) ( ((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24) )
1496 #define FXDWORD_FROM_MSBFIRST(i) (i)
1497 #else
1498 #define _FX_LSB_FIRST_
1499 #define FXDWORD_FROM_LSBFIRST(i) (i)
1500 #define FXDWORD_FROM_MSBFIRST(i) ( ((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24) )
1501 #endif
1502
1503 #if _FX_CPU_ == _FX_X86_ || _FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_ARM64_ || _FX_CPU_ == _FX_MIPS64_ || _FX_CPU_ == _FX_LOONGARCH64_
1504 #define FXDWORD_GET_LSBFIRST(p) (*(FX_DWORD*)(p))
1505 #else
1506 #define FXDWORD_GET_LSBFIRST(p) ((((FX_LPBYTE)(p))[3] << 24) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0]))
1507 #endif
1508
1509 #define FXDWORD_GET_MSBFIRST(p) ((((FX_LPBYTE)(p))[0] << 24) | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | (((FX_LPBYTE)(p))[3]))
1510
1511 #define FXSYS_HIBYTE(word) ((FX_BYTE)((word) >> 8))
1512 #define FXSYS_LOBYTE(word) ((FX_BYTE)(word))
1513 #define FXSYS_HIWORD(dword) ((FX_WORD)((dword) >> 16))
1514 #define FXSYS_LOWORD(dword) ((FX_WORD)(dword))
1515
1517 #define FXSYS_strtol strtol
1518
1526 FX_INT32 FXSYS_atoi(FX_LPCSTR str);
1534 FX_INT32 FXSYS_wtoi(FX_LPCWSTR str);
1542 FX_INT64 FXSYS_atoi64(FX_LPCSTR str);
1550 FX_INT64 FXSYS_wtoi64(FX_LPCWSTR str);
1560 FX_LPCSTR FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix);
1570 FX_LPCWSTR FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix);
1578 int FXSYS_round(FX_FLOAT f);
1580 #define FXSYS_Mul(a, b) ((a) * (b))
1581
1582 #define FXSYS_Div(a, b) ((a) / (b))
1583
1584 #define FXSYS_MulDiv(a, b, c) ((a) * (b) / (c))
1585
1586 #define FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b))
1587
1588 //*****************************************************************************
1589 //* Multiple thread controls
1590 //*****************************************************************************
1592 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
1593 typedef CRITICAL_SECTION FX_MUTEX;
1594 FX_DEFINEHANDLE(FX_RWLOCK)
1595 #elif _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_LINUX_EMBEDDED_ || _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_ANDROID_
1596 #include <pthread.h>
1597 typedef pthread_mutex_t FX_MUTEX;
1598 #if _FX_OS_ == _FX_ANDROID_
1599 FX_DEFINEHANDLE(FX_RWLOCK)
1600 #else
1601 typedef pthread_rwlock_t FX_RWLOCK;
1602 #endif
1603 #else
1604 FX_DEFINEHANDLE(FX_MUTEX)
1605 FX_DEFINEHANDLE(FX_RWLOCK)
1606 #endif
1607 // The following five functions are defined in fx_process.h, please refer there.
1608 FX_BOOL FX_Mutex_Initialize(FX_MUTEX* pMutex);
1609 void FX_Mutex_Destroy(FX_MUTEX* pMutex);
1610 FX_BOOL FX_Mutex_TryLock(FX_MUTEX* pMutex);
1611 void FX_Mutex_Lock(FX_MUTEX* pMutex);
1612 void FX_Mutex_Unlock(FX_MUTEX* pMutex);
1613
1614 #define FX_CRITICAL_SECTION FX_MUTEX
1615 #define FX_InitializeCriticalSection(a) FX_Mutex_Initialize(a)
1616 #define FX_DeleteCriticalSection(a) FX_Mutex_Destroy(a)
1617 #define FX_TryEnterCriticalSection(a) FX_Mutex_TryLock(a)
1618 #define FX_EnterCriticalSection(a) FX_Mutex_Lock(a)
1619 #define FX_LeaveCriticalSection(a) FX_Mutex_Unlock(a)
1620
1622 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_) && !defined(_FX_NO_WINDOWS_)
1623 typedef void* FX_SPINLOCK;
1624 #elif _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_==_FX_LINUX_EMBEDDED_
1625 #ifdef _FX_SPINLOCK_USEGCCCAS_
1626 typedef size_t FX_SPINLOCK;
1627 #else
1628 #ifndef _CHROME_PNACL_
1629 typedef pthread_spinlock_t FX_SPINLOCK;
1630 #else
1631 typedef size_t FX_SPINLOCK;
1632 #endif
1633 #endif
1634 #elif _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_
1635 typedef OSSpinLock FX_SPINLOCK;
1636 #else // android/embeded linux/other os
1637 FX_DEFINEHANDLE(FX_SPINLOCK)
1638 #endif
1639 //<<<+++OPENSOURCE_MUST_END
1640
1641 //<<<+++OPENSOURCE_MUST_BEGIN
1642 #ifdef __cplusplus
1643 };
1644 #endif
1645 //<<<+++OPENSOURCE_MUST_END
1646
1647 #if _FX_OS_ == _FX_PALMOS_ && _FX_COMPILER_ == _FX_PACC_
1648 #include <errtrycatch.h>
1649 #define setjmp ErrSetJump
1650 #define longjmp ErrLongJump
1651 #define jmp_buf ErrJumpBuf
1652 #else
1653 #include <setjmp.h>
1654 #endif
1655
1656 #if _FX_OS_ == _FX_MACOSX_
1657 #include <Carbon/Carbon.h>
1658 #elif _FX_OS_ == _FX_IOS_
1659 #include <CoreText/CoreText.h>
1660 #include <CoreGraphics/CoreGraphics.h>
1661 #endif
1662 //<<<+++OPENSOURCE_MUST_END
1663 //<<<+++OPENSOURCE_MUST_BEGIN
1664 #endif /* _FPDF_SYSTEM_H_ */
1665 //<<<+++OPENSOURCE_MUST_END
1666
1669 //<<<+++OPENSOURCE_END
FXSYS_memset8
void * FXSYS_memset8(void *dst, FX_BYTE v, size_t size)
Set buffer data to specified value.
FX_LPVOID
void * FX_LPVOID
Pointer to any type.
Definition: fx_system.h:650
FX_WCHAR
wchar_t FX_WCHAR
Compiler dependant Unicode character (16-bit for Microsoft Compiler, 32-bit for gcc).
Definition: fx_system.h:726
FXSYS_wcslwr
#define FXSYS_wcslwr
Convert a wide-character string to lowercase.
Definition: fx_system.h:1207
FX_DWORD
unsigned long FX_DWORD
32-bit unsigned integer.
Definition: fx_system.h:720
FXSYS_mbstowcs
#define FXSYS_mbstowcs
Converts a sequence of multi-byte characters to a corresponding sequence of wide characters.
Definition: fx_system.h:1077
FXSYS_i64tow
FX_LPCWSTR FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix)
Convert an integer to an wide string.
FXSYS_fwrite
#define FXSYS_fwrite
Writes data to a file.
Definition: fx_system.h:963
FXSYS_fprintf
#define FXSYS_fprintf
Print formatted data to a file.
Definition: fx_system.h:968
FXSYS_i64toa
FX_LPCSTR FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix)
Convert an integer to an ANSI string.
FXSYS_wcsncmp
#define FXSYS_wcsncmp
Compare characters of two wide-character strings.
Definition: fx_system.h:1054
FXSYS_FILE
#define FXSYS_FILE
File structure.
Definition: fx_system.h:923
FX_LPCVOID
void const * FX_LPCVOID
Pointer to any constant type.
Definition: fx_system.h:652
FXSYS_round
int FXSYS_round(FX_FLOAT f)
Get nearest integer.
FXSYS_strcpy
#define FXSYS_strcpy
Copy an ANSIC string.
Definition: fx_system.h:887
FXSYS_fflush
#define FXSYS_fflush
Flush file.
Definition: fx_system.h:973
FX_UINT32
FX_DWORD FX_UINT32
unsigned 32bits integer.
Definition: fx_system.h:760
FX_LPCWSTR
wchar_t const * FX_LPCWSTR
Pointer to constant Unicode characters.
Definition: fx_system.h:730
FXSYS_GetFullPathName
#define FXSYS_GetFullPathName
Get the full path and file name of a specified file.
Definition: fx_system.h:1225
FXSYS_strlen
#define FXSYS_strlen
Get the length of a ANSIC string.
Definition: fx_system.h:872
FXSYS_wcsupr
#define FXSYS_wcsupr
Convert a wide-character string to uppercase.
Definition: fx_system.h:1212
FXSYS_strncpy
#define FXSYS_strncpy
Copy an ANSIC string with length limitation.
Definition: fx_system.h:892
FXSYS_wcschr
#define FXSYS_wcschr
Find a wide-character in a wide-character string.
Definition: fx_system.h:1044
FXSYS_memcmp32
FX_INT32 FXSYS_memcmp32(const void *buf1, const void *buf2, size_t size)
Compare data in two buffers.
FX_LPSTR
char * FX_LPSTR
Pointer to 8-bit Windows (ANSI) characters.
Definition: fx_system.h:699
FXSYS_wfopen
#define FXSYS_wfopen
Open a file using wide-string parameters. Only supported on Windows platforms now.
Definition: fx_system.h:997
FXSYS_memmove
#define FXSYS_memmove
Moves one buffer to another. If some regions of the source area and the destination overlap,...
Definition: fx_system.h:1114
FX_MUTEX
CRITICAL_SECTION FX_MUTEX
Definition for mutex/critical section and read-write lock.
Definition: fx_system.h:1593
FXSYS_memcpy
#define FXSYS_memcpy
Copy from one buffer to another.
Definition: fx_system.h:1107
FX_POSITION
void * FX_POSITION
A value used to denote the position of an element in a collection.
Definition: fx_system.h:654
FXSYS_vswprintf
#define FXSYS_vswprintf
Write formatted output wide character string using a pointer to a list of arguments.
Definition: fx_system.h:1060
FXSYS_itoa
#define FXSYS_itoa
Convert an integer to a ANSIC string.
Definition: fx_system.h:1164
FX_INT64
__int64 FX_INT64
Signed 64-bit integer.
Definition: fx_system.h:734
FXSYS_atoi64
FX_INT64 FXSYS_atoi64(FX_LPCSTR str)
Convert an ANSI string to an integer.
FXSYS_strchr
#define FXSYS_strchr
Find a character in a ANSIC string.
Definition: fx_system.h:867
FXSYS_strlwr
#define FXSYS_strlwr
Convert a ANSIC string to lowercase.
Definition: fx_system.h:1169
FX_INT32
int FX_INT32
32-bit signed integer.
Definition: fx_system.h:679
FXSYS_GetModuleFileName
#define FXSYS_GetModuleFileName
Get the fully-qualified path for specified module.
Definition: fx_system.h:1230
FXSYS_memset32
void * FXSYS_memset32(void *dst, FX_INT32 v, size_t size)
Set buffer data to specified value.
FXSYS_memcmp
#define FXSYS_memcmp
Compares two buffers.
Definition: fx_system.h:1102
FX_BOOL
int FX_BOOL
Boolean variable (should be TRUE or FALSE).
Definition: fx_system.h:687
FX_LPWORD
unsigned short * FX_LPWORD
Pointer to a WORD.
Definition: fx_system.h:675
FXSYS_fseek
#define FXSYS_fseek
Moves the file pointer to a specified location.
Definition: fx_system.h:948
FX_LPCSTR
char const * FX_LPCSTR
Pointer to constant 8-bit Windows (ANSI) characters.
Definition: fx_system.h:701
FXSYS_wcslen
#define FXSYS_wcslen
Get the length of a wide-character string.
Definition: fx_system.h:1021
FXSYS_wtoi64
FX_INT64 FXSYS_wtoi64(FX_LPCWSTR str)
Convert a wide string to an integer.
FX_INT8
signed char FX_INT8
Signed 8bits integer.
Definition: fx_system.h:657
FXSYS_wcscmp
#define FXSYS_wcscmp
Compare wide-character strings.
Definition: fx_system.h:1026
FXSYS_GetACP
#define FXSYS_GetACP
Retrieve the current ANSI code-page identifier for the system.
Definition: fx_system.h:1235
FXSYS_wtoi
FX_INT32 FXSYS_wtoi(FX_LPCWSTR str)
Convert a wide string to an integer.
FXSYS_fread
#define FXSYS_fread
Reads data from a file.
Definition: fx_system.h:958
FX_UINTPTR
UINT_PTR FX_UINTPTR
Unsigned integral type for pointer precision.
Definition: fx_system.h:746
FXSYS_qsort
#define FXSYS_qsort
Performs a quick sort. A generic algorithm.
Definition: fx_system.h:1141
FXSYS_wcsicmp
#define FXSYS_wcsicmp
Compare two wide character strings. case-insensitive.
Definition: fx_system.h:1192
FX_SPINLOCK
void * FX_SPINLOCK
Definition for spinlock.
Definition: fx_system.h:1623
FX_LPDWORD
unsigned long * FX_LPDWORD
Pointer to a DWORD.
Definition: fx_system.h:722
FX_SHORT
short FX_SHORT
Short integer (16 bits).
Definition: fx_system.h:671
FXSYS_fopen
#define FXSYS_fopen
Open a file.
Definition: fx_system.h:928
FXSYS_bsearch
#define FXSYS_bsearch
Performs a binary search of a sorted array. A generic algorithm.
Definition: fx_system.h:1151
FXSYS_MultiByteToWideChar
#define FXSYS_MultiByteToWideChar
Maps a character string to a wide-character string.
Definition: fx_system.h:1202
FX_LPBYTE
unsigned char * FX_LPBYTE
Pointer to a FX_BYTE.
Definition: fx_system.h:663
FXSYS_strstr
#define FXSYS_strstr
Find a substring.
Definition: fx_system.h:897
FXSYS_wcsstr
#define FXSYS_wcsstr
Find a sub-wide-character-string.
Definition: fx_system.h:1049
FX_CHAR
char FX_CHAR
8-bit Windows (ANSI) character.
Definition: fx_system.h:697
FX_FLOAT
float FX_FLOAT
32-bit floating-point number.
Definition: fx_system.h:681
FXSYS_assert
#define FXSYS_assert
Assertion.
Definition: fx_system.h:797
FX_UINT16
unsigned short FX_UINT16
Unsigned 16bits integer.
Definition: fx_system.h:669
FXSYS_memchr
#define FXSYS_memchr
Search for a byte in a memory block.
Definition: fx_system.h:1124
FXSYS_strcmp
#define FXSYS_strcmp
Compare ANSIC strings.
Definition: fx_system.h:882
FXSYS_WideCharToMultiByte
#define FXSYS_WideCharToMultiByte
Maps a wide-character string to a character string.
Definition: fx_system.h:1197
FX_UINT8
unsigned char FX_UINT8
Unsigned 8bits integer.
Definition: fx_system.h:659
FX_LPCWORD
unsigned short const * FX_LPCWORD
Pointer to a WORD.
Definition: fx_system.h:677
FXSYS_fclose
#define FXSYS_fclose
Close a file.
Definition: fx_system.h:933
FXSYS_ftell
#define FXSYS_ftell
Gets the current position of a file pointer.
Definition: fx_system.h:953
FXSYS_stricmp
#define FXSYS_stricmp
Compare two ANSIC strings. case-insensitive.
Definition: fx_system.h:1179
FXSYS_strncmp
#define FXSYS_strncmp
Compare characters of two ANSIC strings.
Definition: fx_system.h:877
FX_WORD
unsigned short FX_WORD
16-bit unsigned integer.
Definition: fx_system.h:673
FX_UINT64
unsigned __int64 FX_UINT64
Unsigned 64-bit integer.
Definition: fx_system.h:736
FX_INT16
short FX_INT16
Signed 16bits integer.
Definition: fx_system.h:667
FXSYS_memset
#define FXSYS_memset
Use given character to initialize the buffer.
Definition: fx_system.h:1119
FXSYS_atoi
FX_INT32 FXSYS_atoi(FX_LPCSTR str)
Convert an ANSI string to an integer.
FX_LPCBYTE
unsigned char const * FX_LPCBYTE
Pointer to a constant FX_BYTE.
Definition: fx_system.h:665
FX_LPWSTR
wchar_t * FX_LPWSTR
Pointer to Unicode characters.
Definition: fx_system.h:728
FXSYS_sprintf
#define FXSYS_sprintf
Write formatted data to a ANSIC string.
Definition: fx_system.h:846
FX_DEFINEHANDLE
#define FX_DEFINEHANDLE(name)
Macro to define a handle type.
Definition: fx_system.h:765
FXSYS_wcstombs
#define FXSYS_wcstombs
Converts a sequence of wide characters to a corresponding sequence of multi-byte characters.
Definition: fx_system.h:1082
FXSYS_vsprintf
#define FXSYS_vsprintf
Write formatted output using a pointer to a list of arguments.
Definition: fx_system.h:862
FXSYS_memmove32
void * FXSYS_memmove32(void *dst, const void *src, size_t size)
Move source buffer data into destination.
FXSYS_strupr
#define FXSYS_strupr
Convert a ANSIC string to uppercase.
Definition: fx_system.h:1174
FXSYS_memcpy32
void * FXSYS_memcpy32(void *dst, const void *src, size_t size)
Copy buffer data from source to destination.
FX_QWORD
FX_UINT64 FX_QWORD
unsigned quad-word integer.
Definition: fx_system.h:762
FX_INTPTR
INT_PTR FX_INTPTR
Signed integral type for pointer precision.
Definition: fx_system.h:744
FX_BYTE
unsigned char FX_BYTE
Byte (8 bits).
Definition: fx_system.h:661
FX_ERR
int FX_ERR
Error indicator.
Definition: fx_system.h:690