1 #ifndef __PLATFORM_DEFS_H__
2 #define __PLATFORM_DEFS_H__
5 * Copyright (C) 2005-2008 Team XBMC
8 * This Program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
13 * This Program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with XBMC; see the file COPYING. If not, write to
20 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21 * http://www.gnu.org/copyleft/gpl.html
27 #define LINE_ENDING "\n"
29 #ifndef _LARGEFILE64_SOURCE
30 #define _LARGEFILE64_SOURCE
33 #undef _FILE_OFFSET_BITS
34 #define _FILE_OFFSET_BITS 64
36 #include <sys/types.h>
44 #include <sys/sysctl.h>
45 #include <mach/mach.h>
47 #include <sys/sysinfo.h>
53 // do not move this, it will break osx build bad"
58 #if defined(__ppc__) || defined(__powerpc__)
59 #define PIXEL_ASHIFT 0
60 #define PIXEL_RSHIFT 8
61 #define PIXEL_GSHIFT 16
62 #define PIXEL_BSHIFT 24
63 #define AMASK 0x000000ff
64 #define RMASK 0x0000ff00
65 #define GMASK 0x00ff0000
66 #define BMASK 0xff000000
68 #define PIXEL_ASHIFT 24
69 #define PIXEL_RSHIFT 16
70 #define PIXEL_GSHIFT 8
71 #define PIXEL_BSHIFT 0
72 #define AMASK 0xff000000
73 #define RMASK 0x00ff0000
74 #define GMASK 0x0000ff00
75 #define BMASK 0x000000ff
106 #define PRIx64 "I64x"
126 #define XXLog(a,b) printf("%s", (b))
129 #define INSTALL_PATH "/usr/share/xbmc"
132 #ifndef BIN_INSTALL_PATH
133 #define BIN_INSTALL_PATH "/usr/lib/xbmc"
140 #define _fdopen fdopen
141 #define _vsnprintf vsnprintf
142 #define _stricmp strcasecmp
143 #define stricmp strcasecmp
144 #define strcmpi strcasecmp
145 #define strnicmp strncasecmp
146 #define _atoi64(x) atoll(x)
147 #define CopyMemory(dst,src,size) memmove(dst, src, size)
148 #define ZeroMemory(dst,size) memset(dst, 0, size)
151 #define byte unsigned char
153 #define __int16 short
155 #define __int64 long long
156 #define __uint64 unsigned long long
158 #if defined(__x86_64__) || defined(__powerpc__) || defined(__ppc__) || defined (__arm__) // should this be powerpc64 only?
160 #else /* !__x86_64__ */
161 #define __stdcall __attribute__((__stdcall__))
162 #endif /* __x86_64__ */
165 #define NTAPI __stdcall
166 #define CALLBACK __stdcall
167 #define WINAPI __stdcall
168 #define WINAPIV __cdecl
170 #define APIENTRY WINAPI
174 #define APIPRIVATE __stdcall
179 #define __declspec(X)
182 #define EXCEPTION_EXECUTE_HANDLER ...
183 //NOTE: dont try to define __except because it breaks g++ (already uses it).
185 typedef pthread_t ThreadIdentifier;
187 struct CXHandle; // forward declaration
188 typedef CXHandle* HANDLE;
190 typedef void* HINSTANCE;
191 typedef void* HMODULE;
193 typedef unsigned int DWORD;
194 typedef unsigned short WORD;
195 typedef unsigned char BYTE;
197 typedef unsigned char UCHAR;
198 typedef wchar_t WCHAR;
200 typedef BYTE BOOLEAN;
202 typedef unsigned short USHORT;
204 typedef unsigned int UINT;
205 // typedef int INT32; // unused; must match Xmd.h but why bother
206 typedef unsigned int UINT32;
207 typedef long long INT64;
208 typedef unsigned long long UINT64;
210 typedef long long LONGLONG;
211 typedef unsigned long ULONG;
213 typedef size_t SIZE_T;
215 typedef void* LPVOID;
216 //typedef PVOID HANDLE;
217 #define INVALID_HANDLE_VALUE ((HANDLE)~0U)
220 typedef LONG HRESULT;
221 typedef BYTE* LPBYTE;
222 typedef DWORD* LPDWORD;
223 typedef CONST CHAR* LPCSTR;
224 typedef CONST WCHAR* LPCWSTR;
225 typedef CHAR* LPTSTR;
226 typedef WCHAR *PWSTR, *LPWSTR, *NWPSTR;
227 typedef CHAR *PSTR, *LPSTR, *NPSTR;
228 typedef LONG *PLONG, *LPLONG;
230 typedef LPCWSTR LPCTSTR;
232 typedef LPCSTR LPCTSTR;
234 typedef unsigned __int64 ULONGLONG;
235 typedef long LONG_PTR;
236 typedef unsigned long ULONG_PTR;
237 typedef ULONG_PTR DWORD_PTR;
238 typedef __int64 __time64_t;
239 typedef intptr_t (*FARPROC)(void);
241 #define MAXWORD 0xffff
242 #define MAXDWORD 0xffffffff
245 typedef WORD* LPWORD;
246 typedef BOOL* LPBOOL;
247 typedef CHAR* LPCHAR;
249 typedef const void* LPCVOID;
251 typedef union _LARGE_INTEGER
258 } LARGE_INTEGER, *PLARGE_INTEGER;
260 typedef union _ULARGE_INTEGER {
266 } ULARGE_INTEGER, *PULARGE_INTEGER;
268 #define MAKELONG(low,high) ((LONG)(((WORD)((DWORD_PTR)(low) & 0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16))
269 LONGLONG Int32x32To64(LONG Multiplier, LONG Multiplicand);
271 void OutputDebugString(LPCTSTR lpOuputString);
275 typedef struct _SYSTEMTIME
285 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
287 typedef struct _TIME_ZONE_INFORMATION {
289 WCHAR StandardName[32];
290 SYSTEMTIME StandardDate;
292 WCHAR DaylightName[32];
293 SYSTEMTIME DaylightDate;
295 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
297 #define TIME_ZONE_ID_INVALID ((DWORD)0xFFFFFFFF)
298 #define TIME_ZONE_ID_UNKNOWN 0
299 #define TIME_ZONE_ID_STANDARD 1
300 #define TIME_ZONE_ID_DAYLIGHT 2
303 #define THREAD_BASE_PRIORITY_LOWRT 15
304 #define THREAD_BASE_PRIORITY_MAX 2
305 #define THREAD_BASE_PRIORITY_MIN -2
306 #define THREAD_BASE_PRIORITY_IDLE -15
307 #define THREAD_PRIORITY_LOWEST THREAD_BASE_PRIORITY_MIN
308 #define THREAD_PRIORITY_BELOW_NORMAL (THREAD_PRIORITY_LOWEST+1)
309 #define THREAD_PRIORITY_NORMAL 0
310 #define THREAD_PRIORITY_HIGHEST THREAD_BASE_PRIORITY_MAX
311 #define THREAD_PRIORITY_ABOVE_NORMAL (THREAD_PRIORITY_HIGHEST-1)
312 #define THREAD_PRIORITY_ERROR_RETURN (0x7fffffff)
313 #define THREAD_PRIORITY_TIME_CRITICAL THREAD_BASE_PRIORITY_LOWRT
314 #define THREAD_PRIORITY_IDLE THREAD_BASE_PRIORITY_IDLE
317 #define SOCKADDR_IN struct sockaddr_in
318 #define IN_ADDR struct in_addr
319 #define SOCKET_ERROR (-1)
320 #define INVALID_SOCKET (~0)
321 #define closesocket(s) close(s)
322 #define ioctlsocket(s, f, v) ioctl(s, f, v)
323 #define WSAGetLastError() (errno)
324 #define WSASetLastError(e) (errno = e)
325 #define WSAECONNRESET ECONNRESET
326 #define WSAHOST_NOT_FOUND ENOENT
327 #define WSAETIMEDOUT ETIMEDOUT
328 #define WSAEADDRINUSE EADDRINUSE
329 #define WSAECANCELLED EINTR
330 #define WSAECONNREFUSED ECONNREFUSED
331 #define WSAECONNABORTED ECONNABORTED
332 #define WSAETIMEDOUT ETIMEDOUT
337 typedef int (*LPTHREAD_START_ROUTINE)(void *);
342 #define _O_TRUNC O_TRUNC
343 #define _O_RDONLY O_RDONLY
344 #define _O_WRONLY O_WRONLY
347 #if defined(__APPLE__)
349 #include <AvailabilityMacros.h>
350 typedef int64_t off64_t;
351 typedef off_t __off_t;
352 typedef off64_t __off64_t;
353 typedef fpos_t fpos64_t;
354 #if (MAC_OS_X_VERSION_MAX_ALLOWED < 1050)
355 #define __stat64 stat
357 #define statfs64 statfs
358 #define fstat64 fstat
359 #elif defined(__arm__)
360 #define __stat64 stat
362 #define statfs64 statfs
363 #define fstat64 fstat
365 #define fstat64 fstat
368 #define __stat64 stat64
374 unsigned short st_mode;
385 typedef struct _FILETIME
388 DWORD dwHighDateTime;
389 } FILETIME, *PFILETIME, *LPFILETIME;
391 typedef struct _WIN32_FIND_DATA
393 DWORD dwFileAttributes;
394 FILETIME ftCreationTime;
395 FILETIME ftLastAccessTime;
396 FILETIME ftLastWriteTime;
402 CHAR cAlternateFileName[14];
403 } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
405 #define LPWIN32_FIND_DATAA LPWIN32_FIND_DATA
407 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
409 typedef struct _SECURITY_ATTRIBUTES {
411 LPVOID lpSecurityDescriptor;
413 } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
416 #define FILE_CURRENT 1
419 #define _S_IFREG S_IFREG
420 #define _S_IFDIR S_IFDIR
421 #define MAX_PATH PATH_MAX
426 typedef struct _MEMORYSTATUSEX
431 uint64_t ullTotalPhys;
432 uint64_t ullAvailPhys;
433 uint64_t ullTotalPageFile;
434 uint64_t ullAvailPageFile;
435 uint64_t ullTotalVirtual;
436 uint64_t ullAvailVirtual;
437 } MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
439 // Common HRESULT values
447 #define E_FAIL (0x80004005L)
449 #ifndef E_OUTOFMEMORY
450 #define E_OUTOFMEMORY (0x8007000EL)
452 #define FAILED(Status) ((HRESULT)(Status)<0)
455 typedef struct _RECT {
462 typedef DWORD D3DCOLOR;
464 typedef enum _D3DFORMAT
466 D3DFMT_A8R8G8B8 = 0x00000006,
467 D3DFMT_DXT1 = 0x0000000C,
468 D3DFMT_DXT2 = 0x0000000E,
469 D3DFMT_DXT4 = 0x0000000F,
470 D3DFMT_UNKNOWN = 0xFFFFFFFF
473 typedef enum D3DRESOURCETYPE
475 D3DRTYPE_SURFACE = 1,
477 D3DRTYPE_TEXTURE = 3,
478 D3DRTYPE_VOLUMETEXTURE = 4,
479 D3DRTYPE_CubeTexture = 5,
480 D3DRTYPE_VERTEXBUFFER = 6,
481 D3DRTYPE_INDEXBUFFER = 7,
482 D3DRTYPE_FORCE_DWORD = 0x7fffffff
483 } D3DRESOURCETYPE, *LPD3DRESOURCETYPE;
485 typedef enum D3DXIMAGE_FILEFORMAT
496 D3DXIFF_FORCE_DWORD = 0x7fffffff
497 } D3DXIMAGE_FILEFORMAT, *LPD3DXIMAGE_FILEFORMAT;
499 typedef struct D3DXIMAGE_INFO {
505 D3DRESOURCETYPE ResourceType;
506 D3DXIMAGE_FILEFORMAT ImageFileFormat;
507 } D3DXIMAGE_INFO, *LPD3DXIMAGE_INFO;
509 typedef struct _D3DPRESENT_PARAMETERS_
511 UINT BackBufferWidth;
512 UINT BackBufferHeight;
513 D3DFORMAT BackBufferFormat;
514 UINT BackBufferCount;
515 //D3DMULTISAMPLE_TYPE MultiSampleType;
516 //D3DSWAPEFFECT SwapEffect;
517 //HWND hDeviceWindow;
519 BOOL EnableAutoDepthStencil;
520 D3DFORMAT AutoDepthStencilFormat;
522 UINT FullScreen_RefreshRateInHz;
523 UINT FullScreen_PresentationInterval;
524 //D3DSurface *BufferSurfaces[3];
525 //D3DSurface *DepthStencilSurface;
526 } D3DPRESENT_PARAMETERS;
528 typedef enum D3DPRIMITIVETYPE
533 D3DPT_TRIANGLELIST = 4,
534 D3DPT_TRIANGLESTRIP = 5,
535 D3DPT_TRIANGLEFAN = 6,
536 D3DPT_FORCE_DWORD = 0x7fffffff
537 } D3DPRIMITIVETYPE, *LPD3DPRIMITIVETYPE;
539 typedef struct _D3DMATRIX {
542 float _11, _12, _13, _14;
543 float _21, _22, _23, _24;
544 float _31, _32, _33, _34;
545 float _41, _42, _43, _44;
551 // Misc stuff found in the code, not really important
552 #define PAGE_READONLY 0x02
553 #define PAGE_READWRITE 0x04
554 #define MAXULONG_PTR ((ULONG) 0xffffffff)
556 // CreateFile defines
557 #define FILE_FLAG_WRITE_THROUGH 0x80000000
558 #define FILE_FLAG_OVERLAPPED 0x40000000
559 #define FILE_FLAG_NO_BUFFERING 0x20000000
560 #define FILE_FLAG_RANDOM_ACCESS 0x10000000
561 #define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000
562 #define FILE_FLAG_DELETE_ON_CLOSE 0x04000000
563 #define FILE_FLAG_BACKUP_SEMANTICS 0x02000000
564 #define FILE_FLAG_POSIX_SEMANTICS 0x01000000
565 #define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
566 #define FILE_FLAG_OPEN_NO_RECALL 0x00100000
567 #define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000
570 #define CREATE_ALWAYS 2
571 #define OPEN_EXISTING 3
572 #define OPEN_ALWAYS 4
573 #define TRUNCATE_EXISTING 5
575 #define FILE_ATTRIBUTE_NORMAL 0x00000080
576 #define FILE_ATTRIBUTE_READONLY 0x00000001
577 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
578 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
579 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
581 #define FILE_READ_DATA ( 0x0001 )
582 #define FILE_WRITE_DATA ( 0x0002 )
583 #define FILE_APPEND_DATA ( 0x0004 )
585 #define GENERIC_READ FILE_READ_DATA
586 #define GENERIC_WRITE FILE_WRITE_DATA
587 #define FILE_SHARE_READ 0x00000001
588 #define FILE_SHARE_WRITE 0x00000002
589 #define FILE_SHARE_DELETE 0x00000004
592 typedef struct tWAVEFORMATEX
596 DWORD nSamplesPerSec;
597 DWORD nAvgBytesPerSec;
601 } __attribute__((__packed__)) WAVEFORMATEX, *PWAVEFORMATEX, *LPWAVEFORMATEX;
603 #define WAVE_FORMAT_UNKNOWN 0x0000
604 #define WAVE_FORMAT_PCM 0x0001
605 #define WAVE_FORMAT_ADPCM 0x0002
606 #define WAVE_FORMAT_IEEE_FLOAT 0x0003
607 #define WAVE_FORMAT_EXTENSIBLE 0xFFFE
609 #define SPEAKER_FRONT_LEFT 0x00001
610 #define SPEAKER_FRONT_RIGHT 0x00002
611 #define SPEAKER_FRONT_CENTER 0x00004
612 #define SPEAKER_LOW_FREQUENCY 0x00008
613 #define SPEAKER_BACK_LEFT 0x00010
614 #define SPEAKER_BACK_RIGHT 0x00020
615 #define SPEAKER_FRONT_LEFT_OF_CENTER 0x00040
616 #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x00080
617 #define SPEAKER_BACK_CENTER 0x00100
618 #define SPEAKER_SIDE_LEFT 0x00200
619 #define SPEAKER_SIDE_RIGHT 0x00400
620 #define SPEAKER_TOP_CENTER 0x00800
621 #define SPEAKER_TOP_FRONT_LEFT 0x01000
622 #define SPEAKER_TOP_FRONT_CENTER 0x02000
623 #define SPEAKER_TOP_FRONT_RIGHT 0x04000
624 #define SPEAKER_TOP_BACK_LEFT 0x08000
625 #define SPEAKER_TOP_BACK_CENTER 0x10000
626 #define SPEAKER_TOP_BACK_RIGHT 0x20000
633 } __attribute__((__packed__)) GUID;
635 static const GUID KSDATAFORMAT_SUBTYPE_UNKNOWN = {
638 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
641 static const GUID KSDATAFORMAT_SUBTYPE_PCM = {
644 {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
647 static const GUID KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = {
648 WAVE_FORMAT_IEEE_FLOAT,
650 {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
653 typedef struct tWAVEFORMATEXTENSIBLE
658 WORD wValidBitsPerSample;
659 WORD wSamplesPerBlock;
664 } __attribute__((__packed__)) WAVEFORMATEXTENSIBLE;
670 #endif //__PLATFORM_DEFS_H__