⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swap.h

📁 ecos下的gui开发源代码
💻 H
字号:
/* * Copyright (c) 2001, 2003 Greg Haerr <greg@censoft.com> * Copyright (c) 2003 Jon Foster <jon@jon-foster.co.uk> * * Byte and word swapping header file for big/little endian mapping * * Currently defined platforms: *	linux *	__FreeBSD__ *	__ECOS *	__CYGWIN__ *	TRIMEDIA */#ifndef MW_SWAP_H_INCLUDED#define MW_SWAP_H_INCLUDED/* ********************************************************************* *//* First, the default (portable) implementation.                         *//* ********************************************************************* */#if !MW_CPU_BIG_ENDIAN/* little endian - no action required */# define wswap(x)	(x)# define dwswap(x)	(x)#else/** Convert little-endian 16-bit number to the host CPU format. */# define wswap(x)	((((x) << 8) & 0xff00) | (((x) >> 8) & 0x00ff))/** Convert little-endian 32-bit number to the host CPU format. */# define dwswap(x)	((((x) << 24) & 0xff000000L) | \			 (((x) <<  8) & 0x00ff0000L) | \			 (((x) >>  8) & 0x0000ff00L) | \			 (((x) >> 24) & 0x000000ffL) )#endif/** * Read little endian format 32-bit number from buffer, possibly not * aligned, and convert to the host CPU format. */#define dwread(addr)	((((unsigned char *)(addr))[0] | \			 (((unsigned char *)(addr))[1] << 8) | \			 (((unsigned char *)(addr))[2] << 16) | \			 (((unsigned char *)(addr))[3] << 24)))/* ********************************************************************* *//* Now, some platform-specific optimized macros.                         *//* ********************************************************************* *//* ********************************************************************* *//* Linux                                                                 *//* ********************************************************************* */#ifdef linux# include <endian.h># if __BYTE_ORDER == __BIG_ENDIAN#  if !MW_CPU_BIG_ENDIAN#   error MW_CPU_BIG_ENDIAN and your OS disagree about your CPUs byte-order.  Did you forget to set BIGENDIAN in the config file?#  endif#  undef wswap#  undef dwswap#  include <byteswap.h>#  define wswap(x)	bswap_16(x)#  define dwswap(x)	bswap_32(x)# else#  if MW_CPU_BIG_ENDIAN#   error MW_CPU_BIG_ENDIAN and your OS disagree about your CPUs byte-order.  Did you accidentally set BIGENDIAN in the config file?#  endif# endif /* !__BYTE_ORDER == __BIG_ENDIAN*//* ********************************************************************* *//* FreeBSD                                                               *//* ********************************************************************* */#elif defined(__FreeBSD__)# include <machine/endian.h># if __BYTE_ORDER == __BIG_ENDIAN#  if !MW_CPU_BIG_ENDIAN#   error MW_CPU_BIG_ENDIAN and your OS disagree about your CPUs byte-order.  Did you forget to set BIGENDIAN in the config file?#  endif#  ifndef __byte_swap_word/* Either this isn't GCC or the implementation changed. */#   warning __byte_swap_word not defined in endian.h on FreeBSD.#  else#   undef wswap#   undef dwswap#   define wswap(x)	__byte_swap_word(x)#   define dwswap(x)	__byte_swap_long(x)#  endif /* ifndef __byte_swap_word*/# else#  if MW_CPU_BIG_ENDIAN#   error MW_CPU_BIG_ENDIAN and your OS disagree about your CPUs byte-order.  Did you accidentally set BIGENDIAN in the config file?#  endif# endif /* !__BYTE_ORDER == __BIG_ENDIAN*//* ********************************************************************* *//* ECOS                                                                  *//* ********************************************************************* */#elif __ECOS# undef wswap# undef dwswap# include <machine/endian.h># define wswap(x)	letoh16(x)# define dwswap(x)	letoh32(x)/* end __ECOS*//* ********************************************************************* *//* Cygwin (on Win32)                                                     *//* ********************************************************************* */#elif defined(__CYGWIN__)/* Cygwin only works on Win32 on x86.  Therefore it is always little-endian */# if MW_CPU_BIG_ENDIAN#  error MW_CPU_BIG_ENDIAN and your OS disagree about your CPUs byte-order.  Did you accidentally set BIGENDIAN in the config file?# endif/* x86 processors can do unaligned reads without problems (although * they're not optimal). */# undef dwread# define dwread(addr)	(*(unsigned int *)(addr))/* end __CYGWIN__*//* ********************************************************************* *//* TriMedia/pSOS                                                         *//* ********************************************************************* */#elif defined(TRIMEDIA)/* The default implementation will be fine for now. *//* ********************************************************************* *//* Other                                                                 *//* ********************************************************************* */#else/* If the following warning appears when you compile, then you have two options: * 1) Add detection for your platform, possibly with more optimized macros. * 2) Just comment out the warning.  If you have performance problems with *    BMP files and PCF fonts, you'll need to do (1). */# warning You might want to define optimized byte swapping macros for this machine - if not, you can safely ignore this warning.#endif#endif /* ndef MW_SWAP_H_INCLUDED */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -