X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=s51%2Fs51-main.c;h=4dbd4c6036ebd72e0182aba47ca6fd81e466e191;hb=17d2432a8b9c15963cd3b821f025ad33972ef477;hp=28a774d225efb26bee11db067a719faa5d8efe93;hpb=d2d9cfd74fd66836c913c02276e09136d83b35dc;p=fw%2Faltos diff --git a/s51/s51-main.c b/s51/s51-main.c index 28a774d2..4dbd4c60 100644 --- a/s51/s51-main.c +++ b/s51/s51-main.c @@ -31,6 +31,7 @@ static double freq = 11059200; char *s51_prompt = "> "; struct ccdbg *s51_dbg; int s51_interrupted = 0; +int s51_monitor = 0; static FILE *s51_input; static FILE *s51_output; @@ -54,7 +55,7 @@ main(int argc, char **argv) char *endptr; struct sigvec vec, ovec; - while ((opt = getopt(argc, argv, "PVvHht:X:c:r:Z:s:S:p:")) != -1) { + while ((opt = getopt(argc, argv, "PVvHhmt:X:c:r:Z:s:S:p:")) != -1) { switch (opt) { case 't': cpu = optarg; @@ -100,6 +101,9 @@ main(int argc, char **argv) case 'h': usage (); break; + case 'm': + s51_monitor = 1; + break; } } if (s51_port) { @@ -133,7 +137,7 @@ main(int argc, char **argv) for (;;) { struct sockaddr_in client_addr; socklen_t client_len = sizeof (struct sockaddr_in); - + s = accept(l, (struct sockaddr *) &client_addr, &client_len); if (s < 0) { @@ -146,7 +150,7 @@ main(int argc, char **argv) perror("fdopen"); exit(1); } - vec.sv_handler = s51_sigint; + vec.sv_handler = SIG_IGN; vec.sv_mask = 0; vec.sv_flags = 0; sigvec(SIGINT, &vec, &ovec); @@ -174,7 +178,7 @@ s51_printf(char *format, ...) va_start(ap, format); vfprintf(s51_output, format, ap); - if (s51_port) + if (s51_monitor) vfprintf(stdout, format, ap); va_end(ap); } @@ -185,19 +189,34 @@ s51_putc(int c) putc(c, s51_output); } +#include +#include + int s51_read_line(char *line, int len) { int ret; - if (s51_prompt) - s51_printf("%s", s51_prompt); - else - s51_putc('\0'); - fflush(s51_output); - ret = fgets(line, len, s51_input) != NULL; - if (s51_port) - printf("> %s", line); - fflush(stdout); + if (s51_output == stdout && s51_input == stdin && s51_prompt) { + char *r; + + r = readline(s51_prompt); + if (r == NULL) + return 0; + strncpy (line, r, len); + line[len-1] = '\0'; + add_history(r); + return 1; + } else { + if (s51_prompt) + s51_printf("%s", s51_prompt); + else + s51_putc('\0'); + fflush(s51_output); + ret = fgets(line, len, s51_input) != NULL; + if (s51_monitor) + printf("> %s", line); + fflush(stdout); + } return ret; } @@ -214,8 +233,7 @@ s51_check_input(void) if (r > 0) { char line[256]; (void) s51_read_line(line, sizeof (line)); - return 1; + return 1; } return 0; } -