Add readline support to s51
authorKeith Packard <keithp@keithp.com>
Fri, 27 Mar 2009 05:41:47 +0000 (22:41 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 27 Mar 2009 05:41:47 +0000 (22:41 -0700)
s51/Makefile.am
s51/s51-main.c

index 6213750cf9846adad75d59fb657c069cc0c02c15..4778d66b528df038ecf88d20a3a7439cdbe2e8ba 100644 (file)
@@ -1,7 +1,7 @@
 bin_PROGRAMS=s51
 
 AM_CFLAGS=-I$(top_srcdir)/lib $(LIBUSB_CFLAGS)
 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
 
 
 man_MANS = s51.1
 
index 96429988d5f4c16662d71667d3a669c98ecf7928..46b97b0c8ca7039c25867f9caa297cc0d72f121f 100644 (file)
@@ -189,19 +189,34 @@ s51_putc(int c)
        putc(c, s51_output);
 }
 
        putc(c, s51_output);
 }
 
+#include <readline/readline.h>
+#include <readline/history.h>
+
 int
 s51_read_line(char *line, int len)
 {
        int ret;
 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;
 }
 
        return ret;
 }