hostile-takeover/game/stringtable.cpp
2014-07-06 17:47:28 -07:00

56 lines
943 B
C++

// stringtable.cpp
#include "ht.h"
namespace wi {
StringTable *gpstrtbl;
StringTable::StringTable()
{
m_pfil = NULL;
}
StringTable::~StringTable()
{
if (m_pfil != NULL)
gpakr.fclose(m_pfil);
}
bool StringTable::Init(char *pszFilename)
{
m_pfil = gpakr.fopen(pszFilename, "rb");
return m_pfil != NULL;
}
bool StringTable::GetString(int id, char *psz, int cb)
{
Assert(m_pfil != NULL);
// get index of string
if (gpakr.fseek(m_pfil, 2 * id, SEEK_SET) != 0)
return false;
word off;
if (gpakr.fread(&off, sizeof(word), 1, m_pfil) != 1)
return false;
off = BigWord(off);
// get length
if (gpakr.fseek(m_pfil, off, SEEK_SET) != 0)
return false;
byte cbT = 0;
if (gpakr.fread(&cbT, sizeof(byte), 1, m_pfil) != 1)
return false;
if (cb < cbT)
cbT = cb - 1;
// read in bytes and zero terminate string
if (gpakr.fread(psz, cbT, 1, m_pfil) != 1)
return false;
psz[cbT] = 0;
return true;
}
} // namespace wi