From cdd261f332c112b86eddd7438b9a06e1231e3e4c Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 11 Dec 1997 15:00:21 -0200 Subject: new option "-q" (quiet), and multi-line commands (ending with '\') --- lua.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/lua.c b/lua.c index 8221e5bb..a155e90c 100644 --- a/lua.c +++ b/lua.c @@ -1,5 +1,5 @@ /* -** $Id: lua.c,v 1.7 1997/12/03 19:57:54 roberto Exp roberto $ +** $Id: lua.c,v 1.8 1997/12/11 14:48:46 roberto Exp roberto $ ** Lua stand-alone interpreter ** See Copyright Notice in lua.h */ @@ -40,16 +40,36 @@ static void assign (char *arg) } } +#define BUF_SIZE 512 -static void manual_input (void) +static void manual_input (int prompt) { if (isatty(0)) { - char buffer[250]; - while (1) { + int cont = 1; + while (cont) { + char buffer[BUF_SIZE]; + int i = 0; lua_beginblock(); - printf("%s", lua_getstring(lua_getglobal("_PROMPT"))); - if (fgets(buffer, sizeof(buffer), stdin) == 0) - break; + if (prompt) + printf("%s", lua_getstring(lua_getglobal("_PROMPT"))); + for(;;) { + int c = getchar(); + if (c == EOF) { + cont = 0; + break; + } + else if (c == '\n') { + if (i>0 && buffer[i-1] == '\\') + buffer[i-1] = '\n'; + else break; + } + else if (i >= BUF_SIZE-1) { + fprintf(stderr, "lua: argument line too long\n"); + break; + } + else buffer[i++] = c; + } + buffer[i] = 0; lua_dostring(buffer); lua_endblock(); } @@ -70,11 +90,13 @@ int main (int argc, char *argv[]) lua_pushstring("> "); lua_setglobal("_PROMPT"); if (argc < 2) { printf("%s %s\n", LUA_VERSION, LUA_COPYRIGHT); - manual_input(); + manual_input(1); } else for (i=1; i