00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CS_CSOSDEFS_H__
00021 #define __CS_CSOSDEFS_H__
00022
00023 #define CS_EXPORT_SYM_DLL __declspec(dllexport)
00024 #define CS_IMPORT_SYM_DLL __declspec(dllimport)
00025
00026 #ifdef CS_USE_SHARED_LIBS
00027 #define CS_EXPORT_SYM CS_EXPORT_SYM_DLL
00028 #define CS_IMPORT_SYM CS_IMPORT_SYM_DLL
00029 #else
00030 #define CS_EXPORT_SYM
00031 #define CS_IMPORT_SYM
00032 #endif // CS_USE_SHARED_LIBS
00033
00034 #if defined(CS_COMPILER_MSVC)
00035 #pragma warning(disable:4244) // conversion from 'double' to 'float'
00036 #pragma warning(disable:4250) // '...' inherits '..' via dominance
00037 #pragma warning(disable:4251)
00038
00039
00040 #pragma warning(disable:4275)
00041
00042
00043 #pragma warning(disable:4290) // C++ exception specification ignored
00044 #pragma warning(disable:4312)
00045
00046 #pragma warning(disable:4345)
00047
00048
00049 #pragma warning(disable:4355) // 'this' used in base member initializer list
00050
00051
00052 #if !defined(__INTEL_COMPILER)
00053 #pragma inline_depth (255)
00054 #pragma inline_recursion (on)
00055 #pragma intrinsic (memset, memcpy, memcmp)
00056 #pragma intrinsic (strcpy, strcmp, strlen, strcat)
00057 #pragma intrinsic (abs, fabs)
00058 #pragma intrinsic (_byteswap_ushort, _byteswap_ulong, _byteswap_uint64)
00059 #endif
00060
00061 #pragma auto_inline (on)
00062
00063 #define CS_FORCEINLINE __forceinline
00064
00065 #if _MSC_VER >= 1400
00066
00067
00068
00069
00070
00071 #define _interlockedbittestandset workaround_header_bug_1
00072 #define _interlockedbittestandreset workaround_header_bug_2
00073 #include <intrin.h>
00074 #undef _interlockedbittestandset
00075 #undef _interlockedbittestandreset
00076 #else
00077 extern "C" long _InterlockedCompareExchange (long volatile *, long, long);
00078 extern "C" long _InterlockedDecrement (long volatile *);
00079 extern "C" long _InterlockedExchange (long volatile *, long);
00080 extern "C" long _InterlockedIncrement (long volatile *);
00081
00082 extern "C" unsigned char _BitScanForward (unsigned long* Index, unsigned long Mask);
00083 extern "C" unsigned char _BitScanReverse (unsigned long* Index, unsigned long Mask);
00084 #endif
00085 #if !defined(__INTEL_COMPILER)
00086 #pragma intrinsic (_InterlockedCompareExchange)
00087 #pragma intrinsic (_InterlockedDecrement)
00088 #pragma intrinsic (_InterlockedExchange)
00089 #pragma intrinsic (_InterlockedIncrement)
00090 #pragma intrinsic (_BitScanForward)
00091 #pragma intrinsic (_BitScanReverse)
00092 #endif
00093
00094 #define CS_HAVE_BITSCAN_INTRINSICS
00095
00096 #if defined(__CRYSTAL_SPACE__) && !defined(CS_DEBUG)
00097 #pragma code_seg("CSpace") // Just for fun :)
00098
00099
00100 #endif
00101
00102
00103 #if (_MSC_VER >= 1400)
00104
00105
00106
00107 #endif
00108 #endif
00109
00110 #ifndef WINVER
00111 #define WINVER 0x0500
00112 #endif
00113
00114 #ifndef _WIN32_WINNT
00115 #define _WIN32_WINNT 0x0500
00116 #endif
00117
00118
00119
00120
00121
00122 #if defined(CS_COMPILER_GCC)
00123
00124
00125
00126 #if defined(__i686__) && !defined(_M_IX86)
00127 #define _M_IX86 600
00128 #elif defined(__i586__) && !defined(_M_IX86)
00129 #define _M_IX86 500
00130 #elif defined(__i486__) && !defined(_M_IX86)
00131 #define _M_IX86 400
00132 #elif defined(__i386__) && !defined(_M_IX86)
00133 #define _M_IX86 300
00134 #endif
00135 #if defined(_M_IX86) && !defined(_X86_)
00136 #define _X86_
00137 #endif
00138
00139 #ifdef __GNUC__
00140 #ifndef NONAMELESSUNION
00141 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
00142 #ifndef _ANONYMOUS_UNION
00143 #define _ANONYMOUS_UNION __extension__
00144 #endif
00145 #ifndef _ANONYMOUS_STRUCT
00146 #define _ANONYMOUS_STRUCT __extension__
00147 #endif
00148 #else
00149 #if defined(__cplusplus)
00150 #define _ANONYMOUS_UNION __extension__
00151 #endif
00152 #endif
00153 #endif
00154 #endif
00155
00156 #ifndef _ANONYMOUS_UNION
00157 #define _ANONYMOUS_UNION
00158 #define _UNION_NAME(x) x
00159 #define DUMMYUNIONNAME u
00160 #define DUMMYUNIONNAME2 u2
00161 #define DUMMYUNIONNAME3 u3
00162 #define DUMMYUNIONNAME4 u4
00163 #define DUMMYUNIONNAME5 u5
00164 #define DUMMYUNIONNAME6 u6
00165 #define DUMMYUNIONNAME7 u7
00166 #define DUMMYUNIONNAME8 u8
00167 #else
00168 #define _UNION_NAME(x)
00169 #define DUMMYUNIONNAME
00170 #define DUMMYUNIONNAME2
00171 #define DUMMYUNIONNAME3
00172 #define DUMMYUNIONNAME4
00173 #define DUMMYUNIONNAME5
00174 #define DUMMYUNIONNAME6
00175 #define DUMMYUNIONNAME7
00176 #define DUMMYUNIONNAME8
00177 #endif
00178 #ifndef _ANONYMOUS_STRUCT
00179 #define _ANONYMOUS_STRUCT
00180 #define _STRUCT_NAME(x) x
00181 #define DUMMYSTRUCTNAME s
00182 #define DUMMYSTRUCTNAME2 s2
00183 #define DUMMYSTRUCTNAME3 s3
00184 #else
00185 #define _STRUCT_NAME(x)
00186 #define DUMMYSTRUCTNAME
00187 #define DUMMYSTRUCTNAME2
00188 #define DUMMYSTRUCTNAME3
00189 #endif
00190
00191 #else
00192
00193 #if !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && \
00194 defined(_M_IX86)
00195 #define _X86_
00196 #endif
00197
00198 #if !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && \
00199 defined(_M_AMD64)
00200 #define _AMD64_
00201 #endif
00202
00203 #if !defined(_X86_) && !defined(_M_IX86) && !defined(_AMD64_) && \
00204 defined(_M_IA64) && !defined(_IA64_)
00205 #define _IA64_
00206 #endif
00207
00208 #endif
00209
00210 #ifndef __CYGWIN32__
00211 #include <excpt.h>
00212 #endif
00213 #include <stdarg.h>
00214 #include <windef.h>
00215 #include <winbase.h>
00216 #include <winreg.h>
00217 #include <malloc.h>
00218 #include <sys/types.h>
00219 #include <sys/stat.h>
00220 #ifdef CS_HAVE_SYS_PARAM_H
00221 #include <sys/param.h>
00222 #endif
00223 #ifndef __CYGWIN32__
00224 #include <direct.h>
00225 #endif
00226
00227
00228 #ifndef WINGDIAPI
00229 #define WINGDIAPI DECLSPEC_IMPORT
00230 #endif
00231
00232
00233
00234
00235
00236
00237
00238
00239 #ifndef __int3264
00240 typedef LONG LONG_PTR;
00241 typedef ULONG ULONG_PTR;
00242 typedef DWORD DWORD_PTR;
00243 #endif
00244
00245 #if defined(_DEBUG) || defined(CS_DEBUG)
00246 #include <assert.h>
00247 #ifndef CS_DEBUG
00248 #define CS_DEBUG
00249 #endif
00250
00251 #if defined(CS_COMPILER_MSVC)
00252 #include <crtdbg.h>
00253
00254 #if defined(CS_EXTENSIVE_MEMDEBUG)
00255 #define malloc(size) \
00256 _malloc_dbg ((size), _NORMAL_BLOCK, __FILE__, __LINE__)
00257 #define free(ptr) _free_dbg ((ptr), _NORMAL_BLOCK)
00258 #define realloc(ptr, size) \
00259 _realloc_dbg ((ptr), (size), _NORMAL_BLOCK, __FILE__, __LINE__)
00260 #define calloc(num, size) \
00261 _calloc_dbg ((num), (size), _NORMAL_BLOCK, __FILE__, __LINE__)
00262
00263
00264 #define CS_WIN32_MSVC_DEBUG_GOOP \
00265 _CrtSetDbgFlag ( \
00266 _CrtSetDbgFlag (_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF)
00267 #else
00268
00269 #define CS_WIN32_MSVC_DEBUG_GOOP \
00270 _CrtSetDbgFlag ( \
00271 (_CrtSetDbgFlag (_CRTDBG_REPORT_FLAG) & ~_CRTDBG_ALLOC_MEM_DF) | \
00272 _CRTDBG_LEAK_CHECK_DF)
00273 #endif
00274 #endif
00275
00276 #endif
00277
00278 #ifdef CS_WIN32_MSVC_DEBUG_GOOP
00279 #define CS_INITIALIZE_PLATFORM_APPLICATION CS_WIN32_MSVC_DEBUG_GOOP
00280 #endif
00281
00282
00283 #define CS_OPENGL_2D_DRIVER "crystalspace.graphics2d.glwin32"
00284
00285
00286 #define CS_SNDSYS_DRIVER "crystalspace.sndsys.software.driver.directsound"
00287
00288
00289 #ifndef CS_STATIC_LINKED
00290
00291 # undef CS_EXPORTED_FUNCTION
00292 # define CS_EXPORTED_FUNCTION extern "C" __declspec(dllexport)
00293 #endif
00294
00295 #if defined (CS_COMPILER_BCC)
00296 # define strcasecmp stricmp
00297 # define strncasecmp strnicmp
00298 #endif
00299
00300 #if defined (CS_COMPILER_MSVC)
00301 # define strcasecmp _stricmp
00302 # define strncasecmp _strnicmp
00303 # define snprintf _snprintf
00304 #endif
00305
00306 #if defined (CS_COMPILER_MSVC)
00307 # if defined(_MSC_VER) && (_MSC_VER < 1300)
00308 # include <assert.h>
00309 static inline longlong strtoll(char const* s, char** sN, int base)
00310 {
00311 assert(sN == 0);
00312 assert(base == 10);
00313 return _atoi64(s);
00314 }
00315 # else
00316 # define strtoll _strtoi64
00317 # endif
00318 #endif
00319
00320
00321 #ifndef CS_MAXPATHLEN
00322 # ifdef _MAX_FNAME
00323 # define CS_MAXPATHLEN _MAX_FNAME
00324 # else
00325 # define CS_MAXPATHLEN 260
00326 # endif
00327 #endif
00328 #define CS_PATH_DELIMITER ';'
00329 #define CS_PATH_SEPARATOR '\\'
00330
00331
00332 #include <io.h>
00333 #ifndef F_OK
00334 # define F_OK 0
00335 #endif
00336 #ifndef R_OK
00337 # define R_OK 2
00338 #endif
00339 #ifndef W_OK
00340 # define W_OK 4
00341 #endif
00342
00343 #define CS_PROVIDES_EXPAND_PATH 1
00344 inline void csPlatformExpandPath(const char* , char* ,
00345 int ) {}
00346
00347
00348
00349 #define CS_WIN32_USE_CUSTOM_OPENDIR
00350
00351 #ifndef CS_WIN32_USE_CUSTOM_OPENDIR
00352 # include <dirent.h>
00353 #else
00354 struct dirent
00355 {
00356 char d_name [CS_MAXPATHLEN + 1];
00357 size_t d_size;
00358 long dwFileAttributes;
00359 };
00360
00361 struct DIR;
00362 # ifdef CS_CRYSTALSPACE_LIB
00363 extern "C" CS_EXPORT_SYM DIR *opendir (const char *name);
00364 extern "C" CS_EXPORT_SYM dirent *readdir (DIR *dirp);
00365 extern "C" CS_EXPORT_SYM int closedir (DIR *dirp);
00366 extern "C" CS_EXPORT_SYM bool isdir (const char *path, dirent *de);
00367 # else
00368 extern "C" CS_IMPORT_SYM DIR *opendir (const char *name);
00369 extern "C" CS_IMPORT_SYM dirent *readdir (DIR *dirp);
00370 extern "C" CS_IMPORT_SYM int closedir (DIR *dirp);
00371 extern "C" CS_IMPORT_SYM bool isdir (const char *path, dirent *de);
00372 # endif // CS_CRYSTALSPACE_LIB
00373 #endif
00374
00375 #ifdef CS_COMPILER_BCC
00376
00377
00378 #define pow(arga, argb) ( (!arga && !argb)?0:pow(arga, argb) )
00379
00380 #define DEBUG_BREAK
00381 #endif
00382
00383 #if defined (CS_PROCESSOR_X86)
00384 # define CS_LITTLE_ENDIAN
00385 #else
00386 # error "Please define a suitable CS_XXX_ENDIAN macro in win32/csosdefs.h!"
00387 #endif
00388
00389 #if defined(CS_COMPILER_BCC)
00390
00391
00392 #undef main
00393 #define main csMain
00394 #endif
00395
00396
00397 #ifdef __CYGWIN32__
00398 #ifndef _beginthread
00399 #define _beginthread(func, stack, ptr) CreateThread (0, 0, \
00400 LPTHREAD_START_ROUTINE(func), ptr, CREATE_SUSPENDED, 0)
00401 #endif
00402 #ifndef _endthread
00403 #define _endthread() {}
00404 #endif
00405 #endif
00406
00407
00408 #define csSW_SHOWNORMAL 1
00409
00410 #if defined(CS_COMPILER_GCC) && defined(__STRICT_ANSI__) && !(CS_PROCESSOR_SIZE == 64)
00411
00412 extern int _argc;
00413 extern char** _argv;
00414 #define CS_WIN32_ARGC _argc
00415 #define CS_WIN32_ARGV _argv
00416 #elif defined(CS_COMPILER_BCC)
00417 #define CS_WIN32_ARGC _argc
00418 #define CS_WIN32_ARGV _argv
00419 #else
00420 #define CS_WIN32_ARGC __argc
00421 #define CS_WIN32_ARGV __argv
00422 #endif
00423
00424
00425 #ifdef __CYGWIN32__
00426 #if !defined(CS_IMPLEMENT_PLATFORM_APPLICATION)
00427 #define CS_IMPLEMENT_PLATFORM_APPLICATION
00428 #endif
00429
00430 #else // __CYGWIN32__
00431
00432
00433
00434
00435
00436
00437
00438
00439 #if !defined(CS_IMPLEMENT_PLATFORM_APPLICATION)
00440 #ifndef __STRICT_ANSI__
00441 #define csMain main
00442 #else
00443
00444
00445 #define csMain mainWithAnotherNameBecauseISOCPPForbidsIt
00446 #endif
00447 #define CS_IMPLEMENT_PLATFORM_APPLICATION \
00448 int csMain (int argc, char* argv[]); \
00449 int WINAPI WinMain (HINSTANCE hApp, HINSTANCE prev, LPSTR cmd, int show)\
00450 { \
00451 (void)hApp; \
00452 (void)show; \
00453 (void)prev; \
00454 (void)cmd; \
00455 int ret = csMain (CS_WIN32_ARGC, CS_WIN32_ARGV); \
00456 return ret; \
00457 }
00458 #ifdef __STRICT_ANSI__
00459 #define main mainWithAnotherNameBecauseISOCPPForbidsIt
00460 #endif
00461 #endif // CS_IMPLEMENT_PLATFORM_APPLICATION
00462
00463 #endif // __CYGWIN32__
00464
00465 #if !defined(CS_STATIC_LINKED)
00466
00467 #if !defined(CS_IMPLEMENT_PLATFORM_PLUGIN)
00468 #define CS_IMPLEMENT_PLATFORM_PLUGIN \
00469 int _cs_main(int , char* []) \
00470 { \
00471 return 0; \
00472 } \
00473 extern "C" BOOL WINAPI \
00474 DllMain (HINSTANCE , DWORD , LPVOID ) \
00475 { \
00476 return TRUE; \
00477 } \
00478 CS_EXPORTED_FUNCTION const char* plugin_compiler() \
00479 { \
00480 return CS_COMPILER_NAME; \
00481 }
00482 #endif // CS_IMPLEMENT_PLATFORM_PLUGIN
00483
00484 #endif // CS_STATIC_LINKED
00485
00486 #include "sanity.inc"
00487
00488 #endif // __CS_CSOSDEFS_H__