Remove support for antiquated ncurses libraries. Assume we have at least ncurses...
[apps/madmutt.git] / lib-ui / color.c
index 20fb8b0..584c113 100644 (file)
@@ -7,27 +7,13 @@
  * 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/ascii.h>
-#include <lib-lib/str.h>
-#include <lib-lib/macros.h>
-#include <lib-lib/buffer.h>
-#include <lib-lib/mapping.h>
+#include <lib-lib/lib-lib.h>
 
 #include "curses.h"
 
+#include "pattern.h"
 #include "mutt.h"
 
-#include "lib/debug.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
 /* globals */
 int *ColorQuote;
 int ColorQuoteUsed;
@@ -39,8 +25,6 @@ COLOR_LINE *ColorIndexList = NULL;
 /* local to this file */
 static int ColorQuoteSize;
 
-#ifdef HAVE_COLOR
-
 #define COLOR_DEFAULT (-2)
 
 typedef struct color_list {
@@ -63,14 +47,10 @@ static struct mapping_t Colors[] = {
   {"red", COLOR_RED},
   {"white", COLOR_WHITE},
   {"yellow", COLOR_YELLOW},
-#if defined (USE_SLANG_CURSES) || defined (HAVE_USE_DEFAULT_COLORS)
   {"default", COLOR_DEFAULT},
-#endif
   {0, 0}
 };
 
-#endif /* HAVE_COLOR */
-
 static struct mapping_t Fields[] = {
   {"hdrdefault", MT_COLOR_HDEFAULT},
   {"quoted", MT_COLOR_QUOTED},
@@ -116,17 +96,13 @@ static void mutt_free_color_line (COLOR_LINE ** l, int free_colors)
 
   tmp = *l;
 
-#ifdef HAVE_COLOR
   if (free_colors && tmp->fg != -1 && tmp->bg != -1)
     mutt_free_color (tmp->fg, tmp->bg);
-#endif
 
-  /* we should really introduce a container
-   * type for regular expressions.
-   */
+  /* we should really use the container type for regular expressions. */
 
   regfree (&tmp->rx);
-  mutt_pattern_free (&tmp->color_pattern);
+  pattern_list_wipe(&tmp->color_pattern);
   p_delete(&tmp->pattern);
   p_delete(l);
 }
@@ -148,58 +124,14 @@ void ci_start_color (void)
     ColorDefs[MT_COLOR_BOLD] = 0;
     ColorDefs[MT_COLOR_UNDERLINE] = 0;
 
-#ifdef HAVE_COLOR
     start_color ();
-#endif
-}
-
-#ifdef HAVE_COLOR
-
-#ifdef USE_SLANG_CURSES
-static char *get_color_name (char *dest, size_t destlen, int val)
-{
-  static char *missing[3] = { "brown", "lightgray", "default" };
-  int i;
-
-  switch (val) {
-  case COLOR_YELLOW:
-    m_strcpy(dest, destlen, missing[0]);
-    return dest;
-
-  case COLOR_WHITE:
-    m_strcpy(dest, destlen, missing[1]);
-    return dest;
-
-  case COLOR_DEFAULT:
-    m_strcpy(dest, destlen, missing[2]);
-    return dest;
-  }
-
-  for (i = 0; Colors[i].name; i++) {
-    if (Colors[i].value == val) {
-      m_strcpy(dest, destlen, Colors[i].name);
-      return dest;
-    }
-  }
-
-  /* Sigh. If we got this far, the color is of the form 'colorN'
-   * Slang can handle this itself, so just return 'colorN'
-   */
-
-  snprintf (dest, destlen, "color%d", val);
-  return dest;
 }
