X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/e68922049562ad4755ef1852be9cdc67af455616..1c5f669705f14465beb02aaea58a0bfc3221a35e:/src/helpfile.c diff --git a/src/helpfile.c b/src/helpfile.c index 08e8e8f..31aa342 100644 --- a/src/helpfile.c +++ b/src/helpfile.c @@ -3,7 +3,7 @@ * * This file is part of x3. * - * srvx is free software; you can redistribute it and/or modify + * 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 * (at your option) any later version. @@ -23,6 +23,7 @@ #include "log.h" #include "modcmd.h" #include "nickserv.h" +#include "spamserv.h" #if defined(HAVE_DIRENT_H) #include @@ -41,7 +42,7 @@ static const struct message_entry msgtab[] = { #define DEFAULT_LINE_SIZE MAX_LINE_SIZE #define DEFAULT_TABLE_SIZE 80 -extern struct userNode *global, *chanserv, *opserv, *nickserv; +extern struct userNode *global, *chanserv, *opserv, *nickserv, *spamserv; struct userNode *message_dest; struct userNode *message_source; struct language *lang_C; @@ -171,8 +172,10 @@ static struct language *language_read(const char *name) /* Open the directory stream; if we can't, fail. */ snprintf(filename, sizeof(filename), "languages/%s", name); - if (!(dir = opendir(filename))) + if (!(dir = opendir(filename))) { + log_module(MAIN_LOG, LOG_ERROR, "Unable to open language directory languages/%s: %s", name, strerror(errno)); return NULL; + } if (!(lang = dict_find(languages, name, NULL))) lang = language_alloc(name); @@ -222,28 +225,25 @@ static struct language *language_read(const char *name) static void language_read_list(void) { + struct stat sbuf; struct dirent *dirent; DIR *dir; + char namebuf[MAXLEN]; if (!(dir = opendir("languages"))) return; while ((dirent = readdir(dir))) { if (dirent->d_name[0] == '.') continue; -#ifdef HAVE_DIRENT_D_TYPE - if (dirent->d_type != DT_DIR) + snprintf(namebuf, sizeof(namebuf), "languages/%s", dirent->d_name); + if (stat(namebuf, &sbuf) < 0) { + log_module(MAIN_LOG, LOG_INFO, "Skipping language entry '%s' (unable to stat).", dirent->d_name); + continue; + } + if (!S_ISDIR(sbuf.st_mode)) { + log_module(MAIN_LOG, LOG_INFO, "Skipping language entry '%s' (not directory).", dirent->d_name); continue; -#else - { - char namebuf[MAXLEN]; - struct stat sbuf; - snprintf(namebuf, sizeof(namebuf), "languages/%s", dirent->d_name); - if (stat(namebuf, &sbuf) < 0) - continue; - if (!S_ISDIR(sbuf.st_mode)) - continue; } -#endif language_alloc(dirent->d_name); } closedir(dir); @@ -345,29 +345,32 @@ table_send(struct userNode *from, const char *to, unsigned int size, irc_send_fu for (pos=ii=0; ii<((table.flags & TABLE_REPEAT_HEADERS)?nreps:1); ii++) { for (jj=0; 1; ) { len = strlen(table.contents[0][jj]); - line[pos++] = '\02'; /* bold header */ + //line[pos++] = '\02'; /* bold header */ spaces = max_width[jj] - len; if (table.flags & TABLE_PAD_LEFT) while (spaces--) line[pos++] = ' '; memcpy(line+pos, table.contents[0][jj], len); pos += len; + //line[pos++] = '\02'; /* end bold header */ if (++jj == table.width) break; if (!(table.flags & TABLE_PAD_LEFT)) while (spaces--) line[pos++] = ' '; line[pos++] = ' '; - line[pos++] = '\02'; /* end bold header */ } } line[pos] = 0; - irc_send(from, to, line); sepsize = strlen_vis(line); sepstr = malloc(sepsize + 1); memset(sepstr, '-', sepsize); sepstr[sepsize] = 0; - irc_send(from, to, sepstr); + if(hi && hi->userlist_style != HI_STYLE_CLEAN) + irc_send(from, to, sepstr); /* ----------------- */ + irc_send(from, to, line); /* alpha beta roe */ + if(hi && hi->userlist_style != HI_STYLE_CLEAN) + irc_send(from, to, sepstr); /* ----------------- */ ii = 1; } /* Send the table. */ @@ -402,7 +405,9 @@ table_send(struct userNode *from, const char *to, unsigned int size, irc_send_fu sepstr[sepsize/2] = 'n'; sepstr[sepsize/2+1]= 'd'; } - irc_send(from, to, sepstr); + + if(hi && hi->userlist_style != HI_STYLE_CLEAN) + irc_send(from, to, sepstr); free(sepstr); } @@ -556,6 +561,9 @@ vsend_message(const char *dest, struct userNode *src, struct handle_info *handle case 'N': value = nickserv ? nickserv->nick : "NickServ"; break; + case 'X': + value = spamserv ? spamserv->nick : "SpamServ"; + break; case 's': value = self->name; break; @@ -733,29 +741,6 @@ _send_help(struct userNode *dest, struct userNode *src, expand_func_t expand, co return res; } - -/* -int -_send_help_breef(struct userNode *dest, struct userNode *src, expand_func_t expand, const char *format, ...) -{ - int res; - char* buf; - char* ptr; - va_list ap; - - buf = (char *) malloc(strlen(format) +1); - strcpy(buf, format); - ptr = strchr(buf, '\n'); - *ptr = '\0'; - va_start(ap, buf); - res = vsend_message(dest->nick, src, dest->handle_info, 12, expand, buf, ap); - va_end(ap); - free(buf); - return res; -} -*/ - - int send_help(struct userNode *dest, struct userNode *src, struct helpfile *hf, const char *topic) { @@ -767,7 +752,7 @@ send_help(struct userNode *dest, struct userNode *src, struct helpfile *hf, cons topic = ""; if (!hf) { _send_help(dest, src, NULL, "HFMSG_MISSING_HELPFILE"); - return 0; + return false; } for (curr = (dest->handle_info ? dest->handle_info->language : lang_C); curr; @@ -776,19 +761,24 @@ send_help(struct userNode *dest, struct userNode *src, struct helpfile *hf, cons if (!lang_hf) continue; rec = dict_find(lang_hf->db, topic, NULL); - if (rec && rec->type == RECDB_QSTRING) - return _send_help(dest, src, hf->expand, rec->d.qstring); + if (rec && rec->type == RECDB_QSTRING) { + _send_help(dest, src, hf->expand, rec->d.qstring); + return true; + } } rec = dict_find(hf->db, "", NULL); if (!rec) - return send_message(dest, src, "MSG_TOPIC_UNKNOWN"); - if (rec->type != RECDB_QSTRING) - return send_message(dest, src, "HFMSG_HELP_NOT_STRING"); - return _send_help(dest, src, hf->expand, rec->d.qstring); + return false; + if (rec->type != RECDB_QSTRING) { + send_message(dest, src, "HFMSG_HELP_NOT_STRING"); + return false; + } + _send_help(dest, src, hf->expand, rec->d.qstring); + return true; } int -send_help_breef(struct userNode *dest, struct userNode *src, struct helpfile *hf, const char *topic) +send_help_brief(struct userNode *dest, struct userNode *src, struct helpfile *hf, const char *topic) { struct helpfile *lang_hf; struct record_data *rec; @@ -823,9 +813,9 @@ send_help_breef(struct userNode *dest, struct userNode *src, struct helpfile *hf } rec = dict_find(hf->db, "", NULL); if (!rec) - return send_message(dest, src, "MSG_TOPIC_UNKNOWN"); + return 0; /* send_message(dest, src, "MSG_TOPIC_UNKNOWN"); */ if (rec->type != RECDB_QSTRING) - return send_message(dest, src, "HFMSG_HELP_NOT_STRING"); + return 0; /* send_message(dest, src, "HFMSG_HELP_NOT_STRING"); */ return _send_help(dest, src, hf->expand, rec->d.qstring); } @@ -901,7 +891,7 @@ helpfile_eval_identifier(const char *start, const char **end) *end = start + 5; return 0; } else { - log_module(MAIN_LOG, LOG_FATAL, "Unexpected helpfile identifier '%.*s'.", *end-start, start); + log_module(MAIN_LOG, LOG_FATAL, "Unexpected helpfile identifier '%.*s'.", (int)(*end-start), start); return -1; } } @@ -933,7 +923,7 @@ helpfile_eval_atomicexpr(const char *start, const char **end) while (isspace(*sep) && (sep < *end)) sep++; if ((sep == *end) || (sep[0] != ')')) { - log_module(MAIN_LOG, LOG_FATAL, "Expected close parenthesis at '%.*s'.", *end-sep, sep); + log_module(MAIN_LOG, LOG_FATAL, "Expected close parenthesis at '%.*s'.", (int)(*end-sep), sep); return -1; } @@ -970,7 +960,7 @@ helpfile_eval_expr(const char *start, const char **end) sep += len; } if (op == OP_INVALID) { - log_module(MAIN_LOG, LOG_FATAL, "Unrecognized helpfile operator at '%.*s'.", *end-sep, sep); + log_module(MAIN_LOG, LOG_FATAL, "Unrecognized helpfile operator at '%.*s'.", (int)(*end-sep), sep); return -1; } @@ -984,7 +974,7 @@ helpfile_eval_expr(const char *start, const char **end) while (isspace(*sep2) && (sep2 < *end)) sep2++; if (sep2 != *end) { - log_module(MAIN_LOG, LOG_FATAL, "Trailing garbage in helpfile expression: '%.*s'.", *end-sep2, sep2); + log_module(MAIN_LOG, LOG_FATAL, "Trailing garbage in helpfile expression: '%.*s'.", (int)(*end-sep2), sep2); return -1; } @@ -1011,7 +1001,7 @@ helpfile_eval_condition(const char *start, const char **end) for (term = start; isalnum(*term) && (term < *end); ++term) ; if (term != start) { if ((term + 2 >= *end) || (term[0] != ':') || (term[1] != ' ')) { - log_module(MAIN_LOG, LOG_FATAL, "In helpfile condition '%.*s' expected prefix to end with ': '.", *end-start, start); + log_module(MAIN_LOG, LOG_FATAL, "In helpfile condition '%.*s' expected prefix to end with ': '.",(int)(*end-start), start); return -1; } start = term + 2;