Mercurial Hosting > luan
diff src/luan/tools/cmd_line.luan @ 133:98aba462c422
add tools/cmd_line.luan
git-svn-id: https://luan-java.googlecode.com/svn/trunk@134 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Wed, 11 Jun 2014 05:20:19 +0000 |
parents | |
children | 7e160d2f6d9c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/tools/cmd_line.luan Wed Jun 11 05:20:19 2014 +0000 @@ -0,0 +1,70 @@ + +local standalone_usage = [=[ +usage: java luan.CmdLine [options] [script [args]] +Available options are: + -e stat execute string 'stat' + -i enter interactive mode after executing 'script' + -v show version information + -- stop handling options + - stop handling options and execute stdin +]=] + +local function standalone_error(msg) + Io.stderr.write( msg, "\n", standalone_usage ) +end + + +local args = {...} +local interactive = false +local showVersion = false +local i = 1 +if #args == 0 then + interactive = true + showVersion = true +else + while i <= #args do + local arg = args[i] + if arg.sub(1,1) ~= "-" or arg == "--" then + break + end + if arg == "-i" then + interactive = true + elseif arg == "-v" then + showVersion = true + elseif arg == "-e" then + i = i + 1 + if i == #args then + standalone_error "'-e' needs argument" + return + end + local cmd = args[i] + local fn = load(cmd,"(command line)",true,true) + local result = Table.pack( fn() ) + if result.n > 0 then + print( Table.unpack(result,1,result.n) ) + end + elseif arg == "-" then + local src = Io.stdin.read_text() + local fn = load(src,"stdin") + fn() + return + else + standalone_error( "unrecognized option '"..arg.."'" ) + return + end + i = i + 1 + end +end +if showVersion then print(_VERSION) end +if i <= #args then + local file = args[i] + _G.arg = {} + for j,v in ipairs(args) do + _G.arg[j-i] = v + end + local fn = load_file(file) + fn( Table.unpack(_G.arg) ) +end +if interactive then + Debug.debug("> ") +end