oops, makedoc is used in the build process.
[apps/madmutt.git] / compose.c
index cc62149..b46050e 100644 (file)
--- a/compose.c
+++ b/compose.c
@@ -15,6 +15,8 @@
 # include "config.h"
 #endif
 
+#include <lib-lib/mem.h>
+
 #include "mutt.h"
 #include "enter.h"
 #include "mutt_curses.h"
@@ -39,7 +41,6 @@
 #include "nntp.h"
 #endif
 
-#include "lib/mem.h"
 #include "lib/intl.h"
 #include "lib/str.h"
 
@@ -85,11 +86,12 @@ enum {
 #endif
 };
 
-#define HDR_XOFFSET 14
-#define TITLE_FMT "%14s"        /* Used for Prompts, which are ASCII */
-#define W (COLS - HDR_XOFFSET - SidebarWidth)
+#define HDR_XOFFSET     14
+#define TITLE_FMT       "%14s"        /* Used for Prompts, which are ASCII */
+#define SW              (option(OPTMBOXPANE)?SidebarWidth:0)
+#define W               (COLS - HDR_XOFFSET - SW)
 
-static char *Prompts[] = {
+static const char *Prompts[] = {
   "From: ",
   "To: ",
   "Cc: ",
@@ -114,7 +116,7 @@ static struct mapping_t ComposeHelp[] = {
   {N_("Attach file"), OP_COMPOSE_ATTACH_FILE},
   {N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION},
   {N_("Help"), OP_HELP},
-  {NULL}
+  {NULL, OP_NULL}
 };
 
 #ifdef USE_NNTP
@@ -126,19 +128,17 @@ static struct mapping_t ComposeNewsHelp[] = {
   {N_("Attach file"), OP_COMPOSE_ATTACH_FILE},
   {N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION},
   {N_("Help"), OP_HELP},
-  {NULL}
+  {NULL, OP_NULL}
 };
 #endif
 
-static void snd_entry (char *b, size_t blen, MUTTMENU * menu, int num)
-{
-  mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt,
+static void snd_entry (char *b, size_t blen, MUTTMENU * menu, int num) {
+  int w=(COLS-SW)>blen?blen:COLS-SW;
+  mutt_FormatString (b, w, NONULL (AttachFormat), mutt_attach_fmt,
                      (unsigned long) (((ATTACHPTR **) menu->data)[num]),
                      M_FORMAT_STAT_FILE | M_FORMAT_ARROWCURSOR);
 }
 
-
-
 #include "mutt_crypt.h"
 
 static void redraw_crypt_lines (HEADER * msg)
@@ -147,16 +147,16 @@ static void redraw_crypt_lines (HEADER * msg)
 
   if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) {
     if (!msg->security)
-      mvaddstr (HDR_CRYPT, SidebarWidth, "    Security: ");
+      mvaddstr (HDR_CRYPT, SW, "    Security: ");
     else if (msg->security & APPLICATION_SMIME)
-      mvaddstr (HDR_CRYPT, SidebarWidth, "      S/MIME: ");
+      mvaddstr (HDR_CRYPT, SW, "      S/MIME: ");
     else if (msg->security & APPLICATION_PGP)
-      mvaddstr (HDR_CRYPT, SidebarWidth, "         PGP: ");
+      mvaddstr (HDR_CRYPT, SW, "         PGP: ");
   }
   else if ((WithCrypto & APPLICATION_SMIME))
-    mvaddstr (HDR_CRYPT, SidebarWidth, "      S/MIME: ");
+    mvaddstr (HDR_CRYPT, SW, "      S/MIME: ");
   else if ((WithCrypto & APPLICATION_PGP))
-    mvaddstr (HDR_CRYPT, SidebarWidth, "         PGP: ");
+    mvaddstr (HDR_CRYPT, SW, "         PGP: ");
   else
     return;
 
@@ -179,7 +179,7 @@ static void redraw_crypt_lines (HEADER * msg)
     }
   clrtoeol ();
 
-  move (HDR_CRYPTINFO, SidebarWidth);
+  move (HDR_CRYPTINFO, SW);
   clrtoeol ();
   if ((WithCrypto & APPLICATION_PGP)
       && msg->security & APPLICATION_PGP && msg->security & SIGN)
@@ -196,7 +196,7 @@ static void redraw_crypt_lines (HEADER * msg)
       && (msg->security & APPLICATION_SMIME)
       && (msg->security & ENCRYPT)
       && SmimeCryptAlg && *SmimeCryptAlg) {
-    mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "),
+    mvprintw (HDR_CRYPTINFO, SW + 40, "%s%s", _("Encrypt with: "),
               NONULL (SmimeCryptAlg));
     off = 20;
   }
