Mercurial > vba-linux
comparison src/Port.h @ 19:5e8e5083da94
brought in common and gba, fixed problems with outdated Makefile.am files in both of these packages
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sun, 04 Mar 2012 14:33:52 -0600 |
parents | f9f4f1b99eed |
children | 48369c6aeaa0 |
comparison
equal
deleted
inserted
replaced
18:ac56489c2ca6 | 19:5e8e5083da94 |
---|---|
1 #ifndef VBA_PORT_H | |
2 #define VBA_PORT_H | |
3 | |
4 #if _MSC_VER > 1000 | |
5 #pragma once | |
6 #endif // _MSC_VER > 1000 | |
7 | |
8 #include <ctime> | |
9 | |
10 #ifndef NULL | |
11 #define NULL 0 | |
12 #endif | |
13 | |
14 typedef unsigned char bool8; | |
15 | |
16 #ifdef HAVE_STDINT_H | |
17 #include <stdint.h> | |
18 | |
19 typedef int8_t int8; | |
20 typedef uint8_t uint8; | |
21 typedef int16_t int16; | |
22 typedef uint16_t uint16; | |
23 typedef int32_t int32; | |
24 typedef uint32_t uint32; | |
25 typedef int64_t int64; | |
26 typedef uint64_t uint64; | |
27 typedef intptr_t pint; | |
28 | |
29 #else /* Don't have stdint.h */ | |
30 | |
31 #ifdef PTR_NOT_INT | |
32 typedef long pint; | |
33 #else /* pointer is int */ | |
34 typedef int pint; | |
35 #endif /* PTR_NOT_INT */ | |
36 | |
37 /* FIXME: Refactor this by moving out the BORLAND part and unifying typedefs */ | |
38 #ifndef WIN32 | |
39 typedef unsigned char uint8; | |
40 typedef unsigned short uint16; | |
41 typedef signed char int8; | |
42 typedef short int16; | |
43 typedef int int32; | |
44 typedef unsigned int uint32; | |
45 # ifdef __GNUC__ /* long long is not part of ISO C++ */ | |
46 __extension__ typedef long long int64; | |
47 __extension__ typedef unsigned long long uint64; | |
48 # else | |
49 typedef long long int64; | |
50 typedef unsigned long long uint64; | |
51 # endif | |
52 #else /* WIN32 */ | |
53 | |
54 # ifdef __BORLANDC__ | |
55 # include <systypes.h> | |
56 # else | |
57 | |
58 typedef unsigned char uint8; | |
59 typedef unsigned short uint16; | |
60 typedef signed char int8; | |
61 typedef short int16; | |
62 | |
63 # ifndef WSAAPI | |
64 /* winsock2.h typedefs int32 as well. */ | |
65 typedef long int32; | |
66 # endif | |
67 | |
68 typedef unsigned int uint32; | |
69 | |
70 # endif /* __BORLANDC__ */ | |
71 | |
72 typedef __int64 int64; | |
73 typedef unsigned __int64 uint64; | |
74 | |
75 #endif /* WIN32 */ | |
76 #endif /* HAVE_STDINT_H */ | |
77 | |
78 #ifndef WIN32 | |
79 | |
80 #ifndef PATH_MAX | |
81 #define PATH_MAX 1024 | |
82 #endif | |
83 | |
84 #define _MAX_DIR PATH_MAX | |
85 #define _MAX_DRIVE 1 | |
86 #define _MAX_FNAME PATH_MAX | |
87 #define _MAX_EXT PATH_MAX | |
88 #define _MAX_PATH PATH_MAX | |
89 | |
90 #define ZeroMemory(a, b) memset((a), 0, (b)) | |
91 | |
92 void _makepath(char *path, const char *drive, const char *dir, | |
93 const char *fname, const char *ext); | |
94 void _splitpath(const char *path, char *drive, char *dir, char *fname, | |
95 char *ext); | |
96 #else /* WIN32 */ | |
97 #define strcasecmp stricmp | |
98 #define strncasecmp strnicmp | |
99 #endif | |
100 | |
101 typedef uint8 u8; | |
102 typedef uint16 u16; | |
103 typedef uint32 u32; | |
104 typedef uint64 u64; | |
105 typedef int8 s8; | |
106 typedef int16 s16; | |
107 typedef int32 s32; | |
108 typedef int64 s64; | |
109 | |
110 // for consistency | |
111 static inline u8 swap8(u8 v) | |
112 { | |
113 return v; | |
114 } | |
115 | |
116 // swaps a 16-bit value | |
117 static inline u16 swap16(u16 v) | |
118 { | |
119 return (v<<8)|(v>>8); | |
120 } | |
121 | |
122 // swaps a 32-bit value | |
123 static inline u32 swap32(u32 v) | |
124 { | |
125 return (v<<24)|((v<<8)&0xff0000)|((v>>8)&0xff00)|(v>>24); | |
126 } | |
127 | |
128 #define READ8LE(x) \ | |
129 *((u8 *)x) | |
130 | |
131 #define WRITE8LE(x, v) \ | |
132 *((u8 *)x) = (v) | |
133 | |
134 #ifdef WORDS_BIGENDIAN | |
135 #if defined(__GNUC__) && defined(__ppc__) | |
136 | |
137 #define READ16LE(base) \ | |
138 ({ unsigned short lhbrxResult; \ | |
139 __asm__("lhbrx %0, 0, %1" : "=r" (lhbrxResult) : "r" (base) : "memory"); \ | |
140 lhbrxResult; }) | |
141 | |
142 #define READ32LE(base) \ | |
143 ({ unsigned long lwbrxResult; \ | |
144 __asm__("lwbrx %0, 0, %1" : "=r" (lwbrxResult) : "r" (base) : "memory"); \ | |
145 lwbrxResult; }) | |
146 | |
147 #define WRITE16LE(base, value) \ | |
148 __asm__("sthbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory") | |
149 | |
150 #define WRITE32LE(base, value) \ | |
151 __asm__("stwbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory") | |
152 | |
153 #else | |
154 #define READ16LE(x) \ | |
155 swap16(*((u16 *)(x))) | |
156 #define READ32LE(x) \ | |
157 swap32(*((u32 *)(x))) | |
158 #define WRITE16LE(x, v) \ | |
159 *((u16 *)x) = swap16((v)) | |
160 #define WRITE32LE(x, v) \ | |
161 *((u32 *)x) = swap32((v)) | |
162 #endif | |
163 #else | |
164 #define READ16LE(x) \ | |
165 *((u16 *)x) | |
166 #define READ32LE(x) \ | |
167 *((u32 *)x) | |
168 #define WRITE16LE(x, v) \ | |
169 *((u16 *)x) = (v) | |
170 #define WRITE32LE(x, v) \ | |
171 *((u32 *)x) = (v) | |
172 #endif | |
173 | |
174 #ifndef CTASSERT | |
175 #define CTASSERT(x) typedef char __assert ## y[(x) ? 1 : -1]; | |
176 #endif | |
177 | |
178 #endif // VBA_PORT_H |