- snprintf (buf, sizeof(buf), IFORMAT, digest);
- snprintf (value, sizeof(value), "%d", issue);
- context_replace (buf, getcpy (value));
- snprintf (buf, sizeof(buf), VFORMAT, digest);
- snprintf (value, sizeof(value), "%d", volume);
- context_replace (buf, getcpy (value));
+ if (issue == 0) {
+ snprintf (buf, sizeof(buf), IFORMAT, digest);
+ if (volume == 0
+ && (cp = context_find (buf))
+ && ((issue = atoi (cp)) < 0))
+ issue = 0;
+ issue++;
+ }
+ if (volume == 0)
+ snprintf (buf, sizeof(buf), VFORMAT, digest);
+ if ((cp = context_find (buf)) == NULL || (volume = atoi (cp)) <= 0)
+ volume = 1;
+ if (!form)
+ form = digestcomps;
+ in = build_form (form, digest, volume, issue);
+ } else
+ in = open_form(&form, forwcomps);
+
+ if ((out = creat (drft, m_gmprot ())) == NOTOK)
+ adios (drft, "unable to create");
+
+ /*
+ * copy the components into the draft
+ */
+ cpydata (in, out, form, drft);
+ close (in);
+
+ if (file) {
+ /* just copy the file into the draft */
+ if ((in = open (file, O_RDONLY)) == NOTOK)
+ adios (file, "unable to open");
+ cpydata (in, out, file, drft);
+ close (in);
+ close (out);
+ } else {
+ /*
+ * If filter file is defined, then format the
+ * messages into the draft using mhlproc.
+ */
+ if (filter)
+ mhl_draft (out, digest, volume, issue, drft, filter, dashstuff);
+ else if (mime)
+ copy_mime_draft (out);
+ else
+ copy_draft (out, digest, drft, volume, issue, dashstuff);
+ close (out);
+
+ if (digest) {
+ snprintf (buf, sizeof(buf), IFORMAT, digest);
+ snprintf (value, sizeof(value), "%d", issue);
+ context_replace (buf, getcpy (value));
+ snprintf (buf, sizeof(buf), VFORMAT, digest);
+ snprintf (value, sizeof(value), "%d", volume);
+ context_replace (buf, getcpy (value));
+ }
+
+ context_replace (pfolder, folder); /* update current folder */
+ seq_setcur (mp, mp->lowsel); /* update current message */
+ seq_save (mp); /* synchronize sequences */
+ context_save (); /* save the context file */