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 /unix/main.c | |
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.
Diffstat (limited to 'unix/main.c')
-rw-r--r-- | unix/main.c | 32 |
1 files changed, 29 insertions, 3 deletions
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; } |