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