Actually call on_reset callback
[lsnes.git] / src / emulation / sky / gauge.cpp
blobabfdcf05b0d46a0a03fefed4e44d7ca46efda4a4
1 #include "gauge.hpp"
2 #include "util.hpp"
3 #include "library/string.hpp"
5 namespace sky
7 gauge::gauge()
9 dummyimage[0] = dummyimage[1] = 0;
12 gauge::gauge(const std::vector<char>& dispdat, size_t cells)
14 dummyimage[0] = dummyimage[1] = 0;
15 if(dispdat.size() < 2 * cells)
16 (stringfmt() << "Entry pointer table incomplete").throwex();
17 data.resize(dispdat.size() - 2 * cells);
18 memcpy(&data[0], &dispdat[2 * cells], data.size());
19 for(unsigned i = 0; i < cells; i++)
20 unpack_image(dispdat, i, cells);
23 void gauge::unpack_image(const std::vector<char>& dispdat, size_t i, size_t total)
25 size_t offset = combine(dispdat[2 * i + 0], dispdat[2 * i + 1]);
26 //Check that the offset is in-range.
27 if(data.size() < offset)
28 (stringfmt() << "Entry " << i << " points outside file").throwex();
29 if(data.size() < offset + 4)
30 (stringfmt() << "Entry " << i << " header incomplete").throwex();
31 size_t imagesize = (uint16_t)data[offset + 2] * data[offset + 3];
32 if(data.size() < offset + 4 + imagesize)
33 (stringfmt() << "Entry " << i << " bitmap incomplete").throwex();
34 ptr.push_back(offset);