diff options
author | Fritz Elfert <felfert@to.com> | 2002-02-28 20:56:59 +0000 |
---|---|---|
committer | Fritz Elfert <felfert@to.com> | 2002-02-28 20:56:59 +0000 |
commit | eecba3b5fcb47a01e6e13ee1940def989f6dd22d (patch) | |
tree | 970f3113de0d2b9b0544c1420117e0cf9633abcd /lib/siscomponentrecord.cpp | |
parent | 12241e0ff5ea242891fc3a8c177e8f55e897f2a3 (diff) | |
download | plptools-eecba3b5fcb47a01e6e13ee1940def989f6dd22d.tar.gz plptools-eecba3b5fcb47a01e6e13ee1940def989f6dd22d.tar.bz2 plptools-eecba3b5fcb47a01e6e13ee1940def989f6dd22d.zip |
- Added SIS stuff by Daniel Brahneborg
Diffstat (limited to 'lib/siscomponentrecord.cpp')
-rw-r--r-- | lib/siscomponentrecord.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
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 <stdio.h> +#include <string.h> + +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]; +} + |