diff --git a/dfhack/CMakeLists.txt b/dfhack/CMakeLists.txt index 8bb09e992..a652e6554 100644 --- a/dfhack/CMakeLists.txt +++ b/dfhack/CMakeLists.txt @@ -12,6 +12,7 @@ include/DFTileTypes.h include/DFTypes.h include/DFVector.h include/DFWindow.h +include/DFHackAPI_C.h include/integers.h shm/shms.h ) @@ -23,6 +24,7 @@ DFHackAPI.cpp APIPrivate.cpp DFTileTypes.cpp DFVector.cpp +DFHackAPI_C.cpp depends/md5/md5.cpp depends/md5/md5wrapper.cpp @@ -41,6 +43,8 @@ modules/Translation.cpp modules/Vegetation.cpp modules/Buildings.cpp modules/Constructions.cpp + +modules/Position_C.cpp ) SET(PROJECT_HDRS_LINUX @@ -91,7 +95,7 @@ ENDIF( CMAKE_SIZEOF_VOID_P MATCHES 4 ) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/dfhack/config.h.cmake ${CMAKE_SOURCE_DIR}/dfhack/include/config.h ) - +ADD_DEFINITIONS(-DBUILD_DFHACK_LIB) IF(UNIX) add_definitions(-DLINUX_BUILD) diff --git a/dfhack/DFHackAPI_C.cpp b/dfhack/DFHackAPI_C.cpp new file mode 100644 index 000000000..81847c419 --- /dev/null +++ b/dfhack/DFHackAPI_C.cpp @@ -0,0 +1,182 @@ +/* +www.sourceforge.net/projects/dfhack +Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf, doomchild + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#include "Tranquility.h" +#include "Export.h" +#include +#include +#include +#include "integers.h" +#include "DFTileTypes.h" +#include "DFTypes.h" +#include "DFWindow.h" +#include "DFHackAPI.h" + +using namespace std; +using namespace DFHack; + +#include "DFHackAPI_C.h" + +#ifdef __cplusplus +extern "C" { +#endif + +DFHackObject* API_Alloc(const char* path_to_xml) +{ + DFHack::API* api = new DFHack::API(std::string(path_to_xml)); + return (DFHackObject*)api; +} + +void API_Free(DFHackObject* api) +{ + if(api != NULL) + { + delete api; + api = NULL; + } +} + +int API_Attach(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->Attach()) + return 1; + else + return 0; + } + + return -1; +} + +int API_Detach(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->Detach()) + return 1; + else + return 0; + } + + return -1; +} + +int API_isAttached(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->isAttached()) + return 1; + else + return 0; + } + + return -1; +} + +int API_Suspend(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->Suspend()) + return 1; + else + return 0; + } + + return -1; +} + +int API_Resume(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->Resume()) + return 1; + else + return 0; + } + + return -1; +} + +int API_isSuspended(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->isSuspended()) + return 1; + else + return 0; + } + + return -1; +} + +int API_ForceResume(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->ForceResume()) + return 1; + else + return 0; + } + + return -1; +} + +int API_AsyncSuspend(DFHackObject* api) +{ + if(api != NULL) + { + if(((DFHack::API*)api)->AsyncSuspend()) + return 1; + else + return 0; + } + + return -1; +} + +void API_ReadRaw(DFHackObject* api, const uint32_t offset, const uint32_t size, uint8_t* target) +{ + if(api != NULL) + { + ((DFHack::API*)api)->ReadRaw(offset, size, target); + } +} + +void API_WriteRaw(DFHackObject* api, const uint32_t offset, const uint32_t size, uint8_t* source) +{ + if(api != NULL) + { + ((DFHack::API*)api)->WriteRaw(offset, size, source); + } +} + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/dfhack/include/DFHackAPI_C.h b/dfhack/include/DFHackAPI_C.h new file mode 100644 index 000000000..64408fa84 --- /dev/null +++ b/dfhack/include/DFHackAPI_C.h @@ -0,0 +1,57 @@ +/* +www.sourceforge.net/projects/dfhack +Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf, doomchild + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#ifndef DFHACK_C_API +#define DFHACK_C_API + +#include "Export.h" +#include "integers.h" + +typedef void DFHackObject; + +#ifdef __cplusplus +extern "C" { +#endif + +EXPORT DFHackObject* API_Alloc(const char* path_to_xml); +EXPORT void API_Free(DFHackObject* api); + +EXPORT int API_Attach(DFHackObject* api); +EXPORT int API_Detach(DFHackObject* api); +EXPORT int API_isAttached(DFHackObject* api); + +EXPORT int API_Suspend(DFHackObject* api); +EXPORT int API_Resume(DFHackObject* api); +EXPORT int API_isSuspended(DFHackObject* api); +EXPORT int API_ForceResume(DFHackObject* api); +EXPORT int API_AsyncSuspend(DFHackObject* api); + +EXPORT void API_ReadRaw(DFHackObject* api, const uint32_t offset, const uint32_t size, uint8_t* target); +EXPORT void API_WriteRaw(DFHackObject* api, const uint32_t offset, const uint32_t size, uint8_t* source); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/dfhack/include/Export.h b/dfhack/include/Export.h index 820c046ab..a3984c372 100644 --- a/dfhack/include/Export.h +++ b/dfhack/include/Export.h @@ -41,3 +41,5 @@ distribution. #endif #endif #endif + +#define EXPORT __declspec(dllexport) diff --git a/dfhack/include/modules/Position_C.h b/dfhack/include/modules/Position_C.h new file mode 100644 index 000000000..4879116c8 --- /dev/null +++ b/dfhack/include/modules/Position_C.h @@ -0,0 +1,48 @@ +/* +www.sourceforge.net/projects/dfhack +Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf, doomchild + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#ifndef POSITION_C_API +#define POSITION_C_API + +#include "Export.h" + +#include "DFHackAPI_C.h" + +#ifdef __cplusplus +extern "C" { +#endif + +EXPORT int Position_getViewCoords(DFHackObject* pos, int32_t* x, int32_t* y, int32_t* z); +EXPORT int Position_setViewCoords(DFHackObject* pos, const int32_t x, const int32_t y, const int32_t z); + +EXPORT int Position_getCursorCoords(DFHackObject* pos, int32_t* x, int32_t* y, int32_t* z); +EXPORT int Position_setCursorCoords(DFHackObject* pos, const int32_t x, const int32_t y, const int32_t z); + +EXPORT int Position_getWindowSize(DFHackObject* pos, int32_t* width, int32_t* height); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/dfhack/modules/Position_C.cpp b/dfhack/modules/Position_C.cpp new file mode 100644 index 000000000..ef274c930 --- /dev/null +++ b/dfhack/modules/Position_C.cpp @@ -0,0 +1,128 @@ +/* +www.sourceforge.net/projects/dfhack +Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf, doomchild + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#include "modules/Position_C.h" +#include "integers.h" + +#include "DFCommonInternal.h" +#include "modules/Position.h" + +using namespace DFHack; + +#ifdef __cplusplus +extern "C" { +#endif + +int Position_getViewCoords(DFHackObject* pos, int32_t* x, int32_t* y, int32_t* z) +{ + if(pos != NULL) + { + int32_t tx, ty, tz; + + if(((DFHack::Position*)pos)->getViewCoords(tx, ty, tz)) + { + *x = tx; + *y = ty; + *z = tz; + + return 1; + } + else + return 0; + } + + return -1; +} + +int Position_setViewCoords(DFHackObject* pos, int32_t x, int32_t y, int32_t z) +{ + if(pos != NULL) + { + if(((DFHack::Position*)pos)->setViewCoords(x, y, z)) + return 1; + else + return 0; + } + + return -1; +} + + +int Position_getCursorCoords(DFHackObject* pos, int32_t* x, int32_t* y, int32_t* z) +{ + if(pos != NULL) + { + int32_t tx, ty, tz; + + if(((DFHack::Position*)pos)->getCursorCoords(tx, ty, tz)) + { + *x = tx; + *y = ty; + *z = tz; + + return 1; + } + else + return 0; + } + + return -1; +} + +int Position_setCursorCoords(DFHackObject* pos, int32_t x, int32_t y, int32_t z) +{ + if(pos != NULL) + { + if(((DFHack::Position*)pos)->setCursorCoords(x, y, z)) + return 1; + else + return 0; + } + + return -1; +} + +int Position_getWindowSize(DFHackObject* pos, int32_t* width, int32_t* height) +{ + if(pos != NULL) + { + int32_t tw, th; + + if(((DFHack::Position*)pos)->getWindowSize(tw, th)) + { + *width = tw; + *height = th; + + return 1; + } + else + return 0; + } + + return -1; +} + +#ifdef __cplusplus +} +#endif \ No newline at end of file