summaryrefslogtreecommitdiff
path: root/xtrapbits.h
diff options
context:
space:
mode:
Diffstat (limited to 'xtrapbits.h')
-rw-r--r--xtrapbits.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/xtrapbits.h b/xtrapbits.h
new file mode 100644
index 0000000..1189dc7
--- /dev/null
+++ b/xtrapbits.h
@@ -0,0 +1,83 @@
+/* $XFree86$ */
+/*
+ * This include file is designed to be a portable way for systems to define
+ * bit field manipulation of arrays of bits.
+ */
+#ifndef __XTRAPBITS__
+#define __XTRAPBITS__ "@(#)xtrapbits.h 1.6 - 90/09/18 "
+
+/*****************************************************************************
+Copyright 1987, 1988, 1989, 1990, 1994 by Digital Equipment Corporation,
+Maynard, MA
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+*****************************************************************************/
+/*
+ *
+ * CONTRIBUTORS:
+ *
+ * Dick Annicchiarico
+ * Robert Chesler
+ * Dan Coutu
+ * Gene Durso
+ * Marc Evans
+ * Alan Jamison
+ * Mark Henry
+ * Ken Miller
+ *
+ */
+typedef unsigned char *UByteP; /* Pointer to an unsigned byte array */
+#define BitsInByte 8L /* The number of bits in a byte */
+
+#define BitInByte(bit) /* Returns the bit mask of a byte */ \
+ (1L << (((bit) % BitsInByte)))
+
+#define BitInWord(bit) /* Returns the bit mask of a word */ \
+ (1L << (((bit) % (BitsInByte * 2L))))
+
+#define BitInLong(bit) /* Returns the bit mask of a long */ \
+ (1L << (((bit) % (BitsInByte * 4L))))
+
+#define ByteInArray(array,bit) /* Returns the byte offset to get to a bit */ \
+ (((UByteP)(array))[(bit) / BitsInByte])
+
+#define BitIsTrue(array,bit) /* Test to see if a specific bit is True */ \
+ (ByteInArray(array,bit) & BitInByte(bit))
+
+#define BitIsFalse(array,bit) /* Test to see if a specific bit is False */ \
+ (!(BitIsTrue(array,bit)))
+
+#define BitTrue(array,bit) /* Set a specific bit to be True */ \
+ (ByteInArray(array,bit) |= BitInByte(bit))
+
+#define BitFalse(array,bit) /* Set a specific bit to be False */ \
+ (ByteInArray(array,bit) &= ~BitInByte(bit))
+
+#define BitToggle(array,bit) /* Toggle a specific bit */ \
+ (ByteInArray(array,bit) ^= BitInByte(bit))
+
+#define BitCopy(dest,src,bit) /* Copy a specific bit */ \
+ BitIsTrue((src),(bit)) ? BitTrue((dest),(bit)) : BitFalse((dest),(bit))
+
+#define BitValue(array,bit) /* Return True or False depending on bit */ \
+ (BitIsTrue((array),(bit)) ? True : False)
+
+#define BitSet(array,bit,value) /* Set bit to given value in array */ \
+ (value) ? BitTrue((array),(bit)) : BitFalse((array),(bit))
+
+#endif /* __XTRAPBITS__ */