source: trunk/third/texinfo/intl/gmo.h @ 18945

Revision 18945, 4.7 KB checked in by amb, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18944, which included commits to RCS files with non-trunk default branches.
Line 
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
55typedef unsigned nls_uint32;
56#else
57# if USHRT_MAX == UINT_MAX_32_BITS
58typedef unsigned short nls_uint32;
59# else
60#  if ULONG_MAX == UINT_MAX_32_BITS
61typedef 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.  */
72struct 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.  */
107struct 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.  */
118struct 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.  */
127struct 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  */
Note: See TracBrowser for help on using the repository browser.