From owner-svn-src-head@FreeBSD.ORG Sun Oct 14 06:52:50 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7CA616A0; Sun, 14 Oct 2012 06:52:50 +0000 (UTC) (envelope-from dteske@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6324E8FC08; Sun, 14 Oct 2012 06:52:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9E6qoih008304; Sun, 14 Oct 2012 06:52:50 GMT (envelope-from dteske@svn.freebsd.org) Received: (from dteske@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9E6qoF7008300; Sun, 14 Oct 2012 06:52:50 GMT (envelope-from dteske@svn.freebsd.org) Message-Id: <201210140652.q9E6qoF7008300@svn.freebsd.org> From: Devin Teske Date: Sun, 14 Oct 2012 06:52:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r241523 - head/sys/boot/forth X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Oct 2012 06:52:50 -0000 Author: dteske Date: Sun Oct 14 06:52:49 2012 New Revision: 241523 URL: http://svn.freebsd.org/changeset/base/241523 Log: Since the introduction of the new advanced boot menu (r222417), options like "boot verbose", "single user mode", "ACPI" and more are now stateful boolean menuitems rather than direct action-items. A short-coming in this new menu system is that when a user sets a non-default value in loader.conf(5), this non-default state is not reflected in the menu -- leading to confusion as to whether the option was taking effect or not. This patch adds dynamic menuitem constructors _and_ the necessary Forth callbacks to initialize these stateful menuitems -- causing the aforementioned menuitems to adhere to loader.conf(5) settings. PR: bin/172529 Approved by: adrian (co-mentor) MFC after: 21 days Modified: head/sys/boot/forth/menu-commands.4th head/sys/boot/forth/menu.4th head/sys/boot/forth/menu.rc Modified: head/sys/boot/forth/menu-commands.4th ============================================================================== --- head/sys/boot/forth/menu-commands.4th Sun Oct 14 03:59:17 2012 (r241522) +++ head/sys/boot/forth/menu-commands.4th Sun Oct 14 06:52:49 2012 (r241523) @@ -26,6 +26,9 @@ marker task-menu-commands.4th +variable kernel_state +variable root_state + : acpi_enable ( -- ) s" set acpi_load=YES" evaluate \ XXX deprecated but harmless s" set hint.acpi.0.disabled=0" evaluate @@ -53,6 +56,13 @@ marker task-menu-commands.4th TRUE \ loop menu again ; +: init_safemode ( N -- N ) + s" kern.smp.disabled" getenv -1 <> if + drop ( n c-addr -- n ) \ unused + toggle_menuitem ( n -- n ) + then +; + : toggle_safemode ( N -- N TRUE ) toggle_menuitem @@ -84,6 +94,13 @@ marker task-menu-commands.4th TRUE \ loop menu again ; +: init_singleuser ( N -- N ) + s" boot_single" getenv -1 <> if + drop ( n c-addr -- n ) \ unused + toggle_menuitem ( n -- n ) + then +; + : toggle_singleuser ( N -- N TRUE ) toggle_menuitem menu-redraw @@ -102,6 +119,13 @@ marker task-menu-commands.4th TRUE \ loop menu again ; +: init_verbose ( N -- N ) + s" boot_verbose" getenv -1 <> if + drop ( n c-addr -- n ) \ unused + toggle_menuitem ( n -- n ) + then +; + : toggle_verbose ( N -- N TRUE ) toggle_menuitem menu-redraw @@ -132,6 +156,27 @@ marker task-menu-commands.4th FALSE \ exit the menu ; +: init_cyclestate ( N K -- N ) + over ( n k -- n k n ) + s" cycle_stateN" ( n k n -- n k n c-addr u ) + -rot tuck 11 + c! swap ( n k n c-addr u -- n k c-addr u ) + evaluate ( n k c-addr u -- n k addr ) + begin + tuck @ ( n k addr -- n addr k c ) + over <> ( n addr k c -- n addr k 0|-1 ) + while + rot ( n addr k -- addr k n ) + cycle_menuitem + swap rot ( addr k n -- n k addr ) + repeat + 2drop ( n k addr -- n ) +; + +: init_kernel ( N -- N ) + kernel_state @ ( n -- n k ) + init_cyclestate ( n k -- n ) +; + : cycle_kernel ( N -- N TRUE ) cycle_menuitem menu-redraw @@ -142,6 +187,7 @@ marker task-menu-commands.4th -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral evaluate \ translate name into address @ \ dereference address into value + dup kernel_state ! \ save a copy for re-initialization 48 + \ convert to ASCII numeral s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}" @@ -152,6 +198,11 @@ marker task-menu-commands.4th TRUE \ loop menu again ; +: init_root ( N -- N ) + root_state @ ( n -- n k ) + init_cyclestate ( n k -- n ) +; + : cycle_root ( N -- N TRUE ) cycle_menuitem menu-redraw @@ -162,6 +213,7 @@ marker task-menu-commands.4th -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral evaluate \ translate name into address @ \ dereference address into value + dup root_state ! \ save a copy for re-initialization 48 + \ convert to ASCII numeral s" set root=${root_prefix}${root[N]}${root_suffix}" Modified: head/sys/boot/forth/menu.4th ============================================================================== --- head/sys/boot/forth/menu.4th Sun Oct 14 03:59:17 2012 (r241522) +++ head/sys/boot/forth/menu.4th Sun Oct 14 06:52:49 2012 (r241523) @@ -76,6 +76,16 @@ variable menu_timeout \ determin variable menu_timeout_x \ column position of timeout message variable menu_timeout_y \ row position of timeout message +\ Menu initialization status variables +variable init_state1 +variable init_state2 +variable init_state3 +variable init_state4 +variable init_state5 +variable init_state6 +variable init_state7 +variable init_state8 + \ Boolean option status variables variable toggle_state1 variable toggle_state2 @@ -421,6 +431,16 @@ create init_text8 255 allot then 24 over 2 / - 9 at-xy type + \ If $menu_init is set, evaluate it (allowing for whole menus to be + \ constructed dynamically -- as this function could conceivably set + \ the remaining environment variables to construct the menu entirely). + \ + s" menu_init" getenv dup -1 <> if + evaluate + else + drop + then + \ Print our menu options with respective key/variable associations. \ `printmenuitem' ends by adding the decimal ASCII value for the \ numerical prefix to the stack. We store the value left on the stack @@ -499,6 +519,24 @@ create init_text8 255 allot dup menuacpi @ = if acpimenuitem ( -- C-Addr/U | -1 ) else + \ make sure we have not already initialized this item + s" init_stateN" + -rot 2dup 10 + c! rot \ repace 'N' + evaluate dup @ 0= if + 1 swap ! + + \ If this menuitem has an initializer, run it + s" menu_init[x]" + -rot 2dup 10 + c! rot \ replace 'x' + getenv dup -1 <> if + evaluate + else + drop + then + else + drop + then + loader_color? if s" ansi_caption[x]" else @@ -917,6 +955,10 @@ create init_text8 255 allot -rot 2dup 13 + c! rot \ replace 'x' unsetenv + s" menu_init[x]" \ initializer basename + -rot 2dup 10 + c! rot \ replace 'x' + unsetenv + s" menu_keycode[x]" \ keycode basename -rot 2dup 13 + c! rot \ replace 'x' unsetenv @@ -959,6 +1001,10 @@ create init_text8 255 allot -rot 2dup 9 + c! rot \ replace 'N' with current iteration evaluate \ assign zero (0) to key assoc. var + s" 0 init_stateN !" \ used by menu-create + -rot 2dup 12 + c! rot \ replace 'N' + evaluate + 1+ dup 56 > \ increment, continue if less than 57 until drop \ iterator @@ -979,6 +1025,8 @@ create init_text8 255 allot s" menu_optionstext" unsetenv 0 menuoptions ! + \ clear the menu initializer + s" menu_init" unsetenv ; \ This function both unsets menu variables and visually erases the menu area @@ -994,6 +1042,16 @@ bullet menubllt ! 10 menuY ! 5 menuX ! +\ Initialize our menu initialization state variables +0 init_state1 ! +0 init_state2 ! +0 init_state3 ! +0 init_state4 ! +0 init_state5 ! +0 init_state6 ! +0 init_state7 ! +0 init_state8 ! + \ Initialize our boolean state variables 0 toggle_state1 ! 0 toggle_state2 ! Modified: head/sys/boot/forth/menu.rc ============================================================================== --- head/sys/boot/forth/menu.rc Sun Oct 14 03:59:17 2012 (r241522) +++ head/sys/boot/forth/menu.rc Sun Oct 14 06:52:49 2012 (r241523) @@ -48,6 +48,7 @@ set toggled_ansi[4]="ACPI Suppo set menu_caption[5]="Safe [M]ode... off" set toggled_text[5]="Safe [M]ode... On" +set menu_init[5]="init_safemode" set menu_command[5]="toggle_safemode" set menu_keycode[5]="109" set ansi_caption[5]="Safe Mode... Off" @@ -55,6 +56,7 @@ set toggled_ansi[5]="Safe Mode. set menu_caption[6]="[S]ingle User. off" set toggled_text[6]="[S]ingle User. On" +set menu_init[6]="init_singleuser" set menu_command[6]="toggle_singleuser" set menu_keycode[6]="115" set ansi_caption[6]="Single User. Off" @@ -62,6 +64,7 @@ set toggled_ansi[6]="Single Use set menu_caption[7]="[V]erbose..... off" set toggled_text[7]="[V]erbose..... On" +set menu_init[7]="init_verbose" set menu_command[7]="toggle_verbose" set menu_keycode[7]="118" set ansi_caption[7]="Verbose..... Off"