| /* winduni.h -- header file for unicode support for windres program. |
| Copyright (C) 1997-2024 Free Software Foundation, Inc. |
| Written by Ian Lance Taylor, Cygnus Support. |
| Rewritten by Kai Tietz, Onevision. |
| |
| This file is part of GNU Binutils. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA |
| 02110-1301, USA. */ |
| |
| #include "ansidecl.h" |
| |
| #ifndef WINDUNI_H |
| #define WINDUNI_H |
| |
| /* This header file declares the types and functions we use for |
| unicode support in windres. Our unicode support is very limited at |
| present. |
| |
| We don't put this stuff in windres.h so that winduni.c doesn't have |
| to include windres.h. winduni.c needs to includes windows.h, and |
| that would conflict with the definitions of Windows macros we |
| already have in windres.h. */ |
| |
| /* Use bfd_size_type to ensure a sufficient number of bits. */ |
| #ifndef DEFINED_RC_UINT_TYPE |
| #define DEFINED_RC_UINT_TYPE |
| typedef bfd_size_type rc_uint_type; |
| #endif |
| |
| /* We use this type to hold a unicode character. */ |
| |
| typedef unsigned short unichar; |
| |
| /* Escape character translations. */ |
| |
| #define ESCAPE_A 007 |
| #define ESCAPE_B 010 |
| #define ESCAPE_F 014 |
| #define ESCAPE_N 012 |
| #define ESCAPE_R 015 |
| #define ESCAPE_T 011 |
| #define ESCAPE_V 013 |
| |
| /* Convert an ASCII string to a unicode string. */ |
| extern void unicode_from_ascii (rc_uint_type *, unichar **, const char *); |
| |
| /* Convert an unicode string to an ASCII string. */ |
| extern void ascii_from_unicode (rc_uint_type *, const unichar *, char **); |
| |
| /* Duplicate a unicode string by using res_alloc. */ |
| extern unichar *unichar_dup (const unichar *); |
| |
| /* Duplicate a unicode string by using res_alloc and make it uppercase. */ |
| extern unichar *unichar_dup_uppercase (const unichar *); |
| |
| /* The count of unichar elements. */ |
| extern rc_uint_type unichar_len (const unichar *); |
| |
| /* Print a unicode string to a file. */ |
| extern void unicode_print (FILE *, const unichar *, rc_uint_type); |
| |
| /* Print a ascii string to a file. */ |
| extern void ascii_print (FILE *, const char *, rc_uint_type); |
| |
| /* Print a quoted unicode string to a file. */ |
| extern void unicode_print_quoted (FILE *, const unichar *, rc_uint_type); |
| |
| #ifndef CP_UTF8 |
| #define CP_UTF7 65000 /* UTF-7 translation. */ |
| #define CP_UTF8 65001 /* UTF-8 translation. */ |
| #endif |
| |
| #ifndef CP_UTF16 |
| #define CP_UTF16 65002 /* UTF-16 translation. */ |
| #endif |
| |
| #ifndef CP_ACP |
| #define CP_ACP 0 /* Default to ANSI code page. */ |
| #endif |
| |
| #ifndef CP_OEM |
| #define CP_OEM 1 /* Default OEM code page. */ |
| #endif |
| |
| /* Specifies the default codepage to be used for unicode |
| transformations. By default this is CP_ACP. */ |
| extern rc_uint_type wind_default_codepage; |
| |
| /* Specifies the currently used codepage for unicode |
| transformations. By default this is CP_ACP. */ |
| extern rc_uint_type wind_current_codepage; |
| |
| typedef struct wind_language_t |
| { |
| unsigned id; |
| unsigned doscp; |
| unsigned wincp; |
| const char *name; |
| const char *country; |
| } wind_language_t; |
| |
| extern const wind_language_t *wind_find_language_by_id (unsigned); |
| extern int unicode_is_valid_codepage (rc_uint_type); |
| |
| typedef struct local_iconv_map |
| { |
| rc_uint_type codepage; |
| const char * iconv_name; |
| } local_iconv_map; |
| |
| extern const local_iconv_map *wind_find_codepage_info (unsigned); |
| |
| /* Convert an Codepage string to a unicode string. */ |
| extern void unicode_from_codepage (rc_uint_type *, unichar **, const char *, rc_uint_type); |
| extern void unicode_from_ascii_len (rc_uint_type *, unichar **, const char *, rc_uint_type ); |
| |
| /* Convert an unicode string to an codepage string. */ |
| extern void codepage_from_unicode (rc_uint_type *, const unichar *, char **, rc_uint_type); |
| |
| /* Windres support routine called by unicode_from_ascii. This is both |
| here and in windres.h. It should probably be in a separate header |
| file, but it hardly seems worth it for one function. */ |
| |
| extern void * res_alloc (rc_uint_type); |
| |
| #endif |