UnGnuG.H
See Native Coding On Linux for information on how to use this headerfile.
/*============================================================================= UnGnuG.h: Unreal definitions for Gnu G++. Unfinished. Unsupported. Copyright 1997-1999 Epic Games, Inc. All Rights Reserved. =============================================================================*/ /*---------------------------------------------------------------------------- Platform compiler definitions. ----------------------------------------------------------------------------*/ #ifdef __LINUX_X86__ #define __UNIX__ 1 #define __LINUX__ 1 #define __INTEL__ 1 #define __INTEL_BYTE_ORDER__ 1 #undef ASM #undef ASM3DNOW #undef ASMKNI #define ASMLINUX 1 #else #error Unsupported platform. #endif // Stack control. #include <sys/wait.h> #include <signal.h> #include <setjmp.h> class __Context { public: __Context() { Last = Env; } ~__Context() { Env = Last; } static void StaticInit(); static jmp_buf Env; protected: static void HandleSignal( int Sig ); static struct sigaction Act_SIGHUP; static struct sigaction Act_SIGQUIT; static struct sigaction Act_SIGILL; static struct sigaction Act_SIGTRAP; static struct sigaction Act_SIGIOT; static struct sigaction Act_SIGBUS; static struct sigaction Act_SIGFPE; static struct sigaction Act_SIGSEGV; static struct sigaction Act_SIGTERM; jmp_buf Last; }; /*---------------------------------------------------------------------------- Platform specifics types and defines. ----------------------------------------------------------------------------*/ // Undo any Windows defines. #undef BYTE #undef WORD #undef DWORD #undef INT #undef FLOAT #undef MAXBYTE #undef MAXWORD #undef MAXDWORD #undef MAXINT #undef VOID #undef CDECL // Make sure HANDLE is defined. #define HANDLE DWORD #define HINSTANCE DWORD // Sizes. enum {DEFAULT_ALIGNMENT = 8 }; // Default boundary to align memory allocations on. enum {CACHE_LINE_SIZE = 32}; // Cache line size. #define GCC_PACK(n) __attribute__((packed,aligned(n))) // Optimization macros #define DISABLE_OPTIMIZATION #define ENABLE_OPTIMIZATION // Function type macros. #define DLL_IMPORT #define DLL_EXPORT extern "C" #define DLL_EXPORT_CLASS #define VARARGS #define CDECL #define STDCALL #define FORCEINLINE /* Force code to be inline */ #define ZEROARRAY 0 /* Zero-length arrays in structs */ #define __cdecl // Variable arguments. #define GET_VARARGS(msg,len,fmt) \ { \ va_list ArgPtr; \ va_start( ArgPtr, fmt ); \ vsprintf( msg, fmt, ArgPtr ); \ va_end( ArgPtr ); \ } #define GET_VARARGS_RESULT(msg,len,fmt,result) \ { \ va_list ArgPtr; \ va_start( ArgPtr, fmt ); \ result = vsprintf( msg, fmt, ArgPtr ); \ va_end( ArgPtr ); \ } // Compiler name. #define COMPILER "Compiled with GNU g++ ("__VERSION__")" // Unsigned base types. typedef unsigned char BYTE; // 8-bit unsigned. typedef unsigned short _WORD; // 16-bit unsigned. typedef unsigned int DWORD; // 32-bit unsigned. typedef unsigned long long QWORD; // 64-bit unsigned. // Signed base types. typedef signed char SBYTE; // 8-bit signed. typedef signed short SWORD; // 16-bit signed. typedef signed int INT; // 32-bit signed. typedef signed long long SQWORD; // 64-bit signed. // Character types. typedef char ANSICHAR; // An ANSI character. typedef unsigned short UNICHAR; // A unicode character. typedef unsigned char ANSICHARU; // An ANSI character. typedef unsigned short UNICHARU; // A unicode character. // Other base types. typedef signed int UBOOL; // Boolean 0 (false) or 1 (true). typedef float FLOAT; // 32-bit IEEE floating point. typedef double DOUBLE; // 64-bit IEEE double. typedef unsigned int SIZE_T; // Corresponds to C SIZE_T. // Bitfield type. typedef unsigned int BITFIELD; // For bitfields. typedef unsigned int size_t; // Make sure characters are unsigned. #ifdef __CHAR_UNSIGNED__ #error "Bad compiler option: Characters must be signed" #endif // Strings. #if __UNIX__ #define LINE_TERMINATOR TEXT("\n") #define PATH_SEPARATOR TEXT("/") #define DLLEXT TEXT(".so") #else #define LINE_TERMINATOR TEXT("\r\n") #define PATH_SEPARATOR TEXT("\\") #define DLLEXT TEXT(".dll") #endif // NULL. #undef NULL #define NULL 0 // Package implementation. #define IMPLEMENT_PACKAGE_PLATFORM(pkgname) \ extern "C" {HINSTANCE hInstance;} \ BYTE GLoaded##pkgname; // Platform support options. #define PLATFORM_NEEDS_ARRAY_NEW 1 #define FORCE_ANSI_LOG 0 // OS unicode function calling. #define TCHAR_CALL_OS(funcW,funcA) (funcA) #define TCHAR_TO_ANSI(str) str #define ANSI_TO_TCHAR(str) str // !! Fixme: This is a workaround. #define GCC_OPT_INLINE // Memory #define appAlloca(size) alloca((size+7)&~7) extern CORE_API UBOOL GTimestamp; CORE_API extern FLOAT GSecondsPerCycle; // // Round a floating point number to an integer. // Note that (int+.5) is rounded to (int+1). // #define DEFINED_appRound 1 inline INT appRound( FLOAT F ) { return (INT)(F); } // // Converts to integer equal to or less than. // #define DEFINED_appFloor 1 inline INT appFloor( FLOAT F ) { static FLOAT Half=0.5; return (INT)(F - Half); } // // CPU cycles, related to GSecondsPerCycle. // #define DEFINED_appCycles 1 inline DWORD appCycles() { if( GTimestamp ) { DWORD r; asm("rdtsc" : "=a" (r) : "d" (r)); return r; } } // // Memory copy. // #define DEFINED_appMemcpy 1 inline void appMemcpy( void* Dest, const void* Src, INT Count ) { asm volatile(" pushl %%ebx; pushl %%ecx; pushl %%esi; pushl %%edi; mov %%ecx, %%ebx; shr $2, %%ecx; and $3, %%ebx; rep; movsl; mov %%ebx, %%ecx; rep; movsb; popl %%edi; popl %%esi; popl %%ecx; popl %%ebx; " : : "S" (Src), "D" (Dest), "c" (Count) ); } // // Memory zero. // #define DEFINED_appMemzero 1 inline void appMemzero( void* Dest, INT Count ) { memset( Dest, 0, Count ); } /*---------------------------------------------------------------------------- Globals. ----------------------------------------------------------------------------*/ // System identification. extern "C" { extern HINSTANCE hInstance; extern CORE_API UBOOL GIsMMX; extern CORE_API UBOOL GIsPentiumPro; extern CORE_API UBOOL GIsKatmai; extern CORE_API UBOOL GIsK6; extern CORE_API UBOOL GIs3DNow; extern CORE_API UBOOL GTimestamp; } // Module name extern ANSICHAR GModule[32]; /*---------------------------------------------------------------------------- The End. ----------------------------------------------------------------------------*/
El Muerte TDS: Intresting header, but why here ?
Mr.Mitchell: It is related to Native Coding On Linux, as far as I understand you need it to compile UT native mods on Linux