From f387b393dfab5cb5c00974b1807e8633531e0774 Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Fri, 23 Dec 2011 08:12:20 +0100 Subject: [PATCH] Replaced C program `install-mh' by shell script `mmh'. It is updated to the separated directories. --- .gitignore | 1 + uip/Makefile.in | 10 +-- uip/install-mh.c | 233 ------------------------------------------------------ uip/mmh.sh | 143 +++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+), 238 deletions(-) delete mode 100644 uip/install-mh.c create mode 100755 uip/mmh.sh diff --git a/.gitignore b/.gitignore index f3a4caa..a3dc4a2 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ /uip/mhshow /uip/mhstore /uip/mhtest +/uip/mmh /uip/msgchk /uip/msh /uip/new diff --git a/uip/Makefile.in b/uip/Makefile.in index d92d27a..ee096aa 100644 --- a/uip/Makefile.in +++ b/uip/Makefile.in @@ -50,7 +50,7 @@ SETGID_MAIL = @SETGID_MAIL@ $(COMPILE) $< # commands to build -CMDS = ali anno burst comp dist flist folder forw install-mh mark mhbuild \ +CMDS = ali anno burst comp dist flist folder forw mmh mark mhbuild \ mhlist mhmail mhparam mhpath mhshow mhstore msgchk \ new packf pick prompter refile repl rmf rmm scan send show \ sortm whatnow @@ -68,7 +68,7 @@ SCMDS = inc # source files SRCS = ali.c aliasbr.c anno.c annosbr.c ap.c burst.c comp.c \ conflict.c dist.c distsbr.c dp.c dropsbr.c flist.c fmtdump.c \ - folder.c forw.c ftpsbr.c inc.c install-mh.c mark.c md5.c mhbuild.c \ + folder.c forw.c ftpsbr.c inc.c mmh.sh mark.c md5.c mhbuild.c \ mhbuildsbr.c mhcachesbr.c mhfree.c mhl.c mhlist.c mhlistsbr.c \ mhlsbr.c mhmail.c mhmisc.c mhoutsbr.c mhparam.c mhparse.c \ mhpath.c mhshow.c mhshowsbr.c mhstore.c mhstoresbr.c mhtest.c \ @@ -129,8 +129,9 @@ forw: forw.o whatnowproc.o whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LOCALLIB inc: inc.o scansbr.o dropsbr.o termsbr.o $(LOCALLIBS) $(LINK) inc.o scansbr.o dropsbr.o termsbr.o $(LINKLIBS) $(TERMLIB) -install-mh: install-mh.o $(LOCALLIBS) - $(LINK) install-mh.o $(LINKLIBS) +mmh: mmh.sh + cp mmh.sh mmh + chmod +x mmh mark: mark.o $(LOCALLIBS) $(LINK) mark.o $(LINKLIBS) @@ -246,7 +247,6 @@ install-lcmds: rm -f $(DESTDIR)$(bindir)/unseen rm -f $(DESTDIR)$(bindir)/prev rm -f $(DESTDIR)$(bindir)/next - rm -f $(DESTDIR)$(libdir)/install-mh $(LN) $(DESTDIR)$(bindir)/flist $(DESTDIR)$(bindir)/flists $(LN) $(DESTDIR)$(bindir)/folder $(DESTDIR)$(bindir)/folders $(LN) $(DESTDIR)$(bindir)/new $(DESTDIR)$(bindir)/fnext diff --git a/uip/install-mh.c b/uip/install-mh.c deleted file mode 100644 index d5c16d9..0000000 --- a/uip/install-mh.c +++ /dev/null @@ -1,233 +0,0 @@ -/* -** install-mh.c -- initialize the nmh environment of a new user -** -** 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 /* mh internals */ -#include -#include /* 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 } -}; - -/* -** static prototypes -*/ -static char *geta(void); - - -int -main(int argc, char **argv) -{ - int autof = 0; - char *cp, *pathname, buf[BUFSIZ]; - char *dp, **arguments, **argp; - struct node *np; - struct passwd *pw; - struct stat st; - FILE *in, *out; - int check; - -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = mhbasename(argv[0]); - arguments = getarguments(invo_name, argc, argv, 0); - argp = arguments; - - check = 0; - - while ((dp = *argp++)) { - if (*dp == '-') { - switch (smatch(++dp, switches)) { - case AMBIGSW: - ambigsw(dp, switches); - done(1); - case UNKWNSW: - adios(NULL, "-%s unknown\n", dp); - - case HELPSW: - snprintf(buf, sizeof(buf), "%s [switches]", invo_name); - print_help(buf, switches, 0); - done(1); - case VERSIONSW: - print_version(invo_name); - done(1); - - case AUTOSW: - autof++; - continue; - - case CHECKSW: - check = 1; - continue; - } - } else { - adios(NULL, "%s is invalid argument", dp); - } - } - - /* - ** Find user's home directory. Try the HOME environment - ** variable first, the home directory field in the password file - ** if that's not found. - */ - - if ((mypath = getenv("HOME")) == NULL) { - if ((pw = getpwuid(getuid())) == (struct passwd *)0 || - *pw->pw_dir == '\0') - adios(NULL, "cannot determine your home directory"); - else - mypath = pw->pw_dir; - } - - /* - ** Find the user's profile. Check for the existence of an - ** MH environment variable first with non-empty contents. - ** Convert any relative path name found there to an absolute one. - ** Look for the profile in the user's home directory if the MH - ** environment variable isn't set. - */ - - if ((cp = getenv("MH")) && *cp != '\0') - defpath = getcpy(expanddir(cp)); - else - defpath = concat(mypath, "/", mh_profile, NULL); - - /* - ** Check for the existence of the profile file. It's an - ** error if it exists and this isn't an installation check. - ** An installation check fails if it does not exist, succeeds - ** if it does. - */ - - if (stat(defpath, &st) != NOTOK) { - if (check) - done(0); - - else if (autof) - adios(NULL, "invocation error"); - else - adios(NULL, "You already have an nmh profile, use an editor to modify it"); - } else if (check) { - done(1); - } - - if (!autof && gans("Do you want help? ", anoyes)) { - printf("\n" - "Prior to using nmh, it is necessary to have a file in your login\n" - "directory (%s) named %s which contains information\n" - "to direct certain nmh operations. The only item which is required\n" - "is the path to use for all nmh folder operations. The suggested nmh\n" - "path for you is %s/Mail...\n" - "\n", mypath, mh_profile, mypath); - } - - cp = concat(mypath, "/", "Mail", NULL); - if (stat(cp, &st) != NOTOK) { - if (S_ISDIR(st.st_mode)) { - cp = concat("You already have the standard nmh directory \"", - cp, "\".\nDo you want to use it for nmh? ", NULL); - if (gans(cp, anoyes)) - pathname = "Mail"; - else - goto query; - } else { - goto query; - } - } else { - if (autof) - printf("I'm going to create the standard nmh path for you.\n"); - else - cp = concat("Do you want the standard nmh path \"", - mypath, "/", "Mail\"? ", NULL); - if (autof || gans(cp, anoyes)) - pathname = "Mail"; - else { -query: - if (gans("Do you want a path below your login directory? ", anoyes)) { - printf("What is the path? %s/", mypath); - pathname = geta(); - } else { - printf("What is the whole path? /"); - pathname = concat("/", geta(), NULL); - } - } - } - - chdir(mypath); - if (chdir(pathname) == NOTOK) { - cp = concat("\"", pathname, "\" doesn't exist; Create it? ", - NULL); - if (autof || gans(cp, anoyes)) - if (makedir(pathname) == 0) - adios(NULL, "unable to create %s", pathname); - } else { - printf("[Using existing directory]\n"); - } - - /* - ** Add some initial elements to the profile/context list - */ - m_defs = (struct node *) mh_xmalloc(sizeof *np); - np = m_defs; - np->n_name = getcpy("Path"); - np->n_field = getcpy(pathname); - np->n_context = 0; - np->n_next = NULL; - - /* - ** If there is a default profile file in the - ** nmh `etc' directory, then read it also. - */ - if ((in = fopen(mh_defaults, "r"))) { - readconfig(&np->n_next, in, mh_defaults, 0); - fclose(in); - } - - ctxpath = getcpy(toabsdir(context = "context")); - - /* Initialize current folder to default */ - context_replace(curfolder, defaultfolder); - context_save(); - - /* - ** Now write out the initial .mh_profile - */ - if ((out = fopen(defpath, "w")) == NULL) - adios(defpath, "unable to write"); - 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); - done(0); - return 1; -} - - -static char * -geta(void) -{ - char *cp; - static char line[BUFSIZ]; - - fflush(stdout); - if (fgets(line, sizeof(line), stdin) == NULL) - done(1); - if ((cp = strchr(line, '\n'))) - *cp = 0; - return line; -} diff --git a/uip/mmh.sh b/uip/mmh.sh new file mode 100755 index 0000000..cb27ae8 --- /dev/null +++ b/uip/mmh.sh @@ -0,0 +1,143 @@ +#!/bin/sh +# 2011 markus schnalke +# +# replacement for install-mh(1) +# set up mmh for the user +# +# Uses: folder(1) +# +# Todo: use chmod or set umask for created files? +# Todo: install signal handlers and tell how to abort + + +# the following constants must match the values in config/config.c +mmhdir=.mmh +profile=profile +mailstore=Mail + + +# +# process args +# +while [ $# -ge 1 ] ; do + case $1 in + -c*) + # check if mmh is set up + # Note: The mail storage dir gets silently created if + # everything else is properly set up. + # (folder will always create the folder if input is no tty!) + echo | folder >/dev/null 2>&1 + exit $? + ;; + -v*) + echo "mmh has no own version number, thus this instead:" + folder -version + exit 0 + ;; + -h*|*) + echo "Usage: $0 -- set up mmh for you" >&2 + echo " $0 -c -- check if mmh is set up for you" >&2 + exit 1 + esac + shift +done + + +cat <"$profile" + echo 3. + folder + echo + echo "Enjoy ..." + exit 0 +} + + +# +# mmh dir +# +mmhdir="${MMH:=$mmhdir}" +cd # relative to HOME +echo 1. +if [ -d "$mmhdir" ] ; then + echo "--> Using existing mmh directory $mmhdir" +else + mkdir "$mmhdir" && echo "--> Created mmh directory $mmhdir" +fi +cd "$mmhdir" +mmhpath="`pwd`" + + +# +# profile +# +profile="${MMHP:=$profile}" # relative to $mmhpath +if [ -f "$profile" ] ; then + echo 2. + echo "You already have an mmh profile." + printf "Do you want to edit the file now? [Y/n] " + read answ + case "$answ" in + ''|Y*|y*) + cd "$mmhpath" + ${VISUAL:-${EDITOR:-vi}} "$profile" + echo 3. + folder + echo + echo "Enjoy ..." + exit 0 + ;; + *) + echo "Exiting." + exit 1 + ;; + esac +fi + + +# +# mail store +# +echo 2. +echo "Mmh needs a mail storage." +cd # relative to HOME +if [ -d "$mailstore" ] ; then + echo "The suggested directory `pwd`/$mailstore already exists." + printf "Do you want to use it for mmh? [Y/n] " + read answ + case "$answ" in + ''|Y*|y*) + cd "$mailstore" + echo "--> Using existing directory $mailstore" + finish + exit + ;; + esac +fi +printf "Where do you want it to be located? [`pwd`/Mail] " +read answ +if [ -z "$answ" ] ; then + answ="`pwd`/Mail" +fi +mkdir "$answ" && echo "--> Created $answ" +cd "$answ" +mailstore="`pwd`" +finish -- 1.7.10.4