]> diplodocus.org Git - nmh/blobdiff - uip/mhshowsbr.c
Add basic support for the STLS command in POP
[nmh] / uip / mhshowsbr.c
index 2bac9d00a8d5923dfb07568bfac58600cfa47cf5..17ef4d22251c3bdd7c6a315b3f215ff0c0c6b11a 100644 (file)
@@ -6,6 +6,8 @@
  */
 
 #include "h/mh.h"
+#include "sbr/fmt_new.h"
+#include "sbr/concat.h"
 #include "sbr/trimcpy.h"
 #include "sbr/check_charset.h"
 #include "sbr/getcpy.h"
@@ -32,8 +34,6 @@
 
 extern int debugsw;
 
-int nolist   = 0;
-
 char *progsw = NULL;
 
 /* flags for moreproc/header display */
@@ -101,7 +101,6 @@ void
 show_all_messages(CT *cts, int concat, int textonly, int inlineonly)
 {
     CT ct, *ctp;
-    struct format *hfmt, *mfmt;
 
     /*
      * If form is not specified, then get default form
@@ -110,12 +109,6 @@ show_all_messages(CT *cts, int concat, int textonly, int inlineonly)
     if (!formsw)
        formsw = mh_xstrdup(etcpath("mhl.headers"));
 
-    /*
-     * Compile the content marker and header format lines
-     */
-    mfmt = compile_marker(markerform);
-    hfmt = compile_header(headerform);
-
     /*
      * If form is "mhl.null", suppress display of header.
      */
@@ -127,16 +120,30 @@ show_all_messages(CT *cts, int concat, int textonly, int inlineonly)
 
        /* if top-level type is ok, then display message */
        if (type_ok (ct, 1)) {
-           if (headersw) output_header(ct, hfmt);
+           /*
+            * Compile the content marker format line
+            */
+           struct format *mfmt = compile_marker(markerform);
+
+           if (headersw) {
+               /*
+                * Compile the header format line
+                */
+               struct format *hfmt = compile_header(headerform);
+               output_header(ct, hfmt);
+               fmt_free(hfmt, 0);
+           }
 
            show_single_message (ct, formsw, concat, textonly, inlineonly,
                                 mfmt);
+           fmt_free(mfmt, 0);
        }
     }
 
+    /* Reset the format component hashtable, which free's any components which
+       it references. */
+    fmt_free(NULL, 1);
     free_markercomps();
-    fmt_free(hfmt, 1);
-    fmt_free(mfmt, 1);
 }
 
 
@@ -468,7 +475,6 @@ show_content_aux2 (CT ct, int alternate, char *cracked, char *buffer,
     }
 
     vec = argsplit(buffer, &file, &vecp);
-    vec[vecp++] = NULL;
 
     fflush (stdout);
 
@@ -905,7 +911,7 @@ parse_display_string (CT ct, char *cp, int *xstdin, int *xlist,
 
            case 'l':
                /* display listing prior to displaying content */
-               *xlist = !nolist;
+               *xlist = 1;
                break;
 
            case 's':
@@ -1314,7 +1320,7 @@ compile_header(char *form)
 
     fmtstring = new_fs(form, NULL, DEFAULT_HEADER);
 
-    (void) fmt_compile(fmtstring, &fmt, 1);
+    (void) fmt_compile(fmtstring, &fmt, 0);
     free_fs();
 
     while ((comp = fmt_nextcomp(comp, &bucket)) != NULL) {
@@ -1337,7 +1343,7 @@ compile_marker(char *form)
 
     fmtstring = new_fs(form, NULL, DEFAULT_MARKER);
 
-    (void) fmt_compile(fmtstring, &fmt, 1);
+    (void) fmt_compile(fmtstring, &fmt, 0);
     free_fs();
 
     /*