Mercurial > hg > th-libs
annotate th_endian.h @ 49:598609fb49b0
Change how "config.h" is included, etc.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 03 Oct 2011 15:40:54 +0300 |
parents | a25f5d22483e |
children | 1607c0691dee |
rev | line source |
---|---|
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * Endianess handling |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Programmed and designed by Matti 'ccr' Hamalainen |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
4 * (C) Copyright 2002-2007 Tecnic Software productions (TNSP) |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 * |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 * Please read file 'COPYING' for information on license and distribution. |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 */ |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
8 #ifndef TH_ENDIAN_H |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
9 #define TH_ENDIAN_H |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 #ifdef HAVE_CONFIG_H |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
12 #include "config.h" |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 #endif |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
14 #include "th_types.h" |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
15 #include <stdio.h> |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
16 |
5 | 17 #ifdef __cplusplus |
18 extern "C" { | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 #endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 |
5 | 22 /* Endianess swapping macros |
23 */ | |
10 | 24 #define TH_SWAP_16_LE_BE(value) ((uint16_t) ( \ |
5 | 25 (uint16_t) ((uint16_t) (value) >> 8) | \ |
26 (uint16_t) ((uint16_t) (value) << 8)) ) | |
27 | |
28 | |
29 #define TH_SWAP_32_LE_BE(value) ((uint32_t) ( \ | |
30 (((uint32_t) (value) & (uint32_t) 0x000000ffU) << 24) | \ | |
31 (((uint32_t) (value) & (uint32_t) 0x0000ff00U) << 8) | \ | |
32 (((uint32_t) (value) & (uint32_t) 0x00ff0000U) >> 8) | \ | |
33 (((uint32_t) (value) & (uint32_t) 0xff000000U) >> 24))) | |
34 | |
35 #ifdef TH_HAVE_64BIT | |
36 #define TH_SWAP_64_LE_BE(value) ((uint64_t) ( \ | |
37 (((uint64_t) (value) & (uint64_t) 0x00000000000000ffULL) << 56) | \ | |
38 (((uint64_t) (value) & (uint64_t) 0x000000000000ff00ULL) << 40) | \ | |
39 (((uint64_t) (value) & (uint64_t) 0x0000000000ff0000ULL) << 24) | \ | |
40 (((uint64_t) (value) & (uint64_t) 0x00000000ff000000ULL) << 8) | \ | |
41 (((uint64_t) (value) & (uint64_t) 0x000000ff00000000ULL) >> 8) | \ | |
42 (((uint64_t) (value) & (uint64_t) 0x0000ff0000000000ULL) >> 24) | \ | |
43 (((uint64_t) (value) & (uint64_t) 0x00ff000000000000ULL) >> 40) | \ | |
44 (((uint64_t) (value) & (uint64_t) 0xff00000000000000ULL) >> 56))) | |
45 #endif | |
46 | |
47 /* Macros that swap only when needed ... | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
48 */ |
5 | 49 #ifdef TH_BIGENDIAN |
50 | |
51 #define TH_LE16_TO_NATIVE(value) TH_SWAP_16_LE_BE(value) | |
52 #define TH_LE32_TO_NATIVE(value) TH_SWAP_32_LE_BE(value) | |
53 #define TH_NATIVE_TO_LE16(value) TH_SWAP_16_LE_BE(value) | |
54 #define TH_NATIVE_TO_LE32(value) TH_SWAP_32_LE_BE(value) | |
55 | |
56 #define TH_BE16_TO_NATIVE(value) ((uint16_t) (value)) | |
57 #define TH_BE32_TO_NATIVE(value) ((uint32_t) (value)) | |
58 #define TH_NATIVE_TO_BE16(value) ((uint16_t) (value)) | |
59 #define TH_NATIVE_TO_BE32(value) ((uint32_t) (value)) | |
60 | |
61 #ifdef TH_HAVE_64BIT | |
62 #define TH_LE64_TO_NATIVE(value) TH_SWAP_64_LE_BE(value) | |
63 #define TH_NATIVE_TO_LE64(value) TH_SWAP_64_LE_BE(value) | |
64 #define TH_BE64_TO_NATIVE(value) ((uint64_t) (value)) | |
65 #define TH_NATIVE_TO_BE64(value) ((uint64_t) (value)) | |
66 #endif | |
67 | |
68 #else /* !TH_BIGENDIAN */ | |
69 | |
70 #define TH_LE16_TO_NATIVE(value) ((uint16_t) (value)) | |
71 #define TH_LE32_TO_NATIVE(value) ((uint32_t) (value)) | |
72 #define TH_NATIVE_TO_LE16(value) ((uint16_t) (value)) | |
73 #define TH_NATIVE_TO_LE32(value) ((uint32_t) (value)) | |
74 | |
75 #define TH_BE16_TO_NATIVE(value) TH_SWAP_16_LE_BE(value) | |
76 #define TH_BE32_TO_NATIVE(value) TH_SWAP_32_LE_BE(value) | |
77 #define TH_NATIVE_TO_BE16(value) TH_SWAP_16_LE_BE(value) | |
78 #define TH_NATIVE_TO_BE32(value) TH_SWAP_32_LE_BE(value) | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
79 |
5 | 80 #ifdef TH_HAVE_64BIT |
81 #define TH_LE64_TO_NATIVE(value) ((uint64_t) (value)) | |
82 #define TH_NATIVE_TO_LE64(value) ((uint64_t) (value)) | |
83 #define TH_BE64_TO_NATIVE(value) TH_SWAP_64_LE_BE(value) | |
84 #define TH_NATIVE_TO_BE64(value) TH_SWAP_64_LE_BE(value) | |
85 #endif | |
86 | |
87 #endif | |
88 | |
89 | |
90 /* Endian-handling file read/write routines | |
91 */ | |
92 BOOL th_read_str(FILE *f, uint8_t *s, size_t l); | |
93 BOOL th_write_str(FILE *f, uint8_t *s, size_t l); | |
94 | |
95 #define TH_DEFINE_HEADER(xname, xtype) \ | |
96 BOOL th_read_ ## xname (FILE *f, xtype *v); \ | |
97 BOOL th_write_ ## xname (FILE *f, xtype v); | |
98 | |
99 TH_DEFINE_HEADER(le16, uint16_t) | |
100 TH_DEFINE_HEADER(le32, uint32_t) | |
101 | |
102 TH_DEFINE_HEADER(be16, uint16_t) | |
103 TH_DEFINE_HEADER(be32, uint32_t) | |
104 | |
105 #ifdef TH_HAVE_64BIT | |
106 TH_DEFINE_HEADER(be64, uint64_t) | |
107 TH_DEFINE_HEADER(le64, uint64_t) | |
108 #endif | |
109 | |
110 #undef TH_DEFINE_HEADER | |
111 | |
112 /* Cause warnings for old functions */ | |
113 #define TH_READ_LE16 fdksajlkfdsljf lol | |
114 #define TH_READ_LE32 fdksajlkfdsljf lol | |
115 #define TH_READ_BE16 fdksajlkfdsljf lol | |
116 #define TH_READ_BE32 fdksajlkfdsljf lol | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
117 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
118 #ifdef __cplusplus |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
119 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
120 #endif |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
121 #endif /* TH_ENDIAN_H */ |