#define QUOTE '\\'
-static struct swit mhlswitches[] = {
+static struct swit switches[] = {
#define FORMSW 0
{ "form formfile", 0 },
#define WIDTHSW 1
{ "width columns", 0 },
-#define SLEEPSW 2
- { "sleep seconds", 0 },
-#define VERSIONSW 3
+#define VERSIONSW 2
{ "Version", 0 },
-#define HELPSW 4
+#define HELPSW 3
{ "help", 0 },
-#define FORW1SW 5
+#define FORW1SW 4
{ "forward", -7 },
-#define FORW2SW 6
+#define FORW2SW 5
{ "forwall", -7 },
-#define NBODYSW 7
+#define NBODYSW 6
{ "nobody", -6 },
{ NULL, 0 }
};
static int forwflg = 0;
static int forwall = 0;
-static int sleepsw = NOTOK;
-
static int exitstat = 0;
static int mhldebug = 0;
static char *ignores[MAXARGS];
static jmp_buf env;
-static jmp_buf mhlenv;
-
-static FILE *(*mhl_action) () = (FILE *(*) ()) 0;
-
/*
** Redefine a couple of functions.
** These are undefined later in the code.
*/
-#define adios mhladios
-#define done mhldone
/*
** prototypes
static void putstr(char *);
static void putch(char);
static void intrser(int);
-static void mhladios(char *, char *, ...);
-static void mhldone(int);
int sc_width(void); /* from termsbr.c */
char buf[BUFSIZ], *files[MAXARGS];
char **argp, **arguments;
-#ifdef LOCALE
setlocale(LC_ALL, "");
-#endif
-
invo_name = mhbasename(argv[0]);
/* read user profile/context */
while ((cp = *argp++)) {
if (*cp == '-') {
- switch (smatch(++cp, mhlswitches)) {
+ switch (smatch(++cp, switches)) {
case AMBIGSW:
- ambigsw(cp, mhlswitches);
- done(1);
+ ambigsw(cp, switches);
+ exit(1);
case UNKWNSW:
adios(NULL, "-%s unknown\n", cp);
case HELPSW:
snprintf(buf, sizeof(buf), "%s [switches] [files ...]", invo_name);
- print_help(buf, mhlswitches, 1);
- done(1);
+ print_help(buf, switches, 1);
+ exit(0);
case VERSIONSW:
print_version(invo_name);
- done(1);
+ exit(0);
case FORMSW:
if (!(form = *argp++) || *form == '-')
argp[-2]);
continue;
- case SLEEPSW:
- if (!(cp = *argp++) || *cp == '-')
- adios(NULL, "missing argument to %s",
- argp[-2]);
- sleepsw = atoi(cp); /* ZERO ok! */
- continue;
-
case WIDTHSW:
if (!(cp = *argp++) || *cp == '-')
adios(NULL, "missing argument to %s",
FILE *fp = NULL;
struct mcomp *c1;
- switch (setjmp(env)) {
- case OK:
+ if (setjmp(env) == 0) {
if (fname) {
- fp = mhl_action ? (*mhl_action) (fname) :
- fopen(fname, "r");
+ fp = fopen(fname, "r");
if (fp == NULL) {
advise(fname, "unable to open");
exitstat++;
}
SIGNAL(SIGINT, intrser);
mhlfile(fp, fname, ofilen, ofilec);
- /* FALL THROUGH! */
- default:
- SIGNAL(SIGINT, SIG_IGN);
- if (mhl_action == NULL && fp != stdin)
- fclose(fp);
- if (holder.c_text) {
- free(holder.c_text);
- holder.c_text = NULL;
- }
- free_queue(&msghd, &msgtl);
- for (c1 = fmthd; c1; c1 = c1->c_next)
- c1->c_flags &= ~HDROUTPUT;
- break;
}
+
+ SIGNAL(SIGINT, SIG_IGN);
+ if (fp != stdin)
+ fclose(fp);
+ if (holder.c_text) {
+ free(holder.c_text);
+ holder.c_text = NULL;
+ }
+ free_queue(&msghd, &msgtl);
+ for (c1 = fmthd; c1; c1 = c1->c_next)
+ c1->c_flags &= ~HDROUTPUT;
}
putchar('\n');
longjmp(env, DONE);
}
-
-
-#undef adios
-#undef done
-
-static void
-mhladios(char *what, char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- advertise(what, NULL, fmt, ap);
- va_end(ap);
- mhldone(1);
-}
-
-
-static void
-mhldone(int status)
-{
- exitstat = status;
- if (mhl_action)
- longjmp(mhlenv, DONE);
- else
- done(exitstat);
-}