diff options
| author | Alexander Gavrilov | 2012-01-03 22:56:05 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-01-03 22:56:05 +0400 |
| commit | 1d1cd638003a74d4543ff7348ee29c27f03ed78a (patch) | |
| tree | d8fa27ea0a40ebebb9463b7f4801a308a0c7de0f /library/DataDefs.cpp | |
| parent | f8814909a95597ac05380f274361651a9ce8e499 (diff) | |
| download | dfhack-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.cpp | 37 |
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) |
