Commit | Line | Data |
---|---|---|
ad787160 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 | } |