00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef _FU_PLATFORMS_H_
00016 #define _FU_PLATFORMS_H_
00017
00018 #ifdef FCOLLADA_DLL
00019 #ifdef WIN32
00020
00021
00022 #pragma warning(disable:4251)
00023 #ifdef FCOLLADA_INTERNAL
00024 #define FCOLLADA_EXPORT __declspec(dllexport)
00025 #define FCOLLADA_LOCAL
00026 #else
00027 #define FCOLLADA_EXPORT __declspec(dllimport)
00028 #define FCOLLADA_LOCAL
00029 #endif // FCOLLADA_INTERNAL
00030 #elif defined(__APPLE__) || defined(LINUX)
00031 #define FCOLLADA_EXPORT __attribute__((visibility("default")))
00032 #define FCOLLADA_LOCAL __attribute__((visibility("hidden")))
00033 #endif
00034 #else // FCOLLADA_DLL
00035 #define FCOLLADA_EXPORT
00036 #define FCOLLADA_LOCAL
00037 #endif // FCOLLADA_DLL
00038
00039 #ifdef __PPU__
00040 #define UNICODE
00041 #endif // __PPU__
00042
00043
00044 #ifdef UNICODE
00045 #ifndef _UNICODE
00046 #define _UNICODE
00047 #endif
00048 #else
00049 #ifdef _UNICODE
00050 #define UNICODE
00051 #endif
00052 #endif
00053
00054 #ifndef _INC_MATH
00055 #include <math.h>
00056 #endif // _INC_MATH
00057
00058 #ifdef WIN32
00059
00060 #pragma warning(disable:4702)
00061 #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
00062 #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
00063 #endif
00064
00065 #include <windows.h>
00066 #include <stdio.h>
00067 #include <wchar.h>
00068 #else
00069 #ifdef __APPLE__
00070 #include <ctype.h>
00071 #include <wctype.h>
00072 #include <unistd.h>
00073 #include <string.h>
00074 #include <wchar.h>
00075 #else // __APPLE__
00076 #if defined(LINUX) || defined(__PPU__)
00077 #include <ctype.h>
00078 #include <wctype.h>
00079 #include <unistd.h>
00080 #include <string.h>
00081 #include <wchar.h>
00082 #include <stdarg.h>
00083 #include <malloc.h>
00084 #include <stdlib.h>
00085 #include <stdio.h>
00086 #else // OTHER...
00087 #error "Unsupported platform."
00088 #endif // LINUX || __PPU__
00089 #endif // __APPLE__
00090
00091 #endif // WIN32
00092
00093
00094 #ifdef WIN32
00095
00096 typedef signed char int8;
00097 typedef short int16;
00098 typedef long int32;
00099 typedef __int64 int64;
00100 typedef unsigned char uint8;
00101 typedef unsigned short uint16;
00102 typedef unsigned long uint32;
00103 typedef unsigned __int64 uint64;
00104
00105 #else // For LINUX and __APPLE__
00106
00107 typedef signed char int8;
00108 typedef short int16;
00109 typedef long int32;
00110 typedef long long int64;
00111 typedef unsigned char uint8;
00112 typedef unsigned short uint16;
00113 typedef unsigned long uint32;
00114 typedef unsigned long long uint64;
00115 typedef unsigned char byte;
00116
00117 #ifndef _CLIMITS_
00118 #include <climits>
00119 #endif // _CLIMITS_
00120
00121 #endif // PLATFORMS
00122
00123
00124 #if defined(__APPLE__) || defined (LINUX)
00125 inline char* strlower(char* str) { char* it = str; while (*it != 0) { *it = tolower(*it); ++it; } return str; }
00126 inline wchar_t* wcslwr(wchar_t* str) { wchar_t* it = str; while (*it != 0) { *it = towlower(*it); ++it; } return str; }
00127 inline int wcsicmp(const wchar_t* s1, const wchar_t* s2) { wchar_t c1 = *s1, c2 = *s2; while (c1 != 0 && c2 != 0) { if (c1 >= 'a' && c1 <= 'z') c1 -= 'a' + 'A'; if (c2 >= 'a' && c2 <= 'z') c2 -= 'a' + 'A'; if (c2 < c1) return -1; else if (c2 > c1) return 1; c1 = *(++s1); c2 = *(++s2); } return 0; }
00128 #ifndef isinf
00129 #define isinf __isinff
00130 #endif
00131 #define _stricmp strcasecmp
00132 #define _getcwd getcwd
00133 #define _chdir chdir
00134
00135 #elif defined(__PPU__)
00136 #define glClearDepth glClearDepthf
00137
00138 #endif // __APPLE__ and LINUX
00139
00140
00141 #ifdef WIN32
00142
00143 #define vsnprintf _vsnprintf
00144 #define snprintf _snprintf
00145 #define vsnwprintf _vsnwprintf
00146 #if _MSC_VER >= 1400 //vc8.0 use new secure
00147 #define snwprintf _snwprintf_s
00148 #else
00149 #define snwprintf _snwprintf
00150 #endif // _MSC_VER
00151
00152 #define strlower _strlwr
00153
00154 #else // WIN32
00155
00156 #define vsnwprintf vswprintf
00157 #define snwprintf swprintf
00158
00159 #endif // WIN32
00160
00161
00162
00163
00164 #ifdef UNICODE
00165
00166 #define fchar wchar_t
00167 #define FC(a) L ## a
00168
00169 #define fstrlen wcslen
00170 #define fstrcmp wcscmp
00171 #define fstrncpy wcsncpy
00172 #define fstrrchr wcsrchr
00173 #define fstrchr wcschr
00174 #define fsnprintf snwprintf
00175 #define fvsnprintf vsnwprintf
00176 #define fstrup _wcsupr
00177
00178 #ifdef __PPU__
00179 #define fstricmp wcscmp // [claforte] TODO: Implement __PPU__ version of wcsicmp
00180 #elif defined(WIN32)
00181 #define fstricmp _wcsicmp
00182 #else
00183 #define fstricmp wcsicmp
00184 #endif // !__PPU__
00185
00186 #ifdef WIN32
00187 #define fstrlower _wcslwr
00188 #else
00189 #define fstrlower wcslwr
00190 #endif // WIN32
00191
00192 #ifdef WIN32
00193 #define fchdir _tchdir
00194 #else // WIN32
00195 #define fchdir(a) chdir(FUStringConversion::ToString(a).c_str())
00196 #endif // !WIN32
00197
00198 #else // UNICODE
00199
00200 typedef char fchar;
00201 #define FC(a) a
00202
00203 #define fstrlen strlen
00204 #define fstrcmp strcmp
00205 #define fstricmp _stricmp
00206 #define fstrncpy strncpy
00207 #define fstrrchr strrchr
00208 #define fstrchr strchr
00209 #define fstrlower strlower
00210 #define fsnprintf snprintf
00211 #define fvsnprintf vsnprintf
00212 #define fstrup _strupr
00213
00214 #define fchdir chdir
00215
00216 #endif // UNICODE
00217
00218 #ifndef WIN32
00219 #define MAX_PATH 1024
00220 #endif // !WIN32
00221
00222 #ifdef WIN32
00223
00227
00228 #define ALIGN_STRUCT(byteCount)
00229 #else // !WIN32
00230 #define ALIGN_STRUCT(byteCount)
00231 #endif // WIN32
00232
00233 #if defined(WIN32) && _MSC_VER >= 1400
00234 #define DEPRECATED(versionNumber, alternative) __declspec(deprecated("[" #versionNumber "] This function is now deprecated. Please use '" #alternative "' instead."))
00235 #else
00236
00240 #define DEPRECATED(versionNumber, alternative)
00241 #endif // WIN32 && MSVS2005
00242
00243 #endif // _FU_PLATFORMS_H_