portab.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:9k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: portab.h 618 2006-01-28 12:22:07Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #ifndef __PORTAB_H
  24. #define __PORTAB_H
  25. #include <stdio.h>
  26. #include <stdlib.h>
  27. #include <string.h>
  28. #include <ctype.h>
  29. #include <stdarg.h>
  30. #undef INLINE
  31. #undef NOINLINE
  32. #undef IS_LITTLE_ENDIAN
  33. #undef IS_BIG_ENDIAN
  34. #if defined(__palmos__)
  35. #define TARGET_PALMOS
  36. #define REGISTRY_GLOBAL
  37. #define NO_FLOATINGPOINT
  38. #elif defined(__SYMBIAN32__)
  39. #define TARGET_SYMBIAN
  40. #define REGISTRY_GLOBAL
  41. #define UNICODE
  42. //#define MULTITHREAD
  43. #ifdef __MARM__
  44. #define ARM
  45. #endif
  46. #elif defined(_WIN32_WCE)
  47. #define TARGET_WINCE
  48. #define MULTITHREAD
  49. #elif defined(_WIN32)
  50. #define TARGET_WIN32
  51. #define MULTITHREAD
  52. #else
  53. #error Unsupported target
  54. #endif
  55. #if !defined(NO_CONTEXT)
  56. #define CONFIG_CONTEXT
  57. #endif
  58. #if defined(ARM) || defined(MIPS) || defined(SH3)
  59. #define CONFIG_DYNCODE
  60. #endif
  61. #if defined(_M_IX86)
  62. #define CONFIG_UNALIGNED_ACCESS
  63. #endif
  64. #if defined(ARM) || defined(MIPS) || defined(SH3) || defined(_M_IX86)
  65. #define IS_LITTLE_ENDIAN
  66. #else
  67. #define IS_BIG_ENDIAN
  68. #endif
  69. #define TICKSPERSEC 16384
  70. #ifndef M_PI
  71. #define M_PI    3.14159265358979323846
  72. #endif
  73. #define MAX_INT 0x7FFFFFFF
  74. #ifdef _MSC_VER
  75. #if _MSC_VER >= 1400
  76. #pragma comment(linker, "/nodefaultlib:libc.lib")
  77. #pragma comment(linker, "/nodefaultlib:libcd.lib")
  78. #pragma comment(linker, "/nodefaultlib:oldnames.lib")
  79. #endif
  80. #ifndef alloca
  81. #define alloca _alloca
  82. #endif
  83. #ifndef inline
  84. #define inline __inline
  85. #endif
  86. typedef signed long int32_t;
  87. typedef unsigned long uint32_t;  
  88. typedef signed short int16_t; 
  89. typedef unsigned short uint16_t; 
  90. typedef signed char int8_t;
  91. typedef unsigned char uint8_t;
  92. typedef signed __int64 int64_t;
  93. typedef unsigned __int64 uint64_t;
  94. #ifndef _UINTPTR_T_DEFINED
  95. typedef unsigned int uintptr_t;
  96. #define _UINTPTR_T_DEFINED
  97. #endif
  98. #if _MSC_VER >= 1400
  99. #define NOINLINE __declspec(noinline)
  100. #else
  101. #define NOINLINE
  102. #endif
  103. #define INLINE __forceinline
  104. #define STDCALL __stdcall
  105. #else
  106. #ifdef TARGET_SYMBIAN
  107. typedef signed long int32_t;
  108. typedef unsigned long uint32_t;  
  109. typedef signed short int16_t; 
  110. typedef unsigned short uint16_t; 
  111. typedef signed char int8_t;
  112. typedef unsigned char uint8_t;
  113. typedef signed long long int64_t;
  114. typedef unsigned long long uint64_t;
  115. typedef uint32_t uintptr_t;
  116. #else
  117. #include <stdint.h>
  118. #endif
  119. #define INLINE inline
  120. #if __GNUC__ >= 3
  121. #define NOINLINE __attribute__((noinline))
  122. #else
  123. #define NOINLINE 
  124. #endif
  125. #if defined(TARGET_WINCE) || defined(TARGET_PALMOS) || defined(TARGET_SYMBIAN)
  126. #define __stdcall
  127. #define STDCALL 
  128. #else
  129. #define STDCALL __attribute__((stdcall))
  130. #endif
  131. #endif
  132. #ifdef __MMX__
  133. #define MMX
  134. #endif
  135. #define MAX_TICK MAX_INT
  136. typedef int bool_t;
  137. typedef int tick_t;
  138. typedef int filepos_t;
  139. typedef uint8_t boolmem_t; //unsigned so ":1" bitmode should work
  140. typedef struct guid
  141. {
  142.     uint32_t v1;
  143.     uint16_t v2;
  144.     uint16_t v3;
  145.     uint8_t v4[8];
  146. } guid;
  147. typedef struct fraction
  148. {
  149. int Num;
  150. int Den;
  151. } fraction;
  152. typedef struct fraction64
  153. {
  154. int64_t Num;
  155. int64_t Den;
  156. } fraction64;
  157. #ifndef ZLIB_INTERNAL
  158. #undef T
  159. #ifdef UNICODE
  160. #if defined(__GNUC__)
  161. #include <wchar.h>
  162. #endif
  163. #if defined(__GNUC__) && defined(__cplusplus)
  164. typedef __wchar_t tchar_t;
  165. #else
  166. typedef unsigned short tchar_t;
  167. #endif
  168. #define tcsstr wcsstr
  169. #define tcslen wcslen
  170. #define tcscmp wcscmp
  171. #define tcsncmp wcsncmp
  172. #define tcschr wcschr
  173. #define tcsrchr wcsrchr
  174. #define T(a) L ## a
  175. #ifdef TARGET_SYMBIAN
  176. extern int wcsncmp(const tchar_t *,const tchar_t *,size_t);
  177. extern tchar_t* wcschr(const tchar_t *, tchar_t);
  178. extern tchar_t* wcsrchr(const tchar_t *, tchar_t);
  179. #endif
  180. #else
  181. typedef char tchar_t;
  182. #define tcsstr strstr
  183. #define tcslen strlen
  184. #define tcscmp strcmp
  185. #define tcsncmp strncmp
  186. #define tcschr strchr
  187. #define tcsrchr strrchr
  188. #define T(a) a
  189. #endif
  190. #endif
  191. #define tcscpy !UNSAFE!
  192. #define tcscat !UNSAFE!
  193. #define stprintf !UNSAFE!
  194. #define vstprintf !UNSAFE!
  195. #if defined(_WIN32)
  196. #define DLLEXPORT __declspec(dllexport)
  197. #define DLLIMPORT __declspec(dllimport)
  198. #else
  199. #define DLLEXPORT
  200. #define DLLIMPORT
  201. #endif
  202. #if !defined(SH3) && !defined(MIPS)
  203. #define _INLINE INLINE
  204. #define _CONST const
  205. #else
  206. #define _INLINE
  207. #define _CONST
  208. #endif
  209. #ifdef BUILDFIXED
  210. #define _CONSTFIXED
  211. #else
  212. #define _CONSTFIXED _CONST
  213. #endif
  214. //todo: needs more testing, that nothing broke...
  215. //#if defined(MAX_PATH)
  216. //#define MAXPATH MAX_PATH
  217. //#else
  218. #define MAXPATH 256
  219. //#endif
  220. #define MAXMIME 16
  221. #define MAXPLANES 4
  222. typedef void* planes[MAXPLANES];
  223. typedef const void* constplanes[MAXPLANES];
  224. #define FOURCCBE(a,b,c,d) 
  225. (((uint8_t)(a) << 24) | ((uint8_t)(b) << 16) | 
  226. ((uint8_t)(c) << 8) | ((uint8_t)(d) << 0))
  227. #define FOURCCLE(a,b,c,d) 
  228. (((uint8_t)(a) << 0) | ((uint8_t)(b) << 8) | 
  229. ((uint8_t)(c) << 16) | ((uint8_t)(d)<< 24))
  230. #ifdef IS_BIG_ENDIAN
  231. #define FOURCC(a,b,c,d) FOURCCBE(a,b,c,d)
  232. #else
  233. #define FOURCC(a,b,c,d) FOURCCLE(a,b,c,d)
  234. #endif
  235. #ifndef min
  236. #  define min(x,y)  ((x)>(y)?(y):(x))
  237. #endif
  238. #ifndef max
  239. #  define max(x,y)  ((x)<(y)?(y):(x))
  240. #endif
  241. #ifndef sign
  242. #  define sign(x) ((x)<0?-1:1)
  243. #endif
  244. #if defined(TARGET_WINCE)
  245. #define strdup(x) _strdup(x)
  246. #endif
  247. #if defined(__GNUC__)
  248. #define alloca(size) __builtin_alloca(size)
  249. #if defined(TARGET_PALMOS)
  250. extern int rand();
  251. extern void qsort(void* const base,size_t,size_t,int(*cmp)(const void*,const void*));
  252. #endif
  253. #if defined(ARM) && !defined(TARGET_WINCE)
  254. //fixed size stack:
  255. //  symbian
  256. //  palm os
  257. #define SWAPSP
  258. static INLINE void* SwapSP(void* in)
  259. {
  260. void* out;
  261. asm volatile(
  262. "mov %0, spnt"
  263. "mov sp, %1nt"
  264. : "=&r"(out) : "r"(in) : "cc");
  265. return out;
  266. }
  267. #endif
  268. #endif //__GNUC__
  269. #ifdef _MSC_VER
  270. #define LIBGCC
  271. int64_t __divdi3(int64_t a,int64_t b) { return a/b; } 
  272. int64_t __moddi3(int64_t a,int64_t b) { return a%b; } 
  273. int32_t __divsi3(int32_t a,int32_t b) { return a/b; } 
  274. int32_t __modsi3(int32_t a,int32_t b) { return a%b; } 
  275. uint32_t __udivsi3(uint32_t a,uint32_t b) { return a/b; } 
  276. uint32_t __umodsi3(uint32_t a,uint32_t b) { return a%b; }
  277. #define LIBGCCFLOAT
  278. int __fixdfsi(double i) { return (int)i; } 
  279. int64_t __fixdfdi(double i) { return (int64_t)i; } 
  280. int __eqdf2(double a,double b) { return !(a==b); } 
  281. int __nedf2(double a,double b) { return a != b; } 
  282. int __gtdf2(double a,double b) { return a > b; } 
  283. int __gedf2(double a,double b) { return (a>=b)-1; } 
  284. int __ltdf2(double a,double b) { return -(a<b); } 
  285. int __ledf2(double a,double b) { return 1-(a<=b); } 
  286. double __floatsidf(int i) { return (double)i; } 
  287. double __extendsfdf2(float f) { return f; } 
  288. double __negdf2(double a) { return -a; } 
  289. double __divdf3(double a,double b) { return a/b; } 
  290. double __muldf3(double a,double b) { return a*b; } 
  291. double __adddf3(double a,double b) { return a+b; } 
  292. double __subdf3(double a,double b) { return a-b; } 
  293. int __eqsf2(float a,float b) { return !(a==b); } 
  294. int __nesf2(float a,float b) { return a != b; } 
  295. int __gtsf2(float a,float b) { return a > b; } 
  296. int __gesf2(float a,float b) { return (a>=b)-1; } 
  297. int __ltsf2(float a,float b) { return -(a<b); } 
  298. int __lesf2(float a,float b) { return 1-(a<=b); } 
  299. int __fixsfsi(float i) { return (int)i; } 
  300. float __floatsisf(int i) { return (float)i; } 
  301. float __truncdfsf2(double f) { return (float)f; } 
  302. float __negsf2(float a) { return -a; } 
  303. float __divsf3(float a,float b) { return a/b; } 
  304. float __mulsf3(float a,float b) { return a*b; } 
  305. float __addsf3(float a,float b) { return a+b; } 
  306. float __subsf3(float a,float b) { return a-b; }
  307. #else
  308. #define LIBGCC
  309. #ifdef NO_FLOATINGPOINT
  310. #define LIBGCCFLOAT 
  311. double log(double a) { return 0; } 
  312. double pow(double a,double b) { return 0; } 
  313. double sqrt(double a) { return 0; } 
  314. double exp(double a) { return 1.0+a+a*a/2.0+a*a*a/6.0; }
  315. #else
  316. #define LIBGCCFLOAT
  317. #endif
  318. #endif
  319. #endif