From: Vladimir 'phcoder' Serbinenko Date: Wed, 18 Aug 2010 20:28:47 +0000 (+0200) Subject: Merge mainline into keylayouts X-Git-Tag: 1.99~488^2~53 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2cccf4b0c4978b28544dfbe71ad341a16d409483;p=thirdparty%2Fgrub.git Merge mainline into keylayouts --- 2cccf4b0c4978b28544dfbe71ad341a16d409483 diff --cc include/grub/term.h index 626349ac5,f40d935e4..7871c656f --- a/include/grub/term.h +++ b/include/grub/term.h @@@ -20,31 -20,18 +20,32 @@@ #define GRUB_TERM_HEADER 1 /* Internal codes used by GRUB to represent terminal input. */ -#define GRUB_TERM_LEFT 2 -#define GRUB_TERM_RIGHT 6 -#define GRUB_TERM_UP 16 -#define GRUB_TERM_DOWN 14 -#define GRUB_TERM_HOME 1 -#define GRUB_TERM_END 5 -#define GRUB_TERM_DC 4 -#define GRUB_TERM_PPAGE 7 -#define GRUB_TERM_NPAGE 3 +#define GRUB_TERM_CTRL 0x02000000 +#define GRUB_TERM_ALT 0x04000000 +/* Used by keylayouts code. Never returned in grub_getkey. */ +#define GRUB_TERM_ALT_GR 0x08000000 +#define GRUB_TERM_CAPS 0x10000000 + +/* Keys without associated character. */ +#define GRUB_TERM_EXTENDED 0x1000000 +#define GRUB_TERM_KEY_MASK 0x1ffffff +#define GRUB_TERM_KEY_LEFT (GRUB_TERM_EXTENDED | 1) +#define GRUB_TERM_KEY_RIGHT (GRUB_TERM_EXTENDED | 2) +#define GRUB_TERM_KEY_UP (GRUB_TERM_EXTENDED | 3) +#define GRUB_TERM_KEY_DOWN (GRUB_TERM_EXTENDED | 4) +#define GRUB_TERM_KEY_HOME (GRUB_TERM_EXTENDED | 5) +#define GRUB_TERM_KEY_END (GRUB_TERM_EXTENDED | 6) +#define GRUB_TERM_KEY_DC (GRUB_TERM_EXTENDED | 7) +#define GRUB_TERM_KEY_PPAGE (GRUB_TERM_EXTENDED | 8) +#define GRUB_TERM_KEY_NPAGE (GRUB_TERM_EXTENDED | 9) ++ +/* Used by keylayouts code. Never returned in grub_getkey. */ +#define GRUB_TERM_KEY_102 (GRUB_TERM_EXTENDED | 10) +#define GRUB_TERM_KEY_SHIFT_102 (GRUB_TERM_EXTENDED | 11) + #define GRUB_TERM_ESC '\e' #define GRUB_TERM_TAB '\t' -#define GRUB_TERM_BACKSPACE 8 +#define GRUB_TERM_BACKSPACE '\b' #ifndef ASM_FILE @@@ -135,21 -123,21 +137,23 @@@ struct grub_term_inpu const char *name; /* Initialize the terminal. */ - grub_err_t (*init) (void); + grub_err_t (*init) (struct grub_term_input *term); /* Clean up the terminal. */ - grub_err_t (*fini) (void); + grub_err_t (*fini) (struct grub_term_input *term); /* Check if any input character is available. */ - int (*checkkey) (void); + int (*checkkey) (struct grub_term_input *term); /* Get a character. */ - int (*getkey) (void); + int (*getkey) (struct grub_term_input *term); /* Get keyboard modifier status. */ - int (*getkeystatus) (void); + int (*getkeystatus) (struct grub_term_input *term); + grub_uint32_t flags; ++ + void *data; }; typedef struct grub_term_input *grub_term_input_t; @@@ -264,18 -271,16 +291,15 @@@ grub_term_unregister_output (grub_term_ GRUB_AS_LIST (term)); } - #define FOR_ACTIVE_TERM_INPUTS(var) for (var = grub_term_inputs; var; var = var->next) - #define FOR_DISABLED_TERM_INPUTS(var) for (var = grub_term_inputs_disabled; var; var = var->next) - #define FOR_ACTIVE_TERM_OUTPUTS(var) for (var = grub_term_outputs; var; var = var->next) - #define FOR_DISABLED_TERM_OUTPUTS(var) for (var = grub_term_outputs_disabled; var; var = var->next) + #define FOR_ACTIVE_TERM_INPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_inputs)) + #define FOR_DISABLED_TERM_INPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_inputs_disabled)) + #define FOR_ACTIVE_TERM_OUTPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_outputs)) + #define FOR_DISABLED_TERM_OUTPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_outputs_disabled)) - void EXPORT_FUNC(grub_putchar) (int c); - void EXPORT_FUNC(grub_putcode) (grub_uint32_t code, - struct grub_term_output *term); + void grub_putcode (grub_uint32_t code, struct grub_term_output *term); -int EXPORT_FUNC(grub_getkey) (void); -int EXPORT_FUNC(grub_checkkey) (void); -int EXPORT_FUNC(grub_getkeystatus) (void); +extern int (*EXPORT_VAR(grub_getkey)) (void); +int grub_checkkey (void); - void EXPORT_FUNC(grub_cls) (void); - void EXPORT_FUNC(grub_setcolorstate) (grub_term_color_state state); + void grub_cls (void); void EXPORT_FUNC(grub_refresh) (void); void grub_puts_terminal (const char *str, struct grub_term_output *term); grub_uint16_t *grub_term_save_pos (void); diff --cc kern/term.c index ab3d952fa,47bd426fd..d582dbb68 --- a/kern/term.c +++ b/kern/term.c @@@ -75,8 -74,10 +74,10 @@@ grub_xputs_dumb (const char *str } } + void (*grub_xputs) (const char *str) = grub_xputs_dumb; + -int -grub_getkey (void) +static int +grub_getkey_dumb (void) { grub_term_input_t term; @@@ -86,43 -87,45 +87,17 @@@ { FOR_ACTIVE_TERM_INPUTS(term) { - int key = term->checkkey (); + int key = term->checkkey (term); if (key != -1) - return term->getkey () & 0xff; - return term->getkey (term); ++ return term->getkey (term) & 0xff; } grub_cpu_idle (); } } -int -grub_checkkey (void) -{ - grub_term_input_t term; - - FOR_ACTIVE_TERM_INPUTS(term) - { - int key = term->checkkey (term); - if (key != -1) - return key; - } - - return -1; -} - -int -grub_getkeystatus (void) -{ - int status = 0; - grub_term_input_t term; - - FOR_ACTIVE_TERM_INPUTS(term) - { - if (term->getkeystatus) - status |= term->getkeystatus (term); - } - - return status; -} +int (*grub_getkey) (void) = grub_getkey_dumb; - void - grub_cls (void) - { - struct grub_term_output *term; - - FOR_ACTIVE_TERM_OUTPUTS(term) - { - if ((term->flags & GRUB_TERM_DUMB) || (grub_env_get ("debug"))) - { - grub_putcode ('\n', term); - grub_term_refresh (term); - } - else - (term->cls) (); - } - } - - void - grub_setcolorstate (grub_term_color_state state) - { - struct grub_term_output *term; - - FOR_ACTIVE_TERM_OUTPUTS(term) - grub_term_setcolorstate (term, state); - } - void grub_refresh (void) { diff --cc normal/menu_entry.c index 0b03147dd,238c94ecd..8e943612a --- a/normal/menu_entry.c +++ b/normal/menu_entry.c @@@ -1368,14 -1370,19 +1378,19 @@@ grub_menu_entry_run (grub_menu_entry_t grub_cmdline_run (1); goto refresh; - case 24: /* C-x */ + case GRUB_TERM_CTRL | 'x': - if (! run (screen)) - goto fail; + { + int chars_before = grub_normal_get_char_counter (); + run (screen); + + if (chars_before != grub_normal_get_char_counter ()) + grub_wait_after_message (); + } goto refresh; - case 18: /* C-r */ - case 19: /* C-s */ - case 20: /* C-t */ + case GRUB_TERM_CTRL | 'r': + case GRUB_TERM_CTRL | 's': + case GRUB_TERM_CTRL | 't': /* FIXME */ break; diff --cc util/grub-fstest.c index 14ddf2ad8,2c80b964c..715dfe2dd --- a/util/grub-fstest.c +++ b/util/grub-fstest.c @@@ -43,14 -43,16 +43,16 @@@ #include "progname.h" - void - grub_putchar (int c) + void + grub_xputs_real (const char *str) { - putchar (c); + fputs (str, stdout); } + void (*grub_xputs) (const char *str) = grub_xputs_real; + -int -grub_getkey (void) +static int +grub_getkey_real (void) { return -1; } diff --cc util/grub-probe.c index cb082da6d,56cbc5592..e4d3f2906 --- a/util/grub-probe.c +++ b/util/grub-probe.c @@@ -58,14 -60,16 +60,16 @@@ enum int print = PRINT_FS; static unsigned int argument_is_device = 0; - void - grub_putchar (int c) + void + grub_xputs_real (const char *str) { - putchar (c); + fputs (str, stdout); } + void (*grub_xputs) (const char *str) = grub_xputs_real; + -int -grub_getkey (void) +static int +grub_getkey_real (void) { return -1; } diff --cc util/i386/pc/grub-setup.c index ffdb356a6,524572fad..4e3980965 --- a/util/i386/pc/grub-setup.c +++ b/util/i386/pc/grub-setup.c @@@ -57,14 -57,23 +57,23 @@@ static const grub_gpt_part_type_t grub_ #define DEFAULT_BOOT_FILE "boot.img" #define DEFAULT_CORE_FILE "core.img" - void - grub_putchar (int c) + #define grub_target_to_host16(x) grub_le_to_cpu16(x) + #define grub_target_to_host32(x) grub_le_to_cpu32(x) + #define grub_target_to_host64(x) grub_le_to_cpu64(x) + #define grub_host_to_target16(x) grub_cpu_to_le16(x) + #define grub_host_to_target32(x) grub_cpu_to_le32(x) + #define grub_host_to_target64(x) grub_cpu_to_le64(x) + + void + grub_xputs_real (const char *str) { - putchar (c); + fputs (str, stdout); } + void (*grub_xputs) (const char *str) = grub_xputs_real; + -int -grub_getkey (void) +static int +grub_getkey_real (void) { return -1; }