From: Konstantin Sobolev <kos@supportwizard.com>
[apps/madmutt.git] / pager.c
diff --git a/pager.c b/pager.c
index 9eb3547..0ef2507 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -57,6 +57,7 @@
 #define IsSendAttach(x) (x && (x)->bdy && !(x)->fp)
 #define IsMsgAttach(x) (x && (x)->fp && (x)->bdy && (x)->bdy->hdr)
 #define IsHeader(x) (x && (x)->hdr && !(x)->bdy)
+#define SW              (option(OPTMBOXPANE)?SidebarWidth:0)
 
 static const char *Not_available_in_this_menu =
 N_("Not available in this menu.");
@@ -105,7 +106,7 @@ struct syntax_t {
 };
 
 struct line_t {
-  long offset;
+  LOFF_T offset;
   short type;
   short continuation;
   short chunks;
@@ -832,6 +833,8 @@ static int grok_ansi (unsigned char *buf, int pos, ansi_attr * a)
       a->attr = ANSI_OFF;
       a->pair = -1;
     }
+    a->bg = -2;
+    a->fg = -2;
     while (pos < x) {
       if (buf[pos] == '1' && (pos + 1 == x || buf[pos + 1] == ';')) {
         a->attr |= ANSI_BOLD;
@@ -850,12 +853,8 @@ static int grok_ansi (unsigned char *buf, int pos, ansi_attr * a)
         pos += 2;
       }
       else if (buf[pos] == '0' && (pos + 1 == x || buf[pos + 1] == ';')) {
-#ifdef HAVE_COLOR
-        if (a->pair != -1)
-          mutt_free_color (a->fg, a->bg);
-#endif
-        a->attr = ANSI_OFF;
-        a->pair = -1;
+        a->bg = -2;
+        a->fg = -2;
         pos += 2;
       }
       else if (buf[pos] == '3' && isdigit (buf[pos + 1])) {
@@ -865,7 +864,8 @@ static int grok_ansi (unsigned char *buf, int pos, ansi_attr * a)
 #endif
         a->pair = -1;
         a->attr |= ANSI_COLOR;
-        a->fg = buf[pos + 1] - '0';
+        if (buf[pos + 1] != '9')
+          a->fg = buf[pos + 1] - '0';
         pos += 3;
       }
       else if (buf[pos] == '4' && isdigit (buf[pos + 1])) {
@@ -875,7 +875,8 @@ static int grok_ansi (unsigned char *buf, int pos, ansi_attr * a)
 #endif
         a->pair = -1;
         a->attr |= ANSI_COLOR;
-        a->bg = buf[pos + 1] - '0';
+        if (buf[pos + 1] != '9')
+          a->bg = buf[pos + 1] - '0';
         pos += 3;
       }
       else {
@@ -908,7 +909,7 @@ static int trim_incomplete_mbyte(unsigned char *buf, size_t len) {
 }
 
 static int
-fill_buffer (FILE * f, long *last_pos, long offset, unsigned char *buf,
+fill_buffer (FILE * f, LOFF_T *last_pos, LOFF_T offset, unsigned char *buf,
              unsigned char *fmt, size_t blen, int *buf_ready)
 {
   unsigned char *p;
@@ -917,12 +918,12 @@ fill_buffer (FILE * f, long *last_pos, long offset, unsigned char *buf,
   if (*buf_ready == 0) {
     buf[blen - 1] = 0;
     if (offset != *last_pos)
-      fseek (f, offset, 0);
+      fseeko (f, offset, 0);
     if (fgets ((char *) buf, blen - 1, f) == NULL) {
       fmt[0] = 0;
       return (-1);
     }
-    *last_pos = ftell (f);
+    *last_pos = ftello (f);
     b_read = (int) (*last_pos - offset);
     *buf_ready = 1;
 
@@ -982,7 +983,7 @@ static int format_line (struct line_t **lineInfo, int n, unsigned char *buf,
 
   if (!(flags & (M_SHOWFLAT)))
     wrap_cols -= WrapMargin;
-  wrap_cols -= SidebarWidth;
+  wrap_cols -= SW;
 
   if (wrap_cols <= 0)
     wrap_cols = COLS;
@@ -1130,7 +1131,7 @@ static int format_line (struct line_t **lineInfo, int n, unsigned char *buf,
  */
 
 static int
-display_line (FILE * f, long *last_pos, struct line_t **lineInfo, int n,
+display_line (FILE * f, LOFF_T *last_pos, struct line_t **lineInfo, int n,
               int *last, int *max, int flags, struct q_class_t **QuoteList,
               int *q_level, int *force_redraw, regex_t * SearchRE)
 {
@@ -1423,7 +1424,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t * extra)
   int r = -1;
   int redraw = REDRAW_FULL;
   FILE *fp = NULL;
-  long last_pos = 0, last_offset = 0;
+  LOFF_T last_pos = 0, last_offset = 0;
   int old_smart_wrap, old_markers;
   struct stat sb;
   regex_t SearchRE;
@@ -1535,8 +1536,8 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t * extra)
 
       if (option (OPTHELP)) {
         SETCOLOR (MT_COLOR_STATUS);
-        move (helpoffset, 0);
-        mutt_paddstr (COLS, helpstr);
+        move (helpoffset, SW);
+        mutt_paddstr (COLS-SW, helpstr);
         SETCOLOR (MT_COLOR_NORMAL);
       }
 
@@ -1604,7 +1605,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t * extra)
 
     if ((redraw & REDRAW_BODY) || topline != oldtopline) {
       do {
-        move (bodyoffset, SidebarWidth);
+        move (bodyoffset, SW);
         curline = oldtopline = topline;
         lines = 0;
         force_redraw = 0;
@@ -1617,7 +1618,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t * extra)
                             &SearchRE) > 0)
             lines++;
           curline++;
-          move (lines + bodyoffset, SidebarWidth);
+          move (lines + bodyoffset, SW);
           redraw |= REDRAW_SIDEBAR;
         }
         last_offset = lineInfo[curline].offset;
@@ -1631,7 +1632,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t * extra)
           addch ('~');
         addch ('\n');
         lines++;
-        move (lines + bodyoffset, SidebarWidth);
+        move (lines + bodyoffset, SW);
       }
       /* We are going to update the pager status bar, so it isn't
        * necessary to reset to normal color now. */
@@ -1658,13 +1659,9 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t * extra)
         _mutt_make_string (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt),
                            Context, extra->bdy->hdr, M_FORMAT_MAKEPRINT);
       }
