/*
* packf.c -- pack a nmh folder into a file
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
#include <h/utils.h>
#include <errno.h>
-static struct swit switches[] = {
-#define FILESW 0
- { "file name", 0 },
-#define MBOXSW 1
- { "mbox", 0 },
-#define MMDFSW 2
- { "mmdf", 0 },
-#define VERSIONSW 3
- { "version", 0 },
-#define HELPSW 4
- { "help", 0 },
- { NULL, 0 }
-};
+#define PACKF_SWITCHES \
+ X("file name", 0, FILESW) \
+ X("mbox", 0, MBOXSW) \
+ X("mmdf", 0, MMDFSW) \
+ X("version", 0, VERSIONSW) \
+ X("help", 0, HELPSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(PACKF);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(PACKF, switches);
+#undef X
static int md = NOTOK;
static int mbx_style = MBOX_FORMAT;
static int mapping = 0;
+static void mbxclose_done(int) NORETURN;
+
char *file = NULL;
struct msgs *mp;
struct stat st;
+ done=mbxclose_done;
+
#ifdef LOCALE
setlocale(LC_ALL, "");
#endif
snprintf (buf, sizeof(buf), "%s [+folder] [msgs] [switches]",
invo_name);
print_help (buf, switches, 1);
- done (1);
+ done (0);
case VERSIONSW:
print_version(invo_name);
- done (1);
+ done (0);
case FILESW:
if (file)
if (*cp == '+' || *cp == '@') {
if (folder)
adios (NULL, "only one folder at a time!");
- folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
+ folder = pluspath (cp);
} else
app_msgarg(&msgs, cp);
}
seq_save (mp);
context_save (); /* save the context file */
folder_free (mp); /* free folder/message structure */
- return done (0);
+ done (0);
+ return 1;
}
-int
-done (int status)
+static void
+mbxclose_done (int status)
{
mbx_close (file, md);
exit (status);
- return 1; /* dead code to satisfy the compiler */
}