Mercurial > ~mikael > mcabber > hg
diff mcabber/mcabber/help.c @ 1668:41c26b7d2890
Install mcabber headers
* Change mcabber headers naming scheme
* Move 'src/' -> 'mcabber/'
* Add missing include <mcabber/config.h>'s
* Create and install clean config.h version in 'include/'
* Move "dirty" config.h version to 'mcabber/'
* Add $(top_srcdir) to compiler include path
* Update modules HOWTO
author | Myhailo Danylenko <isbear@ukrpost.net> |
---|---|
date | Mon, 18 Jan 2010 15:36:19 +0200 |
parents | mcabber/src/help.c@cd81806b5947 |
children | e489ead6574a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mcabber/mcabber/help.c Mon Jan 18 15:36:19 2010 +0200 @@ -0,0 +1,135 @@ +/* + * help.c -- Help command + * + * Copyright (C) 2006-2009 Mikael Berthe <mikael@lilotux.net> + * + * 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 2 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <glib.h> + +#include "settings.h" +#include "logprint.h" +#include "utils.h" +#include "screen.h" + +#define DEFAULT_LANG "en" + +// get_lang() +// Return the language code string (a 2-letters string). +static const char *get_lang(void) { + static const char *lang_str = DEFAULT_LANG; +#ifdef DATA_DIR + static char lang[3]; + const char *opt_l; + opt_l = settings_opt_get("lang"); + if (opt_l && strlen(opt_l) == 2 && isalpha(opt_l[0]) && isalpha(opt_l[1])) { + strncpy(lang, opt_l, sizeof(lang)); + mc_strtolower(lang); + lang_str = lang; + } +#endif /* DATA_DIR */ + return lang_str; +} + +// help_process(string) +// Display help about the "string" command. +// If string is null, display general help. +// Return 0 in case of success. +int help_process(char *string) +{ +#ifndef DATA_DIR + scr_LogPrint(LPRINT_NORMAL, "Help isn't available."); + return -1; +#else + const char *lang; + FILE *fp; + char *helpfiles_dir, *filename; + char *data; + const int datasize = 4096; + int linecount = 0; + char *p; + + // Check string is ok + for (p = string; p && *p; p++) { + if (!isalnum(*p) && *p != '_' && *p != '-') { + scr_LogPrint(LPRINT_NORMAL, "Cannot find help (invalid keyword)."); + return 1; + } + } + + // Look for help file + lang = get_lang(); + helpfiles_dir = g_strdup_printf("%s/mcabber/help", DATA_DIR); + p = NULL; + + if (string && *string) { + p = g_strdup(string); + mc_strtolower(p); + filename = g_strdup_printf("%s/%s/hlp_%s.txt", helpfiles_dir, lang, p); + } else + filename = g_strdup_printf("%s/%s/hlp.txt", helpfiles_dir, lang); + + fp = fopen(filename, "r"); + + if (!(fp) && (g_strcmp0(lang, DEFAULT_LANG)) ) { + g_free(filename); + if (p) + filename = g_strdup_printf("%s/%s/hlp_%s.txt", helpfiles_dir, DEFAULT_LANG, p); + else + filename = g_strdup_printf("%s/%s/hlp.txt", helpfiles_dir, DEFAULT_LANG); + + fp = fopen(filename, "r"); + } + g_free(p); + g_free(filename); + g_free(helpfiles_dir); + + if (!fp) { + scr_LogPrint(LPRINT_NORMAL, "No help found."); + return -1; + } + + data = g_new(char, datasize); + while (!feof(fp)) { + if (fgets(data, datasize, fp) == NULL) break; + // Strip trailing newline + for (p = data; *p; p++) ; + if (p > data) + p--; + if (*p == '\n' || *p == '\r') + *p = '\0'; + // Displaty the help line + scr_LogPrint(LPRINT_NORMAL, "%s", data); + linecount++; + } + fclose(fp); + g_free(data); + + if (linecount) { + scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); + update_roster = TRUE; + } + + return 0; +#endif /* DATA_DIR */ +} + +/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */