view core/src/luan/cmd_line.luan @ 201:27abb3746917

minir git-svn-id: https://luan-java.googlecode.com/svn/trunk@202 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 03 Jul 2014 22:42:44 +0000
parents cf939124461a
children 705d14f4d8ee
line wrap: on
line source

import "String"
import "Table"


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 stat = load(cmd,"(command line)",true,true)
			local result = Table.pack( stat() )
			if result.n > 0 then
				print( Table.unpack(result,1,result.n) )
			end
		elseif arg == "-" then
			local src = Io.stdin.read_text()
			local stdin = load(src,"stdin")
			stdin()
			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
	try
		local main_file = load_file(file)
		main_file( Table.unpack(_G.arg) )
	catch e do
		print(e)
	end
end
if interactive then
	Debug.debug("> ")
end