1 #include "ficl.h"
2 
ficlBitGet(const unsigned char * bits,size_t index)3 int ficlBitGet(const unsigned char *bits, size_t index)
4 	{
5 	int byteIndex = index >> 3;
6 	int bitIndex = index & 7;
7 	unsigned char mask = (unsigned char)(128 >> bitIndex);
8 
9 	return ((mask & bits[byteIndex]) ? 1 : 0);
10 	}
11 
12 
13 
ficlBitSet(unsigned char * bits,size_t index,int value)14 void ficlBitSet(unsigned char *bits, size_t index, int value)
15 	{
16 	int byteIndex = index >> 3;
17 	int bitIndex = index & 7;
18 	unsigned char mask = (unsigned char)(128 >> bitIndex);
19 
20 	if (value)
21 		bits[byteIndex] |= mask;
22 	else
23 		bits[byteIndex] &= ~mask;
24 	}
25 
26 
ficlBitGetString(unsigned char * destination,const unsigned char * source,int offset,int count,int destAlignment)27 void ficlBitGetString(unsigned char *destination, const unsigned char *source, int offset, int count, int destAlignment)
28 	{
29 	int bit = destAlignment - count;
30 	while (count--)
31 		ficlBitSet(destination, bit++, ficlBitGet(source, offset++));
32 	}
33 
34 
35 /*
36 ** This will actually work correctly *regardless* of the local architecture.
37 ** --lch
38 **/
ficlNetworkUnsigned16(ficlUnsigned16 number)39 ficlUnsigned16 ficlNetworkUnsigned16(ficlUnsigned16 number)
40 {
41 	ficlUnsigned8 *pointer = (ficlUnsigned8 *)&number;
42 	return (ficlUnsigned16)(((ficlUnsigned16)(pointer[0] << 8)) | (pointer[1]));
43 }
44 
ficlNetworkUnsigned32(ficlUnsigned32 number)45 ficlUnsigned32 ficlNetworkUnsigned32(ficlUnsigned32 number)
46 {
47 	ficlUnsigned16 *pointer = (ficlUnsigned16 *)&number;
48 	return ((ficlUnsigned32)(ficlNetworkUnsigned16(pointer[0]) << 16)) | ficlNetworkUnsigned16(pointer[1]);
49 }
50