From b8dc8f01b50882259f739e04c93ac6d9da20eb16 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Tue, 16 Sep 2014 09:18:57 -0700 Subject: [PATCH] SCP: Fix to have sim_printf expand newlines to CRLF when writing to stdout with the simulator running. Allow sim_debug to be called with a NULL device pointer and return producing no output. --- scp.c | 17 +++++++++++++---- scp.h | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/scp.c b/scp.c index f2cb0010..95e4cbac 100644 --- a/scp.c +++ b/scp.c @@ -1696,7 +1696,6 @@ else if (*argv[0]) { /* sim name arg? */ } stat = SCPE_BARE_STATUS(stat); /* remove possible flag */ - while (stat != SCPE_EXIT) { /* in case exit */ if ((cptr = sim_brk_getact (cbuf, sizeof(cbuf)))) /* pending action? */ printf ("%s%s\n", sim_prompt, cptr); /* echo */ @@ -7906,7 +7905,7 @@ for (i = fields-1; i >= 0; i--) { /* print xlation, transition void sim_debug_bits(uint32 dbits, DEVICE* dptr, BITFIELD* bitdefs, uint32 before, uint32 after, int terminate) { -if (sim_deb && (dptr->dctrl & dbits)) { +if (sim_deb && dptr && (dptr->dctrl & dbits)) { if (!debug_unterm) fprintf(sim_deb, "%s", sim_debug_prefix(dbits, dptr)); /* print prefix if required */ fprint_fields (sim_deb, (t_value)before, (t_value)after, bitdefs); /* print xlation, transition */ @@ -7965,7 +7964,17 @@ while (1) { /* format passed string, arg break; } -printf("%s", buf); +if (sim_is_running) { + char *c, *remnant = buf; + + while ((c = strchr(remnant, '\n'))) { + printf("%.*s\r\n", (int)(c-remnant), remnant); + remnant = c + 1; + } + printf("%s", remnant); + } +else + printf("%s", buf); if (sim_log && (sim_log != stdout)) fprintf (sim_log, "%s", buf); if (sim_deb && (sim_deb != stdout)) @@ -7986,7 +7995,7 @@ if (buf != stackbuf) void _sim_debug (uint32 dbits, DEVICE* dptr, const char* fmt, ...) { -if (sim_deb && (dptr->dctrl & dbits)) { +if (sim_deb && dptr && (dptr->dctrl & dbits)) { char stackbuf[STACKBUFSIZE]; int32 bufsize = sizeof(stackbuf); diff --git a/scp.h b/scp.h index 09cd8d8f..4122e957 100644 --- a/scp.h +++ b/scp.h @@ -156,7 +156,7 @@ void sim_debug_bits (uint32 dbits, DEVICE* dptr, BITFIELD* bitdefs, void sim_debug (uint32 dbits, DEVICE* dptr, const char* fmt, ...); #else void _sim_debug (uint32 dbits, DEVICE* dptr, const char* fmt, ...); -#define sim_debug(dbits, dptr, ...) if (sim_deb && ((dptr)->dctrl & dbits)) _sim_debug (dbits, dptr, __VA_ARGS__); else (void)0 +#define sim_debug(dbits, dptr, ...) if (sim_deb && dptr && ((dptr)->dctrl & dbits)) _sim_debug (dbits, dptr, __VA_ARGS__); else (void)0 #endif void fprint_stopped_gen (FILE *st, t_stat v, REG *pc, DEVICE *dptr); #define SCP_HELP_FLAT (1u << 31) /* Force flat help when prompting is not possible */