2 Skelton for retropc emulator
\r
4 Author : Takeda.Toshiya
\r
13 #if defined(_USE_AGAR) || defined(_USE_SDL)
\r
14 #include <SDL/SDL.h>
\r
15 #include <agar/core.h>
\r
17 #elif defined(_USE_QT)
\r
18 #include <SDL/SDL.h>
\r
20 #include <QtCore/QString>
\r
21 #include <QtCore/QFile>
\r
24 #if defined(_USE_AGAR) || defined(_USE_SDL) || defined(_USE_QT)
\r
27 typedef uint8_t uint8;
\r
30 typedef int8_t int8;
\r
33 typedef uint16_t uint16;
\r
36 typedef int16_t int16;
\r
39 typedef uint32_t uint32;
\r
42 typedef int32_t int32;
\r
45 typedef uint64_t uint64;
\r
48 typedef int64_t int64;
\r
54 typedef uint8_t BYTE;
\r
57 typedef uint16_t WORD;
\r
60 typedef uint32_t DWORD;
\r
63 typedef uint64_t QWORD;
\r
67 typedef uint8_t UINT8;
\r
70 typedef uint16_t UINT16;
\r
73 typedef uint32_t UINT32;
\r
76 typedef uint64_t UINT64;
\r
80 typedef int8_t INT8;
\r
83 typedef int16_t INT16;
\r
86 typedef int32_t INT32;
\r
89 typedef int64_t INT64;
\r
92 static inline void _stprintf(char *s, const char *fmt, ...) {
\r
95 va_start(args, fmt);
\r
96 sprintf(s, fmt, args);
\r
102 //# define __T(x) L ## x
\r
107 # define _T(x) __T(x)
\r
108 # define _TEXT(x) __T(x)
\r
111 // typedef wchar_t _TCHAR;
\r
113 typedef char _TCHAR;
\r
117 typedef _TCHAR* LPCTSTR;
\r
120 static inline char *_tcscpy(_TCHAR *dst, _TCHAR *src)
\r
122 return strcpy((char *)dst, (char *)src);
\r
125 static inline int _tcsicmp(_TCHAR *a, _TCHAR *b)
\r
127 return strcasecmp((char *)a, (char *)b);
\r
131 static inline void _vstprintf(_TCHAR *s, const char *fmt, va_list argptr) {
\r
132 vsprintf((char *)s, fmt, argptr);
\r
135 static inline char *_tcsncpy(_TCHAR *d, _TCHAR *s, int n) {
\r
136 return strncpy((char *)d, (char *)s, n);
\r
139 static inline char *_tcsncat(_TCHAR *d, _TCHAR *s, int n) {
\r
140 return strncat((char *)d, (char *)s, n);
\r
144 static inline int DeleteFile(_TCHAR *path)
\r
147 QString fpath = (char *)path;
\r
149 if(tfp.remove(fpath)) return (int)true;
\r
152 return AG_FileDelete((const char *)path);
\r
155 #include <algorithm>
\r
157 # ifdef USE_GETTEXT
\r
158 # include <libintl.h>
\r
159 # define _N(x) gettext(x)
\r
161 # define _N(x) _T(x)
\r
164 #if (SDL_BYTEORDER == SDL_LIL_ENDIAN)
\r
165 static inline DWORD EndianToLittle_DWORD(DWORD x)
\r
170 static inline WORD EndianToLittle_WORD(WORD x)
\r
174 #else // BIG_ENDIAN
\r
175 static inline DWORD EndianToLittle_DWORD(DWORD x)
\r
178 y = ((x & 0x000000ff) << 24) | ((x & 0x0000ff00) << 8) |
\r
179 ((x & 0x00ff0000) >> 8) | ((x & 0xff000000) >> 24);
\r
183 static inline WORD EndianToLittle_WORD(WORD x)
\r
186 y = ((x & 0x00ff) << 8) | ((x & 0xff00) >> 8);
\r
190 #define ZeroMemory(p,s) memset(p,0x00,s)
\r
191 #define CopyMemory(t,f,s) memcpy(t,f,s)
\r
197 extern void Sleep(int tick);
\r
198 extern uint32_t timeGetTime(void);
\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
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
221 typedef unsigned char uint8;
\r
224 typedef unsigned short uint16;
\r
227 typedef unsigned int uint32;
\r
231 typedef unsigned __int64 uint64;
\r
233 typedef unsigned long long uint64;
\r
238 typedef signed char int8;
\r
241 typedef signed short int16;
\r
244 typedef signed int int32;
\r
248 typedef signed __int64 int64;
\r
250 typedef signed long long int64;
\r
254 static inline DWORD EndianToLittle_DWORD(DWORD x)
\r
259 static inline WORD EndianToLittle_WORD(WORD x)
\r
271 uint8 h3, h2, h, l;
\r
284 uint8 l, h, h2, h3;
\r
304 #if defined(_USE_SDL) || defined(_USE_AGAR)
\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
323 #else // LITTLE ENDIAN
\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
341 #else // NOT USE AGAR
\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
359 #if defined(_USE_SDL) || defined(_USE_AGAR) || defined(_USE_QT)
\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
367 #define array_length(array) (sizeof(array) / sizeof(array[0]))
\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
374 #define LEAP_YEAR(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
\r
376 typedef struct cur_time_t {
\r
377 int year, month, day, day_of_week, hour, minute, second;
\r
381 initialized = false;
\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