1*cd1c6085SJohn Marino /* 2*cd1c6085SJohn Marino * This file and its contents are supplied under the terms of the 3*cd1c6085SJohn Marino * Common Development and Distribution License ("CDDL"), version 1.0. 4*cd1c6085SJohn Marino * You may only use this file in accordance with the terms of version 5*cd1c6085SJohn Marino * 1.0 of the CDDL. 6*cd1c6085SJohn Marino * 7*cd1c6085SJohn Marino * A full copy of the text of the CDDL should have accompanied this 8*cd1c6085SJohn Marino * source. A copy is of the CDDL is also available via the Internet 9*cd1c6085SJohn Marino * at http://www.illumos.org/license/CDDL. 10*cd1c6085SJohn Marino */ 11*cd1c6085SJohn Marino 12*cd1c6085SJohn Marino /* 13*cd1c6085SJohn Marino * Copyright 2010 Nexenta Systems, Inc. All rights reserved. 14*cd1c6085SJohn Marino * Copyright 2013 DEY Storage Systmes, Inc. 15*cd1c6085SJohn Marino * Copyright 2015 John Marino <draco@marino.st> 16*cd1c6085SJohn Marino */ 17*cd1c6085SJohn Marino 18*cd1c6085SJohn Marino /* 19*cd1c6085SJohn Marino * POSIX localedef. 20*cd1c6085SJohn Marino */ 21*cd1c6085SJohn Marino 22*cd1c6085SJohn Marino /* Common header files. */ 23*cd1c6085SJohn Marino #include <stdio.h> 24*cd1c6085SJohn Marino #include <stdlib.h> 25*cd1c6085SJohn Marino #include <stdarg.h> 26*cd1c6085SJohn Marino #include <sys/types.h> 27*cd1c6085SJohn Marino 28*cd1c6085SJohn Marino extern int com_char; 29*cd1c6085SJohn Marino extern int esc_char; 30*cd1c6085SJohn Marino extern int mb_cur_max; 31*cd1c6085SJohn Marino extern int mb_cur_min; 32*cd1c6085SJohn Marino extern int last_kw; 33*cd1c6085SJohn Marino extern int verbose; 34*cd1c6085SJohn Marino extern int yydebug; 35*cd1c6085SJohn Marino extern int lineno; 36*cd1c6085SJohn Marino extern int undefok; /* mostly ignore undefined symbols */ 37*cd1c6085SJohn Marino extern int warnok; 38*cd1c6085SJohn Marino extern int warnings; 39*cd1c6085SJohn Marino 40*cd1c6085SJohn Marino int yylex(void); 41*cd1c6085SJohn Marino void yyerror(const char *); 42*cd1c6085SJohn Marino void errf(const char *, ...); 43*cd1c6085SJohn Marino void warn(const char *, ...); 44*cd1c6085SJohn Marino 45*cd1c6085SJohn Marino int putl_category(const char *, FILE *); 46*cd1c6085SJohn Marino int wr_category(void *, size_t, FILE *); 47*cd1c6085SJohn Marino FILE *open_category(void); 48*cd1c6085SJohn Marino void close_category(FILE *); 49*cd1c6085SJohn Marino void copy_category(char *); 50*cd1c6085SJohn Marino const char *category_name(void); 51*cd1c6085SJohn Marino 52*cd1c6085SJohn Marino int get_category(void); 53*cd1c6085SJohn Marino int get_symbol(void); 54*cd1c6085SJohn Marino int get_escaped(int); 55*cd1c6085SJohn Marino int get_wide(void); 56*cd1c6085SJohn Marino void reset_scanner(const char *); 57*cd1c6085SJohn Marino void scan_to_eol(void); 58*cd1c6085SJohn Marino void add_wcs(wchar_t); 59*cd1c6085SJohn Marino void add_tok(int); 60*cd1c6085SJohn Marino wchar_t *get_wcs(void); 61*cd1c6085SJohn Marino 62*cd1c6085SJohn Marino /* charmap.c - CHARMAP handling */ 63*cd1c6085SJohn Marino void init_charmap(void); 64*cd1c6085SJohn Marino void add_charmap(char *, int); 65*cd1c6085SJohn Marino void add_charmap_undefined(char *); 66*cd1c6085SJohn Marino void add_charmap_posix(void); 67*cd1c6085SJohn Marino void add_charmap_range(char *, char *, int); 68*cd1c6085SJohn Marino void add_charmap_char(char *name, int val); 69*cd1c6085SJohn Marino int lookup_charmap(const char *, wchar_t *); 70*cd1c6085SJohn Marino int check_charmap_undefined(char *); 71*cd1c6085SJohn Marino int check_charmap(wchar_t); 72*cd1c6085SJohn Marino 73*cd1c6085SJohn Marino /* collate.o - LC_COLLATE handling */ 74*cd1c6085SJohn Marino typedef struct collelem collelem_t; 75*cd1c6085SJohn Marino typedef struct collsym collsym_t; 76*cd1c6085SJohn Marino void init_collate(void); 77*cd1c6085SJohn Marino void define_collsym(char *); 78*cd1c6085SJohn Marino void define_collelem(char *, wchar_t *); 79*cd1c6085SJohn Marino void add_order_directive(void); 80*cd1c6085SJohn Marino void add_order_bit(int); 81*cd1c6085SJohn Marino void dump_collate(void); 82*cd1c6085SJohn Marino collsym_t *lookup_collsym(char *); 83*cd1c6085SJohn Marino collelem_t *lookup_collelem(char *); 84*cd1c6085SJohn Marino void start_order_collelem(collelem_t *); 85*cd1c6085SJohn Marino void start_order_undefined(void); 86*cd1c6085SJohn Marino void start_order_symbol(char *); 87*cd1c6085SJohn Marino void start_order_char(wchar_t); 88*cd1c6085SJohn Marino void start_order_ellipsis(void); 89*cd1c6085SJohn Marino void end_order_collsym(collsym_t *); 90*cd1c6085SJohn Marino void end_order(void); 91*cd1c6085SJohn Marino void add_weight(int32_t, int); 92*cd1c6085SJohn Marino void add_weights(int32_t *); 93*cd1c6085SJohn Marino void add_weight_num(int); 94*cd1c6085SJohn Marino void add_order_collelem(collelem_t *); 95*cd1c6085SJohn Marino void add_order_collsym(collsym_t *); 96*cd1c6085SJohn Marino void add_order_char(wchar_t); 97*cd1c6085SJohn Marino void add_order_ignore(void); 98*cd1c6085SJohn Marino void add_order_ellipsis(void); 99*cd1c6085SJohn Marino void add_order_symbol(char *); 100*cd1c6085SJohn Marino void add_order_subst(void); 101*cd1c6085SJohn Marino void add_subst_char(wchar_t); 102*cd1c6085SJohn Marino void add_subst_collsym(collsym_t *); 103*cd1c6085SJohn Marino void add_subst_collelem(collelem_t *); 104*cd1c6085SJohn Marino void add_subst_symbol(char *); 105*cd1c6085SJohn Marino int32_t get_weight(int32_t, int); 106*cd1c6085SJohn Marino wchar_t * wsncpy(wchar_t *, const wchar_t *, size_t); 107*cd1c6085SJohn Marino 108*cd1c6085SJohn Marino 109*cd1c6085SJohn Marino /* ctype.c - LC_CTYPE handling */ 110*cd1c6085SJohn Marino void init_ctype(void); 111*cd1c6085SJohn Marino void add_ctype(int); 112*cd1c6085SJohn Marino void add_ctype_range(int); 113*cd1c6085SJohn Marino void add_width(int, int); 114*cd1c6085SJohn Marino void add_width_range(int, int, int); 115*cd1c6085SJohn Marino void add_caseconv(int, int); 116*cd1c6085SJohn Marino void dump_ctype(void); 117*cd1c6085SJohn Marino 118*cd1c6085SJohn Marino /* messages.c - LC_MESSAGES handling */ 119*cd1c6085SJohn Marino void init_messages(void); 120*cd1c6085SJohn Marino void add_message(wchar_t *); 121*cd1c6085SJohn Marino void dump_messages(void); 122*cd1c6085SJohn Marino 123*cd1c6085SJohn Marino /* monetary.c - LC_MONETARY handling */ 124*cd1c6085SJohn Marino void init_monetary(void); 125*cd1c6085SJohn Marino void add_monetary_str(wchar_t *); 126*cd1c6085SJohn Marino void add_monetary_num(int); 127*cd1c6085SJohn Marino void reset_monetary_group(void); 128*cd1c6085SJohn Marino void add_monetary_group(int); 129*cd1c6085SJohn Marino void dump_monetary(void); 130*cd1c6085SJohn Marino 131*cd1c6085SJohn Marino /* numeric.c - LC_NUMERIC handling */ 132*cd1c6085SJohn Marino void init_numeric(void); 133*cd1c6085SJohn Marino void add_numeric_str(wchar_t *); 134*cd1c6085SJohn Marino void reset_numeric_group(void); 135*cd1c6085SJohn Marino void add_numeric_group(int); 136*cd1c6085SJohn Marino void dump_numeric(void); 137*cd1c6085SJohn Marino 138*cd1c6085SJohn Marino /* time.c - LC_TIME handling */ 139*cd1c6085SJohn Marino void init_time(void); 140*cd1c6085SJohn Marino void add_time_str(wchar_t *); 141*cd1c6085SJohn Marino void reset_time_list(void); 142*cd1c6085SJohn Marino void add_time_list(wchar_t *); 143*cd1c6085SJohn Marino void check_time_list(void); 144*cd1c6085SJohn Marino void dump_time(void); 145*cd1c6085SJohn Marino 146*cd1c6085SJohn Marino /* wide.c - Wide character handling. */ 147*cd1c6085SJohn Marino int to_wide(wchar_t *, const char *); 148*cd1c6085SJohn Marino int to_mbs(char *, wchar_t); 149*cd1c6085SJohn Marino int to_mb(char *, wchar_t); 150*cd1c6085SJohn Marino char *to_mb_string(const wchar_t *); 151*cd1c6085SJohn Marino void set_wide_encoding(const char *); 152*cd1c6085SJohn Marino void werr(const char *, ...); 153*cd1c6085SJohn Marino const char *get_wide_encoding(void); 154*cd1c6085SJohn Marino int max_wide(void); 155*cd1c6085SJohn Marino 156*cd1c6085SJohn Marino //#define _(x) gettext(x) 157*cd1c6085SJohn Marino #define INTERR fprintf(stderr,"internal fault (%s:%d)", __FILE__, __LINE__) 158