diff options
Diffstat (limited to 'currency.c')
-rw-r--r-- | currency.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/currency.c b/currency.c new file mode 100644 index 000000000..29a698bd3 --- /dev/null +++ b/currency.c @@ -0,0 +1,94 @@ +/* $Id$ */ + +#include "stdafx.h" +#include "openttd.h" +#include "currency.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 << 23); // always allow custom currency + return mask; +} + + +uint GetCurrentCurrencyRate(void) +{ + return _currency_specs[_opt_ptr->currency].rate; +} |