X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/e661b9c392eaf7f6ac87decd66fd5fad352364b8..82089e3fd2b8c69de9286ff4d6cc9d845670ab7e:/src/helpfile.c diff --git a/src/helpfile.c b/src/helpfile.c index 544e905..862624b 100644 --- a/src/helpfile.c +++ b/src/helpfile.c @@ -5,7 +5,7 @@ * * x3 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 2 of the License, or + * 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, @@ -206,7 +206,7 @@ static struct language *language_read(const char *name) /* Read all the translations from the directory. */ while ((dirent = readdir(dir))) { snprintf(filename, sizeof(filename), "languages/%s/%s", name, dirent->d_name); - if (!strcmp(dirent->d_name,"parent")) { + if (!strcmp(dirent->d_name, "parent")) { continue; } else if (!strcmp(dirent->d_name, "strings.db")) { dict = parse_database(filename); @@ -236,6 +236,9 @@ static void language_read_list(void) if (dirent->d_name[0] == '.') continue; snprintf(namebuf, sizeof(namebuf), "languages/%s", dirent->d_name); + if (!strcmp(dirent->d_name, "strings.db")) { + continue; + } if (stat(namebuf, &sbuf) < 0) { log_module(MAIN_LOG, LOG_INFO, "Skipping language entry '%s' (unable to stat).", dirent->d_name); continue; @@ -244,7 +247,8 @@ static void language_read_list(void) log_module(MAIN_LOG, LOG_INFO, "Skipping language entry '%s' (not directory).", dirent->d_name); continue; } - language_alloc(dirent->d_name); + if (!dict_find(languages, dirent->d_name, NULL)) + language_alloc(dirent->d_name); } closedir(dir); } @@ -671,7 +675,7 @@ vsend_message(const char *dest, struct userNode *src, struct handle_info *handle break; default: value = ""; - log_module(MAIN_LOG, LOG_ERROR, "Invalid exp.type %d from expansion function %p.", exp.type, expand_f); + log_module(MAIN_LOG, LOG_ERROR, "Invalid exp.type %d from expansion function %p.", exp.type, (void*)expand_f); break; } ipos = name_end - input.list; @@ -745,7 +749,7 @@ send_message(struct userNode *dest, struct userNode *src, const char *format, .. int res; va_list ap; - if (IsLocal(dest)) return 0; + if (IsLocal(dest) && !IsDummy(dest)) return 0; va_start(ap, format); res = vsend_message(dest->nick, src, dest->handle_info, 0, NULL, format, ap); va_end(ap); @@ -757,7 +761,7 @@ send_message_type(int msg_type, struct userNode *dest, struct userNode *src, con int res; va_list ap; - if (IsLocal(dest)) return 0; + if (IsLocal(dest) && !IsDummy(dest)) return 0; va_start(ap, format); res = vsend_message(dest->nick, src, dest->handle_info, msg_type, NULL, format, ap); va_end(ap); @@ -1166,10 +1170,27 @@ void helpfile_init(void) language_read_list(); } -void helpfile_finalize(void) +static void helpfile_read_languages(void) { dict_iterator_t it; + dict_t dict; + + language_read_list(); for (it = dict_first(languages); it; it = iter_next(it)) language_read(iter_key(it)); + + /* If the user has a strings.db in their languages directory, + * allow that to override C language strings. + */ + dict = parse_database("languages/strings.db"); + if (dict) { + language_set_messages(lang_C, dict); + free_database(dict); + } +} + +void helpfile_finalize(void) +{ + conf_register_reload(helpfile_read_languages); reg_exit_func(language_cleanup); }