From d593cdb98bd2de53ba19b2894e98c73f90f9b263 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sun, 8 Jul 2018 14:55:55 -0700 Subject: [PATCH] SCP: Add prompt prior to fatal exit allowing error messages reading As discussed in #594 --- scp.c | 10 +++++++++- sim_timer.c | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scp.c b/scp.c index 274749bd..094a544d 100644 --- a/scp.c +++ b/scp.c @@ -2416,17 +2416,23 @@ sim_is_running = FALSE; sim_log = NULL; if (sim_emax <= 0) sim_emax = 1; -sim_timer_init (); +if (sim_timer_init ()) { + fprintf (stderr, "Fatal timer initialization error\n"); + read_line_p ("Hit Return to exit: ", cbuf, sizeof (cbuf) - 1, stdin); + return 0; + } sim_register_internal_device (&sim_expect_dev); sim_register_internal_device (&sim_step_dev); if ((stat = sim_ttinit ()) != SCPE_OK) { fprintf (stderr, "Fatal terminal initialization error\n%s\n", sim_error_text (stat)); + read_line_p ("Hit Return to exit: ", cbuf, sizeof (cbuf) - 1, stdin); return 0; } if ((sim_eval = (t_value *) calloc (sim_emax, sizeof (t_value))) == NULL) { fprintf (stderr, "Unable to allocate examine buffer\n"); + read_line_p ("Hit Return to exit: ", cbuf, sizeof (cbuf) - 1, stdin); return 0; }; if (sim_dflt_dev == NULL) /* if no default */ @@ -2434,11 +2440,13 @@ if (sim_dflt_dev == NULL) /* if no default */ if ((stat = reset_all_p (0)) != SCPE_OK) { fprintf (stderr, "Fatal simulator initialization error\n%s\n", sim_error_text (stat)); + read_line_p ("Hit Return to exit: ", cbuf, sizeof (cbuf) - 1, stdin); return 0; } if ((stat = sim_brk_init ()) != SCPE_OK) { fprintf (stderr, "Fatal breakpoint table initialization error\n%s\n", sim_error_text (stat)); + read_line_p ("Hit Return to exit: ", cbuf, sizeof (cbuf) - 1, stdin); return 0; } signal (SIGINT, int_handler); diff --git a/sim_timer.c b/sim_timer.c index b8764395..5209338b 100644 --- a/sim_timer.c +++ b/sim_timer.c @@ -257,7 +257,10 @@ else if (stat == ETIMEDOUT) timedout = TRUE; else { - fprintf (stderr, "sim_idle_ms_sleep(%u): pthread_cond_timedwait() return %d - %s\n", msec, stat, strerror (stat)); + char ans[32]; + + fprintf (stderr, "sim_idle_ms_sleep(%u): pthread_cond_timedwait() return %d - %s\r\n", msec, stat, strerror (stat)); + read_line_p ("Hit Return to exit: ", ans, sizeof (ans) - 1, stdin); abort (); } sim_idle_wait = FALSE;