// Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // // $Id: doomtype.h,v 1.2 1997/12/29 19:50:48 pekangas Exp $ // // Copyright (C) 1993-1996 by id Software, Inc. // // This source is available for distribution and/or modification // only under the terms of the DOOM Source Code License as // published by id Software. All rights reserved. // // The source is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License // for more details. // // DESCRIPTION: // Simple basic typedefs, isolated here to make it easier // separating modules. // //----------------------------------------------------------------------------- #ifndef __DOOMTYPE__ #define __DOOMTYPE__ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef _MSC_VER // VC++ does not define PATH_MAX, but the Windows headers do define MAX_PATH. // However, we want to avoid including the Windows headers in most of the // source files, so we can't use it. So define PATH_MAX to be what MAX_PATH // currently is: #define PATH_MAX 260 #endif #include #include "zstring.h" #include "name.h" #include "vectors.h" // Since this file is included by everything, it seems an appropriate place // to check the NOASM/USEASM macros. #if defined(__APPLE__) // The assembly code needs to be tweaked for Mach-O before enabled on Macs. #ifndef NOASM #define NOASM #endif #endif // There are three assembly-related macros: // // NOASM - Assembly code is disabled // X86_ASM - Using ia32 assembly code // X64_ASM - Using amd64 assembly code // // Note that these relate only to using the pure assembly code. Inline // assembly may still be used without respect to these macros, as // deemed appropriate. #ifndef NOASM // Select the appropriate type of assembly code to use. #if defined(_M_IX86) || defined(__i386__) #define X86_ASM #ifdef X64_ASM #undef X64_ASM #endif #elif defined(_M_X64) || defined(__amd64__) #define X64_ASM #ifdef X86_ASM #undef X86_ASM #endif #else #define NOASM #endif #endif #ifdef NOASM // Ensure no assembly macros are defined if NOASM is defined. #ifdef X86_ASM #undef X86_ASM #endif #ifdef X64_ASM #undef X64_ASM #endif #endif #if defined(_MSC_VER) || defined(__WATCOMC__) #define STACK_ARGS __cdecl #else #define STACK_ARGS #endif #if defined(_MSC_VER) #define NOVTABLE __declspec(novtable) #else #define NOVTABLE #endif #ifdef _MSC_VER typedef __int8 SBYTE; typedef unsigned __int8 BYTE; typedef __int16 SWORD; typedef unsigned __int16 WORD; typedef __int32 SDWORD; typedef unsigned __int32 uint32; typedef __int64 SQWORD; typedef unsigned __int64 QWORD; #else #include typedef int8_t SBYTE; typedef uint8_t BYTE; typedef int16_t SWORD; typedef uint16_t WORD; typedef int32_t SDWORD; typedef uint32_t uint32; typedef int64_t SQWORD; typedef uint64_t QWORD; #endif // windef.h, included by windows.h, has its own incompatible definition // of DWORD as a long. In files that mix Doom and Windows code, you // must define USE_WINDOWS_DWORD before including doomtype.h so that // you are aware that those files have a different DWORD than the rest // of the source. #ifndef USE_WINDOWS_DWORD typedef uint32 DWORD; #endif typedef uint32 BITFIELD; typedef int INTBOOL; // a 64-bit constant #ifdef __GNUC__ #define CONST64(v) (v##LL) #define UCONST64(v) (v##ULL) #else #define CONST64(v) ((SQWORD)(v)) #define UCONST64(v) ((QWORD)(v)) #endif #if !defined(GUID_DEFINED) #define GUID_DEFINED typedef struct _GUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } GUID; #endif union QWORD_UNION { QWORD AsOne; struct { #ifdef WORDS_BIG_ENDIAN unsigned int Hi, Lo; #else unsigned int Lo, Hi; #endif }; }; // Bounding box coordinate storage. enum { BOXTOP, BOXBOTTOM, BOXLEFT, BOXRIGHT }; // bbox coordinates // // Fixed point, 32bit as 16.16. // #define FRACBITS 16 #define FRACUNIT (1< char ( &_ArraySizeHelper( T (&array)[N] ))[N]; #define countof( array ) (sizeof( _ArraySizeHelper( array ) )) #endif