#include <iostream>
#include <fstream>
#include <vector>
#include <string.h>
#include <assert.h>
#include <stdint.h>
struct element
{
std::istream & read( std::istream & is );
};
std::istream & element::read( std::istream & is )
{
static const uint32_t ref = 0xe000fffe;
std::ostream &os = std::cout;
if( is.eof() )
{
return is;
}
uint32_t magic;
if( !is.read( (char*)&magic, sizeof(magic) ) )
{
return is;
}
assert( magic == ref );
uint32_t l;
is.read( (char*)&l, sizeof(l) );
char str[17];
str[16] = 0;
is.read( str, 16 );
os << str << " (" << l << ")" << std::endl;
std::vector<char> bytes;
bytes.resize( l - 16 );
if( bytes.size() )
{
is.read( &bytes[0], l - 16 );
}
if( strcmp(str, "TUSREMEASUREMENT" ) == 0 )
{
const char *p = &bytes[0];
uint32_t val;
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
#if 0
float f;
memcpy( (char*)&f, p, sizeof(f) );
os << " " << f << std::endl;
p += sizeof(f);
#else
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
#endif
memcpy( (char*)&val, p, sizeof(val) );
os << " " << val << std::endl;
p += sizeof(val);
char str2[17];
memcpy( str2, p, 16 );
str2[16] = 0;
os << " " << str2 << std::endl;
}
#if 0
std::ofstream out( str, std::ios::binary );
out.write( (char*)&magic, sizeof( magic ) );
out.write( (char*)&l, sizeof( l ) );
out.write( str, 16 );
out.write( &bytes[0], bytes.size() );
#endif
return is;
}
static bool DumpImageHeaderInfo( std::istream & is, size_t reflen )
{
element el;
while( el.read( is ) )
{
}
(void)reflen;
return true;
}
int main(int argc, char *argv[])
{
if( argc < 2 ) return 1;
const char *filename = argv[1];
{
std::cerr << "Failed to read: " << filename << std::endl;
return 1;
}
if ( imageheaderinfo.
IsEmpty() )
return 1;
std::istringstream is;
is.str( dup );
bool b = DumpImageHeaderInfo( is, bv->
GetLength() );
if( !b ) return 1;
#if 0
const float d1 = 0.0041666668839752674;
const float d2 = 0.10828025639057159;
const float d3 = 0.10828025639057159;
const int32_t d4 = 134;
const uint32_t d5 = 1153476;
std::ofstream t("/tmp/debug", std::ios::binary );
t.write( (char*)&d1, sizeof( d1 ) );
t.write( (char*)&d2, sizeof( d2 ) );
t.write( (char*)&d3, sizeof( d3 ) );
t.write( (char*)&d4, sizeof( d4 ) );
t.write( (char*)&d5, sizeof( d5 ) );
t.close();
#endif
return 0;
}