2012-11-12 23:37:13 -05:00

273 lines
10 KiB
C++

/********************************************************************************
Copyright (C) 2001-2012 Hugh Bailey <obs.jim@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
********************************************************************************/
#pragma once
#pragma warning(disable: 4996)
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <crtdbg.h>
#include <new>
#include <math.h>
#include <float.h>
#include <typeinfo.h>
#if defined(_WIN64) && !defined(C64)
#define C64
#endif
#if defined(WIN32) && defined(C64)
#define USE_SSE
#endif
#ifdef USE_SSE
#include <xmmintrin.h>
#endif
#include "Defs.h"
//-----------------------------------------
//base defines/functions/etc
//-----------------------------------------
#if defined WIN32
#include "XT_Windows.h"
#elif defined __UNIX__
#include "XT_Unix.h"
#else
#error Unknown Operating System
#endif
//-----------------------------------------
//OS-independant functions
//-----------------------------------------
struct OSFindData
{
TCHAR fileName[512];
BOOL bDirectory;
BOOL bHidden;
};
struct XRect
{
int x;
int y;
int cx;
int cy;
};
class StringList;
#define WAIT_INFINITE 0xFFFFFFFF
BASE_EXPORT void STDCALL OSLogSystemStats();
BASE_EXPORT DWORD STDCALL OSGetSysPageSize();
BASE_EXPORT LPVOID STDCALL OSVirtualAlloc(size_t dwSize);
BASE_EXPORT void STDCALL OSVirtualFree(LPVOID lpData);
BASE_EXPORT void STDCALL OSExitProgram();
BASE_EXPORT void STDCALL OSCriticalExit();
BASE_EXPORT int STDCALL OSProcessEvent();
BASE_EXPORT BOOL STDCALL OSDeleteFile(CTSTR lpFile);
BASE_EXPORT BOOL STDCALL OSCopyFile(CTSTR lpFileDest, CTSTR lpFileSrc);
BASE_EXPORT BOOL STDCALL OSCreateDirectory(CTSTR lpDirectory);
BASE_EXPORT BOOL STDCALL OSSetCurrentDirectory(CTSTR lpDirectory);
BASE_EXPORT BOOL STDCALL OSFileExists(CTSTR lpFile);
BASE_EXPORT BOOL STDCALL OSCreateMainWindow(int x, int y, int cx, int cy);
BASE_EXPORT void STDCALL OSDestroyMainWindow();
BASE_EXPORT void STDCALL OSSetWindowSize(int cx, int cy);
BASE_EXPORT void STDCALL OSSetWindowFullscreen();
BASE_EXPORT void STDCALL OSSetWindowPos(int x, int y);
BASE_EXPORT void STDCALL OSShowCursor(BOOL bShow);
BASE_EXPORT void STDCALL OSSetCursorPos(int x, int y);
BASE_EXPORT void STDCALL OSGetCursorPos(int &x, int &y);
BASE_EXPORT HANDLE STDCALL OSFindFirstFile(CTSTR lpFileName, OSFindData &findData);
BASE_EXPORT BOOL STDCALL OSFindNextFile(HANDLE hFind, OSFindData &findData);
BASE_EXPORT void STDCALL OSFindClose(HANDLE hFind);
BASE_EXPORT BOOL STDCALL OSChangeDisplaySettings(DISPLAYMODE *dm);
BASE_EXPORT void STDCALL OSGetDisplaySettings(DISPLAYMODE *dm);
BASE_EXPORT void STDCALL OSEnumDisplaySettings(List<DISPLAYMODE> &displayModes);
BASE_EXPORT HANDLE STDCALL OSLoadLibrary(CTSTR lpFile);
BASE_EXPORT DEFPROC STDCALL OSGetProcAddress(HANDLE hLibrary, LPCSTR lpProcedure);
BASE_EXPORT void STDCALL OSFreeLibrary(HANDLE hLibrary);
BASE_EXPORT void STDCALL OSSleep(DWORD dwMSeconds);
BASE_EXPORT int STDCALL OSGetTotalCores();
BASE_EXPORT int STDCALL OSGetLogicalCores();
BASE_EXPORT HANDLE STDCALL OSCreateThread(XTHREAD lpThreadFunc, LPVOID param);
BASE_EXPORT BOOL STDCALL OSWaitForThread(HANDLE hThread, LPDWORD ret);
BASE_EXPORT BOOL STDCALL OSCloseThread(HANDLE hThread);
BASE_EXPORT BOOL STDCALL OSTerminateThread(HANDLE hThread, DWORD waitMS=100);
BASE_EXPORT HANDLE STDCALL OSCreateMutex();
BASE_EXPORT void STDCALL OSEnterMutex(HANDLE hMutex);
BASE_EXPORT BOOL STDCALL OSTryEnterMutex(HANDLE hMutex);
BASE_EXPORT void STDCALL OSLeaveMutex(HANDLE hMutex);
BASE_EXPORT void STDCALL OSCloseMutex(HANDLE hMutex);
BASE_EXPORT void STDCALL OSSetMainAppWindow(HANDLE window);
BASE_EXPORT DWORD STDCALL OSGetTime();
BASE_EXPORT QWORD STDCALL OSGetTimeMicroseconds();
BASE_EXPORT void __cdecl OSMessageBoxva(const TCHAR *format, va_list argptr);
BASE_EXPORT void __cdecl OSMessageBox(const TCHAR *format, ...);
BASE_EXPORT BOOL STDCALL OSDebuggerPresent();
BASE_EXPORT void __cdecl OSDebugOutva(const TCHAR *format, va_list argptr);
BASE_EXPORT void __cdecl OSDebugOut(const TCHAR *format, ...);
BASE_EXPORT BOOL STDCALL OSGetLoadedModuleList(HANDLE hProcess, StringList &ModuleList);
BASE_EXPORT BOOL STDCALL OSIncompatibleModulesLoaded();
BASE_EXPORT void __cdecl Logva(const TCHAR *format, va_list argptr);
BASE_EXPORT void __cdecl Log(const TCHAR *format, ...);
BASE_EXPORT void __cdecl CrashError(const TCHAR *format, ...);
BASE_EXPORT void __cdecl AppWarning(const TCHAR *format, ...);
BASE_EXPORT void STDCALL TraceCrash(const TCHAR *trackName);
BASE_EXPORT void STDCALL TraceCrashEnd();
//-----------------------------------------
//Base functions
//-----------------------------------------
BASE_EXPORT BOOL STDCALL InitXT(CTSTR logFile=NULL, CTSTR allocatorName=NULL);
BASE_EXPORT void STDCALL InitXTLog(CTSTR logFile);
BASE_EXPORT void STDCALL ResetXTAllocator(CTSTR lpAllocator);
BASE_EXPORT void STDCALL TerminateXT();
BASE_EXPORT extern BOOL bDebugBreak;
//-----------------------------------------
//defines
//-----------------------------------------
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MAKEDWORD(low, high) ((DWORD)(low) | ((DWORD)(high) << 16))
#define MAKEQUAD(low, high) ((QWORD)(low) | ((QWORD)(high) << 32))
#define LODW(quad) ((DWORD)(quad))
#define HIDW(quad) ((DWORD)((quad) >> 32))
#define HIWORD(l) ((WORD)((l) >> 16))
#define LOWORD(l) ((WORD)(l))
#ifndef assert
#ifdef _DEBUG
#define assert(check) if(!(check)) CrashError(TEXT("Assertion Failiure: (") TEXT(#check) TEXT(") failed\r\nFile: %s, line %d"), TEXT(__FILE__), __LINE__);
#else
#define assert(check)
#endif
#endif
#ifndef assertmsg
#ifdef _DEBUG
#define assertmsg(check, msg) if(!(check)) CrashError(TEXT("Assertion Failiure: %s\r\nFile: %s, line %d"), (TSTR)msg, TEXT(__FILE__), __LINE__);
#else
#define assertmsg(check, msg)
#endif
#endif
//-----------------------------------------
//color defines
//-----------------------------------------
#define Color_White 0xFFFFFFFF //255,255,255
#define Color_LightGray 0xFFE0E0E0 //224,224,224
#define Color_Gray 0xFFC0C0C0 //192,192,192
#define Color_DarkGray 0xFF808080 //128,128,128
#define Color_Black 0 //0,0,0
#define Color_Cyan 0xFF00FFFF //0,255,255
#define Color_DarkCyan 0xFF008080 //0,128,128
#define Color_Purple 0xFFFF00FF //255,0,255
#define Color_DarkPurple 0xFF800080 //128,0,128
#define Color_Yellow 0xFFFFFF00 //255,255,0
#define Color_DarkYellow 0xFF808000 //128,128,0
#define Color_Red 0xFFFF0000 //255,0,0
#define Color_DarkRed 0xFF800000 //128,0,0
#define Color_Green 0xFF00FF00 //0,255,0
#define Color_DarkGreen 0xFF008000 //0,128,0
#define Color_Blue 0xFF0000FF //0,0,255
#define Color_DarkBlue 0xFF000080 //0,0,128
#define Color_Orange 0xFFFF8000
#define RGB_A(rgba) (((DWORD)(rgba) & 0xFF000000) >> 24)
#define RGB_R(rgb) (((DWORD)(rgb) & 0xFF0000) >> 16)
#define RGB_G(rgb) (((DWORD)(rgb) & 0x00FF00) >> 8)
#define RGB_B(rgb) ((DWORD)(rgb) & 0x0000FF)
#define RGB_Af(rgba) (((float)RGB_A(rgba)) / 255.0f)
#define RGB_Rf(rgb) (((float)RGB_R(rgb)) / 255.0f)
#define RGB_Gf(rgb) (((float)RGB_G(rgb)) / 255.0f)
#define RGB_Bf(rgb) (((float)RGB_B(rgb)) / 255.0f)
#define MAKERGBA(r,g,b,a) ((((DWORD)a) << 24)|(((DWORD)r) << 16)|(((DWORD)g) << 8)|((DWORD)b))
#define MAKEBGRA(r,g,b,a) ((((DWORD)a) << 24)|(((DWORD)b) << 16)|(((DWORD)g) << 8)|((DWORD)r))
#define MAKERGB(r,g,b) ((((DWORD)r << 16)|((DWORD)g << 8)|(DWORD)b))
#define MAKEBGR(r,g,b) ((((DWORD)b << 16)|((DWORD)g << 8)|(DWORD)r))
#define REVERSE_COLOR(col) MAKERGB(RGB_B(col), RGB_G(col), RGB_R(col))
#define Vect4_to_RGBA(v) (MAKERGBA(((v).x*255.0f), ((v).y*255.0f), ((v).z*255.0f), ((v).w*255.0f)))
#define Vect_to_RGB(v) (MAKERGB(((v).x*255.0f), ((v).y*255.0f), ((v).z*255.0f)))
#define RGBA_to_Vect4(dw) Vect4(RGB_Rf(dw), RGB_Gf(dw), RGB_Bf(dw), RGB_Af(dw))
#define RGB_to_Vect(dw) Vect(RGB_Rf(dw), RGB_Gf(dw), RGB_Bf(dw))
#define RGB_to_VectExp(dw) Vect((RGB_Rf(dw)-0.5f)*2.0f, (RGB_Gf(dw)-0.5f)*2.0f, (RGB_Bf(dw)-0.5f)*2.0f)
#define Color4_to_RGBA(c) (MAKERGBA(((c).x*255.0f), ((c).y*255.0f), ((c).z*255.0f), ((c).w*255.0f)))
#define Color_to_RGB(c) (MAKERGB(((c).x*255.0f), ((c).y*255.0f), ((c).z*255.0f)))
#define RGBA_to_Color4(dw) Color4(RGB_Rf(dw), RGB_Gf(dw), RGB_Bf(dw), RGB_Af(dw))
#define RGB_to_Color(dw) Color(RGB_Rf(dw), RGB_Gf(dw), RGB_Bf(dw))
#define RGB_to_ColorExp(dw) Color((RGB_Rf(dw)-0.5f)*2.0f, (RGB_Gf(dw)-0.5f)*2.0f, (RGB_Bf(dw)-0.5f)*2.0f)
//-----------------------------------------
//includes
//-----------------------------------------
#include "utf8.h"
#include "Serializer.h"
#include "Inline.h"
#include "Alloc.h"
#include "FastAlloc.h"
#include "DebugAlloc.h"
#include "Template.h"
#include "XString.h"
#include "XMath.h"
#include "ConfigFile.h"
#include "XFile.h"
#include "Profiler.h"
#include "XTLocalization.h"
#include "XConfig.h"