File: utilEndian.h

package info (click to toggle)
ted 2.11-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 11,064 kB
  • ctags: 13,935
  • sloc: ansic: 120,446; makefile: 7,469; sh: 253
file content (99 lines) | stat: -rw-r--r-- 3,253 bytes parent folder | download | duplicates (3)
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
91
92
93
94
95
96
97
98
99
#   ifndef	UTIL_ENDIAN_H
#   define	UTIL_ENDIAN_H

#   include	<stdio.h>

/************************************************************************/
/*									*/
/*  Pieces of 'endian' subroutines that are used internally in the code	*/
/*									*/
/*  b0 is the most significant byte, b1/b3 the least significant.	*/
/*									*/
/************************************************************************/

#   define NEGBYTES32(b3,b2,b1,b0,l)		\
    l= -( l+ 1 );				\
    b3= 255- ( l % 256 ); l /= 256;		\
    b2= 255- ( l % 256 ); l /= 256;		\
    b1= 255- ( l % 256 ); l /= 256;		\
    b0= 255- ( l );

#   define POSBYTES32(b3,b2,b1,b0,l)		\
    b3= l % 256; l /= 256;			\
    b2= l % 256; l /= 256;			\
    b1= l % 256; l /= 256;			\
    b0= l;

#   define NEGBYTES16(b1,b0,l)			\
    l= -( l+ 1 );				\
    b1= 255- ( l % 256 ); l /= 256;		\
    b0= 255- ( l );

#   define POSBYTES16(b1,b0,l)			\
    b1= l % 256; l /= 256;			\
    b0= l;

#   define NEGVALUE32(b0,b1,b2,b3,l,t)		\
    l  = ( (t)b0- 255 )* 256* 256* 256;		\
    l += ( (t)b1- 255 )* 256* 256;		\
    l += ( (t)b2- 255 )* 256;			\
    l += ( (t)b3- 255 );			\
    l--;

#   define POSVALUE32(b0,b1,b2,b3,l,t)		\
    l  = ( (t)b0      )* 256* 256* 256;		\
    l += ( (t)b1      )* 256* 256;		\
    l += ( (t)b2      )* 256;			\
    l += ( (t)b3      );

#   define NEGVALUE16(b0,b1,l,t)		\
    l  = ( (t)b0- 255 )* 256;			\
    l += ( (t)b1- 255 );			\
    l--;

#   define POSVALUE16(b0,b1,l,t)		\
    l  = ( (t)b0      )* 256;			\
    l += ( (t)b1      );

/************************************************************************/
/*									*/
/*  Routine declarations.						*/
/*									*/
/************************************************************************/

extern 		int	utilGetLeInt16(FILE *);
extern		long	utilGetLeInt32(FILE *);
extern unsigned int	utilGetLeUint16(FILE *);
extern unsigned long	utilGetLeUint32(FILE *);

extern 		int	utilGetBeInt16(FILE *);
extern		long	utilGetBeInt32(FILE *);
extern unsigned int	utilGetBeUint16(FILE *);
extern unsigned long	utilGetBeUint32(FILE *);

extern void	utilPutLeInt16(int, FILE *);
extern void	utilPutLeInt32(long, FILE *);
extern void	utilPutLeUint16(unsigned int, FILE *);
extern void	utilPutLeUint32(unsigned long, FILE *);

extern void	utilPutBeInt16(int, FILE *);
extern void	utilPutBeInt32(long, FILE *);
extern void	utilPutBeUint16(unsigned int, FILE *);
extern void	utilPutBeUint32(unsigned long, FILE *);

long utilEndianExtractLeInt32(	const unsigned char *	s );
int  utilEndianExtractLeInt16(	const unsigned char *	s );
long utilEndianExtractBeInt32(	const unsigned char *	s );
int  utilEndianExtractBeInt16(	const unsigned char *	s );

unsigned long utilEndianExtractLeUint32( const unsigned char *	s );
unsigned int  utilEndianExtractLeUint16( const unsigned char *	s );
unsigned long utilEndianExtractBeUint32( const unsigned char *	s );
unsigned int  utilEndianExtractBeUint16( const unsigned char *	s );

extern void utilEndianStoreBeInt32( long	l, unsigned char *	b );
extern void utilEndianStoreLeInt32( long	l, unsigned char *	b );
extern void utilEndianStoreBeInt16( int		i, unsigned char *	b );
extern void utilEndianStoreLeInt16( int		i, unsigned char *	b );

#   endif	/* UTIL_ENDIAN_H */