summaryrefslogtreecommitdiff
path: root/library/DataDefs.cpp
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-01-03 22:56:05 +0400
committerAlexander Gavrilov2012-01-03 22:56:05 +0400
commit1d1cd638003a74d4543ff7348ee29c27f03ed78a (patch)
treed8fa27ea0a40ebebb9463b7f4801a308a0c7de0f /library/DataDefs.cpp
parentf8814909a95597ac05380f274361651a9ce8e499 (diff)
downloaddfhack-1d1cd638003a74d4543ff7348ee29c27f03ed78a.tar.gz
dfhack-1d1cd638003a74d4543ff7348ee29c27f03ed78a.tar.bz2
dfhack-1d1cd638003a74d4543ff7348ee29c27f03ed78a.tar.xz
Implement printing job details.
Diffstat (limited to 'library/DataDefs.cpp')
-rw-r--r--library/DataDefs.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/library/DataDefs.cpp b/library/DataDefs.cpp
index bcdb388b..eb05038e 100644
--- a/library/DataDefs.cpp
+++ b/library/DataDefs.cpp
@@ -35,6 +35,8 @@ distribution.
// must be last due to MS stupidity
#include "DataDefs.h"
+#include "MiscUtils.h"
+
using namespace DFHack;
/* The order of global object constructor calls is
@@ -160,6 +162,41 @@ void virtual_identity::Init(Core *core)
}
}
+std::string DFHack::bitfieldToString(const void *p, int size, const bitfield_item_info *items)
+{
+ std::string res;
+ const char *data = (const char*)p;
+
+ for (int i = 0; i < size*8; i++) {
+ unsigned v;
+
+ if (items[i].size > 1) {
+ unsigned pdv = *(unsigned*)&data[i/8];
+ v = (pdv >> (i%8)) & ((1 << items[i].size)-1);
+ } else {
+ v = (data[i/8]>>(i%8)) & 1;
+ }
+
+ if (v) {
+ if (!res.empty())
+ res += ' ';
+
+ if (items[i].name)
+ res += items[i].name;
+ else
+ res += stl_sprintf("UNK_%d", i);
+
+ if (items[i].size > 1)
+ res += stl_sprintf("=%u", v);
+ }
+
+ if (items[i].size > 1)
+ i += items[i].size-1;
+ }
+
+ return res;
+}
+
#define SIMPLE_GLOBAL(name,tname) \
tname *df::global::name = NULL;
#define GLOBAL(name,tname) SIMPLE_GLOBAL(name,df::tname)