/*
* install-mh.c -- initialize the nmh environment of a new user
*
- * $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 <pwd.h> /* structure for getpwuid() results */
-static struct swit switches[] = {
-#define AUTOSW 0
- { "auto", 0 },
-#define VERSIONSW 1
- { "version", 0 },
-#define HELPSW 2
- { "help", 0 },
-#define CHECKSW 3
- { "check", 1 },
- { NULL, 0 }
-};
+#define INSTALLMH_SWITCHES \
+ X("auto", 0, AUTOSW) \
+ X("version", 0, VERSIONSW) \
+ X("help", 0, HELPSW) \
+ X("check", 1, CHECKSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(INSTALLMH);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(INSTALLMH, switches);
+#undef X
/*
* static prototypes
FILE *in, *out;
int check;
-#ifdef LOCALE
- setlocale(LC_ALL, "");
-#endif
- invo_name = r1bindex (argv[0], '/');
+ if (nmh_init(argv[0], 0 /* use context_foil() */ )) { return 1; }
+
arguments = getarguments (invo_name, argc, argv, 0);
argp = arguments;
case HELPSW:
snprintf (buf, sizeof(buf), "%s [switches]", invo_name);
print_help (buf, switches, 0);
- done (1);
+ done (0);
case VERSIONSW:
print_version(invo_name);
- done (1);
+ done (0);
case AUTOSW:
autof++;
}
}
- chdir (mypath);
+ if (chdir (mypath) < 0) {
+ advise (mypath, "chdir");
+ }
if (chdir (pathname) == NOTOK) {
cp = concat ("\"", pathname, "\" doesn't exist; Create it? ", NULL);
if (autof || gans (cp, anoyes))
*/
if ((out = fopen (defpath, "w")) == NULL)
adios (defpath, "unable to write");
+ /*
+ * The main purpose of this first line is to fool file(1).
+ * Without it, if the first line of the profile is Path:,
+ * file 5.19 reports its type as message/news. With it,
+ * it reports the type as text/plain.
+ */
+ fprintf (out, "MH-Profile-Version: 1.0\n");
for (np = m_defs; np; np = np->n_next) {
if (!np->n_context)
fprintf (out, "%s: %s\n", np->n_name, np->n_field);
}
fclose (out);
- return done (0);
+ done (0);
+ return 1;
}