static void quitser (int);
static void mhladios (char *, char *, ...);
static void mhldone (int);
-static void m_popen (char *);
static void filterbody (struct mcomp *, char *, int, int, FILE *,
m_getfld_state_t);
static void compile_formatfield(struct mcomp *);
char buf[BUFSIZ], *files[MAXARGS];
char **argp, **arguments;
+ /* Need this if called from main() of show(1). */
invo_name = r1bindex (argv[0], '/');
- /* read user profile/context */
- context_read();
-
arguments = getarguments (invo_name, argc, argv, 1);
argp = arguments;
folder = getenv ("mhfolder");
if (isatty (fileno (stdout))) {
- if (!nomore && !sc_hardcopy() && moreproc && *moreproc != '\0') {
+ if (!nomore && moreproc && *moreproc != '\0') {
if (mhl_action) {
SIGNAL (SIGINT, SIG_IGN);
SIGNAL2 (SIGQUIT, quitser);
}
SIGNAL2 (SIGPIPE, pipeser);
- m_popen (moreproc);
+ m_popen (moreproc, mhl_action != NULL);
ontty = PITTY;
} else {
SIGNAL (SIGINT, SIG_IGN);
}
if (clearflg > 0 && ontty == NOTTY)
- clear_screen ();
+ nmh_clear_screen ();
if (ontty == PITTY)
m_pclose ();
struct mcomp *c1;
struct stat st;
struct arglist *ap;
+ /* volatile to prevent "might be clobbered" warning from gcc: */
+ char *volatile fname2 = fname ? fname : "(stdin)";
switch (setjmp (env)) {
case OK:
return;
}
} else {
- fname = "(stdin)";
fp = stdin;
}
if (fstat(fileno(fp), &st) == 0) {
} else {
filesize = 0;
}
- cp = folder ? concat (folder, ":", fname, NULL) : getcpy (fname);
+ cp = folder ? concat (folder, ":", fname2, NULL) : getcpy (fname2);
if (ontty != PITTY)
SIGNAL (SIGINT, intrser);
mhlfile (fp, cp, ofilen, ofilec); /* FALL THROUGH! */
if (ofilec > 1) {
if (ofilen > 1) {
if ((global.c_flags & CLEARSCR))
- clear_screen ();
+ nmh_clear_screen ();
else
printf ("\n\n\n");
}
}
if (strchr(buf, '\n')) {
if ((global.c_flags & CLEARSCR))
- clear_screen ();
+ nmh_clear_screen ();
}
else
printf ("\n");
if (ofilen > 1) {
printf ("\n\n\n");
if (clearflg > 0)
- clear_screen ();
+ nmh_clear_screen ();
}
printf (">>> %s\n\n", mname);
}
if ((p = (struct pqpair *) calloc ((size_t) 1, sizeof(*p))) == NULL)
adios (NULL, "unable to allocate pqpair memory");
- if ((mp = getm (cp, NULL, 0, AD_NAME, error)) == NULL) {
+ if ((mp = getm (cp, NULL, 0, error, sizeof(error))) == NULL) {
p->pq_text = getcpy (cp);
p->pq_error = getcpy (error);
} else {
read (fileno (stdout), buf, sizeof(buf));
if (strchr(buf, '\n')) {
if (global.c_flags & CLEARSCR)
- clear_screen ();
+ nmh_clear_screen ();
row = 0;
} else {
putchar ('\n');
}
-static int m_pid = NOTOK;
-static int sd = NOTOK;
-
-static void
-m_popen (char *name)
-{
- int pd[2];
- char *file;
- char **arglist;
-
- 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]);
- }
- arglist = argsplit(name, &file, NULL);
- execvp (file, arglist);
- 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;
-}
-
-
/*
* Compile a format string used by the formatfield option and save it
* for later.
* buffers that we have duplicated from the parent.
*/
_exit(0);
- break;
case -1:
adios(NULL, "Unable to fork for filter writer process");
break;