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... */