2005-08-06 14:59:54 +00:00
|
|
|
|
/* $Id$ */
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "openttd.h"
|
|
|
|
|
#include "currency.h"
|
2005-08-07 12:41:57 +00:00
|
|
|
|
#include "news.h"
|
2005-08-06 14:59:54 +00:00
|
|
|
|
#include "variables.h"
|
|
|
|
|
#include "table/strings.h"
|
2006-08-14 14:21:15 +00:00
|
|
|
|
#include "date.h"
|
2005-08-06 14:59:54 +00:00
|
|
|
|
|
|
|
|
|
// exchange rate prefix
|
|
|
|
|
// | separator | postfix
|
|
|
|
|
// | | Euro year | |
|
|
|
|
|
// | | | | |
|
|
|
|
|
CurrencySpec _currency_specs[] = {
|
|
|
|
|
{ 1, ',', CF_NOEURO, "\xA3", "" }, // british pounds
|
|
|
|
|
{ 2, ',', CF_NOEURO, "$", "" }, // us dollars
|
|
|
|
|
{ 2, ',', CF_ISEURO, "<EFBFBD>", "" }, // 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
|
2005-10-06 09:35:08 +00:00
|
|
|
|
{ 8, ',', 2002, "", " mk" }, // finnish markka
|
2005-08-06 14:59:54 +00:00
|
|
|
|
{ 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);
|
|
|
|
|
}
|
2006-04-20 21:13:08 +00:00
|
|
|
|
mask |= (1 << CUSTOM_CURRENCY_ID); // always allow custom currency
|
2005-08-06 14:59:54 +00:00
|
|
|
|
return mask;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2005-08-07 12:41:57 +00:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
2006-07-14 17:54:04 +00:00
|
|
|
|
|