summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-06-17 19:38:00 +0000
committersmatz <smatz@openttd.org>2008-06-17 19:38:00 +0000
commit9da745b38110bc827ff6b5d5c9c3c9bf928c2335 (patch)
treeb271027ea798874acb1d7592eb84626b079887e9 /src
parentdedb0033b3647d795a23118a22f227d7af33960d (diff)
downloadopenttd-9da745b38110bc827ff6b5d5c9c3c9bf928c2335.tar.xz
(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined
Diffstat (limited to 'src')
-rw-r--r--src/core/endian_func.hpp25
-rw-r--r--src/core/endian_type.hpp29
-rw-r--r--src/endian_check.cpp27
-rw-r--r--src/minilzo.cpp6
-rw-r--r--src/screenshot.cpp4
-rw-r--r--src/sound/cocoa_s.cpp6
-rw-r--r--src/strings.cpp4
7 files changed, 65 insertions, 36 deletions
diff --git a/src/core/endian_func.hpp b/src/core/endian_func.hpp
index 71b81059c..9032b4cef 100644
--- a/src/core/endian_func.hpp
+++ b/src/core/endian_func.hpp
@@ -5,26 +5,11 @@
#ifndef ENDIAN_FUNC_H
#define ENDIAN_FUNC_H
+#include "endian_type.hpp"
#include "bitmath_func.hpp"
-#if defined(ARM) || defined(__arm__) || defined(__alpha__)
- #define OTTD_ALIGNMENT
-#endif
-
-/* Windows has always LITTLE_ENDIAN */
-#if defined(WIN32) || defined(__OS2__) || defined(WIN64)
- #define TTD_LITTLE_ENDIAN
-#elif !defined(TESTING)
- /* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
- #if defined(STRGEN)
- #include "endian_host.h"
- #else
- #include "endian_target.h"
- #endif
-#endif /* WIN32 || __OS2__ || WIN64 */
-
/* Setup alignment and conversion macros */
-#if defined(TTD_BIG_ENDIAN)
+#if TTD_ENDIAN == TTD_BIG_ENDIAN
#define FROM_BE16(x) (x)
#define FROM_BE32(x) (x)
#define TO_BE16(x) (x)
@@ -46,7 +31,7 @@
#define TO_LE16(x) (x)
#define TO_LE32(x) (x)
#define TO_LE32X(x) (x)
-#endif /* TTD_BIG_ENDIAN */
+#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
static inline uint16 ReadLE16Aligned(const void *x)
{
@@ -55,11 +40,11 @@ static inline uint16 ReadLE16Aligned(const void *x)
static inline uint16 ReadLE16Unaligned(const void *x)
{
-#ifdef OTTD_ALIGNMENT
+#if OTTD_ALIGNMENT == 1
return ((const byte*)x)[0] | ((const byte*)x)[1] << 8;
#else
return FROM_LE16(*(const uint16*)x);
-#endif
+#endif /* OTTD_ALIGNMENT == 1 */
}
#endif /* ENDIAN_FUNC_HPP */
diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp
new file mode 100644
index 000000000..e8dc9ea0c
--- /dev/null
+++ b/src/core/endian_type.hpp
@@ -0,0 +1,29 @@
+/* $Id$ */
+
+/** @file endian_type.hpp Definition of various endian-dependant macros. */
+
+#ifndef ENDIAN_TYPE_H
+#define ENDIAN_TYPE_H
+
+#if defined(ARM) || defined(__arm__) || defined(__alpha__)
+ #define OTTD_ALIGNMENT 1
+#else
+ #define OTTD_ALIGNMENT 0
+#endif
+
+#define TTD_LITTLE_ENDIAN 0
+#define TTD_BIG_ENDIAN 1
+
+/* Windows has always LITTLE_ENDIAN */
+#if defined(WIN32) || defined(__OS2__) || defined(WIN64)
+ #define TTD_ENDIAN TTD_LITTLE_ENDIAN
+#elif !defined(TESTING)
+ /* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
+ #if defined(STRGEN)
+ #include "endian_host.h"
+ #else
+ #include "endian_target.h"
+ #endif
+#endif /* WIN32 || __OS2__ || WIN64 */
+
+#endif /* ENDIAN_TYPE_HPP */
diff --git a/src/endian_check.cpp b/src/endian_check.cpp
index 27769aa54..e70c2adc8 100644
--- a/src/endian_check.cpp
+++ b/src/endian_check.cpp
@@ -12,6 +12,21 @@
#include <stdio.h>
#include <string.h>
+/** Supported endian types */
+enum Endian {
+ ENDIAN_LITTLE, ///< little endian
+ ENDIAN_BIG ///< big endian
+};
+
+/**
+ * Shortcut to printf("#define TTD_*_ENDIAN 0/1")
+ * @param endian endian type to define
+ */
+static inline void printf_endian(Endian endian)
+{
+ printf("#define TTD_ENDIAN %s\n", endian == ENDIAN_LITTLE ? "TTD_LITTLE_ENDIAN" : "TTD_BIG_ENDIAN");
+}
+
/**
* Main call of the endian_check program
* @param argc argument count
@@ -30,23 +45,23 @@ int main (int argc, char *argv[])
printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
if (force_LE == 1) {
- printf("#define TTD_LITTLE_ENDIAN\n");
+ printf_endian(ENDIAN_LITTLE);
} else if (force_BE == 1) {
- printf("#define TTD_BIG_ENDIAN\n");
+ printf_endian(ENDIAN_BIG);
} else if (force_PREPROCESSOR == 1) {
/* Support for universal binaries on OSX
* Universal binaries supports both PPC and x86
* If a compiler for OSX gets this setting, it will always pick the correct endian and no test is needed
*/
printf("#ifdef __BIG_ENDIAN__\n");
- printf("#define TTD_BIG_ENDIAN\n");
+ printf_endian(ENDIAN_BIG);
printf("#else\n");
- printf("#define TTD_LITTLE_ENDIAN\n");
+ printf_endian(ENDIAN_LITTLE);
printf("#endif\n");
} else if (*(short*)endian_test == 1 ) {
- printf("#define TTD_LITTLE_ENDIAN\n");
+ printf_endian(ENDIAN_LITTLE);
} else {
- printf("#define TTD_BIG_ENDIAN\n");
+ printf_endian(ENDIAN_BIG);
}
printf("#endif\n");
diff --git a/src/minilzo.cpp b/src/minilzo.cpp
index 67cfa2b89..d28b37f8c 100644
--- a/src/minilzo.cpp
+++ b/src/minilzo.cpp
@@ -230,9 +230,9 @@
# error "LZO_ALIGNED_OK_4 must not be defined on this system"
#endif
-#define LZO_LITTLE_ENDIAN 1234
-#define LZO_BIG_ENDIAN 4321
-#define LZO_PDP_ENDIAN 3412
+#define LZO_LITTLE_ENDIAN 1234
+#define LZO_BIG_ENDIAN 4321
+#define LZO_PDP_ENDIAN 3412
#if !defined(LZO_BYTE_ORDER)
# if defined(MFX_BYTE_ORDER)
diff --git a/src/screenshot.cpp b/src/screenshot.cpp
index 49fe7894b..1282c76c4 100644
--- a/src/screenshot.cpp
+++ b/src/screenshot.cpp
@@ -247,12 +247,12 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
sig_bit.gray = 8;
png_set_sBIT(png_ptr, info_ptr, &sig_bit);
-#ifdef TTD_LITTLE_ENDIAN
+#if TTD_ENDIAN == TTD_LITTLE_ENDIAN
png_set_bgr(png_ptr);
png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
#else
png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-#endif
+#endif /* TTD_ENDIAN == TTD_LITTLE_ENDIAN */
}
/* use by default 64k temp memory */
diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp
index 9921cb0cf..7e315fb75 100644
--- a/src/sound/cocoa_s.cpp
+++ b/src/sound/cocoa_s.cpp
@@ -24,7 +24,7 @@
#include "../debug.h"
#include "../driver.h"
#include "../mixer.h"
-#include "../core/endian_func.hpp"
+#include "../core/endian_type.hpp"
#include "cocoa_s.h"
@@ -61,9 +61,9 @@ const char *SoundDriver_Cocoa::Start(const char * const *parm)
requestedDesc.mBitsPerChannel = 16;
requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger;
-#ifdef TTD_BIG_ENDIAN
+#if TTD_ENDIAN == TTD_BIG_ENDIAN
requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
-#endif
+#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
requestedDesc.mFramesPerPacket = 1;
requestedDesc.mBytesPerFrame = requestedDesc.mBitsPerChannel * requestedDesc.mChannelsPerFrame / 8;
diff --git a/src/strings.cpp b/src/strings.cpp
index 1597b87f1..26eb31fc8 100644
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -1251,11 +1251,11 @@ bool ReadLanguagePack(int lang_index)
return false;
}
-#if defined(TTD_BIG_ENDIAN)
+#if TTD_ENDIAN == TTD_BIG_ENDIAN
for (i = 0; i != 32; i++) {
lang_pack->offsets[i] = ReadLE16Aligned(&lang_pack->offsets[i]);
}
-#endif
+#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
tot_count = 0;
for (i = 0; i != 32; i++) {