/* byte-order functions */ /* August 29, 2006 - Jon Mayo - PUBLIC DOMAIN */ #ifndef BO_H #define BO_H /* used for making temp variables in macros */ #define make_name2(x,y) x##y #define make_name(x,y) make_name2(x,y) #define var(x) make_name(x,__LINE__) /* WRite Little-Endian 32-bit value */ #define WR_LE32(dest, offset, value) do { \ unsigned var(tmp)=value; \ (dest)[offset]=var(tmp)%256; \ (dest)[(offset)+1]=(var(tmp)/256)%256; \ (dest)[(offset)+2]=(var(tmp)/65536L)%256; \ (dest)[(offset)+3]=(var(tmp)/16777216L)%256; \ } while(0) /* WRite Little-Endian 16-bit value */ #define WR_LE16(dest, offset, value) do { \ unsigned var(tmp)=value; \ (dest)[offset]=var(tmp)%256; \ (dest)[(offset)+1]=(var(tmp)/256)%256; \ } while(0) /* WRite Big-Endian 32-bit value */ #define WR_BE32(dest, offset, value) do { \ unsigned var(tmp)=value; \ (dest)[offset]=(var(tmp)/16777216L)%256; \ (dest)[(offset)+1]=(var(tmp)/65536L)%256; \ (dest)[(offset)+2]=(var(tmp)/256)%256; \ (dest)[(offset)+3]=var(tmp)%256; \ } while(0) /* WRite Big-Endian 16-bit value */ #define WR_BE16(dest, offset, value) do { \ unsigned var(tmp)=value; \ (dest)[offset]=(var(tmp)/256)%256; \ (dest)[(offset)+1]=var(tmp)%256; \ } while(0) /* ReaD Big-Endian 16-bit value */ #define RD_BE16(src, offset) (((src)[offset]*256)|(src)[(offset)+1]) /* ReaD Big-Endian 32-bit value */ #define RD_BE32(src, offset) (((src)[offset]*16777216L)|((src)[(offset)+1]*65536L)|((src)[(offset)+2]*256)|(src)[(offset)+3]) #endif