-      if (option(OPTSTATUSONTOP)) {
-        move(0,0);
-      }
-      /*move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (InHelp?(LINES-2):(indexlen - 1))),
-            option (OPTSTATUSONTOP) ? 0 : SidebarWidth);*/
-      mutt_paddstr (COLS - 10 - (option(OPTSTATUSONTOP)?0:SidebarWidth), IsHeader (extra)
-                    || IsMsgAttach (extra) ? buffer : banner);
+      move(statusoffset,SW);
+      mutt_paddstr (COLS - 10 - SW, IsHeader (extra) || 
+                    IsMsgAttach (extra) ? buffer : banner);
 
       addstr (" -- (");
       if (last_pos < sb.st_size - 1)
@@ -1685,12 +1682,10 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t * extra)
       sidebar_draw (MENU_PAGER);
       /* print out the index status bar */
       menu_status_line (buffer, sizeof (buffer), index, NONULL (Status));
-      move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)),
-            option (OPTSTATUSONTOP) ? 0 : SidebarWidth);
+      move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), SW);
       SETCOLOR (MT_COLOR_STATUS);
       BKGDSET (MT_COLOR_STATUS);
-      mutt_paddstr (COLS - (option (OPTSTATUSONTOP) ? 0 : SidebarWidth),
-                    buffer);
+      mutt_paddstr (COLS-SW, buffer);
       SETCOLOR (MT_COLOR_NORMAL);
       BKGDSET (MT_COLOR_NORMAL);
     }