aboutsummaryrefslogtreecommitdiffstats
path: root/lib/siscomponentrecord.cpp
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2002-02-28 20:56:59 +0000
committerFritz Elfert <felfert@to.com>2002-02-28 20:56:59 +0000
commiteecba3b5fcb47a01e6e13ee1940def989f6dd22d (patch)
tree970f3113de0d2b9b0544c1420117e0cf9633abcd /lib/siscomponentrecord.cpp
parent12241e0ff5ea242891fc3a8c177e8f55e897f2a3 (diff)
downloadplptools-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.cpp55
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];
+}
+