diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp index 67f954dd9..ccc21da7c 100644 --- a/src/engine/client/client.cpp +++ b/src/engine/client/client.cpp @@ -6,29 +6,42 @@ #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include -#include -#include +#include #include -#include -#include - #include +#include +#include +#include +#include +#include +#include #include #include +#include "srvbrowse.h" #include "client.h" #if defined(CONF_FAMILY_WINDOWS) - #define _WIN32_WINNT 0x0500 - #define NOGDI + #define _WIN32_WINNT 0x0501 + #define WIN32_LEAN_AND_MEAN #include #endif @@ -1748,7 +1761,7 @@ void CClient::VersionUpdate() { if(m_VersionInfo.m_State == 0) { - m_Engine.HostLookup(&m_VersionInfo.m_VersionServeraddr, g_Config.m_ClVersionServer); + Engine()->HostLookup(&m_VersionInfo.m_VersionServeraddr, g_Config.m_ClVersionServer); m_VersionInfo.m_State++; } else if(m_VersionInfo.m_State == 1) @@ -1773,11 +1786,6 @@ void CClient::VersionUpdate() } } -void CClient::InitEngine(const char *pAppname) -{ - m_Engine.Init(pAppname); -} - void CClient::RegisterInterfaces() { Kernel()->RegisterInterface(static_cast(&m_DemoRecorder)); @@ -1788,6 +1796,7 @@ void CClient::RegisterInterfaces() void CClient::InitInterfaces() { // fetch interfaces + m_pEngine = Kernel()->RequestInterface(); m_pEditor = Kernel()->RequestInterface(); m_pGraphics = Kernel()->RequestInterface(); m_pSound = Kernel()->RequestInterface(); @@ -2280,15 +2289,12 @@ int main(int argc, const char **argv) // ignore_convention } #endif - // init the engine - dbg_msg("client", "starting..."); - m_Client.InitEngine("Teeworlds"); - IKernel *pKernel = IKernel::Create(); pKernel->RegisterInterface(&m_Client); m_Client.RegisterInterfaces(); // create the components + IEngine *pEngine = CreateEngine("Teeworlds"); IConsole *pConsole = CreateConsole(CFGFLAG_CLIENT); IStorage *pStorage = CreateStorage("Teeworlds", argc, argv); // ignore_convention IConfig *pConfig = CreateConfig(); @@ -2302,8 +2308,9 @@ int main(int argc, const char **argv) // ignore_convention { bool RegisterFail = false; - RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast(pConsole)); - RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast(pConfig)); + RegisterFail = RegisterFail || !pKernel->RegisterInterface(pEngine); + RegisterFail = RegisterFail || !pKernel->RegisterInterface(pConsole); + RegisterFail = RegisterFail || !pKernel->RegisterInterface(pConfig); RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast(pEngineGraphics)); // register graphics as both RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast(pEngineGraphics)); @@ -2332,7 +2339,7 @@ int main(int argc, const char **argv) // ignore_convention } pConfig->Init(); - pEngineMasterServer->Init(m_Client.Engine()); + pEngineMasterServer->Init(); pEngineMasterServer->Load(); // register all console commands @@ -2359,6 +2366,7 @@ int main(int argc, const char **argv) // ignore_convention m_Client.Engine()->InitLogfile(); // run the client + dbg_msg("client", "starting..."); m_Client.Run(); // write down the config and quit diff --git a/src/engine/client/client.h b/src/engine/client/client.h index 8768f23a1..2c0f5f869 100644 --- a/src/engine/client/client.h +++ b/src/engine/client/client.h @@ -3,28 +3,6 @@ #ifndef ENGINE_CLIENT_CLIENT_H #define ENGINE_CLIENT_CLIENT_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "srvbrowse.h" - class CGraph { public: @@ -106,6 +84,7 @@ public: class CClient : public IClient, public CDemoPlayer::IListner { // needed interfaces + IEngine *m_pEngine; IEditor *m_pEditor; IEngineInput *m_pInput; IEngineGraphics *m_pGraphics; @@ -122,11 +101,10 @@ class CClient : public IClient, public CDemoPlayer::IListner PREDICTION_MARGIN=1000/50/2, // magic network prediction value }; - CNetClient m_NetClient; - CDemoPlayer m_DemoPlayer; - CDemoRecorder m_DemoRecorder; - CEngine m_Engine; - CServerBrowser m_ServerBrowser; + class CNetClient m_NetClient; + class CDemoPlayer m_DemoPlayer; + class CDemoRecorder m_DemoRecorder; + class CServerBrowser m_ServerBrowser; char m_aServerAddressStr[256]; @@ -191,28 +169,30 @@ class CClient : public IClient, public CDemoPlayer::IListner CGraph m_FpsGraph; // the game snapshots are modifiable by the game - CSnapshotStorage m_SnapshotStorage; + class CSnapshotStorage m_SnapshotStorage; CSnapshotStorage::CHolder *m_aSnapshots[NUM_SNAPSHOT_TYPES]; int m_RecivedSnapshots; char m_aSnapshotIncommingData[CSnapshot::MAX_SIZE]; - CSnapshotStorage::CHolder m_aDemorecSnapshotHolders[NUM_SNAPSHOT_TYPES]; + class CSnapshotStorage::CHolder m_aDemorecSnapshotHolders[NUM_SNAPSHOT_TYPES]; char *m_aDemorecSnapshotData[NUM_SNAPSHOT_TYPES][2][CSnapshot::MAX_SIZE]; - CSnapshotDelta m_SnapshotDelta; + class CSnapshotDelta m_SnapshotDelta; // - CServerInfo m_CurrentServerInfo; + class CServerInfo m_CurrentServerInfo; int64 m_CurrentServerInfoRequestTime; // >= 0 should request, == -1 got info // version info struct { int m_State; - CHostLookup m_VersionServeraddr; + class CHostLookup m_VersionServeraddr; } m_VersionInfo; + public: + IEngine *Engine() { return m_pEngine; } IEngineGraphics *Graphics() { return m_pGraphics; } IEngineInput *Input() { return m_pInput; } IEngineSound *Sound() { return m_pSound; } @@ -298,7 +278,6 @@ public: void Update(); - void InitEngine(const char *pAppname); void RegisterInterfaces(); void InitInterfaces(); @@ -327,7 +306,5 @@ public: void AutoScreenshot_Start(); void AutoScreenshot_Cleanup(); - - virtual class CEngine *Engine() { return &m_Engine; } }; #endif diff --git a/src/engine/client/graphics.cpp b/src/engine/client/graphics.cpp index f313e6e33..99f5e0959 100644 --- a/src/engine/client/graphics.cpp +++ b/src/engine/client/graphics.cpp @@ -21,14 +21,13 @@ #include #include -#include #include #include #include #include #include -#include +#include // cosf, sinf #include "graphics.h" diff --git a/src/engine/client/sound.cpp b/src/engine/client/sound.cpp index fea79285d..55ca2939b 100644 --- a/src/engine/client/sound.cpp +++ b/src/engine/client/sound.cpp @@ -1,6 +1,8 @@ /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ /* If you are missing that file, acquire a complete release at teeworlds.com. */ #include +#include +#include #include #include "SDL.h" diff --git a/src/engine/client/sound.h b/src/engine/client/sound.h index 1372b9c4b..0c45f1ab4 100644 --- a/src/engine/client/sound.h +++ b/src/engine/client/sound.h @@ -4,9 +4,6 @@ #define ENGINE_CLIENT_SOUND_H #include -#include -#include -#include class CSound : public IEngineSound { diff --git a/src/engine/client/srvbrowse.cpp b/src/engine/client/srvbrowse.cpp index b9eeac11e..540cadf38 100644 --- a/src/engine/client/srvbrowse.cpp +++ b/src/engine/client/srvbrowse.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include diff --git a/src/engine/engine.h b/src/engine/engine.h new file mode 100644 index 000000000..73f68b0ab --- /dev/null +++ b/src/engine/engine.h @@ -0,0 +1,31 @@ +/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ +/* If you are missing that file, acquire a complete release at teeworlds.com. */ +#ifndef ENGINE_ENGINE_H +#define ENGINE_ENGINE_H + +#include "kernel.h" +#include + +class CHostLookup +{ +public: + CJob m_Job; + char m_aHostname[128]; + NETADDR m_Addr; +}; + +class IEngine : public IInterface +{ + MACRO_INTERFACE("engine", 0) + +protected: + class CJobPool m_HostLookupPool; + +public: + virtual void InitLogfile() = 0; + virtual void HostLookup(CHostLookup *pLookup, const char *pHostname) = 0; +}; + +extern IEngine *CreateEngine(const char *pAppname); + +#endif diff --git a/src/engine/masterserver.h b/src/engine/masterserver.h index d13ea6b4c..1788a18d7 100644 --- a/src/engine/masterserver.h +++ b/src/engine/masterserver.h @@ -15,7 +15,7 @@ public: MAX_MASTERSERVERS=4 }; - virtual void Init(class CEngine *pEngine) = 0; + virtual void Init() = 0; virtual void SetDefault() = 0; virtual int Load() = 0; virtual int Save() = 0; diff --git a/src/engine/server/register.cpp b/src/engine/server/register.cpp index 36b26f1e1..20c7d1736 100644 --- a/src/engine/server/register.cpp +++ b/src/engine/server/register.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index 5341a38cf..7977c4fc4 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -3,26 +3,22 @@ #include -#include -#include - -#include -#include +#include +#include +#include +#include +#include +#include +#include #include - -#include #include -#include #include #include - -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include #include @@ -30,8 +26,8 @@ #include "server.h" #if defined(CONF_FAMILY_WINDOWS) - #define _WIN32_WINNT 0x0500 - #define NOGDI + #define _WIN32_WINNT 0x0501 + #define WIN32_LEAN_AND_MEAN #include #endif @@ -1046,11 +1042,6 @@ int CServer::LoadMap(const char *pMapName) return 1; } -void CServer::InitEngine(const char *pAppname) -{ - m_Engine.Init(pAppname); -} - void CServer::InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer, IConsole *pConsole) { m_Register.Init(pNetServer, pMasterServer, pConsole); @@ -1062,9 +1053,6 @@ int CServer::Run() m_pMap = Kernel()->RequestInterface(); m_pStorage = Kernel()->RequestInterface(); - //snap_init_id(); - net_init(); - // Console()->RegisterPrintCallback(SendRconLineAuthed, this); @@ -1495,14 +1483,11 @@ int main(int argc, const char **argv) // ignore_convention } #endif - // init the engine - dbg_msg("server", "starting..."); CServer *pServer = CreateServer(); - pServer->InitEngine("Teeworlds"); - IKernel *pKernel = IKernel::Create(); // create the components + IEngine *pEngine = CreateEngine("Teeworlds"); IEngineMap *pEngineMap = CreateEngineMap(); IGameServer *pGameServer = CreateGameServer(); IConsole *pConsole = CreateConsole(CFGFLAG_SERVER); @@ -1516,6 +1501,7 @@ int main(int argc, const char **argv) // ignore_convention bool RegisterFail = false; RegisterFail = RegisterFail || !pKernel->RegisterInterface(pServer); // register as both + RegisterFail = RegisterFail || !pKernel->RegisterInterface(pEngine); RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast(pEngineMap)); // register as both RegisterFail = RegisterFail || !pKernel->RegisterInterface(static_cast(pEngineMap)); RegisterFail = RegisterFail || !pKernel->RegisterInterface(pGameServer); @@ -1530,7 +1516,7 @@ int main(int argc, const char **argv) // ignore_convention } pConfig->Init(); - pEngineMasterServer->Init(pServer->Engine()); + pEngineMasterServer->Init(); pEngineMasterServer->Load(); // register all console commands @@ -1547,9 +1533,10 @@ int main(int argc, const char **argv) // ignore_convention // restore empty config strings to their defaults pConfig->RestoreStrings(); - pServer->Engine()->InitLogfile(); + pEngine->InitLogfile(); // run the server + dbg_msg("server", "starting..."); pServer->Run(); // free diff --git a/src/engine/server/server.h b/src/engine/server/server.h index 6bee026ed..74b524a8e 100644 --- a/src/engine/server/server.h +++ b/src/engine/server/server.h @@ -48,7 +48,6 @@ public: class IGameServer *GameServer() { return m_pGameServer; } class IConsole *Console() { return m_pConsole; } class IStorage *Storage() { return m_pStorage; } - class CEngine *Engine() { return &m_Engine; } class CClient { @@ -120,7 +119,6 @@ public: int m_CurrentMapSize; CDemoRecorder m_DemoRecorder; - CEngine m_Engine; CRegister m_Register; CServer(); @@ -172,7 +170,6 @@ public: char *GetMapName(); int LoadMap(const char *pMapName); - void InitEngine(const char *pAppname); void InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer, IConsole *pConsole); int Run(); diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp index 987e252b9..3241d05df 100644 --- a/src/engine/shared/console.cpp +++ b/src/engine/shared/console.cpp @@ -6,7 +6,6 @@ #include #include "console.h" #include "config.h" -#include "engine.h" #include "linereader.h" const char *CConsole::CResult::GetString(unsigned Index) diff --git a/src/engine/shared/datafile.cpp b/src/engine/shared/datafile.cpp index a24ea7659..74583ab8e 100644 --- a/src/engine/shared/datafile.cpp +++ b/src/engine/shared/datafile.cpp @@ -4,7 +4,6 @@ #include #include #include "datafile.h" -#include "engine.h" #include static const int DEBUG=0; diff --git a/src/engine/shared/demo.cpp b/src/engine/shared/demo.cpp index 0433d6a37..bf8834561 100644 --- a/src/engine/shared/demo.cpp +++ b/src/engine/shared/demo.cpp @@ -9,7 +9,6 @@ #include "snapshot.h" #include "compression.h" #include "network.h" -#include "engine.h" static const unsigned char gs_aHeaderMarker[7] = {'T', 'W', 'D', 'E', 'M', 'O', 0}; static const unsigned char gs_ActVersion = 2; diff --git a/src/engine/shared/engine.cpp b/src/engine/shared/engine.cpp index ea06c57c2..442a5dfe1 100644 --- a/src/engine/shared/engine.cpp +++ b/src/engine/shared/engine.cpp @@ -3,71 +3,11 @@ #include +#include #include -#include #include #include -#include "linereader.h" -// compiled-in data-dir path -#define DATA_DIR "data" - -//static int engine_find_datadir(char *argv0); -/* -static void con_dbg_dumpmem(IConsole::IResult *result, void *user_data) -{ - mem_debug_dump(); -} - -static void con_dbg_lognetwork(IConsole::IResult *result, void *user_data) -{ - CNetBase::OpenLog("network_sent.dat", "network_recv.dat"); -}*/ - -/* -static char application_save_path[512] = {0}; -static char datadir[512] = {0}; - -const char *engine_savepath(const char *filename, char *buffer, int max) -{ - str_format(buffer, max, "%s/%s", application_save_path, filename); - return buffer; -}*/ - -void CEngine::Init(const char *pAppname) -{ - dbg_logger_stdout(); - dbg_logger_debugger(); - - // - dbg_msg("engine", "running on %s-%s-%s", CONF_FAMILY_STRING, CONF_PLATFORM_STRING, CONF_ARCH_STRING); -#ifdef CONF_ARCH_ENDIAN_LITTLE - dbg_msg("engine", "arch is little endian"); -#elif defined(CONF_ARCH_ENDIAN_BIG) - dbg_msg("engine", "arch is big endian"); -#else - dbg_msg("engine", "unknown endian"); -#endif - - // init the network - net_init(); - CNetBase::Init(); - - m_HostLookupPool.Init(1); - - //MACRO_REGISTER_COMMAND("dbg_dumpmem", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_dumpmem, 0x0, "Dump the memory"); - //MACRO_REGISTER_COMMAND("dbg_lognetwork", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_lognetwork, 0x0, "Log the network"); - - // reset the config - //config_reset(); -} - -void CEngine::InitLogfile() -{ - // open logfile if needed - if(g_Config.m_Logfile[0]) - dbg_logger_file(g_Config.m_Logfile); -} static int HostLookupThread(void *pUser) { @@ -76,8 +16,57 @@ static int HostLookupThread(void *pUser) return 0; } -void CEngine::HostLookup(CHostLookup *pLookup, const char *pHostname) +class CEngine : public IEngine { - str_copy(pLookup->m_aHostname, pHostname, sizeof(pLookup->m_aHostname)); - m_HostLookupPool.Add(&pLookup->m_Job, HostLookupThread, pLookup); -} +public: + /* + static void con_dbg_dumpmem(IConsole::IResult *result, void *user_data) + { + mem_debug_dump(); + } + + static void con_dbg_lognetwork(IConsole::IResult *result, void *user_data) + { + CNetBase::OpenLog("network_sent.dat", "network_recv.dat"); + }*/ + + CEngine(const char *pAppname) + { + dbg_logger_stdout(); + dbg_logger_debugger(); + + // + dbg_msg("engine", "running on %s-%s-%s", CONF_FAMILY_STRING, CONF_PLATFORM_STRING, CONF_ARCH_STRING); + #ifdef CONF_ARCH_ENDIAN_LITTLE + dbg_msg("engine", "arch is little endian"); + #elif defined(CONF_ARCH_ENDIAN_BIG) + dbg_msg("engine", "arch is big endian"); + #else + dbg_msg("engine", "unknown endian"); + #endif + + // init the network + net_init(); + CNetBase::Init(); + + m_HostLookupPool.Init(1); + + //MACRO_REGISTER_COMMAND("dbg_dumpmem", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_dumpmem, 0x0, "Dump the memory"); + //MACRO_REGISTER_COMMAND("dbg_lognetwork", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_lognetwork, 0x0, "Log the network"); + } + + void InitLogfile() + { + // open logfile if needed + if(g_Config.m_Logfile[0]) + dbg_logger_file(g_Config.m_Logfile); + } + + void HostLookup(CHostLookup *pLookup, const char *pHostname) + { + str_copy(pLookup->m_aHostname, pHostname, sizeof(pLookup->m_aHostname)); + m_HostLookupPool.Add(&pLookup->m_Job, HostLookupThread, pLookup); + } +}; + +IEngine *CreateEngine(const char *pAppname) { return new CEngine(pAppname); } diff --git a/src/engine/shared/engine.h b/src/engine/shared/engine.h deleted file mode 100644 index 63b0cc097..000000000 --- a/src/engine/shared/engine.h +++ /dev/null @@ -1,26 +0,0 @@ -/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ -/* If you are missing that file, acquire a complete release at teeworlds.com. */ -#ifndef ENGINE_SHARED_E_ENGINE_H -#define ENGINE_SHARED_E_ENGINE_H - -#include "jobs.h" - -class CHostLookup -{ -public: - CJob m_Job; - char m_aHostname[128]; - NETADDR m_Addr; -}; - -class CEngine -{ - class CJobPool m_HostLookupPool; - -public: - void Init(const char *pAppname); - void InitLogfile(); - void HostLookup(CHostLookup *pLookup, const char *pHostname); -}; - -#endif diff --git a/src/engine/shared/masterserver.cpp b/src/engine/shared/masterserver.cpp index 308c3ed4a..545cc16cb 100644 --- a/src/engine/shared/masterserver.cpp +++ b/src/engine/shared/masterserver.cpp @@ -3,9 +3,11 @@ #include // sscanf #include + +#include #include #include -#include "engine.h" + #include "linereader.h" class CMasterServer : public IEngineMasterServer @@ -22,7 +24,8 @@ public: CMasterInfo m_aMasterServers[MAX_MASTERSERVERS]; int m_NeedsUpdate; - CEngine *m_pEngine; + IEngine *m_pEngine; + IStorage *m_pStorage; CMasterServer() { @@ -98,9 +101,10 @@ public: } } - virtual void Init(class CEngine *pEngine) + virtual void Init() { - m_pEngine = pEngine; + m_pEngine = Kernel()->RequestInterface(); + m_pStorage = Kernel()->RequestInterface(); } virtual void SetDefault() @@ -115,12 +119,11 @@ public: CLineReader LineReader; IOHANDLE File; int Count = 0; - IStorage *pStorage = Kernel()->RequestInterface(); - if(!pStorage) + if(!m_pStorage) return -1; // try to open file - File = pStorage->OpenFile("masters.cfg", IOFLAG_READ, IStorage::TYPE_SAVE); + File = m_pStorage->OpenFile("masters.cfg", IOFLAG_READ, IStorage::TYPE_SAVE); if(!File) return -1; @@ -161,12 +164,11 @@ public: { IOHANDLE File; - IStorage *pStorage = Kernel()->RequestInterface(); - if(!pStorage) + if(!m_pStorage) return -1; // try to open file - File = pStorage->OpenFile("masters.cfg", IOFLAG_WRITE, IStorage::TYPE_SAVE); + File = m_pStorage->OpenFile("masters.cfg", IOFLAG_WRITE, IStorage::TYPE_SAVE); if(!File) return -1; diff --git a/src/engine/shared/network.cpp b/src/engine/shared/network.cpp index 8e70d9cf5..43c1e645a 100644 --- a/src/engine/shared/network.cpp +++ b/src/engine/shared/network.cpp @@ -4,7 +4,6 @@ #include "config.h" -#include "engine.h" #include "network.h" #include "huffman.h" diff --git a/src/engine/shared/packer.cpp b/src/engine/shared/packer.cpp index 5519898df..cd2114680 100644 --- a/src/engine/shared/packer.cpp +++ b/src/engine/shared/packer.cpp @@ -4,7 +4,6 @@ #include "packer.h" #include "compression.h" -#include "engine.h" #include "config.h" void CPacker::Reset() diff --git a/src/engine/shared/snapshot.cpp b/src/engine/shared/snapshot.cpp index f908d1c26..fee6afa2a 100644 --- a/src/engine/shared/snapshot.cpp +++ b/src/engine/shared/snapshot.cpp @@ -1,7 +1,6 @@ /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ /* If you are missing that file, acquire a complete release at teeworlds.com. */ #include "snapshot.h" -#include "engine.h" #include "compression.h" // CSnapshot diff --git a/src/engine/shared/storage.cpp b/src/engine/shared/storage.cpp index 3d7257f4a..2c7fafea0 100644 --- a/src/engine/shared/storage.cpp +++ b/src/engine/shared/storage.cpp @@ -2,7 +2,6 @@ /* If you are missing that file, acquire a complete release at teeworlds.com. */ #include #include -#include "engine.h" #include "linereader.h" // compiled-in data-dir path diff --git a/src/game/client/components/skins.cpp b/src/game/client/components/skins.cpp index d27f34ebd..6c845bb42 100644 --- a/src/game/client/components/skins.cpp +++ b/src/game/client/components/skins.cpp @@ -7,7 +7,6 @@ #include #include -#include #include "skins.h" diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp index bf122bfa5..323df8b11 100644 --- a/src/game/editor/ed_editor.cpp +++ b/src/game/editor/ed_editor.cpp @@ -5,7 +5,6 @@ #include #include -#include #include #include #include