@@ -208,9 +208,9 @@ static void redraw_crypt_lines (HEADER * msg)
 static void redraw_mix_line (LIST * chain)
 {
   int c;
-  char *t;
+  const char *t;
 
-  mvaddstr (HDR_MIX, SidebarWidth, "         Mix: ");
+  mvaddstr (HDR_MIX, SW, "         Mix: ");
 
   if (!chain) {
     addstr ("<no chain defined>");
@@ -223,7 +223,7 @@ static void redraw_mix_line (LIST * chain)
     if (t && t[0] == '0' && t[1] == '\0')
       t = "<random>";
 
-    if (c + str_len (t) + 2 >= COLS - SidebarWidth)
+    if (c + str_len (t) + 2 >= COLS - SW)
       break;
 
     addstr (NONULL (t));
@@ -270,7 +270,7 @@ static void draw_envelope_addr (int line, ADDRESS * addr)
 
   buf[0] = 0;
   rfc822_write_address (buf, sizeof (buf), addr, 1);
-  mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]);
+  mvprintw (line, SW, TITLE_FMT, Prompts[line - 1]);
   mutt_paddstr (W, buf);
 }
 
@@ -286,9 +286,9 @@ static void draw_envelope (HEADER * msg, char *fcc)
 #ifdef USE_NNTP
   }
   else {
-    mvprintw (HDR_TO, SidebarWidth, TITLE_FMT, Prompts[HDR_NEWSGROUPS - 1]);
+    mvprintw (HDR_TO, SW, TITLE_FMT, Prompts[HDR_NEWSGROUPS - 1]);
     mutt_paddstr (W, NONULL (msg->env->newsgroups));
-    mvprintw (HDR_CC, SidebarWidth, TITLE_FMT, Prompts[HDR_FOLLOWUPTO - 1]);
+    mvprintw (HDR_CC, SW, TITLE_FMT, Prompts[HDR_FOLLOWUPTO - 1]);
     mutt_paddstr (W, NONULL (msg->env->followup_to));
     if (option (OPTXCOMMENTTO)) {
       mvprintw (HDR_BCC, 0, TITLE_FMT, Prompts[HDR_XCOMMENTTO - 1]);
@@ -296,10 +296,10 @@ static void draw_envelope (HEADER * msg, char *fcc)
     }
   }
 #endif
-  mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]);
+  mvprintw (HDR_SUBJECT, SW, TITLE_FMT, Prompts[HDR_SUBJECT - 1]);
   mutt_paddstr (W, NONULL (msg->env->subject));
   draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to);
-  mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]);
+  mvprintw (HDR_FCC, SW, TITLE_FMT, Prompts[HDR_FCC - 1]);
   mutt_paddstr (W, fcc);
 
   if (WithCrypto)
@@ -310,7 +310,7 @@ static void draw_envelope (HEADER * msg, char *fcc)
 #endif
 
   SETCOLOR (MT_COLOR_STATUS);
-  mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments"));
+  mvaddstr (HDR_ATTACH - 1, SW, _("-- Attachments"));
   BKGDSET (MT_COLOR_STATUS);
   clrtoeol ();
 
@@ -339,13 +339,13 @@ static int edit_address_list (int line, ADDRESS ** addr)
   if (mutt_addrlist_to_idna (*addr, &err) != 0) {
     mutt_error (_("Warning: '%s' is a bad IDN."), err);
     mutt_refresh ();
-    mem_free (&err);
+    p_delete(&err);
   }
 
   /* redraw the expanded list so the user can see the result */
   buf[0] = 0;
   rfc822_write_address (buf, sizeof (buf), *addr, 1);
-  move (line, HDR_XOFFSET + SidebarWidth);
+  move (line, HDR_XOFFSET + SW);
   mutt_paddstr (W, buf);
 
   return 0;
@@ -375,8 +375,8 @@ static int delete_attachment (MUTTMENU * menu, short *idxlen, int x)
   idx[x]->content->next = NULL;
   idx[x]->content->parts = NULL;
   mutt_free_body (&(idx[x]->content));
-  mem_free (&idx[x]->tree);
-  mem_free (&idx[x]);
+  p_delete(&idx[x]->tree);
+  p_delete(&idx[x]);
   for (; x < *idxlen - 1; x++)
     idx[x] = idx[x + 1];
   menu->max = --(*idxlen);
