ReactOS  0.4.15-dev-1039-gb9754fa
intcvt.h
Go to the documentation of this file.
1 /* @(#)intcvt.h 1.8 13/10/26 Copyright 1986-2013 J. Schilling */
2 /*
3  * Definitions for conversion to/from integer data types of various size.
4  *
5  * Copyright (c) 1986-2013 J. Schilling
6  */
7 /*
8  * The contents of this file are subject to the terms of the
9  * Common Development and Distribution License, Version 1.0 only
10  * (the "License"). You may not use this file except in compliance
11  * with the License.
12  *
13  * See the file CDDL.Schily.txt in this distribution for details.
14  * A copy of the CDDL is also available via the Internet at
15  * http://www.opensource.org/licenses/cddl1.txt
16  *
17  * When distributing Covered Code, include this CDDL HEADER in each
18  * file and include the License file CDDL.Schily.txt from this distribution.
19  */
20 
21 #ifndef _SCHILY_INTCVT_H
22 #define _SCHILY_INTCVT_H
23 
24 #ifndef _SCHILY_MCONFIG_H
25 #include <schily/mconfig.h>
26 #endif
27 #ifndef _SCHILY_UTYPES_H
28 #include <schily/utypes.h>
29 #endif
30 
31 #define i_to_2_byte(a, i) (((Uchar *)(a))[0] = ((i) >> 8) & 0xFF,\
32  ((Uchar *)(a))[1] = (i) & 0xFF)
33 
34 #define i_to_3_byte(a, i) (((Uchar *)(a))[0] = ((i) >> 16)& 0xFF,\
35  ((Uchar *)(a))[1] = ((i) >> 8) & 0xFF,\
36  ((Uchar *)(a))[2] = (i) & 0xFF)
37 
38 #define i_to_4_byte(a, i) (((Uchar *)(a))[0] = ((i) >> 24)& 0xFF,\
39  ((Uchar *)(a))[1] = ((i) >> 16)& 0xFF,\
40  ((Uchar *)(a))[2] = ((i) >> 8) & 0xFF,\
41  ((Uchar *)(a))[3] = (i) & 0xFF)
42 
43 
44 
45 #define a_to_byte(a) (((Int8_t *)a)[0])
46 
47 #define a_to_u_byte(a) ((UInt8_t) \
48  (((Uchar *)a)[0] & 0xFF))
49 
50 #define a_to_u_2_byte(a) ((UInt16_t) \
51  ((((Uchar *)a)[1] & 0xFF) | \
52  (((Uchar *)a)[0] << 8 & 0xFF00)))
53 
54 #define a_to_2_byte(a) (int)(Int16_t)a_to_u_2_byte(a)
55 
56 #define a_to_u_3_byte(a) ((Ulong) \
57  ((((Uchar *)a)[2] & 0xFF) | \
58  (((Uchar *)a)[1] << 8 & 0xFF00) | \
59  (((Uchar *)a)[0] << 16 & 0xFF0000)))
60 
61 #define a_to_3_byte(a) a_to_u_3_byte(a) /* XXX signed version? */
62 
63 #ifdef __STDC__
64 # define __TOP_4BYTE 0xFF000000UL
65 #else
66 # define __TOP_4BYTE 0xFF000000
67 #endif
68 
69 #define a_to_u_4_byte(a) ((Ulong) \
70  ((((Uchar*)a)[3] & 0xFF) | \
71  (((Uchar*)a)[2] << 8 & 0xFF00) | \
72  (((Uchar*)a)[1] << 16 & 0xFF0000) | \
73  (((Uchar*)a)[0] << 24 & __TOP_4BYTE)))
74 
75 #define a_to_4_byte(a) (long)(Int32_t)a_to_u_4_byte(a)
76 
77 /*
78  * Little Endian versions of above macros
79  */
80 #define li_to_2_byte(a, i) (((Uchar *)(a))[1] = ((i) >> 8) & 0xFF,\
81  ((Uchar *)(a))[0] = (i) & 0xFF)
82 
83 #define li_to_3_byte(a, i) (((Uchar *)(a))[2] = ((i) >> 16)& 0xFF,\
84  ((Uchar *)(a))[1] = ((i) >> 8) & 0xFF,\
85  ((Uchar *)(a))[0] = (i) & 0xFF)
86 
87 #define li_to_4_byte(a, i) (((Uchar *)(a))[3] = ((i) >> 24)& 0xFF,\
88  ((Uchar *)(a))[2] = ((i) >> 16)& 0xFF,\
89  ((Uchar *)(a))[1] = ((i) >> 8) & 0xFF,\
90  ((Uchar *)(a))[0] = (i) & 0xFF)
91 
92 
93 #define la_to_u_2_byte(a) ((UInt16_t) \
94  ((((Uchar*)a)[0] & 0xFF) | \
95  (((Uchar*)a)[1] << 8 & 0xFF00)))
96 
97 #define la_to_2_byte(a) (int)(Int16_t)la_to_u_2_byte(a)
98 
99 #define la_to_u_3_byte(a) ((Ulong) \
100  ((((Uchar*)a)[0] & 0xFF) | \
101  (((Uchar*)a)[1] << 8 & 0xFF00) | \
102  (((Uchar*)a)[2] << 16 & 0xFF0000)))
103 
104 #define la_to_3_byte(a) la_to_u_3_byte(a) /* XXX signed version? */
105 
106 #define la_to_u_4_byte(a) ((Ulong) \
107  ((((Uchar*)a)[0] & 0xFF) | \
108  (((Uchar*)a)[1] << 8 & 0xFF00) | \
109  (((Uchar*)a)[2] << 16 & 0xFF0000) | \
110  (((Uchar*)a)[3] << 24 & __TOP_4BYTE)))
111 
112 #define la_to_4_byte(a) (long)(Int32_t)la_to_u_4_byte(a)
113 
114 #endif /* _SCHILY_INTCVT_H */