static int exitstat = 0;
static int mhldebug = 0;
-#define PITTY (-1)
-#define NOTTY 0
-static int ontty = NOTTY;
-
static unsigned int column;
static int lm;
static void putstr(char *);
static void putch(char);
static void intrser(int);
-static void pipeser(int);
-static void quitser(int);
static void mhladios(char *, char *, ...);
static void mhldone(int);
-static void m_popen(char *);
-
-void m_pclose(void);
int sc_width(void); /* from termsbr.c */
files[vecp++] = cp;
}
- if (isatty(fileno(stdout))) {
- if (mhl_action) {
- SIGNAL(SIGINT, SIG_IGN);
- SIGNAL2(SIGQUIT, quitser);
- }
- SIGNAL2(SIGPIPE, pipeser);
- m_popen(defaultpager);
- ontty = PITTY;
- } else {
- ontty = NOTTY;
- }
-
mhl_format(form ? form : mhlformat, width);
if (vecp == 0) {
adios("output", "error writing");
}
- if (ontty == PITTY)
- m_pclose();
-
return exitstat;
}
fname = "(stdin)";
fp = stdin;
}
- if (ontty != PITTY)
- SIGNAL(SIGINT, intrser);
+ SIGNAL(SIGINT, intrser);
mhlfile(fp, fname, ofilen, ofilec);
/* FALL THROUGH! */
default:
- if (ontty != PITTY)
- SIGNAL(SIGINT, SIG_IGN);
+ SIGNAL(SIGINT, SIG_IGN);
if (mhl_action == NULL && fp != stdin)
fclose(fp);
if (holder.c_text) {
}
-static void
-pipeser(int i)
-{
- done(NOTOK);
-}
-
-
-static void
-quitser(int i)
-{
- putchar('\n');
- fflush(stdout);
- done(NOTOK);
-}
-
-
#undef adios
#undef done
else
done(exitstat);
}
-
-
-static int m_pid = NOTOK;
-static int sd = NOTOK;
-
-static void
-m_popen(char *name)
-{
- int pd[2];
-
- if (mhl_action && (sd = dup(fileno(stdout))) == NOTOK)
- adios("standard output", "unable to dup()");
-
- if (pipe(pd) == NOTOK)
- adios("pipe", "unable to");
-
- switch (m_pid = fork()) {
- case NOTOK:
- adios("fork", "unable to");
-
- case OK:
- SIGNAL(SIGINT, SIG_DFL);
- SIGNAL(SIGQUIT, SIG_DFL);
-
- close(pd[1]);
- if (pd[0] != fileno(stdin)) {
- dup2(pd[0], fileno(stdin));
- close(pd[0]);
- }
- execlp(name, mhbasename(name), NULL);
- fprintf(stderr, "unable to exec ");
- perror(name);
- _exit(-1);
-
- default:
- close(pd[0]);
- if (pd[1] != fileno(stdout)) {
- dup2(pd[1], fileno(stdout));
- close(pd[1]);
- }
- }
-}
-
-
-void
-m_pclose(void)
-{
- if (m_pid == NOTOK)
- return;
-
- if (sd != NOTOK) {
- fflush(stdout);
- if (dup2(sd, fileno(stdout)) == NOTOK)
- adios("standard output", "unable to dup2()");
-
- clearerr(stdout);
- close(sd);
- sd = NOTOK;
- }
- else
- fclose(stdout);
-
- pidwait(m_pid, OK);
- m_pid = NOTOK;
-}