def main(args):
	required_opts = {
		'directory':'the directory to create the plugin',
		'id':'the module id in dotted notation: such as com.yourcompany.foo'
	}
	optional_opts = {
		'sdk':'the platform sdk path',
		'titanium':'the Titanium Mobile sdk path'
	}
	config = sysargs_to_dict(args,required_opts,optional_opts)
	plugin_name = config['id']
	project_dir = os.path.join(os.path.abspath(os.path.expanduser(config['directory'])),plugin_name)

	if os.path.exists(project_dir):
		print "Error. Directory already exists: %s" % project_dir
		sys.exit(1)

	ti_sdk_dir = None
	if  'titanium' in config:
		ti_sdk_dir = os.path.expanduser(config['sdk'])

	if ti_sdk_dir is None or not os.path.exists(ti_sdk_dir):
		sdk_root = timobile.find_mobilesdk_from_mobiletools(this_dir)
		if not sdk_root:
			print "[ERROR] Cannot locate Titanium Mobile SDK"
			sys.exit(1)
		(version, ti_sdk_dir) = timobile.find_latest_mobilesdk(sdk_root)
		if not ti_sdk_dir:
			print "[ERROR] Cannot locate Titanium Mobile SDK"
			sys.exit(1)

	plugin = PluginProject(project_dir,config,ti_sdk_dir)
	a = list(args)
	a.pop(0) # program
	a.pop(0) # command
	try:
		c = eval("%s" % command)
	except NameError,e:
		help([command])
	if command == 'help':
		c(a)
	else:
		# convert args to a hash
		config = slurp_args(a)
		if config.has_key('titanium_mobile_dir'):
			titanium_mobile_dir = os.path.expanduser(config['titanium_mobile_dir'])
		else:
			timob_root = timobile.find_mobilesdk_from_mobiletools(this_dir)
			if not timob_root:
				print "[ERROR] Cannot locate Titanium Mobile directory"
				sys.exit(1)
			(version, titanium_mobile_dir) = timobile.find_latest_mobilesdk(timob_root)
		
		# some config can be checked before hand
		if not config.has_key('dir') or config['dir']==None:
			config['dir']=os.getcwd()
		else:	
			# expand the path
			config['dir']=os.path.expanduser(config['dir'])
		
		# invoke the command
		c(config)
	sys.exit(0)