|
1 /* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd |
|
2 See the file COPYING for copying permission. |
|
3 */ |
|
4 |
|
5 #ifndef Expat_External_INCLUDED |
|
6 #define Expat_External_INCLUDED 1 |
|
7 |
|
8 /* External API definitions */ |
|
9 |
|
10 #if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) |
|
11 #define XML_USE_MSC_EXTENSIONS 1 |
|
12 #endif |
|
13 |
|
14 /* Expat tries very hard to make the API boundary very specifically |
|
15 defined. There are two macros defined to control this boundary; |
|
16 each of these can be defined before including this header to |
|
17 achieve some different behavior, but doing so it not recommended or |
|
18 tested frequently. |
|
19 |
|
20 XMLCALL - The calling convention to use for all calls across the |
|
21 "library boundary." This will default to cdecl, and |
|
22 try really hard to tell the compiler that's what we |
|
23 want. |
|
24 |
|
25 XMLIMPORT - Whatever magic is needed to note that a function is |
|
26 to be imported from a dynamically loaded library |
|
27 (.dll, .so, or .sl, depending on your platform). |
|
28 |
|
29 The XMLCALL macro was added in Expat 1.95.7. The only one which is |
|
30 expected to be directly useful in client code is XMLCALL. |
|
31 |
|
32 Note that on at least some Unix versions, the Expat library must be |
|
33 compiled with the cdecl calling convention as the default since |
|
34 system headers may assume the cdecl convention. |
|
35 */ |
|
36 #ifndef XMLCALL |
|
37 #if defined(XML_USE_MSC_EXTENSIONS) |
|
38 #define XMLCALL __cdecl |
|
39 #elif defined(__GNUC__) && defined(__i386) |
|
40 #define XMLCALL __attribute__((cdecl)) |
|
41 #else |
|
42 /* For any platform which uses this definition and supports more than |
|
43 one calling convention, we need to extend this definition to |
|
44 declare the convention used on that platform, if it's possible to |
|
45 do so. |
|
46 |
|
47 If this is the case for your platform, please file a bug report |
|
48 with information on how to identify your platform via the C |
|
49 pre-processor and how to specify the same calling convention as the |
|
50 platform's malloc() implementation. |
|
51 */ |
|
52 #define XMLCALL |
|
53 #endif |
|
54 #endif /* not defined XMLCALL */ |
|
55 |
|
56 |
|
57 #if !defined(XML_STATIC) && !defined(XMLIMPORT) |
|
58 #ifndef XML_BUILDING_EXPAT |
|
59 /* using Expat from an application */ |
|
60 |
|
61 #ifdef XML_USE_MSC_EXTENSIONS |
|
62 #define XMLIMPORT __declspec(dllimport) |
|
63 #endif |
|
64 |
|
65 #endif |
|
66 #endif /* not defined XML_STATIC */ |
|
67 |
|
68 |
|
69 /* If we didn't define it above, define it away: */ |
|
70 #ifndef XMLIMPORT |
|
71 #define XMLIMPORT |
|
72 #endif |
|
73 |
|
74 |
|
75 #define XMLPARSEAPI(type) XMLIMPORT type XMLCALL |
|
76 |
|
77 #ifdef __cplusplus |
|
78 extern "C" { |
|
79 #endif |
|
80 |
|
81 #ifdef XML_UNICODE_WCHAR_T |
|
82 #define XML_UNICODE |
|
83 #endif |
|
84 |
|
85 #ifdef XML_UNICODE /* Information is UTF-16 encoded. */ |
|
86 #ifdef XML_UNICODE_WCHAR_T |
|
87 typedef wchar_t XML_Char; |
|
88 typedef wchar_t XML_LChar; |
|
89 #else |
|
90 typedef unsigned short XML_Char; |
|
91 typedef char XML_LChar; |
|
92 #endif /* XML_UNICODE_WCHAR_T */ |
|
93 #else /* Information is UTF-8 encoded. */ |
|
94 typedef char XML_Char; |
|
95 typedef char XML_LChar; |
|
96 #endif /* XML_UNICODE */ |
|
97 |
|
98 #ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ |
|
99 #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 |
|
100 typedef __int64 XML_Index; |
|
101 typedef unsigned __int64 XML_Size; |
|
102 #else |
|
103 typedef long long XML_Index; |
|
104 typedef unsigned long long XML_Size; |
|
105 #endif |
|
106 #else |
|
107 typedef long XML_Index; |
|
108 typedef unsigned long XML_Size; |
|
109 #endif /* XML_LARGE_SIZE */ |
|
110 |
|
111 #ifdef __cplusplus |
|
112 } |
|
113 #endif |
|
114 |
|
115 #endif /* not Expat_External_INCLUDED */ |