/*
* Copyright (c) 2001 Dan Gudmundsson
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* $Id: esdl_conv.h,v 1.3 2005/06/29 14:45:38 dgud Exp $
*/
/***************************
Some Macros to the byte conversion
between the byte buffer and real types.
This code is borrowed from the erl_interface
file putget.h
****************************/
#ifdef __cplusplus
extern "C" {
#endif
#ifndef BYTECONV_H
#define BYTECONV_H
#ifndef FLAVOUR_WOGGLE
#include <SDL_byteorder.h>
#endif
#define put8(s,n) do { \
(s)[0] = (char)((n) & 0xff); \
(s) += 1; \
} while (0)
#define put16le(s,n) do { \
(s)[0] = (n) & 0xff; \
(s)[1] = ((n) >> 8) & 0xff; \
(s) += 2; \
} while (0) \
#define put32le(s,n) do { \
(s)[0] = (n) & 0xff; \
(s)[1] = ((n) >> 8) & 0xff; \
(s)[2] = ((n) >> 16) & 0xff; \
(s)[3] = ((n) >> 24) & 0xff; \
(s) += 4; \
} while (0)
#define put16be(s,n) do { \
(s)[0] = ((n) >> 8) & 0xff; \
(s)[1] = (n) & 0xff; \
(s) += 2; \
} while (0)
#define put32be(s,n) do { \
(s)[0] = ((n) >> 24) & 0xff; \
(s)[1] = ((n) >> 16) & 0xff; \
(s)[2] = ((n) >> 8) & 0xff; \
(s)[3] = (n) & 0xff; \
(s) += 4; \
} while (0)
#define get8(s) \
((s) += 1, \
((unsigned char *)(s))[-1] & 0xff)
#define get16le(s) \
((s) += 2, \
(((((unsigned char *)(s))[-1] << 8) | \
((unsigned char *)(s))[-2])) & 0xffff)
#define get32le(s) \
((s) += 4, \
((((unsigned char *)(s))[-1] << 24) | \
(((unsigned char *)(s))[-2] << 16) | \
(((unsigned char *)(s))[-3] << 8) | \
((unsigned char *)(s))[-4]))
#define get16be(s) \
((s) += 2, \
(((((unsigned char *)(s))[-2] << 8) | \
((unsigned char *)(s))[-1])) & 0xffff)
#define get32be(s) \
((s) += 4, \
((((unsigned char *)(s))[-4] << 24) | \
(((unsigned char *)(s))[-3] << 16) | \
(((unsigned char *)(s))[-2] << 8) | \
((unsigned char *)(s))[-1]))
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
#define putFloat32be(s,n) do { \
unsigned char * t = (unsigned char *) &n; \
(s)[0] = t[0]; \
(s)[1] = t[1];\
(s)[2] = t[2];\
(s)[3] = t[3];\
(s) += 4; \
} while (0)
#define putFloat64be(s,n) do { \
unsigned char * t = (unsigned char *) &n; \
(s)[0] = t[0]; \
(s)[1] = t[1]; \
(s)[2] = t[2]; \
(s)[3] = t[3]; \
(s)[4] = t[4]; \
(s)[5] = t[5]; \
(s)[6] = t[6]; \
(s)[7] = t[7]; \
(s) += 8; \
} while (0)
#else
#define putFloat32be(s,n) do { \
unsigned char * t = (unsigned char *) &n; \
(s)[3] = t[0];\
(s)[2] = t[1];\
(s)[1] = t[2];\
(s)[0] = t[3];\
(s) += 4; \
} while (0)
#define putFloat64be(s,n) do { \
unsigned char * t = (unsigned char *) &n; \
(s)[7] = t[0]; \
(s)[6] = t[1]; \
(s)[5] = t[2]; \
(s)[4] = t[3]; \
(s)[3] = t[4]; \
(s)[2] = t[5]; \
(s)[1] = t[6]; \
(s)[0] = t[7]; \
(s) += 8; \
} while (0)
#endif
#endif
#ifdef __cplusplus
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1