diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index fc267e789..15abe7cce 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -92,6 +92,8 @@ modules/Position_C.cpp modules/Materials_C.cpp modules/Translation_C.cpp modules/Vegetation_C.cpp +modules/WindowIO_C.cpp +modules/World_C.cpp ) SET(PROJECT_HDRS_LINUX diff --git a/library/DFTypes_C.cpp b/library/DFTypes_C.cpp index 2a27ad292..6d3f8d789 100644 --- a/library/DFTypes_C.cpp +++ b/library/DFTypes_C.cpp @@ -41,31 +41,31 @@ using namespace DFHack; extern "C" { #endif -int8_t* (*alloc_byte_buffer_callback)(uint32_t) = NULL; -int16_t* (*alloc_short_buffer_callback)(uint32_t) = NULL; -int32_t* (*alloc_int_buffer_callback)(uint32_t) = NULL; +int (*alloc_byte_buffer_callback)(int8_t*, uint32_t) = NULL; +int (*alloc_short_buffer_callback)(int16_t*, uint32_t) = NULL; +int (*alloc_int_buffer_callback)(int32_t*, uint32_t) = NULL; -uint8_t* (*alloc_ubyte_buffer_callback)(uint32_t) = NULL; -uint16_t* (*alloc_ushort_buffer_callback)(uint32_t) = NULL; -uint32_t* (*alloc_uint_buffer_callback)(uint32_t) = NULL; +int (*alloc_ubyte_buffer_callback)(uint8_t*, uint32_t) = NULL; +int (*alloc_ushort_buffer_callback)(uint16_t*, uint32_t) = NULL; +int (*alloc_uint_buffer_callback)(uint32_t*, uint32_t) = NULL; -char* (*alloc_char_buffer_callback)(uint32_t) = NULL; +int (*alloc_char_buffer_callback)(char*, uint32_t) = NULL; -t_matgloss* (*alloc_matgloss_buffer_callback)(int) = NULL; -t_descriptor_color* (*alloc_descriptor_buffer_callback)(int) = NULL; -t_matglossOther* (*alloc_matgloss_other_buffer_callback)(int) = NULL; +int (*alloc_matgloss_buffer_callback)(t_matgloss*, uint32_t) = NULL; +int (*alloc_descriptor_buffer_callback)(t_descriptor_color*, uint32_t) = NULL; +int (*alloc_matgloss_other_buffer_callback)(t_matglossOther*, uint32_t) = NULL; -c_colormodifier* (*alloc_empty_colormodifier_callback)(void) = NULL; -c_colormodifier* (*alloc_colormodifier_callback)(const char*, uint32_t) = NULL; -c_colormodifier* (*alloc_colormodifier_buffer_callback)(uint32_t) = NULL; +int (*alloc_empty_colormodifier_callback)(c_colormodifier*) = NULL; +int (*alloc_colormodifier_callback)(c_colormodifier*, const char*, uint32_t) = NULL; +int (*alloc_colormodifier_buffer_callback)(c_colormodifier*, uint32_t) = NULL; -c_creaturecaste* (*alloc_empty_creaturecaste_callback)(void) = NULL; -c_creaturecaste* (*alloc_creaturecaste_callback)(const char*, const char*, const char*, const char*, uint32_t, uint32_t) = NULL; -c_creaturecaste* (*alloc_creaturecaste_buffer_callback)(uint32_t) = NULL; +int (*alloc_empty_creaturecaste_callback)(c_creaturecaste*)= NULL; +int (*alloc_creaturecaste_callback)(c_creaturecaste*, const char*, const char*, const char*, const char*, uint32_t, uint32_t) = NULL; +int (*alloc_creaturecaste_buffer_callback)(c_creaturecaste*, uint32_t) = NULL; -c_creaturetype* (*alloc_empty_creaturetype_callback)(void) = NULL; -c_creaturetype* (*alloc_creaturetype_callback)(const char*, uint32_t, uint32_t, uint8_t, uint16_t, uint16_t, uint16_t) = NULL; -c_creaturetype* (*alloc_creaturetype_buffer_callback)(uint32_t) = NULL; +int (*alloc_empty_creaturetype_callback)(c_creaturetype*) = NULL; +int (*alloc_creaturetype_callback)(c_creaturetype*, const char*, uint32_t, uint32_t, uint8_t, uint16_t, uint16_t, uint16_t) = NULL; +int (*alloc_creaturetype_buffer_callback)(c_creaturetype*, uint32_t) = NULL; #ifdef __cplusplus } @@ -76,7 +76,7 @@ int ColorListConvert(t_colormodifier* src, c_colormodifier* dest) if(src == NULL) return -1; - dest = ((*alloc_colormodifier_callback)(src->part, src->colorlist.size())); + ((*alloc_colormodifier_callback)(dest, src->part, src->colorlist.size())); copy(src->colorlist.begin(), src->colorlist.end(), dest->colorlist); @@ -88,7 +88,7 @@ int CreatureCasteConvert(t_creaturecaste* src, c_creaturecaste* dest) if(src == NULL) return -1; - dest = ((*alloc_creaturecaste_callback)(src->rawname, src->singular, src->plural, src->adjective, src->ColorModifier.size(), src->bodypart.size())); + ((*alloc_creaturecaste_callback)(dest, src->rawname, src->singular, src->plural, src->adjective, src->ColorModifier.size(), src->bodypart.size())); for(int i = 0; i < dest->colorModifierLength; i++) ColorListConvert(&src->ColorModifier[i], &dest->ColorModifier[i]); @@ -103,7 +103,7 @@ int CreatureTypeConvert(t_creaturetype* src, c_creaturetype* dest) if(src == NULL) return -1; - dest = ((*alloc_creaturetype_callback)(src->rawname, src->castes.size(), src->extract.size(), src->tile_character, src->tilecolor.fore, src->tilecolor.back, src->tilecolor.bright)); + ((*alloc_creaturetype_callback)(dest, src->rawname, src->castes.size(), src->extract.size(), src->tile_character, src->tilecolor.fore, src->tilecolor.back, src->tilecolor.bright)); for(int i = 0; i < dest->castesCount; i++) CreatureCasteConvert(&src->castes[i], &dest->castes[i]); diff --git a/library/include/DFHack_C.h b/library/include/DFHack_C.h index 8eb381595..f08c31131 100644 --- a/library/include/DFHack_C.h +++ b/library/include/DFHack_C.h @@ -25,12 +25,20 @@ distribution. #ifndef DFHACK_C_API #define DFHACK_C_API -typedef void DFHackObject; +#include +#include +#include +#include +#include +#include "dfhack/DFGlobal.h" #include "dfhack/DFExport.h" #include "dfhack/DFIntegers.h" -#include "dfhack-c/DFContext_C.h" -#include "dfhack-c/DFTypes_C.h" + +using namespace std; +using namespace DFHack; + +typedef void DFHackObject; #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/DFContext_C.h b/library/include/dfhack-c/DFContext_C.h index 32ecca9e9..365c235b9 100644 --- a/library/include/dfhack-c/DFContext_C.h +++ b/library/include/dfhack-c/DFContext_C.h @@ -25,10 +25,7 @@ distribution. #ifndef DFHACK_C_CONTEXT #define DFHACK_C_CONTEXT -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" - -typedef void DFHackObject; +#include "DFHack_C.h" #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/DFTypes_C.h b/library/include/dfhack-c/DFTypes_C.h index 18c8de3b3..bf604e13e 100644 --- a/library/include/dfhack-c/DFTypes_C.h +++ b/library/include/dfhack-c/DFTypes_C.h @@ -25,30 +25,27 @@ distribution. #ifndef TYPES_C_API #define TYPES_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" +#include "DFHack_C.h" #include "dfhack/DFTypes.h" #include "dfhack/modules/Materials.h" -using namespace DFHack; - #ifdef __cplusplus extern "C" { #endif -DFHACK_EXPORT extern int8_t* (*alloc_byte_buffer_callback)(uint32_t); -DFHACK_EXPORT extern int16_t* (*alloc_short_buffer_callback)(uint32_t); -DFHACK_EXPORT extern int32_t* (*alloc_int_buffer_callback)(uint32_t); +DFHACK_EXPORT extern int (*alloc_byte_buffer_callback)(int8_t*, uint32_t); +DFHACK_EXPORT extern int (*alloc_short_buffer_callback)(int16_t*, uint32_t); +DFHACK_EXPORT extern int (*alloc_int_buffer_callback)(int32_t*, uint32_t); -DFHACK_EXPORT extern uint8_t* (*alloc_ubyte_buffer_callback)(uint32_t); -DFHACK_EXPORT extern uint16_t* (*alloc_ushort_buffer_callback)(uint32_t); -DFHACK_EXPORT extern uint32_t* (*alloc_uint_buffer_callback)(uint32_t); +DFHACK_EXPORT extern int (*alloc_ubyte_buffer_callback)(uint8_t*, uint32_t); +DFHACK_EXPORT extern int (*alloc_ushort_buffer_callback)(uint16_t*, uint32_t); +DFHACK_EXPORT extern int (*alloc_uint_buffer_callback)(uint32_t*, uint32_t); -DFHACK_EXPORT extern char* (*alloc_char_buffer_callback)(uint32_t); +DFHACK_EXPORT extern int (*alloc_char_buffer_callback)(char*, uint32_t); -DFHACK_EXPORT extern t_matgloss* (*alloc_matgloss_buffer_callback)(int); -DFHACK_EXPORT extern t_descriptor_color* (*alloc_descriptor_buffer_callback)(int); -DFHACK_EXPORT extern t_matglossOther* (*alloc_matgloss_other_buffer_callback)(int); +DFHACK_EXPORT extern int (*alloc_matgloss_buffer_callback)(t_matgloss*, uint32_t); +DFHACK_EXPORT extern int (*alloc_descriptor_buffer_callback)(t_descriptor_color*, uint32_t); +DFHACK_EXPORT extern int (*alloc_matgloss_other_buffer_callback)(t_matglossOther*, uint32_t); struct c_colormodifier { @@ -57,9 +54,9 @@ struct c_colormodifier uint32_t colorlistLength; }; -DFHACK_EXPORT extern c_colormodifier* (*alloc_empty_colormodifier_callback)(void); -DFHACK_EXPORT extern c_colormodifier* (*alloc_colormodifier_callback)(const char*, uint32_t); -DFHACK_EXPORT extern c_colormodifier* (*alloc_colormodifier_buffer_callback)(uint32_t); +DFHACK_EXPORT extern int (*alloc_empty_colormodifier_callback)(c_colormodifier*); +DFHACK_EXPORT extern int (*alloc_colormodifier_callback)(c_colormodifier*, const char*, uint32_t); +DFHACK_EXPORT extern int (*alloc_colormodifier_buffer_callback)(c_colormodifier*, uint32_t); struct c_creaturecaste { @@ -75,9 +72,9 @@ struct c_creaturecaste uint32_t bodypartLength; }; -DFHACK_EXPORT extern c_creaturecaste* (*alloc_empty_creaturecaste_callback)(void); -DFHACK_EXPORT extern c_creaturecaste* (*alloc_creaturecaste_callback)(const char*, const char*, const char*, const char*, uint32_t, uint32_t); -DFHACK_EXPORT extern c_creaturecaste* (*alloc_creaturecaste_buffer_callback)(uint32_t); +DFHACK_EXPORT extern int (*alloc_empty_creaturecaste_callback)(c_creaturecaste*); +DFHACK_EXPORT extern int (*alloc_creaturecaste_callback)(c_creaturecaste*, const char*, const char*, const char*, const char*, uint32_t, uint32_t); +DFHACK_EXPORT extern int (*alloc_creaturecaste_buffer_callback)(c_creaturecaste*, uint32_t); struct c_creaturetype { @@ -99,9 +96,9 @@ struct c_creaturetype } tilecolor; }; -DFHACK_EXPORT extern c_creaturetype* (*alloc_empty_creaturetype_callback)(void); -DFHACK_EXPORT extern c_creaturetype* (*alloc_creaturetype_callback)(const char*, uint32_t, uint32_t, uint8_t, uint16_t, uint16_t, uint16_t); -DFHACK_EXPORT extern c_creaturetype* (*alloc_creaturetype_buffer_callback)(uint32_t); +DFHACK_EXPORT extern int (*alloc_empty_creaturetype_callback)(c_creaturetype*); +DFHACK_EXPORT extern int (*alloc_creaturetype_callback)(c_creaturetype*, const char*, uint32_t, uint32_t, uint8_t, uint16_t, uint16_t, uint16_t); +DFHACK_EXPORT extern int (*alloc_creaturetype_buffer_callback)(c_creaturetype*, uint32_t); #ifdef __cplusplus } diff --git a/library/include/dfhack-c/modules/Buildings_C.h b/library/include/dfhack-c/modules/Buildings_C.h index c69da83e0..6b1632dd2 100644 --- a/library/include/dfhack-c/modules/Buildings_C.h +++ b/library/include/dfhack-c/modules/Buildings_C.h @@ -25,13 +25,9 @@ distribution. #ifndef BUILDINGS_C_API #define BUILDINGS_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" +#include "DFHack_C.h" #include "dfhack/DFTypes.h" #include "dfhack/modules/Buildings.h" -#include "DFHack_C.h" - -using namespace DFHack; #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Constructions_C.h b/library/include/dfhack-c/modules/Constructions_C.h index c34527b1d..f339b6bcc 100644 --- a/library/include/dfhack-c/modules/Constructions_C.h +++ b/library/include/dfhack-c/modules/Constructions_C.h @@ -25,13 +25,9 @@ distribution. #ifndef CONSTRUCTIONS_C_API #define CONSTRUCTIONS_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" +#include "DFHack_C.h" #include "dfhack/DFTypes.h" #include "dfhack/modules/Constructions.h" -#include "DFHack_C.h" - -using namespace DFHack; #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Creatures_C.h b/library/include/dfhack-c/modules/Creatures_C.h index 93502ffe6..bbc9e6f54 100644 --- a/library/include/dfhack-c/modules/Creatures_C.h +++ b/library/include/dfhack-c/modules/Creatures_C.h @@ -25,15 +25,11 @@ distribution. #ifndef CREATURES_C_API #define CREATURES_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" #include "DFHack_C.h" #include "dfhack/DFTypes.h" #include "dfhack/modules/Materials.h" #include "dfhack/modules/Creatures.h" -using namespace DFHack; - #ifdef __cplusplus extern "C" { #endif diff --git a/library/include/dfhack-c/modules/Gui_C.h b/library/include/dfhack-c/modules/Gui_C.h index 0bd68f3fc..2373d458d 100644 --- a/library/include/dfhack-c/modules/Gui_C.h +++ b/library/include/dfhack-c/modules/Gui_C.h @@ -25,11 +25,9 @@ distribution. #ifndef GUI_C_API #define GUI_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" +#include "DFHack_C.h" #include "dfhack/DFTypes.h" - -using namespace DFHack; +#include "dfhack/modules/Gui.h" #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Items_C.h b/library/include/dfhack-c/modules/Items_C.h index 0568e9088..5c1e08e48 100644 --- a/library/include/dfhack-c/modules/Items_C.h +++ b/library/include/dfhack-c/modules/Items_C.h @@ -25,15 +25,10 @@ distribution. #ifndef ITEMS_C_API #define ITEMS_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" -#include "Internal.h" - -using namespace DFHack; - -#include "dfhack/DFTypes.h" -#include "dfhack/modules/Items.h" #include "DFHack_C.h" +#include "dfhack/DFProcess.h" +#include "dfhack-c/DFTypes_C.h" +#include "dfhack/modules/Items.h" #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Maps_C.h b/library/include/dfhack-c/modules/Maps_C.h index e37d3640a..299f0d5f5 100644 --- a/library/include/dfhack-c/modules/Maps_C.h +++ b/library/include/dfhack-c/modules/Maps_C.h @@ -25,19 +25,9 @@ distribution. #ifndef MAPS_C_API #define MAPS_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" -#include -#include -#include - -using namespace std; - +#include "DFHack_C.h" #include "dfhack/DFTypes.h" #include "dfhack/modules/Maps.h" -#include "DFHack_C.h" - -using namespace DFHack; #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Materials_C.h b/library/include/dfhack-c/modules/Materials_C.h index ef56ac627..25a9a7df3 100644 --- a/library/include/dfhack-c/modules/Materials_C.h +++ b/library/include/dfhack-c/modules/Materials_C.h @@ -25,14 +25,9 @@ distribution. #ifndef MATERIALS_C_API #define MATERIALS_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" -#include "dfhack/DFTypes.h" -#include "dfhack/modules/Materials.h" #include "DFHack_C.h" #include "dfhack-c/DFTypes_C.h" - -using namespace DFHack; +#include "dfhack/modules/Materials.h" #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Position_C.h b/library/include/dfhack-c/modules/Position_C.h index 3b2f1dc0b..665e400bf 100644 --- a/library/include/dfhack-c/modules/Position_C.h +++ b/library/include/dfhack-c/modules/Position_C.h @@ -25,8 +25,8 @@ distribution. #ifndef POSITION_C_API #define POSITION_C_API -#include "dfhack/DFExport.h" #include "DFHack_C.h" +#include "dfhack/modules/Position.h" #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Translation_C.h b/library/include/dfhack-c/modules/Translation_C.h index 2e1aaf457..8cbcf4e91 100644 --- a/library/include/dfhack-c/modules/Translation_C.h +++ b/library/include/dfhack-c/modules/Translation_C.h @@ -25,13 +25,9 @@ distribution. #ifndef TRANSLATION_C_API #define TRANSLATION_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" +#include "DFHack_C.h" #include "dfhack/DFTypes.h" #include "dfhack/modules/Translation.h" -#include "DFHack_C.h" - -using namespace DFHack; #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/Vegetation_C.h b/library/include/dfhack-c/modules/Vegetation_C.h index c57c3948a..017d30a7b 100644 --- a/library/include/dfhack-c/modules/Vegetation_C.h +++ b/library/include/dfhack-c/modules/Vegetation_C.h @@ -25,13 +25,9 @@ distribution. #ifndef VEGETATION_C_API #define VEGETATION_C_API -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" +#include "DFHack_C.h" #include "dfhack/DFTypes.h" #include "dfhack/modules/Vegetation.h" -#include "DFHack_C.h" - -using namespace DFHack; #ifdef __cplusplus extern "C" { diff --git a/library/include/dfhack-c/modules/WindowIO_C.h b/library/include/dfhack-c/modules/WindowIO_C.h new file mode 100644 index 000000000..072a4f352 --- /dev/null +++ b/library/include/dfhack-c/modules/WindowIO_C.h @@ -0,0 +1,43 @@ +/* +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 WINDOWIO_C_API +#define WINDOWIO_C_API + +#include "DFHack_C.h" +#include "dfhack/modules/WindowIO.h" + +#ifdef __cplusplus +extern "C" { +#endif + +DFHACK_EXPORT int WindowIO_TypeStr(DFHackObject* window, const char* input, int delay, bool useShift); + +DFHACK_EXPORT int WindowIO_TypeSpecial(DFHackObject* window, t_special command, int count, int delay); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/library/include/dfhack-c/modules/World_C.h b/library/include/dfhack-c/modules/World_C.h new file mode 100644 index 000000000..f6261a738 --- /dev/null +++ b/library/include/dfhack-c/modules/World_C.h @@ -0,0 +1,47 @@ +/* +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 WORLD_C_API +#define WORLD_C_API + +#include "DFHack_C.h" +#include "dfhack/modules/World.h" + +#ifdef __cplusplus +extern "C" { +#endif + +DFHACK_EXPORT int World_Start(DFHackObject* world); +DFHACK_EXPORT int World_Finish(DFHackObject* world); + +DFHACK_EXPORT int World_ReadCurrentTick(DFHackObject* world, uint32_t* tick); +DFHACK_EXPORT int World_ReadCurrentYear(DFHackObject* world, uint32_t* year); +DFHACK_EXPORT int World_ReadCurrentMonth(DFHackObject* world, uint32_t* month); +DFHACK_EXPORT int World_ReadCurrentDay(DFHackObject* world, uint32_t* day); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/library/modules/Buildings_C.cpp b/library/modules/Buildings_C.cpp index 18bd77922..7eaaa48a6 100644 --- a/library/modules/Buildings_C.cpp +++ b/library/modules/Buildings_C.cpp @@ -22,20 +22,8 @@ must not be misrepresented as being the original software. distribution. */ -#include "dfhack/DFIntegers.h" -#include -#include -#include "stdio.h" - -using namespace std; - -#include "Internal.h" -#include "dfhack/DFTypes.h" -#include "dfhack/modules/Buildings.h" #include "dfhack-c/modules/Buildings_C.h" -using namespace DFHack; - #ifdef __cplusplus extern "C" { #endif diff --git a/library/modules/Constructions_C.cpp b/library/modules/Constructions_C.cpp index 93afdae01..03e89ca23 100644 --- a/library/modules/Constructions_C.cpp +++ b/library/modules/Constructions_C.cpp @@ -22,15 +22,8 @@ must not be misrepresented as being the original software. distribution. */ -#include "dfhack/DFIntegers.h" - -#include "Internal.h" -#include "dfhack/DFTypes.h" -#include "dfhack/modules/Constructions.h" #include "dfhack-c/modules/Constructions_C.h" -using namespace DFHack; - #ifdef __cplusplus extern "C" { #endif diff --git a/library/modules/Creatures_C.cpp b/library/modules/Creatures_C.cpp index 1aac93110..731ac8611 100644 --- a/library/modules/Creatures_C.cpp +++ b/library/modules/Creatures_C.cpp @@ -22,21 +22,7 @@ must not be misrepresented as being the original software. distribution. */ -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" -#include -#include -#include - -using namespace std; - -#include "dfhack/DFTypes.h" -#include "dfhack/modules/Materials.h" -#include "dfhack/modules/Creatures.h" #include "dfhack-c/modules/Creatures_C.h" -#include "DFHack_C.h" - -using namespace DFHack; #ifdef __cplusplus extern "C" { diff --git a/library/modules/Gui_C.cpp b/library/modules/Gui_C.cpp index 586eb1dd0..da17d2a18 100644 --- a/library/modules/Gui_C.cpp +++ b/library/modules/Gui_C.cpp @@ -21,16 +21,8 @@ must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ -#include -#include -#include "DFHack_C.h" -#include "dfhack-c/modules/Gui_C.h" -#include "dfhack/DFIntegers.h" - -#include "Internal.h" -#include "dfhack/modules/Gui.h" -using namespace DFHack; +#include "dfhack-c/modules/Gui_C.h" #ifdef __cplusplus extern "C" { diff --git a/library/modules/Items_C.cpp b/library/modules/Items_C.cpp index 3ac54c46a..75e555c79 100644 --- a/library/modules/Items_C.cpp +++ b/library/modules/Items_C.cpp @@ -22,25 +22,8 @@ must not be misrepresented as being the original software. distribution. */ -#include -#include -#include -#include "dfhack/DFExport.h" -#include "dfhack/DFIntegers.h" -#include "DFHack_C.h" - -#include "dfhack/DFTypes.h" - -using namespace std; -using namespace DFHack; - -#include "dfhack/DFProcess.h" -#include "dfhack/modules/Materials.h" -#include "dfhack/modules/Items.h" -#include "dfhack-c/DFTypes_C.h" #include "dfhack-c/modules/Items_C.h" - #ifdef __cplusplus extern "C" { #endif diff --git a/library/modules/Maps_C.cpp b/library/modules/Maps_C.cpp index ccac26447..5b41fff07 100644 --- a/library/modules/Maps_C.cpp +++ b/library/modules/Maps_C.cpp @@ -22,20 +22,8 @@ must not be misrepresented as being the original software. distribution. */ -#include "dfhack/DFIntegers.h" -#include -#include -#include - -using namespace std; - -#include "Internal.h" -#include "dfhack/DFTypes.h" -#include "dfhack/modules/Maps.h" #include "dfhack-c/modules/Maps_C.h" -using namespace DFHack; - #ifdef __cplusplus extern "C" { #endif diff --git a/library/modules/Materials_C.cpp b/library/modules/Materials_C.cpp index dee99fbaa..1d70f8716 100644 --- a/library/modules/Materials_C.cpp +++ b/library/modules/Materials_C.cpp @@ -22,21 +22,8 @@ must not be misrepresented as being the original software. distribution. */ -#include "dfhack/DFIntegers.h" -#include -#include -#include - -using namespace std; - -#include "Internal.h" -#include "dfhack/DFTypes.h" -#include "dfhack/modules/Materials.h" -#include "dfhack-c/DFTypes_C.h" #include "dfhack-c/modules/Materials_C.h" -using namespace DFHack; - #ifdef __cplusplus extern "C" { #endif @@ -233,7 +220,9 @@ t_matgloss* Materials_getInorganic(DFHackObject* mat) if(materials->inorganic.size() > 0) { - t_matgloss* buf = ((*alloc_matgloss_buffer_callback)(materials->inorganic.size())); + t_matgloss* buf; + + ((*alloc_matgloss_buffer_callback)(buf, materials->inorganic.size())); if(buf != NULL) { @@ -255,7 +244,9 @@ t_matgloss* Materials_getOrganic(DFHackObject* mat) if(materials->organic.size() > 0) { - t_matgloss* buf = ((*alloc_matgloss_buffer_callback)(materials->organic.size())); + t_matgloss* buf; + + ((*alloc_matgloss_buffer_callback)(buf, materials->organic.size())); if(buf != NULL) { @@ -277,7 +268,9 @@ t_matgloss* Materials_getTree(DFHackObject* mat) if(materials->tree.size() > 0) { - t_matgloss* buf = ((*alloc_matgloss_buffer_callback)(materials->tree.size())); + t_matgloss* buf; + + ((*alloc_matgloss_buffer_callback)(buf, materials->tree.size())); if(buf != NULL) { @@ -299,7 +292,9 @@ t_matgloss* Materials_getPlant(DFHackObject* mat) if(materials->plant.size() > 0) { - t_matgloss* buf = ((*alloc_matgloss_buffer_callback)(materials->plant.size())); + t_matgloss* buf; + + ((*alloc_matgloss_buffer_callback)(buf, materials->plant.size())); if(buf != NULL) { @@ -321,7 +316,9 @@ t_matgloss* Materials_getRace(DFHackObject* mat) if(materials->race.size() > 0) { - t_matgloss* buf = ((*alloc_matgloss_buffer_callback)(materials->race.size())); + t_matgloss* buf; + + ((*alloc_matgloss_buffer_callback)(buf, materials->race.size())); if(buf != NULL) { @@ -345,7 +342,9 @@ c_creaturetype* Materials_getRaceEx(DFHackObject* mat) if(matSize > 0) { - c_creaturetype* buf = ((*alloc_creaturetype_buffer_callback)(matSize)); + c_creaturetype* buf; + + ((*alloc_creaturetype_buffer_callback)(buf, matSize)); if(buf != NULL) { @@ -368,7 +367,9 @@ t_descriptor_color* Materials_getColor(DFHackObject* mat) if(materials->color.size() > 0) { - t_descriptor_color* buf = ((*alloc_descriptor_buffer_callback)(materials->color.size())); + t_descriptor_color* buf; + + ((*alloc_descriptor_buffer_callback)(buf, materials->color.size())); if(buf != NULL) { @@ -390,7 +391,9 @@ t_matglossOther* Materials_getOther(DFHackObject* mat) if(materials->other.size() > 0) { - t_matglossOther* buf = ((*alloc_matgloss_other_buffer_callback)(materials->other.size())); + t_matglossOther* buf; + + ((*alloc_matgloss_other_buffer_callback)(buf, materials->other.size())); if(buf != NULL) { diff --git a/library/modules/Position_C.cpp b/library/modules/Position_C.cpp index 72405d9b7..0144abdb3 100644 --- a/library/modules/Position_C.cpp +++ b/library/modules/Position_C.cpp @@ -22,15 +22,7 @@ must not be misrepresented as being the original software. distribution. */ -#include -#include #include "dfhack-c/modules/Position_C.h" -#include "dfhack/DFIntegers.h" - -#include "Internal.h" -#include "dfhack/modules/Position.h" - -using namespace DFHack; #ifdef __cplusplus extern "C" { diff --git a/library/modules/WindowIO_C.cpp b/library/modules/WindowIO_C.cpp new file mode 100644 index 000000000..b404736ec --- /dev/null +++ b/library/modules/WindowIO_C.cpp @@ -0,0 +1,64 @@ +/* +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. +*/ + +using namespace std; + +#include "dfhack/DFIntegers.h" +#include "DFHack.h" +#include "DFHack_C.h" +#include "dfhack/modules/WindowIO.h" +#include "dfhack-c/modules/WindowIO_C.h" + +using namespace DFHack; + + +#ifdef __cplusplus +extern "C" { +#endif + +int WindowIO_TypeStr(DFHackObject* window, const char* input, int delay, bool useShift) +{ + if(window != NULL) + { + ((DFHack::WindowIO*)window)->TypeStr(input, delay, useShift); + return 1; + } + + return -1; +} + +int WindowIO_TypeSpecial(DFHackObject* window, t_special command, int count, int delay) +{ + if(window != NULL) + { + ((DFHack::WindowIO*)window)->TypeSpecial(command, count, delay); + return 1; + } + + return -1; +} + +#ifdef __cplusplus +} +#endif diff --git a/library/modules/World_C.cpp b/library/modules/World_C.cpp new file mode 100644 index 000000000..a5be3bcd0 --- /dev/null +++ b/library/modules/World_C.cpp @@ -0,0 +1,105 @@ +/* +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 "DFHack_C.h" +#include "dfhack/modules/World.h" +#include "dfhack-c/modules/World_C.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int World_Start(DFHackObject* world) +{ + if(world != NULL) + { + if(((DFHack::World*)world)->Start()) + return 1; + else + return 0; + } + + return -1; +} + +int World_Finish(DFHackObject* world) +{ + if(world != NULL) + { + if(((DFHack::World*)world)->Finish()) + return 1; + else + return 0; + } + + return -1; +} + +int World_ReadCurrentTick(DFHackObject* world, uint32_t* tick) +{ + if(world != NULL) + { + *tick = ((DFHack::World*)world)->ReadCurrentTick(); + return 1; + } + + return -1; +} + +int World_ReadCurrentYear(DFHackObject* world, uint32_t* year) +{ + if(world != NULL) + { + *year = ((DFHack::World*)world)->ReadCurrentYear(); + return 1; + } + + return -1; +} + +int World_ReadCurrentMonth(DFHackObject* world, uint32_t* month) +{ + if(world != NULL) + { + *month = ((DFHack::World*)world)->ReadCurrentMonth(); + return 1; + } + + return -1; +} + +int World_ReadCurrentDay(DFHackObject* world, uint32_t* day) +{ + if(world != NULL) + { + *day = ((DFHack::World*)world)->ReadCurrentDay(); + return 1; + } + + return -1; +} + +#ifdef __cplusplus +} +#endif diff --git a/library/python/c api/context.py b/library/python/c api/context.py index 592359f57..eed236b09 100644 --- a/library/python/c api/context.py +++ b/library/python/c api/context.py @@ -170,7 +170,9 @@ class Context(object): return self._tran_obj def reveal(): - df = API("Memory.xml") + df_cm = ContextManager("Memory.xml") + df = df_cm.get_single_context() + df.attach() m = df.maps @@ -193,3 +195,11 @@ def reveal(): m.finish() df.detach() + +def resume(): + df_cm = ContextManager("Memory.xml") + df = df_cm.get_single_context() + + df.attach() + df.force_resume() + df.detach() diff --git a/library/python/c api/maps.py b/library/python/c api/maps.py index 1db1985d8..f5f69cfb5 100644 --- a/library/python/c api/maps.py +++ b/library/python/c api/maps.py @@ -1,6 +1,6 @@ from ctypes import * -from pydftypes import libdfhack -from util import _uintify +from pydftypes import * +from util import _uintify, uint_ptr libdfhack.Maps_getSize.argtypes = [ c_void_p, uint_ptr, uint_ptr, uint_ptr ] libdfhack.Maps_ReadTileTypes.argtypes = [ c_void_p, c_uint, c_uint, c_uint, POINTER(TileTypes40d) ] diff --git a/library/python/c api/pydftypes.py b/library/python/c api/pydftypes.py index 78a90e57f..376d99238 100644 --- a/library/python/c api/pydftypes.py +++ b/library/python/c api/pydftypes.py @@ -87,12 +87,15 @@ class Matgloss(Structure): ("bright", c_byte), ("name", c_char * 128)] -def _alloc_matgloss_buffer_callback(count): +def _alloc_matgloss_buffer_callback(ptr, count): allocated = _allocate_array(Matgloss, count) - return allocated[1] + ptr = addressof(allocated[0]) -libdfhack.alloc_matgloss_buffer_callback = CFUNCTYPE(POINTER(Matgloss), c_int)(_alloc_matgloss_buffer_callback) + return 1 + +_matgloss_functype = CFUNCTYPE(c_int, POINTER(Matgloss), c_uint) +libdfhack.alloc_matgloss_buffer_callback = _matgloss_functype(_alloc_matgloss_buffer_callback) class MatglossPair(Structure): _fields_ = [("type", c_short), @@ -105,12 +108,15 @@ class DescriptorColor(Structure): ("b", c_float), ("name", c_char * 128)] -def _alloc_descriptor_buffer_callback(count): +def _alloc_descriptor_buffer_callback(ptr, count): allocated = _allocate_array(DescriptorColor, count) - return allocated[1] + ptr = addressof(allocated[0]) + + return 1 -libdfhack.alloc_descriptor_buffer_callback = CFUNCTYPE(POINTER(DescriptorColor), c_int)(_alloc_descriptor_buffer_callback) +_descriptor_functype = CFUNCTYPE(c_int, POINTER(DescriptorColor), c_uint) +libdfhack.alloc_descriptor_buffer_callback = _descriptor_functype(_alloc_descriptor_buffer_callback) class MatglossOther(Structure): _fields_ = [("rawname", c_char * 128)] @@ -118,9 +124,12 @@ class MatglossOther(Structure): def _alloc_matgloss_other_buffer_callback(count): allocated = _allocate_array(MatglossOther, count) - return allocated[1] + ptr = addressof(allocated[0]) -libdfhack.alloc_matgloss_other_buffer_callback = CFUNCTYPE(POINTER(MatglossOther), c_int)(_alloc_matgloss_other_buffer_callback) + return 1 + +_matgloss_other_functype = CFUNCTYPE(c_int, POINTER(MatglossOther), c_uint) +libdfhack.alloc_matgloss_other_buffer_callback = _matgloss_other_functype(_alloc_matgloss_other_buffer_callback) class Building(Structure): _fields_ = [("origin", c_uint), @@ -297,7 +306,10 @@ class ColorModifier(Structure): ColorModifierPtr = POINTER(ColorModifier) -def _alloc_empty_colormodifier_callback(): - return ColorModifierPtr(ColorModifier()) +def _alloc_empty_colormodifier_callback(ptr): + ptr = ColorModifierPtr(ColorModifier()) + + return 1 -libdfhack.alloc_empty_colormodifier_callback = CFUNCTYPE(ColorModifierPtr)(_alloc_empty_colormodifier_callback) +_empty_colormodifier_functype = CFUNCTYPE(c_int, ColorModifierPtr) +libdfhack.alloc_empty_colormodifier_callback = _empty_colormodifier_functype(_alloc_empty_colormodifier_callback) diff --git a/library/python/c api/util.py b/library/python/c api/util.py index 4f3f06958..d0849b1d8 100644 --- a/library/python/c api/util.py +++ b/library/python/c api/util.py @@ -1,5 +1,8 @@ from ctypes import * +uint_ptr = POINTER(c_uint) +int_ptr = POINTER(c_int) + def _uintify(x, y, z): return (c_uint(x), c_uint(y), c_uint(z)) @@ -13,54 +16,75 @@ def _allocate_array(t_type, count): return (arr, ptr) -def _alloc_int_buffer(count): +def _alloc_int_buffer(ptr, count): a = _allocate_array(c_int, count) - return a[1] + ptr = addressof(a[0]) + + return 1 -alloc_int_buffer = CFUNCTYPE(POINTER(c_int), c_uint)(_alloc_int_buffer) +_int_functype = CFUNCTYPE(c_int, POINTER(c_int), c_uint) +alloc_int_buffer = _int_functype(_alloc_int_buffer) -def _alloc_uint_buffer(count): +def _alloc_uint_buffer(ptr, count): a = _allocate_array(c_uint, count) - return a[1] + ptr = addressof(a[0]) + + return 1 -alloc_uint_buffer = CFUNCTYPE(POINTER(c_uint), c_uint)(_alloc_uint_buffer) +_uint_functype = CFUNCTYPE(c_int, POINTER(c_uint), c_uint) +alloc_uint_buffer = _uint_functype(_alloc_uint_buffer) -def _alloc_short_buffer(count): +def _alloc_short_buffer(ptr, count): a = _allocate_array(c_short, count) - return a[1] + ptr = addressof(a[0]) -alloc_short_buffer = CFUNCTYPE(POINTER(c_short), c_uint)(_alloc_short_buffer) + return 1 -def _alloc_ushort_buffer(count): +_short_functype = CFUNCTYPE(c_int, POINTER(c_short), c_uint) +alloc_short_buffer = _short_functype(_alloc_short_buffer) + +def _alloc_ushort_buffer(ptr, count): a = _allocate_array(c_ushort, count) - return a[1] + ptr = addressof(a[0]) + + return 1 -alloc_ushort_buffer = CFUNCTYPE(POINTER(c_ushort), c_uint)(_alloc_ushort_buffer) +_ushort_functype = CFUNCTYPE(c_int, POINTER(c_ushort), c_uint) +alloc_ushort_buffer = _ushort_functype(_alloc_ushort_buffer) -def _alloc_byte_buffer(count): +def _alloc_byte_buffer(ptr, count): a = _allocate_array(c_byte, count) - return a[1] + ptr = addressof(a[0]) -alloc_byte_buffer = CFUNCTYPE(POINTER(c_byte), c_uint)(_alloc_byte_buffer) + return 1 -def _alloc_ubyte_buffer(count): +_byte_functype = CFUNCTYPE(c_int, POINTER(c_byte), c_uint) +alloc_byte_buffer = _byte_functype(_alloc_byte_buffer) + +def _alloc_ubyte_buffer(ptr, count): a = _allocate_array(c_ubyte, count) - return a[1] + ptr = addressof(a[0]) + + return 1 -alloc_ubyte_buffer = CFUNCTYPE(POINTER(c_ubyte), c_uint)(_alloc_ubyte_buffer) +_ubyte_functype = CFUNCTYPE(c_int, POINTER(c_ubyte), c_uint) +alloc_ubyte_buffer = _ubyte_functype(_alloc_ubyte_buffer) -def _alloc_char_buffer(count): +def _alloc_char_buffer(ptr, count): c = create_string_buffer(count) - ptr = c_void_p() + if ptr is None: + ptr = c_void_p + ptr = addressof(c) - return ptr + return 1 -alloc_char_buffer = CFUNCTYPE(POINTER(c_char), c_uint)(_alloc_char_buffer) +_char_functype = CFUNCTYPE(c_int, POINTER(c_char), c_uint) +alloc_char_buffer = _char_functype(_alloc_char_buffer)