]> diplodocus.org Git - nmh/blobdiff - uip/mshcmds.c
Started revising m_getfld() code to replace direct buffer
[nmh] / uip / mshcmds.c
index 0190beecfca8df52159fad315a1503d02ea23afa..c2a8a3cf53cf081a1b63d6dfca9bff07920ba135 100644 (file)
@@ -15,7 +15,6 @@
 #include <h/tws.h>
 #include <h/mts.h>
 #include <errno.h>
-#include <setjmp.h>
 #include <signal.h>
 #include <h/msh.h>
 #include <h/picksbr.h>
@@ -27,30 +26,12 @@ static char delim3[] = "-------";   /* from burst.c */
 static int mhlnum;
 static FILE *mhlfp;
 
-#if defined(NNTP) && defined(MPOP)
-# undef        MPOP
-#endif
-
-#ifdef MPOP
-# ifdef BPOP
-extern int pmsh;
-extern char response[];
-# endif
-#endif /* MPOP */
-
 /*
  * Type for a compare function for qsort.  This keeps
  * the compiler happy.
  */
 typedef int (*qsort_comp) (const void *, const void *);
 
-/*
- * prototypes
- */
-void clear_screen (void);   /* from termsbr.c */
-int SOprintf (char *, ...); /* from termsbr.c */
-int sc_width (void);        /* from termsbr.c */
-
 /*
  * static prototypes
  */
@@ -70,9 +51,6 @@ static int process (int, char *, int, char **);
 static void copy_message (int, FILE *);
 static void copy_digest (int, FILE *);
 
