OSDN Git Service

[WIP][Qt] Start to compilation, not pass yet :(
[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 #include <agar/core.h>\r
16 #include <stdarg.h>\r
17 #elif defined(_USE_QT)\r
18 #include <SDL/SDL.h>\r
19 #include <stdarg.h>\r
20 #include <QtCore/QString>\r
21 #include <QtCore/QFile>\r
22 #endif\r
23 \r
24 #if defined(_USE_AGAR) || defined(_USE_SDL) || defined(_USE_QT)\r
25 \r
26 #ifndef uint8\r
27    typedef uint8_t uint8;\r
28 # endif\r
29 # ifndef int8\r
30    typedef int8_t int8;\r
31 # endif\r
32 # ifndef uint16\r
33    typedef uint16_t uint16;\r
34 # endif\r
35 # ifndef int16\r
36    typedef int16_t int16;\r
37 # endif\r
38 # ifndef uint32\r
39    typedef uint32_t uint32;\r
40 # endif\r
41 # ifndef int32\r
42    typedef int32_t int32;\r
43 # endif\r
44 # ifndef uint64\r
45    typedef uint64_t uint64;\r
46 # endif\r
47 # ifndef int64\r
48    typedef int64_t int64;\r
49 # endif\r
50 # ifndef BOOL\r
51    typedef int BOOL;\r
52 # endif\r
53 # ifndef BYTE\r
54    typedef uint8_t BYTE;\r
55 # endif\r
56 # ifndef WORD\r
57    typedef uint16_t WORD;\r
58 # endif\r
59 # ifndef DWORD\r
60    typedef uint32_t DWORD;\r
61 # endif\r
62 # ifndef QWORD\r
63    typedef uint64_t QWORD;\r
64 # endif\r
65 \r
66 # ifndef UINT8\r
67    typedef uint8_t UINT8;\r
68 # endif\r
69 # ifndef UINT16\r
70    typedef uint16_t UINT16;\r
71 # endif\r
72 # ifndef UINT32\r
73    typedef uint32_t UINT32;\r
74 # endif\r
75 # ifndef UINT64\r
76    typedef uint64_t UINT64;\r
77 # endif\r
78 \r
79 # ifndef INT8\r
80    typedef int8_t INT8;\r
81 # endif\r
82 # ifndef INT16\r
83    typedef int16_t INT16;\r
84 # endif\r
85 # ifndef INT32\r
86    typedef int32_t INT32;\r
87 # endif\r
88 # ifndef INT64\r
89    typedef int64_t INT64;\r
90 # endif\r
91 \r
92 static inline void _stprintf(char *s, const char *fmt, ...) {\r
93    va_list args;\r
94    \r
95    va_start(args, fmt);\r
96    sprintf(s, fmt, args);\r
97    va_end(args);\r
98 }\r
99 \r
100 // tchar.h\r
101 //#  ifdef  _UNICODE\r
102 //#    define __T(x)      L ## x\r
103 //#  else\r
104 #    define __T(x)      x\r
105 //#  endif\r
106  \r
107 #  define _T(x)       __T(x)\r
108 #  define _TEXT(x)    __T(x)\r
109 \r
110 //#  ifdef _UNICODE\r
111 //    typedef wchar_t _TCHAR;\r
112 //#  else\r
113     typedef char    _TCHAR;\r
114 //#  endif\r
115 \r
116 #  ifndef LPCTSTR\r
117     typedef _TCHAR* LPCTSTR;\r
118 #  endif\r
119 \r
120 static inline char *_tcscpy(_TCHAR *dst, _TCHAR *src)\r
121 {\r
122    return strcpy((char *)dst, (char *)src);\r
123 }\r
124 \r
125 static inline int _tcsicmp(_TCHAR *a, _TCHAR *b) \r
126 {\r
127    return strcasecmp((char *)a, (char *)b);\r
128 }\r
129 \r
130 \r
131 static inline void _vstprintf(_TCHAR *s, const char *fmt, va_list argptr) {\r
132    vsprintf((char *)s, fmt, argptr);\r
133 }\r
134 \r
135 static inline char *_tcsncpy(_TCHAR *d, _TCHAR *s, int n) {\r
136    return strncpy((char *)d, (char *)s, n);\r
137 }\r
138 \r
139 static inline char *_tcsncat(_TCHAR *d, _TCHAR *s, int n) {\r
140    return strncat((char *)d, (char *)s, n);\r
141 }\r
142 \r
143 \r
144 static inline int DeleteFile(_TCHAR *path) \r
145 {\r
146 #ifdef _USE_QT\r
147        QString fpath = (char *)path;\r
148        QFile tfp(fpath);\r
149        if(tfp.remove(fpath)) return (int)true;\r
150        return 0;\r
151 #else   \r
152    return AG_FileDelete((const char *)path);\r
153 #endif\r
154 }\r
155 #include <algorithm>\r
156 \r
157 #  ifdef USE_GETTEXT\r
158 #  include <libintl.h>\r
159 #  define _N(x) gettext(x)\r
160 # else\r
161 #  define _N(x) _T(x)\r
162 # endif\r
163 \r
164 #if (SDL_BYTEORDER == SDL_LIL_ENDIAN)\r
165 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
166 {\r
167    return x;\r
168 }\r
169 \r
170 static inline WORD EndianToLittle_WORD(WORD x)\r
171 {\r
172    return x;\r
173 }\r
174 #else // BIG_ENDIAN\r
175 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
176 {\r
177    DWORD y;\r
178    y = ((x & 0x000000ff) << 24) | ((x & 0x0000ff00) << 8) |\r
179        ((x & 0x00ff0000) >> 8)  | ((x & 0xff000000) >> 24);\r
180    return y;\r
181 }\r
182 \r
183 static inline WORD EndianToLittle_WORD(WORD x)\r
184 {\r
185    WORD y;\r
186    y = ((x & 0x00ff) << 8) | ((x & 0xff00) >> 8);\r
187    return y;\r
188 }\r
189 #endif\r
190 #define ZeroMemory(p,s) memset(p,0x00,s)\r
191 #define CopyMemory(t,f,s) memcpy(t,f,s)\r
192 \r
193 #ifdef __cplusplus\r
194 extern "C" \r
195 {\r
196 #endif\r
197 extern void Sleep(int tick);\r
198 extern uint32_t timeGetTime(void);\r
199 #ifdef __cplusplus\r
200 }\r
201 #endif\r
202 \r
203 #else\r
204 #include <tchar.h>\r
205 \r
206 // variable scope of 'for' loop for microsoft visual c++ 6.0 and embedded visual c++ 4.0\r
207 #if defined(_MSC_VER) && (_MSC_VER == 1200)\r
208 #define for if(0);else for\r
209 #endif\r
210 \r
211 // disable warnings C4189, C4995 and C4996 for microsoft visual c++ 2005\r
212 #if defined(_MSC_VER) && (_MSC_VER >= 1400)\r
213 #pragma warning( disable : 4819 )\r
214 #pragma warning( disable : 4995 )\r
215 #pragma warning( disable : 4996 )\r
216 #endif\r
217 \r
218 \r
219 // type definition\r
220 #ifndef uint8\r
221 typedef unsigned char uint8;\r
222 #endif\r
223 #ifndef uint16\r
224 typedef unsigned short uint16;\r
225 #endif\r
226 #ifndef uint32\r
227 typedef unsigned int uint32;\r
228 #endif\r
229 #ifndef uint64\r
230 #ifdef _MSC_VER\r
231 typedef unsigned __int64 uint64;\r
232 #else\r
233 typedef unsigned long long uint64;\r
234 #endif\r
235 #endif\r
236 \r
237 #ifndef int8\r
238 typedef signed char int8;\r
239 #endif\r
240 #ifndef int16\r
241 typedef signed short int16;\r
242 #endif\r
243 #ifndef int32\r
244 typedef signed int int32;\r
245 #endif\r
246 #ifndef int64\r
247 #ifdef _MSC_VER\r
248 typedef signed __int64 int64;\r
249 #else\r
250 typedef signed long long int64;\r
251 #endif\r
252 #endif\r
253 \r
254 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
255 {\r
256    return x;\r
257 }\r
258 \r
259 static inline WORD EndianToLittle_WORD(WORD x)\r
260 {\r
261    return x;\r
262 }\r
263 \r
264 \r
265 #endif\r
266 \r
267 \r
268 typedef union {\r
269 #ifdef _BIG_ENDIAN\r
270         struct {\r
271                 uint8 h3, h2, h, l;\r
272         } b;\r
273         struct {\r
274                 int8 h3, h2, h, l;\r
275         } sb;\r
276         struct {\r
277                 uint16 h, l;\r
278         } w;\r
279         struct {\r
280                 int16 h, l;\r
281         } sw;\r
282 #else\r
283         struct {\r
284                 uint8 l, h, h2, h3;\r
285         } b;\r
286         struct {\r
287                 uint16 l, h;\r
288         } w;\r
289         struct {\r
290                 int8 l, h, h2, h3;\r
291         } sb;\r
292         struct {\r
293                 int16 l, h;\r
294         } sw;\r
295 #endif\r
296         uint32 d;\r
297         int32 sd;\r
298 } pair;\r
299 \r
300 // rgb color\r
301 //#define _RGB888\r
302 #define _RGBA888\r
303 \r
304 #if defined(_USE_SDL) || defined(_USE_AGAR)\r
305 \r
306 # if AG_BYTEORDER == AG_BIG_ENDIAN\r
307 # if defined(_RGB555)\r
308 //#define RGB_COLOR(r, g, b) ((uint16)(((uint16)(b) & 0xf8) << 7) | (uint16)(((uint16)(g) & 0xf8) << 2) | (uint16)(((uint16)(r) & 0xf8) >> 3))\r
309 #  define RGB_COLOR(r, g, b) ((uint16)(((uint16)(b) & 0xf8) >>4) | (uint16)(((uint16)(g) & 0xf8) << 2) | (uint16)(((uint16)(r) & 0xf8) << 8))\r
310 typedef uint16 scrntype;\r
311 # elif defined(_RGB565)\r
312 //#define RGB_COLOR(r, g, b) ((uint16)(((uint16)(b) & 0xf8) << 8) | (uint16)(((uint16)(g) & 0xfc) << 3) | (uint16)(((uint16)(r) & 0xf8) >> 3))\r
313 #  define RGB_COLOR(r, g, b) ((uint16)(((uint16)(b) & 0xf8) >>3) | (uint16)(((uint16)(g) & 0xfc) << 2) | (uint16)(((uint16)(r) & 0xf8) << 8))\r
314 typedef uint16 scrntype;\r
315 # elif defined(_RGB888) \r
316 #  define RGB_COLOR(r, g, b) (((uint32)(r) << 24) | ((uint32)(g) << 16) | ((uint32)(b) << 8))\r
317 typedef uint32 scrntype;\r
318 # elif defined(_RGBA888) \r
319 #  define RGB_COLOR(r, g, b) (((uint32)(r) << 24) | ((uint32)(g) << 16) | ((uint32)(b) << 8)) | ((uint32)0xff << 0)\r
320 typedef uint32 scrntype;\r
321 # endif\r
322 \r
323 #else // LITTLE ENDIAN\r
324 \r
325 # if defined(_RGB555)\r
326 #  define RGB_COLOR(r, g, b) ((uint16)(((uint16)(b) & 0xf8) << 7) | (uint16)(((uint16)(g) & 0xf8) << 2) | (uint16)(((uint16)(r) & 0xf8) >> 3))\r
327 typedef uint16 scrntype;\r
328 # elif defined(_RGB565)\r
329 #  define RGB_COLOR(r, g, b) ((uint16)(((uint16)(b) & 0xf8) << 8) | (uint16)(((uint16)(g) & 0xfc) << 3) | (uint16)(((uint16)(r) & 0xf8) >> 3))\r
330 typedef uint16 scrntype;\r
331 # elif defined(_RGB888)\r
332 #  define RGB_COLOR(r, g, b) (((uint32)(r) << 0) | ((uint32)(g) << 8) | ((uint32)(b) << 16))\r
333 typedef uint32 scrntype;\r
334 # elif defined(_RGBA888)\r
335 #  define RGB_COLOR(r, g, b) (((uint32)(r) << 0) | ((uint32)(g) << 8) | ((uint32)(b) << 16)) | ((uint32)0xff << 24)\r
336 typedef uint32 scrntype;\r
337 # endif\r
338 \r
339 #endif  // ENDIAN\r
340 \r
341 #else // NOT USE AGAR\r
342 \r
343 # if defined(_RGB555)\r
344 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 7) | (uint16)(((uint16)(g) & 0xf8) << 2) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
345 typedef uint16 scrntype;\r
346 #elif defined(_RGB565)\r
347 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 8) | (uint16)(((uint16)(g) & 0xfc) << 3) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
348 typedef uint16 scrntype;\r
349 #elif defined(_RGB888)\r
350 #define RGB_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0))\r
351 typedef uint32 scrntype;\r
352 #elif defined(_RGBA888)\r
353 #define RGBA_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0)) | ((uint32)0xff << 24)\r
354 typedef uint32 scrntype;\r
355 #endif\r
356 \r
357 #endif\r
358 \r
359 #if defined(_USE_SDL) || defined(_USE_AGAR) || defined(_USE_QT)\r
360 // misc\r
361 #ifdef __cplusplus\r
362 bool check_file_extension(_TCHAR* file_path, _TCHAR* ext);\r
363 _TCHAR *get_file_path_without_extensiton(_TCHAR* file_path);\r
364 uint32 getcrc32(uint8 data[], int size);\r
365 \r
366 \r
367 #define array_length(array) (sizeof(array) / sizeof(array[0]))\r
368 \r
369 #define FROM_BCD(v)     (((v) & 0x0f) + (((v) >> 4) & 0x0f) * 10)\r
370 #define TO_BCD(v)       ((int)(((v) % 100) / 10) << 4) | ((v) % 10)\r
371 #define TO_BCD_LO(v)    ((v) % 10)\r
372 #define TO_BCD_HI(v)    (int)(((v) % 100) / 10)\r
373 \r
374 #define LEAP_YEAR(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))\r
375 \r
376 typedef struct cur_time_t {\r
377         int year, month, day, day_of_week, hour, minute, second;\r
378         bool initialized;\r
379         cur_time_t()\r
380         {\r
381                 initialized = false;\r
382         }\r
383         void increment();\r
384         void update_year();\r
385         void update_day_of_week();\r
386         void save_state(void *f);\r
387         bool load_state(void *f);\r
388 } cur_time_t;\r
389 #endif\r
390 \r
391 #endif\r
392 \r
393 #endif