1 | /* |
2 | Copyright (C) 2004-2006 NSRT Team ( http://nsrt.edgeemu.com ) |
3 | Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) |
4 | |
5 | This program is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU General Public License |
7 | version 2 as published by the Free Software Foundation. |
8 | |
9 | This program is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | GNU General Public License for more details. |
13 | |
14 | You should have received a copy of the GNU General Public License |
15 | along with this program; if not, write to the Free Software |
16 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
17 | */ |
18 | |
19 | #ifndef __PORTABLE_H |
20 | #define __PORTABLE_H |
21 | |
22 | #include <string.h> |
23 | #ifdef __GNUC__ |
24 | #include <stdint.h> |
25 | |
26 | typedef int8_t INT8; |
27 | typedef uint8_t UINT8; |
28 | typedef int16_t INT16; |
29 | typedef uint16_t UINT16; |
30 | typedef int32_t INT32; |
31 | typedef uint32_t UINT32; |
32 | typedef int64_t INT64; |
33 | typedef uint64_t UINT64; |
34 | typedef uintptr_t UINT_PTR; |
35 | |
36 | #else |
37 | |
38 | typedef signed char INT8; |
39 | typedef unsigned char UINT8; |
40 | typedef short INT16; |
41 | typedef unsigned short UINT16; |
42 | typedef int INT32; |
43 | typedef unsigned int UINT32; |
44 | #ifdef _MSC_VER |
45 | typedef __int64 INT64; |
46 | typedef unsigned __int64 UINT64; |
47 | #else |
48 | typedef long long INT64; |
49 | typedef unsigned long long UINT64; |
50 | #endif |
51 | typedef unsigned UINT_PTR; |
52 | |
53 | #endif |
54 | |
55 | typedef UINT8 BYTE; |
56 | typedef UINT16 WORD; |
57 | typedef UINT32 DWORD; |
58 | |
59 | typedef int BOOL; |
60 | #define FALSE 0 |
61 | #define TRUE 1 |
62 | |
63 | #define HRESULT int |
64 | #define S_OK 0 |
65 | #define E_INVALIDARG -1 |
66 | #define E_OUTOFMEMORY -2 |
67 | #define E_FAIL -3 |
68 | #define E_INTERNAL_ERROR -4 |
69 | #define E_INVALIDDATA -5 |
70 | |
71 | template <class T> inline T MyMin(T a, T b) { |
72 | return a < b ? a : b; |
73 | } |
74 | |
75 | template <class T> inline T MyMax(T a, T b) { |
76 | return a > b ? a : b; |
77 | } |
78 | |
79 | #define RETURN_IF_NOT_S_OK(x) { HRESULT __aResult_ = (x); if(__aResult_ != S_OK) return __aResult_; } |
80 | |
81 | |
82 | #define UINT_SIZE ((int)sizeof(unsigned int)) |
83 | #define USHORT_SIZE ((int)sizeof(unsigned short)) |
84 | |
85 | //Convert an array of 4 bytes back into an integer |
86 | inline UINT32 charp_to_uint(const UINT8 buffer[UINT_SIZE]) |
87 | { |
88 | UINT32 num = (UINT32)buffer[3]; |
89 | num |= ((UINT32)buffer[2]) << 8; |
90 | num |= ((UINT32)buffer[1]) << 16; |
91 | num |= ((UINT32)buffer[0]) << 24; |
92 | return(num); |
93 | } |
94 | |
95 | //Convert an array of 2 bytes back into a short integer |
96 | inline UINT16 charp_to_ushort(const UINT8 buffer[USHORT_SIZE]) |
97 | { |
98 | UINT16 num = (UINT16)buffer[1]; |
99 | num |= ((UINT16)buffer[0]) << 8; |
100 | return(num); |
101 | } |
102 | |
103 | #endif |
104 | |