diff src/luan/lib/init.luan @ 120:8d7730a5e3b4

move standalone logic from Java to Luan git-svn-id: https://luan-java.googlecode.com/svn/trunk@121 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Mon, 02 Jun 2014 04:43:45 +0000
parents f1bf2890d80f
children cba7ed3f06cc
line wrap: on
line diff
--- a/src/luan/lib/init.luan	Sun Jun 01 09:38:40 2014 +0000
+++ b/src/luan/lib/init.luan	Mon Jun 02 04:43:45 2014 +0000
@@ -35,3 +35,74 @@
 	end
 end
 
+
+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
+
+function Basic.standalone(...)
+	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)
+				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",false)
+				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
+end