1286432Sbapt/*
2286432Sbapt * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
3286432Sbapt * Copyright 2015 John Marino <draco@marino.st>
4286432Sbapt *
5286432Sbapt * This source code is derived from the illumos localedef command, and
6286432Sbapt * provided under BSD-style license terms by Nexenta Systems, Inc.
7286432Sbapt *
8286432Sbapt * Redistribution and use in source and binary forms, with or without
9286432Sbapt * modification, are permitted provided that the following conditions
10286432Sbapt * are met:
11286432Sbapt *
12286432Sbapt * 1. Redistributions of source code must retain the above copyright
13286432Sbapt *    notice, this list of conditions and the following disclaimer.
14286432Sbapt * 2. Redistributions in binary form must reproduce the above copyright
15286432Sbapt *    notice, this list of conditions and the following disclaimer in the
16286432Sbapt *    documentation and/or other materials provided with the distribution.
17286432Sbapt *
18286432Sbapt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19286432Sbapt * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20286432Sbapt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21286432Sbapt * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22286432Sbapt * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23286432Sbapt * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24286432Sbapt * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25286432Sbapt * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26286432Sbapt * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27286432Sbapt * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28286432Sbapt * POSSIBILITY OF SUCH DAMAGE.
29286432Sbapt *
30286432Sbapt * $FreeBSD: releng/11.0/usr.bin/localedef/localedef.h 290517 2015-11-07 22:57:00Z bapt $
31286432Sbapt */
32286432Sbapt
33286432Sbapt/*
34286432Sbapt * POSIX localedef.
35286432Sbapt */
36286432Sbapt
37286432Sbapt/* Common header files. */
38286432Sbapt#include <stdio.h>
39286432Sbapt#include <stdlib.h>
40286432Sbapt#include <stdarg.h>
41286432Sbapt#include <sys/types.h>
42286432Sbapt
43286432Sbaptextern int com_char;
44286432Sbaptextern int esc_char;
45286432Sbaptextern int mb_cur_max;
46286432Sbaptextern int mb_cur_min;
47286432Sbaptextern int last_kw;
48286432Sbaptextern int verbose;
49286432Sbaptextern int yydebug;
50286432Sbaptextern int lineno;
51286432Sbaptextern int undefok;	/* mostly ignore undefined symbols */
52286432Sbaptextern int warnok;
53286432Sbaptextern int warnings;
54286432Sbapt
55286432Sbaptint yylex(void);
56286432Sbaptvoid yyerror(const char *);
57286432Sbaptvoid errf(const char *, ...);
58286432Sbaptvoid warn(const char *, ...);
59286432Sbapt
60286432Sbaptint putl_category(const char *, FILE *);
61286432Sbaptint wr_category(void *, size_t, FILE *);
62286432SbaptFILE *open_category(void);
63286432Sbaptvoid close_category(FILE *);
64286432Sbaptvoid copy_category(char *);
65286432Sbaptconst char *category_name(void);
66286432Sbapt
67286432Sbaptint get_category(void);
68286432Sbaptint get_symbol(void);
69286432Sbaptint get_escaped(int);
70286432Sbaptint get_wide(void);
71286432Sbaptvoid reset_scanner(const char *);
72286432Sbaptvoid scan_to_eol(void);
73286432Sbaptvoid add_wcs(wchar_t);
74286432Sbaptvoid add_tok(int);
75286432Sbaptwchar_t *get_wcs(void);
76286432Sbapt
77286432Sbapt/* charmap.c - CHARMAP handling */
78286432Sbaptvoid init_charmap(void);
79290511Sbaptvoid add_charmap(const char *, int);
80286432Sbaptvoid add_charmap_undefined(char *);
81286432Sbaptvoid add_charmap_posix(void);
82286432Sbaptvoid add_charmap_range(char *, char *, int);
83290511Sbaptvoid add_charmap_char(const char *name, int val);
84286432Sbaptint lookup_charmap(const char *, wchar_t *);
85286432Sbaptint check_charmap_undefined(char *);
86286432Sbaptint check_charmap(wchar_t);
87286432Sbapt
88286432Sbapt/* collate.o - LC_COLLATE handling */
89286432Sbapttypedef struct collelem collelem_t;
90286432Sbapttypedef struct collsym collsym_t;
91286432Sbaptvoid init_collate(void);
92286432Sbaptvoid define_collsym(char *);
93286432Sbaptvoid define_collelem(char *, wchar_t *);
94286432Sbaptvoid add_order_directive(void);
95286432Sbaptvoid add_order_bit(int);
96286432Sbaptvoid dump_collate(void);
97286432Sbaptcollsym_t *lookup_collsym(char *);
98286432Sbaptcollelem_t *lookup_collelem(char *);
99286432Sbaptvoid start_order_collelem(collelem_t *);
100286432Sbaptvoid start_order_undefined(void);
101286432Sbaptvoid start_order_symbol(char *);
102286432Sbaptvoid start_order_char(wchar_t);
103286432Sbaptvoid start_order_ellipsis(void);
104286432Sbaptvoid end_order_collsym(collsym_t *);
105286432Sbaptvoid end_order(void);
106286432Sbaptvoid add_weight(int32_t, int);
107286432Sbaptvoid add_weights(int32_t *);
108286432Sbaptvoid add_weight_num(int);
109286432Sbaptvoid add_order_collelem(collelem_t *);
110286432Sbaptvoid add_order_collsym(collsym_t *);
111286432Sbaptvoid add_order_char(wchar_t);
112286432Sbaptvoid add_order_ignore(void);
113286432Sbaptvoid add_order_ellipsis(void);
114286432Sbaptvoid add_order_symbol(char *);
115286432Sbaptvoid add_order_subst(void);
116286432Sbaptvoid add_subst_char(wchar_t);
117286432Sbaptvoid add_subst_collsym(collsym_t *);
118286432Sbaptvoid add_subst_collelem(collelem_t *);
119286432Sbaptvoid add_subst_symbol(char *);
120286432Sbaptint32_t get_weight(int32_t, int);
121286432Sbaptwchar_t * wsncpy(wchar_t *, const wchar_t *, size_t);
122286432Sbapt
123286432Sbapt
124286432Sbapt/* ctype.c - LC_CTYPE handling */
125286432Sbaptvoid init_ctype(void);
126286432Sbaptvoid add_ctype(int);
127290517Sbaptvoid add_ctype_range(wchar_t);
128286432Sbaptvoid add_width(int, int);
129286432Sbaptvoid add_width_range(int, int, int);
130286432Sbaptvoid add_caseconv(int, int);
131286432Sbaptvoid dump_ctype(void);
132286432Sbapt
133286432Sbapt/* messages.c - LC_MESSAGES handling */
134286432Sbaptvoid init_messages(void);
135286432Sbaptvoid add_message(wchar_t *);
136286432Sbaptvoid dump_messages(void);
137286432Sbapt
138286432Sbapt/* monetary.c - LC_MONETARY handling */
139286432Sbaptvoid init_monetary(void);
140286432Sbaptvoid add_monetary_str(wchar_t *);
141286432Sbaptvoid add_monetary_num(int);
142286432Sbaptvoid reset_monetary_group(void);
143286432Sbaptvoid add_monetary_group(int);
144286432Sbaptvoid dump_monetary(void);
145286432Sbapt
146286432Sbapt/* numeric.c - LC_NUMERIC handling */
147286432Sbaptvoid init_numeric(void);
148286432Sbaptvoid add_numeric_str(wchar_t *);
149286432Sbaptvoid reset_numeric_group(void);
150286432Sbaptvoid add_numeric_group(int);
151286432Sbaptvoid dump_numeric(void);
152286432Sbapt
153286432Sbapt/* time.c - LC_TIME handling */
154286432Sbaptvoid init_time(void);
155286432Sbaptvoid add_time_str(wchar_t *);
156286432Sbaptvoid reset_time_list(void);
157286432Sbaptvoid add_time_list(wchar_t *);
158286432Sbaptvoid check_time_list(void);
159286432Sbaptvoid dump_time(void);
160286432Sbapt
161286432Sbapt/* wide.c -  Wide character handling. */
162286432Sbaptint to_wide(wchar_t *, const char *);
163286432Sbaptint to_mbs(char *, wchar_t);
164286432Sbaptint to_mb(char *, wchar_t);
165286432Sbaptchar *to_mb_string(const wchar_t *);
166286432Sbaptvoid set_wide_encoding(const char *);
167286432Sbaptvoid werr(const char *, ...);
168286432Sbaptconst char *get_wide_encoding(void);
169286432Sbaptint max_wide(void);
170286432Sbapt
171286432Sbapt//#define	_(x)	gettext(x)
172286432Sbapt#define	INTERR	fprintf(stderr,"internal fault (%s:%d)", __FILE__, __LINE__)
173