mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-13 02:52:35 +01:00
add comma2dp and currency formatting
This commit is contained in:
173
src/string_ids.c
173
src/string_ids.c
@@ -1150,6 +1150,170 @@ void format_comma_separated_integer(char **dest, int value)
|
|||||||
*dest = finish;
|
*dest = finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void format_comma_separated_fixed_2dp(char **dest, int value)
|
||||||
|
{
|
||||||
|
int digit, groupIndex;
|
||||||
|
char *dst = *dest;
|
||||||
|
char *finish;
|
||||||
|
char tmp;
|
||||||
|
|
||||||
|
// Negative sign
|
||||||
|
if (value < 0) {
|
||||||
|
*dst++ = '-';
|
||||||
|
value = -value;
|
||||||
|
}
|
||||||
|
|
||||||
|
*dest = dst;
|
||||||
|
|
||||||
|
// Two decimal places
|
||||||
|
digit = value % 10;
|
||||||
|
value /= 10;
|
||||||
|
*dst++ = '0' + digit;
|
||||||
|
digit = value % 10;
|
||||||
|
value /= 10;
|
||||||
|
*dst++ = '0' + digit;
|
||||||
|
*dst++ = '.';
|
||||||
|
|
||||||
|
if (value == 0) {
|
||||||
|
*dst++ = '0';
|
||||||
|
} else {
|
||||||
|
// Groups of three digits, right to left
|
||||||
|
groupIndex = 0;
|
||||||
|
while (value > 0) {
|
||||||
|
// Append group seperator
|
||||||
|
if (groupIndex == 3) {
|
||||||
|
groupIndex = 0;
|
||||||
|
*dst++ = ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
digit = value % 10;
|
||||||
|
value /= 10;
|
||||||
|
|
||||||
|
*dst++ = '0' + digit;
|
||||||
|
groupIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finish = dst;
|
||||||
|
|
||||||
|
// Reverse string
|
||||||
|
dst--;
|
||||||
|
while (*dest < dst) {
|
||||||
|
tmp = **dest;
|
||||||
|
**dest = *dst;
|
||||||
|
*dst = tmp;
|
||||||
|
(*dest)++;
|
||||||
|
dst--;
|
||||||
|
}
|
||||||
|
*dest = finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
void format_currency(char **dest, int value)
|
||||||
|
{
|
||||||
|
int digit, groupIndex;
|
||||||
|
char *dst = *dest;
|
||||||
|
char *finish;
|
||||||
|
char tmp;
|
||||||
|
|
||||||
|
// Negative sign
|
||||||
|
if (value < 0) {
|
||||||
|
*dst++ = '-';
|
||||||
|
value = -value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Currency symbol
|
||||||
|
*dst++ = '<EFBFBD>';
|
||||||
|
|
||||||
|
*dest = dst;
|
||||||
|
|
||||||
|
// Groups of three digits, right to left
|
||||||
|
groupIndex = 0;
|
||||||
|
while (value > 0) {
|
||||||
|
// Append group seperator
|
||||||
|
if (groupIndex == 3) {
|
||||||
|
groupIndex = 0;
|
||||||
|
*dst++ = ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
digit = value % 10;
|
||||||
|
value /= 10;
|
||||||
|
|
||||||
|
*dst++ = '0' + digit;
|
||||||
|
groupIndex++;
|
||||||
|
}
|
||||||
|
finish = dst;
|
||||||
|
|
||||||
|
// Reverse string
|
||||||
|
dst--;
|
||||||
|
while (*dest < dst) {
|
||||||
|
tmp = **dest;
|
||||||
|
**dest = *dst;
|
||||||
|
*dst = tmp;
|
||||||
|
(*dest)++;
|
||||||
|
dst--;
|
||||||
|
}
|
||||||
|
*dest = finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
void format_currency_2dp(char **dest, int value)
|
||||||
|
{
|
||||||
|
int digit, groupIndex;
|
||||||
|
char *dst = *dest;
|
||||||
|
char *finish;
|
||||||
|
char tmp;
|
||||||
|
|
||||||
|
// Negative sign
|
||||||
|
if (value < 0) {
|
||||||
|
*dst++ = '-';
|
||||||
|
value = -value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Currency symbol
|
||||||
|
*dst++ = '<EFBFBD>';
|
||||||
|
|
||||||
|
*dest = dst;
|
||||||
|
|
||||||
|
// Two decimal places
|
||||||
|
digit = value % 10;
|
||||||
|
value /= 10;
|
||||||
|
*dst++ = '0' + digit;
|
||||||
|
digit = value % 10;
|
||||||
|
value /= 10;
|
||||||
|
*dst++ = '0' + digit;
|
||||||
|
*dst++ = '.';
|
||||||
|
|
||||||
|
if (value == 0) {
|
||||||
|
*dst++ = '0';
|
||||||
|
} else {
|
||||||
|
// Groups of three digits, right to left
|
||||||
|
groupIndex = 0;
|
||||||
|
while (value > 0) {
|
||||||
|
// Append group seperator
|
||||||
|
if (groupIndex == 3) {
|
||||||
|
groupIndex = 0;
|
||||||
|
*dst++ = ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
digit = value % 10;
|
||||||
|
value /= 10;
|
||||||
|
|
||||||
|
*dst++ = '0' + digit;
|
||||||
|
groupIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finish = dst;
|
||||||
|
|
||||||
|
// Reverse string
|
||||||
|
dst--;
|
||||||
|
while (*dest < dst) {
|
||||||
|
tmp = **dest;
|
||||||
|
**dest = *dst;
|
||||||
|
*dst = tmp;
|
||||||
|
(*dest)++;
|
||||||
|
dst--;
|
||||||
|
}
|
||||||
|
*dest = finish;
|
||||||
|
}
|
||||||
|
|
||||||
void format_string_code(unsigned char format_code, char **dest, char **args)
|
void format_string_code(unsigned char format_code, char **dest, char **args)
|
||||||
{
|
{
|
||||||
int value;
|
int value;
|
||||||
@@ -1174,8 +1338,7 @@ void format_string_code(unsigned char format_code, char **dest, char **args)
|
|||||||
value = *((sint32*)*args);
|
value = *((sint32*)*args);
|
||||||
*args += 4;
|
*args += 4;
|
||||||
|
|
||||||
// TODO
|
format_comma_separated_fixed_2dp(dest, value);
|
||||||
printf("TODO: FORMAT_COMMA2DP32\n");
|
|
||||||
break;
|
break;
|
||||||
case FORMAT_COMMA16:
|
case FORMAT_COMMA16:
|
||||||
// Pop argument
|
// Pop argument
|
||||||
@@ -1196,16 +1359,14 @@ void format_string_code(unsigned char format_code, char **dest, char **args)
|
|||||||
value = *((sint32*)*args);
|
value = *((sint32*)*args);
|
||||||
*args += 4;
|
*args += 4;
|
||||||
|
|
||||||
// TODO
|
format_currency_2dp(dest, value);
|
||||||
printf("TODO: FORMAT_CURRENCY2DP\n");
|
|
||||||
break;
|
break;
|
||||||
case FORMAT_CURRENCY:
|
case FORMAT_CURRENCY:
|
||||||
// Pop argument
|
// Pop argument
|
||||||
value = *((sint32*)*args);
|
value = *((sint32*)*args);
|
||||||
*args += 4;
|
*args += 4;
|
||||||
|
|
||||||
// TODO
|
format_currency(dest, value);
|
||||||
printf("TODO: FORMAT_CURRENCY\n");
|
|
||||||
break;
|
break;
|
||||||
case FORMAT_STRINGID:
|
case FORMAT_STRINGID:
|
||||||
case FORMAT_STRINGID2:
|
case FORMAT_STRINGID2:
|
||||||
|
|||||||
Reference in New Issue
Block a user