#if (!defined(__DPTALIGN_H))
#define __DPTALIGN_H
#if (!defined(__FAR__))
# if (defined(__BORLANDC__))
# define __FAR__ far
# else
# define __FAR__
# endif
#endif
#if (defined(sun)) && (!defined(_ILP32))
# define DPT_4_BYTES int
#else
# define DPT_4_BYTES long
#endif
#if (!defined(osdSwap2))
# define osdSwap2(x) (((unsigned short)(x) >> 8) \
| ((unsigned short)((unsigned char)(x)) << 8))
#endif
#if (!defined(osdSwap4))
# define osdSwap4(x) ( \
(((unsigned DPT_4_BYTES)(x)) >> 24L) \
| ((unsigned DPT_4_BYTES)(((unsigned short)((unsigned DPT_4_BYTES)(x) >> 8L)) & 0xFF00)) \
| (((unsigned DPT_4_BYTES)(((unsigned short)(x)) & 0xFF00)) << 8L) \
| (((unsigned DPT_4_BYTES)((unsigned char)(x))) << 24L))
#endif
#if (!defined(osdLocal2))
# if (defined(_DPT_BIG_ENDIAN))
# define osdLocal2(x) (*((unsigned short __FAR__ *)(x)))
# if (defined(osdSwap2))
# define osdSLocal2(x) osdSwap2(osdLocal2(x))
# else
# define osdSLocal2(x) ((unsigned short)(((unsigned char __FAR__ *)(x))[1])\
+ ((unsigned int)((unsigned short)(((unsigned char __FAR__ *)(x))[0])) << 8))
# endif
# else
# define osdSLocal2(x) (*((unsigned short __FAR__ *)(x)))
# if (defined(osdSwap2))
# define osdLocal2(x) osdSwap2(osdSLocal2(x))
# else
# define osdLocal2(x) ((unsigned short)(((unsigned char __FAR__*)(x))[1]) \
+ (((unsigned short)(((unsigned char __FAR__*)(x))[0])) << 8))
# endif
# endif
#endif
#if (!defined(osdLocal3))
# if (defined(_DPT_BIG_ENDIAN))
# define osdLocal3(x) (*((unsigned DPT_4_BYTES __FAR__ *)(x)))
# else
# if (defined(osdSwap3))
# define osdLocal3(x) osdSwap3(*((unsigned DPT_4_BYTES __FAR__ *)(x)))
# else
# define osdLocal3(x) ((unsigned DPT_4_BYTES)osdLocal2(((unsigned char __FAR__ *) \
(x)+1)) + (((unsigned DPT_4_BYTES)(((unsigned char __FAR__ *)(x))[0])) << 16))
# endif
# endif
#endif
#if (!defined(osdLocal4))
# if (defined(_DPT_BIG_ENDIAN))
# define osdLocal4(x) (*(unsigned DPT_4_BYTES __FAR__ *)(x))
# if (defined(osdSwap4))
# define osdSLocal4(x) osdSwap4(osdLocal4(x))
# else
# define osdSLocal4(x) ((unsigned DPT_4_BYTES)osdSLocal2(((unsigned char __FAR__ *)\
(x)+2)) + (((unsigned DPT_4_BYTES)((unsigned char __FAR__ *)(x))[1]) << 16) \
+ (((unsigned DPT_4_BYTES)((unsigned char __FAR__ *)(x))[0]) << 24))
# endif
# else
# define osdSLocal4(x) (*(unsigned DPT_4_BYTES __FAR__ *)(x))
# if (defined(osdSwap4))
# define osdLocal4(x) osdSwap4(osdSLocal4(x))
# else
# define osdLocal4(x) ((unsigned DPT_4_BYTES)osdLocal2(((unsigned char __FAR__ *) \
(x)+2)) + (((unsigned DPT_4_BYTES)((unsigned char __FAR__ *)(x))[1]) << 16) \
+ (((unsigned DPT_4_BYTES)((unsigned char __FAR__ *)(x))[0]) << 24))
# endif
# endif
#endif
#define I2O_TID_MASK ((unsigned DPT_4_BYTES) ((1L<<I2O_TID_SZ)-1))
#define getUP1(x,y) (((unsigned char __FAR__ *)(x))+(unsigned DPT_4_BYTES)(y))
#define getU1(x,y) (*getUP1(x,y))
#define setU1(x,y,z) (*((unsigned char *)getUP1(x,y)) = (unsigned char)(z))
#define orU1(x,y,z) (*getUP1(x,y) |= (unsigned char)(z))
#define andU1(x,y,z) (*getUP1(x,y) &= (unsigned char)(z))
#define getUP2(x,y) ((unsigned short __FAR__ *)(((unsigned char __FAR__ *) \
(x))+(unsigned DPT_4_BYTES)(y)))
#define getBU2(x,y) ((unsigned short)osdLocal2((unsigned short __FAR__ *) \
getUP1(x,y)))
#define getLU2(x,y) ((unsigned short)osdSLocal2((unsigned short __FAR__ *) \
getUP1(x,y)))
#define getU2(x,y) ((unsigned short)osdLocal2((unsigned short __FAR__ *) \
getUP1(x,y)))
#if (!defined(setU2))
# define setU2(x,y,z) { unsigned short hold = (unsigned short)(z); \
*((unsigned short __FAR__ *)getUP1(x,y)) \
= osdLocal2(&hold); \
}
#endif
#if (!defined(setBU2))
# define setBU2(x,y,z) { unsigned short hold = (unsigned short)(z); \
*((unsigned short __FAR__ *)getUP1(x,y)) \
= osdLocal2(&hold); \
}
#endif
#if (!defined(setLU2))
# define setLU2(x,y,z) { unsigned short hold = (unsigned short)(z); \
*((unsigned short __FAR__ *)getUP1(x,y)) \
= osdSLocal2(&hold); \
}
#endif
#define getU3(x,y) ((unsigned DPT_4_BYTES)osdLocal3((unsigned DPT_4_BYTES __FAR__ *) \
getUP1(x,y)))
#if (!defined(setU3))
# if (defined(_DPT_BIG_ENDIAN))
# define setU3(x,y,z) \
{ unsigned DPT_4_BYTES hold = z; \
*(getUP1(x,y)) = (unsigned char)(hold >> 16L); \
*((unsigned short __FAR__ *)(getUP1(x,y) + 1)) \
= (unsigned short)hold; \
}
# else
# define setU3(x,y,z) \
{ unsigned DPT_4_BYTES hold = z; \
*(getUP1(x,y) + 0) = (unsigned char)(hold >> 16) ; \
*(getUP1(x,y) + 1) = (unsigned char)(hold >> 8L); \
*(getUP1(x,y) + 2) = (unsigned char)(hold); \
}
# endif
#endif
#define getBU3(x,y) ((unsigned DPT_4_BYTES)osdLocal3((unsigned DPT_4_BYTES __FAR__ *) \
getUP1(x,y)))
#if (!defined(setBU3))
# if (defined(_DPT_BIG_ENDIAN))
# define setBU3(x,y,z) \
{ unsigned DPT_4_BYTES hold = z; \
*(getUP1(x,y)) = (unsigned char)(hold >> 16L); \
*((unsigned short __FAR__ *)(getUP1(x,y) + 1)) \
= (unsigned short)hold; \
}
# else
# define setBU3(x,y,z) \
{ unsigned DPT_4_BYTES hold = z; \
*(getUP1(x,y) + 0) = (unsigned char)(hold >> 16) ; \
*(getUP1(x,y) + 1) = (unsigned char)(hold >> 8L); \
*(getUP1(x,y) + 2) = (unsigned char)(hold); \
}
# endif
#endif
#define getUP4(x,y) ((unsigned DPT_4_BYTES __FAR__ *)(((unsigned char __FAR__ *) \
(x))+(unsigned DPT_4_BYTES)(y)))
#define getBU4(x,y) ((unsigned DPT_4_BYTES)osdLocal4((unsigned DPT_4_BYTES __FAR__ *) \
getUP1(x,y)))
#define getLU4(x,y) ((unsigned DPT_4_BYTES)osdSLocal4((unsigned DPT_4_BYTES __FAR__ *) \
getUP1(x,y)))
#define getU4(x,y) ((unsigned DPT_4_BYTES)osdSLocal4((unsigned DPT_4_BYTES __FAR__ *) \
getUP1(x,y)))
#if (!defined(setU4))
# define setU4(x,y,z) { unsigned DPT_4_BYTES hold = z; \
*((unsigned DPT_4_BYTES __FAR__ *)getUP1(x,y)) \
= osdLocal4(&hold); \
}
#endif
#if (!defined(setBU4))
# define setBU4(x,y,z) { unsigned DPT_4_BYTES hold = z; \
*((unsigned DPT_4_BYTES __FAR__ *)getUP1(x,y)) \
= osdLocal4(&hold); \
}
#endif
#if (!defined(setLU4))
# define setLU4(x,y,z) { unsigned DPT_4_BYTES hold = z; \
*((unsigned DPT_4_BYTES __FAR__ *)getUP1(x,y)) \
= osdSLocal4(&hold); \
}
#endif
#define osdSwap16bit(x) ( (((unsigned short )x & 0xf000) >> 12) | \
(((unsigned short )x & 0x0f00) >> 4) | \
(((unsigned short )x & 0x00f0) << 4) | \
(((unsigned short )x & 0x000f) << 12 ) )
#define osdSwap12bit(x) (( (((unsigned short )x & 0x0f00) >> 8) | \
((unsigned short )x & 0x00f0) | \
(((unsigned short )x & 0x000f) << 8 ) ) )
#define osdSwap8bit(x) ( (((unsigned char )x & 0x0f) << 4) | \
(((unsigned char )x &0xf0) >> 4 ) )
#define getL24bit1(w,x,y) ((unsigned DPT_4_BYTES)((unsigned char __FAR__ *)(&w->x))[0+(y)] \
+ ((((unsigned DPT_4_BYTES)((unsigned char __FAR__ *)(&w->x))[1+(y)]) << 8) & 0xFF00) \
+ ((((unsigned DPT_4_BYTES)((unsigned char __FAR__ *)(&w->x))[2+(y)]) << 16) & 0xFF0000))
#define setL24bit1(w,x,y,z) { ((unsigned char __FAR__ *)(&w->x))[0+(y)] = (z); \
((unsigned char __FAR__ *)(&w->x))[1+(y)] = ((z) >> 8) & 0xFF; \
((unsigned char __FAR__ *)(&w->x))[2+(y)] = ((z) >> 16) & 0xFF; \
}
#define getL16bit(w,x,y) ((unsigned short)((unsigned char __FAR__ *)(&w->x))[0+(y)] \
+ ((((unsigned short)((unsigned char __FAR__ *)(&w->x))[1+(y)]) << 8) & 0xFF00))
#define setL16bit(w,x,y,z) { ((unsigned char __FAR__ *)(&w->x))[0+(y)] = (z); \
((unsigned char __FAR__ *)(&w->x))[1+(y)] = ((z) >> 8) & 0xFF; \
}
#define getL16bit2(w,x,y) ((unsigned short)((unsigned char __FAR__ *)(&w->x))[2+(y)] \
+ ((((unsigned short)((unsigned char __FAR__ *)(&w->x))[3+(y)]) << 8) & 0xFF00))
#define setL16bit2(w,x,y,z) { ((unsigned char __FAR__ *)(&w->x))[2+(y)] = (z); \
((unsigned char __FAR__ *)(&w->x))[3+(y)] = ((z) >> 8) & 0xFF; \
}
#define getL4bit(w,x,y) \
((unsigned char)(((unsigned char __FAR__ *)(&w->x))[0+(y)] >> 4) & 0x0f)
#define setL4bit(w,x,y,z) { \
((unsigned char __FAR__ *)(&w->x))[0+(y)] &= 0xF0; \
((unsigned char __FAR__ *)(&w->x))[0+(y)] |= ((z) << 4) & 0xF0; \
}
#define getL1bit(w,x,y) \
((unsigned char)(((unsigned char __FAR__ *)(&w->x))[0+(y)] ) & 0x01)
#define setL1bit(w,x,y,z) { \
((unsigned char __FAR__ *)(&w->x))[0+(y)] &= 0xFE; \
((unsigned char __FAR__ *)(&w->x))[0+(y)] |= (z) & 0x01; \
}
#define getL1bit1(w,x,y) \
((unsigned char)(((unsigned char __FAR__ *)(&w->x))[0+(y)] >> 1) & 0x01)
#define setL1bit1(w,x,y,z) { \
((unsigned char __FAR__ *)(&w->x))[0+(y)] &= 0xFD; \
((unsigned char __FAR__ *)(&w->x))[0+(y)] |= (z << 1) & 0x02; \
}
#define getL12bit(w,x,y) ((unsigned short)((unsigned char __FAR__ *)(&w->x))[0+(y)] \
+ ((((unsigned short)((unsigned char __FAR__ *)(&w->x))[1+(y)]) << 8) & 0xF00))
#define setL12bit(w,x,y,z) { ((unsigned char __FAR__ *)(&w->x))[0+(y)] = (z); \
((unsigned char __FAR__ *)(&w->x))[1+(y)] &= 0xF0; \
((unsigned char __FAR__ *)(&w->x))[1+(y)] |= ((z) >> 8) & 0xF; \
}
#define getL12bit1(w,x,y) (((unsigned short)((unsigned char __FAR__ *)(&w->x))[1+(y)]) >> 4 \
+ ((((unsigned short)((unsigned char __FAR__ *)(&w->x))[2+(y)]) << 4) ))
#define setL12bit1(w,x,y,z) { ((unsigned char __FAR__ *)(&w->x))[1+(y)] &= 0x0F; \
((unsigned char __FAR__ *)(&w->x))[1+(y)] |= ((z) & 0xF) << 4; \
((unsigned char __FAR__ *)(&w->x))[2+(y)] &= 0x00;\
((unsigned char __FAR__ *)(&w->x))[2+(y)] |= ((z) >> 8) & 0xff;\
}
#define getL12bit2(w,x,y) ((unsigned short)((unsigned char __FAR__ *)(&w->x))[2+(y)] \
+ ((((unsigned short)((unsigned char __FAR__ *)(&w->x))[3+(y)]) << 8) & 0xF00))
#define setL12bit2(w,x,y,z) { ((unsigned char __FAR__ *)(&w->x))[2+(y)] = (z); \
((unsigned char __FAR__ *)(&w->x))[3+(y)] &= 0xF0; \
((unsigned char __FAR__ *)(&w->x))[3+(y)] |= ((z) >> 8) & 0xF; \
}
#define getL8bit(w,x,y) (\
(*(((unsigned char __FAR__ *)(&((w)->x)))\
+ y)) )
#define setL8bit(w,x,y,z) {\
(*(((unsigned char __FAR__ *)(&((w)->x)))\
+ y) = (z));\
}
#endif