From 91607bebdd167ac632aca4b66e22cb0cabdf0d20 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 26 Mar 2009 22:41:47 -0700 Subject: [PATCH 1/1] Add readline support to s51 --- s51/Makefile.am | 2 +- s51/s51-main.c | 33 ++++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/s51/Makefile.am b/s51/Makefile.am index 6213750c..4778d66b 100644 --- a/s51/Makefile.am +++ b/s51/Makefile.am @@ -1,7 +1,7 @@ bin_PROGRAMS=s51 AM_CFLAGS=-I$(top_srcdir)/lib $(LIBUSB_CFLAGS) -S51_LIBS=../lib/libcc.a +S51_LIBS=../lib/libcc.a -lreadline man_MANS = s51.1 diff --git a/s51/s51-main.c b/s51/s51-main.c index 96429988..46b97b0c 100644 --- a/s51/s51-main.c +++ b/s51/s51-main.c @@ -189,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_monitor) - 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; } -- 2.30.2