From eecba3b5fcb47a01e6e13ee1940def989f6dd22d Mon Sep 17 00:00:00 2001 From: Fritz Elfert Date: Thu, 28 Feb 2002 20:56:59 +0000 Subject: - Added SIS stuff by Daniel Brahneborg --- lib/siscomponentrecord.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 lib/siscomponentrecord.cpp (limited to 'lib/siscomponentrecord.cpp') diff --git a/lib/siscomponentrecord.cpp b/lib/siscomponentrecord.cpp new file mode 100644 index 0000000..b4b313a --- /dev/null +++ b/lib/siscomponentrecord.cpp @@ -0,0 +1,55 @@ + +#include "siscomponentrecord.h" +#include "sisfile.h" + +#include +#include + +SISComponentNameRecord::~SISComponentNameRecord() +{ + delete[] m_names; +} + +void +SISComponentNameRecord::fillFrom(uchar* buf, int base, SISFile* sisFile) +{ + int ix = base; + + int n = sisFile->m_header.m_nlangs; + m_nameLengths = new uint32[n]; + m_namePtrs = new uint32[n]; + m_names = new uchar*[n]; + + // First read lengths. + // + for (int i = 0; i < n; ++i) + { + m_nameLengths[i] = read32(buf, &ix); + } + + // Then read ptrs. + // + for (int i = 0; i < n; ++i) + { + m_namePtrs[i] = read32(buf, &ix); + if (logLevel >= 2) + printf("Name %d (for %s) is %.*s\n", + i, + sisFile->getLanguage(i)->m_name, + m_nameLengths[i], + buf + m_namePtrs[i]); + int len = m_nameLengths[i]; + m_names[i] = new uchar[len + 1]; + memcpy(m_names[i], buf + m_namePtrs[i], len); + m_names[i][len] = 0; + } + if (logLevel >= 1) + printf("%d .. %d (%d bytes): Name records\n", base, ix, ix - base); +} + +uchar* +SISComponentNameRecord::getName(int no) +{ + return m_names[no]; +} + -- cgit v1.2.3