Subversion Repositories HomeAutomation

Rev

Rev 1614 | Rev 1647 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed


function Console() { }

Console.autocomplete_callbacks = new Array();
Console.help_text = new Array();

function Console_DoAutocomplete()
{
    var name = arguments[0];

    //Log("Console_DoAutocomplete(), name=" + name);
    
    var result = new Array();
    
    if (typeof Console.autocomplete_callbacks[name] != 'undefined')
    {
        //Log("calling autocomplete_callback");
        result = Console.autocomplete_callbacks[name](arguments);
    }
    
    var result_string = "";
    
    for (var n = 0; n < result.length; n++)
    {
        result_string += result[n] + "\n";
    }
    
    return result_string;
}

function RegisterConsoleCommand(command, autocomplete_callback)
{
    var command_string = command.toString();

    var pos_end = command_string.indexOf("\n") - 1;
    var pos_start = command_string.indexOf(" ") + 1;
    
    var full_name = command_string.substr(pos_start, pos_end - pos_start);
    
    var pos_split = full_name.indexOf("(");
    
    var name = full_name.substr(0, pos_split);
    
    var argument_string = full_name.substr(pos_split + 1);
    
    if (argument_string.length > 0)
    {
        argument_string = argument_string.replace(/,/g, "");
        argument_string = "<" + argument_string.replace(/ /g, "> <") + ">";
    }
    
    if (Console_RegisterConsoleCommand(name))
    {
        Console.help_text[name] = argument_string;
        
        
        if (autocomplete_callback)
        {
            Console.autocomplete_callbacks[name] = autocomplete_callback;
        }
        
        return true;
    }
    
    return false;
}

function StandardAutocomplete()
{
    // First argument is the command line split
    var command_line_parts = arguments[0];
    
    // command_line_parts[0] == command name
    var arg_index = arguments[0].length - 2;
    
    // Supplied parameters to complete
    var args_to_complete = arguments.length - 1;
    
    if (0 <= arg_index && arg_index < args_to_complete)
    {
        return arguments[arg_index + 1];
    }
    
    return new Array();
}

function help_complete(args)
{
    var result = new Array();
    
    var arg_index = args.length - 1;
    
    if (arg_index == 1) // command name
    {
        for (var n in Console.help_text)
        {
            result.push(n);
        }
    }
    
    return result;
}

function help(command_name)
{
    if (!command_name)
    {
        command_name = "help";
    }
    
    if (typeof Console.help_text[command_name] != 'undefined')
    {
        var result = "";
        
        if (Console.autocomplete_callbacks[command_name])
        {
            result += "Argument autocompletion enabled for " + command_name + "\n";
        }
        
        result += "Syntax: " + command_name + " " + Console.help_text[command_name] + "\n";
        
        return result;
    }
    
    return "No help for " + command_name + " found\n";
}
RegisterConsoleCommand(help, help_complete);

var prompt_requests = new Array();
var prompt_request_counter = 0;

function prompt(question, callback, text)
{
    var id = prompt_request_counter++;
    prompt_requests[id] = callback;
    
    var prompt = "";
    
    if (text)
    {
        if (text[text.length - 1] != '\n')
        {
            text += "\n";
        }
        
        prompt += text;
    }
    
    prompt += "P;" + id + ";" + question + "\n";
    
    return prompt;
}

function Console_PromptResponse(id, response)
{
    var result = prompt_requests[id](response);
    
    delete prompt_requests[id];
    
    return result;
}