#include <h/fmt_scan.h>
#include <h/tws.h>
#include <h/utils.h>
-#include <setjmp.h>
#include <signal.h>
/*
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
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 */
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 == '-')
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);
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:
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;
}