socsvn commit: r269832 - soc2014/pedrosouza/lua_loader/head/sys/boot/lua
pedrosouza at FreeBSD.org
pedrosouza at FreeBSD.org
Sat Jun 21 21:31:43 UTC 2014
Author: pedrosouza
Date: Sat Jun 21 21:31:41 2014
New Revision: 269832
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269832
Log:
Added simple boot menu lua scripts
Added:
soc2014/pedrosouza/lua_loader/head/sys/boot/lua/core.lua
soc2014/pedrosouza/lua_loader/head/sys/boot/lua/loader.lua
soc2014/pedrosouza/lua_loader/head/sys/boot/lua/menu.lua
soc2014/pedrosouza/lua_loader/head/sys/boot/lua/screen.lua
Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/core.lua
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/core.lua Sat Jun 21 21:31:41 2014 (r269832)
@@ -0,0 +1,75 @@
+core = {};
+
+function core.setVerbose(b)
+ if (b == nil) then
+ b = not core.verbose;
+ end
+
+ if (b == true) then
+ loader.perform("set boot_verbose=YES");
+ else
+ loader.perform("unset boot_verbose");
+ end
+ core.verbose = b;
+end
+
+function core.setSingleUser(b)
+ if (b == nil) then
+ b = not core.su;
+ end
+
+ if (b == true) then
+ loader.perform("set boot_single=YES");
+ else
+ loader.perform("unset boot_single");
+ end
+ core.su = b;
+end
+
+function core.setACPI(b)
+ if (b == nil) then
+ b = not core.acpi;
+ end
+
+ if (b == true) then
+ loader.perform("set acpi_load=YES");
+ loader.perform("set hint.acpi.0.disabled=0");
+ loader.perform("unset loader.acpi_disabled_by_user");
+ else
+ loader.perform("unset acpi_load");
+ loader.perform("set hint.acpi.0.disabled=1");
+ loader.perform("set loader.acpi_disabled_by_user=1");
+ end
+ core.acpi = b;
+end
+
+function core.setSafeMode(b)
+ if (b == nil) then
+ b = not core.sm;
+ end
+ if (b == true) then
+ loader.perform("set kern.smp.disabled=1");
+ loader.perform("set hw.ata.ata_dma=0");
+ loader.perform("set hw.ata.atapi_dma=0");
+ loader.perform("set hw.ata.wc=0");
+ loader.perform("set hw.eisa_slots=0");
+ loader.perform("set kern.eventtimer.periodic=1");
+ loader.perform("set kern.geom.part.check_integrity=0");
+ else
+ loader.perform("unset kern.smp.disabled");
+ loader.perform("unset hw.ata.ata_dma");
+ loader.perform("unset hw.ata.atapi_dma");
+ loader.perform("unset hw.ata.wc");
+ loader.perform("unset hw.eisa_slots");
+ loader.perform("unset kern.eventtimer.periodic");
+ loader.perform("unset kern.geom.part.check_integrity");
+ end
+ core.sm = b;
+end
+
+function core.setDefaults()
+ core.setACPI(true);
+ core.setSafeMode(false);
+ core.setSingleUser(false);
+ core.setVerbose(false);
+end
\ No newline at end of file
Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/loader.lua
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/loader.lua Sat Jun 21 21:31:41 2014 (r269832)
@@ -0,0 +1,14 @@
+LOADED = {};
+
+function include(filename)
+ if LOADED[filename] == nil then
+ loader.include(filename);
+ LOADED[filename] = true;
+ end
+end
+
+print("Calling include...");
+
+include("/boot/menu.lua");
+print("Included menu.lua");
+menu.run();
Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/menu.lua
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/menu.lua Sat Jun 21 21:31:41 2014 (r269832)
@@ -0,0 +1,62 @@
+include("/boot/core.lua");
+include("/boot/screen.lua");
+
+menu = {};
+
+function menu.draw(x, y, opts)
+ screen.setcursor(x, y);
+ print("Boot Menu");
+ for k, v in pairs(opts) do
+ screen.setcursor(x + v.index, y);
+ local name = v.name;
+
+ if (name == nil) then
+ name = v.getName();
+ end
+ print(k .. " - " .. name);
+ end
+end
+
+function menu.run(opts)
+ if (opts == nil) then
+ opts = menu.options;
+ end
+ screen.clear();
+ while true do
+ menu.draw(0, 0, opts);
+ local ch = string.char(io.getchar());
+ if (opts[ch] ~= nil) then
+ local ret = opts[ch].func();
+ if (ret) then
+ print("Exiting menu!\n");
+ return;
+ end
+ end
+ end
+end
+
+menu.options = {
+ ["1"] = {index = 1, name = "Boot Multi user", func = function () core.setSingleUser(false); loader.perform("boot"); end},
+ ["2"] = {index = 2, name = "Boot Single user", func = function () core.setSingleUser(true); loader.perform("boot"); end},
+ ["3"] = {index = 3, name = "Escape to lua interpreter", func = function () return true; end},
+ ["4"] = {index = 4, name = "Reboot", func = function () loader.perform("reboot"); end},
+ ["5"] = {index = 5, name = "Boot Options", func = function () menu.run(boot_options); return false; end} ,
+ ["6"] = {index = 6, name = "Load zfs", func = function () loader.perform("load zfs"); return false; end}
+};
+
+function OnOff(str, b)
+ if (b) then
+ return str .. ": On";
+ else
+ return str .. ": Off";
+ end
+end
+
+boot_options = {
+ ["1"] = {index = 1, name = "Back to menu", func = function () return true; end },
+ ["2"] = {index = 2, name = "Load System defaults", func = function () core.setDefaults(); return false; end },
+ ["3"] = {index = 3, getName = function () return OnOff("ACPI ", core.acpi); end, func = function () core.setACPI(); return false; end },
+ ["4"] = {index = 4, getName = function () return OnOff("Safe Mode ", core.sm); end, func = function () core.setSafeMode(); return false; end },
+ ["5"] = {index = 5, getName = function () return OnOff("Single user", core.su); end, func = function () core.setSingleUser(); return false; end },
+ ["6"] = {index = 6, getName = function () return OnOff("Verbose ", core.verbose); end, func = function () core.setVerbose(); return false; end }
+}
\ No newline at end of file
Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/screen.lua
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/screen.lua Sat Jun 21 21:31:41 2014 (r269832)
@@ -0,0 +1,17 @@
+screen = {};
+
+function screen.clear()
+ print("\027[H\027[J");
+end
+
+function screen.setcursor(x, y)
+ print("\027["..x..";"..y.."H");
+end
+
+function screen.setforeground(c)
+ print("\027[3"..c.."m");
+end
+
+function screen.setbackground(c)
+ print("\027[4"..c.."m");
+end
\ No newline at end of file
More information about the svn-soc-all
mailing list