1-- 2-- Copyright (c) 2015 Pedro Souza <pedrosouza@freebsd.org> 3-- Copyright (c) 2018 Kyle Evans <kevans@FreeBSD.org> 4-- All rights reserved. 5-- 6-- Redistribution and use in source and binary forms, with or without 7-- modification, are permitted provided that the following conditions 8-- are met: 9-- 1. Redistributions of source code must retain the above copyright 10-- notice, this list of conditions and the following disclaimer. 11-- 2. Redistributions in binary form must reproduce the above copyright 12-- notice, this list of conditions and the following disclaimer in the 13-- documentation and/or other materials provided with the distribution. 14-- 15-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18-- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25-- SUCH DAMAGE. 26-- 27-- $FreeBSD$ 28-- 29 30local config = require("config"); 31local menu = require("menu"); 32local password = require("password"); 33 34-- Declares a global function cli_execute that attempts to dispatch the 35-- arguments passed as a lua function. This gives lua a chance to intercept 36-- builtin CLI commands like "boot" 37function cli_execute(...) 38 local argv = {...}; 39 -- Just in case... 40 if (#argv == 0) then 41 loader.command(...); 42 return; 43 end 44 45 local cmd_name = argv[1]; 46 local cmd = _G[cmd_name]; 47 if (cmd ~= nil) and (type(cmd) == "function") then 48 -- Pass argv wholesale into cmd. We could omit argv[0] since the 49 -- traditional reasons for including it don't necessarily apply, 50 -- it may not be totally redundant if we want to have one global 51 -- handling multiple commands 52 cmd(...); 53 else 54 loader.command(...); 55 end 56 57end 58 59config.load(); 60password.check(); 61menu.run(); 62