101 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* $Id$ */
 | 
						|
 | 
						|
#include "stdafx.h"
 | 
						|
#include "openttd.h"
 | 
						|
#include "currency.h"
 | 
						|
#include "news.h"
 | 
						|
#include "variables.h"
 | 
						|
#include "table/strings.h"
 | 
						|
 | 
						|
// exchange rate    prefix
 | 
						|
// |  separator        |     postfix
 | 
						|
// |   |    Euro year  |       |
 | 
						|
// |   |    |          |       |
 | 
						|
CurrencySpec _currency_specs[] = {
 | 
						|
	{    1, ',', CF_NOEURO, "\xA3", ""     }, // british pounds
 | 
						|
	{    2, ',', CF_NOEURO, "$",    ""     }, // us dollars
 | 
						|
	{    2, ',', CF_ISEURO, "¤",    ""     }, // Euro
 | 
						|
	{  200, ',', CF_NOEURO, "\xA5", ""     }, // yen
 | 
						|
	{   19, ',', 2002,      "",     " S."  }, // austrian schilling
 | 
						|
	{   57, ',', 2002,      "BEF ", ""     }, // belgian franc
 | 
						|
	{    2, ',', CF_NOEURO, "CHF ", ""     }, // swiss franc
 | 
						|
	{   50, ',', CF_NOEURO, "",     " Kc"  }, // czech koruna // TODO: Should use the "c" with an upside down "^"
 | 
						|
	{    4, '.', 2002,      "DM ",  ""     }, // deutsche mark
 | 
						|
	{   10, '.', CF_NOEURO, "",     " kr"  }, // danish krone
 | 
						|
	{  200, '.', 2002,      "Pts ", ""     }, // spanish pesetas
 | 
						|
	{    8, ',', 2002,      "",     " mk"  }, // finnish markka
 | 
						|
	{   10, '.', 2002,      "FF ",  ""     }, // french francs
 | 
						|
	{  480, ',', 2002,      "",     "Dr."  }, // greek drachma
 | 
						|
	{  376, ',', 2002,      "",     " Ft"  }, // hungarian forint
 | 
						|
	{  130, '.', CF_NOEURO, "",     " Kr"  }, // icelandic krona
 | 
						|
	{ 2730, ',', 2002,      "",     " L."  }, // italian lira
 | 
						|
	{    3, ',', 2002,      "NLG ", ""     }, // dutch gulden
 | 
						|
	{   11, '.', CF_NOEURO, "",     " Kr"  }, // norwegian krone
 | 
						|
	{    6, ' ', CF_NOEURO, "",     " zl"  }, // polish zloty
 | 
						|
	{    6, '.', CF_NOEURO, "",     " Lei" }, // romanian Lei
 | 
						|
	{    5, ' ', CF_NOEURO, "",     " p"   }, // russian rouble
 | 
						|
	{   13, '.', CF_NOEURO, "",     " Kr"  }, // swedish krona
 | 
						|
	{    1, ' ', CF_NOEURO, "",     ""     }, // custom currency
 | 
						|
};
 | 
						|
 | 
						|
const StringID _currency_string_list[] = {
 | 
						|
	STR_CURR_GBP,
 | 
						|
	STR_CURR_USD,
 | 
						|
	STR_CURR_EUR,
 | 
						|
	STR_CURR_YEN,
 | 
						|
	STR_CURR_ATS,
 | 
						|
	STR_CURR_BEF,
 | 
						|
	STR_CURR_CHF,
 | 
						|
	STR_CURR_CZK,
 | 
						|
	STR_CURR_DEM,
 | 
						|
	STR_CURR_DKK,
 | 
						|
	STR_CURR_ESP,
 | 
						|
	STR_CURR_FIM,
 | 
						|
	STR_CURR_FRF,
 | 
						|
	STR_CURR_GRD,
 | 
						|
	STR_CURR_HUF,
 | 
						|
	STR_CURR_ISK,
 | 
						|
	STR_CURR_ITL,
 | 
						|
	STR_CURR_NLG,
 | 
						|
	STR_CURR_NOK,
 | 
						|
	STR_CURR_PLN,
 | 
						|
	STR_CURR_ROL,
 | 
						|
	STR_CURR_RUR,
 | 
						|
	STR_CURR_SEK,
 | 
						|
	STR_CURR_CUSTOM,
 | 
						|
	INVALID_STRING_ID
 | 
						|
};
 | 
						|
 | 
						|
// NOTE: Make sure both lists are in the same order
 | 
						|
// + 1 string list terminator
 | 
						|
assert_compile(lengthof(_currency_specs) + 1 == lengthof(_currency_string_list));
 | 
						|
 | 
						|
 | 
						|
// get a mask of the allowed currencies depending on the year
 | 
						|
uint GetMaskOfAllowedCurrencies(void)
 | 
						|
{
 | 
						|
	uint mask = 0;
 | 
						|
	uint i;
 | 
						|
 | 
						|
	for (i = 0; i != lengthof(_currency_specs); i++) {
 | 
						|
		uint16 to_euro = _currency_specs[i].to_euro;
 | 
						|
 | 
						|
		if (to_euro != CF_NOEURO && to_euro != CF_ISEURO && _cur_year >= to_euro - MAX_YEAR_BEGIN_REAL) continue;
 | 
						|
		if (to_euro == CF_ISEURO && _cur_year < 2000 - MAX_YEAR_BEGIN_REAL) continue;
 | 
						|
		mask |= (1 << i);
 | 
						|
	}
 | 
						|
	mask |= (1 << CUSTOM_CURRENCY_ID); // always allow custom currency
 | 
						|
	return mask;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void CheckSwitchToEuro(void)
 | 
						|
{
 | 
						|
	if (_currency_specs[_opt.currency].to_euro != CF_NOEURO &&
 | 
						|
			_currency_specs[_opt.currency].to_euro != CF_ISEURO &&
 | 
						|
			MAX_YEAR_BEGIN_REAL + _cur_year >= _currency_specs[_opt.currency].to_euro) {
 | 
						|
		_opt.currency = 2; // this is the index of euro above.
 | 
						|
		AddNewsItem(STR_EURO_INTRODUCE, NEWS_FLAGS(NM_NORMAL, 0, NT_ECONOMY, 0), 0, 0);
 | 
						|
	}
 | 
						|
}
 |