/** @file uemf_endian.h @brief Defintions and prototype for function for converting EMF records between Big Endian and Little Endian byte orders. */ /* File: uemf_endian.h Version: 0.0.4 Date: 24-MAR-2015 Author: David Mathog, Biology Division, Caltech email: mathog@caltech.edu Copyright: 2015 David Mathog and California Institute of Technology (Caltech) */ #ifndef _UEMF_ENDIAN_ #define _UEMF_ENDIAN_ #ifdef __cplusplus extern "C" { #endif /** \defgroup U_Endian Byte order identification There is no way for the preprocessor, in general, to figure out endianness. So the command line must define WORDS_BIGENDIAN for a big endian machine. Otherwise we assume is is little endian. If it is something else this code won't work in any case. @{ */ #ifdef WORDS_BIGENDIAN #define U_BYTE_SWAP 1 //!< byte swapping into metafile is required #define U_IS_BE 1 //!< this machine is big endian #define U_IS_LE 0 //!< this machine is not little endian #else #define U_BYTE_SWAP 0 //!< byte swapping into metafile is not required #define U_IS_BE 0 //!< this machine is not big endian #define U_IS_LE 1 //!< this machine is little endian #endif #define U_XE 0 //!< do not rearrange endian for target #define U_LE 1 //!< target is Little Endian #define U_BE 2 //!< target is Big Endian #define U_RP 4 //!< replicate first instance #define U_XX 0xFF //!< may be used to terminate a list of these target entries /** @} */ //! \cond // prototypes int U_emf_endian(char *contents, size_t length, int torev); int U_emf_record_sizeok(const char *record, const char *blimit, uint32_t *nSize, uint32_t *iType, int torev); //! \endcond #ifdef __cplusplus } #endif #endif /* _UEMF_ENDIAN_ */