Subversion Repositories HomeAutomation

Rev

Rev 1657 | Rev 1673 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
1608 runge 1
 
1647 runge 2
Console_Functions = {};
3
Console_CurrentFunction = null;
4
Console_DefaultPrompt = "\033[29;1m[atomic] \033[0m";
5
Console_LastClientId = null;
1609 runge 6
 
1647 runge 7
function Console_GetFunctionNames()
1608 runge 8
{
1647 runge 9
	return get_keys(Console_Functions);
10
}
1609 runge 11
 
1647 runge 12
// C++ callable functions
13
 
14
function Console_AutocompleteRequest(client_id, arg_index, commandline)
15
{
16
	Console_LastClientId = client_id;
1608 runge 17
 
1647 runge 18
	var result = [];
19
	var parts = [];
20
	var name = "Console_Shell";
1609 runge 21
 
1647 runge 22
	if (commandline.length > 0 && arg_index != 0)
1609 runge 23
	{
1647 runge 24
		parts = commandline.split(" ");
25
		name = parts.shift();
26
		arg_index--;
1609 runge 27
	}
1647 runge 28
 
29
	if (Console_Functions[name] && Console_Functions[name]["autocomplete"])
30
	{
31
		//Log("calling autocomplete_callback: " + name + "\n");
32
		result = Console_Functions[name]["autocomplete"](arg_index, parts);
33
	}
1609 runge 34
 
1647 runge 35
	var result_string = result.join("\n");
1609 runge 36
 
1647 runge 37
	ConsoleExport_AutoCompleteResponse(Console_LastClientId, result_string);
38
	return true;
39
}
40
 
41
function Console_PromptResponse(client_id, response)
42
{
43
	Console_LastClientId = client_id;
44
 
1660 runge 45
	var parts = array_remove_empty(response.split(" "));
1647 runge 46
 
47
	var current_function = Console_CurrentFunction;
48
	Console_CurrentFunction = Console_Shell;
49
 
50
	var result = current_function.apply(null, Array.prototype.slice.call(parts, 0));
51
 
52
	if (Console_CurrentFunction == Console_Shell)
1609 runge 53
	{
1647 runge 54
		Console_SetDefaultPrompt();
1609 runge 55
	}
56
 
1647 runge 57
	return result;
1608 runge 58
}
1609 runge 59
 
1647 runge 60
function Console_NewConnection(client_id)
61
{
62
	Console_LastClientId = client_id;
63
 
64
	return Console_SetDefaultPrompt();
65
}
66
 
67
// User script functions
68
 
1657 runge 69
function Console_GetClientId()
70
{
71
	return Console_LastClientId;
72
}
73
 
74
function Console_LogToClient(client_id, text)
75
{
76
	if (client_id)
77
	{
78
		return ConsoleExport_LogToClient(client_id, text);
79
	}
80
 
81
	return false;
82
}
83
 
1647 runge 84
function Console_PreventDefaultPrompt()
85
{
86
	Console_CurrentFunction = null;
87
}
88
 
89
function Console_SetDefaultPrompt()
90
{
91
	return Console_PromptRequest(Console_DefaultPrompt, Console_Shell);
92
}
93
 
94
function Console_PromptRequest(prompt, callback)
95
{
96
	Console_CurrentFunction = callback;
97
	return ConsoleExport_PromptRequest(Console_LastClientId, prompt);
98
}
99
 
1644 runge 100
function Console_RegisterCommand(command, autocomplete_callback)
1609 runge 101
{
1610 runge 102
	var command_string = command.toString();
103
 
104
	var pos_end = command_string.indexOf("\n") - 1;
105
	var pos_start = command_string.indexOf(" ") + 1;
106
 
107
	var full_name = command_string.substr(pos_start, pos_end - pos_start);
108
 
109
	var pos_split = full_name.indexOf("(");
110
 
111
	var name = full_name.substr(0, pos_split);
112
 
113
	var argument_string = full_name.substr(pos_split + 1);
114
 
115
	if (argument_string.length > 0)
116
	{
117
		argument_string = argument_string.replace(/,/g, "");
118
		argument_string = "<" + argument_string.replace(/ /g, "> <") + ">";
119
	}
120
 
1647 runge 121
	Console_Functions[name] = { "command" : command, "autocomplete" : autocomplete_callback, "help" : argument_string };
122
	return true;
123
}
124
 
125
function Console_StandardAutocomplete()
126
{
127
	var arg_index = arguments[0];
128
	var args = arguments[1];
129
 
130
	if (0 <= arg_index && arg_index < arguments.length - 2)
1609 runge 131
	{
1647 runge 132
		return arguments[arg_index + 2];
1609 runge 133
	}
134
 
1647 runge 135
	return [];
1609 runge 136
}
1610 runge 137
 
1647 runge 138
// Default call function
139
 
140
function Console_Shell()
1614 runge 141
{
1647 runge 142
	var args = to_array(arguments);
143
	var name = args.shift();
1614 runge 144
 
1647 runge 145
	if (Console_Functions[name] && Console_Functions[name]["command"])
1614 runge 146
	{
1647 runge 147
		return Console_Functions[name]["command"].apply(null, Array.prototype.slice.call(args, 0));
1614 runge 148
	}
1657 runge 149
	else
150
	{
151
		Log("\033[31mNo such command found, " + name + ".\033[0m\n");
152
	}
1614 runge 153
 
1647 runge 154
	return false;
1614 runge 155
}
1647 runge 156
Console_RegisterCommand(Console_Shell, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Console_GetFunctionNames()); });
1614 runge 157
 
1647 runge 158
// Help functions
1644 runge 159
 
1647 runge 160
function help_complete(arg_index, args)
1610 runge 161
{
1647 runge 162
	var result = [];
1610 runge 163
 
164
	if (arg_index == 1) // command name
165
	{
1647 runge 166
		for (var name in Console_Functions)
1610 runge 167
		{
1647 runge 168
			result.push(name);
1610 runge 169
		}
170
	}
171
 
172
	return result;
173
}
174
 
175
function help(command_name)
176
{
177
	if (!command_name)
178
	{
179
		command_name = "help";
180
	}
181
 
1647 runge 182
	if (Console_Functions[command_name] && Console_Functions[command_name]["help"])
1610 runge 183
	{
184
		var result = "";
185
 
1647 runge 186
		if (Console_Functions[command_name] && Console_Functions[command_name]["autocomplete"])
1610 runge 187
		{
188
			result += "Argument autocompletion enabled for " + command_name + "\n";
189
		}
190
 
1647 runge 191
		result += "Syntax: " + command_name + " " + Console_Functions[command_name]["help"] + "\n";
1610 runge 192
 
1647 runge 193
		Log(result);
194
		return true;
1610 runge 195
	}
196
 
1649 runge 197
	Log("\033[31mNo help for " + command_name + " found.\033[0m\n");
1647 runge 198
	return false;
1610 runge 199
}
1647 runge 200
Console_RegisterCommand(help, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Console_GetFunctionNames()); });