28#include "kmp_i18n_default.inc"
33#define get_section(id) ((id) >> 16)
34#define get_number(id) ((id)&0xFFFF)
78#define KMP_I18N_NULLCAT ((nl_catd)(-1))
79static nl_catd cat = KMP_I18N_NULLCAT;
80static char const *
name =
81 (KMP_VERSION_MAJOR == 4 ?
"libguide.cat" :
"libomp.cat");
97 english = lang == NULL ||
98 strcmp(lang,
"") == 0 || strcmp(lang,
" ") == 0 ||
101 strcmp(lang,
"C") == 0 || strcmp(lang,
"POSIX") == 0;
110 english = (strcmp(lang,
"en") == 0);
123 cat = catopen(
name, 0);
139 KMP_HNT(CheckEnvVar,
"NLSPATH", nlspath),
151 int number =
get_number(kmp_i18n_prp_Version);
152 char const *expected = __kmp_i18n_default_table.sect[section].str[number];
159 if (strcmp(version.
str, expected) != 0) {
165 char const *
name =
"NLSPATH";
182 cat = KMP_I18N_NULLCAT;
191 char const *message = NULL;
193 if (1 <= section && section <= __kmp_i18n_default_table.size) {
194 if (1 <= number && number <= __kmp_i18n_default_table.sect[section].size) {
199 message = catgets(cat, section, number,
200 __kmp_i18n_default_table.sect[section].str[number]);
202 if (message == NULL) {
203 message = __kmp_i18n_default_table.sect[section].str[number];
207 if (message == NULL) {
224#define KMP_I18N_NULLCAT NULL
225static HMODULE cat = KMP_I18N_NULLCAT;
226static char const *
name =
227 (KMP_VERSION_MAJOR == 4 ?
"libguide40ui.dll" :
"libompui.dll");
229static kmp_i18n_table_t table = {0, NULL};
233static UINT
const default_code_page = CP_OEMCP;
234static UINT code_page = default_code_page;
236static char const *___catgets(kmp_i18n_id_t
id);
237static UINT get_code_page();
238static void kmp_i18n_table_free(kmp_i18n_table_t *table);
240static UINT get_code_page() {
242 UINT cp = default_code_page;
245 if (_stricmp(
value,
"ANSI") == 0) {
247 }
else if (_stricmp(
value,
"OEM") == 0) {
249 }
else if (_stricmp(
value,
"UTF-8") == 0 || _stricmp(
value,
"UTF8") == 0) {
251 }
else if (_stricmp(
value,
"UTF-7") == 0 || _stricmp(
value,
"UTF7") == 0) {
262static void kmp_i18n_table_free(kmp_i18n_table_t *table) {
265 for (
s = 0;
s < table->size; ++
s) {
266 for (m = 0; m < table->sect[
s].size; ++m) {
269 table->sect[
s].str[m] = NULL;
271 table->sect[
s].size = 0;
274 table->sect[
s].str = NULL;
283 LCID locale_id = GetThreadLocale();
284 WORD lang_id = LANGIDFROMLCID(locale_id);
285 WORD primary_lang_id = PRIMARYLANGID(lang_id);
295 if (primary_lang_id == LANG_ENGLISH) {
308 BOOL brc = GetModuleHandleEx(
309 GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
310 GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
322 DWORD drc = GetModuleFileName(handle,
path.str,
path.size);
327 if (drc <
path.size) {
339 (
unsigned long)(locale_id),
name);
345 cat = LoadLibraryEx(
path.str, NULL, LOAD_LIBRARY_AS_DATAFILE);
351 DWORD
error = GetLastError();
368 (error == ERROR_BAD_EXE_FORMAT
380 int number =
get_number(kmp_i18n_prp_Version);
381 char const *expected = __kmp_i18n_default_table.sect[section].str[number];
386 if (strcmp(version.
str, expected) != 0) {
400 code_page = get_code_page();
410 kmp_i18n_table_free(&table);
412 cat = KMP_I18N_NULLCAT;
414 code_page = default_code_page;
444static int ___strip_crs(
char *str) {
448 if (str[in] !=
'\r') {
460static char const *___catgets(kmp_i18n_id_t
id) {
464 wchar_t *wmsg = NULL;
472 FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
473 FORMAT_MESSAGE_FROM_HMODULE |
474 FORMAT_MESSAGE_IGNORE_INSERTS,
483 wmsg = (
wchar_t *)
addr;
487 len = WideCharToMultiByte(code_page,
501 rc = WideCharToMultiByte(code_page,
507 if (rc <= 0 || rc > len) {
515 len = ___strip_crs(msg);
518 if (len >= 1 && msg[len - 1] ==
'\n') {
544 char const *message = NULL;
546 if (1 <= section && section <= __kmp_i18n_default_table.size) {
547 if (1 <= number && number <= __kmp_i18n_default_table.sect[section].size) {
551 if (cat != KMP_I18N_NULLCAT) {
552 if (table.size == 0) {
554 (__kmp_i18n_default_table.size + 2),
sizeof(kmp_i18n_section_t));
555 table.size = __kmp_i18n_default_table.size;
557 if (table.sect[section].size == 0) {
559 __kmp_i18n_default_table.sect[section].size + 2,
560 sizeof(
char const *));
561 table.sect[section].size =
562 __kmp_i18n_default_table.sect[section].size;
564 if (table.sect[section].str[number] == NULL) {
565 table.sect[section].str[number] = ___catgets(
id);
567 message = table.sect[section].str[number];
569 if (message == NULL) {
572 message = __kmp_i18n_default_table.sect[section].str[number];
576 if (message == NULL) {
588#error I18n support is not implemented for this OS.
595 struct kmp_i18n_id_range_t {
600 static struct kmp_i18n_id_range_t ranges[] = {
601 {kmp_i18n_prp_first, kmp_i18n_prp_last},
602 {kmp_i18n_str_first, kmp_i18n_str_last},
603 {kmp_i18n_fmt_first, kmp_i18n_fmt_last},
604 {kmp_i18n_msg_first, kmp_i18n_msg_last},
605 {kmp_i18n_hnt_first, kmp_i18n_hnt_last}};
607 int num_of_ranges =
sizeof(ranges) /
sizeof(
struct kmp_i18n_id_range_t);
611 for (range = 0; range < num_of_ranges; ++range) {
613 for (
id = (kmp_i18n_id_t)(ranges[range].first + 1);
id < ranges[range].last;
614 id = (kmp_i18n_id_t)(
id + 1)) {
631 va_start(
args, id_arg);
636 kmp_i18n_id_t
id = (kmp_i18n_id_t)id_arg;
649 FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER,
651 len = ___strip_crs(str);
662 msg.
num =
id & 0xFFFF;
673 char *message = NULL;
677 LPVOID buffer = NULL;
681 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
err,
682 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
683 (LPTSTR)&buffer, 0, NULL);
687 len = ___strip_crs(message);
689 while (len > 0 && message[len - 1] ==
'\n') {
699 if (buffer != NULL) {
711#if (defined(__GLIBC__) && defined(_GNU_SOURCE)) || \
712 (defined(__BIONIC__) && defined(_GNU_SOURCE) && \
713 __ANDROID_API__ >= __ANDROID_API_M__)
717 char *
const err_msg = strerror_r(
err, buffer,
sizeof(buffer));
728 if (buffer == NULL) {
731 rc = strerror_r(
err, buffer,
size);
735 while (rc == ERANGE) {
739 if (buffer == NULL) {
742 rc = strerror_r(
err, buffer,
size);
757 if (message == NULL) {
790 kmp_i18n_id_t format;
802 format = kmp_i18n_fmt_Info;
805 format = kmp_i18n_fmt_Warning;
808 format = kmp_i18n_fmt_Fatal;
825 switch (message.
type) {
827 format = kmp_i18n_fmt_Hint;
833 format = kmp_i18n_fmt_SysErr;
859 va_start(
args, message);
866 va_start(
args, message);
__itt_string_handle * name
void const char const char int ITT_FORMAT __itt_group_sync s
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d __itt_event ITT_FORMAT __itt_group_mark d void const wchar_t const wchar_t int ITT_FORMAT __itt_group_sync __itt_group_fsync x void const wchar_t int const wchar_t int int ITT_FORMAT __itt_group_sync __itt_group_fsync x void ITT_FORMAT __itt_group_sync __itt_group_fsync p void ITT_FORMAT __itt_group_sync __itt_group_fsync p void size_t ITT_FORMAT lu no args __itt_obj_prop_t __itt_obj_state_t ITT_FORMAT d const char ITT_FORMAT s const char ITT_FORMAT s __itt_frame ITT_FORMAT p __itt_counter ITT_FORMAT p __itt_counter unsigned long long ITT_FORMAT lu __itt_counter unsigned long long ITT_FORMAT lu __itt_counter __itt_clock_domain unsigned long long void ITT_FORMAT p const wchar_t ITT_FORMAT S __itt_mark_type const wchar_t ITT_FORMAT S __itt_mark_type const char ITT_FORMAT s __itt_mark_type ITT_FORMAT d __itt_caller ITT_FORMAT p __itt_caller ITT_FORMAT p no args const __itt_domain __itt_clock_domain unsigned long long __itt_id ITT_FORMAT lu const __itt_domain __itt_clock_domain unsigned long long __itt_id __itt_id void ITT_FORMAT p const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_clock_domain unsigned long long __itt_id __itt_string_handle __itt_scope ITT_FORMAT d const __itt_domain __itt_scope __itt_string_handle const char size_t ITT_FORMAT lu const __itt_domain __itt_clock_domain unsigned long long __itt_relation __itt_id ITT_FORMAT lu __itt_track_group __itt_string_handle __itt_track_group_type ITT_FORMAT d __itt_track ITT_FORMAT p void int const int int const char int ITT_FORMAT d void void const char * path
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id tail
int __kmp_generate_warnings
#define KMP_INTERNAL_MALLOC(sz)
KMP_NORETURN void __kmp_abort_process(void)
void __kmp_thread_sleep(int millis)
#define KMP_INTERNAL_CALLOC(n, sz)
#define KMP_INTERNAL_FREE(p)
#define KMP_DEBUG_ASSERT(cond)
char * __kmp_env_get(char const *name)
static volatile kmp_i18n_cat_status_t status
static kmp_bootstrap_lock_t lock
static char * sys_error(int err)
kmp_msg_t __kmp_msg_error_mesg(char const *mesg)
static void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, va_list ap)
enum kmp_i18n_cat_status kmp_i18n_cat_status_t
static char const * no_message_available
kmp_msg_t __kmp_msg_error_code(int code)
static void __kmp_i18n_do_catopen()
void __kmp_i18n_catopen()
kmp_msg_t __kmp_msg_format(unsigned id_arg,...)
void __kmp_i18n_dump_catalog(kmp_str_buf_t *buffer)
void __kmp_fatal(kmp_msg_t message,...)
enum kmp_msg_type kmp_msg_type_t
#define KMP_SYSERRCODE(code)
enum kmp_msg_severity kmp_msg_severity_t
char const * __kmp_i18n_catgets(kmp_i18n_id_t id)
void __kmp_i18n_catclose()
void __kmp_printf(char const *format,...)
static void __kmp_release_bootstrap_lock(kmp_bootstrap_lock_t *lck)
static int __kmp_acquire_bootstrap_lock(kmp_bootstrap_lock_t *lck)
#define KMP_BOOTSTRAP_LOCK_INITIALIZER(lock)
void __kmp_str_fname_init(kmp_str_fname_t *fname, char const *path)
void __kmp_str_fname_free(kmp_str_fname_t *fname)
void __kmp_str_split(char *str, char delim, char **head, char **tail)
void __kmp_str_buf_clear(kmp_str_buf_t *buffer)
void __kmp_str_buf_detach(kmp_str_buf_t *buffer)
void __kmp_str_buf_reserve(kmp_str_buf_t *buffer, size_t size)
int __kmp_str_buf_vprint(kmp_str_buf_t *buffer, char const *format, va_list args)
void __kmp_str_buf_free(kmp_str_buf_t *buffer)
char * __kmp_str_format(char const *format,...)
void __kmp_str_buf_cat(kmp_str_buf_t *buffer, char const *str, size_t len)
int __kmp_str_buf_print(kmp_str_buf_t *buffer, char const *format,...)
void __kmp_str_free(char **str)
#define __kmp_str_buf_init(b)