remove yet anoter round of str_* functions, replaced with their inlineable
[apps/madmutt.git] / status.c
index f0b3c3a..bab4295 100644 (file)
--- a/status.c
+++ b/status.c
@@ -1,36 +1,35 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
- * 
- *     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, USA.
+ *
+ * This file is part of mutt-ng, see http://www.muttng.org/.
+ * It's licensed under the GNU General Public License,
+ * please see the file GPL in the top level source directory.
  */
 
 #if HAVE_CONFIG_H
 # include "config.h"
 #endif
 
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/macros.h>
+
 #include "mutt.h"
 #include "mutt_menu.h"
 #include "mutt_curses.h"
 #include "sort.h"
 #include "mapping.h"
 #include "mx.h"
+#include "buffy.h"
+
 
 #include <string.h>
 #include <ctype.h>
 #include <unistd.h>
 
+#define SW              (option(OPTMBOXPANE)?SidebarWidth:0)
+
 static char *get_sort_str (char *buf, size_t buflen, int method)
 {
   snprintf (buf, buflen, "%s%s%s",
@@ -64,7 +63,8 @@ static const char *status_format_str (char *buf, size_t buflen, char op,
                                       const char *elsestring,
                                       unsigned long data, format_flag flags)
 {
-  char fmt[SHORT_STRING], tmp[SHORT_STRING], *cp, *p;
+  char fmt[SHORT_STRING], tmp[SHORT_STRING];
+  const char *cp, *p;
   int count, optional = (flags & M_FORMAT_OPTIONAL);
   MUTTMENU *menu = (MUTTMENU *) data;
 
@@ -73,9 +73,9 @@ static const char *status_format_str (char *buf, size_t buflen, char op,
   case 'b':
     if (!optional) {
       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
-      snprintf (buf, buflen, fmt, mutt_buffy_check (0));
+      snprintf (buf, buflen, fmt, buffy_check (0));
     }
-    else if (!mutt_buffy_check (0))
+    else if (!buffy_check (0))
       optional = 0;
     break;
 
@@ -245,7 +245,7 @@ static const char *status_format_str (char *buf, size_t buflen, char op,
 
       if (!StChars)
         buf[0] = 0;
-      else if (i >= mutt_strlen (StChars))
+      else if (i >= m_strlen(StChars))
         buf[0] = StChars[0];
       else
         buf[0] = StChars[i];
@@ -283,8 +283,7 @@ static const char *status_format_str (char *buf, size_t buflen, char op,
     break;
 
   case 'v':
-    snprintf (fmt, sizeof (fmt), "Mutt-ng %%s");
-    snprintf (buf, buflen, fmt, MUTT_VERSION);
+    m_strcpy(buf, buflen, mutt_make_version(0));
     break;
 
   case 'V':
@@ -314,9 +313,13 @@ static const char *status_format_str (char *buf, size_t buflen, char op,
   return (src);
 }
 
-void menu_status_line (char *buf, size_t buflen, MUTTMENU * menu,
-                       const char *p)
-{
-  mutt_FormatString (buf, buflen, p, status_format_str, (unsigned long) menu,
-                     0);
+void menu_status_line (char* buf, size_t len, MUTTMENU* menu, const char* p) {
+  /*
+   * if we have enough space for buffer, format lines to $COLS-$SidebarWidth
+   * only to not wrap past end of screen
+   */
+  int width = COLS - SW;
+  mutt_FormatString (buf, (width >= len ? len : (width + 1)),
+                     p, status_format_str,
+                     (unsigned long) menu, 0);
 }