Added all of the MH sources, including RCS files, in
[mmh] / docs / historical / mh-6.8.5 / sbr / m_draft.c
1 /* m_draft.c - construct the draft name */
2 #ifndef lint
3 static char ident[] = "@(#)$Id: m_draft.c,v 1.2 1992/12/15 00:20:22 jromine Exp $";
4 #endif  /* lint */
5
6 #include "../h/mh.h"
7 #include <errno.h>
8 #include <stdio.h>
9 #include <sys/types.h>
10 #include <sys/stat.h>
11
12
13 extern int errno;
14
15
16 char   *m_draft (folder, msg, use, isdf)
17 register char  *folder,
18                *msg;
19 register int    use,
20                *isdf;
21 {
22     register char  *cp;
23     register struct msgs   *mp;
24     struct stat st;
25     static char buffer[BUFSIZ];
26
27     if (*isdf == NOTOK || folder == NULL || *folder == 0) {
28         if (*isdf == NOTOK || (cp = m_find ("Draft-Folder")) == NULL) {
29             *isdf = 0;
30             return m_maildir (msg && *msg ? msg : draft);
31         }
32         else
33             folder = path (*cp == '+' || *cp == '@' ? cp + 1 : cp,
34                     *cp != '@' ? TFOLDER : TSUBCWF);
35     }
36     *isdf = 1;
37     
38     (void) chdir (m_maildir (""));
39     (void) strcpy (buffer, m_maildir (folder));
40     if (stat (buffer, &st) == NOTOK) {
41         if (errno != ENOENT)
42             adios (buffer, "error on folder");
43         cp = concat ("Create folder \"", buffer, "\"? ", NULLCP);
44         if (!getanswer (cp))
45             done (0);
46         free (cp);
47         if (!makedir (buffer))
48             adios (NULLCP, "unable to create folder %s", buffer);
49     }
50
51     if (chdir (buffer) == NOTOK)
52         adios (buffer, "unable to change directory to");
53     if (!(mp = m_gmsg (folder)))
54         adios (NULLCP, "unable to read folder %s", folder);
55
56     if ((mp = m_remsg (mp, 0, MAXFOLDER)) == NULL)
57         adios (NULLCP, "unable to allocate folder storage");
58     mp -> msgflags |= MHPATH;
59
60     if (!m_convert (mp, msg && *msg ? msg : use ? "cur" : "new"))
61         done (1);
62     m_setseq (mp);
63     if (mp -> numsel > 1)
64         adios (NULLCP, "only one message draft at a time!");
65
66     (void) sprintf (buffer, "%s/%s", mp -> foldpath, m_name (mp -> lowsel));
67     cp = buffer;
68
69     m_setcur (mp, mp -> lowsel);
70     m_sync (mp);
71     m_fmsg (mp);
72
73     return cp;
74 }