Mercurial > audlegacy
comparison intl/gmo.h @ 0:cb178e5ad177 trunk
[svn] Import audacious source.
author | nenolod |
---|---|
date | Mon, 24 Oct 2005 03:06:47 -0700 |
parents | |
children | f12d7e208b43 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:cb178e5ad177 |
---|---|
1 /* Description of GNU message catalog format: general file layout. | |
2 Copyright (C) 1995, 1997, 2000-2002 Free Software Foundation, Inc. | |
3 | |
4 This program is free software; you can redistribute it and/or modify it | |
5 under the terms of the GNU Library General Public License as published | |
6 by the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 Library General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU Library General Public | |
15 License along with this program; if not, write to the Free Software | |
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |
17 USA. */ | |
18 | |
19 #ifndef _GETTEXT_H | |
20 #define _GETTEXT_H 1 | |
21 | |
22 #include <limits.h> | |
23 | |
24 /* @@ end of prolog @@ */ | |
25 | |
26 /* The magic number of the GNU message catalog format. */ | |
27 #define _MAGIC 0x950412de | |
28 #define _MAGIC_SWAPPED 0xde120495 | |
29 | |
30 /* Revision number of the currently used .mo (binary) file format. */ | |
31 #define MO_REVISION_NUMBER 0 | |
32 | |
33 /* The following contortions are an attempt to use the C preprocessor | |
34 to determine an unsigned integral type that is 32 bits wide. An | |
35 alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but | |
36 as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work | |
37 when cross-compiling. */ | |
38 | |
39 #if __STDC__ | |
40 # define UINT_MAX_32_BITS 4294967295U | |
41 #else | |
42 # define UINT_MAX_32_BITS 0xFFFFFFFF | |
43 #endif | |
44 | |
45 /* If UINT_MAX isn't defined, assume it's a 32-bit type. | |
46 This should be valid for all systems GNU cares about because | |
47 that doesn't include 16-bit systems, and only modern systems | |
48 (that certainly have <limits.h>) have 64+-bit integral types. */ | |
49 | |
50 #ifndef UINT_MAX | |
51 # define UINT_MAX UINT_MAX_32_BITS | |
52 #endif | |
53 | |
54 #if UINT_MAX == UINT_MAX_32_BITS | |
55 typedef unsigned nls_uint32; | |
56 #else | |
57 # if USHRT_MAX == UINT_MAX_32_BITS | |
58 typedef unsigned short nls_uint32; | |
59 # else | |
60 # if ULONG_MAX == UINT_MAX_32_BITS | |
61 typedef unsigned long nls_uint32; | |
62 # else | |
63 /* The following line is intended to throw an error. Using #error is | |
64 not portable enough. */ | |
65 "Cannot determine unsigned 32-bit data type." | |
66 # endif | |
67 # endif | |
68 #endif | |
69 | |
70 | |
71 /* Header for binary .mo file format. */ | |
72 struct mo_file_header | |
73 { | |
74 /* The magic number. */ | |
75 nls_uint32 magic; | |
76 /* The revision number of the file format. */ | |
77 nls_uint32 revision; | |
78 | |
79 /* The following are only used in .mo files with major revision 0. */ | |
80 | |
81 /* The number of strings pairs. */ | |
82 nls_uint32 nstrings; | |
83 /* Offset of table with start offsets of original strings. */ | |
84 nls_uint32 orig_tab_offset; | |
85 /* Offset of table with start offsets of translated strings. */ | |
86 nls_uint32 trans_tab_offset; | |
87 /* Size of hash table. */ | |
88 nls_uint32 hash_tab_size; | |
89 /* Offset of first hash table entry. */ | |
90 nls_uint32 hash_tab_offset; | |
91 | |
92 /* The following are only used in .mo files with minor revision >= 1. */ | |
93 | |
94 /* The number of system dependent segments. */ | |
95 nls_uint32 n_sysdep_segments; | |
96 /* Offset of table describing system dependent segments. */ | |
97 nls_uint32 sysdep_segments_offset; | |
98 /* The number of system dependent strings pairs. */ | |
99 nls_uint32 n_sysdep_strings; | |
100 /* Offset of table with start offsets of original sysdep strings. */ | |
101 nls_uint32 orig_sysdep_tab_offset; | |
102 /* Offset of table with start offsets of translated sysdep strings. */ | |
103 nls_uint32 trans_sysdep_tab_offset; | |
104 }; | |
105 | |
106 /* Descriptor for static string contained in the binary .mo file. */ | |
107 struct string_desc | |
108 { | |
109 /* Length of addressed string, not including the trailing NUL. */ | |
110 nls_uint32 length; | |
111 /* Offset of string in file. */ | |
112 nls_uint32 offset; | |
113 }; | |
114 | |
115 /* The following are only used in .mo files with minor revision >= 1. */ | |
116 | |
117 /* Descriptor for system dependent string segment. */ | |
118 struct sysdep_segment | |
119 { | |
120 /* Length of addressed string, including the trailing NUL. */ | |
121 nls_uint32 length; | |
122 /* Offset of string in file. */ | |
123 nls_uint32 offset; | |
124 }; | |
125 | |
126 /* Descriptor for system dependent string. */ | |
127 struct sysdep_string | |
128 { | |
129 /* Offset of static string segments in file. */ | |
130 nls_uint32 offset; | |
131 /* Alternating sequence of static and system dependent segments. | |
132 The last segment is a static segment, including the trailing NUL. */ | |
133 struct segment_pair | |
134 { | |
135 /* Size of static segment. */ | |
136 nls_uint32 segsize; | |
137 /* Reference to system dependent string segment, or ~0 at the end. */ | |
138 nls_uint32 sysdepref; | |
139 } segments[1]; | |
140 }; | |
141 | |
142 /* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF, | |
143 regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */ | |
144 #define SEGMENTS_END ((nls_uint32) ~0) | |
145 | |
146 /* @@ begin of epilog @@ */ | |
147 | |
148 #endif /* gettext.h */ |