File: m_draft.c

package info (click to toggle)
mh 6.8.4-28
  • links: PTS
  • area: main
  • in suites: slink
  • size: 7,012 kB
  • ctags: 7,496
  • sloc: ansic: 75,211; sh: 3,112; lisp: 2,205; ml: 1,894; makefile: 724; perl: 482; csh: 150; tcl: 66; sed: 43; awk: 7
file content (74 lines) | stat: -rw-r--r-- 1,896 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* m_draft.c - construct the draft name */
#ifndef	lint
static char ident[] = "@(#)$Id: m_draft.c,v 1.2 1992/12/15 00:20:22 jromine Exp $";
#endif	/* lint */

#include "../h/mh.h"
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>


extern int errno;


char   *m_draft (folder, msg, use, isdf)
register char  *folder,
               *msg;
register int    use,
               *isdf;
{
    register char  *cp;
    register struct msgs   *mp;
    struct stat st;
    static char buffer[BUFSIZ];

    if (*isdf == NOTOK || folder == NULL || *folder == 0) {
	if (*isdf == NOTOK || (cp = m_find ("Draft-Folder")) == NULL) {
	    *isdf = 0;
	    return m_maildir (msg && *msg ? msg : draft);
	}
	else
	    folder = path (*cp == '+' || *cp == '@' ? cp + 1 : cp,
		    *cp != '@' ? TFOLDER : TSUBCWF);
    }
    *isdf = 1;
    
    (void) chdir (m_maildir (""));
    (void) strcpy (buffer, m_maildir (folder));
    if (stat (buffer, &st) == NOTOK) {
	if (errno != ENOENT)
	    adios (buffer, "error on folder");
	cp = concat ("Create folder \"", buffer, "\"? ", NULLCP);
	if (!getanswer (cp))
	    done (0);
	free (cp);
	if (!makedir (buffer))
	    adios (NULLCP, "unable to create folder %s", buffer);
    }

    if (chdir (buffer) == NOTOK)
	adios (buffer, "unable to change directory to");
    if (!(mp = m_gmsg (folder)))
	adios (NULLCP, "unable to read folder %s", folder);

    if ((mp = m_remsg (mp, 0, MAXFOLDER)) == NULL)
	adios (NULLCP, "unable to allocate folder storage");
    mp -> msgflags |= MHPATH;

    if (!m_convert (mp, msg && *msg ? msg : use ? "cur" : "new"))
	done (1);
    m_setseq (mp);
    if (mp -> numsel > 1)
	adios (NULLCP, "only one message draft at a time!");

    (void) sprintf (buffer, "%s/%s", mp -> foldpath, m_name (mp -> lowsel));
    cp = buffer;

    m_setcur (mp, mp -> lowsel);
    m_sync (mp);
    m_fmsg (mp);

    return cp;
}