OSDN Git Service

[General][Build] At first.
[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 #  ifdef _USE_GETTEXT\r
79 #  include <libintl.h>\r
80 #  define _N(x) gettext(x)\r
81 # else\r
82 #  define _N(x) _T(x)\r
83 # endif\r
84 \r
85 #if (SDL_BYTEORDER == SDL_LIL_ENDIAN)\r
86 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
87 {\r
88    return x;\r
89 }\r
90 \r
91 static inline WORD EndianToLittle_WORD(WORD x)\r
92 {\r
93    return x;\r
94 }\r
95 #else // BIG_ENDIAN\r
96 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
97 {\r
98    DWORD y;\r
99    y = ((x & 0x000000ff) << 24) | ((x & 0x0000ff00) << 8) |\r
100        ((x & 0x00ff0000) >> 8)  | ((x & 0xff000000) >> 24);\r
101    return y;\r
102 }\r
103 \r
104 static inline WORD EndianToLittle_WORD(WORD x)\r
105 {\r
106    WORD y;\r
107    y = ((x & 0x00ff) << 8) | ((x & 0xff00) >> 8);\r
108    return y;\r
109 }\r
110 #endif\r
111 #define ZeroMemory(p,s) memset(p,0x00,s)\r
112 #define CopyMemory(t,f,s) memcopy(t,f,s)\r
113 \r
114 #ifdef __cplusplus\r
115 extern "C" \r
116 {\r
117 #endif\r
118 extern void Sleep(int tick);\r
119 extern uint32_t timeGetTime(void);\r
120 #ifdef __cplusplus\r
121 }\r
122 #endif\r
123 \r
124 #else\r
125 #include <tchar.h>\r
126 \r
127 // variable scope of 'for' loop for microsoft visual c++ 6.0 and embedded visual c++ 4.0\r
128 #if defined(_MSC_VER) && (_MSC_VER == 1200)\r
129 #define for if(0);else for\r
130 #endif\r
131 \r
132 // disable warnings C4189, C4995 and C4996 for microsoft visual c++ 2005\r
133 #if defined(_MSC_VER) && (_MSC_VER >= 1400)\r
134 #pragma warning( disable : 4819 )\r
135 #pragma warning( disable : 4995 )\r
136 #pragma warning( disable : 4996 )\r
137 #endif\r
138 \r
139 \r
140 // type definition\r
141 #ifndef uint8\r
142 typedef unsigned char uint8;\r
143 #endif\r
144 #ifndef uint16\r
145 typedef unsigned short uint16;\r
146 #endif\r
147 #ifndef uint32\r
148 typedef unsigned int uint32;\r
149 #endif\r
150 #ifndef uint64\r
151 #ifdef _MSC_VER\r
152 typedef unsigned __int64 uint64;\r
153 #else\r
154 typedef unsigned long long uint64;\r
155 #endif\r
156 #endif\r
157 \r
158 #ifndef int8\r
159 typedef signed char int8;\r
160 #endif\r
161 #ifndef int16\r
162 typedef signed short int16;\r
163 #endif\r
164 #ifndef int32\r
165 typedef signed int int32;\r
166 #endif\r
167 #ifndef int64\r
168 #ifdef _MSC_VER\r
169 typedef signed __int64 int64;\r
170 #else\r
171 typedef signed long long int64;\r
172 #endif\r
173 \r
174 static inline DWORD EndianToLittle_DWORD(DWORD x)\r
175 {\r
176    return x;\r
177 }\r
178 \r
179 static inline WORD EndianToLittle_WORD(WORD x)\r
180 {\r
181    return x;\r
182 }\r
183 \r
184 \r
185 #endif\r
186 \r
187 \r
188 typedef union {\r
189 #ifdef _BIG_ENDIAN\r
190         struct {\r
191                 uint8 h3, h2, h, l;\r
192         } b;\r
193         struct {\r
194                 int8 h3, h2, h, l;\r
195         } sb;\r
196         struct {\r
197                 uint16 h, l;\r
198         } w;\r
199         struct {\r
200                 int16 h, l;\r
201         } sw;\r
202 #else\r
203         struct {\r
204                 uint8 l, h, h2, h3;\r
205         } b;\r
206         struct {\r
207                 uint16 l, h;\r
208         } w;\r
209         struct {\r
210                 int8 l, h, h2, h3;\r
211         } sb;\r
212         struct {\r
213                 int16 l, h;\r
214         } sw;\r
215 #endif\r
216         uint32 d;\r
217         int32 sd;\r
218 } pair;\r
219 \r
220 // rgb color\r
221 #define _RGB888\r
222 \r
223 #if defined(_RGB555)\r
224 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 7) | (uint16)(((uint16)(g) & 0xf8) << 2) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
225 typedef uint16 scrntype;\r
226 #elif defined(_RGB565)\r
227 #define RGB_COLOR(r, g, b) ((uint16)(((uint16)(r) & 0xf8) << 8) | (uint16)(((uint16)(g) & 0xfc) << 3) | (uint16)(((uint16)(b) & 0xf8) >> 3))\r
228 typedef uint16 scrntype;\r
229 #elif defined(_RGB888)\r
230 #define RGB_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0))\r
231 typedef uint32 scrntype;\r
232 #endif\r
233 \r
234 // misc\r
235 bool check_file_extension(_TCHAR* file_path, _TCHAR* ext);\r
236 _TCHAR *get_file_path_without_extensiton(_TCHAR* file_path);\r
237 uint32 getcrc32(uint8 data[], int size);\r
238 \r
239 #define array_length(array) (sizeof(array) / sizeof(array[0]))\r
240 \r
241 #define FROM_BCD(v)     (((v) & 0x0f) + (((v) >> 4) & 0x0f) * 10)\r
242 #define TO_BCD(v)       ((int)(((v) % 100) / 10) << 4) | ((v) % 10)\r
243 #define TO_BCD_LO(v)    ((v) % 10)\r
244 #define TO_BCD_HI(v)    (int)(((v) % 100) / 10)\r
245 \r
246 #define LEAP_YEAR(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))\r
247 \r
248 typedef struct cur_time_t {\r
249         int year, month, day, day_of_week, hour, minute, second;\r
250         bool initialized;\r
251         cur_time_t()\r
252         {\r
253                 initialized = false;\r
254         }\r
255         void increment();\r
256         void update_year();\r
257         void update_day_of_week();\r
258         void save_state(void *f);\r
259         bool load_state(void *f);\r
260 } cur_time_t;\r
261 \r
262 #endif\r
263 #endif