From 58ccb38d7b87c101a375c89c66ae51957cb18fa9 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Fri, 6 Jul 2018 17:57:05 -0700 Subject: [PATCH] SCP: Add ability to ECHOF output to TMXR lines --- doc/simh_doc.doc | Bin 323072 -> 323584 bytes scp.c | 27 ++++++++++++++++++++++----- sim_tmxr.c | 13 ++++++++++--- sim_tmxr.h | 1 + 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index 80d7290e81f5b3b1ddda7f50552e050451867e87..bdc1dd1a2673a74dcb755f6edd6bb2db73fa8c9b 100644 GIT binary patch delta 39837 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 delta 40174 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 BB>MmW diff --git a/scp.c b/scp.c index 12f209d4..274749bd 100644 --- a/scp.c +++ b/scp.c @@ -1761,7 +1761,10 @@ static const char simh_help[] = " followed by a newline:\n\n" /***************** 80 character line width template *************************/ "++ECHOF {-n} \"\"| output string to console\n\n" - " If there is no argument, ECHOF prints a blank line on the console.\n" + " The ECHOF command can also print output on a specified multiplexer line\n" + " (and log) followed by a newline:\n\n" + "++ECHOF {-n} dev:line \"\"| output string to specified line\n\n" + " If there is no argument, ECHOF prints a blank line.\n" " The string argument may be delimited by quote characters. Quotes may\n" " be either single or double but the opening and closing quote characters\n" " must match. If the string is enclosed in quotes, the string may\n" @@ -3238,12 +3241,21 @@ return SCPE_OK; t_stat echof_cmd (int32 flag, CONST char *cptr) { char gbuf[CBUFSIZE]; -uint8 dbuf[CBUFSIZE]; +CONST char *tptr; +TMLN *lp = NULL; +uint8 dbuf[4*CBUFSIZE]; uint32 dsize = 0; +t_stat r; GET_SWITCHES (cptr); -if (!*cptr) - return SCPE_2FARG; +tptr = get_glyph (cptr, gbuf, ','); +if (sim_isalpha(gbuf[0]) && (strchr (gbuf, ':'))) { + r = tmxr_locate_line (gbuf, &lp); + if (r != SCPE_OK) + return r; + cptr = tptr; + } +GET_SWITCHES (cptr); if ((*cptr == '"') || (*cptr == '\'')) { cptr = get_glyph_quoted (cptr, gbuf, 0); if (*cptr != '\0') @@ -3253,7 +3265,12 @@ if ((*cptr == '"') || (*cptr == '\'')) { dbuf[dsize] = 0; cptr = (char *)dbuf; } -sim_printf ("%s%s", cptr, (sim_switches & SWMASK('N')) ? "" : "\n"); +if (lp) { + tmxr_linemsgf (lp, "%s%s", cptr, (sim_switches & SWMASK('N')) ? "" : "\r\n"); + tmxr_send_buffered_data (lp); + } +else + sim_printf ("%s%s", cptr, (sim_switches & SWMASK('N')) ? "" : "\n"); return SCPE_OK; } diff --git a/sim_tmxr.c b/sim_tmxr.c index 8c2e6dd6..538f2c48 100644 --- a/sim_tmxr.c +++ b/sim_tmxr.c @@ -3755,7 +3755,7 @@ pthread_mutex_unlock (&sim_tmxr_poll_lock); #endif } -static t_stat _tmxr_locate_line_send_expect (const char *cptr, SEND **snd, EXPECT **exp) +static t_stat _tmxr_locate_line_send_expect (const char *cptr, TMLN **lp, SEND **snd, EXPECT **exp) { char gbuf[CBUFSIZE]; DEVICE *dptr; @@ -3776,6 +3776,8 @@ for (i=0; ilines, &r); if (r != SCPE_OK) return r; + if (lp) + *lp = &tmxr_open_devices[i]->ldsc[line]; if (snd) *snd = &tmxr_open_devices[i]->ldsc[line].send; if (exp) @@ -3787,12 +3789,17 @@ return SCPE_ARG; t_stat tmxr_locate_line_send (const char *cptr, SEND **snd) { -return _tmxr_locate_line_send_expect (cptr, snd, NULL); +return _tmxr_locate_line_send_expect (cptr, NULL, snd, NULL); } t_stat tmxr_locate_line_expect (const char *cptr, EXPECT **exp) { -return _tmxr_locate_line_send_expect (cptr, NULL, exp); +return _tmxr_locate_line_send_expect (cptr, NULL, NULL, exp); +} + +t_stat tmxr_locate_line (const char *cptr, TMLN **lp) +{ +return _tmxr_locate_line_send_expect (cptr, lp, NULL, NULL); } static const char *_tmxr_send_expect_line_name (const SEND *snd, const EXPECT *exp) diff --git a/sim_tmxr.h b/sim_tmxr.h index 16953ee2..f80dd6e0 100644 --- a/sim_tmxr.h +++ b/sim_tmxr.h @@ -295,6 +295,7 @@ t_stat tmxr_clock_coschedule_tmr_abs (UNIT *uptr, int32 tmr, int32 ticks); t_stat tmxr_change_async (void); t_stat tmxr_locate_line_send (const char *dev_line, SEND **snd); t_stat tmxr_locate_line_expect (const char *dev_line, EXPECT **exp); +t_stat tmxr_locate_line (const char *dev_line, TMLN **lp); const char *tmxr_send_line_name (const SEND *snd); const char *tmxr_expect_line_name (const EXPECT *exp); t_stat tmxr_startup (void);