[SLOF] [PATCH] Improve F12 key handling in boot menu

Alexey Kardashevskiy aik at ozlabs.ru
Wed Jun 1 17:53:14 AEST 2016


On 25/05/16 21:00, Thomas Huth wrote:
> When hitting F12 during boot multiple times (to make sure that you get
> to the boot menu), it is sometimes impossible to select a menu entry
> from the boot list - you always get the output "Invalid choice!" and
> are dropped to the SLOF prompt.
> 
> The "boot-start" function already has some code at the beginning to
> flush the keyboard input to get rid of multiple F12 keys. But if you
> accidentially press F12 again after that code has been executed,
> the code that checks the input for the selected boot menu entry
> can not handle it and gets confused.
> 
> Fix this issue by flushing the keyboard input queue as late as possible
> (i.e. after printing the boot menu items, since that could also take
> a short while when the list is long and when using slow VGA text
> output), and by ignoring all key sequences that start with an ESC
> (like the F12 key ESC sequence) in the main keyboard input loop there.
> 
> Signed-off-by: Thomas Huth <thuth at redhat.com>

Thanks, applied.


> ---
>  slof/fs/start-up.fs | 21 +++++++++++++++------
>  1 file changed, 15 insertions(+), 6 deletions(-)
> 
> diff --git a/slof/fs/start-up.fs b/slof/fs/start-up.fs
> index fb88f76..dc5d1ed 100644
> --- a/slof/fs/start-up.fs
> +++ b/slof/fs/start-up.fs
> @@ -91,18 +91,27 @@ TRUE VALUE use-load-watchdog?
>  ;
>  
>  : boot-start
> -   \ Remove multiple F12 key presses if any
> -   BEGIN key? WHILE
> -      key drop
> -   REPEAT
> -
>     decimal
>     BEGIN parse-word dup WHILE
>        my-boot-dev (u.) s" . " $cat type 2dup type ." : " de-alias type cr
>        my-boot-dev 1 + to my-boot-dev
>     REPEAT 2drop 0 0 load-list 2!
>  
> -   cr BEGIN KEY dup emit
> +   \ Clear pending keys (to remove multiple F12 key presses for example)
> +   BEGIN key? WHILE
> +      key drop
> +   REPEAT
> +
> +   cr
> +   BEGIN
> +      KEY
> +      dup 1b = IF         \ ESC sequence ... could be yet another F12 key press
> +         BEGIN key? WHILE
> +            key drop
> +         REPEAT
> +      ELSE
> +         dup emit
> +      THEN
>        dup isdigit IF
>           dup 30 - to digit-val
>           boot-dev-no a * digit-val + to boot-dev-no
> 


-- 
Alexey


More information about the SLOF mailing list