// *** OpenGTA3 ***
// GXT support module

/*
	NOTE: Оригинальный объект не используется!

	Отличия от оригинального модуля:
		* файл с текстом не читается, а проецируется в память
		* загрузка файла производится один раз. Перечитывание файла делается только при смене языка
		* поскольку в память проецируется весь файл, никаких перечитываний не происходит. Вместо этого, просто перемещаются указатели
*/

class CText {
public:
	// constructor and destructor
	CText ();
	~CText ();

	const TCHAR * locate (char * key);
	void load (bool noMpack);
	void clear ();
	void loadMission (char * missionName);

	void getMissionName (char * pDst) const  { strcpy_s (pDst, 8, m_missionName); }	

protected:

	CFile * m_gxtFile;
	CFile * m_mpackFile;

	struct Tag {
		DWORD	tag;
		DWORD	length;
	};

	// file directory entry
	struct TablEntry {
		char	name[8];
		DWORD	offset;
	};

	// string directory entry
	struct TKeyEntry {
		DWORD offset;
		DWORD hash;
	};

	char		m_missionName[8];
	BYTE		m_loadedLanguage;		// language ID of loaded .gxt

	TablEntry * m_fileDirectory;		// pointer to TablEntry array in mapped GXT
	DWORD		m_fileDirectorySize;	// TABL entry count

	TKeyEntry * m_mainKey;	
	DWORD		m_mainKeySize;
	char *		m_mainText;
	TKeyEntry * m_missionKey;
	DWORD		m_missionKeySize;
	char *		m_missionText;


	DWORD locateKey (DWORD hash, TKeyEntry * key, DWORD size);
};

extern CText gxt;

