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