** attach files This option attaches the named files to
** the draft.
**
-** alist [-ln] This option lists the attachments on the
-** draft. -l gets long listings, -n gets
-** numbered listings.
+** alist This option lists the attachments on the
+** draft.
**
** detach files This option removes attachments from the
** detach -n numbers draft. This can be done by file name or
#define ATTACHCMDSW 11
{ "attach", 0 },
#define DETACHCMDSW 12
- { "detach [-n]", 2 },
+ { "detach [-n]", 0 },
#define ALISTCMDSW 13
- { "alist [-ln] ", 2 },
+ { "alist", 0 },
{ NULL, 0 }
};
static int editfile(char **, char **, char *, int, struct msgs *,
char *, char *, int);
static int sendfile(char **, char *, int);
+static int refile(char **, char *);
static int removefile(char *);
static void writelscmd(char *, int, char **);
static void writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp);
char file[MAXPATHLEN + 1]; /* file name buffer */
char shell[MAXPATHLEN + 1]; /* shell response buffer */
FILE *f; /* read pointer for bgnd proc */
- char *l; /* set on -l to alist command */
- int n; /* set on -n to alist command */
+ int n; /* set on -n to detach command */
#ifdef LOCALE
setlocale(LC_ALL, "");
case REFILEOPT:
/* Refile the draft */
- if (refile(++argp, drft) == 0)
+ if (refile(++argp, drft) == 0) {
done(0);
+ }
break;
case CDCMDSW:
case ALISTCMDSW:
/*
- ** List attachments on current draft. Options are:
- **
- ** -l long listing (full path names)
- ** -n numbers listing
+ ** List attachments on current draft.
*/
-
- l = NULL;
- n = 0;
-
- while (*++argp) {
- if (strcmp(*argp, "-l") == 0)
- l = "/";
-
- else if (strcmp(*argp, "-n") == 0)
- n = 1;
-
- else if (strcmp(*argp, "-ln") == 0 ||
- strcmp(*argp, "-nl") == 0) {
- l = "/";
- n = 1;
- } else {
- n = -1;
- break;
- }
+ snprintf(buf, sizeof buf, "anno -list -comp '%s' "
+ "-number all -text IGNORE '%s'",
+ attach_hdr, drft);
+ if (system(buf) != 0) {
+ advise(NULL, "Could not list attachment headers.");
}
-
- if (n == -1)
- advise(NULL, "usage is alist [-ln].");
-
- else
- snprintf(buf, sizeof buf,
- "anno -list -comp '%s' "
- "%s%s '%s'",
- attach_hdr,
- n ? "-number all" : "",
- l ? "-text IGNORE " : "",
- drft);
- if (system(buf) != 0) {
- advise(NULL, "Could not list attachment headers.");
- }
-
break;
case ATTACHCMDSW:
else
snprintf(linkpath, sizeof(linkpath), "%s/%s",
cwd, altmsglink);
- }
-
- if (altmsg) {
unlink(linkpath);
#ifdef HAVE_LSTAT
if (link(altpath, linkpath) == NOTOK) {
default:
if ((status = pidwait(pid, NOTOK))) {
- if (((status & 0xff00) != 0xff00)
- && (!reedit || (status & 0x00ff))) {
- if (!use && (status & 0xff00) && (rename(file, cp = m_backup (file)) != NOTOK)) {
+ if (((status & 0xff00) != 0xff00) &&
+ (!reedit || (status & 0x00ff))) {
+ if (!use && (status & 0xff00) && (rename(file, cp = m_backup(file)) != NOTOK)) {
advise(NULL, "problems with edit--draft left in %s", cp);
} else {
advise(NULL, "problems with edit--%s preserved", file);
/*
+** refile msg into another folder
+*/
+static int
+refile(char **arg, char *file)
+{
+ pid_t pid;
+ register int vecp;
+ char *vec[MAXARGS];
+
+ vecp = 0;
+ vec[vecp++] = "refile";
+ vec[vecp++] = "-nolink"; /* override bad .mh_profile defaults */
+ vec[vecp++] = "-file";
+ vec[vecp++] = file;
+
+ while (arg && *arg) {
+ vec[vecp++] = *arg++;
+ }
+ vec[vecp] = NULL;
+
+ context_save(); /* save the context file */
+ fflush(stdout);
+
+ switch (pid = fork()) {
+ case -1:
+ advise("fork", "unable to");
+ return -1;
+
+ case 0:
+ execvp(*vec, vec);
+ fprintf(stderr, "unable to exec ");
+ perror(*vec);
+ _exit(-1);
+
+ default:
+ return (pidwait(pid, -1));
+ }
+}
+
+
+/*
** Remove the draft file
*/