From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1Cutc4-0001U8-KE for mharc-grub-devel@gnu.org; Sat, 29 Jan 2005 09:30:12 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Cutbv-0001SK-0k for grub-devel@gnu.org; Sat, 29 Jan 2005 09:30:03 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1CutbV-0001El-1o for grub-devel@gnu.org; Sat, 29 Jan 2005 09:29:49 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1CutbS-00019H-Kq for grub-devel@gnu.org; Sat, 29 Jan 2005 09:29:34 -0500 Received: from [194.67.23.122] (helo=mx2.mail.ru) by monty-python.gnu.org with esmtp (Exim 4.34) id 1CutGa-0005sY-Po for grub-devel@gnu.org; Sat, 29 Jan 2005 09:08:01 -0500 Received: from [83.76.233.184] (port=2797 helo=[192.168.1.100]) by mx2.mail.ru with esmtp id 1CutGY-000Dd5-00 for grub-devel@gnu.org; Sat, 29 Jan 2005 17:07:58 +0300 Message-ID: <41FB98D9.1090309@list.ru> Date: Sat, 29 Jan 2005 15:08:25 +0100 From: Serbinenko Vladimir User-Agent: Mozilla Thunderbird 1.0 (X11/20041206) X-Accept-Language: en-us, en MIME-Version: 1.0 To: The development of GRUB 2 References: <200501221618.27972.okuji@enbug.org> <200501221835.25876.okuji@enbug.org> <41FB8D22.8030203@list.ru> In-Reply-To: <41FB8D22.8030203@list.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam: Not detected Subject: Re: Bash pre-alpha X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Jan 2005 14:30:11 -0000 I'm sorry but I had some diff issues I confused run_menu and run_menu_entry. Here is a patch to correct this error and update i386.mk ---------------------------------------------------------- diff -b -B -r -u -E -N -x '*~' -x '*.d' -x output.0 -x kernel_syms.lst -x symlist.c -x requests -x traces.0 --expand-tabs ./grub2pr/conf/i386-pc.mk ./grub2/conf/i386-pc.mk --- ./grub2pr/conf/i386-pc.mk 2005-01-29 14:55:54.000000000 +0100 +++ ./grub2/conf/i386-pc.mk 2005-01-29 14:56:31.000000000 +0100 @@ -504,12 +504,12 @@ partmap/pc.c partmap/apple.c \ commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c \ util/i386/pc/biosdisk.c fs/fat.c fs/ext2.c fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c fs/iso9660.c \ - normal/cmdline.c normal/command.c normal/main.c normal/menu.c normal/arg.c \ + normal/cmdline.c normal/command.c normal/script.c normal/main.c normal/menu.c normal/arg.c \ util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c disk/loopback.c -CLEANFILES += grub-emu grub_emu-kern_main.o grub_emu-kern_device.o grub_emu-fs_fshelp.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_err.o grub_emu-kern_misc.o grub_emu-kern_loader.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-kern_partition.o grub_emu-kern_env.o grub_emu-commands_ls.o grub_emu-partmap_amiga.o grub_emu-partmap_pc.o grub_emu-partmap_apple.o grub_emu-commands_terminal.o grub_emu-commands_boot.o grub_emu-commands_cmp.o grub_emu-commands_cat.o grub_emu-util_i386_pc_biosdisk.o grub_emu-fs_fat.o grub_emu-fs_ext2.o grub_emu-fs_ufs.o grub_emu-fs_minix.o grub_emu-fs_hfs.o grub_emu-fs_jfs.o grub_emu-fs_iso9660.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_arg.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_getroot.o grub_emu-disk_loopback.o -MOSTLYCLEANFILES += grub_emu-kern_main.d grub_emu-kern_device.d grub_emu-fs_fshelp.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_err.d grub_emu-kern_misc.d grub_emu-kern_loader.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-kern_partition.d grub_emu-kern_env.d grub_emu-commands_ls.d grub_emu-partmap_amiga.d grub_emu-partmap_pc.d grub_emu-partmap_apple.d grub_emu-commands_terminal.d grub_emu-commands_boot.d grub_emu-commands_cmp.d grub_emu-commands_cat.d grub_emu-util_i386_pc_biosdisk.d grub_emu-fs_fat.d grub_emu-fs_ext2.d grub_emu-fs_ufs.d grub_emu-fs_minix.d grub_emu-fs_hfs.d grub_emu-fs_jfs.d grub_emu-fs_iso9660.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_arg.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_getroot.d grub_emu-disk_loopback.d +CLEANFILES += grub-emu grub_emu-kern_main.o grub_emu-kern_device.o grub_emu-fs_fshelp.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_err.o grub_emu-kern_misc.o grub_emu-kern_loader.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-kern_partition.o grub_emu-kern_env.o grub_emu-commands_ls.o grub_emu-partmap_amiga.o grub_emu-partmap_pc.o grub_emu-partmap_apple.o grub_emu-commands_terminal.o grub_emu-commands_boot.o grub_emu-commands_cmp.o grub_emu-commands_cat.o grub_emu-util_i386_pc_biosdisk.o grub_emu-fs_fat.o grub_emu-fs_ext2.o grub_emu-fs_ufs.o grub_emu-fs_minix.o grub_emu-fs_hfs.o grub_emu-fs_jfs.o grub_emu-fs_iso9660.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_script.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_arg.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_getroot.o grub_emu-disk_loopback.o +MOSTLYCLEANFILES += grub_emu-kern_main.d grub_emu-kern_device.d grub_emu-fs_fshelp.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_err.d grub_emu-kern_misc.d grub_emu-kern_loader.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-kern_partition.d grub_emu-kern_env.d grub_emu-commands_ls.d grub_emu-partmap_amiga.d grub_emu-partmap_pc.d grub_emu-partmap_apple.d grub_emu-commands_terminal.d grub_emu-commands_boot.d grub_emu-commands_cmp.d grub_emu-commands_cat.d grub_emu-util_i386_pc_biosdisk.d grub_emu-fs_fat.d grub_emu-fs_ext2.d grub_emu-fs_ufs.d grub_emu-fs_minix.d grub_emu-fs_hfs.d grub_emu-fs_jfs.d grub_emu-fs_iso9660.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_script.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_arg.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_getroot.d grub_emu-disk_loopback.d -grub-emu: grub_emu-kern_main.o grub_emu-kern_device.o grub_emu-fs_fshelp.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_err.o grub_emu-kern_misc.o grub_emu-kern_loader.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-kern_partition.o grub_emu-kern_env.o grub_emu-commands_ls.o grub_emu-partmap_amiga.o grub_emu-partmap_pc.o grub_emu-partmap_apple.o grub_emu-commands_terminal.o grub_emu-commands_boot.o grub_emu-commands_cmp.o grub_emu-commands_cat.o grub_emu-util_i386_pc_biosdisk.o grub_emu-fs_fat.o grub_emu-fs_ext2.o grub_emu-fs_ufs.o grub_emu-fs_minix.o grub_emu-fs_hfs.o grub_emu-fs_jfs.o grub_emu-fs_iso9660.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_arg.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_getroot.o grub_emu-disk_loopback.o +grub-emu: grub_emu-kern_main.o grub_emu-kern_device.o grub_emu-fs_fshelp.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_err.o grub_emu-kern_misc.o grub_emu-kern_loader.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-kern_partition.o grub_emu-kern_env.o grub_emu-commands_ls.o grub_emu-partmap_amiga.o grub_emu-partmap_pc.o grub_emu-partmap_apple.o grub_emu-commands_terminal.o grub_emu-commands_boot.o grub_emu-commands_cmp.o grub_emu-commands_cat.o grub_emu-util_i386_pc_biosdisk.o grub_emu-fs_fat.o grub_emu-fs_ext2.o grub_emu-fs_ufs.o grub_emu-fs_minix.o grub_emu-fs_hfs.o grub_emu-fs_jfs.o grub_emu-fs_iso9660.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_script.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_arg.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_getroot.o grub_emu-disk_loopback.o $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS) grub_emu-kern_main.o: kern/main.c @@ -768,6 +768,14 @@ -include grub_emu-normal_command.d +grub_emu-normal_script.o: normal/script.c + $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< + +grub_emu-normal_script.d: normal/script.c + set -e; $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,script\.o[ :]*,grub_emu-normal_script.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ + +-include grub_emu-normal_script.d + grub_emu-normal_main.o: normal/main.c $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< @@ -1291,10 +1299,10 @@ linux_mod_CFLAGS = $(COMMON_CFLAGS) # For normal.mod. -normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/main.c \ +normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/script.c normal/main.c \ normal/menu.c normal/arg.c normal/i386/setjmp.S -CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o normal_mod-normal_i386_setjmp.o def-normal.lst und-normal.lst -MOSTLYCLEANFILES += normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_arg.d normal_mod-normal_i386_setjmp.d +CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_script.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o normal_mod-normal_i386_setjmp.o def-normal.lst und-normal.lst +MOSTLYCLEANFILES += normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_script.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_arg.d normal_mod-normal_i386_setjmp.d DEFSYMFILES += def-normal.lst UNDSYMFILES += und-normal.lst @@ -1303,7 +1311,7 @@ $(LD) -r -d -o $@ $^ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@ -pre-normal.o: normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o normal_mod-normal_i386_setjmp.o +pre-normal.o: normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_script.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o normal_mod-normal_i386_setjmp.o -rm -f $@ $(LD) -r -d -o $@ $^ @@ -1336,6 +1344,14 @@ -include normal_mod-normal_command.d +normal_mod-normal_script.o: normal/script.c + $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $< + +normal_mod-normal_script.d: normal/script.c + set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,script\.o[ :]*,normal_mod-normal_script.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ + +-include normal_mod-normal_script.d + normal_mod-normal_main.o: normal/main.c $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $< diff -b -B -r -u -E -N -x '*~' -x '*.d' -x output.0 -x kernel_syms.lst -x symlist.c -x requests -x traces.0 --expand-tabs ./grub2pr/normal/menu.c ./grub2/normal/menu.c --- ./grub2pr/normal/menu.c 2005-01-29 14:55:55.000000000 +0100 +++ ./grub2/normal/menu.c 2005-01-29 15:00:11.000000000 +0100 @@ -239,42 +239,148 @@ static int run_menu (grub_menu_t menu, int nested) { - return script_list_execute(entry); -} + int first, offset; + unsigned long saved_time; -/* Run a menu entry. */ -static void -run_menu_entry (grub_menu_entry_t entry) -{ - grub_command_list_t cl; + first = 0; + offset = menu->default_entry; + if (offset > TERM_NUM_ENTRIES - 1) + { + first = offset - (TERM_NUM_ENTRIES - 1); + offset = TERM_NUM_ENTRIES - 1; + } + + /* Initialize the time. */ + saved_time = grub_get_rtc (); + + refresh: + grub_setcursor (0); + init_page (nested, 0); + print_entries (menu, first, offset); + grub_refresh (); + + while (1) + { + int c; + + if (menu->timeout > 0) + { + unsigned long current_time; - for (cl = entry->command_list; cl != 0; cl = cl->next) + current_time = grub_get_rtc (); + if (current_time - saved_time >= GRUB_TICKS_PER_SECOND) { - grub_command_t c; + menu->timeout--; + saved_time = current_time; + } + + grub_gotoxy (0, TERM_HEIGHT - 3); + /* NOTE: Do not remove the trailing space characters. + They are required to clear the line. */ + grub_printf ("\ + The highlighted entry will be booted automatically in %d seconds. ", + menu->timeout); + grub_gotoxy (TERM_CURSOR_X, TERM_FIRST_ENTRY_Y + offset); + grub_refresh (); + } - if (cl->command[0] == '\0') - /* Ignore an empty command line. */ - continue; + if (menu->timeout == 0) + return menu->default_entry; - c = grub_command_find (cl->command); - if (! c) + if (grub_checkkey () >= 0 || menu->timeout < 0) + { + c = GRUB_TERM_ASCII_CHAR (grub_getkey ()); + + if (menu->timeout >= 0) + { + grub_gotoxy (0, TERM_HEIGHT - 3); + grub_printf ("\ + "); + menu->timeout = -1; + menu->fallback_entry = -1; + grub_gotoxy (TERM_CURSOR_X, TERM_FIRST_ENTRY_Y + offset); + } + + switch (c) + { + case 16: + case '^': + if (offset > 0) + { + print_entry (TERM_FIRST_ENTRY_Y + offset, 0, + get_entry (menu, first + offset)); + offset--; + print_entry (TERM_FIRST_ENTRY_Y + offset, 1, + get_entry (menu, first + offset)); + } + else if (first > 0) + { + first--; + print_entries (menu, first, offset); + } break; - if (! (c->flags & GRUB_COMMAND_FLAG_CMDLINE)) + case 14: + case 'v': + if (menu->size > first + offset + 1) { - grub_error (GRUB_ERR_INVALID_COMMAND, - "invalid command `%s'", - cl->command); + if (offset < TERM_NUM_ENTRIES - 1) + { + print_entry (TERM_FIRST_ENTRY_Y + offset, 0, + get_entry (menu, first + offset)); + offset++; + print_entry (TERM_FIRST_ENTRY_Y + offset, 1, + get_entry (menu, first + offset)); + } + else + { + first++; + print_entries (menu, first, offset); + } + } break; + + case '\n': + case '\r': + case 6: + grub_setcursor (1); + return first + offset; + + case '\e': + if (nested) + { + grub_setcursor (1); + return -1; } + break; - if (! (c->flags & GRUB_COMMAND_FLAG_NO_ECHO)) - grub_printf ("%s\n", cl->command); + case 'c': + grub_setcursor (1); + grub_cmdline_run (1); + goto refresh; + + case 'e': + edit_menu_entry (get_entry (menu, first + offset)); + goto refresh; - if (grub_command_execute (cl->command) != 0) + default: break; } + grub_refresh (); + } + } + + /* Never reach here. */ + return -1; +} + +/* Run a menu entry. */ +static void +run_menu_entry (grub_menu_entry_t entry) +{ + + script_list_execute(entry); if (grub_errno == GRUB_ERR_NONE && grub_loader_is_loaded ()) /* Implicit execution of boot, only if something is loaded. */ grub_command_execute ("boot");