diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-01-01 18:28:01 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-01-01 18:28:01 +0200 |
commit | fa027672da6c33356ff83ffee1d8bca4d52b9656 (patch) | |
tree | 6616ef2b441af708b57f007f359e5ba5d9894862 | |
parent | 903b24f04197bec266882d2ae5cd752dd88ae74d (diff) | |
download | micropython-fa027672da6c33356ff83ffee1d8bca4d52b9656.tar.gz micropython-fa027672da6c33356ff83ffee1d8bca4d52b9656.zip |
Make GNU Readline usage optional (USE_READLINE define). Still enabled.
Readline is GPL, so linking with it casts the binary GPL.
-rw-r--r-- | unix/Makefile | 2 | ||||
-rw-r--r-- | unix/main.c | 32 |
2 files changed, 30 insertions, 4 deletions
diff --git a/unix/Makefile b/unix/Makefile index 0ddf11539a..17a680a13b 100644 --- a/unix/Makefile +++ b/unix/Makefile @@ -2,7 +2,7 @@ PYSRC=../py BUILD=build CC = gcc -CFLAGS = -I. -I$(PYSRC) -Wall -Werror -ansi -std=gnu99 -Os #-DNDEBUG +CFLAGS = -I. -I$(PYSRC) -Wall -Werror -ansi -std=gnu99 -Os -DUSE_READLINE #-DNDEBUG LDFLAGS = -lm SRC_C = \ diff --git a/unix/main.c b/unix/main.c index 177078fa32..79fe1b5153 100644 --- a/unix/main.c +++ b/unix/main.c @@ -15,8 +15,10 @@ #include "runtime.h" #include "repl.h" +#ifdef USE_READLINE #include <readline/readline.h> #include <readline/history.h> +#endif static char *str_join(const char *s1, int sep_char, const char *s2) { int l1 = strlen(s1); @@ -32,17 +34,41 @@ static char *str_join(const char *s1, int sep_char, const char *s2) { return s; } +static char *prompt(char *p) { +#ifdef USE_READLINE + char *line = readline(p); + if (line) { + add_history(line); + } +#else + static char buf[256]; + fputs(p, stdout); + char *s = fgets(buf, sizeof(buf), stdin); + if (!s) { + return NULL; + } + int l = strlen(buf); + if (buf[l - 1] == '\n') { + buf[l - 1] = 0; + } else { + l++; + } + char *line = m_new(char, l); + memcpy(line, buf, l); +#endif + return line; +} + static void do_repl(void) { for (;;) { - char *line = readline(">>> "); + char *line = prompt(">>> "); if (line == NULL) { // EOF return; } - add_history(line); if (mp_repl_is_compound_stmt(line)) { for (;;) { - char *line2 = readline("... "); + char *line2 = prompt("... "); if (line2 == NULL || strlen(line2) == 0) { break; } |