Mercurial > octave-nkf
diff src/pager.cc @ 2197:680ce730f0c6
[project @ 1996-05-15 00:03:19 by jwe]
author | jwe |
---|---|
date | Wed, 15 May 1996 00:04:37 +0000 |
parents | 0207f7f74be6 |
children | 6abec42e52f6 |
line wrap: on
line diff
--- a/src/pager.cc Tue May 14 08:59:24 1996 +0000 +++ b/src/pager.cc Wed May 15 00:04:37 1996 +0000 @@ -76,6 +76,21 @@ static int really_flush_to_pager = 0; static void +clear_external_pager (void) +{ + octave_pager_pid = -1; + + delete external_pager; + external_pager = 0; + + if (saved_sigint_handler) + { + octave_set_signal_handler (SIGINT, saved_sigint_handler); + saved_sigint_handler = 0; + } +} + +static void do_sync (const char *msg, bool bypass_pager) { if (! error_state) @@ -104,24 +119,20 @@ if (external_pager) { - *external_pager << msg; - - if (external_pager->fail ()) + if (octave_pager_pid > 0 && external_pager->good ()) { - octave_pager_pid = -1; - - delete external_pager; - external_pager = 0; + *external_pager << msg; - if (saved_sigint_handler) - { - octave_set_signal_handler (SIGINT, - saved_sigint_handler); - saved_sigint_handler = 0; - } + // These checks are needed if a signal handler + // invoked since the last set of checks attempts + // to flush output and then returns + + if (octave_pager_pid > 0 + && external_pager + && external_pager->good ()) + external_pager->flush (); } - else - external_pager->flush (); + clear_external_pager (); } else cout << msg; @@ -256,18 +267,7 @@ octave_stdout.flush (); if (external_pager) - { - octave_pager_pid = -1; - - delete external_pager; - external_pager = 0; - - if (saved_sigint_handler) - { - octave_set_signal_handler (SIGINT, saved_sigint_handler); - saved_sigint_handler = 0; - } - } + clear_external_pager (); run_unwind_frame ("flush_octave_stdout"); }