From owner-svn-soc-all@FreeBSD.ORG Sat Jun 21 21:31:43 2014 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id C898CFC2 for ; Sat, 21 Jun 2014 21:31:43 +0000 (UTC) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B346626D5 for ; Sat, 21 Jun 2014 21:31:43 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.8/8.14.8) with ESMTP id s5LLVhNg018923 for ; Sat, 21 Jun 2014 21:31:43 GMT (envelope-from pedrosouza@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.8/8.14.8/Submit) id s5LLVgSh018263 for svn-soc-all@FreeBSD.org; Sat, 21 Jun 2014 21:31:42 GMT (envelope-from pedrosouza@FreeBSD.org) Date: Sat, 21 Jun 2014 21:31:42 GMT Message-Id: <201406212131.s5LLVgSh018263@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to pedrosouza@FreeBSD.org using -f From: pedrosouza@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r269832 - soc2014/pedrosouza/lua_loader/head/sys/boot/lua MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 21 Jun 2014 21:31:43 -0000 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