- }
-
- if (!file)
- file = "./msgbox";
- file = path (file, TFILE);
-
- /*
- * Check if file to be created (or appended to)
- * exists. If not, ask for confirmation.
- */
- if (stat (file, &st) == NOTOK) {
- if (errno != ENOENT)
- adios (file, "error on file");
- cp = concat ("Create file \"", file, "\"? ", NULL);
- if (!getanswer (cp))
- done (1);
- free (cp);
- }
-
- if (!context_find ("path"))
- free (path ("./", TFOLDER));
-
- /* default is to pack whole folder */
- if (!nummsgs)
- msgs[nummsgs++] = "all";
-
- if (!folder)
- folder = getfolder (1);
- maildir = m_maildir (folder);
-
- if (chdir (maildir) == NOTOK)
- adios (maildir, "unable to change directory to ");
-
- /* read folder and create message structure */
- if (!(mp = folder_read (folder)))
- adios (NULL, "unable to read folder %s", folder);
-
- /* check for empty folder */
- if (mp->nummsg == 0)
- adios (NULL, "no messages in %s", folder);
-
- /* parse all the message ranges/sequences and set SELECTED */
- for (msgnum = 0; msgnum < nummsgs; msgnum++)
- if (!m_convert (mp, msgs[msgnum]))
- done (1);
- seq_setprev (mp); /* set the previous-sequence */
-
- /* open and lock new maildrop file */
- if ((md = mbx_open(file, mbx_style, getuid(), getgid(), m_gmprot())) == NOTOK)
- adios (file, "unable to open");
-
- /* copy all the SELECTED messages to the file */
- for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
- if (is_selected(mp, msgnum)) {
- if ((fd = open (msgnam = m_name (msgnum), O_RDONLY)) == NOTOK) {
- admonish (msgnam, "unable to read message");
- break;
- }
-
- if (mbx_copy (file, mbx_style, md, fd, mapping, NULL, 1) == NOTOK)
- adios (file, "error writing to file");
-
- close (fd);
- }
-
- /* close and unlock maildrop file */
- mbx_close (file, md);
-
- context_replace (pfolder, folder); /* update current folder */
- if (mp->hghsel != mp->curmsg)
- seq_setcur (mp, mp->lowsel);
- seq_save (mp);
- context_save (); /* save the context file */
- folder_free (mp); /* free folder/message structure */
- return done (0);
-}