diff --git a/library/DFTypes_C.cpp b/library/DFTypes_C.cpp index 9677ae9f1..2f996863e 100644 --- a/library/DFTypes_C.cpp +++ b/library/DFTypes_C.cpp @@ -39,6 +39,9 @@ using namespace std; using namespace DFHack; +#define BUILD(a) a ## BufferCallback +#define REG_MACRO(type_name, type, callback) void BUILD(Register ## type_name) (int (*fptr)(type, uint32_t)) { callback = fptr; } + #ifdef __cplusplus extern "C" { #endif @@ -80,6 +83,62 @@ int (*alloc_vein_buffer_callback)(t_vein*, uint32_t) = NULL; int (*alloc_frozenliquidvein_buffer_callback)(t_frozenliquidvein*, uint32_t) = NULL; int (*alloc_spattervein_buffer_callback)(t_spattervein*, uint32_t) = NULL; +REG_MACRO(Byte, int8_t*, alloc_byte_buffer_callback) +REG_MACRO(Short, int16_t*, alloc_short_buffer_callback) +REG_MACRO(Int, int32_t*, alloc_int_buffer_callback) +REG_MACRO(UByte, uint8_t*, alloc_ubyte_buffer_callback) +REG_MACRO(UShort, uint16_t*, alloc_ushort_buffer_callback) +REG_MACRO(UInt, uint32_t*, alloc_uint_buffer_callback) +REG_MACRO(Char, char*, alloc_char_buffer_callback) +REG_MACRO(Matgloss, t_matgloss*, alloc_matgloss_buffer_callback) +REG_MACRO(DescriptorColor, t_descriptor_color*, alloc_descriptor_buffer_callback) +REG_MACRO(MatglossOther, t_matglossOther*, alloc_matgloss_other_buffer_callback) +REG_MACRO(Feature, t_feature*, alloc_t_feature_buffer_callback) +REG_MACRO(Hotkey, t_hotkey*, alloc_t_hotkey_buffer_callback) +REG_MACRO(Screen, t_screen*, alloc_t_screen_buffer_callback) +REG_MACRO(CustomWorkshop, t_customWorkshop*, alloc_t_customWorkshop_buffer_callback) +REG_MACRO(Material, t_material*, alloc_t_material_buffer_callback) + +void RegisterEmptyColorModifierCallback(int (*funcptr)(c_colormodifier*)) +{ + alloc_empty_colormodifier_callback = funcptr; +} + +void RegisterNewColorModifierCallback(int (*funcptr)(c_colormodifier*, const char*, uint32_t)) +{ + alloc_colormodifier_callback = funcptr; +} + +REG_MACRO(ColorModifier, c_colormodifier*, alloc_colormodifier_buffer_callback) + +void RegisterEmptyCreatureCasteCallback(int (*funcptr)(c_creaturecaste*)) +{ + alloc_empty_creaturecaste_callback = funcptr; +} + +void RegisterNewCreatureCasteCallback(int (*funcptr)(c_creaturecaste*, const char*, const char*, const char*, const char*, uint32_t, uint32_t)) +{ + alloc_creaturecaste_callback = funcptr; +} + +REG_MACRO(CreatureCaste, c_creaturecaste*, alloc_creaturecaste_buffer_callback) + +void RegisterEmptyCreatureTypeCallback(int (*funcptr)(c_creaturetype*)) +{ + alloc_empty_creaturetype_callback = funcptr; +} + +void RegisterNewCreatureTypeCallback(int (*funcptr)(c_creaturetype*, const char*, uint32_t, uint32_t, uint8_t, uint16_t, uint16_t, uint16_t)) +{ + alloc_creaturetype_callback = funcptr; +} + +REG_MACRO(CreatureType, c_creaturetype*, alloc_creaturetype_buffer_callback) + +REG_MACRO(Vein, t_vein*, alloc_vein_buffer_callback) +REG_MACRO(FrozenLiquidVein, t_frozenliquidvein*, alloc_frozenliquidvein_buffer_callback) +REG_MACRO(SpatterVein, t_spattervein*, alloc_spattervein_buffer_callback) + int DFHack_isWallTerrain(int in) { return DFHack::isWallTerrain(in); diff --git a/library/include/dfhack-c/DFTypes_C.h b/library/include/dfhack-c/DFTypes_C.h index 49bd54dc9..39efbd46f 100644 --- a/library/include/dfhack-c/DFTypes_C.h +++ b/library/include/dfhack-c/DFTypes_C.h @@ -54,6 +54,24 @@ DFHACK_EXPORT extern int (*alloc_t_feature_buffer_callback)(t_feature*, uint32_t DFHACK_EXPORT extern int (*alloc_t_hotkey_buffer_callback)(t_hotkey*, uint32_t); DFHACK_EXPORT extern int (*alloc_t_screen_buffer_callback)(t_screen*, uint32_t); +DFHACK_EXPORT void RegisterByteBufferCallback(int (*funcptr)(int8_t*, uint32_t)); +DFHACK_EXPORT void RegisterShortBufferCallback(int (*funcptr)(int16_t*, uint32_t)); +DFHACK_EXPORT void RegisterIntBufferCallback(int (*funcptr)(int32_t*, uint32_t)); + +DFHACK_EXPORT void RegisterUByteBufferCallback(int (*funcptr)(uint8_t*, uint32_t)); +DFHACK_EXPORT void RegisterUShortBufferCallback(int (*funcptr)(uint16_t*, uint32_t)); +DFHACK_EXPORT void RegisterUIntBufferCallback(int (*funcptr)(uint32_t*, uint32_t)); + +DFHACK_EXPORT void RegisterCharBufferCallback(int (*funcptr)(char*, uint32_t)); + +DFHACK_EXPORT void RegisterMatglossBufferCallback(int (*funcptr)(t_matgloss*, uint32_t)); +DFHACK_EXPORT void RegisterDescriptorColorBufferCallback(int (*funcptr)(t_descriptor_color*, uint32_t)); +DFHACK_EXPORT void RegisterMatglossOtherBufferCallback(int (*funcptr)(t_matglossOther*, uint32_t)); + +DFHACK_EXPORT void RegisterFeatureBufferCallback(int (*funcptr)(t_feature*, uint32_t)); +DFHACK_EXPORT void RegisterHotkeyBufferCallback(int (*funcptr)(t_hotkey*, uint32_t)); +DFHACK_EXPORT void RegisterScreenBufferCallback(int (*funcptr)(t_screen*, uint32_t)); + struct t_customWorkshop { uint32_t index; @@ -61,9 +79,11 @@ struct t_customWorkshop }; DFHACK_EXPORT extern int (*alloc_t_customWorkshop_buffer_callback)(t_customWorkshop*, uint32_t); - DFHACK_EXPORT extern int (*alloc_t_material_buffer_callback)(t_material*, uint32_t); +DFHACK_EXPORT void RegisterCustomWorkshopBufferCallback(int (*funcptr)(t_customWorkshop*, uint32_t)); +DFHACK_EXPORT void RegisterMaterialBufferCallback(int (*funcptr)(t_material*, uint32_t)); + struct c_colormodifier { char part[128]; @@ -75,6 +95,10 @@ 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); +DFHACK_EXPORT void RegisterEmptyColorModifierCallback(int (*funcptr)(c_colormodifier*)); +DFHACK_EXPORT void RegisterNewColorModifierCallback(int (*funcptr)(c_colormodifier*, const char*, uint32_t)); +DFHACK_EXPORT void RegisterColorModifierBufferCallback(int (*funcptr)(c_colormodifier*, uint32_t)); + struct c_creaturecaste { char rawname[128]; @@ -93,6 +117,10 @@ 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); +DFHACK_EXPORT void RegisterEmptyCreatureCasteCallback(int (*funcptr)(c_creaturecaste*)); +DFHACK_EXPORT void RegisterNewCreatureCasteCallback(int (*funcptr)(c_creaturecaste*, const char*, const char*, const char*, const char*, uint32_t, uint32_t)); +DFHACK_EXPORT void RegisterCreatureCasteBufferCallback(int (*funcptr)(c_creaturecaste*, uint32_t)); + struct c_creaturetype { char rawname[128]; @@ -121,14 +149,22 @@ DFHACK_EXPORT extern int (*alloc_vein_buffer_callback)(t_vein*, uint32_t); DFHACK_EXPORT extern int (*alloc_frozenliquidvein_buffer_callback)(t_frozenliquidvein*, uint32_t); DFHACK_EXPORT extern int (*alloc_spattervein_buffer_callback)(t_spattervein*, uint32_t); -DFHACK_EXPORT extern int DFHack_isWallTerrain(int in); -DFHACK_EXPORT extern int DFHack_isFloorTerrain(int in); -DFHACK_EXPORT extern int DFHack_isRampTerrain(int in); -DFHACK_EXPORT extern int DFHack_isStairTerrain(int in); -DFHACK_EXPORT extern int DFHack_isOpenTerrain(int in); -DFHACK_EXPORT extern int DFHack_getVegetationType(int in); +DFHACK_EXPORT void RegisterEmptyCreatureTypeCallback(int (*funcptr)(c_creaturetype*)); +DFHACK_EXPORT void RegisterNewCreatureTypeCallback(int (*funcptr)(c_creaturetype*, const char*, uint32_t, uint32_t, uint8_t, uint16_t, uint16_t, uint16_t)); +DFHACK_EXPORT void RegisterCreatureTypeBufferCallback(int (*funcptr)(c_creaturetype*, uint32_t)); + +DFHACK_EXPORT void RegisterVeinBufferCallback(int (*funcptr)(t_vein*, uint32_t)); +DFHACK_EXPORT void RegisterFrozenLiquidVeinBufferCallback(int (*funcptr)(t_frozenliquidvein*, uint32_t)); +DFHACK_EXPORT void RegisterSpatterVeinBufferCallback(int (*funcptr)(t_spattervein*, uint32_t)); + +DFHACK_EXPORT int DFHack_isWallTerrain(int in); +DFHACK_EXPORT int DFHack_isFloorTerrain(int in); +DFHACK_EXPORT int DFHack_isRampTerrain(int in); +DFHACK_EXPORT int DFHack_isStairTerrain(int in); +DFHACK_EXPORT int DFHack_isOpenTerrain(int in); +DFHACK_EXPORT int DFHack_getVegetationType(int in); -DFHACK_EXPORT extern int DFHack_getTileType(int index, TileRow* tPtr); +DFHACK_EXPORT int DFHack_getTileType(int index, TileRow* tPtr); #ifdef __cplusplus }