@@ -502,7 +502,8 @@ static const char *compose_format_str (char *buf, size_t buflen, char op,
 static void compose_status_line (char *buf, size_t buflen, MUTTMENU * menu,
                                  const char *p)
 {
-  mutt_FormatString (buf, buflen, p, compose_format_str,
+  int w=(COLS-SW)>buflen?buflen:(COLS-SW);
+  mutt_FormatString (buf, w, p, compose_format_str,
                      (unsigned long) menu, 0);
 }
 
@@ -564,7 +565,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
                          ComposeHelp);
 
   if (option (OPTMBOXPANE))
-    buffy_check (1);
+    buffy_check (0);
   while (loop) {
 #ifdef USE_NNTP
     unset_option (OPTNEWS);     /* for any case */
@@ -618,7 +619,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           buf[0] = 0;
         if (mutt_get_field ("Newsgroups: ", buf, sizeof (buf), 0) == 0
             && buf[0]) {
-          mem_free (&msg->env->newsgroups);
+          p_delete(&msg->env->newsgroups);
           str_skip_trailws (buf);
           msg->env->newsgroups = str_dup (str_skip_initws (buf));
           move (HDR_TO, HDR_XOFFSET);
@@ -636,7 +637,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           strfcpy (buf, msg->env->followup_to, sizeof (buf));
         if (mutt_get_field ("Followup-To: ", buf, sizeof (buf), 0) == 0
             && buf[0]) {
-          mem_free (&msg->env->followup_to);
+          p_delete(&msg->env->followup_to);
           str_skip_trailws (buf);
           msg->env->followup_to = str_dup (str_skip_initws (buf));
           move (HDR_CC, HDR_XOFFSET);
@@ -654,7 +655,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           strfcpy (buf, msg->env->x_comment_to, sizeof (buf));
         if (mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) == 0
             && buf[0]) {
-          mem_free (&msg->env->x_comment_to);
+          p_delete(&msg->env->x_comment_to);
           msg->env->x_comment_to = str_dup (buf);
           move (HDR_BCC, HDR_XOFFSET);
           clrtoeol ();
@@ -671,7 +672,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
         buf[0] = 0;
       if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) {
         str_replace (&msg->env->subject, buf);
-        move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth);
+        move (HDR_SUBJECT, HDR_XOFFSET + SW);
         clrtoeol ();
         if (msg->env->subject)
           mutt_paddstr (W, msg->env->subject);
@@ -687,7 +688,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
       if (mutt_get_field ("Fcc: ", buf, sizeof (buf), M_FILE | M_CLEAR) == 0) {
         strfcpy (fcc, buf, _POSIX_PATH_MAX);
         mutt_pretty_mailbox (fcc);
-        move (HDR_FCC, HDR_XOFFSET + SidebarWidth);
+        move (HDR_FCC, HDR_XOFFSET + SW);
         mutt_paddstr (W, fcc);
         fccSet = 1;
       }
@@ -708,14 +709,14 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
       if (str_cmp ("builtin", Editor) != 0 &&
           (op == OP_COMPOSE_EDIT_HEADERS ||
            (op == OP_COMPOSE_EDIT_MESSAGE && option (OPTEDITHDRS)))) {
-        char *tag = NULL, *err = NULL;
+        const char *tag = NULL, *err = NULL;
 
         mutt_env_to_local (msg->env);
         mutt_edit_headers (NONULL (Editor), msg->content->filename, msg,
                            fcc, fcclen);
         if (mutt_env_to_idna (msg->env, &tag, &err)) {
           mutt_error (_("Bad IDN in \"%s\": '%s'"), tag, err);
-          mem_free (&err);
+          p_delete(&err);
         }
       }
       else {
@@ -730,7 +731,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
       /* attachments may have been added */
       if (idxlen && idx[idxlen - 1]->content->next) {
         for (i = 0; i < idxlen; i++)
-          mem_free (&idx[i]);
+          p_delete(&idx[i]);
         idxlen = 0;
         idx =
           mutt_gen_attach_list (msg->content, -1, idx, &idxlen, &idxmax, 0,
@@ -749,18 +750,18 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
       if (!(WithCrypto & APPLICATION_PGP))
         break;
       if (idxlen == idxmax) {
-        mem_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5));
+        p_realloc(&idx, idxmax += 5);
         menu->data = idx;
       }
 
-      idx[idxlen] = (ATTACHPTR *) mem_calloc (1, sizeof (ATTACHPTR));
+      idx[idxlen] = p_new(ATTACHPTR, 1);
       if ((idx[idxlen]->content =
            crypt_pgp_make_key_attachment (NULL)) != NULL) {
         update_idx (menu, idx, idxlen++);
         menu->redraw |= REDRAW_INDEX;
       }
       else
-        mem_free (&idx[idxlen]);
+        p_delete(&idx[idxlen]);
 
       menu->redraw |= REDRAW_STATUS;
 
@@ -789,8 +790,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           break;
 
         if (idxlen + numfiles >= idxmax) {
-          mem_realloc (&idx,
-                        sizeof (ATTACHPTR *) * (idxmax += 5 + numfiles));
+          p_realloc(&idx, idxmax += 5 + numfiles);
           menu->data = idx;
         }
 
@@ -801,7 +801,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
         for (i = 0; i < numfiles; i++) {
           char *att = files[i];
 
-          idx[idxlen] = (ATTACHPTR *) mem_calloc (1, sizeof (ATTACHPTR));
+          idx[idxlen] = p_new(ATTACHPTR, 1);
           idx[idxlen]->unowned = 1;
           idx[idxlen]->content = mutt_make_file_attach (att);
           if (idx[idxlen]->content != NULL)
@@ -809,11 +809,11 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           else {
             error = 1;
             mutt_error (_("Unable to attach %s!"), att);
-            mem_free (&idx[idxlen]);
+            p_delete(&idx[idxlen]);
           }
         }
 
-        mem_free (&files);
+        p_delete(&files);
         if (!error)
           mutt_clear_error ();
 
@@ -889,7 +889,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
 
         if (!ctx->msgcount) {
           mx_close_mailbox (ctx, NULL);
-          mem_free (&ctx);
+          p_delete(&ctx);
           mutt_error _("No messages in that folder.");
 
           break;
@@ -917,23 +917,21 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
         }
 
         if (idxlen + Context->tagged >= idxmax) {
-          mem_realloc (&idx,
-                        sizeof (ATTACHPTR *) * (idxmax +=
-                                                5 + Context->tagged));
+          p_realloc(&idx, idxmax += 5 + Context->tagged);
           menu->data = idx;
         }
 
         for (i = 0; i < Context->msgcount; i++) {
           h = Context->hdrs[i];
           if (h->tagged) {
-            idx[idxlen] = (ATTACHPTR *) mem_calloc (1, sizeof (ATTACHPTR));
+            idx[idxlen] = p_new(ATTACHPTR, 1);
             idx[idxlen]->content = mutt_make_message_attach (Context, h, 1);
             if (idx[idxlen]->content != NULL)
               update_idx (menu, idx, idxlen++);
             else {
               mutt_error _("Unable to attach!");
 
-              mem_free (&idx[idxlen]);
+              p_delete(&idx[idxlen]);
             }
           }
         }
@@ -943,7 +941,7 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           mx_close_mailbox (Context, NULL);
         else
           mx_fastclose_mailbox (Context);
-        mem_free (&Context);
+        p_delete(&Context);
 
         /* go back to the folder we started from */
         Context = this;
@@ -1191,15 +1189,15 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           continue;
         }
         if (idxlen == idxmax) {
-          mem_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5));
+          p_realloc(&idx, idxmax += 5);
           menu->data = idx;
         }
 
-        idx[idxlen] = (ATTACHPTR *) mem_calloc (1, sizeof (ATTACHPTR));
+        idx[idxlen] = p_new(ATTACHPTR, 1);
         /* Touch the file */
         if (!(fp = safe_fopen (fname, "w"))) {
           mutt_error (_("Can't create file %s"), fname);
-          mem_free (&idx[idxlen]);
+          p_delete(&idx[idxlen]);
           continue;
         }
         fclose (fp);
@@ -1285,10 +1283,10 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
           if (idx[idxlen]->unowned)
             idx[idxlen]->content->unlink = 0;
           mutt_free_body (&idx[idxlen]->content);
-          mem_free (&idx[idxlen]->tree);
-          mem_free (&idx[idxlen]);
+          p_delete(&idx[idxlen]->tree);
+          p_delete(&idx[idxlen]);
         }
-        mem_free (&idx);
+        p_delete(&idx);
         idxlen = 0;
         idxmax = 0;
         r = -1;
@@ -1407,7 +1405,8 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
       compose_status_line (buf, sizeof (buf), menu, NONULL (ComposeFormat));
       CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES - 2);
       SETCOLOR (MT_COLOR_STATUS);
-      printw ("%-*.*s", COLS, COLS, buf);
+      move (option (OPTSTATUSONTOP) ? 0 : LINES - 2, SW);
+      printw ("%-*.*s", COLS-SW, COLS-SW, buf);
       SETCOLOR (MT_COLOR_NORMAL);
       menu->redraw &= ~REDRAW_STATUS;
     }
@@ -1419,13 +1418,13 @@ int mutt_compose_menu (HEADER * msg,    /* structure for new message */
     msg->content = idx[0]->content;
     for (i = 0; i < idxlen; i++) {
       idx[i]->content->aptr = NULL;
-      mem_free (&idx[i]);
+      p_delete(&idx[i]);
     }
   }
   else
     msg->content = NULL;
 
-  mem_free (&idx);
+  p_delete(&idx);
 
   return (r);
 }