xref: /dragonfly/usr.bin/localedef/localedef.h (revision dc6f5bdf)
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 
41*dc6f5bdfSSascha Wildner #define	yylex	localedef_yylex
42*dc6f5bdfSSascha Wildner 
43cd1c6085SJohn Marino extern int com_char;
44cd1c6085SJohn Marino extern int esc_char;
45cd1c6085SJohn Marino extern int mb_cur_max;
46cd1c6085SJohn Marino extern int mb_cur_min;
47cd1c6085SJohn Marino extern int last_kw;
48cd1c6085SJohn Marino extern int verbose;
4901bedb5aSSascha Wildner #if YYDEBUG
50cd1c6085SJohn Marino extern int yydebug;
5101bedb5aSSascha Wildner #endif
52cd1c6085SJohn Marino extern int lineno;
53cd1c6085SJohn Marino extern int undefok;	/* mostly ignore undefined symbols */
54cd1c6085SJohn Marino extern int warnok;
55cd1c6085SJohn Marino extern int warnings;
56cd1c6085SJohn Marino 
57cd1c6085SJohn Marino int yylex(void);
58cd1c6085SJohn Marino void yyerror(const char *);
596d08986dSSascha Wildner void errf(const char *, ...) __dead2;
60cd1c6085SJohn Marino void warn(const char *, ...);
61cd1c6085SJohn Marino 
62cd1c6085SJohn Marino int putl_category(const char *, FILE *);
63cd1c6085SJohn Marino int wr_category(void *, size_t, FILE *);
64cd1c6085SJohn Marino FILE *open_category(void);
65cd1c6085SJohn Marino void close_category(FILE *);
66cd1c6085SJohn Marino void copy_category(char *);
67cd1c6085SJohn Marino const char *category_name(void);
68cd1c6085SJohn Marino 
69cd1c6085SJohn Marino int get_category(void);
70cd1c6085SJohn Marino int get_symbol(void);
71cd1c6085SJohn Marino int get_escaped(int);
72cd1c6085SJohn Marino int get_wide(void);
73cd1c6085SJohn Marino void reset_scanner(const char *);
74cd1c6085SJohn Marino void scan_to_eol(void);
75cd1c6085SJohn Marino void add_wcs(wchar_t);
76cd1c6085SJohn Marino void add_tok(int);
77cd1c6085SJohn Marino wchar_t *get_wcs(void);
78cd1c6085SJohn Marino 
79cd1c6085SJohn Marino /* charmap.c - CHARMAP handling */
80cd1c6085SJohn Marino void init_charmap(void);
81cacd7ea7SJohn Marino void add_charmap(const char *, int);
82cd1c6085SJohn Marino void add_charmap_undefined(char *);
83cd1c6085SJohn Marino void add_charmap_posix(void);
84cd1c6085SJohn Marino void add_charmap_range(char *, char *, int);
85cacd7ea7SJohn Marino void add_charmap_char(const char *name, int val);
86cd1c6085SJohn Marino int lookup_charmap(const char *, wchar_t *);
87cd1c6085SJohn Marino int check_charmap_undefined(char *);
88cd1c6085SJohn Marino int check_charmap(wchar_t);
89cd1c6085SJohn Marino 
90cd1c6085SJohn Marino /* collate.o - LC_COLLATE handling */
91cd1c6085SJohn Marino typedef struct collelem collelem_t;
92cd1c6085SJohn Marino typedef struct collsym collsym_t;
93cd1c6085SJohn Marino void init_collate(void);
94cd1c6085SJohn Marino void define_collsym(char *);
95cd1c6085SJohn Marino void define_collelem(char *, wchar_t *);
96cd1c6085SJohn Marino void add_order_directive(void);
97cd1c6085SJohn Marino void add_order_bit(int);
98cd1c6085SJohn Marino void dump_collate(void);
99cd1c6085SJohn Marino collsym_t *lookup_collsym(char *);
100cd1c6085SJohn Marino collelem_t *lookup_collelem(char *);
101cd1c6085SJohn Marino void start_order_collelem(collelem_t *);
102cd1c6085SJohn Marino void start_order_undefined(void);
103cd1c6085SJohn Marino void start_order_symbol(char *);
104cd1c6085SJohn Marino void start_order_char(wchar_t);
105cd1c6085SJohn Marino void start_order_ellipsis(void);
106cd1c6085SJohn Marino void end_order_collsym(collsym_t *);
107cd1c6085SJohn Marino void end_order(void);
108cd1c6085SJohn Marino void add_weight(int32_t, int);
109cd1c6085SJohn Marino void add_weights(int32_t *);
110cd1c6085SJohn Marino void add_weight_num(int);
111cd1c6085SJohn Marino void add_order_collelem(collelem_t *);
112cd1c6085SJohn Marino void add_order_collsym(collsym_t *);
113cd1c6085SJohn Marino void add_order_char(wchar_t);
114cd1c6085SJohn Marino void add_order_ignore(void);
115cd1c6085SJohn Marino void add_order_ellipsis(void);
116cd1c6085SJohn Marino void add_order_symbol(char *);
117cd1c6085SJohn Marino void add_order_subst(void);
118cd1c6085SJohn Marino void add_subst_char(wchar_t);
119cd1c6085SJohn Marino void add_subst_collsym(collsym_t *);
120cd1c6085SJohn Marino void add_subst_collelem(collelem_t *);
121cd1c6085SJohn Marino void add_subst_symbol(char *);
122cd1c6085SJohn Marino int32_t get_weight(int32_t, int);
123cd1c6085SJohn Marino wchar_t * wsncpy(wchar_t *, const wchar_t *, size_t);
124cd1c6085SJohn Marino 
125cd1c6085SJohn Marino 
126cd1c6085SJohn Marino /* ctype.c - LC_CTYPE handling */
127cd1c6085SJohn Marino void init_ctype(void);
128cd1c6085SJohn Marino void add_ctype(int);
129cacd7ea7SJohn Marino void add_ctype_range(wchar_t);
130cd1c6085SJohn Marino void add_width(int, int);
131cd1c6085SJohn Marino void add_width_range(int, int, int);
132cd1c6085SJohn Marino void add_caseconv(int, int);
133cd1c6085SJohn Marino void dump_ctype(void);
134cd1c6085SJohn Marino 
135cd1c6085SJohn Marino /* messages.c - LC_MESSAGES handling */
136cd1c6085SJohn Marino void init_messages(void);
137cd1c6085SJohn Marino void add_message(wchar_t *);
138cd1c6085SJohn Marino void dump_messages(void);
139cd1c6085SJohn Marino 
140cd1c6085SJohn Marino /* monetary.c - LC_MONETARY handling */
141cd1c6085SJohn Marino void init_monetary(void);
142cd1c6085SJohn Marino void add_monetary_str(wchar_t *);
143cd1c6085SJohn Marino void add_monetary_num(int);
144cd1c6085SJohn Marino void reset_monetary_group(void);
145cd1c6085SJohn Marino void add_monetary_group(int);
146cd1c6085SJohn Marino void dump_monetary(void);
147cd1c6085SJohn Marino 
148cd1c6085SJohn Marino /* numeric.c - LC_NUMERIC handling */
149cd1c6085SJohn Marino void init_numeric(void);
150cd1c6085SJohn Marino void add_numeric_str(wchar_t *);
151cd1c6085SJohn Marino void reset_numeric_group(void);
152cd1c6085SJohn Marino void add_numeric_group(int);
153cd1c6085SJohn Marino void dump_numeric(void);
154cd1c6085SJohn Marino 
155cd1c6085SJohn Marino /* time.c - LC_TIME handling */
156cd1c6085SJohn Marino void init_time(void);
157cd1c6085SJohn Marino void add_time_str(wchar_t *);
158cd1c6085SJohn Marino void reset_time_list(void);
159cd1c6085SJohn Marino void add_time_list(wchar_t *);
160cd1c6085SJohn Marino void check_time_list(void);
161cd1c6085SJohn Marino void dump_time(void);
162cd1c6085SJohn Marino 
163cd1c6085SJohn Marino /* wide.c -  Wide character handling. */
164cd1c6085SJohn Marino int to_wide(wchar_t *, const char *);
165cd1c6085SJohn Marino int to_mbs(char *, wchar_t);
166cd1c6085SJohn Marino int to_mb(char *, wchar_t);
167cd1c6085SJohn Marino char *to_mb_string(const wchar_t *);
168cd1c6085SJohn Marino void set_wide_encoding(const char *);
169cd1c6085SJohn Marino void werr(const char *, ...);
170cd1c6085SJohn Marino const char *get_wide_encoding(void);
171cd1c6085SJohn Marino int max_wide(void);
172cd1c6085SJohn Marino 
173cd1c6085SJohn Marino //#define	_(x)	gettext(x)
174cd1c6085SJohn Marino #define	INTERR	fprintf(stderr,"internal fault (%s:%d)", __FILE__, __LINE__)
175