summaryrefslogtreecommitdiff
path: root/include/octmac.h
blob: f8ce9326e6e610cfec7778d83abcca8c521a794f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\

File: octmac.h

Copyright (c) 2001 Octasic Inc. All rights reserved.

Description: 

This source code is Octasic Confidential. Use of and access to this code
is covered by the Octasic Device Enabling Software License Agreement. 
Acknowledgement of the Octasic Device Enabling Software License was 
required for access to this code. A copy was also provided with the release.


$Octasic_Release: OCT610xAPI-01.00-PR37 $

$Octasic_Revision: 13 $

\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#ifndef __OCTMAC_H__
#define __OCTMAC_H__


/*--------------------------------------------------------------------------
	C language
----------------------------------------------------------------------------*/

#ifdef __cplusplus
extern "C" {
#endif


/*****************************  DEFINES  *************************************/

/* Combine l & h to form a 32 bit quantity. */
#define mMAKEULONG(l, h)  ((ULONG)(((USHORT)(l)) | (((ULONG)((USHORT)(h))) << 16)))

#define mLOUCHAR(w)     ((UCHAR)(w))
#define mHIUCHAR(w)     ((UCHAR)(((USHORT)(w) >> 8) & 0xff))
#define mLOUSHORT(l)    ((USHORT)((ULONG)l))
#define mHIUSHORT(l)    ((USHORT)(((ULONG)(l) >> 16) & 0xffff))
#define mLOSHORT(l)     ((SHORT)((ULONG)l))
#define mHISHORT(l)     ((SHORT)(((ULONG)(l) >> 16) & 0xffff))

/* Combine l & h to form a 16 bit quantity. */
#define mMAKEUSHORT(l, h) (((USHORT)(l)) | ((USHORT)(h)) << 8)
#define mMAKESHORT(l, h)  ((SHORT)mMAKEUSHORT(l, h))

/* Extract high and low order parts of 16 and 32 bit quantity */
#define mLOBYTE(w)       mLOUCHAR(w)
#define mHIBYTE(w)       mHIUCHAR(w)
#define mMAKELONG(l, h)   ((LONG)mMAKEULONG(l, h))

/*--------------------------------------------------------------------------
	Bite conversion macro
----------------------------------------------------------------------------*/
#define mSWAP_INT16(x) mMAKEUSHORT( mHIBYTE(x), mLOBYTE(x) )
#define mSWAP_INT32(x) mMAKEULONG( mSWAP_INT16(mHIUSHORT(x)), mSWAP_INT16(mLOUSHORT(x)) )


/* Cast any variable to an instance of the specified type. */
#define mMAKETYPE(v, type)   (*((type *)&v))

/* Calculate the byte offset of a field in a structure of type type. */
#define mFIELDOFFSET(type, field)    ((UINT32)&(((type *)0)->field))
#define mCOUNTOF(array) (sizeof(array)/sizeof(array[0]))

#define mMAX(a,b)	(((a) > (b)) ? (a) : (b))
#define mMIN(a,b)	(((a) < (b)) ? (a) : (b))

#define	mDIM(x)		(sizeof(x) / sizeof(x[0]))

#define mFROMDIGIT(ch)	((ch) - 0x30)  /* digit to char */
#define mTODIGIT(ch) 	((ch) + 0x30)  /* int to char */

#define mISLEAP(a)	( !( a % 400 ) || ( ( a % 100 ) && !( a % 4 ) ) )

#define mFOREVER		for( ;; )

#define mROUND_TO_NEXT_4( a ) ( ((a) % 4) ? ( (a) + 4 - ((a)%4) ) : (a) )

/*--------------------------------------------------------------------------
	C language
----------------------------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __OCTMAC_H__ */