* DISTLIST: Added normal/completion.c.
* normal/completion.c: New file.
* term/i386/pc/console.c (grub_console_getwh): New function.
(grub_console_term): Assign grub_console_getwh to getwh.
* normal/cmdline.c (grub_tab_complete): Removed. Now the same
function is defined in normal/completion.c as
grub_normal_do_completion.
(grub_cmdline_get): Use grub_normal_do_completion instead of
grub_tab_complete.
* kern/partition.c (grub_partition_map_iterate): Return 1 if HOOK
returns non-zero, otherwise return 0.
(grub_partition_iterate): First, probe the partition map. Then,
call ITERATE only for this partition map.
* kern/misc.c (grub_strncmp): Rewritten.
* kern/disk.c (grub_disk_dev_iterate): Return 1 if P->ITERATE
returns non-zero. Otherwise return 0.
* include/grub/partition.h (grub_partition_map_iterate): Return
int instead of void.
* include/grub/normal.h (grub_normal_do_completion): New prototype.
* include/grub/misc.h (grub_strncmp): Change the type of N to
grub_size_t.
* include/grub/disk.h (grub_disk_dev_iterate): Return int instead
of void.
* normal/menu.c (draw_border): Cast GRUB_TERM_BORDER_WIDTH to
unsigned explictly before comparing it with I.
* kern/main.c (grub_env_write_root): Add the attribute unused into
VAR.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added
normal/completion.c.
(normal_mod_SOURCES): Likewise.
* conf/i386-pc.rmk (grub_emu_SOURCES): Likewise.
(normal_mod_SOURCES): Likewise.
* normal/command.c (grub_iterate_commands): If ITERATE returns
non-zero, return one immediately.
+2005-08-12 Yoshinori K. Okuji <okuji@enbug.org>
+
+ * DISTLIST: Added normal/completion.c.
+
+ * normal/completion.c: New file.
+
+ * term/i386/pc/console.c (grub_console_getwh): New function.
+ (grub_console_term): Assign grub_console_getwh to getwh.
+
+ * normal/cmdline.c (grub_tab_complete): Removed. Now the same
+ function is defined in normal/completion.c as
+ grub_normal_do_completion.
+ (grub_cmdline_get): Use grub_normal_do_completion instead of
+ grub_tab_complete.
+
+ * kern/partition.c (grub_partition_map_iterate): Return 1 if HOOK
+ returns non-zero, otherwise return 0.
+ (grub_partition_iterate): First, probe the partition map. Then,
+ call ITERATE only for this partition map.
+
+ * kern/misc.c (grub_strncmp): Rewritten.
+
+ * kern/disk.c (grub_disk_dev_iterate): Return 1 if P->ITERATE
+ returns non-zero. Otherwise return 0.
+
+ * include/grub/partition.h (grub_partition_map_iterate): Return
+ int instead of void.
+
+ * include/grub/normal.h (grub_normal_do_completion): New prototype.
+
+ * include/grub/misc.h (grub_strncmp): Change the type of N to
+ grub_size_t.
+
+ * include/grub/disk.h (grub_disk_dev_iterate): Return int instead
+ of void.
+
+ * normal/menu.c (draw_border): Cast GRUB_TERM_BORDER_WIDTH to
+ unsigned explictly before comparing it with I.
+
+ * kern/main.c (grub_env_write_root): Add the attribute unused into
+ VAR.
+
+ * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added
+ normal/completion.c.
+ (normal_mod_SOURCES): Likewise.
+ * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise.
+ (normal_mod_SOURCES): Likewise.
+
+ * normal/command.c (grub_iterate_commands): If ITERATE returns
+ non-zero, return one immediately.
+
2005-08-09 Vesa Jaaskelainen <chaac@nic.fi>
* conf/i386-pc.rmk (kernel_img_HEADERS): Added machine/vbe.h.
normal/arg.c
normal/cmdline.c
normal/command.c
+normal/completion.c
normal/context.c
normal/main.c
normal/menu.c
file.h fs.h kernel.h loader.h misc.h mm.h net.h partition.h \
pc_partition.h rescue.h symbol.h term.h types.h \
machine/biosdisk.h machine/boot.h machine/console.h machine/init.h \
- machine/memory.h machine/loader.h machine/time.h machine/vga.h
+ machine/memory.h machine/loader.h machine/time.h machine/vga.h \
+ machine/vbe.h
kernel_img_CFLAGS = $(COMMON_CFLAGS)
kernel_img_ASFLAGS = $(COMMON_ASFLAGS)
kernel_img_LDFLAGS = -nostdlib -Wl,-N,-Ttext,8200
kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \
kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \
kern/partition.c kern/rescue.c kern/term.c \
- normal/arg.c normal/cmdline.c normal/command.c normal/context.c \
- normal/main.c normal/menu.c normal/menu_entry.c \
+ normal/arg.c normal/cmdline.c normal/command.c \
+ normal/completion.c normal/context.c normal/main.c \
+ normal/menu.c normal/menu_entry.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \
util/console.c util/grub-emu.c util/misc.c \
util/i386/pc/biosdisk.c util/i386/pc/getroot.c \
util/i386/pc/misc.c
-CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o
-MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_i386_pc_halt.d grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_i386_pc_misc.d
+CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o
+MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_i386_pc_halt.d grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_i386_pc_misc.d
-grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o
+grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o
$(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS)
grub_emu-commands_boot.o: commands/boot.c
-include grub_emu-normal_command.d
+grub_emu-normal_completion.o: normal/completion.c
+ $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
+
+grub_emu-normal_completion.d: normal/completion.c
+ set -e; $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,completion\.o[ :]*,grub_emu-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_emu-normal_completion.d
+
grub_emu-normal_context.o: normal/context.c
$(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
# For normal.mod.
normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \
- normal/context.c normal/main.c normal/menu.c \
- normal/menu_entry.c normal/i386/setjmp.S
-CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o def-normal.lst und-normal.lst
-MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_i386_setjmp.d
+ normal/completion.c normal/context.c normal/main.c \
+ normal/menu.c normal/menu_entry.c normal/i386/setjmp.S
+CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o def-normal.lst und-normal.lst
+MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_completion.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_i386_setjmp.d
DEFSYMFILES += def-normal.lst
UNDSYMFILES += und-normal.lst
$(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_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o
+pre-normal.o: normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o
-rm -f $@
$(LD) -r -d -o $@ $^
set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1)
+normal_mod-normal_completion.o: normal/completion.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_completion.d: normal/completion.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,completion\.o[ :]*,normal_mod-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_completion.d
+
+CLEANFILES += cmd-completion.lst fs-completion.lst
+COMMANDFILES += cmd-completion.lst
+FSFILES += fs-completion.lst
+
+cmd-completion.lst: normal/completion.c gencmdlist.sh
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/gencmdlist.sh normal > $@ || (rm -f $@; exit 1)
+
+fs-completion.lst: normal/completion.c genfslist.sh
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1)
+
+
normal_mod-normal_context.o: normal/context.c
$(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \
kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \
kern/partition.c kern/rescue.c kern/term.c \
- normal/arg.c normal/cmdline.c normal/command.c normal/context.c \
- normal/main.c normal/menu.c normal/menu_entry.c \
+ normal/arg.c normal/cmdline.c normal/command.c \
+ normal/completion.c normal/context.c normal/main.c \
+ normal/menu.c normal/menu_entry.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \
util/console.c util/grub-emu.c util/misc.c \
util/i386/pc/biosdisk.c util/i386/pc/getroot.c \
# For normal.mod.
normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \
- normal/context.c normal/main.c normal/menu.c \
- normal/menu_entry.c normal/i386/setjmp.S
+ normal/completion.c normal/context.c normal/main.c \
+ normal/menu.c normal/menu_entry.c normal/i386/setjmp.S
normal_mod_CFLAGS = $(COMMON_CFLAGS)
normal_mod_ASFLAGS = $(COMMON_ASFLAGS)
kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \
kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \
kern/partition.c kern/rescue.c kern/term.c \
- normal/arg.c normal/cmdline.c normal/command.c normal/context.c \
+ normal/arg.c normal/cmdline.c normal/command.c \
+ normal/completion.c normal/context.c \
normal/main.c normal/menu.c normal/menu_entry.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \
util/console.c util/grub-emu.c util/misc.c \
util/i386/pc/biosdisk.c util/i386/pc/getroot.c \
util/powerpc/ieee1275/misc.c
-CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
-MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d
+CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
+MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d
-grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
+grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
$(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS)
grub_emu-commands_boot.o: commands/boot.c
-include grub_emu-normal_command.d
+grub_emu-normal_completion.o: normal/completion.c
+ $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
+
+grub_emu-normal_completion.d: normal/completion.c
+ set -e; $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,completion\.o[ :]*,grub_emu-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_emu-normal_completion.d
+
grub_emu-normal_context.o: normal/context.c
$(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
# For normal.mod.
normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \
- normal/context.c normal/main.c normal/menu.c \
- normal/menu_entry.c \
- normal/powerpc/setjmp.S
-CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o def-normal.lst und-normal.lst
-MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_powerpc_setjmp.d
+ normal/completion.c normal/context.c normal/main.c \
+ normal/menu.c normal/menu_entry.c normal/powerpc/setjmp.S
+CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o def-normal.lst und-normal.lst
+MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_completion.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_powerpc_setjmp.d
DEFSYMFILES += def-normal.lst
UNDSYMFILES += und-normal.lst
$(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_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o
+pre-normal.o: normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o
-rm -f $@
$(LD) -r -d -o $@ $^
set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1)
+normal_mod-normal_completion.o: normal/completion.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_completion.d: normal/completion.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,completion\.o[ :]*,normal_mod-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_completion.d
+
+CLEANFILES += cmd-completion.lst fs-completion.lst
+COMMANDFILES += cmd-completion.lst
+FSFILES += fs-completion.lst
+
+cmd-completion.lst: normal/completion.c gencmdlist.sh
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/gencmdlist.sh normal > $@ || (rm -f $@; exit 1)
+
+fs-completion.lst: normal/completion.c genfslist.sh
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1)
+
+
normal_mod-normal_context.o: normal/context.c
$(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \
kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \
kern/partition.c kern/rescue.c kern/term.c \
- normal/arg.c normal/cmdline.c normal/command.c normal/context.c \
+ normal/arg.c normal/cmdline.c normal/command.c \
+ normal/completion.c normal/context.c \
normal/main.c normal/menu.c normal/menu_entry.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \
util/console.c util/grub-emu.c util/misc.c \
# For normal.mod.
normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \
- normal/context.c normal/main.c normal/menu.c \
- normal/menu_entry.c \
- normal/powerpc/setjmp.S
+ normal/completion.c normal/context.c normal/main.c \
+ normal/menu.c normal/menu_entry.c normal/powerpc/setjmp.S
normal_mod_CFLAGS = $(COMMON_CFLAGS)
normal_mod_ASFLAGS = $(COMMON_ASFLAGS)
void EXPORT_FUNC(grub_disk_dev_register) (grub_disk_dev_t dev);
void EXPORT_FUNC(grub_disk_dev_unregister) (grub_disk_dev_t dev);
-void EXPORT_FUNC(grub_disk_dev_iterate) (int (*hook) (const char *name));
+int EXPORT_FUNC(grub_disk_dev_iterate) (int (*hook) (const char *name));
grub_disk_t EXPORT_FUNC(grub_disk_open) (const char *name);
void EXPORT_FUNC(grub_disk_close) (grub_disk_t disk);
int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n);
int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2);
-int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, int c);
+int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, grub_size_t n);
int EXPORT_FUNC(grub_strncasecmp) (const char *s1, const char *s2, int c);
char *EXPORT_FUNC(grub_strchr) (const char *s, int c);
char *EXPORT_FUNC(grub_strrchr) (const char *s, int c);
grub_menu_t grub_context_get_current_menu (void);
grub_menu_t grub_context_push_menu (grub_menu_t menu);
void grub_context_pop_menu (void);
+char *grub_normal_do_completion (char *buf, int *restore);
#ifdef GRUB_UTIL
void grub_normal_init (void);
int (*hook) (const grub_partition_t partition));
char *EXPORT_FUNC(grub_partition_get_name) (const grub_partition_t partition);
-void EXPORT_FUNC(grub_partition_map_iterate) (int (*hook) (const grub_partition_map_t partmap));
+int EXPORT_FUNC(grub_partition_map_iterate) (int (*hook) (const grub_partition_map_t partmap));
void EXPORT_FUNC(grub_partition_map_register) (grub_partition_map_t partmap);
}
}
-void
+int
grub_disk_dev_iterate (int (*hook) (const char *name))
{
grub_disk_dev_t p;
for (p = grub_disk_dev_list; p; p = p->next)
if ((p->iterate) (hook))
- break;
+ return 1;
+
+ return 0;
}
grub_disk_t
/* Write hook for the environment variables of root. Remove surrounding
parentheses, if any. */
static char *
-grub_env_write_root (struct grub_env_var *var, const char *val)
+grub_env_write_root (struct grub_env_var *var __attribute__ ((unused)),
+ const char *val)
{
/* XXX Is it better to check the existence of the device? */
grub_size_t len = grub_strlen (val);
}
int
-grub_strncmp (const char *s1, const char *s2, int c)
+grub_strncmp (const char *s1, const char *s2, grub_size_t n)
{
- int p = 1;
-
- while (*s1 && *s2 && p < c)
+ if (n == 0)
+ return 0;
+
+ while (*s1 && *s2 && --n)
{
if (*s1 != *s2)
return (int) *s1 - (int) *s2;
s1++;
s2++;
- p++;
}
return (int) *s1 - (int) *s2;
}
}
-void
+int
grub_partition_map_iterate (int (*hook) (const grub_partition_map_t partmap))
{
grub_partition_map_t p;
for (p = grub_partition_map_list; p; p = p->next)
if (hook (p))
- break;
+ return 1;
+
+ return 0;
}
grub_partition_t
grub_partition_iterate (struct grub_disk *disk,
int (*hook) (const grub_partition_t partition))
{
- auto int part_map_iterate (const grub_partition_map_t partmap);
+ grub_partition_map_t partmap = 0;
- int part_map_iterate (const grub_partition_map_t partmap)
+ auto int part_map_iterate (const grub_partition_map_t p);
+ auto int part_map_iterate_hook (const grub_partition_t partition);
+
+ int part_map_iterate_hook (const grub_partition_t partition __attribute__ ((unused)))
{
- grub_err_t err = partmap->iterate (disk, hook);
+ return 1;
+ }
+
+ int part_map_iterate (const grub_partition_map_t p)
+ {
+ grub_err_t err = p->iterate (disk, part_map_iterate_hook);
- if (err == GRUB_ERR_BAD_PART_TABLE)
+ if (err != GRUB_ERR_NONE)
{
/* Continue to next partition map type. */
grub_errno = GRUB_ERR_NONE;
return 0;
}
+ partmap = p;
return 1;
}
grub_partition_map_iterate (part_map_iterate);
+ if (partmap)
+ partmap->iterate (disk, hook);
+
return grub_errno;
}
hist_lines[pos] = grub_strdup (s);
}
-/* Try to complete the string in BUF, return the characters that
- should be added to the string. This command outputs the possible
- completions, in that case set RESTORE to 1 so the caller can
- restore the prompt. */
-static char *
-grub_tab_complete (char *buf, int *restore)
-{
- char *pos = buf;
- char *path;
-
- char *found = 0;
- int begin;
- int end;
- int len;
- int numfound = 0;
-
- /* The disk that is used for grub_partition_iterate. */
- grub_device_t partdev;
-
- /* String that is added when matched. */
- char *matchstr;
-
- auto void print_simple_completion (char *comp);
- auto void print_partition_completion (char *comp);
- auto int NESTED_FUNC_ATTR add_completion (const char *comp, const char *match,
- const char *what,
- void (*print_completion) (char *));
- auto int iterate_commands (grub_command_t cmd);
- auto int iterate_dev (const char *devname);
- auto int iterate_part (const grub_partition_t p);
- auto int iterate_dir (const char *filename, int dir);
-
-
-
- void print_simple_completion (char *comp)
- {
- grub_printf (" %s", comp);
- }
-
- void print_partition_completion (char *comp)
- {
- grub_print_partinfo (partdev, comp);
- grub_errno = 0;
- }
-
- /* Add a string to the list of possible completions. COMP is the
- string that should be added. If this string completely matches
- add the string MATCH to the input after adding COMP. The string
- WHAT contains a discription of the kind of data that is added.
- Use PRINT_COMPLETION to show the completions if there are
- multiple matches. XXX: Because of a bug in gcc it is required to
- use __regparm__ in some cases. */
-
- int NESTED_FUNC_ATTR add_completion (const char *comp, const char *match,
- const char *what,
- void (*print_completion) (char *))
- {
- /* Bug in strncmp then len ==0. */
- if (!len || grub_strncmp (pos, comp, len) == 0)
- {
- numfound++;
-
- if (numfound == 1)
- {
- begin = len;
- found = grub_strdup (comp);
- end = grub_strlen (found);
- matchstr = (char *) match;
- }
- /* Multiple matches found, print the first instead of completing. */
- else if (numfound == 2)
- {
- grub_printf ("\nPossible %s are:\n", what);
- print_completion (found);
- }
-
- if (numfound > 1)
- {
- char *s1 = found;
- const char *s2 = comp;
- int cnt = 0;
-
- print_completion ((char *) comp);
-
- /* Find out how many characters match. */
- while ((cnt < end) && *s1 && *s2 && (*s1 == *s2))
- {
- s1++;
- s2++;
- cnt++;
- }
- end = cnt;
- }
- }
-
- return 0;
- }
-
- int iterate_part (const grub_partition_t p)
- {
- add_completion (grub_partition_get_name (p), ")", "partitions",
- print_partition_completion);
- return 0;
- }
-
- int iterate_dir (const char *filename, int dir)
- {
- if (!dir)
- add_completion (filename, " ", "files", print_simple_completion);
- else
- {
- char fname[grub_strlen (filename) + 2];
- grub_strcpy (fname, filename);
- grub_sprintf (fname, "%s/", filename);
- add_completion (fname, "", "files", print_simple_completion);
- }
- return 0;
- }
-
- int iterate_dev (const char *devname)
- {
- grub_device_t dev;
-
- /* Complete the partition part. */
- dev = grub_device_open (devname);
-
- if (dev)
- {
- if (dev->disk && dev->disk->has_partitions)
- add_completion (devname, ",", "disks", print_simple_completion);
- else
- add_completion (devname, ")", "disks", print_simple_completion);
- }
-
- grub_errno = GRUB_ERR_NONE;
- return 0;
- }
-
- int iterate_commands (grub_command_t cmd)
- {
- if (grub_command_find (cmd->name))
- {
- if (cmd->flags & GRUB_COMMAND_FLAG_CMDLINE)
- add_completion (cmd->name, " ", "commands",
- print_simple_completion);
- }
- return 0;
- }
-
- /* Remove blank space on the beginning of the line. */
- while (*pos == ' ')
- pos++;
-
- /* Check if the string is a command or path. */
- path = grub_strchr (pos, ' ');
-
- if (!path)
- {
- /* Tab complete a command. */
- len = grub_strlen (pos);
-
- grub_iterate_commands (iterate_commands);
- }
- else
- {
- pos = path;
-
- /* Remove blank space on the beginning of the line. */
- while (*pos == ' ')
- pos++;
-
- /* Check if this is a completion for a device name. */
- if (*pos == '(' && !grub_strchr (pos, ')'))
- {
- /* Check if this is a device or partition. */
- char *partition = grub_strchr (++pos, ',');
-
- if (!partition)
- {
- /* Complete the disk part. */
- len = grub_strlen (pos);
- grub_disk_dev_iterate (iterate_dev);
- if (grub_errno)
- goto fail;
- }
- else
- {
- *partition = '\0';
-
- /* Complete the partition part. */
- partdev = grub_device_open (pos);
- *partition = ',';
- grub_errno = GRUB_ERR_NONE;
-
- if (partdev)
- {
- if (partdev->disk && partdev->disk->has_partitions)
- {
- pos = partition + 1;
- len = grub_strlen (pos);
-
- grub_partition_iterate (partdev->disk, iterate_part);
- if (grub_errno)
- grub_errno = 0;
- }
-
- grub_device_close (partdev);
- }
- else
- goto fail;
- }
- }
- else
- {
- char *device = grub_file_get_device_name (pos);
- grub_device_t dev;
- grub_fs_t fs;
-
- dev = grub_device_open (device);
- if (!dev)
- goto fail;
-
- fs = grub_fs_probe (dev);
- if (grub_errno)
- goto fail;
-
- pos = grub_strrchr (pos, '/');
- if (pos)
- {
- char *dir;
- char *dirfile;
- pos++;
- len = grub_strlen (pos);
-
- dir = grub_strchr (path, '/');
- if (!dir)
- {
- *restore = 0;
- return 0;
- }
-
- dir = grub_strdup (dir);
-
- /* Cut away the filename part. */
- dirfile = grub_strrchr (dir, '/');
- dirfile[1] = '\0';
-
- /* Tab complete a file. */
- (fs->dir) (dev, dir, iterate_dir);
- if (dev)
- grub_device_close (dev);
-
- grub_free (device);
- grub_free (dir);
-
- if (grub_errno)
- goto fail;
- }
- else
- {
- found = grub_strdup ("/");
- matchstr = "";
- numfound = 1;
- begin = 0;
- end = 1;
- }
- }
-
- }
-
- /* If more than one match is found those matches will be printed and
- the prompt should be restored. */
- if (numfound > 1)
- *restore = 1;
- else
- *restore = 0;
-
- /* Return the part that matches. */
- if (end && found)
- {
- char *insert;
- insert = grub_malloc (end - begin + 1 + sizeof (matchstr));
- grub_strncpy (insert, found + begin, end - begin);
- insert[end - begin] = '\0';
- if (numfound == 1)
- grub_strcat (insert, matchstr);
- grub_free (found);
-
- return insert;
- }
-
- fail:
- grub_free (found);
- grub_errno = GRUB_ERR_NONE;
-
- return 0;
-}
-
void
grub_cmdline_run (int nested)
{
buf[lpos] = '\0';
- insert = grub_tab_complete (buf, &restore);
+ insert = grub_normal_do_completion (buf, &restore);
/* Restore the original string. */
buf[lpos] = backup;
grub_iterate_commands (int (*iterate) (grub_command_t))
{
grub_command_t cmd;
+
for (cmd = grub_command_list; cmd; cmd = cmd->next)
- iterate (cmd);
+ if (iterate (cmd))
+ return 1;
+
return 0;
}
grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y);
grub_putcode (GRUB_TERM_DISP_UL);
- for (i = 0; i < GRUB_TERM_BORDER_WIDTH - 2; i++)
+ for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++)
grub_putcode (GRUB_TERM_DISP_HLINE);
grub_putcode (GRUB_TERM_DISP_UR);
grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + 1);
grub_putcode (GRUB_TERM_DISP_LL);
- for (i = 0; i < GRUB_TERM_BORDER_WIDTH - 2; i++)
+ for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++)
grub_putcode (GRUB_TERM_DISP_HLINE);
grub_putcode (GRUB_TERM_DISP_LR);
return (x << 8) | y;
}
+static grub_uint16_t
+grub_ncurses_getwh (void)
+{
+ int x;
+ int y;
+
+ getmaxyx (stdscr, y, x);
+
+ return (x << 8) | y;
+}
+
static void
grub_ncurses_gotoxy (grub_uint8_t x, grub_uint8_t y)
{
.checkkey = grub_ncurses_checkkey,
.getkey = grub_ncurses_getkey,
.getxy = grub_ncurses_getxy,
+ .getwh = grub_ncurses_getwh,
.gotoxy = grub_ncurses_gotoxy,
.cls = grub_ncurses_cls,
.setcolorstate = grub_ncurses_setcolorstate,