summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2010-04-06 23:45:10 +0000
committeryexo <yexo@openttd.org>2010-04-06 23:45:10 +0000
commit705955b1e6b8d37866ead88e11aa996d10202665 (patch)
tree4349a888b7c1578aa42c5d18b1b4697dc4d261c4
parentfaf5e19aaedfa5ec70ddde2ba7be60909899616a (diff)
downloadopenttd-705955b1e6b8d37866ead88e11aa996d10202665.tar.xz
(svn r19570) -Add: [NewGRF] support for extended text code 0x9A 11, print qword
-rw-r--r--src/newgrf_text.cpp5
-rw-r--r--src/stdafx.h2
-rw-r--r--src/strings.cpp6
-rw-r--r--src/table/control_codes.h1
4 files changed, 11 insertions, 3 deletions
diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp
index a564e1917..8042fd042 100644
--- a/src/newgrf_text.cpp
+++ b/src/newgrf_text.cpp
@@ -291,6 +291,9 @@ char *TranslateTTDPatchCodes(uint32 grfid, const char *str)
case 8:
d += Utf8Encode(d, SCC_NEWGRF_PRINT_HEX_DWORD);
break;
+ case 0x0B:
+ d += Utf8Encode(d, SCC_NEWGRF_PRINT_HEX_QWORD);
+ break;
default:
grfmsg(1, "missing handler for extended format code");
@@ -650,6 +653,7 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const
case SCC_NEWGRF_PRINT_HEX_BYTE: *argv = _newgrf_textrefstack->PopUnsignedByte(); break;
case SCC_NEWGRF_PRINT_HEX_DWORD: *argv = _newgrf_textrefstack->PopUnsignedDWord(); break;
+ case SCC_NEWGRF_PRINT_HEX_QWORD: *argv = _newgrf_textrefstack->PopSignedQWord(); break;
case SCC_NEWGRF_PRINT_HEX_WORD:
case SCC_NEWGRF_PRINT_WORD_SPEED:
@@ -682,6 +686,7 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const
case SCC_NEWGRF_PRINT_HEX_BYTE:
case SCC_NEWGRF_PRINT_HEX_WORD:
case SCC_NEWGRF_PRINT_HEX_DWORD:
+ case SCC_NEWGRF_PRINT_HEX_QWORD:
return SCC_HEX;
case SCC_NEWGRF_PRINT_DWORD_CURRENCY:
diff --git a/src/stdafx.h b/src/stdafx.h
index fdbc81e73..854282b6c 100644
--- a/src/stdafx.h
+++ b/src/stdafx.h
@@ -276,9 +276,11 @@
/* MSVCRT of course has to have a different syntax for long long *sigh* */
#if defined(_MSC_VER) || defined(__MINGW32__)
#define OTTD_PRINTF64 "%I64d"
+ #define OTTD_PRINTFHEX64 "%I64x"
#define PRINTF_SIZE "%Iu"
#else
#define OTTD_PRINTF64 "%lld"
+ #define OTTD_PRINTFHEX64 "%llx"
#define PRINTF_SIZE "%zu"
#endif
diff --git a/src/strings.cpp b/src/strings.cpp
index 0d8b48eaf..d063a34a6 100644
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -233,9 +233,9 @@ static char *FormatZerofillNumber(char *buff, int64 number, int64 count, const c
return FormatNumber(buff, number, last, "", 20 - count);
}
-static char *FormatHexNumber(char *buff, int64 number, const char *last)
+static char *FormatHexNumber(char *buff, uint64 number, const char *last)
{
- return buff + seprintf(buff, last, "0x%x", (uint32)number);
+ return buff + seprintf(buff, last, "0x" OTTD_PRINTFHEX64, number);
}
/**
@@ -859,7 +859,7 @@ static char *FormatString(char *buff, const char *str, int64 *argv, uint casei,
} break;
case SCC_HEX: // {HEX}
- buff = FormatHexNumber(buff, GetInt64(&argv), last);
+ buff = FormatHexNumber(buff, (uint64)GetInt64(&argv), last);
break;
case SCC_BYTES: // {BYTES}
diff --git a/src/table/control_codes.h b/src/table/control_codes.h
index 38c7f6362..29ad80b26 100644
--- a/src/table/control_codes.h
+++ b/src/table/control_codes.h
@@ -123,6 +123,7 @@ enum StringControlCode {
SCC_NEWGRF_PRINT_HEX_BYTE, ///< Read 1 byte from the stack and print it as hex
SCC_NEWGRF_PRINT_HEX_WORD, ///< Read 2 bytes from the stack and print it as hex
SCC_NEWGRF_PRINT_HEX_DWORD, ///< Read 4 bytes from the stack and print it as hex
+ SCC_NEWGRF_PRINT_HEX_QWORD, ///< Read 8 bytes from the stack and print it as hex
SCC_NEWGRF_PUSH_WORD, ///< Pushes 2 bytes onto the stack
SCC_NEWGRF_UNPRINT, ///< "Unprints" the given number of bytes from the string
SCC_NEWGRF_DISCARD_WORD, ///< Discard the next two bytes