Subversion Repositories HomeAutomation

Rev

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

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