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