--- termsbr.c.orig 2008-04-11 09:12:55.000000000 -0500 +++ termsbr.c 2010-12-19 08:11:30.000000000 -0600 @@ -234,3 +234,23 @@ return HC; } + +/* + * read one character + */ +int +noncanonical_getchar(void) +{ + struct termios o, n; + char c; + + ioctl(0,TCGETS,&o); + n = o; + n.c_lflag &= ~ECHO; + n.c_lflag &= ~ICANON; + ioctl(0,TCSETS,&n); + read(0,&c,1); + ioctl(0,TCSETS,&o); + return (int)c; +} + --- mhshowsbr.c.orig 2008-04-11 09:12:55.000000000 -0500 +++ mhshowsbr.c 2010-12-19 08:51:18.000000000 -0600 @@ -55,6 +55,7 @@ /* termsbr.c */ int SOprintf (char *, ...); +int noncanonical_getchar (void); /* mhparse.c */ int pidcheck (int); @@ -555,6 +556,7 @@ else list_switch (ct, -1, 1, 0, 0); +#ifndef NONCANONICAL_PROMPT if (xpause && SOprintf ("Press to show content...")) printf ("Press to show content..."); @@ -574,7 +576,31 @@ return (alternate ? DONE : NOTOK); } if (prompt[0] == 'q') done(OK); + } +#else + if (xpause && SOprintf ("Press any key to show content...")) + printf ("Press any key to show content..."); + + if (xpause) { + int intr, i; + SIGNAL_HANDLER istat; + + istat = SIGNAL (SIGINT, intrser); + if ((intr = sigsetjmp (intrenv, 1)) == OK) { + fflush (stdout); + i = noncanonical_getchar(); + } + SIGNAL (SIGINT, istat); + if (intr != OK ) { + (*ct->c_ceclosefnx) (ct); + return (alternate ? DONE : NOTOK); + } + if (i == 113) { /* 'q' for quit */ + printf("\n"); + done(OK); + } } +#endif } snprintf (exec, sizeof(exec), "exec %s", buffer);