-/* from mhlsbr.c */
-int mhlsbr (int, char **, FILE *(*)());
-
 void
 forkcmd (char **args, char *pgm)
 {
@@ -1098,6 +1076,7 @@ void
 helpcmd (char **args)
 {
     int i;
+    NMH_UNUSED (args);
 
     for (i = 0; hlpmsg[i]; i++) {
        printf (hlpmsg[i], invo_name);
@@ -1135,7 +1114,8 @@ void
 markcmd (char **args)
 {
     int addsw = 0, deletesw = 0, debugsw = 0;
-    int listsw = 0, zerosw = 0, seqp = 0;
+    int listsw = 0, zerosw = 0;
+    size_t seqp = 0;
     int msgp = 0, msgnum;
     char *cp, buf[BUFSIZ];
     char *seqs[NUMATTRS + 1], *msgs[MAXARGS];
@@ -1644,7 +1624,8 @@ static struct swit pickswit[] = {
 void
 pickcmd (char **args)
 {
-    int zerosw = 1, msgp = 0, seqp = 0;
+    int zerosw = 1, msgp = 0;
+    size_t seqp = 0;
     int vecp = 0, hi, lo, msgnum;
     char *cp, buf[BUFSIZ], *msgs[MAXARGS];
     char *seqs[NUMATTRS], *vec[MAXARGS];
@@ -1999,12 +1980,6 @@ rmm (void)
        if (is_selected (mp, msgnum)) {
            set_deleted (mp, msgnum);
            unset_exists (mp, msgnum);
-#ifdef MPOP
-#ifdef BPOP
-           if (pmsh && pop_dele (msgnum) != OK)
-               fprintf (stderr, "%s", response);
-#endif
-#endif /* MPOP */
        }
 
     if ((mp->nummsg -= mp->numsel) <= 0) {
@@ -2063,11 +2038,6 @@ scancmd (char **args)
     char *cp, *form = NULL, *format = NULL;
     char buf[BUFSIZ], *nfs, *msgs[MAXARGS];
     register FILE *zp;
-#ifdef MPOP
-#ifdef BPOP
-    static int p_optim = 0;
-#endif
-#endif /* MPOP */
     static int s_optim = 0;
     static char *s_form = NULL, *s_format = NULL;
 
@@ -2148,79 +2118,10 @@ scancmd (char **args)
        s_form = form ? getcpy (form) : NULL;
        s_format = format ? getcpy (format) : NULL;
 
-#ifdef MPOP
-#ifdef BPOP
-       if (pmsh) {
-           int i;
-           char *dp, *ep, *fp;
-
-           if (width == 0)
-               width = sc_width ();
-
-           for (dp = nfs, i = 0; *dp; dp++, i++)
-               if (*dp == '\\' || *dp == '"' || *dp == '\n')
-                   i++;
-           i++;
-           ep = mh_xmalloc ((unsigned) i);
-           for (dp = nfs, fp = ep; *dp; dp++) {
-               if (*dp == '\n') {
-                   *fp++ = '\\', *fp++ = 'n';
-                   continue;
-               }
-               if (*dp == '"' || *dp == '\\')
-                   *fp++ = '\\';
-               *fp++ = *dp;
-           }
-           *fp = NULL;
-
-           if (pop_command ("XTND SCAN %d \"%s\"", width, ep) == OK)
-               p_optim = 1;
-
-           free (ep);
-       }
-#endif
-#endif /* MPOP */
     }
     else
        optim = equiv (s_form, form) && equiv (s_format, format);
 
-#ifdef MPOP
-#ifdef BPOP
-    if (p_optim && optim) {
-       for (msgnum = mp->lowmsg; msgnum <= mp->hghmsg; msgnum++)
-           if (!is_selected(mp, msgnum) || Msgs[msgnum].m_scanl)
-               break;
-       if (msgnum > mp->hghmsg && pop_command ("LIST") == OK) {
-           fprintf (stderr, "Stand-by...");
-           fflush (stderr);
-
-           for (;;) {
-               int     size;
-
-               switch (pop_multiline ()) {
-                   case NOTOK:
-                       fprintf (stderr, "%s", response);
-                       /* and fall... */
-                   case DONE:
-                       fprintf (stderr,"\n");
-                       break;
-
-                   case OK:
-                       if (sscanf (response, "%d %d", &msgnum, &size) == 2
-                               && mp->lowmsg <= msgnum
-                               && msgnum <= mp->hghmsg
-                               && (cp = strchr(response, '#'))
-                               && *++cp)
-                           Msgs[msgnum].m_scanl = concat (cp, "\n", NULL);
-                       continue;
-               }
-               break;
-           }
-       }
-    }
-#endif
-#endif /* MPOP */
-
     interrupted = 0;
     for (msgnum = mp->lowsel;
            msgnum <= mp->hghsel && !interrupted;
@@ -2229,20 +2130,6 @@ scancmd (char **args)
            if (optim && Msgs[msgnum].m_scanl)
                printf ("%s", Msgs[msgnum].m_scanl);
            else {
-#ifdef MPOP
-#ifdef BPOP
-               if (p_optim
-                       && optim
-                       && is_virtual (mp, msgnum)
-                       && pop_command ("LIST %d", msgnum) == OK
-                       && (cp = strchr(response, '#'))
-                       && *++cp) {
-                   Msgs[msgnum].m_scanl = concat (cp, "\n", NULL);
-                   printf ("%s", Msgs[msgnum].m_scanl);                    
-                   continue;
-               }
-#endif
-#endif /* MPOP */
 
                zp = msh_ready (msgnum, 0);
                switch (state = scan (zp, msgnum, 0, nfs, width,
@@ -2386,7 +2273,7 @@ showcmd (char **args)
            return;
     seq_setprev (mp);
 
-    if (!nshow && !getenv ("NOMHNPROC"))
+    if (!nshow)
        for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
            if (is_selected (mp, msgnum) && is_nontext (msgnum)) {
                proc = showmimeproc;
@@ -2471,6 +2358,8 @@ show (int msgnum)
 static int
 eom_action (int c)
 {
+    NMH_UNUSED (c);
+
     return (ftell (mhlfp) >= Msgs[mhlnum].m_stop);
 }
 
@@ -2511,19 +2400,7 @@ ask (int msgnum)
     fflush (stdout);
     buf[0] = 0;
 
-#ifndef        BSD42
     read (fileno (stdout), buf, sizeof buf);
-#else /* BSD42 */
-    switch (setjmp (sigenv)) {
-       case OK: 
-           should_intr = 1;
-           read (fileno (stdout), buf, sizeof buf);/* fall... */
-
-       default: 
-           should_intr = 0;
-           break;
-    }
-#endif /* BSD42 */
 
     if (strchr(buf, '\n') == NULL)
        putchar ('\n');
@@ -2558,8 +2435,9 @@ is_nontext (int msgnum)
 
     fp = msh_ready (msgnum, 1);
 
-    for (state = FLD;;)
-       switch (state = m_getfld (state, name, buf, sizeof buf, fp)) {
+    for (state = FLD;;) {
+       int bufsz = sizeof buf;
+       switch (state = m_getfld (state, name, buf, &bufsz, fp)) {
        case FLD:
        case FLDPLUS:
        case FLDEOF:
@@ -2572,7 +2450,8 @@ is_nontext (int msgnum)
 
                cp = add (buf, NULL);
                while (state == FLDPLUS) {
-                   state = m_getfld (state, name, buf, sizeof buf, fp);
+                   bufsz = sizeof buf;
+                   state = m_getfld (state, name, buf, &bufsz, fp);
                    cp = add (buf, cp);
                }
                bp = cp;
@@ -2675,7 +2554,8 @@ out:
            if (!mh_strcasecmp (name, ENCODING_FIELD)) {
                cp = add (buf, NULL);
                while (state == FLDPLUS) {
-                   state = m_getfld (state, name, buf, sizeof buf, fp);
+                   bufsz = sizeof buf;
+                   state = m_getfld (state, name, buf, &bufsz, fp);
                    cp = add (buf, cp);
                }
                for (bp = cp; isspace (*bp); bp++)
@@ -2699,8 +2579,10 @@ out:
             * Just skip the rest of this header
             * field and go to next one.
             */
-           while (state == FLDPLUS)
-               state = m_getfld (state, name, buf, sizeof(buf), fp);
+           while (state == FLDPLUS) {
+               bufsz = sizeof buf;
+               state = m_getfld (state, name, buf, &bufsz, fp);
+           }
            break;
 
            /*
@@ -2710,6 +2592,7 @@ out:
        default:
            return 0;
        }
+    }
 }
 
 
@@ -2865,14 +2748,16 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp)
 
     zp = msh_ready (msgnum, 0);
     for (state = FLD;;) {
-       switch (state = m_getfld (state, name, buf, sizeof buf, zp)) {
+       int bufsz = sizeof buf;
+       switch (state = m_getfld (state, name, buf, &bufsz, zp)) {
            case FLD: 
            case FLDEOF: 
            case FLDPLUS: 
                if (!mh_strcasecmp (name, datesw)) {
                    bp = getcpy (buf);
                    while (state == FLDPLUS) {
-                       state = m_getfld (state, name, buf, sizeof buf, zp);
+                       bufsz = sizeof buf;
+                       state = m_getfld (state, name, buf, &bufsz, zp);
                        bp = add (buf, bp);
                    }
                    if ((tw = dparsetime (bp)) == NULL)
@@ -2889,7 +2774,8 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp)
                else if (subjsw && !mh_strcasecmp(name, subjsw)) {
                    bp = getcpy (buf);
                    while (state == FLDPLUS) {
-                       state = m_getfld (state, name, buf, sizeof buf, zp);
+                       bufsz = sizeof buf;
+                       state = m_getfld (state, name, buf, &bufsz, zp);
                        bp = add (buf, bp);
                    }
                    msgp->m_scanl = sosmash(subjsw, bp);
@@ -2898,8 +2784,10 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp)
                    else
                        subjsw = (char *)0;/* subject done, need date */
                } else {
-                   while (state == FLDPLUS)    /* flush this one */
-                       state = m_getfld (state, name, buf, sizeof buf, zp);
+                   while (state == FLDPLUS) {  /* flush this one */
+                       bufsz = sizeof buf;
+                       state = m_getfld (state, name, buf, &bufsz, zp);
+                   }
                }
                continue;