1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-28 08:59:09 +00:00

(svn r18181) -Add: the concept of zero filled numbers to strgen

This commit is contained in:
rubidium
2009-11-19 13:53:54 +00:00
parent 4987d97810
commit 2f0b1ef5f1
3 changed files with 18 additions and 11 deletions

View File

@@ -185,29 +185,24 @@ void InjectDParam(uint amount)
memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint64));
}
static char *FormatNumber(char *buff, int64 number, const char *last, const char *separator)
static char *FormatNumber(char *buff, int64 number, const char *last, const char *separator, int zerofill_from = 19)
{
uint64 divisor = 10000000000000000000ULL;
uint64 quot;
int i;
uint64 tot;
uint64 num;
if (number < 0) {
buff += seprintf(buff, last, "-");
number = -number;
}
num = number;
tot = 0;
for (i = 0; i < 20; i++) {
quot = 0;
uint64 num = number;
uint64 tot = 0;
for (int i = 0; i < 20; i++) {
uint64 quot = 0;
if (num >= divisor) {
quot = num / divisor;
num = num % divisor;
}
if (tot |= quot || i == 19) {
if (tot |= quot || i >= zerofill_from) {
buff += seprintf(buff, last, "%i", (int)quot);
if ((i % 3) == 1 && i != 19) buff = strecpy(buff, separator, last);
}
@@ -232,6 +227,11 @@ static char *FormatNoCommaNumber(char *buff, int64 number, const char *last)
return FormatNumber(buff, number, last, "");
}
static char *FormatZerofillNumber(char *buff, int64 number, int64 count, const char *last)
{
return FormatNumber(buff, number, last, "", 20 - count);
}
static char *FormatHexNumber(char *buff, int64 number, const char *last)
{
return buff + seprintf(buff, last, "0x%x", (uint32)number);
@@ -839,6 +839,11 @@ static char *FormatString(char *buff, const char *str, int64 *argv, uint casei,
buff = FormatNoCommaNumber(buff, GetInt64(&argv), last);
break;
case SCC_ZEROFILL_NUM: { // {ZEROFILL_NUM}
int64 num = GetInt64(&argv);
buff = FormatZerofillNumber(buff, num, GetInt64(&argv), last);
} break;
case SCC_HEX: // {HEX}
buff = FormatHexNumber(buff, GetInt64(&argv), last);
break;