From 802d31aab683d1e6baeafd8f53bbe7187b39e69a Mon Sep 17 00:00:00 2001 From: rubidium Date: Sat, 25 Apr 2009 20:16:56 +0000 Subject: [PATCH] (svn r16144) -Fix (r16129): setting the custom digit grouping separator required to restart OpenTTD to take effect. Now also support non 1 ASCII character custom grouping separators. --- src/currency.cpp | 58 ++++++++++++++++++++++---------------------- src/currency.h | 2 +- src/newgrf.cpp | 3 ++- src/settings_gui.cpp | 10 +++----- src/strings.cpp | 5 +--- 5 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/currency.cpp b/src/currency.cpp index 131c9d65fc..84f76e0dd3 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -15,35 +15,35 @@ * | | Euro year | | | name * | | | | | | | */ static const CurrencySpec origin_currency_specs[NUM_CURRENCY] = { - { 1, '\0', CF_NOEURO, "\xC2\xA3", "", 0, STR_CURR_GBP }, ///< british pounds - { 2, '\0', CF_NOEURO, "$", "", 0, STR_CURR_USD }, ///< us dollars - { 2, '\0', CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_CURR_EUR }, ///< Euro - { 220, '\0', CF_NOEURO, "\xC2\xA5", "", 0, STR_CURR_YEN }, ///< yen - { 20, '\0', 2002, "", " S.", 1, STR_CURR_ATS }, ///< austrian schilling - { 59, '\0', 2002, "BEF ", "", 0, STR_CURR_BEF }, ///< belgian franc - { 2, '\0', CF_NOEURO, "CHF ", "", 0, STR_CURR_CHF }, ///< swiss franc - { 41, '\0', CF_NOEURO, "", " K\xC4\x8D", 1, STR_CURR_CZK }, ///< czech koruna - { 3, '\0', 2002, "DM ", "", 0, STR_CURR_DEM }, ///< deutsche mark - { 11, '\0', CF_NOEURO, "", " kr", 1, STR_CURR_DKK }, ///< danish krone - { 245, '\0', 2002, "Pts ", "", 0, STR_CURR_ESP }, ///< spanish pesetas - { 9, '\0', 2002, "", " mk", 1, STR_CURR_FIM }, ///< finnish markka - { 10, '\0', 2002, "FF ", "", 0, STR_CURR_FRF }, ///< french francs - { 500, '\0', 2002, "", "Dr.", 1, STR_CURR_GRD }, ///< greek drachma - { 378, '\0', CF_NOEURO, "", " Ft", 1, STR_CURR_HUF }, ///< hungarian forint - { 130, '\0', CF_NOEURO, "", " Kr", 1, STR_CURR_ISK }, ///< icelandic krona - { 2850, '\0', 2002, "", " L.", 1, STR_CURR_ITL }, ///< italian lira - { 3, '\0', 2002, "NLG ", "", 0, STR_CURR_NLG }, ///< dutch gulden - { 12, '\0', CF_NOEURO, "", " Kr", 1, STR_CURR_NOK }, ///< norwegian krone - { 6, '\0', CF_NOEURO, "", " zl", 1, STR_CURR_PLN }, ///< polish zloty - { 5, '\0', CF_NOEURO, "", " Lei", 1, STR_CURR_RON }, ///< romanian Lei - { 50, '\0', CF_NOEURO, "", " p", 1, STR_CURR_RUR }, ///< russian rouble - { 352, '\0', 2007, "", " SIT", 1, STR_CURR_SIT }, ///< slovenian tolar - { 13, '\0', CF_NOEURO, "", " Kr", 1, STR_CURR_SEK }, ///< swedish krona - { 3, '\0', CF_NOEURO, "", " TL", 1, STR_CURR_TRY }, ///< turkish lira - { 52, '\0', 2009, "", " Sk", 1, STR_CURR_SKK }, ///< slovak koruna - { 4, '\0', CF_NOEURO, "R$ ", "", 0, STR_CURR_BRL }, ///< brazil real - { 20, '\0', CF_NOEURO, "", " EEK", 1, STR_CURR_EEK }, ///< estonian krooni - { 1, '\0', CF_NOEURO, "", "", 2, STR_CURR_CUSTOM }, ///< custom currency + { 1, "", CF_NOEURO, "\xC2\xA3", "", 0, STR_CURR_GBP }, ///< british pounds + { 2, "", CF_NOEURO, "$", "", 0, STR_CURR_USD }, ///< us dollars + { 2, "", CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_CURR_EUR }, ///< Euro + { 220, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_CURR_YEN }, ///< yen + { 20, "", 2002, "", " S.", 1, STR_CURR_ATS }, ///< austrian schilling + { 59, "", 2002, "BEF ", "", 0, STR_CURR_BEF }, ///< belgian franc + { 2, "", CF_NOEURO, "CHF ", "", 0, STR_CURR_CHF }, ///< swiss franc + { 41, "", CF_NOEURO, "", " K\xC4\x8D", 1, STR_CURR_CZK }, ///< czech koruna + { 3, "", 2002, "DM ", "", 0, STR_CURR_DEM }, ///< deutsche mark + { 11, "", CF_NOEURO, "", " kr", 1, STR_CURR_DKK }, ///< danish krone + { 245, "", 2002, "Pts ", "", 0, STR_CURR_ESP }, ///< spanish pesetas + { 9, "", 2002, "", " mk", 1, STR_CURR_FIM }, ///< finnish markka + { 10, "", 2002, "FF ", "", 0, STR_CURR_FRF }, ///< french francs + { 500, "", 2002, "", "Dr.", 1, STR_CURR_GRD }, ///< greek drachma + { 378, "", CF_NOEURO, "", " Ft", 1, STR_CURR_HUF }, ///< hungarian forint + { 130, "", CF_NOEURO, "", " Kr", 1, STR_CURR_ISK }, ///< icelandic krona + { 2850, "", 2002, "", " L.", 1, STR_CURR_ITL }, ///< italian lira + { 3, "", 2002, "NLG ", "", 0, STR_CURR_NLG }, ///< dutch gulden + { 12, "", CF_NOEURO, "", " Kr", 1, STR_CURR_NOK }, ///< norwegian krone + { 6, "", CF_NOEURO, "", " zl", 1, STR_CURR_PLN }, ///< polish zloty + { 5, "", CF_NOEURO, "", " Lei", 1, STR_CURR_RON }, ///< romanian Lei + { 50, "", CF_NOEURO, "", " p", 1, STR_CURR_RUR }, ///< russian rouble + { 352, "", 2007, "", " SIT", 1, STR_CURR_SIT }, ///< slovenian tolar + { 13, "", CF_NOEURO, "", " Kr", 1, STR_CURR_SEK }, ///< swedish krona + { 3, "", CF_NOEURO, "", " TL", 1, STR_CURR_TRY }, ///< turkish lira + { 52, "", 2009, "", " Sk", 1, STR_CURR_SKK }, ///< slovak koruna + { 4, "", CF_NOEURO, "R$ ", "", 0, STR_CURR_BRL }, ///< brazil real + { 20, "", CF_NOEURO, "", " EEK", 1, STR_CURR_EEK }, ///< estonian krooni + { 1, "", CF_NOEURO, "", "", 2, STR_CURR_CUSTOM }, ///< custom currency }; /* Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index a6600e7449..2f58ce6121 100644 --- a/src/currency.h +++ b/src/currency.h @@ -17,7 +17,7 @@ enum { struct CurrencySpec { uint16 rate; - char separator; + char separator[8]; Year to_euro; char prefix[16]; char suffix[16]; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 21c39d2ddb..6ed173463f 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1717,7 +1717,8 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, by uint16 options = grf_load_word(&buf); if (curidx < NUM_CURRENCY) { - _currency_specs[curidx].separator = GB(options, 0, 8); + _currency_specs[curidx].separator[0] = GB(options, 0, 8); + _currency_specs[curidx].separator[1] = '\0'; /* By specifying only one bit, we prevent errors, * since newgrf specs said that only 0 and 1 can be set for symbol_pos */ _currency_specs[curidx].symbol_pos = GB(options, 8, 1); diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index ac3af105ab..d52ed96c6f 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1587,13 +1587,10 @@ enum CustomCurrencyWidgets { }; struct CustomCurrencyWindow : Window { - char separator[2]; int query_widget; CustomCurrencyWindow(const WindowDesc *desc) : Window(desc) { - this->separator[0] = _custom_currency.separator; - this->separator[1] = '\0'; this->FindWindowPlacementAndResize(desc); SetButtonState(); @@ -1611,7 +1608,7 @@ struct CustomCurrencyWindow : Window { { SetDParam(0, 1); SetDParam(1, 1); - SetDParamStr(2, this->separator); + SetDParamStr(2, _custom_currency.separator); SetDParamStr(3, _custom_currency.prefix); SetDParamStr(4, _custom_currency.suffix); SetDParam(5, _custom_currency.to_euro); @@ -1650,7 +1647,7 @@ struct CustomCurrencyWindow : Window { case CUSTCURR_SEPARATOR_EDIT: case CUSTCURR_SEPARATOR: - SetDParamStr(0, this->separator); + SetDParamStr(0, _custom_currency.separator); str = STR_JUST_RAW_STRING; len = 1; line = CUSTCURR_SEPARATOR; @@ -1712,8 +1709,7 @@ struct CustomCurrencyWindow : Window { break; case CUSTCURR_SEPARATOR: // Thousands seperator - _custom_currency.separator = StrEmpty(str) ? ' ' : str[0]; - strecpy(this->separator, str, lastof(this->separator)); + strecpy(_custom_currency.separator, str, lastof(_custom_currency.separator)); break; case CUSTCURR_PREFIX: diff --git a/src/strings.cpp b/src/strings.cpp index 9ba0a6e7cb..64db048c46 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -336,10 +336,7 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money n } const char *separator = _settings_game.locale.digit_group_separator_currency; - if (separator == NULL && _currency->separator != '\0') { - static char sep[] = { _currency->separator, '\0' }; - separator = sep; - } + if (separator == NULL && !StrEmpty(_currency->separator)) separator = _currency->separator; if (separator == NULL) separator = _langpack->digit_group_separator_currency; buff = FormatNumber(buff, number, last, separator); buff = strecpy(buff, multiplier, last);