OSDN Git Service

[COMMON][Agar] Start to apply to libAgar.
[csp-qt/common_source_project-fm7.git] / source / src / common.h
1 /*\r
2         Skelton for retropc emulator\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2006.08.18 -\r
6 \r
7         [ common header ]\r
8 */\r
9 \r
10 #ifndef _COMMON_H_\r
11 #define _COMMON_H_\r
12 \r
13 #if defined(_USE_AGAR) || defined(_USE_SDL)\r
14 #include <SDL/SDL.h>\r
15 \r
16 # ifndef uint8\r
17    typedef uint8_t uint8;\r
18 # endif\r
19 # ifndef int8\r
20    typedef int8_t int8;\r
21 # endif\r
22 # ifndef uint16\r
23    typedef uint16_t uint16;\r
24 # endif\r
25 # ifndef int16\r
26    typedef int16_t int16;\r
27 # endif\r
28 # ifndef uint32\r
29    typedef uint32_t uint32;\r
30 # endif\r
31 # ifndef int32\r
32    typedef int32_t int32;\r
33 # endif\r
34 # ifndef uint64\r
35    typedef uint64_t uint64;\r
36 # endif\r
37 # ifndef int64\r
38    typedef int64_t int64;\r
39 # endif\r
40 # ifndef BOOL\r
41    typedef int BOOL;\r
42 # endif\r
43 # ifndef BYTE\r
44    typedef uint8_t BYTE;\r
45 # endif\r
46 # ifndef WORD\r
47    typedef uint16_t WORD;\r
48 # endif\r
49 # ifndef DWORD\r
50    typedef uint32_t DWORD;\r
51 # endif\r
52 # ifndef QWORD\r
53    typedef uint64_t QWORD;\r
54 # endif\r
55 \r
56 \r
57 \r
58 // tchar.h\r
59 #  ifdef  _UNICODE\r
60 #    define __T(x)      L ## x\r
61 #  else\r
62 #    define __T(x)      x\r
63 #  endif\r
64  \r
65 #  define _T(x)       __T(x)\r
66 #  define _TEXT(x)    __T(x)\r
67 \r
68 #  ifdef _UNICODE\r
69     typedef wchar_t _TCHAR;\r
70 #  else\r
71     typedef char    _TCHAR;\r
72 #  endif\r
73 \r
74 #  ifndef LPCTSTR\r
75     typedef _TCHAR* LPCTSTR;\r
76 #  endif\r
77 \r
78 \r
79 \r
80 #  ifdef _USE_GETTEXT\r
81 #  include <libintl.h>\r
82 #  define _N(x) gettext(x)\r
83 # else\r
84 #  define _N(x) _T(x)\r
85 # endif\r
86 \r
87 #if (SDL_BYTEORDER == SDL_LIL_ENDIAN)\r
88 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
89 {\r
90    return x;\r
91 }\r
92 \r
93 static inline WORD EndianToLittle_WORD(WORD x)\r
94 {\r
95    return x;\r
96 }\r
97 #else // BIG_ENDIAN\r
98 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
99 {\r
100    DWORD y;\r
101    y = ((x & 0x000000ff) << 24) | ((x & 0x0000ff00) << 8) |\r
102        ((x & 0x00ff0000) >> 8)  | ((x & 0xff000000) >> 24);\r
103    return y;\r
104 }\r
105 \r
106 static inline WORD EndianToLittle_WORD(WORD x)\r
107 {\r
108    WORD y;\r
109    y = ((x & 0x00ff) << 8) | ((x & 0xff00) >> 8);\r
110    return y;\r
111 }\r
112 #endif\r
113 #define ZeroMemory(p,s) memset(p,0x00,s)\r
114 #define CopyMemory(t,f,s) memcopy(t,f,s)\r
115 \r
116 #ifdef __cplusplus\r
117 extern "C" \r
118 {\r
119 #endif\r
120 extern void Sleep(int tick);\r
121 extern uint32_t timeGetTime(void);\r
122 #ifdef __cplusplus\r
123 }\r
124 #endif\r
125 \r
126 #else\r
127 #include <tchar.h>\r
128 \r
129 // variable scope of 'for' loop for microsoft visual c++ 6.0 and embedded visual c++ 4.0\r
130 #if defined(_MSC_VER) && (_MSC_VER == 1200)\r
131 #define for if(0);else for\r
132 #endif\r
133 \r
134 // disable warnings C4189, C4995 and C4996 for microsoft visual c++ 2005\r
135 #if defined(_MSC_VER) && (_MSC_VER >= 1400)\r
136 #pragma warning( disable : 4819 )\r
137 #pragma warning( disable : 4995 )\r
138 #pragma warning( disable : 4996 )\r
139 #endif\r
140 \r
141 \r
142 // type definition\r
143 #ifndef uint8\r
144 typedef unsigned char uint8;\r
145 #endif\r
146 #ifndef uint16\r
147 typedef unsigned short uint16;\r
148 #endif\r
149 #ifndef uint32\r
150 typedef unsigned int uint32;\r
151 #endif\r
152 #ifndef uint64\r
153 #ifdef _MSC_VER\r
154 typedef unsigned __int64 uint64;\r
155 #else\r
156 typedef unsigned long long uint64;\r
157 #endif\r
158 #endif\r
159 \r
160 #ifndef int8\r
161 typedef signed char int8;\r
162 #endif\r
163 #ifndef int16\r
164 typedef signed short int16;\r
165 #endif\r
166 #ifndef int32\r
167 typedef signed int int32;\r
168 #endif\r
169 #ifndef int64\r
170 #ifdef _MSC_VER\r
171 typedef signed __int64 int64;\r
172 #else\r
173 typedef signed long long int64;\r
174 #endif\r
175 #endif\r
176 \r
177 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
178 {\r
179    return x;\r
180 }\r
181 \r
182 static inline WORD EndianToLittle_WORD(WORD x)\r
183 {\r
184    return x;\r
185 }\r
186 \r
187 \r
188 #endif\r
189 \r
190 \r
191 typedef union {\r
192 #ifdef _BIG_ENDIAN\r
193         struct {\r
194                 uint8 h3, h2, h, l;\r
195         } b;\r
196         struct {\r
197                 int8 h3, h2, h, l;\r
198         } sb;\r
199         struct {\r
200                 uint16 h, l;\r
201         } w;\r
202         struct {\r
203                 int16 h, l;\r
204         } sw;\r
205 #else\r
206         struct {\r
207                 uint8 l, h, h2, h3;\r
208         } b;\r
209         struct {\r
210                 uint16 l, h;\r
211         } w;\r
212         struct {\r
213                 int8 l, h, h2, h3;\r
214         } sb;\r
215         struct {\r
216                 int16 l, h;\r
217         } sw;\r
218 #endif\r
219         uint32 d;\r
220         int32 sd;\r
221 } pair;\r
222 \r
223 // rgb color\r
224 #define _RGB888\r
225 \r
226 #if defined(_RGB555)\r
227 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 7) | (uint16)(((uint16)(g) & 0xf8) << 2) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
228 typedef uint16 scrntype;\r
229 #elif defined(_RGB565)\r
230 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 8) | (uint16)(((uint16)(g) & 0xfc) << 3) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
231 typedef uint16 scrntype;\r
232 #elif defined(_RGB888)\r
233 #define RGB_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0))\r
234 typedef uint32 scrntype;\r
235 #endif\r
236 \r
237 // misc\r
238 bool check_file_extension(_TCHAR* file_path, _TCHAR* ext);\r
239 _TCHAR *get_file_path_without_extensiton(_TCHAR* file_path);\r
240 uint32 getcrc32(uint8 data[], int size);\r
241 \r
242 #define array_length(array) (sizeof(array) / sizeof(array[0]))\r
243 \r
244 #define FROM_BCD(v)     (((v) & 0x0f) + (((v) >> 4) & 0x0f) * 10)\r
245 #define TO_BCD(v)       ((int)(((v) % 100) / 10) << 4) | ((v) % 10)\r
246 #define TO_BCD_LO(v)    ((v) % 10)\r
247 #define TO_BCD_HI(v)    (int)(((v) % 100) / 10)\r
248 \r
249 #define LEAP_YEAR(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))\r
250 \r
251 typedef struct cur_time_t {\r
252         int year, month, day, day_of_week, hour, minute, second;\r
253         bool initialized;\r
254         cur_time_t()\r
255         {\r
256                 initialized = false;\r
257         }\r
258         void increment();\r
259         void update_year();\r
260         void update_day_of_week();\r
261         void save_state(void *f);\r
262         bool load_state(void *f);\r
263 } cur_time_t;\r
264 \r
265 \r
266 #endif