From e637488cbd1ffea03125130d53eacc409077bc4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 23 Oct 2009 14:00:15 +0000 Subject: [PATCH] update to the C API --- library/DFHackAPIc.cpp | 596 ++++++++++++++++++++++------------------- library/DFHackAPIc.h | 563 ++++++++++++++++++++------------------ output/Memory.xml | 7 + 3 files changed, 621 insertions(+), 545 deletions(-) diff --git a/library/DFHackAPIc.cpp b/library/DFHackAPIc.cpp index 126c96792..e1acea6d0 100644 --- a/library/DFHackAPIc.cpp +++ b/library/DFHackAPIc.cpp @@ -1,6 +1,6 @@ /* www.sourceforge.net/projects/dfhack -Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf +Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any @@ -31,297 +31,327 @@ distribution. #include "DFHackAPIc.h" #ifdef LINUX_BUILD -# ifndef secure_strcpy -# define secure_strcpy(dst, size, buf) strcpy((dst), (buf)) -# endif +# ifndef secure_strcpy +# define secure_strcpy(dst, size, buf) strcpy((dst), (buf)) +# endif #else -# if defined(_MSC_VER) && _MSC_VER >= 1400 -# ifndef secure_strcpy -# define secure_strcpy(dst, size, buf) strcpy_s((dst), (size), (buf)) -# endif -# else -# ifndef secure_strcpy -# define secure_strcpy(dst, size, buf) strcpy((dst), (buf)) -# endif -# endif +# if defined(_MSC_VER) && _MSC_VER >= 1400 +# ifndef secure_strcpy +# define secure_strcpy(dst, size, buf) strcpy_s((dst), (size), (buf)) +# endif +# else +# ifndef secure_strcpy +# define secure_strcpy(dst, size, buf) strcpy((dst), (buf)) +# endif +# endif #endif #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif // The C interface for vector management -DFHACKAPI void DFHackAPIVector_free(DFHackAPIVectorC *vector) -{ - uint32_t i; - switch (vector->type) - { - case DFHackAPIVectorTypeC_Normal: - delete [] (vector->data); - break; - case DFHackAPIVectorTypeC_Matgloss: - delete [] ((t_matgloss *)vector->data); - break; - case DFHackAPIVectorTypeC_Uint16: - delete [] ((uint16_t *)vector->data); - break; - case DFHackAPIVectorTypeC_Vein: - delete [] ((t_vein *)vector->data); - break; - case DFHackAPIVectorTypeC_String: - for (i = 0; i < vector->length; i++) - delete [] ((char **)vector->data)[i]; - delete [] ((char **)vector->data); - break; - case DFHackAPIVectorTypeC_Recursive: - for (i = 0; i < vector->length; i++) - DFHackAPIVector_free(&((DFHackAPIVectorC *) vector->data)[i]); - delete [] ((DFHackAPIVectorC *)vector->data); - break; - } - - vector->type = DFHackAPIVectorTypeC_Normal; - vector->length = 0; - vector->data = 0; -} + DFHACKAPI void DFHackAPIVector_free (DFHackAPIVectorC *vector) + { + uint32_t i; + switch (vector->type) + { + case DFHackAPIVectorTypeC_Normal: + delete [] (vector->data); + break; + case DFHackAPIVectorTypeC_Matgloss: + delete [] ( (t_matgloss *) vector->data); + break; + case DFHackAPIVectorTypeC_Uint16: + delete [] ( (uint16_t *) vector->data); + break; + case DFHackAPIVectorTypeC_Vein: + delete [] ( (t_vein *) vector->data); + break; + case DFHackAPIVectorTypeC_String: + for (i = 0; i < vector->length; i++) + delete [] ( (char **) vector->data) [i]; + delete [] ( (char **) vector->data); + break; + case DFHackAPIVectorTypeC_Recursive: + for (i = 0; i < vector->length; i++) + DFHackAPIVector_free (& ( (DFHackAPIVectorC *) vector->data) [i]); + delete [] ( (DFHackAPIVectorC *) vector->data); + break; + } + + vector->type = DFHackAPIVectorTypeC_Normal; + vector->length = 0; + vector->data = 0; + } // The C interface to DFHackAPI (for multiple language support) -DFHACKAPI DFHackAPIHandle CreateDFHackAPI(const char *path_to_xml) -{ - return new DFHackAPIImpl(path_to_xml); -} - -DFHACKAPI void DestroyDFHackAPI(DFHackAPIHandle self) -{ - if (self != NULL) - delete self; -} - -DFHACKAPI bool DFHackAPI_Attach(DFHackAPIHandle self) -{ - return self->Attach(); -} - -DFHACKAPI bool DFHackAPI_Detach(DFHackAPIHandle self) -{ - return self->Detach(); -} - -DFHACKAPI bool DFHackAPI_isAttached(DFHackAPIHandle self) -{ - return self->isAttached(); -} - -DFHACKAPI bool DFHackAPI_ReadStoneMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output) -{ - vector result; - uint32_t i; - bool retn = self->ReadStoneMatgloss(result); - - output->type = DFHackAPIVectorTypeC_Matgloss; - output->length = result.size(); - output->data = new t_matgloss[output->length]; - for (i = 0; i < output->length; i++) - ((t_matgloss *)output->data)[i] = result[i]; - - return retn; -} - -DFHACKAPI bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output) -{ - vector result; - uint32_t i; - bool retn = self->ReadWoodMatgloss (result); - - output->type = DFHackAPIVectorTypeC_Matgloss; - output->length = result.size(); - output->data = new t_matgloss[output->length]; - for (i = 0; i < output->length; i++) - ((t_matgloss *)output->data)[i] = result[i]; - - return retn; -} - -DFHACKAPI bool DFHackAPI_ReadMetalMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output) -{ - vector result; - uint32_t i; - bool retn = self->ReadMetalMatgloss(result); - - output->type = DFHackAPIVectorTypeC_Matgloss; - output->length = result.size(); - output->data = new t_matgloss[output->length]; - for (i = 0; i < output->length; i++) - ((t_matgloss *)output->data)[i] = result[i]; - - return retn; -} - -DFHACKAPI bool DFHackAPI_ReadPlantMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output) -{ - vector result; - uint32_t i; - bool retn = self->ReadPlantMatgloss(result); - - output->type = DFHackAPIVectorTypeC_Matgloss; - output->length = result.size(); - output->data = new t_matgloss[output->length]; - for (i = 0; i < output->length; i++) - ((t_matgloss *)output->data)[i] = result[i]; - - return retn; -} - -DFHACKAPI bool DFHackAPI_ReadGeology(DFHackAPIHandle self, DFHackAPIVectorC *assign) -{ - vector< vector > result; - uint32_t i, j; - bool retn = self->ReadGeology(result); - - assign->type = DFHackAPIVectorTypeC_Recursive; - assign->length = result.size(); - assign->data = new DFHackAPIVectorC[assign->length]; - for (i = 0; i < assign->length; i++) - { - DFHackAPIVectorC ¤t = ((DFHackAPIVectorC *) assign->data)[i]; - current.type = DFHackAPIVectorTypeC_Uint16; - current.length = result[i].size(); - current.data = new uint16_t[current.length]; - for (j = 0; j < current.length; j++) - ((uint16_t *)current.data)[j] = result[i][j]; - } - - return retn; -} - -DFHACKAPI bool DFHackAPI_InitMap(DFHackAPIHandle self) -{ - return self->InitMap(); -} - -DFHACKAPI bool DFHackAPI_DestroyMap(DFHackAPIHandle self) -{ - return self->DestroyMap(); -} - -DFHACKAPI void DFHackAPI_getSize(DFHackAPIHandle self, uint32_t* x, uint32_t* y, uint32_t* z) -{ - return self->getSize(*x, *y, *z); -} - -DFHACKAPI bool DFHackAPI_isValidBlock(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz) -{ - return self->isValidBlock(blockx, blocky, blockz); -} - -DFHACKAPI bool DFHackAPI_ReadTileTypes(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) -{ - return self->ReadTileTypes(blockx, blocky, blockz, buffer); -} - -DFHACKAPI bool DFHackAPI_WriteTileTypes(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) -{ - return self->WriteTileTypes(blockx, blocky, blockz, buffer); -} - -DFHACKAPI bool DFHackAPI_ReadDesignations(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) -{ - return self->ReadDesignations (blockx, blocky, blockz, buffer); -} - -DFHACKAPI bool DFHackAPI_WriteDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) -{ - return self->WriteDesignations (blockx, blocky, blockz, buffer); -} - -DFHACKAPI bool DFHackAPI_ReadOccupancy(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) -{ - return self->ReadOccupancy(blockx, blocky, blockz, buffer); -} - -DFHACKAPI bool DFHackAPI_WriteOccupancy(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) -{ - return self->WriteOccupancy(blockx, blocky, blockz, buffer); -} - -DFHACKAPI bool DFHackAPI_ReadRegionOffsets(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer) -{ - return self->ReadRegionOffsets(blockx, blocky, blockz, buffer); -} - -DFHACKAPI bool DFHackAPI_ReadVeins(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, DFHackAPIVectorC * veins) -{ - vector result; - uint32_t i; - bool retn = self->ReadVeins(blockx, blocky, blockz, result); - - veins->type = DFHackAPIVectorTypeC_Vein; - veins->length = result.size(); - veins->data = new t_vein[veins->length]; - for (i = 0; i < veins->length; i++) - ((t_vein *)veins->data)[i] = result[i]; - - return retn; -} - -DFHACKAPI uint32_t DFHackAPI_InitReadConstructions(DFHackAPIHandle self) -{ - return self->InitReadConstructions(); -} - -DFHACKAPI bool DFHackAPI_ReadConstruction(DFHackAPIHandle self, const uint32_t *index, t_construction * construction) -{ - return self->ReadConstruction(*index, *construction); -} - -DFHACKAPI void DFHackAPI_FinishReadConstructions(DFHackAPIHandle self) -{ - self->FinishReadConstructions(); -} - -DFHACKAPI uint32_t DFHackAPI_InitReadBuildings(DFHackAPIHandle self, DFHackAPIVectorC *v_buildingtypes) -{ - vector result; - uint32_t i; - uint32_t retn = self->InitReadBuildings(result); - - v_buildingtypes->type = DFHackAPIVectorTypeC_String; - v_buildingtypes->length = result.size(); - v_buildingtypes->data = new char *[v_buildingtypes->length]; - for (i = 0; i < v_buildingtypes->length; i++) - { - char *str = new char[result[i].size() + 1]; - secure_strcpy(str, result[i].size() + 1, result[i].c_str()); - ((char **)v_buildingtypes->data)[i] = str; - } - - return retn; -} - -DFHACKAPI bool DFHackAPI_ReadBuilding(DFHackAPIHandle self, const uint32_t *index, t_building * building) -{ - return self->ReadBuilding(*index, *building); -} - -DFHACKAPI void DFHackAPI_FinishReadBuildings(DFHackAPIHandle self) -{ - self->FinishReadBuildings(); -} - -DFHACKAPI uint32_t DFHackAPI_InitReadVegetation(DFHackAPIHandle self) -{ - return self->InitReadVegetation(); -} - -DFHACKAPI bool DFHackAPI_ReadVegetation(DFHackAPIHandle self, const uint32_t *index, t_tree_desc * shrubbery) -{ - return self->ReadVegetation(*index, *shrubbery); -} - -DFHACKAPI void DFHackAPI_FinishReadVegetation(DFHackAPIHandle self) -{ - self->FinishReadVegetation(); -} + DFHACKAPI DFHackAPIHandle CreateDFHackAPI (const char *path_to_xml) + { + return new DFHackAPIImpl (path_to_xml); + } + + DFHACKAPI void DestroyDFHackAPI (DFHackAPIHandle self) + { + if (self != NULL) + delete self; + } + + DFHACKAPI bool DFHackAPI_Attach (DFHackAPIHandle self) + { + return self->Attach(); + } + + DFHACKAPI bool DFHackAPI_Detach (DFHackAPIHandle self) + { + return self->Detach(); + } + + DFHACKAPI bool DFHackAPI_isAttached (DFHackAPIHandle self) + { + return self->isAttached(); + } + + DFHACKAPI bool DFHackAPI_ReadStoneMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output) + { + vector result; + uint32_t i; + bool retn = self->ReadStoneMatgloss (result); + + output->type = DFHackAPIVectorTypeC_Matgloss; + output->length = result.size(); + output->data = new t_matgloss[output->length]; + for (i = 0; i < output->length; i++) + ( (t_matgloss *) output->data) [i] = result[i]; + + return retn; + } + + DFHACKAPI bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output) + { + vector result; + uint32_t i; + bool retn = self->ReadWoodMatgloss (result); + + output->type = DFHackAPIVectorTypeC_Matgloss; + output->length = result.size(); + output->data = new t_matgloss[output->length]; + for (i = 0; i < output->length; i++) + ( (t_matgloss *) output->data) [i] = result[i]; + + return retn; + } + + DFHACKAPI bool DFHackAPI_ReadMetalMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output) + { + vector result; + uint32_t i; + bool retn = self->ReadMetalMatgloss (result); + + output->type = DFHackAPIVectorTypeC_Matgloss; + output->length = result.size(); + output->data = new t_matgloss[output->length]; + for (i = 0; i < output->length; i++) + ( (t_matgloss *) output->data) [i] = result[i]; + + return retn; + } + + DFHACKAPI bool DFHackAPI_ReadPlantMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output) + { + vector result; + uint32_t i; + bool retn = self->ReadPlantMatgloss (result); + + output->type = DFHackAPIVectorTypeC_Matgloss; + output->length = result.size(); + output->data = new t_matgloss[output->length]; + for (i = 0; i < output->length; i++) + ( (t_matgloss *) output->data) [i] = result[i]; + + return retn; + } + + DFHACKAPI bool DFHackAPI_ReadCreatureMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output) + { + vector result; + uint32_t i; + bool retn = self->ReadCreatureMatgloss (result); + + output->type = DFHackAPIVectorTypeC_Matgloss; + output->length = result.size(); + output->data = new t_matgloss[output->length]; + for (i = 0; i < output->length; i++) + ( (t_matgloss *) output->data) [i] = result[i]; + + return retn; + } + DFHACKAPI bool DFHackAPI_ReadGeology (DFHackAPIHandle self, DFHackAPIVectorC *assign) + { + vector< vector > result; + uint32_t i, j; + bool retn = self->ReadGeology (result); + + assign->type = DFHackAPIVectorTypeC_Recursive; + assign->length = result.size(); + assign->data = new DFHackAPIVectorC[assign->length]; + for (i = 0; i < assign->length; i++) + { + DFHackAPIVectorC ¤t = ( (DFHackAPIVectorC *) assign->data) [i]; + current.type = DFHackAPIVectorTypeC_Uint16; + current.length = result[i].size(); + current.data = new uint16_t[current.length]; + for (j = 0; j < current.length; j++) + ( (uint16_t *) current.data) [j] = result[i][j]; + } + + return retn; + } + + DFHACKAPI bool DFHackAPI_InitMap (DFHackAPIHandle self) + { + return self->InitMap(); + } + + DFHACKAPI bool DFHackAPI_DestroyMap (DFHackAPIHandle self) + { + return self->DestroyMap(); + } + + DFHACKAPI void DFHackAPI_getSize (DFHackAPIHandle self, uint32_t* x, uint32_t* y, uint32_t* z) + { + return self->getSize (*x, *y, *z); + } + + DFHACKAPI bool DFHackAPI_isValidBlock (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz) + { + return self->isValidBlock (blockx, blocky, blockz); + } + + DFHACKAPI bool DFHackAPI_ReadTileTypes (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) + { + return self->ReadTileTypes (blockx, blocky, blockz, buffer); + } + + DFHACKAPI bool DFHackAPI_WriteTileTypes (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) + { + return self->WriteTileTypes (blockx, blocky, blockz, buffer); + } + + DFHACKAPI bool DFHackAPI_ReadDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) + { + return self->ReadDesignations (blockx, blocky, blockz, buffer); + } + + DFHACKAPI bool DFHackAPI_WriteDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) + { + return self->WriteDesignations (blockx, blocky, blockz, buffer); + } + + DFHACKAPI bool DFHackAPI_ReadOccupancy (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) + { + return self->ReadOccupancy (blockx, blocky, blockz, buffer); + } + + DFHACKAPI bool DFHackAPI_WriteOccupancy (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) + { + return self->WriteOccupancy (blockx, blocky, blockz, buffer); + } + + DFHACKAPI bool DFHackAPI_ReadRegionOffsets (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer) + { + return self->ReadRegionOffsets (blockx, blocky, blockz, buffer); + } + + DFHACKAPI bool DFHackAPI_ReadVeins (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, DFHackAPIVectorC * veins) + { + vector result; + uint32_t i; + bool retn = self->ReadVeins (blockx, blocky, blockz, result); + + veins->type = DFHackAPIVectorTypeC_Vein; + veins->length = result.size(); + veins->data = new t_vein[veins->length]; + for (i = 0; i < veins->length; i++) + ( (t_vein *) veins->data) [i] = result[i]; + + return retn; + } + + DFHACKAPI uint32_t DFHackAPI_InitReadConstructions (DFHackAPIHandle self) + { + return self->InitReadConstructions(); + } + + DFHACKAPI bool DFHackAPI_ReadConstruction (DFHackAPIHandle self, const uint32_t *index, t_construction * construction) + { + return self->ReadConstruction (*index, *construction); + } + + DFHACKAPI void DFHackAPI_FinishReadConstructions (DFHackAPIHandle self) + { + self->FinishReadConstructions(); + } + + DFHACKAPI uint32_t DFHackAPI_InitReadBuildings (DFHackAPIHandle self, DFHackAPIVectorC *v_buildingtypes) + { + vector result; + uint32_t i; + uint32_t retn = self->InitReadBuildings (result); + + v_buildingtypes->type = DFHackAPIVectorTypeC_String; + v_buildingtypes->length = result.size(); + v_buildingtypes->data = new char *[v_buildingtypes->length]; + for (i = 0; i < v_buildingtypes->length; i++) + { + char *str = new char[result[i].size() + 1]; + secure_strcpy (str, result[i].size() + 1, result[i].c_str()); + ( (char **) v_buildingtypes->data) [i] = str; + } + + return retn; + } + + DFHACKAPI bool DFHackAPI_ReadBuilding (DFHackAPIHandle self, const uint32_t *index, t_building * building) + { + return self->ReadBuilding (*index, *building); + } + + DFHACKAPI void DFHackAPI_FinishReadBuildings (DFHackAPIHandle self) + { + self->FinishReadBuildings(); + } + + DFHACKAPI uint32_t DFHackAPI_InitReadVegetation (DFHackAPIHandle self) + { + return self->InitReadVegetation(); + } + + DFHACKAPI bool DFHackAPI_ReadVegetation (DFHackAPIHandle self, const uint32_t *index, t_tree_desc * shrubbery) + { + return self->ReadVegetation (*index, *shrubbery); + } + + DFHACKAPI void DFHackAPI_FinishReadVegetation (DFHackAPIHandle self) + { + self->FinishReadVegetation(); + } + + DFHACKAPI uint32_t DFHackAPI_InitReadCreatures (DFHackAPIHandle self) + { + return self->InitReadCreatures(); + } + + DFHACKAPI bool DFHackAPI_ReadCreature (DFHackAPIHandle self, const uint32_t *index, t_creature * furball) + { + return self->ReadCreature (*index, *furball); + } + + DFHACKAPI void DFHackAPI_FinishReadCreatures (DFHackAPIHandle self) + { + self->FinishReadCreatures(); + } #ifdef __cplusplus } diff --git a/library/DFHackAPIc.h b/library/DFHackAPIc.h index 13cf29f08..346387765 100644 --- a/library/DFHackAPIc.h +++ b/library/DFHackAPIc.h @@ -1,6 +1,6 @@ /* www.sourceforge.net/projects/dfhack -Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf +Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any @@ -26,43 +26,45 @@ distribution. #define SIMPLEAPIC_H_INCLUDED #ifdef LINUX_BUILD -# ifndef DFHACKAPI -# define DFHACKAPI extern "C" -# endif +# ifndef DFHACKAPI +# define DFHACKAPI extern "C" +# endif #else -# ifdef BUILD_DFHACK_LIB -# ifndef DFHACKAPI -# define DFHACKAPI extern "C" __declspec(dllexport) -# endif -# else -# ifndef DFHACKAPI -# define DFHACKAPI extern "C" __declspec(dllimport) -# endif -# endif +# ifdef BUILD_DFHACK_LIB +# ifndef DFHACKAPI +# define DFHACKAPI extern "C" __declspec(dllexport) +# endif +# else +# ifndef DFHACKAPI +# define DFHACKAPI extern "C" __declspec(dllimport) +# endif +# endif #endif #include #ifdef __cplusplus -# include -# include +# include +# include using namespace std; #endif -typedef enum DFHackAPIVectorTypeC { - DFHackAPIVectorTypeC_Normal, // array of struct's - DFHackAPIVectorTypeC_Matgloss, // array of t_matgloss's - DFHackAPIVectorTypeC_Uint16, // array of uint16_t's - DFHackAPIVectorTypeC_Vein, // array of t_vein's - DFHackAPIVectorTypeC_String, // array of const char *'s - DFHackAPIVectorTypeC_Recursive, // array of DFHackAPIVectorC struct's - DFHackAPIVectorTypeC_DWord = 0xffffffff // Unused +typedef enum DFHackAPIVectorTypeC +{ + DFHackAPIVectorTypeC_Normal, // array of struct's + DFHackAPIVectorTypeC_Matgloss, // array of t_matgloss's + DFHackAPIVectorTypeC_Uint16, // array of uint16_t's + DFHackAPIVectorTypeC_Vein, // array of t_vein's + DFHackAPIVectorTypeC_String, // array of const char *'s + DFHackAPIVectorTypeC_Recursive, // array of DFHackAPIVectorC struct's + DFHackAPIVectorTypeC_DWord = 0xffffffff // Unused } DFHackAPIVectorTypeC; -typedef struct DFHackAPIVectorC { - void *data; - uint32_t length; - DFHackAPIVectorTypeC type; +typedef struct DFHackAPIVectorC +{ + void *data; + uint32_t length; + DFHackAPIVectorTypeC type; } DFHackAPIVector; #ifdef __cplusplus @@ -73,58 +75,64 @@ typedef char bool; #endif #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif // __cplusplus // The C interface for vector management -DFHACKAPI void DFHackAPIVector_free(DFHackAPIVectorC *vector); + DFHACKAPI void DFHackAPIVector_free (DFHackAPIVectorC *vector); // The C interface to DFHackAPI (for multiple language support) -DFHACKAPI DFHackAPIHandle CreateDFHackAPI(const char *path_to_xml); -DFHACKAPI void DestroyDFHackAPI(DFHackAPIHandle self); + DFHACKAPI DFHackAPIHandle CreateDFHackAPI (const char *path_to_xml); + DFHACKAPI void DestroyDFHackAPI (DFHackAPIHandle self); + + DFHACKAPI bool DFHackAPI_Attach (DFHackAPIHandle self); + DFHACKAPI bool DFHackAPI_Detach (DFHackAPIHandle self); + DFHACKAPI bool DFHackAPI_isAttached (DFHackAPIHandle self); -DFHACKAPI bool DFHackAPI_Attach(DFHackAPIHandle self); -DFHACKAPI bool DFHackAPI_Detach(DFHackAPIHandle self); -DFHACKAPI bool DFHackAPI_isAttached(DFHackAPIHandle self); + DFHACKAPI bool DFHackAPI_ReadStoneMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output); + DFHACKAPI bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output); + DFHACKAPI bool DFHackAPI_ReadMetalMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output); + DFHACKAPI bool DFHackAPI_ReadPlantMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output); + DFHACKAPI bool DFHackAPI_ReadCreatureMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output); -DFHACKAPI bool DFHackAPI_ReadStoneMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output); -DFHACKAPI bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, DFHackAPIVectorC *output); -DFHACKAPI bool DFHackAPI_ReadMetalMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output); -DFHACKAPI bool DFHackAPI_ReadPlantMatgloss(DFHackAPIHandle self, DFHackAPIVectorC *output); + DFHACKAPI bool DFHackAPI_ReadGeology (DFHackAPIHandle self, DFHackAPIVectorC *assign); -DFHACKAPI bool DFHackAPI_ReadGeology(DFHackAPIHandle self, DFHackAPIVectorC *assign); + DFHACKAPI bool DFHackAPI_InitMap (DFHackAPIHandle self); + DFHACKAPI bool DFHackAPI_DestroyMap (DFHackAPIHandle self); + DFHACKAPI void DFHackAPI_getSize (DFHackAPIHandle self, uint32_t* x, uint32_t* y, uint32_t* z); -DFHACKAPI bool DFHackAPI_InitMap(DFHackAPIHandle self); -DFHACKAPI bool DFHackAPI_DestroyMap(DFHackAPIHandle self); -DFHACKAPI void DFHackAPI_getSize(DFHackAPIHandle self, uint32_t* x, uint32_t* y, uint32_t* z); + DFHACKAPI bool DFHackAPI_isValidBlock (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz); -DFHACKAPI bool DFHackAPI_isValidBlock(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz); + DFHACKAPI bool DFHackAPI_ReadTileTypes (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer); + DFHACKAPI bool DFHackAPI_WriteTileTypes (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer); -DFHACKAPI bool DFHackAPI_ReadTileTypes(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer); -DFHACKAPI bool DFHackAPI_WriteTileTypes(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer); + DFHACKAPI bool DFHackAPI_ReadDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); + DFHACKAPI bool DFHackAPI_WriteDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); -DFHACKAPI bool DFHackAPI_ReadDesignations(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); -DFHACKAPI bool DFHackAPI_WriteDesignations (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); + DFHACKAPI bool DFHackAPI_ReadOccupancy (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); + DFHACKAPI bool DFHackAPI_WriteOccupancy (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); -DFHACKAPI bool DFHackAPI_ReadOccupancy(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); -DFHACKAPI bool DFHackAPI_WriteOccupancy(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer); + DFHACKAPI bool DFHackAPI_ReadRegionOffsets (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer); -DFHACKAPI bool DFHackAPI_ReadRegionOffsets(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer); + DFHACKAPI bool DFHackAPI_ReadVeins (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, DFHackAPIVectorC * veins); -DFHACKAPI bool DFHackAPI_ReadVeins(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, DFHackAPIVectorC * veins); + DFHACKAPI uint32_t DFHackAPI_InitReadConstructions (DFHackAPIHandle self); + DFHACKAPI bool DFHackAPI_ReadConstruction (DFHackAPIHandle self, const uint32_t *index, t_construction * construction); + DFHACKAPI void DFHackAPI_FinishReadConstructions (DFHackAPIHandle self); -DFHACKAPI uint32_t DFHackAPI_InitReadConstructions(DFHackAPIHandle self); -DFHACKAPI bool DFHackAPI_ReadConstruction(DFHackAPIHandle self, const uint32_t *index, t_construction * construction); -DFHACKAPI void DFHackAPI_FinishReadConstructions(DFHackAPIHandle self); + DFHACKAPI uint32_t DFHackAPI_InitReadBuildings (DFHackAPIHandle self, DFHackAPIVectorC *v_buildingtypes); + DFHACKAPI bool DFHackAPI_ReadBuilding (DFHackAPIHandle self, const uint32_t *index, t_building * building); + DFHACKAPI void DFHackAPI_FinishReadBuildings (DFHackAPIHandle self); -DFHACKAPI uint32_t DFHackAPI_InitReadBuildings(DFHackAPIHandle self, DFHackAPIVectorC *v_buildingtypes); -DFHACKAPI bool DFHackAPI_ReadBuilding(DFHackAPIHandle self, const uint32_t *index, t_building * building); -DFHACKAPI void DFHackAPI_FinishReadBuildings(DFHackAPIHandle self); + DFHACKAPI uint32_t DFHackAPI_InitReadVegetation (DFHackAPIHandle self); + DFHACKAPI bool DFHackAPI_ReadVegetation (DFHackAPIHandle self, const uint32_t *index, t_tree_desc * shrubbery); + DFHACKAPI void DFHackAPI_FinishReadVegetation (DFHackAPIHandle self); -DFHACKAPI uint32_t DFHackAPI_InitReadVegetation(DFHackAPIHandle self); -DFHACKAPI bool DFHackAPI_ReadVegetation(DFHackAPIHandle self, const uint32_t *index, t_tree_desc * shrubbery); -DFHACKAPI void DFHackAPI_FinishReadVegetation(DFHackAPIHandle self); + DFHACKAPI uint32_t DFHackAPI_InitReadCreatures (DFHackAPIHandle self); + DFHACKAPI bool DFHackAPI_ReadCreature (DFHackAPIHandle self, const uint32_t *index, t_creature * furball); + DFHACKAPI void DFHackAPI_FinishReadCreatures (DFHackAPIHandle self); #ifdef __cplusplus } @@ -132,88 +140,99 @@ DFHACKAPI void DFHackAPI_FinishReadVegetation(DFHackAPIHandle self); // C++ wrappers for C API that use vectors #ifdef __cplusplus -inline bool DFHackAPI_ReadStoneMatgloss(DFHackAPIHandle self, vector & output) +inline bool DFHackAPI_ReadStoneMatgloss (DFHackAPIHandle self, vector & output) { - DFHackAPIVectorC vector; - bool result = DFHackAPI_ReadStoneMatgloss(self, &vector); - uint32_t i; - for (i = 0; i < vector.length; i++) - output.push_back(((t_matgloss *) vector.data)[i]); - DFHackAPIVector_free(&vector); - return result; + DFHackAPIVectorC vector; + bool result = DFHackAPI_ReadStoneMatgloss (self, &vector); + uint32_t i; + for (i = 0; i < vector.length; i++) + output.push_back ( ( (t_matgloss *) vector.data) [i]); + DFHackAPIVector_free (&vector); + return result; } inline bool DFHackAPI_ReadWoodMatgloss (DFHackAPIHandle self, vector & output) { - DFHackAPIVectorC vector; - bool result = DFHackAPI_ReadWoodMatgloss (self, &vector); - uint32_t i; - for (i = 0; i < vector.length; i++) - output.push_back(((t_matgloss *) vector.data)[i]); - DFHackAPIVector_free(&vector); - return result; + DFHackAPIVectorC vector; + bool result = DFHackAPI_ReadWoodMatgloss (self, &vector); + uint32_t i; + for (i = 0; i < vector.length; i++) + output.push_back ( ( (t_matgloss *) vector.data) [i]); + DFHackAPIVector_free (&vector); + return result; +} + +inline bool DFHackAPI_ReadMetalMatgloss (DFHackAPIHandle self, vector & output) +{ + DFHackAPIVectorC vector; + bool result = DFHackAPI_ReadMetalMatgloss (self, &vector); + uint32_t i; + for (i = 0; i < vector.length; i++) + output.push_back ( ( (t_matgloss *) vector.data) [i]); + DFHackAPIVector_free (&vector); + return result; } -inline bool DFHackAPI_ReadMetalMatgloss(DFHackAPIHandle self, vector & output) +inline bool DFHackAPI_ReadPlantMatgloss (DFHackAPIHandle self, vector & output) { - DFHackAPIVectorC vector; - bool result = DFHackAPI_ReadMetalMatgloss(self, &vector); - uint32_t i; - for (i = 0; i < vector.length; i++) - output.push_back(((t_matgloss *) vector.data)[i]); - DFHackAPIVector_free(&vector); - return result; + DFHackAPIVectorC vector; + bool result = DFHackAPI_ReadPlantMatgloss (self, &vector); + uint32_t i; + for (i = 0; i < vector.length; i++) + output.push_back ( ( (t_matgloss *) vector.data) [i]); + DFHackAPIVector_free (&vector); + return result; } -inline bool DFHackAPI_ReadPlantMatgloss(DFHackAPIHandle self, vector & output) +inline bool DFHackAPI_ReadCreatureMatgloss (DFHackAPIHandle self, vector & output) { - DFHackAPIVectorC vector; - bool result = DFHackAPI_ReadPlantMatgloss(self, &vector); - uint32_t i; - for (i = 0; i < vector.length; i++) - output.push_back(((t_matgloss *) vector.data)[i]); - DFHackAPIVector_free(&vector); - return result; + DFHackAPIVectorC vector; + bool result = DFHackAPI_ReadCreatureMatgloss (self, &vector); + uint32_t i; + for (i = 0; i < vector.length; i++) + output.push_back ( ( (t_matgloss *) vector.data) [i]); + DFHackAPIVector_free (&vector); + return result; } -inline bool DFHackAPI_ReadGeology(DFHackAPIHandle self, vector< vector > &assign) +inline bool DFHackAPI_ReadGeology (DFHackAPIHandle self, vector< vector > &assign) { - DFHackAPIVectorC vec; - bool result = DFHackAPI_ReadGeology(self, &vec); - uint32_t i; - for (i = 0; i < vec.length; i++) - { - DFHackAPIVectorC ¤t = ((DFHackAPIVectorC *) vec.data)[i]; - vector fill; - uint32_t j; - for (j = 0; j < current.length; j++) - fill.push_back(((uint16_t *) current.data)[j]); - assign.push_back(fill); - } - DFHackAPIVector_free(&vec); - return result; + DFHackAPIVectorC vec; + bool result = DFHackAPI_ReadGeology (self, &vec); + uint32_t i; + for (i = 0; i < vec.length; i++) + { + DFHackAPIVectorC ¤t = ( (DFHackAPIVectorC *) vec.data) [i]; + vector fill; + uint32_t j; + for (j = 0; j < current.length; j++) + fill.push_back ( ( (uint16_t *) current.data) [j]); + assign.push_back (fill); + } + DFHackAPIVector_free (&vec); + return result; } -inline bool DFHackAPI_ReadVeins(DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, vector & veins) +inline bool DFHackAPI_ReadVeins (DFHackAPIHandle self, uint32_t blockx, uint32_t blocky, uint32_t blockz, vector & veins) { - DFHackAPIVectorC vector; - bool result = DFHackAPI_ReadVeins(self, blockx, blocky, blockz, &vector); - uint32_t i; - for (i = 0; i < vector.length; i++) - veins.push_back(((t_vein *) vector.data)[i]); - DFHackAPIVector_free(&vector); - return result; + DFHackAPIVectorC vector; + bool result = DFHackAPI_ReadVeins (self, blockx, blocky, blockz, &vector); + uint32_t i; + for (i = 0; i < vector.length; i++) + veins.push_back ( ( (t_vein *) vector.data) [i]); + DFHackAPIVector_free (&vector); + return result; } -inline uint32_t DFHackAPI_InitReadBuildings(DFHackAPIHandle self, vector &v_buildingtypes) +inline uint32_t DFHackAPI_InitReadBuildings (DFHackAPIHandle self, vector &v_buildingtypes) { - DFHackAPIVectorC vector; - uint32_t result = DFHackAPI_InitReadBuildings(self, &vector); - uint32_t i; - for (i = 0; i < vector.length; i++) - v_buildingtypes.push_back(((const char **) vector.data)[i]); - DFHackAPIVector_free(&vector); - return result; + DFHackAPIVectorC vector; + uint32_t result = DFHackAPI_InitReadBuildings (self, &vector); + uint32_t i; + for (i = 0; i < vector.length; i++) + v_buildingtypes.push_back ( ( (const char **) vector.data) [i]); + DFHackAPIVector_free (&vector); + return result; } #endif // __cplusplus @@ -221,64 +240,67 @@ inline uint32_t DFHackAPI_InitReadBuildings(DFHackAPIHandle self, vector & output) - { - return DFHackAPI_ReadStoneMatgloss(handle, output); - } - + inline bool ReadStoneMatgloss (vector & output) + { + return DFHackAPI_ReadStoneMatgloss (handle, output); + } + inline bool ReadWoodMatgloss (vector & output) - { - return DFHackAPI_ReadWoodMatgloss(handle, output); - } - - inline bool ReadMetalMatgloss(vector & output) - { - return DFHackAPI_ReadMetalMatgloss(handle, output); - } - - inline bool ReadPlantMatgloss(vector & output) - { - return DFHackAPI_ReadPlantMatgloss(handle, output); - } - - // FIXME: add creatures for all the creature products + { + return DFHackAPI_ReadWoodMatgloss (handle, output); + } + + inline bool ReadMetalMatgloss (vector & output) + { + return DFHackAPI_ReadMetalMatgloss (handle, output); + } + + inline bool ReadPlantMatgloss (vector & output) + { + return DFHackAPI_ReadPlantMatgloss (handle, output); + } + + inline bool ReadCreatureMatgloss (vector & output) + { + return DFHackAPI_ReadCreatureMatgloss (handle, output); + } // read region surroundings, get their vectors of geolayers so we can do translation (or just hand the translation table to the client) // returns an array of 9 vectors of indices into stone matgloss @@ -311,129 +333,146 @@ public: } } */ - inline bool ReadGeology( vector < vector >& assign ) - { - return DFHackAPI_ReadGeology(handle, assign); - } - + inline bool ReadGeology (vector < vector >& assign) + { + return DFHackAPI_ReadGeology (handle, assign); + } + /* * BLOCK DATA */ /// allocate and read pointers to map blocks inline bool InitMap() - { - return DFHackAPI_InitMap(handle); - } - + { + return DFHackAPI_InitMap (handle); + } + /// destroy the mapblock cache inline bool DestroyMap() - { - return DFHackAPI_DestroyMap(handle); - } - + { + return DFHackAPI_DestroyMap (handle); + } + /// get size of the map in tiles - inline void getSize(uint32_t& x, uint32_t& y, uint32_t& z) - { - DFHackAPI_getSize(handle, &x, &y, &z); - } - + inline void getSize (uint32_t& x, uint32_t& y, uint32_t& z) + { + DFHackAPI_getSize (handle, &x, &y, &z); + } + /** * Return false/0 on failure, buffer allocated by client app, 256 items long */ - inline bool isValidBlock(uint32_t blockx, uint32_t blocky, uint32_t blockz) - { - return DFHackAPI_isValidBlock(handle, blockx, blocky, blockz); - } - - inline bool ReadTileTypes(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t) - { - return DFHackAPI_ReadTileTypes(handle, blockx, blocky, blockz, buffer); - } - - inline bool WriteTileTypes(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t) - { - return DFHackAPI_WriteTileTypes(handle, blockx, blocky, blockz, buffer); - } - - inline bool ReadDesignations(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t) - { - return DFHackAPI_ReadDesignations(handle, blockx, blocky, blockz, buffer); - } - + inline bool isValidBlock (uint32_t blockx, uint32_t blocky, uint32_t blockz) + { + return DFHackAPI_isValidBlock (handle, blockx, blocky, blockz); + } + + inline bool ReadTileTypes (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t) + { + return DFHackAPI_ReadTileTypes (handle, blockx, blocky, blockz, buffer); + } + + inline bool WriteTileTypes (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint16_t *buffer) // 256 * sizeof(uint16_t) + { + return DFHackAPI_WriteTileTypes (handle, blockx, blocky, blockz, buffer); + } + + inline bool ReadDesignations (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t) + { + return DFHackAPI_ReadDesignations (handle, blockx, blocky, blockz, buffer); + } + inline bool WriteDesignations (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) - { - return DFHackAPI_WriteDesignations(handle, blockx, blocky, blockz, buffer); - } - - inline bool ReadOccupancy(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t) - { - return DFHackAPI_ReadOccupancy(handle, blockx, blocky, blockz, buffer); - } - - inline bool WriteOccupancy(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t) - { - return DFHackAPI_WriteOccupancy(handle, blockx, blocky, blockz, buffer); - } - + { + return DFHackAPI_WriteDesignations (handle, blockx, blocky, blockz, buffer); + } + + inline bool ReadOccupancy (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t) + { + return DFHackAPI_ReadOccupancy (handle, blockx, blocky, blockz, buffer); + } + + inline bool WriteOccupancy (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint32_t *buffer) // 256 * sizeof(uint32_t) + { + return DFHackAPI_WriteOccupancy (handle, blockx, blocky, blockz, buffer); + } + /// read region offsets of a block - inline bool ReadRegionOffsets(uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer) // 16 * sizeof(uint8_t) - { - return DFHackAPI_ReadRegionOffsets(handle, blockx, blocky, blockz, buffer); - } - + inline bool ReadRegionOffsets (uint32_t blockx, uint32_t blocky, uint32_t blockz, uint8_t *buffer) // 16 * sizeof(uint8_t) + { + return DFHackAPI_ReadRegionOffsets (handle, blockx, blocky, blockz, buffer); + } + /// read aggregated veins of a block - inline bool ReadVeins(uint32_t blockx, uint32_t blocky, uint32_t blockz, vector & veins) - { - return DFHackAPI_ReadVeins(handle, blockx, blocky, blockz, veins); - } - + inline bool ReadVeins (uint32_t blockx, uint32_t blocky, uint32_t blockz, vector & veins) + { + return DFHackAPI_ReadVeins (handle, blockx, blocky, blockz, veins); + } + /** * Buildings, constructions, plants, all pretty straighforward. InitReadBuildings returns all the building types as a mapping between a numeric values and strings */ inline uint32_t InitReadConstructions() - { - return DFHackAPI_InitReadConstructions(handle); - } + { + return DFHackAPI_InitReadConstructions (handle); + } - inline bool ReadConstruction(const uint32_t &index, t_construction & construction) - { - return DFHackAPI_ReadConstruction(handle, &index, & construction); - } + inline bool ReadConstruction (const uint32_t &index, t_construction & construction) + { + return DFHackAPI_ReadConstruction (handle, &index, & construction); + } inline void FinishReadConstructions() - { - DFHackAPI_FinishReadConstructions(handle); - } + { + DFHackAPI_FinishReadConstructions (handle); + } - inline uint32_t InitReadBuildings(vector &v_buildingtypes) - { - return DFHackAPI_InitReadBuildings(handle, v_buildingtypes); - } + inline uint32_t InitReadBuildings (vector &v_buildingtypes) + { + return DFHackAPI_InitReadBuildings (handle, v_buildingtypes); + } - inline bool ReadBuilding(const uint32_t &index, t_building & building) - { - return DFHackAPI_ReadBuilding(handle, &index, &building); - } + inline bool ReadBuilding (const uint32_t &index, t_building & building) + { + return DFHackAPI_ReadBuilding (handle, &index, &building); + } inline void FinishReadBuildings() - { - DFHackAPI_FinishReadBuildings(handle); - } + { + DFHackAPI_FinishReadBuildings (handle); + } inline uint32_t InitReadVegetation() - { - return DFHackAPI_InitReadVegetation(handle); - } + { + return DFHackAPI_InitReadVegetation (handle); + } - inline bool ReadVegetation(const uint32_t &index, t_tree_desc & shrubbery) - { - return DFHackAPI_ReadVegetation(handle, &index, &shrubbery); - } + inline bool ReadVegetation (const uint32_t &index, t_tree_desc & shrubbery) + { + return DFHackAPI_ReadVegetation (handle, &index, &shrubbery); + } inline void FinishReadVegetation() - { - DFHackAPI_FinishReadVegetation(handle); - } + { + DFHackAPI_FinishReadVegetation (handle); + } + + inline uint32_t InitReadCreatures() + { + return DFHackAPI_InitReadCreatures (handle); + } + + inline bool ReadCreature (const uint32_t &index, t_creature & furball) + { + return DFHackAPI_ReadCreature (handle, &index, &furball); + } + + inline void FinishReadCreatures() + { + DFHackAPI_FinishReadCreatures (handle); + } + + }; #endif // __cplusplus diff --git a/output/Memory.xml b/output/Memory.xml index 7aa922323..541930402 100644 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -87,7 +87,10 @@ 0x94 + 0x88 0x8C + 0xE4 + 0xE8 0x70 @@ -217,6 +220,10 @@
0x014F4B4C
0x014edfcc
+ + 0xFC + 0x100 + 0x70