File diff r16691:1305f82fcf89 → r16692:f5d38cba4303
src/strings.cpp
Show inline comments
 
@@ -56,7 +56,7 @@ static char *StationGetSpecialString(cha
 
static char *GetSpecialTownNameString(char *buff, int ind, uint32 seed, const char *last);
 
static char *GetSpecialNameString(char *buff, int ind, int64 *argv, const char *last);
 

	
 
static char *FormatString(char *buff, const char *str, int64 *argv, uint casei, const char *last);
 
static char *FormatString(char *buff, const char *str, int64 *argv, uint casei, const char *last, bool dry_run = false);
 

	
 
struct LanguagePack : public LanguagePackHeader {
 
	char data[]; // list of strings
 
@@ -583,8 +583,19 @@ uint ConvertDisplaySpeedToSpeed(uint spe
 
	return ((speed << units[_settings_game.locale.units].s_s) + units[_settings_game.locale.units].s_m / 2) / units[_settings_game.locale.units].s_m;
 
}
 

	
 
static char *FormatString(char *buff, const char *str, int64 *argv, uint casei, const char *last)
 
static char *FormatString(char *buff, const char *str, int64 *argv, uint casei, const char *last, bool dry_run)
 
{
 
	if (UsingNewGRFTextStack() && !dry_run) {
 
		/* Values from the NewGRF text stack are only copied to the normal
 
		 * argv array at the time they are encountered. That means that if
 
		 * another string command references a value later in the string it
 
		 * would fail. We solve that by running FormatString twice. The first
 
		 * pass makes sure the argv array is correctly filled and the second
 
		 * pass can reference later values without problems. */
 
		struct TextRefStack *backup = CreateTextRefStackBackup();
 
		FormatString(buff, str, argv, casei, last, true);
 
		RestoreTextRefStackBackup(backup);
 
	}
 
	WChar b;
 
	int64 *argv_orig = argv;
 
	uint modifier = 0;