• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*  $NetBSD: runetype.h,v 1.19 2005/11/29 03:11:59 christos Exp $ */
2 
3 /*-
4  * Copyright (c) 1993
5  *  The Regents of the University of California.  All rights reserved.
6  *
7  * This code is derived from software contributed to Berkeley by
8  * Paul Borman at Krystal Technologies.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. Neither the name of the University nor the names of its contributors
19  *    may be used to endorse or promote products derived from this software
20  *    without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  *
34  *  @(#)runetype.h  8.1 (Berkeley) 6/2/93
35  */
36 #ifndef _NB_RUNETYPE_H_
37 #define _NB_RUNETYPE_H_
38 
39 #include  <sys/EfiCdefs.h>
40 #include <sys/types.h>
41 
42 /* for cross host tools on older systems */
43 #ifndef UINT32_C
44 /* assumes sizeof(unsigned int)>=4 */
45 #define UINT32_C(c) ((uint32_t)(c##U))
46 #endif
47 
48 typedef uint32_t  __nbrune_t;
49 typedef uint64_t  __runepad_t;
50 
51 #define _NB_CACHED_RUNES  (1 << 8)  /* Must be a power of 2 */
52 #define _NB_RUNE_ISCACHED(c)  ((c)>=0 && (c)<_CACHED_RUNES)
53 
54 #define _NB_DEFAULT_INVALID_RUNE ((__nbrune_t)-3)
55 
56 /*
57  * The lower 8 bits of runetype[] contain the digit value of the rune.
58  */
59 typedef uint32_t _RuneType;
60 #define _RUNETYPE_A UINT32_C(0x00000100)  /* Alpha */
61 #define _RUNETYPE_C UINT32_C(0x00000200)  /* Control */
62 #define _RUNETYPE_D UINT32_C(0x00000400)  /* Digit */
63 #define _RUNETYPE_G UINT32_C(0x00000800)  /* Graph */
64 #define _RUNETYPE_L UINT32_C(0x00001000)  /* Lower */
65 #define _RUNETYPE_P UINT32_C(0x00002000)  /* Punct */
66 #define _RUNETYPE_S UINT32_C(0x00004000)  /* Space */
67 #define _RUNETYPE_U UINT32_C(0x00008000)  /* Upper */
68 #define _RUNETYPE_X UINT32_C(0x00010000)  /* X digit */
69 #define _RUNETYPE_B UINT32_C(0x00020000)  /* Blank */
70 #define _RUNETYPE_R UINT32_C(0x00040000)  /* Print */
71 #define _RUNETYPE_I UINT32_C(0x00080000)  /* Ideogram */
72 #define _RUNETYPE_T UINT32_C(0x00100000)  /* Special */
73 #define _RUNETYPE_Q UINT32_C(0x00200000)  /* Phonogram */
74 #define _RUNETYPE_SWM UINT32_C(0xc0000000)/* Mask to get screen width data */
75 #define _RUNETYPE_SWS 30    /* Bits to shift to get width */
76 #define _RUNETYPE_SW0 UINT32_C(0x00000000)  /* 0 width character */
77 #define _RUNETYPE_SW1 UINT32_C(0x40000000)  /* 1 width character */
78 #define _RUNETYPE_SW2 UINT32_C(0x80000000)  /* 2 width character */
79 #define _RUNETYPE_SW3 UINT32_C(0xc0000000)  /* 3 width character */
80 
81 
82 /*
83  * rune file format.  network endian.
84  */
85 typedef struct {
86   int32_t   fre_min;  /* First rune of the range */
87   int32_t   fre_max;  /* Last rune (inclusive) of the range */
88   int32_t   fre_map;  /* What first maps to in maps */
89   uint32_t  fre_pad1; /* backward compatibility */
90   __runepad_t fre_pad2; /* backward compatibility */
91 } __attribute__((__packed__)) _FileRuneEntry;
92 
93 
94 typedef struct {
95   uint32_t  frr_nranges;  /* Number of ranges stored */
96   uint32_t  frr_pad1; /* backward compatibility */
97   __runepad_t frr_pad2; /* backward compatibility */
98 } __attribute__((__packed__)) _FileRuneRange;
99 
100 
101 typedef struct {
102   char    frl_magic[8]; /* Magic saying what version we are */
103   char    frl_encoding[32];/* ASCII name of this encoding */
104 
105   __runepad_t frl_pad1; /* backward compatibility */
106   __runepad_t frl_pad2; /* backward compatibility */
107   int32_t   frl_invalid_rune;
108   uint32_t  frl_pad3; /* backward compatibility */
109 
110   _RuneType frl_runetype[_NB_CACHED_RUNES];
111   int32_t   frl_maplower[_NB_CACHED_RUNES];
112   int32_t   frl_mapupper[_NB_CACHED_RUNES];
113 
114   /*
115    * The following are to deal with Runes larger than _CACHED_RUNES - 1.
116    * Their data is actually contiguous with this structure so as to make
117    * it easier to read/write from/to disk.
118    */
119   _FileRuneRange  frl_runetype_ext;
120   _FileRuneRange  frl_maplower_ext;
121   _FileRuneRange  frl_mapupper_ext;
122 
123   __runepad_t frl_pad4; /* backward compatibility */
124   int32_t   frl_variable_len;/* how long that data is */
125   uint32_t  frl_pad5; /* backward compatibility */
126 
127   /* variable size data follows */
128 } __attribute__((__packed__)) _FileRuneLocale;
129 
130 
131 /*
132  * expanded rune locale declaration.  local to the host.  host endian.
133  */
134 typedef struct {
135   __nbrune_t  re_min;   /* First rune of the range */
136   __nbrune_t  re_max;   /* Last rune (inclusive) of the range */
137   __nbrune_t  re_map;   /* What first maps to in maps */
138   _RuneType *re_rune_types; /* Array of types in range */
139 } _NBRuneEntry;
140 
141 
142 typedef struct {
143   uint32_t  rr_nranges; /* Number of ranges stored */
144   _NBRuneEntry  *rr_rune_ranges;
145 } _NBRuneRange;
146 
147 
148 /*
149  * wctrans stuffs.
150  */
151 typedef struct _WCTransEntry {
152   const char  *te_name;
153   __nbrune_t  *te_cached;
154   _NBRuneRange  *te_extmap;
155 } _WCTransEntry;
156 #define _WCTRANS_INDEX_LOWER  0
157 #define _WCTRANS_INDEX_UPPER  1
158 #define _WCTRANS_NINDEXES 2
159 
160 /*
161  * wctype stuffs.
162  */
163 typedef struct _WCTypeEntry {
164   const char  *te_name;
165   _RuneType te_mask;
166 } _WCTypeEntry;
167 #define _WCTYPE_INDEX_ALNUM 0
168 #define _WCTYPE_INDEX_ALPHA 1
169 #define _WCTYPE_INDEX_BLANK 2
170 #define _WCTYPE_INDEX_CNTRL 3
171 #define _WCTYPE_INDEX_DIGIT 4
172 #define _WCTYPE_INDEX_GRAPH 5
173 #define _WCTYPE_INDEX_LOWER 6
174 #define _WCTYPE_INDEX_PRINT 7
175 #define _WCTYPE_INDEX_PUNCT 8
176 #define _WCTYPE_INDEX_SPACE 9
177 #define _WCTYPE_INDEX_UPPER 10
178 #define _WCTYPE_INDEX_XDIGIT  11
179 #define _WCTYPE_NINDEXES  12
180 
181 /*
182  * ctype stuffs
183  */
184 
185 typedef struct _NBRuneLocale {
186   /*
187    * copied from _FileRuneLocale
188    */
189   char    rl_magic[8];  /* Magic saying what version we are */
190   char    rl_encoding[32];/* ASCII name of this encoding */
191   __nbrune_t  rl_invalid_rune;
192   _RuneType rl_runetype[_NB_CACHED_RUNES];
193   __nbrune_t  rl_maplower[_NB_CACHED_RUNES];
194   __nbrune_t  rl_mapupper[_NB_CACHED_RUNES];
195   _NBRuneRange  rl_runetype_ext;
196   _NBRuneRange  rl_maplower_ext;
197   _NBRuneRange  rl_mapupper_ext;
198 
199   void    *rl_variable;
200   size_t    rl_variable_len;
201 
202   /*
203    * the following portion is generated on the fly
204    */
205   const char      *rl_codeset;
206   struct _citrus_ctype_rec  *rl_citrus_ctype;
207   _WCTransEntry     rl_wctrans[_WCTRANS_NINDEXES];
208   _WCTypeEntry      rl_wctype[_WCTYPE_NINDEXES];
209 } _NBRuneLocale;
210 
211 
212 /* magic number for LC_CTYPE (rune)locale declaration */
213 #define _NB_RUNE_MAGIC_1 "RuneCT10" /* Indicates version 0 of RuneLocale */
214 
215 /* magic string for dynamic link module - type should be like "LC_CTYPE" */
216 #define _NB_RUNE_MODULE_1(type) "RuneModule10." type
217 
218 /* codeset tag */
219 #define _NB_RUNE_CODESET "CODESET="
220 
221 #endif  /* !_NB_RUNETYPE_H_ */
222