diff --git a/dfhack/CMakeLists.txt b/dfhack/CMakeLists.txt index b6adc6926..54841700e 100644 --- a/dfhack/CMakeLists.txt +++ b/dfhack/CMakeLists.txt @@ -53,6 +53,8 @@ modules/Constructions_C.cpp modules/Maps_C.cpp modules/Vegetation_C.cpp modules/Creatures_C.cpp +modules/Translation_C.cpp +modules/Items_C.cpp ) SET(PROJECT_HDRS_LINUX diff --git a/dfhack/include/modules/Items_C.h b/dfhack/include/modules/Items_C.h new file mode 100644 index 000000000..201e7142a --- /dev/null +++ b/dfhack/include/modules/Items_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 ITEMS_C_API +#define ITEMS_C_API + +#include "Export.h" +#include "integers.h" +#include "DFTypes.h" +#include "modules/Items.h" +#include "DFHackAPI_C.h" + +using namespace DFHack; + +#ifdef __cplusplus +extern "C" { +#endif + +DFHACK_EXPORT char* Items_getItemDescription(DFHackObject* items, uint32_t itemptr, DFHackObject* mats, char* (*char_buffer_create)(int)); +DFHACK_EXPORT char* Items_getItemClass(DFHackObject* items, int32_t index, char* (*char_buffer_create)(int)); +DFHACK_EXPORT int Items_getItemData(DFHackObject* items, uint32_t itemptr, t_item* item); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/dfhack/modules/Items_C.cpp b/dfhack/modules/Items_C.cpp new file mode 100644 index 000000000..a28b3f86a --- /dev/null +++ b/dfhack/modules/Items_C.cpp @@ -0,0 +1,109 @@ +/* +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 "integers.h" +#include + +using namespace std; + +#include "DFCommonInternal.h" +#include "DFTypes.h" +#include "DFHackAPI.h" +#include "modules/Materials.h" +#include "modules/Items.h" +#include "modules/Items_C.h" + +using namespace DFHack; + +#ifdef __cplusplus +extern "C" { +#endif + +char* Items_getItemDescription(DFHackObject* items, uint32_t itemptr, DFHackObject* mats, char* (*char_buffer_create)(int)) +{ + if(items != NULL && mats != NULL) + { + std::string desc = ((DFHack::Items*)items)->getItemDescription(itemptr, (DFHack::Materials*)mats); + + if(desc.size() > 0) + { + char* buf = (*char_buffer_create)(desc.size()); + + if(buf != NULL) + { + size_t len = desc.copy(buf, desc.size()); + + if(len > 0) + buf[len] = '\0'; + else + buf[0] = '\0'; + } + + return buf; + } + } + + return NULL; +} + +char* Items_getItemClass(DFHackObject* items, int32_t index, char* (*char_buffer_create)(int)) +{ + if(items != NULL) + { + std::string iclass = ((DFHack::Items*)items)->getItemClass(index); + + if(iclass.size() > 0) + { + char* buf = (*char_buffer_create)(iclass.size()); + + if(buf != NULL) + { + size_t len = iclass.copy(buf, iclass.size()); + + if(len > 0) + buf[len] = '\0'; + else + buf[0] = '\0'; + } + + return buf; + } + } + + return NULL; +} + +int Items_getItemData(DFHackObject* items, uint32_t itemptr, t_item* item) +{ + if(items != NULL) + { + return ((DFHack::Items*)items)->getItemData(itemptr, *item); + } + + return -1; +} + +#ifdef __cplusplus +} +#endif