xref: /dragonfly/usr.bin/localedef/localedef.h (revision 01bedb5a)
1cd1c6085SJohn Marino /*
2cd1c6085SJohn Marino  * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
3cd1c6085SJohn Marino  * Copyright 2015 John Marino <draco@marino.st>
48aa2b98bSJohn Marino  *
58aa2b98bSJohn Marino  * This source code is derived from the illumos localedef command, and
68aa2b98bSJohn Marino  * provided under BSD-style license terms by Nexenta Systems, Inc.
78aa2b98bSJohn Marino  *
88aa2b98bSJohn Marino  * Redistribution and use in source and binary forms, with or without
98aa2b98bSJohn Marino  * modification, are permitted provided that the following conditions
108aa2b98bSJohn Marino  * are met:
118aa2b98bSJohn Marino  *
128aa2b98bSJohn Marino  * 1. Redistributions of source code must retain the above copyright
138aa2b98bSJohn Marino  *    notice, this list of conditions and the following disclaimer.
148aa2b98bSJohn Marino  * 2. Redistributions in binary form must reproduce the above copyright
158aa2b98bSJohn Marino  *    notice, this list of conditions and the following disclaimer in the
168aa2b98bSJohn Marino  *    documentation and/or other materials provided with the distribution.
178aa2b98bSJohn Marino  *
188aa2b98bSJohn Marino  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
198aa2b98bSJohn Marino  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
208aa2b98bSJohn Marino  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
218aa2b98bSJohn Marino  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
228aa2b98bSJohn Marino  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
238aa2b98bSJohn Marino  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
248aa2b98bSJohn Marino  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
258aa2b98bSJohn Marino  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
268aa2b98bSJohn Marino  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
278aa2b98bSJohn Marino  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
288aa2b98bSJohn Marino  * POSSIBILITY OF SUCH DAMAGE.
29cd1c6085SJohn Marino  */
30cd1c6085SJohn Marino 
31cd1c6085SJohn Marino /*
32cd1c6085SJohn Marino  * POSIX localedef.
33cd1c6085SJohn Marino  */
34cd1c6085SJohn Marino 
35cd1c6085SJohn Marino /* Common header files. */
36cd1c6085SJohn Marino #include <stdio.h>
37cd1c6085SJohn Marino #include <stdlib.h>
38cd1c6085SJohn Marino #include <stdarg.h>
39cd1c6085SJohn Marino #include <sys/types.h>
40cd1c6085SJohn Marino 
41cd1c6085SJohn Marino extern int com_char;
42cd1c6085SJohn Marino extern int esc_char;
43cd1c6085SJohn Marino extern int mb_cur_max;
44cd1c6085SJohn Marino extern int mb_cur_min;
45cd1c6085SJohn Marino extern int last_kw;
46cd1c6085SJohn Marino extern int verbose;
47*01bedb5aSSascha Wildner #if YYDEBUG
48cd1c6085SJohn Marino extern int yydebug;
49*01bedb5aSSascha Wildner #endif
50cd1c6085SJohn Marino extern int lineno;
51cd1c6085SJohn Marino extern int undefok;	/* mostly ignore undefined symbols */
52cd1c6085SJohn Marino extern int warnok;
53cd1c6085SJohn Marino extern int warnings;
54cd1c6085SJohn Marino 
55cd1c6085SJohn Marino int yylex(void);
56cd1c6085SJohn Marino void yyerror(const char *);
576d08986dSSascha Wildner void errf(const char *, ...) __dead2;
58cd1c6085SJohn Marino void warn(const char *, ...);
59cd1c6085SJohn Marino 
60cd1c6085SJohn Marino int putl_category(const char *, FILE *);
61cd1c6085SJohn Marino int wr_category(void *, size_t, FILE *);
62cd1c6085SJohn Marino FILE *open_category(void);
63cd1c6085SJohn Marino void close_category(FILE *);
64cd1c6085SJohn Marino void copy_category(char *);
65cd1c6085SJohn Marino const char *category_name(void);
66cd1c6085SJohn Marino 
67cd1c6085SJohn Marino int get_category(void);
68cd1c6085SJohn Marino int get_symbol(void);
69cd1c6085SJohn Marino int get_escaped(int);
70cd1c6085SJohn Marino int get_wide(void);
71cd1c6085SJohn Marino void reset_scanner(const char *);
72cd1c6085SJohn Marino void scan_to_eol(void);
73cd1c6085SJohn Marino void add_wcs(wchar_t);
74cd1c6085SJohn Marino void add_tok(int);
75cd1c6085SJohn Marino wchar_t *get_wcs(void);
76cd1c6085SJohn Marino 
77cd1c6085SJohn Marino /* charmap.c - CHARMAP handling */
78cd1c6085SJohn Marino void init_charmap(void);
79cacd7ea7SJohn Marino void add_charmap(const char *, int);
80cd1c6085SJohn Marino void add_charmap_undefined(char *);
81cd1c6085SJohn Marino void add_charmap_posix(void);
82cd1c6085SJohn Marino void add_charmap_range(char *, char *, int);
83cacd7ea7SJohn Marino void add_charmap_char(const char *name, int val);
84cd1c6085SJohn Marino int lookup_charmap(const char *, wchar_t *);
85cd1c6085SJohn Marino int check_charmap_undefined(char *);
86cd1c6085SJohn Marino int check_charmap(wchar_t);
87cd1c6085SJohn Marino 
88cd1c6085SJohn Marino /* collate.o - LC_COLLATE handling */
89cd1c6085SJohn Marino typedef struct collelem collelem_t;
90cd1c6085SJohn Marino typedef struct collsym collsym_t;
91cd1c6085SJohn Marino void init_collate(void);
92cd1c6085SJohn Marino void define_collsym(char *);
93cd1c6085SJohn Marino void define_collelem(char *, wchar_t *);
94cd1c6085SJohn Marino void add_order_directive(void);
95cd1c6085SJohn Marino void add_order_bit(int);
96cd1c6085SJohn Marino void dump_collate(void);
97cd1c6085SJohn Marino collsym_t *lookup_collsym(char *);
98cd1c6085SJohn Marino collelem_t *lookup_collelem(char *);
99cd1c6085SJohn Marino void start_order_collelem(collelem_t *);
100cd1c6085SJohn Marino void start_order_undefined(void);
101cd1c6085SJohn Marino void start_order_symbol(char *);
102cd1c6085SJohn Marino void start_order_char(wchar_t);
103cd1c6085SJohn Marino void start_order_ellipsis(void);
104cd1c6085SJohn Marino void end_order_collsym(collsym_t *);
105cd1c6085SJohn Marino void end_order(void);
106cd1c6085SJohn Marino void add_weight(int32_t, int);
107cd1c6085SJohn Marino void add_weights(int32_t *);
108cd1c6085SJohn Marino void add_weight_num(int);
109cd1c6085SJohn Marino void add_order_collelem(collelem_t *);
110cd1c6085SJohn Marino void add_order_collsym(collsym_t *);
111cd1c6085SJohn Marino void add_order_char(wchar_t);
112cd1c6085SJohn Marino void add_order_ignore(void);
113cd1c6085SJohn Marino void add_order_ellipsis(void);
114cd1c6085SJohn Marino void add_order_symbol(char *);
115cd1c6085SJohn Marino void add_order_subst(void);
116cd1c6085SJohn Marino void add_subst_char(wchar_t);
117cd1c6085SJohn Marino void add_subst_collsym(collsym_t *);
118cd1c6085SJohn Marino void add_subst_collelem(collelem_t *);
119cd1c6085SJohn Marino void add_subst_symbol(char *);
120cd1c6085SJohn Marino int32_t get_weight(int32_t, int);
121cd1c6085SJohn Marino wchar_t * wsncpy(wchar_t *, const wchar_t *, size_t);
122cd1c6085SJohn Marino 
123cd1c6085SJohn Marino 
124cd1c6085SJohn Marino /* ctype.c - LC_CTYPE handling */
125cd1c6085SJohn Marino void init_ctype(void);
126cd1c6085SJohn Marino void add_ctype(int);
127cacd7ea7SJohn Marino void add_ctype_range(wchar_t);
128cd1c6085SJohn Marino void add_width(int, int);
129cd1c6085SJohn Marino void add_width_range(int, int, int);
130cd1c6085SJohn Marino void add_caseconv(int, int);
131cd1c6085SJohn Marino void dump_ctype(void);
132cd1c6085SJohn Marino 
133cd1c6085SJohn Marino /* messages.c - LC_MESSAGES handling */
134cd1c6085SJohn Marino void init_messages(void);
135cd1c6085SJohn Marino void add_message(wchar_t *);
136cd1c6085SJohn Marino void dump_messages(void);
137cd1c6085SJohn Marino 
138cd1c6085SJohn Marino /* monetary.c - LC_MONETARY handling */
139cd1c6085SJohn Marino void init_monetary(void);
140cd1c6085SJohn Marino void add_monetary_str(wchar_t *);
141cd1c6085SJohn Marino void add_monetary_num(int);
142cd1c6085SJohn Marino void reset_monetary_group(void);
143cd1c6085SJohn Marino void add_monetary_group(int);
144cd1c6085SJohn Marino void dump_monetary(void);
145cd1c6085SJohn Marino 
146cd1c6085SJohn Marino /* numeric.c - LC_NUMERIC handling */
147cd1c6085SJohn Marino void init_numeric(void);
148cd1c6085SJohn Marino void add_numeric_str(wchar_t *);
149cd1c6085SJohn Marino void reset_numeric_group(void);
150cd1c6085SJohn Marino void add_numeric_group(int);
151cd1c6085SJohn Marino void dump_numeric(void);
152cd1c6085SJohn Marino 
153cd1c6085SJohn Marino /* time.c - LC_TIME handling */
154cd1c6085SJohn Marino void init_time(void);
155cd1c6085SJohn Marino void add_time_str(wchar_t *);
156cd1c6085SJohn Marino void reset_time_list(void);
157cd1c6085SJohn Marino void add_time_list(wchar_t *);
158cd1c6085SJohn Marino void check_time_list(void);
159cd1c6085SJohn Marino void dump_time(void);
160cd1c6085SJohn Marino 
161cd1c6085SJohn Marino /* wide.c -  Wide character handling. */
162cd1c6085SJohn Marino int to_wide(wchar_t *, const char *);
163cd1c6085SJohn Marino int to_mbs(char *, wchar_t);
164cd1c6085SJohn Marino int to_mb(char *, wchar_t);
165cd1c6085SJohn Marino char *to_mb_string(const wchar_t *);
166cd1c6085SJohn Marino void set_wide_encoding(const char *);
167cd1c6085SJohn Marino void werr(const char *, ...);
168cd1c6085SJohn Marino const char *get_wide_encoding(void);
169cd1c6085SJohn Marino int max_wide(void);
170cd1c6085SJohn Marino 
171cd1c6085SJohn Marino //#define	_(x)	gettext(x)
172cd1c6085SJohn Marino #define	INTERR	fprintf(stderr,"internal fault (%s:%d)", __FILE__, __LINE__)
173