diff options
| -rw-r--r-- | engines/cine/cine.cpp | 1 | ||||
| -rw-r--r-- | engines/cine/gfx.cpp | 8 | ||||
| -rw-r--r-- | engines/cine/texte.cpp | 29 | ||||
| -rw-r--r-- | engines/cine/texte.h | 19 | 
4 files changed, 24 insertions, 33 deletions
diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp index 5e0506c286..9eb751835e 100644 --- a/engines/cine/cine.cpp +++ b/engines/cine/cine.cpp @@ -69,7 +69,6 @@ CineEngine::CineEngine(OSystem *syst, const CINEGameDescription *gameDesc) : Eng  CineEngine::~CineEngine() {  	if (g_cine->getGameType() == Cine::GType_OS) { -		freePoldatDat();  		freeErrmessDat();  	}  	Common::clearAllSpecialDebugLevels(); diff --git a/engines/cine/gfx.cpp b/engines/cine/gfx.cpp index c6c5faf464..5d66be5e27 100644 --- a/engines/cine/gfx.cpp +++ b/engines/cine/gfx.cpp @@ -366,8 +366,8 @@ int FWRenderer::drawChar(char character, int x, int y) {  	if (character == ' ') {  		x += 5; -	} else if ((width = fontParamTable[(unsigned char)character].characterWidth)) { -		idx = fontParamTable[(unsigned char)character].characterIdx; +	} else if ((width = g_cine->_textHandler.fontParamTable[(unsigned char)character].characterWidth)) { +		idx = g_cine->_textHandler.fontParamTable[(unsigned char)character].characterIdx;  		drawSpriteRaw(g_cine->_textHandler.textTable[idx][0], g_cine->_textHandler.textTable[idx][1], 16, 8, _backBuffer, x, y);  		x += width + 1;  	} @@ -1023,8 +1023,8 @@ int OSRenderer::drawChar(char character, int x, int y) {  	if (character == ' ') {  		x += 5; -	} else if ((width = fontParamTable[(unsigned char)character].characterWidth)) { -		idx = fontParamTable[(unsigned char)character].characterIdx; +	} else if ((width = g_cine->_textHandler.fontParamTable[(unsigned char)character].characterWidth)) { +		idx = g_cine->_textHandler.fontParamTable[(unsigned char)character].characterIdx;  		drawSpriteRaw2(g_cine->_textHandler.textTable[idx][0], 0, 16, 8, _backBuffer, x, y);  		x += width + 1;  	} diff --git a/engines/cine/texte.cpp b/engines/cine/texte.cpp index 618e37d1ce..6369a2eff4 100644 --- a/engines/cine/texte.cpp +++ b/engines/cine/texte.cpp @@ -74,9 +74,7 @@ void loadTextData(const char *filename) {  	fileHandle.close();  } -const CharacterEntry *fontParamTable; - -const CharacterEntry fontParamTable_standard[256] = { +static const CharacterEntry fontParamTable_standard[NUM_FONT_CHARS] = {  	{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0},  	{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0},  	{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, @@ -113,7 +111,7 @@ const CharacterEntry fontParamTable_standard[256] = {  	{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}  }; -const CharacterEntry fontParamTable_alt[256] = { +static const CharacterEntry fontParamTable_alt[NUM_FONT_CHARS] = {  	{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0},  	{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0},  	{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, @@ -537,9 +535,11 @@ void initLanguage(Common::Language lang) {  	}  	if (g_cine->getFeatures() & GF_ALT_FONT) { -		fontParamTable = fontParamTable_alt; +		// Copy alternative font parameter table to the current font parameter table +		Common::copy(fontParamTable_alt, fontParamTable_alt + NUM_FONT_CHARS, g_cine->_textHandler.fontParamTable);  	} else { -		fontParamTable = fontParamTable_standard; +		// Copy standard font parameter to the current font parameter table +		Common::copy(fontParamTable_standard, fontParamTable_standard + NUM_FONT_CHARS, g_cine->_textHandler.fontParamTable);  	}  } @@ -574,25 +574,16 @@ void loadPoldatDat(const char *fname) {  	in.open(fname);  	if (in.isOpen()) { -		CharacterEntry *ptr = (CharacterEntry *)malloc(sizeof(CharacterEntry) * 256); - -		for (int i = 0; i < 256; i++) { -			ptr[i].characterIdx = (int)in.readByte(); -			ptr[i].characterWidth = (int)in.readByte(); +		for (int i = 0; i < NUM_FONT_CHARS; i++) { +			g_cine->_textHandler.fontParamTable[i].characterIdx   = in.readByte(); +			g_cine->_textHandler.fontParamTable[i].characterWidth = in.readByte();  		} -		fontParamTable = ptr; -  		in.close();  	} else {  		error("Cannot open file %s for reading", fname);  	}  } -void freePoldatDat() { -	free(const_cast<Cine::CharacterEntry *>(fontParamTable)); -	fontParamTable = 0; -} -  /*! \brief Fit a substring of text into one line of fixed width text box   * \param str Text to fit   * \param maxWidth Text box width @@ -617,7 +608,7 @@ int fitLine(const char *str, int maxWidth, int &words, int &width) {  			bkpWidth = width;  			bkpLen = i + 1;  		} else { -			charWidth = fontParamTable[(unsigned char)str[i]].characterWidth + 1; +			charWidth = g_cine->_textHandler.fontParamTable[(unsigned char)str[i]].characterWidth + 1;  			width += charWidth;  		} diff --git a/engines/cine/texte.h b/engines/cine/texte.h index 7fec52cffc..03d0c5faec 100644 --- a/engines/cine/texte.h +++ b/engines/cine/texte.h @@ -33,8 +33,17 @@ namespace Cine {  typedef char CommandeType[20]; +// Number of characters in a font +#define NUM_FONT_CHARS 256 + +struct CharacterEntry { +	byte characterIdx; +	byte characterWidth; +}; +  struct TextHandler { -	byte textTable[256][2][16 * 8]; +	byte textTable[NUM_FONT_CHARS][2][16 * 8]; +	CharacterEntry fontParamTable[NUM_FONT_CHARS];  };  extern const char **failureMessages; @@ -44,18 +53,10 @@ extern const CommandeType *confirmMenu;  extern const char **otherMessages;  extern const char *commandPrepositionOn; -struct CharacterEntry { -	byte characterIdx; -	byte characterWidth; -}; - -extern const CharacterEntry *fontParamTable; -  void loadTextData(const char *filename);  void loadErrmessDat(const char *fname);  void freeErrmessDat(void);  void loadPoldatDat(const char *fname); -void freePoldatDat(void);  int fitLine(const char *ptr, int maxWidth, int &words, int &width);  | 
