Changeset - r9543:54a9c0376831
[Not reviewed]
master
0 9 1
smatz - 16 years ago 2008-06-17 19:38:00
smatz@openttd.org
(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined
10 files changed with 74 insertions and 36 deletions:
0 comments (0 inline, 0 general)
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -997,12 +997,16 @@
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\endian_func.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\endian_type.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\engine_base.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\engine_func.h"
 
				>
projects/openttd_vs90.vcproj
Show inline comments
 
@@ -994,12 +994,16 @@
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\endian_func.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\endian_type.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\engine_base.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\engine_func.h"
 
				>
source.list
Show inline comments
 
@@ -172,12 +172,13 @@ widgets/dropdown_type.h
 
economy_func.h
 
economy_type.h
 
effectvehicle_func.h
 
effectvehicle_base.h
 
elrail_func.h
 
core/endian_func.hpp
 
core/endian_type.hpp
 
engine_base.h
 
engine_func.h
 
engine_gui.h
 
engine_type.h
 
core/enum_type.hpp
 
fiber.hpp
src/core/endian_func.hpp
Show inline comments
 
@@ -2,32 +2,17 @@
 

	
 
/** @file endian_func.hpp Function to handling different endian machines. */
 

	
 
#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)
 
	#define TO_BE32(x)   (x)
 
	#define TO_BE32X(x)  (x)
 
	#define FROM_LE16(x) BSWAP16(x)
 
@@ -43,23 +28,23 @@
 
	#define TO_BE32X(x)  BSWAP32(x)
 
	#define FROM_LE16(x) (x)
 
	#define FROM_LE32(x) (x)
 
	#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)
 
{
 
	return FROM_LE16(*(const uint16*)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 */
src/core/endian_type.hpp
Show inline comments
 
new file 100644
 
/* $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 */
src/endian_check.cpp
Show inline comments
 
@@ -9,12 +9,27 @@
 
 *  that says or TTD_LITTLE_ENDIAN, or TTD_BIG_ENDIAN. Makefile takes
 
 *  care of the real writing to the file. */
 

	
 
#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
 
 * @param argv arguments themselves
 
 * @return exit code
 
 */
 
@@ -27,28 +42,28 @@ int main (int argc, char *argv[])
 
	if (argc > 1 && strcmp(argv[1], "LE") == 0) force_LE = 1;
 
	if (argc > 1 && strcmp(argv[1], "PREPROCESSOR") == 0) force_PREPROCESSOR = 1;
 

	
 
	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");
 

	
 
	return 0;
 
}
src/minilzo.cpp
Show inline comments
 
@@ -227,15 +227,15 @@
 
#endif
 

	
 
#if defined(LZO_ALIGNED_OK_4) && (LZO_UINT32_MAX != LZO_0xffffffffL)
 
#  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)
 
#	define LZO_BYTE_ORDER	  MFX_BYTE_ORDER
 
#  elif defined(__LZO_i386)
 
#	define LZO_BYTE_ORDER	  LZO_LITTLE_ENDIAN
src/screenshot.cpp
Show inline comments
 
@@ -244,18 +244,18 @@ static bool MakePNGImage(const char *nam
 
		sig_bit.blue  = 8;
 
		sig_bit.green = 8;
 
		sig_bit.red   = 8;
 
		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 */
 
	maxlines = Clamp(65536 / w, 16, 128);
 

	
 
	/* now generate the bitmap bits */
src/sound/cocoa_s.cpp
Show inline comments
 
@@ -21,13 +21,13 @@
 
#define WindowClass OTTDWindowClass
 

	
 
#include "../stdafx.h"
 
#include "../debug.h"
 
#include "../driver.h"
 
#include "../mixer.h"
 
#include "../core/endian_func.hpp"
 
#include "../core/endian_type.hpp"
 

	
 
#include "cocoa_s.h"
 

	
 
#undef WindowClass
 
#undef Point
 
#undef Rect
 
@@ -58,15 +58,15 @@ const char *SoundDriver_Cocoa::Start(con
 
	requestedDesc.mChannelsPerFrame = 2;
 
	requestedDesc.mSampleRate = GetDriverParamInt(parm, "hz", 11025);
 

	
 
	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;
 
	requestedDesc.mBytesPerPacket = requestedDesc.mBytesPerFrame * requestedDesc.mFramesPerPacket;
 

	
 

	
src/strings.cpp
Show inline comments
 
@@ -1248,17 +1248,17 @@ bool ReadLanguagePack(int lang_index)
 
			lang_pack->ident != TO_LE32(LANGUAGE_PACK_IDENT) ||
 
			lang_pack->version != TO_LE32(LANGUAGE_PACK_VERSION)) {
 
		free(lang_pack);
 
		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++) {
 
		uint num = lang_pack->offsets[i];
 
		_langtab_start[i] = tot_count;
 
		_langtab_num[i] = num;
0 comments (0 inline, 0 general)