#include <h/fmt_scan.h>
#include <h/tws.h>
#include <h/utils.h>
-#include <setjmp.h>
#include <signal.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <locale.h>
/*
** MAJOR BUG:
static int num_ignores = 0;
static char *ignores[MAXARGS];
-static jmp_buf env;
+volatile sig_atomic_t eflag = 0;
/*
** Redefine a couple of functions.
FILE *fp = NULL;
struct mcomp *c1;
- switch (setjmp(env)) {
- case OK:
- if (fname) {
- fp = fopen(fname, "r");
- if (fp == NULL) {
- advise(fname, "unable to open");
- exitstat++;
- return;
- }
- } else {
- fname = "(stdin)";
- fp = stdin;
- }
- SIGNAL(SIGINT, intrser);
- mhlfile(fp, fname, ofilen, ofilec);
- /* FALL THROUGH! */
- default:
- SIGNAL(SIGINT, SIG_IGN);
- if (fp != stdin)
- fclose(fp);
- if (holder.c_text) {
- free(holder.c_text);
- holder.c_text = NULL;
+ if (fname) {
+ fp = fopen(fname, "r");
+ if (fp == NULL) {
+ advise(fname, "unable to open");
+ exitstat++;
+ return;
}
- free_queue(&msghd, &msgtl);
- for (c1 = fmthd; c1; c1 = c1->c_next)
- c1->c_flags &= ~HDROUTPUT;
- break;
+ } else {
+ fname = "(stdin)";
+ fp = stdin;
+ }
+ SIGNAL(SIGINT, intrser);
+ mhlfile(fp, fname, ofilen, ofilec);
+
+ 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;
}
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);
+ eflag = 1;
}