X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhl.c;h=386cf95cd9fed4b36d0132e1fbfe981b678bdcc2;hp=8c2e4af0a2d466b169d99d2a1cbaa86a5ad8fb5a;hb=2abb9a7cfb0930e27062088734d306e7d78e4cc2;hpb=f9ed40f2742263b3a1023bedee4139b4b18f0a86 diff --git a/uip/mhl.c b/uip/mhl.c index 8c2e4af..386cf95 100644 --- a/uip/mhl.c +++ b/uip/mhl.c @@ -12,8 +12,10 @@ #include #include #include -#include #include +#include +#include +#include /* ** MAJOR BUG: @@ -174,18 +176,12 @@ static char *parptr; static int num_ignores = 0; static char *ignores[MAXARGS]; -static jmp_buf env; -static jmp_buf mhlenv; - -static FILE *(*mhl_action) () = (FILE *(*) ()) 0; - +volatile sig_atomic_t eflag = 0; /* ** Redefine a couple of functions. ** These are undefined later in the code. */ -#define adios mhladios -#define done mhldone /* ** prototypes @@ -208,8 +204,6 @@ static char *oneline(char *, long); 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 */ @@ -239,17 +233,17 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - done(1); + exit(1); case UNKWNSW: adios(NULL, "-%s unknown\n", cp); case HELPSW: snprintf(buf, sizeof(buf), "%s [switches] [files ...]", invo_name); print_help(buf, switches, 1); - done(1); + exit(0); case VERSIONSW: print_version(invo_name); - done(1); + exit(0); case FORMSW: if (!(form = *argp++) || *form == '-') @@ -573,25 +567,22 @@ process(char *fname, int ofilen, int ofilec) FILE *fp = NULL; struct mcomp *c1; - if (setjmp(env) == 0) { - if (fname) { - fp = mhl_action ? (*mhl_action) (fname) : - fopen(fname, "r"); - if (fp == NULL) { - advise(fname, "unable to open"); - exitstat++; - return; - } - } else { - fname = "(stdin)"; - fp = stdin; + if (fname) { + fp = fopen(fname, "r"); + if (fp == NULL) { + advise(fname, "unable to open"); + exitstat++; + return; } - SIGNAL(SIGINT, intrser); - mhlfile(fp, fname, ofilen, ofilec); + } else { + fname = "(stdin)"; + fp = stdin; } + SIGNAL(SIGINT, intrser); + mhlfile(fp, fname, ofilen, ofilec); SIGNAL(SIGINT, SIG_IGN); - if (mhl_action == NULL && fp != stdin) + if (fp != stdin) fclose(fp); if (holder.c_text) { free(holder.c_text); @@ -624,7 +615,7 @@ mhlfile(FILE *fp, char *mname, int ofilen, int ofilec) printf(">>> %s\n\n", mname); } - for (state = FLD;;) { + for (state = FLD;!eflag;) { switch (state = m_getfld(state, name, buf, sizeof(buf), fp)) { case FLD: case FLDPLUS: @@ -1113,33 +1104,5 @@ putch(char ch) static void intrser(int i) { - discard(stdout); - 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); + eflag = 1; }