-#endif
 
 int mutt_alloc_color (int fg, int bg)
 {
   COLOR_LIST *p = ColorList;
   int i;
 
-#if defined (USE_SLANG_CURSES)
-  char fgc[SHORT_STRING], bgc[SHORT_STRING];
-#endif
-
   /* check to see if this color is already allocated to save space */
   while (p) {
     if (p->fg == fg && p->bg == bg) {
@@ -236,22 +168,13 @@ int mutt_alloc_color (int fg, int bg)
   p->bg = bg;
   p->fg = fg;
 
-#if defined (USE_SLANG_CURSES)
-  if (fg == COLOR_DEFAULT || bg == COLOR_DEFAULT)
-    SLtt_set_color (i, NULL, get_color_name (fgc, sizeof (fgc), fg),
-                    get_color_name (bgc, sizeof (bgc), bg));
-  else
-#elif defined (HAVE_USE_DEFAULT_COLORS)
   if (fg == COLOR_DEFAULT)
     fg = -1;
   if (bg == COLOR_DEFAULT)
     bg = -1;
-#endif
 
   init_pair (i, fg, bg);
 
-  debug_print (1, ("Color pairs used so far: %d\n", UserColors));
-
   return (COLOR_PAIR (p->index));
 }
 
@@ -267,7 +190,6 @@ void mutt_free_color (int fg, int bg)
         return;
 
       UserColors--;
-      debug_print (1, ("Color pairs used so far: %d\n", UserColors));
 
       if (p == ColorList) {
         ColorList = ColorList->next;
@@ -289,11 +211,6 @@ void mutt_free_color (int fg, int bg)
   }
 }
 
-#endif /* HAVE_COLOR */
-
-
-#ifdef HAVE_COLOR
-
 static int
 parse_color_name (const char *s, int *col, int *attr, int brite, BUFFER * err)
 {
@@ -323,9 +240,6 @@ parse_color_name (const char *s, int *col, int *attr, int brite, BUFFER * err)
   return 0;
 }
 
-#endif
-
-
 /* usage: uncolor index pattern [pattern...]
  *       unmono  index pattern [pattern...]
  */
@@ -334,17 +248,12 @@ static int
 _mutt_parse_uncolor (BUFFER * buf, BUFFER * s, unsigned long data,
                      BUFFER * err, short parse_uncolor);
 
-
-#ifdef HAVE_COLOR
-
 int mutt_parse_uncolor (BUFFER * buf, BUFFER * s, unsigned long data,
                         BUFFER * err)
 {
   return _mutt_parse_uncolor (buf, s, data, err, 1);
 }
 
-#endif
-
 int mutt_parse_unmono (BUFFER * buf, BUFFER * s, unsigned long data,
                        BUFFER * err)
 {
@@ -379,28 +288,14 @@ _mutt_parse_uncolor (BUFFER * buf, BUFFER * s, unsigned long data __attribute__
     return (-1);
   }
 
-  if (
-#ifdef HAVE_COLOR
-       /* we're running without curses */
-       option (OPTNOCURSES)
-       ||                       /* we're parsing an uncolor command, and have no colors */
-       (parse_uncolor && !has_colors ())
-       /* we're parsing an unmono command, and have colors */
-       || (!parse_uncolor && has_colors ())
-#else
-       /* We don't even have colors compiled in */
-       parse_uncolor
-#endif
-    ) {
+  if (option (OPTNOCURSES) || (parse_uncolor != has_colors())) {
     /* just eat the command, but don't do anything real about it */
-    do
+    do {
       mutt_extract_token (buf, s, 0);
-    while (MoreArgs (s));
-
+    } while (MoreArgs(s));
     return 0;
   }
 
-
   do {
     mutt_extract_token (buf, s, 0);
     if (!m_strcmp("*", buf->data)) {
@@ -419,7 +314,6 @@ _mutt_parse_uncolor (BUFFER * buf, BUFFER * s, unsigned long data __attribute__
         if (!m_strcmp(buf->data, tmp->pattern)) {
           if (!do_cache)
             do_cache = 1;
-          debug_print (1, ("Freeing pattern \"%s\" from ColorIndexList\n", tmp->pattern));
           if (last)
             last->next = tmp->next;
           else
@@ -469,7 +363,6 @@ add_pattern (COLOR_LINE ** top, const char *s, int sensitive,
   }
 
   if (tmp) {
-#ifdef HAVE_COLOR
     if (fg != -1 && bg != -1) {
       if (tmp->fg != fg || tmp->bg != bg) {
         mutt_free_color (tmp->fg, tmp->bg);
@@ -480,10 +373,8 @@ add_pattern (COLOR_LINE ** top, const char *s, int sensitive,
       else
         attr |= (tmp->pair & ~A_BOLD);
     }
-#endif /* HAVE_COLOR */
     tmp->pair = attr;
-  }
-  else {
+  } else {
     int r;
     char buf[STRING];
 
@@ -512,13 +403,11 @@ add_pattern (COLOR_LINE ** top, const char *s, int sensitive,
     }
     tmp->next = *top;
     tmp->pattern = m_strdup(s);
-#ifdef HAVE_COLOR
     if (fg != -1 && bg != -1) {
       tmp->fg = fg;
       tmp->bg = bg;
       attr |= mutt_alloc_color (fg, bg);
     }
-#endif
     tmp->pair = attr;
     *top = tmp;
   }
@@ -562,8 +451,6 @@ parse_object (BUFFER * buf, BUFFER * s, int *o, int *ql, BUFFER * err)
 typedef int (*parser_callback_t) (BUFFER *, BUFFER *, int *, int *, int *,
                                   BUFFER *);
 
-#ifdef HAVE_COLOR
-
 static int
 parse_color_pair (BUFFER * buf, BUFFER * s, int *fg, int *bg, int *attr,
                   BUFFER * err)
@@ -591,8 +478,6 @@ parse_color_pair (BUFFER * buf, BUFFER * s, int *fg, int *bg, int *attr,
   return 0;
 }
 
-#endif
-
 static int
 parse_attr_spec (BUFFER * buf, BUFFER * s, int *fg, int *bg, int *attr,
                  BUFFER * err)
@@ -632,11 +517,9 @@ parse_attr_spec (BUFFER * buf, BUFFER * s, int *fg, int *bg, int *attr,
 
 static int fgbgattr_to_color (int fg, int bg, int attr)
 {
-#ifdef HAVE_COLOR
   if (fg != -1 && bg != -1)
     return attr | mutt_alloc_color (fg, bg);
   else
-#endif
     return attr;
 }
 
@@ -680,8 +563,6 @@ _mutt_parse_color (BUFFER * buf, BUFFER * s, BUFFER * err,
     return 0;
 
 
-#ifdef HAVE_COLOR
-# ifdef HAVE_USE_DEFAULT_COLORS
   if (!option (OPTNOCURSES) && has_colors ()
       /* delay use_default_colors() until needed, since it initializes things */
       && (fg == COLOR_DEFAULT || bg == COLOR_DEFAULT)
@@ -689,8 +570,6 @@ _mutt_parse_color (BUFFER * buf, BUFFER * s, BUFFER * err,
     m_strcpy(err->data, err->dsize, _("default colors not supported"));
     return (-1);
   }
-# endif /* HAVE_USE_DEFAULT_COLORS */
-#endif
 
   if (object == MT_COLOR_HEADER)
     r = add_pattern (&ColorHdrList, buf->data, 0, fg, bg, attr, err, 0);
@@ -723,18 +602,14 @@ _mutt_parse_color (BUFFER * buf, BUFFER * s, BUFFER * err,
   else
     ColorDefs[object] = fgbgattr_to_color (fg, bg, attr);
 
-#ifdef HAVE_COLOR
-# ifdef HAVE_BKGDSET
+#ifdef HAVE_BKGDSET
   if (object == MT_COLOR_NORMAL && !option (OPTNOCURSES) && has_colors ())
     BKGDSET (MT_COLOR_NORMAL);
-# endif
 #endif
 
   return (r);
 }
 
-#ifdef HAVE_COLOR
-
 int mutt_parse_color (BUFFER * buff, BUFFER * s, unsigned long data __attribute__ ((unused)),
                       BUFFER * err)
 {
@@ -746,20 +621,13 @@ int mutt_parse_color (BUFFER * buff, BUFFER * s, unsigned long data __attribute_
   return _mutt_parse_color (buff, s, err, parse_color_pair, dry_run);
 }
 
-#endif
-
 int mutt_parse_mono (BUFFER * buff, BUFFER * s, unsigned long data __attribute__ ((unused)),
                      BUFFER * err)
 {
   int dry_run = 0;
 
-#ifdef HAVE_COLOR
   if (option (OPTNOCURSES) || has_colors ())
     dry_run = 1;
-#else
-  if (option (OPTNOCURSES))
-    dry_run = 1;
-#endif
 
   return _mutt_parse_color (buff, s, err, parse_attr_spec, dry_run);
 }