Help message changes, and a little fix for partition hiding.

This commit is contained in:
gord 1999-09-10 05:06:00 +00:00
parent 82889257ad
commit 99c588976f
5 changed files with 385 additions and 400 deletions

194
ChangeLog
View file

@ -1,3 +1,19 @@
1999-09-09 Gordon Matzigkeit <gord@fig.org>
* docs/grub.texi (Commands): Synchronize descriptions with
builtins.c.
* stage2/builtins.c (hide_func): Use set_partition_hidden_flag.
(unhide_func): Likewise.
Many help message cleanups. From Pavel Roskin.
* stage2/shared.h (set_partition_hidden_flag): Declare.
* stage2/disk_io.c (set_partition_hidden_flag): New function
merged from hide_partition and unhide_partition. Make sure we OR
with the inverse of the flag bit rather than XORing to unhide the
partition.
1999-09-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/asmstub.c (_FILE_OFFSET_BITS): Defined. * grub/asmstub.c (_FILE_OFFSET_BITS): Defined.
@ -5,7 +21,7 @@
instead of int to lseek, and compare the return value with instead of int to lseek, and compare the return value with
OFFSET. Reported by Pavel Roskin. OFFSET. Reported by Pavel Roskin.
(grub_stage2) [!__linux__ && !__GNU__]: Print a warning message. (grub_stage2) [!__linux__ && !__GNU__]: Print a warning message.
1999-09-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/stage2.c (run_menu): If run_script is successfully * stage2/stage2.c (run_menu): If run_script is successfully
@ -14,13 +30,13 @@
zero. zero.
* stage2/cmdline.c (run_script): If ERRNUM is non-zero, wait an * stage2/cmdline.c (run_script): If ERRNUM is non-zero, wait an
input character, whether FALLBACK is less than zero or not. input character, whether FALLBACK is less than zero or not.
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/builtins.c (configfile_func): New function. * stage2/builtins.c (configfile_func): New function.
(builtin_configfile): New variable. (builtin_configfile): New variable.
(builtin_table): Added the pointer to BUILTIN_CONFIGFILE. (builtin_table): Added the pointer to BUILTIN_CONFIGFILE.
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Pavel Roskin: From Pavel Roskin:
@ -35,12 +51,12 @@
(imps_lapic_addr): Likewise. (imps_lapic_addr): Likewise.
(imps_cpu_apic_map): Likewise. (imps_cpu_apic_map): Likewise.
(imps_apic_cpu_map): Likewise. (imps_apic_cpu_map): Likewise.
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/builtins.c (testload_func): Fix the typos: 0x2000000 -> * stage2/builtins.c (testload_func): Fix the typos: 0x2000000 ->
0x200000 and 0x3000000 -> 0x300000. 0x200000 and 0x3000000 -> 0x300000.
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Hisazumi Kenji <nel@soraneko.com>: From Hisazumi Kenji <nel@soraneko.com>:
@ -50,7 +66,7 @@
(MAPBUF_LEN): Likewise. (MAPBUF_LEN): Likewise.
(ffs_mount): Set MAPBLOCK_OFFSET to -1. (ffs_mount): Set MAPBLOCK_OFFSET to -1.
(block_map): Added partial read support. (block_map): Added partial read support.
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/cmdline.c (find_command): If COMMAND is less than * stage2/cmdline.c (find_command): If COMMAND is less than
@ -72,7 +88,7 @@
(builtin_testload): Likewise. (builtin_testload): Likewise.
(builtin_unhide): Likewise. (builtin_unhide): Likewise.
(builtin_uppermem): Likewise. (builtin_uppermem): Likewise.
1999-09-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
The internal of the command handling is heavily modified, and The internal of the command handling is heavily modified, and
@ -154,7 +170,7 @@
new builtin commands interface. new builtin commands interface.
Run enter_cmdline forever. Run enter_cmdline forever.
If run_menu returns, restart the loop. If run_menu returns, restart the loop.
1999-09-04 Pavel Roskin <pavel_roskin@geocities.com> 1999-09-04 Pavel Roskin <pavel_roskin@geocities.com>
* docs/menu.lst: More meaningful examples. Not using (0x80,0) * docs/menu.lst: More meaningful examples. Not using (0x80,0)
@ -167,26 +183,26 @@
stage2. stage2.
* stage2/gunzip.c [NO_DECOMPRESSION]: Disable all code if * stage2/gunzip.c [NO_DECOMPRESSION]: Disable all code if
decompression is disabled. decompression is disabled.
1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/boot.c (load_image): Use PHDR->P_PADDR instead of * stage2/boot.c (load_image): Use PHDR->P_PADDR instead of
PHDR->P_VADDR. Reported by Ramon van Handel <vhandel@chem.vu.nl>. PHDR->P_VADDR. Reported by Ramon van Handel <vhandel@chem.vu.nl>.
1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* docs/help2man: Upgraded to 1.013. * docs/help2man: Upgraded to 1.013.
* docs/grub.8: Regenerated. * docs/grub.8: Regenerated.
1999-09-02 Pavel Roskin <pavel_roskin@geocities.com> 1999-09-02 Pavel Roskin <pavel_roskin@geocities.com>
* stage2/cmdline.c (enter_cmdline) [GRUB_UTIL]: Add a space in * stage2/cmdline.c (enter_cmdline) [GRUB_UTIL]: Add a space in
the LBA warning message. the LBA warning message.
1999-09-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
The character `=' after a command is now optional. The character `=' after a command is now optional.
* stage2/char_io.c (get_cmdline): Search for a space or a equal * stage2/char_io.c (get_cmdline): Search for a space or a equal
character after the first word in CMDLINE when TAB lists character after the first word in CMDLINE when TAB lists
completions, instead of just searching for a eqaul character. completions, instead of just searching for a eqaul character.
@ -195,26 +211,26 @@
(commands): Delete all the equal characters. (commands): Delete all the equal characters.
* docs/menu.lst: Likewise. * docs/menu.lst: Likewise.
* docs/grub.texi: Likewise. * docs/grub.texi: Likewise.
1999-09-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-09-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/asmstub.c (env_for_exit): New variable. * grub/asmstub.c (env_for_exit): New variable.
(grub_stage2): Do a setjmp in doit, and when it returns (grub_stage2): Do a setjmp in doit, and when it returns
non-zero, set STATUS to 1 if ERRNUM is non-zero. non-zero, set STATUS to 1 if ERRNUM is non-zero.
(stop): Call longjmp instead of exit. (stop): Call longjmp instead of exit.
1999-08-31 Pavel Roskin <pavel_roskin@geocities.com> 1999-08-31 Pavel Roskin <pavel_roskin@geocities.com>
* stage2/boot.c [GRUB_UTIL] (bsd_boot_entry): New function. * stage2/boot.c [GRUB_UTIL] (bsd_boot_entry): New function.
(bsd_boot) [GRUB_UTIL]: Set ENTRY_ADDR to BSD_BOOT_ENTRY to fake (bsd_boot) [GRUB_UTIL]: Set ENTRY_ADDR to BSD_BOOT_ENTRY to fake
the *BSD boot. the *BSD boot.
1999-08-31 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-31 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/fsys_fat.c (fat_create_blocklist): Cast FAT_BUF to * stage2/fsys_fat.c (fat_create_blocklist): Cast FAT_BUF to
unsigned short * instead of unsigned long *. Suggested by Pavel unsigned short * instead of unsigned long *. Suggested by Pavel
Roskin. Roskin.
1999-08-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Edward Killips <ekillips@triton.net>: From Edward Killips <ekillips@triton.net>:
@ -223,7 +239,7 @@
* stage2/disk_io.c (unhide_partition): New function. * stage2/disk_io.c (unhide_partition): New function.
(hide_partition): Likewise. (hide_partition): Likewise.
* stage2/pc_slice.h (PC_SLICE_TYPE_HIDDEN_FLAG): New macro. * stage2/pc_slice.h (PC_SLICE_TYPE_HIDDEN_FLAG): New macro.
1999-08-29 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-29 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Pavel Roskin <pavel_roskin@geocities.com>: From Pavel Roskin <pavel_roskin@geocities.com>:
@ -233,7 +249,7 @@
MINIX_SUPER_MAGIC, and set NAMELEN to 30 if it is MINIX_SUPER_MAGIC, and set NAMELEN to 30 if it is
MINIX_SUPER_MAGIC2. MINIX_SUPER_MAGIC2.
(minix_dir): Use NAMELEN instead of MINIX_NAME_LEN. (minix_dir): Use NAMELEN instead of MINIX_NAME_LEN.
1999-08-29 Pavel Roskin <pavel_roslin@geocities.com> 1999-08-29 Pavel Roskin <pavel_roslin@geocities.com>
* grub/Makefile.am, stage1/Makefile.am, stage2/Makefile.am: * grub/Makefile.am, stage1/Makefile.am, stage2/Makefile.am:
@ -244,7 +260,7 @@
* stage2/fsys_fat.c (fat_create_blocklist): Return 1 for the * stage2/fsys_fat.c (fat_create_blocklist): Return 1 for the
root directory on FAT12 and FAT16. root directory on FAT12 and FAT16.
1999-08-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/boot.c (load_image): Accept two arguments, KERNEL and * stage2/boot.c (load_image): Accept two arguments, KERNEL and
@ -259,7 +275,7 @@
HEAP for the Multiboot command-line buffer. HEAP for the Multiboot command-line buffer.
* stage2/shared.h (MB_CMDLINE_BUF): New macro. * stage2/shared.h (MB_CMDLINE_BUF): New macro.
(MB_CMDLINE_BUFLEN): Likewise. (MB_CMDLINE_BUFLEN): Likewise.
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* docs/Makefile.am [GRUB_MAINT] (grub.8): The argument for the * docs/Makefile.am [GRUB_MAINT] (grub.8): The argument for the
@ -267,7 +283,7 @@
* docs/grub.8: Regenerated. * docs/grub.8: Regenerated.
* docs/grub.texi: Do not use the name "the Stage 2 emulator" any * docs/grub.texi: Do not use the name "the Stage 2 emulator" any
more. Use the name "the grub shell" instead. more. Use the name "the grub shell" instead.
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Klaus Reichl <klaus.reichl@alcatel.at>: From Klaus Reichl <klaus.reichl@alcatel.at>:
@ -291,7 +307,7 @@
STAGE2_ID_MINIX_STAGE1_5. STAGE2_ID_MINIX_STAGE1_5.
* grub/Makefile.am (AM_CFLAGS): Added -DFSYS_MINIX=1. * grub/Makefile.am (AM_CFLAGS): Added -DFSYS_MINIX=1.
* configure.in (--disable-minix): New option. * configure.in (--disable-minix): New option.
1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Jochen Hoenicke <jochen@gnu.org>: From Jochen Hoenicke <jochen@gnu.org>:
@ -316,7 +332,7 @@
(PC_SLICE_TYPE_FAT32_LBA): Likewise. (PC_SLICE_TYPE_FAT32_LBA): Likewise.
(PC_SLICE_TYPE_FAT16_LBA): Likewise. (PC_SLICE_TYPE_FAT16_LBA): Likewise.
(IS_PC_SLICE_TYPE_FAT): Likewise. (IS_PC_SLICE_TYPE_FAT): Likewise.
1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/fsys_ffs.c (ffs_mount): Do not shift the fs type * stage2/fsys_ffs.c (ffs_mount): Do not shift the fs type
@ -324,12 +340,12 @@
<takehiro@coral.ocn.ne.jp>. <takehiro@coral.ocn.ne.jp>.
* stage2/fsys_fat.c (fat_mount): Do not shift the fs type * stage2/fsys_fat.c (fat_mount): Do not shift the fs type
FS_MSDOS. FS_MSDOS.
1999-08-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Pavel Roskin's patch that adds new options to disable arbitrary Pavel Roskin's patch that adds new options to disable arbitrary
filesystems is heavily modified and applied. filesystems is heavily modified and applied.
* configure.in (--disable-ext2fs): New option. * configure.in (--disable-ext2fs): New option.
(--disable-fat): Likewise. (--disable-fat): Likewise.
(--disable-ffs): Likewise. (--disable-ffs): Likewise.
@ -338,14 +354,14 @@
-DFSYS_FAT=1 and -DFSYS_FFS=1. -DFSYS_FAT=1 and -DFSYS_FFS=1.
* stage2/Makefile.am (libgrub_a_CFLAGS): Likewise. * stage2/Makefile.am (libgrub_a_CFLAGS): Likewise.
(stage2_exec_CFLAGS): Added @FSYS_CFLAGS@. (stage2_exec_CFLAGS): Added @FSYS_CFLAGS@.
* stage2/filesys.h * stage2/filesys.h
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FFS): Deleted. [!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FFS): Deleted.
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FAT): Likewise. [!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FAT): Likewise.
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_EXT2FS): Likewise. [!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_EXT2FS): Likewise.
* stage2/fsys_ext2fs.c [!FSYS_EXT2FS]: Do not define anything. * stage2/fsys_ext2fs.c [!FSYS_EXT2FS]: Do not define anything.
* stage2/fsys_fat.c [!FSYS_FAT]: Likewise. * stage2/fsys_fat.c [!FSYS_FAT]: Likewise.
* stage2/fsys_ffs.c [!FSYS_FFS]: Likewise. * stage2/fsys_ffs.c [!FSYS_FFS]: Likewise.
1999-08-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage1/stage1_lba.S: Use STAGE1_DRP_ADDR for the address of * stage1/stage1_lba.S: Use STAGE1_DRP_ADDR for the address of
@ -353,7 +369,7 @@
(drive_parameter): Deleted. (drive_parameter): Deleted.
* stage1/stage1.h (STAGE1_DRP_ADDR): New macro. * stage1/stage1.h (STAGE1_DRP_ADDR): New macro.
(STAGE1_DRP_SIZE): Likewise. (STAGE1_DRP_SIZE): Likewise.
1999-08-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/bios.c (get_diskinfo): In LBA mode, set TOTAL_SECTORS * stage2/bios.c (get_diskinfo): In LBA mode, set TOTAL_SECTORS
@ -365,11 +381,11 @@
* stage2/shared.h (device_map): Declared. * stage2/shared.h (device_map): Declared.
* grub/asmstub.c (device_map): Defined as a global variable * grub/asmstub.c (device_map): Defined as a global variable
instead of a local variable. instead of a local variable.
1999-08-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Support the NetBSD and OpenBSD partition slices. Support the NetBSD and OpenBSD partition slices.
* stage2/pc_slice.h (PC_SLICE_TYPE_BSD): Deleted. * stage2/pc_slice.h (PC_SLICE_TYPE_BSD): Deleted.
(PC_SLICE_TYPE_FREEBSD): New macro. (PC_SLICE_TYPE_FREEBSD): New macro.
(PC_SLICE_TYPE_OPENBSD): Likewise. (PC_SLICE_TYPE_OPENBSD): Likewise.
@ -387,19 +403,19 @@
(real_open_partition): Use the macro IS_PC_SLICE_TYPE_BSD instead (real_open_partition): Use the macro IS_PC_SLICE_TYPE_BSD instead
of checking if CURRENT_SLICE is equal to the BSD partition type of checking if CURRENT_SLICE is equal to the BSD partition type
directly. directly.
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/cmdline.c (commands): Added geometry. * stage2/cmdline.c (commands): Added geometry.
(enter_cmdline): If CUR_HEAP has the string "geometry", print (enter_cmdline): If CUR_HEAP has the string "geometry", print
out the information about a drive that the argument represents. out the information about a drive that the argument represents.
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/stage2.c (run_menu): Terminate the string PASSWORD * stage2/stage2.c (run_menu): Terminate the string PASSWORD
before checking if ENTERED is identical to PASSWORD. Reported before checking if ENTERED is identical to PASSWORD. Reported
by Mark Lundeberg <aa026@pgfn.bc.ca>. by Mark Lundeberg <aa026@pgfn.bc.ca>.
1999-08-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/stage2.c (set_line_normal): New function. * stage2/stage2.c (set_line_normal): New function.
@ -410,7 +426,7 @@
From Pavel Roskin: From Pavel Roskin:
* stage2/stage2.c (run_menu) [GRUB_UTIL]: Quit when pushing the * stage2/stage2.c (run_menu) [GRUB_UTIL]: Quit when pushing the
key `q'. key `q'.
1999-08-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* acinclude.m4 (grub_ASM_PREFIX_REQUIREMENT): New function. * acinclude.m4 (grub_ASM_PREFIX_REQUIREMENT): New function.
@ -418,35 +434,35 @@
ADDR32 and DATA32 based on the result. ADDR32 and DATA32 based on the result.
* stage2/asm.S: Replace addr32 and data32 prefixes with ADDR32 * stage2/asm.S: Replace addr32 and data32 prefixes with ADDR32
and DATA32 respectively. and DATA32 respectively.
1999-08-05 Pavel Roskin <pavel_roskin@geocities.com> 1999-08-05 Pavel Roskin <pavel_roskin@geocities.com>
* stage2/boot.c (load_image): Use RAW_ADDR macro when loading * stage2/boot.c (load_image): Use RAW_ADDR macro when loading
an a.out kernel. an a.out kernel.
1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/asm.S: Make each of the addr32 and data32 prefixes * stage2/asm.S: Make each of the addr32 and data32 prefixes
appear in the same line as it modifies, as the gas manual in appear in the same line as it modifies, as the gas manual in
binutils-2.9.5.0.4 says "it must be in the same line". binutils-2.9.5.0.4 says "it must be in the same line".
1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* boot.c (load_image): Fix a strcmp test. Reported by Pavel * boot.c (load_image): Fix a strcmp test. Reported by Pavel
Roskin <pavel_roskin@geocities.com>. Roskin <pavel_roskin@geocities.com>.
1999-08-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-08-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From "Dan J. Walters" <djw@cs.utexas.edu>: From "Dan J. Walters" <djw@cs.utexas.edu>:
* stage2/i386-elf.h (EI_BRAND): New macro. * stage2/i386-elf.h (EI_BRAND): New macro.
* stage2/boot.c (load_image): If the kernel is ELF, check if it * stage2/boot.c (load_image): If the kernel is ELF, check if it
is a FreeBSD kernel as well as a Multiboot kernel, and if it is is a FreeBSD kernel as well as a Multiboot kernel, and if it is
a FreeBSD kernel, then mask ENTRY_ADDR since FreeBSD requires a FreeBSD kernel, then mask ENTRY_ADDR since FreeBSD requires
that. Likewise, mask MEMADDR. that. Likewise, mask MEMADDR.
(bsd_boot): Set the bi_symtab and the bi_esymtab members of BI (bsd_boot): Set the bi_symtab and the bi_esymtab members of BI
only if MBI.FLAGS has the flag MB_INFO_AOUT_SYMS. Otherwise, only if MBI.FLAGS has the flag MB_INFO_AOUT_SYMS. Otherwise,
clear them. clear them.
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Pavel Roskin <pavel_roskin@geocities.com>: From Pavel Roskin <pavel_roskin@geocities.com>:
@ -458,13 +474,13 @@
* configure.in: Check for string.h and strings.h. * configure.in: Check for string.h and strings.h.
* grub/asmstub.c (grub_stage2): Fix a misordering in the output * grub/asmstub.c (grub_stage2): Fix a misordering in the output
format of the inline assembly. format of the inline assembly.
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Pavel Roskin <pavel_roskin@geocities.com>: From Pavel Roskin <pavel_roskin@geocities.com>:
* stage2/asm.S (get_diskinfo_standard): If the number of sectors * stage2/asm.S (get_diskinfo_standard): If the number of sectors
returned is zero, then return an error code, even if non-carrier. returned is zero, then return an error code, even if non-carrier.
1999-07-15 Gordon Matzigkeit <gord@zen.fig.org> 1999-07-15 Gordon Matzigkeit <gord@zen.fig.org>
* docs/Makefile.am (grub.info): Use an ugly hack to downgrade * docs/Makefile.am (grub.info): Use an ugly hack to downgrade
@ -478,7 +494,7 @@
* grub/main.c (main): Call printf instead of grub_printf. * grub/main.c (main): Call printf instead of grub_printf.
Reported by Klaus Reichl <a8709182@unet.univie.ac.at>. Reported by Klaus Reichl <a8709182@unet.univie.ac.at>.
1999-07-15 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-15 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/cmdline.c (skip_to): Don't increase CMDLINE if the * stage2/cmdline.c (skip_to): Don't increase CMDLINE if the
@ -495,18 +511,18 @@
(VIRTUAL_TO_PHYS) (inb) (outb) (cmos_write_byte) (VIRTUAL_TO_PHYS) (inb) (outb) (cmos_write_byte)
(cmos_read_byte): ... here. (cmos_read_byte): ... here.
* stage2/cmdline.c [!GRUB_UTIL]: Include apic.h and smp-imps.h. * stage2/cmdline.c [!GRUB_UTIL]: Include apic.h and smp-imps.h.
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
The function ungetch is simulated so that the user can use a The function ungetch is simulated so that the user can use a
buggy curses. buggy curses.
* grub/asmstub.c [HAVE_LIBCURSES] (save_char): New variable. * grub/asmstub.c [HAVE_LIBCURSES] (save_char): New variable.
(getkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return (getkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return
SAVE_CHAR and clear it. SAVE_CHAR and clear it.
(checkkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return (checkkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return
SAVE_CHAR. If C is not ERR, set SAVE_CHAR to C. SAVE_CHAR. If C is not ERR, set SAVE_CHAR to C.
1999-07-14 Pavel Roskin <pavel_roskin@geocities.com> 1999-07-14 Pavel Roskin <pavel_roskin@geocities.com>
* stage2/char_io.c (get_cmdline) [GRUB_UTIL]: Recognize * stage2/char_io.c (get_cmdline) [GRUB_UTIL]: Recognize
@ -515,18 +531,18 @@
* grub/asmstub.c (grub_stage2) [HAVE_LIBCURSES]: Call wtimeout * grub/asmstub.c (grub_stage2) [HAVE_LIBCURSES]: Call wtimeout
instead of nodelay. instead of nodelay.
(getkey) [HAVE_LIBCURSES]: Likewise. (getkey) [HAVE_LIBCURSES]: Likewise.
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage1/stage1_lba.S (probe_values): New variable. This is not * stage1/stage1_lba.S (probe_values): New variable. This is not
used actually, but prevents `install' command from failing used actually, but prevents `install' command from failing
bogusly. bogusly.
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
All constants in stage1s are moved to stage1.h and renamed All constants in stage1s are moved to stage1.h and renamed
appropriately, and include stage1.h instead. appropriately, and include stage1.h instead.
* grub/Makefile.am (AM_CFLAGS): Added the include path to stage1. * grub/Makefile.am (AM_CFLAGS): Added the include path to stage1.
* stage2/Makefile.am (INCLUDES): New variable. * stage2/Makefile.am (INCLUDES): New variable.
* stage1/Makefile.am (stage1_exec_SOURCES): Added stage1.h * stage1/Makefile.am (stage1_exec_SOURCES): Added stage1.h
@ -573,24 +589,24 @@
* stage1/stage1_lba.S: Fix a bug that incorrectly assigns the * stage1/stage1_lba.S: Fix a bug that incorrectly assigns the
segment of buffer address. segment of buffer address.
1999-07-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/boot.c (load_image): When removing "vga=...", memmove * stage2/boot.c (load_image): When removing "vga=...", memmove
the length of VGA_END plus one. the length of VGA_END plus one.
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/bios.c (get_diskinfo): In LBA mode, compute * stage2/bios.c (get_diskinfo): In LBA mode, compute
TOTAL_SECTORS from DRP instead of GEOMETRY. TOTAL_SECTORS from DRP instead of GEOMETRY.
Clear GEOMETRY->FLAGS first. Clear GEOMETRY->FLAGS first.
* stage2/boot.c (load_image): Fix inverted lines. * stage2/boot.c (load_image): Fix inverted lines.
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Support Linux video mode selection. Support Linux video mode selection.
* stage2/shared.h (LINUX_VID_MODE_OFFSET): New macro. * stage2/shared.h (LINUX_VID_MODE_OFFSET): New macro.
(LINUX_VID_MODE_NORMAL): Likewise. (LINUX_VID_MODE_NORMAL): Likewise.
(LINUX_VID_MODE_EXTENDED): Likewise. (LINUX_VID_MODE_EXTENDED): Likewise.
@ -599,7 +615,7 @@
(grub_strlen): Declared. (grub_strlen): Declared.
* stage2/boot.c (load_image): Added Linux video mode selection. * stage2/boot.c (load_image): Added Linux video mode selection.
* stage2/char_io.c [!STAGE1_5] (grub_strlen): New function. * stage2/char_io.c [!STAGE1_5] (grub_strlen): New function.
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/char_io.c (print_error): Print ERRNUM in the format of * stage2/char_io.c (print_error): Print ERRNUM in the format of
@ -626,7 +642,7 @@
(grub_memmove): Likewise. (grub_memmove): Likewise.
(grub_strstr): Likewise. (grub_strstr): Likewise.
(grub_strcmp): Likewise. (grub_strcmp): Likewise.
1999-07-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-07-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage1/stage1.S (sectors): Change the size to long. * stage1/stage1.S (sectors): Change the size to long.
@ -643,20 +659,20 @@
Call 32bits div instructions instead of 16bits div instructions. Call 32bits div instructions instead of 16bits div instructions.
Update the position where to load data from at the end of this Update the position where to load data from at the end of this
loop, instead of the beginning. loop, instead of the beginning.
* stage1/stage1_lba.S: New file. * stage1/stage1_lba.S: New file.
* stage1/Makefile.am (nodist_pkgdata_DATA): Added stage1_lba. * stage1/Makefile.am (nodist_pkgdata_DATA): Added stage1_lba.
(LDFLAGS): New variable. (LDFLAGS): New variable.
(noinst_PROGRAMS): Added stage1_lba.exec. (noinst_PROGRAMS): Added stage1_lba.exec.
(stage1_lba_exec_SOURCES): New variable. (stage1_lba_exec_SOURCES): New variable.
(%: %.exec): New rule. (%: %.exec): New rule.
1999-06-28 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-28 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/main.c (main): The third argument for strtoul is changed * grub/main.c (main): The third argument for strtoul is changed
to 0 in the case where an option is OPT_INSTALL_PARTIION. to 0 in the case where an option is OPT_INSTALL_PARTIION.
Reported by Pavel Roskin <pavel_roskin@geocities.com>. Reported by Pavel Roskin <pavel_roskin@geocities.com>.
1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/shared.h (STAGE2_STAGE2_ID): New macro. * stage2/shared.h (STAGE2_STAGE2_ID): New macro.
@ -675,7 +691,7 @@
(COMPAT_VERSION_MINOR): Set to 1. (COMPAT_VERSION_MINOR): Set to 1.
* stage2/asm.S (stage2_id): New variable. * stage2/asm.S (stage2_id): New variable.
* stage1/stage1.S: Change the minor version to 1. * stage1/stage1.S: Change the minor version to 1.
1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* configure.in (CFLAGS): Set to "-g", since only this flag is * configure.in (CFLAGS): Set to "-g", since only this flag is
@ -693,20 +709,20 @@
* stage2/asm.S (chain_stage2): Pass CURRENT_PARTITION and * stage2/asm.S (chain_stage2): Pass CURRENT_PARTITION and
CURRENT_DRIVE, instead of INSTALL_PARTITION and BOOT_DRIVE. CURRENT_DRIVE, instead of INSTALL_PARTITION and BOOT_DRIVE.
1999-06-27 Pavel Roskin <pavel_roskin@geocities.com> 1999-06-27 Pavel Roskin <pavel_roskin@geocities.com>
* configure.in: set CFLAGS to "-Os -g" for compilers which * configure.in: set CFLAGS to "-Os -g" for compilers which
understand "-Os" if CFLAGS is not already set. Use understand "-Os" if CFLAGS is not already set. Use
"-O2 -fno-strength-reduce -fno-unroll-loops -g" for older gcc "-O2 -fno-strength-reduce -fno-unroll-loops -g" for older gcc
versions. versions.
1999-06-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage2/disk_io.c (attempt_mount) [STAGE1_5]: Set FSYS_TYPE to * stage2/disk_io.c (attempt_mount) [STAGE1_5]: Set FSYS_TYPE to
0, and set it to NUM_FSYS if mount fails. 0, and set it to NUM_FSYS if mount fails.
(real_open_partition): Call rawread in Stage 1.5 as well. (real_open_partition): Call rawread in Stage 1.5 as well.
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* Makefile.am (SUBDIRS): Change the order of the directories so * Makefile.am (SUBDIRS): Change the order of the directories so
@ -716,12 +732,12 @@
* docs/help2man: Copied from help2man-1.012, which contains my * docs/help2man: Copied from help2man-1.012, which contains my
previous change. previous change.
* docs/grub.8: Regenerated. * docs/grub.8: Regenerated.
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Build process is cleaned up. Stage 2 and Stage 1.5's are all Build process is cleaned up. Stage 2 and Stage 1.5's are all
built in the directory stage2. built in the directory stage2.
From Pavel Roskin <pavel_roskin@geocities.com>: From Pavel Roskin <pavel_roskin@geocities.com>:
* Makefile.am (SUBDIRS): e2fs_stage1_5, ffs_stage1_5, * Makefile.am (SUBDIRS): e2fs_stage1_5, ffs_stage1_5,
fat_stage1_5 and shared_src are removed. fat_stage1_5 and shared_src are removed.
@ -853,15 +869,15 @@
(ffs_stage1_5_exec_CFLAGS): Likewise. (ffs_stage1_5_exec_CFLAGS): Likewise.
(ffs_stage1_5_exec_LDFLAGS): Likewise. (ffs_stage1_5_exec_LDFLAGS): Likewise.
(% : %.exec): New rule. (% : %.exec): New rule.
* stage2/size_test: New file, for checking for the sizes of * stage2/size_test: New file, for checking for the sizes of
Stage 2 and Stage 1.5's. Stage 2 and Stage 1.5's.
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* stage1/stage1.S: Call testb instead of andb when checking if * stage1/stage1.S: Call testb instead of andb when checking if
the drive is a floppy. the drive is a floppy.
1999-06-23 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-23 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/asmstub.c [__linux__]: Include linux/fs.h for BLKFLSBUF. * grub/asmstub.c [__linux__]: Include linux/fs.h for BLKFLSBUF.
@ -887,11 +903,11 @@
(opt_section): New variable. (opt_section): New variable.
(section): Likewise. (section): Likewise.
* docs/grub.8: Produced by help2man automatically. * docs/grub.8: Produced by help2man automatically.
1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* shared_src/char_io.c (get_cmdline): Add two missing `break's. * shared_src/char_io.c (get_cmdline): Add two missing `break's.
* shared_src/cmdline.c (commands): Add quit. * shared_src/cmdline.c (commands): Add quit.
(enter_cmdline): Change the return type to cmdline_t, and return (enter_cmdline): Change the return type to cmdline_t, and return
CMDLINE_OK if successful, otherwise CMDLINE_ERROR if fail. CMDLINE_OK if successful, otherwise CMDLINE_ERROR if fail.
@ -907,12 +923,12 @@
otherwise return MENU_OK. otherwise return MENU_OK.
(cmain): If enter_cmdline aborts, then break the command-line (cmain): If enter_cmdline aborts, then break the command-line
loop and return. If run_menu aborts, then return. loop and return. If run_menu aborts, then return.
1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* shared_src/Makefile.am (EXTRA_DIST): Add bios.c. Reported by * shared_src/Makefile.am (EXTRA_DIST): Add bios.c. Reported by
Pavel Roskin <pavel_roskin@geocities.com>. Pavel Roskin <pavel_roskin@geocities.com>.
1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* docs/Makefile.am (html): Deleted. * docs/Makefile.am (html): Deleted.
@ -931,7 +947,7 @@
* docs/commands.txt: Likewise. * docs/commands.txt: Likewise.
* docs/embedded_data.txt: Likewise. * docs/embedded_data.txt: Likewise.
* docs/filesystem.txt: Likewise. * docs/filesystem.txt: Likewise.
1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
From Alexander K. Hudek <alexhudek@home.com>: From Alexander K. Hudek <alexhudek@home.com>:
@ -940,12 +956,12 @@
* shared_src/pc_slice.c (PC_SLICE_TYPE_WIN95_EXTENDED): New * shared_src/pc_slice.c (PC_SLICE_TYPE_WIN95_EXTENDED): New
macro. macro.
* shared_src/bios.c (biosdisk): Clear the reserved member of DAP. * shared_src/bios.c (biosdisk): Clear the reserved member of DAP.
1999-06-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Color-menu support based on Peter Astrand Color-menu support based on Peter Astrand
<altic@lysator.liu.se>'s patch. <altic@lysator.liu.se>'s patch.
* shared_src/asm.S (nocursor): New function. * shared_src/asm.S (nocursor): New function.
* shared_src/cmdline.c (normal_color): New variable. * shared_src/cmdline.c (normal_color): New variable.
(highlight_color): Likewise. (highlight_color): Likewise.
@ -962,12 +978,12 @@
(cmain): Initialize normal_color and highlight_color. Handle (cmain): Initialize normal_color and highlight_color. Handle
the color command in the same way as the command-line the color command in the same way as the command-line
interface. interface.
1999-06-07 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-07 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 31744. * e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 31744.
* fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise. * fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise.
1999-06-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
The debug version of Stage 2 is removed. The debug version of Stage 2 is removed.
@ -994,7 +1010,7 @@
* Makefile.am (SUBDIRS): stage2_debug is removed. * Makefile.am (SUBDIRS): stage2_debug is removed.
* stage2_debug/Makefile.am: Deleted. * stage2_debug/Makefile.am: Deleted.
* stage2_debug/Makefile.in: Likewise. * stage2_debug/Makefile.in: Likewise.
1999-06-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/main.c (verbose): New variable. * grub/main.c (verbose): New variable.
@ -1006,7 +1022,7 @@
(main): Handle OPT_VERBOSE and OPT_READ_ONLY. (main): Handle OPT_VERBOSE and OPT_READ_ONLY.
If HOLD and VERBOSE are non-zero, then display the message If HOLD and VERBOSE are non-zero, then display the message
about how to restart /sbin/grub. about how to restart /sbin/grub.
* shared_src/shared.h (verbose) [GRUB_UTIL]: Declared. * shared_src/shared.h (verbose) [GRUB_UTIL]: Declared.
(read_only) [GRUB_UTIL]: Likewise. (read_only) [GRUB_UTIL]: Likewise.
@ -1022,7 +1038,7 @@
* shared_src/disk_io.c (set_device) [STAGE1_5]: Eliminate * shared_src/disk_io.c (set_device) [STAGE1_5]: Eliminate
completion code. completion code.
1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/asmstub.c: Do not use I_AM_VERY_BRAVE any more. * grub/asmstub.c: Do not use I_AM_VERY_BRAVE any more.
@ -1033,7 +1049,7 @@
instead of 0, and check if it is equal to -1 instead of 0 when instead of 0, and check if it is equal to -1 instead of 0 when
close it. close it.
(get_diskinfo): Treat -1 as non-caching state instead of 0. (get_diskinfo): Treat -1 as non-caching state instead of 0.
1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Reported from Klaus Reichl <a8709182@unet.univie.ac.at>: Reported from Klaus Reichl <a8709182@unet.univie.ac.at>:
@ -1059,12 +1075,12 @@
when the functon print_completion modifies CMDLINE. when the functon print_completion modifies CMDLINE.
* shared_src/stage2.c (get_line_from_config): Fix LITERAL * shared_src/stage2.c (get_line_from_config): Fix LITERAL
handling. handling.
1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/asmstub.c (grub_stage2): Fix a memory leak that FP is * grub/asmstub.c (grub_stage2): Fix a memory leak that FP is
not closed. not closed.
1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/main.c: Replace OPT_DISABLE_CONFIG_FILE and * grub/main.c: Replace OPT_DISABLE_CONFIG_FILE and
@ -1076,7 +1092,7 @@
Change the help message according to the changes above. Change the help message according to the changes above.
(main): Handle OPT_NO_CONFIG_FILE and OPT_NO_CURSES, instead (main): Handle OPT_NO_CONFIG_FILE and OPT_NO_CURSES, instead
of OPT_DISABLE_CONFIG_FILE and OPT_DISABLE_CURSES. of OPT_DISABLE_CONFIG_FILE and OPT_DISABLE_CURSES.
1999-05-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-05-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* docs/TODO: Moved to ... * docs/TODO: Moved to ...
@ -1086,7 +1102,7 @@
* docs/COPYING: Removed. * docs/COPYING: Removed.
* docs/Makefile.am (EXTRA_DIST): Get rid of BUGS. * docs/Makefile.am (EXTRA_DIST): Get rid of BUGS.
* Makefile.am (EXTRA_DIST): Set to BUGS. * Makefile.am (EXTRA_DIST): Set to BUGS.
1999-05-17 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-05-17 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* acinclude.m4 (grub_ASM_EXT_C): Do not overrun the command * acinclude.m4 (grub_ASM_EXT_C): Do not overrun the command
@ -1096,12 +1112,12 @@
* docs/Makefile.am (info_TEXINFOS): Added multiboot.texi. * docs/Makefile.am (info_TEXINFOS): Added multiboot.texi.
* docs/multiboot.texi: New file. From Kunihiro Ishiguro. * docs/multiboot.texi: New file. From Kunihiro Ishiguro.
1999-05-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-05-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
* grub/asmstub.c: Include <errno.h>. Reported by Kunihiro * grub/asmstub.c: Include <errno.h>. Reported by Kunihiro
Ishiguro <kunihiro@zebra.org>. Ishiguro <kunihiro@zebra.org>.
1999-05-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp> 1999-05-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Reported by Brian Brunswick <brian@skarpsey.demon.co.uk>: Reported by Brian Brunswick <brian@skarpsey.demon.co.uk>:
@ -1130,7 +1146,7 @@
* e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 81920. * e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 81920.
* fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise. * fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise.
* ffs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 7168. * ffs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 7168.
1999-05-03 Gordon Matzigkeit <gord@trick.fig.org> 1999-05-03 Gordon Matzigkeit <gord@trick.fig.org>
From Pavel Roskin: From Pavel Roskin:

View file

@ -639,10 +639,6 @@ start, where they are ignored.
Commands usable in configuration files only. Commands usable in configuration files only.
@table @code @table @code
@item timeout @var{sec}
Set a timeout, in @var{sec} seconds, before automatically booting the
default entry (normally the first entry defined).
@item default @var{num} @item default @var{num}
Set the default entry to entry number @var{num} (if not specified, it is Set the default entry to entry number @var{num} (if not specified, it is
0, the first entry). 0, the first entry).
@ -651,8 +647,8 @@ Set the default entry to entry number @var{num} (if not specified, it is
Go into unattended boot mode: if the default boot entry has any errors, Go into unattended boot mode: if the default boot entry has any errors,
instead of waiting for the user to do anything, it immediately starts instead of waiting for the user to do anything, it immediately starts
over using the @var{num} entry (same numbering as the @code{default} over using the @var{num} entry (same numbering as the @code{default}
command). This obviously doesn't help if the machine was in the middle command). This obviously won't help if the machine was rebooted by a
of the boot process (after leaving GRUB's code) and rebooted. kernel that GRUB loaded.
@item password @var{passwd} @var{new-config-file} @item password @var{passwd} @var{new-config-file}
Disable all interactive editing control (menu entry editor and Disable all interactive editing control (menu entry editor and
@ -660,6 +656,10 @@ command line). If the password @var{passwd} is entered, it loads the
@var{new-config-file} as a new config file and restarts the GRUB Stage @var{new-config-file} as a new config file and restarts the GRUB Stage
2. 2.
@item timeout @var{sec}
Set a timeout, in @var{sec} seconds, before automatically booting the
default entry (normally the first entry defined).
@item title @var{name}@dots{} @item title @var{name}@dots{}
Start a new boot entry, and set its name to the contents of the rest of Start a new boot entry, and set its name to the contents of the rest of
the line, starting with the first non-space character. the line, starting with the first non-space character.
@ -668,111 +668,19 @@ the line, starting with the first non-space character.
Commands usable both interactively and in configuration files: Commands usable both interactively and in configuration files:
@table @code @table @code
@item pause @var{message}@dots{}
Print the @var{message}, then wait until a key is pressed. Note that
placing @key{^G} (ASCII code 7) in the message will cause the speaker to
emit the standard beep sound, which is useful when prompting the user to
change floppies.
@item uppermem @var{kbytes}
Force GRUB to ignore what it found during the autoprobe of the memory
available to the system, and to use @var{kbytes} as the number of
kilobytes of upper memory installed. Any address range maps of the
system are discarded.
@strong{Caution:} This should be used with great caution, and should
only be necessary on some old machines. GRUB's BIOS probe can pick up
all @sc{ram} on all new machines the author has ever heard of. It can
also be used for debugging purposes to lie to an OS.
@item root @var{device} [@var{hdbias}]
Set the current @dfn{root partition} to the device @var{device}, then
attempt to mount it to get the partition size (for passing the partition
descriptor in @code{ES:ESI}, used by some chain-loaded bootloaders), the
BSD drive-type (for booting BSD kernels using their native boot format),
and fix up automatic determination of the PC partition where a BSD
sub-partition is located. The optional @var{hdbias} parameter is a
number to tell a kernel which is using one of the BSD boot methodologies
how many BIOS drive numbers are on controllers before the current
one. An example is if there is an IDE disk and a SCSI disk, then set the
root partition normally, except for a kernel using a BSD boot
methodology (FreeBSD or NetBSD), then use a @samp{1} for @var{hdbias}.
@item rootnoverify @var{device} [@var{hdbias}]
Similar to @command{root}, but don't attempt to mount the
partition. This is useful for when an OS is outside of the area of the
disk that GRUB can read, but setting the correct root partition is still
desired. Note that the items mentioned in @command{root} above which
derived from attempting the mount will NOT work correctly.
@item chainloader @var{file}
Load @var{file} as a chain-loader. Like any other file loaded by the
filesystem code, it can use the blocklist notation to grab the first
sector of the current partition with @samp{+1}.
@item kernel @var{file} @dots{}
Attempt to load the primary boot image (Multiboot a.out or @sc{elf},
Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from
@var{file}. This command ignores the rest of the contents of the line,
except that the entire line starting with the kernel filename is passed
verbatim as the @dfn{kernel command line}. The module state is reset,
and so you must reload any modules.
@item module @var{file} @dots{}
Load a boot module for a Multiboot format boot image (no interpretation
of the file contents are made, so that user of this command must know
what the kernel in question works with). The rest of the line is passed
as the @dfn{module command line} much like with the @command{kernel}
command.
@item modulenounzip @var{file} @dots{}
Exactly like @command{module}, except that automatic decompression is
disabled.
@item initrd @var{file} @dots{}
Load an initial ramdisk for a Linux format boot image and set the
appropriate parameters in the Linux setup area in memory.
@item install @var{stage1-file} [d] @var{dest-device} @var{file} @var{addr} [p] [@var{config-file}]
This command is fairly complex, and for detailed examples one should
look at @ref{Automated install}. In short, it will perform a full
install presuming the stage2 or stage1.5@footnote{They're loaded the
same way, so we will refer to the stage1.5 as a stage2 from now on.}
is in its final install location.
In slightly more detail, it will load @var{stage1-file}, validate that
it is a GRUB stage1 of the right version number, install a blocklist for
loading @var{file} as a stage2. If the option @samp{d} is present, the
stage1 will always look for the actual disk @var{file} was installed on,
rather than using the booting drive. The stage2 will be loaded at
address @var{addr}, which must be @samp{0x8000} for a true stage2, and
@samp{0x2000} for a stage1.5. It then writes the completed stage1 to
the first block of the device @var{dest-dev}. If the options @samp{p} or
@var{config-file} are present, then it reads the first block of stage2,
modifies it with the values of the partition @var{file} was found on
(for @samp{p}) or places the string @var{config-file} into the area
telling the stage2 where to look for a configuration file at boot time.
This command preserves the DOS BPB (and for hard disks, the partition
table) of the sector the stage1 is to be installed into.
@item makeactive
Set the active partition on the root disk to GRUB's root partition (on a
floppy this has no effect). This is limited to working with @emph{primary}
PC partitions.
@item boot @item boot
This boots the OS/chain-loader which has been loaded. Only necessary if This boots the OS/chain-loader which has been loaded. Only necessary if
running the fully interactive command line (it is implicit at the end of running the fully interactive command line (it is implicit at the end of
a config-file entry). a config-file entry).
@item color @var{normal} [@var{highlight}] @item color @var{normal} [@var{highlight}]
Change the menu colors. The color @var{normal} is used for the normal Change the menu colors. The color @var{normal} is used for most
line in the menu, and the color @var{highlight} is used to highlight the lines in the menu, and the color @var{highlight} is used to highlight the
line where the cursor points to. If you omit @var{highlight}, then the line where the cursor points. If you omit @var{highlight}, then the
inverted color of @var{normal} is used for the highlighted line. You inverted color of @var{normal} is used for the highlighted line. You
must specify an integer for a color value, and the 0-3 bits represents must specify an integer for a color value, where bits 0-3 represent
the foreground color, the 4-6 bits represents the background color, and the foreground color, bits 4-6 represent the background color, and
the 7 bit represents that the foreground blinks. bit 7 indicates that the foreground blinks.
These are the possible values and the meanings: These are the possible values and the meanings:
@ -845,18 +753,13 @@ title OS-BS like
color 0x16 0x60 color 0x16 0x60
@end example @end example
@item testload @var{file} @item chainloader @var{file}
Read the entire contents of @var{file} in several different ways and Load @var{file} as a chain-loader. Like any other file loaded by the
compares them, to test the filesystem code. The output is somewhat filesystem code, it can use the blocklist notation to grab the first
cryptic , but if no errors are reported and the final @samp{i=@var{X}, sector of the current partition with @samp{+1}.
filepos=@var{Y}} reading has @var{X} and @var{Y} equal, then it is
definitely consistent, and very likely works correctly subject to a
consistent offset error. If this test succeeds, then a good next step is
to try loading a kernel with your code.
@item read @var{addr} @item configfile @var{file}
Read a 32-bit unsigned value from memory at address @var{addr} and Load @var{file} as the configuration file.
displays it in hex format.
@item displaymem @item displaymem
Display what GRUB thinks the system address space map of the machine is, Display what GRUB thinks the system address space map of the machine is,
@ -868,10 +771,6 @@ at 1MB and going up to the first chipset hole for @dfn{upper memory}
(the standard PC @dfn{upper memory} interface is limited to reporting a (the standard PC @dfn{upper memory} interface is limited to reporting a
maximum of 64MB). maximum of 64MB).
@item impsprobe
Probe the Intel Multiprocessor Specification 1.1 or 1.4 configuration
table and boot the various CPUs which are found into a tight loop.
@item fstest @item fstest
Toggle filesystem test mode. Toggle filesystem test mode.
@ -885,9 +784,115 @@ requests from the disk.
Filesystem test mode is turned off by any use of the @command{install} Filesystem test mode is turned off by any use of the @command{install}
or @command{testload} commands. or @command{testload} commands.
@item hide @var{partition}
Hide @var{partition} by setting the @dfn{hidden} bit in its partition
type code.
@item impsprobe
Probe the Intel Multiprocessor Specification 1.1 or 1.4 configuration
table and boot the various CPUs which are found into a tight loop.
@item initrd @var{file} @dots{}
Load an initial ramdisk for a Linux format boot image and set the
appropriate parameters in the Linux setup area in memory.
@item install @var{stage1-file} [d] @var{dest-device} @var{file} @var{addr} [p] [@var{config-file}]
This command is fairly complex, and for detailed examples one should
look at @ref{Automated install}. In short, it will perform a full
install presuming the stage2 or stage1.5@footnote{They're loaded the
same way, so we will refer to the stage1.5 as a stage2 from now on.}
is in its final install location.
In slightly more detail, it will load @var{stage1-file}, validate that
it is a GRUB stage1 of the right version number, install a blocklist for
loading @var{file} as a stage2. If the option @samp{d} is present, the
stage1 will always look for the actual disk @var{file} was installed on,
rather than using the booting drive. The stage2 will be loaded at
address @var{addr}, which must be @samp{0x8000} for a true stage2, and
@samp{0x2000} for a stage1.5. It then writes the completed stage1 to
the first block of the device @var{dest-dev}. If the options @samp{p} or
@var{config-file} are present, then it reads the first block of stage2,
modifies it with the values of the partition @var{file} was found on
(for @samp{p}) or places the string @var{config-file} into the area
telling the stage2 where to look for a configuration file at boot time.
This command preserves the DOS BPB (and for hard disks, the partition
table) of the sector the stage1 is to be installed into.
@item kernel @var{file} @dots{}
Attempt to load the primary boot image (Multiboot a.out or @sc{elf},
Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from
@var{file}. The rest of the line is passed verbatim as the @dfn{kernel
command line}. Any modules must be reloaded after using this command.
@item makeactive
Set the active partition on the root disk to GRUB's root partition.
This command is limited to @emph{primary} PC partitions on a hard disk.
@item module @var{file} @dots{}
Load a boot module @var{file} for a Multiboot format boot image (no
interpretation of the file contents are made, so that user of this
command must know what the kernel in question expects). The rest of the
line is passed as the @dfn{module command line}, like the
@command{kernel} command.
@item modulenounzip @var{file} @dots{}
The same as @command{module}, except that automatic decompression is
disabled.
@item pause @var{message}@dots{}
Print the @var{message}, then wait until a key is pressed. Note that
placing @key{^G} (ASCII code 7) in the message will cause the speaker to
emit the standard beep sound, which is useful when prompting the user to
change floppies.
@item quit @item quit
Exit from the grub shell @command{grub} (@pxref{The grub shell}). This Exit from the GRUB shell @command{grub} (@pxref{The grub shell}). This
is just ignored in the native Stage 2. command is ignored in the native Stage 2.
@item read @var{addr}
Read a 32-bit value from memory at address @var{addr} and
display it in hex format.
@item root @var{device} [@var{hdbias}]
Set the current @dfn{root partition} to the device @var{device}, then
attempt to mount it to get the partition size (for passing the partition
descriptor in @code{ES:ESI}, used by some chain-loaded bootloaders), the
BSD drive-type (for booting BSD kernels using their native boot format),
and correctly determine the PC partition where a BSD sub-partition is
located. The optional @var{hdbias} parameter is a number to tell a BSD
kernel how many BIOS drive numbers are on controllers before the current
one. For example, if there is an IDE disk and a SCSI disk, and your
FreeBSD root partition is on the SCSI disk, then use a @samp{1} for
@var{hdbias}.
@item rootnoverify @var{device} [@var{hdbias}]
Similar to @command{root}, but don't attempt to mount the
partition. This is useful for when an OS is outside of the area of the
disk that GRUB can read, but setting the correct root partition is still
desired. Note that the items mentioned in @command{root} above which
derived from attempting the mount will @emph{not} work correctly.
@item testload @var{file}
Read the entire contents of @var{file} in several different ways and
compares them, to test the filesystem code. The output is somewhat
cryptic , but if no errors are reported and the final @samp{i=@var{X},
filepos=@var{Y}} reading has @var{X} and @var{Y} equal, then it is
definitely consistent, and very likely works correctly subject to a
consistent offset error. If this test succeeds, then a good next step is
to try loading a kernel.
@item unhide @var{partition}
Unhide @var{partition} by clearing the @dfn{hidden} bit in its partition
type code.
@item uppermem @var{kbytes}
Force GRUB to assume that only @var{kbytes} kilobytes of upper memory
are installed. Any system address range maps are discarded.
@strong{Caution:} This should be used with great caution, and should
only be necessary on some old machines. GRUB's BIOS probe can pick up
all @sc{ram} on all new machines the author has ever heard of. It can
also be used for debugging purposes to lie to an OS.
@end table @end table

View file

@ -87,24 +87,24 @@ boot_func (char *arg, int flags)
/* *BSD */ /* *BSD */
bsd_boot (kernel_type, bootdev, arg); bsd_boot (kernel_type, bootdev, arg);
break; break;
case KERNEL_TYPE_LINUX: case KERNEL_TYPE_LINUX:
/* Linux */ /* Linux */
linux_boot (); linux_boot ();
break; break;
case KERNEL_TYPE_BIG_LINUX: case KERNEL_TYPE_BIG_LINUX:
/* Big Linux */ /* Big Linux */
big_linux_boot (); big_linux_boot ();
break; break;
case KERNEL_TYPE_CHAINLOADER: case KERNEL_TYPE_CHAINLOADER:
/* Chainloader */ /* Chainloader */
gateA20 (0); gateA20 (0);
boot_drive = saved_drive; boot_drive = saved_drive;
chain_stage1 (0, BOOTSEC_LOCATION, BOOTSEC_LOCATION - 16); chain_stage1 (0, BOOTSEC_LOCATION, BOOTSEC_LOCATION - 16);
break; break;
case KERNEL_TYPE_MULTIBOOT: case KERNEL_TYPE_MULTIBOOT:
/* Multiboot */ /* Multiboot */
multi_boot ((int) entry_addr, (int) &mbi); multi_boot ((int) entry_addr, (int) &mbi);
@ -114,7 +114,7 @@ boot_func (char *arg, int flags)
errnum = ERR_BOOT_COMMAND; errnum = ERR_BOOT_COMMAND;
return 1; return 1;
} }
return 0; return 0;
} }
@ -143,7 +143,7 @@ chainloader_func (char *arg, int flags)
kernel_type = KERNEL_TYPE_NONE; kernel_type = KERNEL_TYPE_NONE;
return 1; return 1;
} }
return 0; return 0;
} }
@ -187,13 +187,13 @@ static struct builtin builtin_color =
color_func, color_func,
BUILTIN_CMDLINE | BUILTIN_MENU, BUILTIN_CMDLINE | BUILTIN_MENU,
"color NORMAL [HIGHLIGHT]", "color NORMAL [HIGHLIGHT]",
"Change the menu colors. The color NORMAL is used for the normal" "Change the menu colors. The color NORMAL is used for most"
" line in the menu, and the color HIGHLIGHT is used to highlight the" " lines in the menu, and the color HIGHLIGHT is used to highlight the"
" line where the cursor points to. If you omit HIGHLIGHT, then the" " line where the cursor points. If you omit HIGHLIGHT, then the"
" inverted color of NORMAL is used for the highlighted line. You" " inverted color of NORMAL is used for the highlighted line. You"
" must specify an integer for a color value, and the 0-3 bits" " must specify an integer for a color value, where bits 0-3"
" represents the foreground color, the 4-6 bits represents the" " represent the foreground color, bits 4-6 represents the"
" background color, and the 7 bit represents that the foreground" " background color, and bit 7 indicates that the foreground"
" blinks." " blinks."
}; };
@ -207,7 +207,7 @@ configfile_func (char *arg, int flags)
/* Check if the file ARG is present. */ /* Check if the file ARG is present. */
if (! grub_open (arg)) if (! grub_open (arg))
return 1; return 1;
/* Copy ARG to CONFIG_FILE. */ /* Copy ARG to CONFIG_FILE. */
while ((*new_config++ = *arg++) != 0) while ((*new_config++ = *arg++) != 0)
; ;
@ -230,7 +230,7 @@ static struct builtin builtin_configfile =
configfile_func, configfile_func,
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"configfile FILE", "configfile FILE",
"Load the file FILE as the configuration file." "Load FILE as the configuration file."
}; };
@ -248,7 +248,7 @@ debug_func (char *arg, int flags)
debug = 1; debug = 1;
grub_printf (" Debug mode is turned on\n"); grub_printf (" Debug mode is turned on\n");
} }
return 0; return 0;
} }
@ -268,7 +268,7 @@ default_func (char *arg, int flags)
{ {
if (! safe_parse_maxint (&arg, &default_entry)) if (! safe_parse_maxint (&arg, &default_entry))
return 1; return 1;
return 0; return 0;
} }
@ -294,22 +294,22 @@ displaymem_func (char *arg, int flags)
if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0 if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0
|| *((int *) SCRATCHADDR) != 0) || *((int *) SCRATCHADDR) != 0)
grub_printf (" Address Map BIOS Interface is present\n"); grub_printf (" Address Map BIOS Interface is present\n");
grub_printf (" Lower memory: %uK, " grub_printf (" Lower memory: %uK, "
"Upper memory (to first chipset hole): %uK\n", "Upper memory (to first chipset hole): %uK\n",
mbi.mem_lower, mbi.mem_upper); mbi.mem_lower, mbi.mem_upper);
if (mbi.flags & MB_INFO_MEM_MAP) if (mbi.flags & MB_INFO_MEM_MAP)
{ {
struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr; struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr;
int end_addr = mbi.mmap_addr + mbi.mmap_length; int end_addr = mbi.mmap_addr + mbi.mmap_length;
grub_printf (" [Address Range Descriptor entries " grub_printf (" [Address Range Descriptor entries "
"immediately follow (values are 64-bit)]\n"); "immediately follow (values are 64-bit)]\n");
while (end_addr > (int) map) while (end_addr > (int) map)
{ {
char *str; char *str;
if (map->Type == MB_ARD_MEMORY) if (map->Type == MB_ARD_MEMORY)
str = "Usable RAM"; str = "Usable RAM";
else else
@ -318,11 +318,11 @@ displaymem_func (char *arg, int flags)
" Length: %u X 4GB + %u bytes\n", " Length: %u X 4GB + %u bytes\n",
str, map->BaseAddrHigh, map->BaseAddrLow, str, map->BaseAddrHigh, map->BaseAddrLow,
map->LengthHigh, map->LengthLow); map->LengthHigh, map->LengthLow);
map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size)); map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size));
} }
} }
return 0; return 0;
} }
@ -343,7 +343,7 @@ fallback_func (char *arg, int flags)
{ {
if (! safe_parse_maxint (&arg, &fallback_entry)) if (! safe_parse_maxint (&arg, &fallback_entry))
return 1; return 1;
return 0; return 0;
} }
@ -357,9 +357,8 @@ static struct builtin builtin_fallback =
"Go into unattended boot mode: if the default boot entry has any" "Go into unattended boot mode: if the default boot entry has any"
" errors, instead of waiting for the user to do anything, it" " errors, instead of waiting for the user to do anything, it"
" immediately starts over using the NUM entry (same numbering as the" " immediately starts over using the NUM entry (same numbering as the"
" `default=' command). This obviously doesn't help if the machine" " `default=' command). This obviously won't help if the machine"
" was in the middle of the boot process (after leaving GRUB's code)" " was rebooted by a kernel that GRUB loaded."
" and rebooted."
#endif #endif
}; };
@ -378,7 +377,7 @@ fstest_func (char *arg, int flags)
debug_fs = debug_fs_print_func; debug_fs = debug_fs_print_func;
printf (" Filesystem tracing is now on\n"); printf (" Filesystem tracing is now on\n");
} }
return 0; return 0;
} }
@ -397,11 +396,11 @@ static int
geometry_func (char *arg, int flags) geometry_func (char *arg, int flags)
{ {
struct geometry geom; struct geometry geom;
set_device (arg); set_device (arg);
if (errnum) if (errnum)
return 1; return 1;
if (get_diskinfo (current_drive, &geom)) if (get_diskinfo (current_drive, &geom))
{ {
errnum = ERR_NO_DISK; errnum = ERR_NO_DISK;
@ -410,7 +409,7 @@ geometry_func (char *arg, int flags)
else else
{ {
char *msg; char *msg;
#ifdef GRUB_UTIL #ifdef GRUB_UTIL
msg = device_map[current_drive]; msg = device_map[current_drive];
#else #else
@ -419,14 +418,14 @@ geometry_func (char *arg, int flags)
else else
msg = "CHS"; msg = "CHS";
#endif #endif
grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, " grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, "
"The number of sectors = %d, %s\n", "The number of sectors = %d, %s\n",
current_drive, current_drive,
geom.cylinders, geom.heads, geom.sectors, geom.cylinders, geom.heads, geom.sectors,
geom.total_sectors, msg); geom.total_sectors, msg);
} }
return 0; return 0;
} }
@ -452,12 +451,12 @@ help_func (char *arg, int flags)
/* Invoked with no argument. Print the list of the short docs. */ /* Invoked with no argument. Print the list of the short docs. */
struct builtin **builtin; struct builtin **builtin;
int left = 1; int left = 1;
for (builtin = builtin_table; *builtin != 0; builtin++) for (builtin = builtin_table; *builtin != 0; builtin++)
{ {
int len; int len;
int i; int i;
/* If this cannot be run in the command-line interface, /* If this cannot be run in the command-line interface,
skip this. */ skip this. */
if (! ((*builtin)->flags & BUILTIN_CMDLINE)) if (! ((*builtin)->flags & BUILTIN_CMDLINE))
@ -496,13 +495,13 @@ help_func (char *arg, int flags)
while (*ptr && *ptr != ' ') while (*ptr && *ptr != ' ')
ptr++; ptr++;
*ptr = 0; *ptr = 0;
for (builtin = builtin_table; *builtin; builtin++) for (builtin = builtin_table; *builtin; builtin++)
{ {
/* Skip this if this is only for the configuration file. */ /* Skip this if this is only for the configuration file. */
if (! ((*builtin)->flags & BUILTIN_CMDLINE)) if (! ((*builtin)->flags & BUILTIN_CMDLINE))
continue; continue;
if (substring (arg, (*builtin)->name) < 1) if (substring (arg, (*builtin)->name) < 1)
{ {
char *doc = (*builtin)->long_doc; char *doc = (*builtin)->long_doc;
@ -525,7 +524,7 @@ help_func (char *arg, int flags)
if (doc[len - 1] == ' ') if (doc[len - 1] == ' ')
break; break;
} }
grub_printf (" "); grub_printf (" ");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
grub_putchar (*doc++); grub_putchar (*doc++);
@ -533,12 +532,12 @@ help_func (char *arg, int flags)
} }
} }
} }
arg = next_arg; arg = next_arg;
} }
while (*arg); while (*arg);
} }
return 0; return 0;
} }
@ -550,7 +549,7 @@ static struct builtin builtin_help =
"help [PATTERN ...]", "help [PATTERN ...]",
"Display helpful information about builtin commands." "Display helpful information about builtin commands."
}; };
/* hide */ /* hide */
static int static int
@ -561,9 +560,9 @@ hide_func (char *arg, int flags)
saved_partition = current_partition; saved_partition = current_partition;
saved_drive = current_drive; saved_drive = current_drive;
if (! hide_partition ()) if (! set_partition_hidden_flag (1))
return 1; return 1;
return 0; return 0;
} }
@ -572,8 +571,9 @@ static struct builtin builtin_hide =
"hide", "hide",
hide_func, hide_func,
BUILTIN_CMDLINE | BUILTIN_MENU, BUILTIN_CMDLINE | BUILTIN_MENU,
"hide DRIVE", "hide PARTITION",
"Hide the drive DRIVE by adding 0x10 into the partition type." "Hide PARTITION by setting the \"hidden\" bit in"
" its partition type code."
}; };
@ -585,7 +585,7 @@ impsprobe_func (char *arg, int flags)
if (!imps_probe ()) if (!imps_probe ())
#endif #endif
printf (" No MPS information found or probe failed\n"); printf (" No MPS information found or probe failed\n");
return 0; return 0;
} }
@ -617,7 +617,7 @@ initrd_func (char *arg, int flags)
errnum = ERR_NEED_LX_KERNEL; errnum = ERR_NEED_LX_KERNEL;
return 1; return 1;
} }
return 0; return 0;
} }
@ -653,13 +653,13 @@ install_func (char *arg, int flags)
{ {
if (debug) if (debug)
printf("[%d]", sector); printf("[%d]", sector);
if (*((unsigned long *) (installlist - 4)) if (*((unsigned long *) (installlist - 4))
+ *((unsigned short *) installlist) != sector + *((unsigned short *) installlist) != sector
|| installlist == BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4) || installlist == BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4)
{ {
installlist -= 8; installlist -= 8;
if (*((unsigned long *) (installlist - 8))) if (*((unsigned long *) (installlist - 8)))
errnum = ERR_WONT_FIT; errnum = ERR_WONT_FIT;
else else
@ -668,7 +668,7 @@ install_func (char *arg, int flags)
*((unsigned long *) (installlist - 4)) = sector; *((unsigned long *) (installlist - 4)) = sector;
} }
} }
*((unsigned short *) installlist) += 1; *((unsigned short *) installlist) += 1;
installsect = sector; installsect = sector;
installaddr += 512; installaddr += 512;
@ -708,12 +708,12 @@ install_func (char *arg, int flags)
/* Do not decompress Stage 2. */ /* Do not decompress Stage 2. */
no_decompression = 1; no_decompression = 1;
#endif #endif
/* copy possible DOS BPB, 59 bytes at byte offset 3 */ /* copy possible DOS BPB, 59 bytes at byte offset 3 */
grub_memmove (buffer + BOOTSEC_BPB_OFFSET, grub_memmove (buffer + BOOTSEC_BPB_OFFSET,
old_sect + BOOTSEC_BPB_OFFSET, old_sect + BOOTSEC_BPB_OFFSET,
BOOTSEC_BPB_LENGTH); BOOTSEC_BPB_LENGTH);
/* if for a hard disk, copy possible MBR/extended part table */ /* if for a hard disk, copy possible MBR/extended part table */
if ((dest_drive & 0x80) && current_partition == 0xFFFFFF) if ((dest_drive & 0x80) && current_partition == 0xFFFFFF)
grub_memmove (buffer + BOOTSEC_PART_OFFSET, grub_memmove (buffer + BOOTSEC_PART_OFFSET,
@ -737,27 +737,27 @@ install_func (char *arg, int flags)
/* Open Stage 2. */ /* Open Stage 2. */
if (! grub_open (file)) if (! grub_open (file))
return 1; return 1;
/* If STAGE1_FILE is the LBA version, do a sanity check. */ /* If STAGE1_FILE is the LBA version, do a sanity check. */
if (buffer[STAGE1_ID_OFFSET] == STAGE1_ID_LBA) if (buffer[STAGE1_ID_OFFSET] == STAGE1_ID_LBA)
{ {
/* The geometry of the drive in which FILE is located. */ /* The geometry of the drive in which FILE is located. */
struct geometry load_geom; struct geometry load_geom;
/* Check if CURRENT_DRIVE is a floppy disk. */ /* Check if CURRENT_DRIVE is a floppy disk. */
if (! (current_drive & 0x80)) if (! (current_drive & 0x80))
{ {
errnum = ERR_DEV_VALUES; errnum = ERR_DEV_VALUES;
return 1; return 1;
} }
/* Get the geometry of CURRENT_DRIVE. */ /* Get the geometry of CURRENT_DRIVE. */
if (get_diskinfo (current_drive, &load_geom)) if (get_diskinfo (current_drive, &load_geom))
{ {
errnum = ERR_NO_DISK; errnum = ERR_NO_DISK;
return 1; return 1;
} }
#ifdef GRUB_UTIL #ifdef GRUB_UTIL
/* XXX Can we determine if LBA is supported in /* XXX Can we determine if LBA is supported in
the grub shell as well? */ the grub shell as well? */
@ -773,21 +773,21 @@ install_func (char *arg, int flags)
} }
#endif #endif
} }
if (! new_drive) if (! new_drive)
new_drive = current_drive; new_drive = current_drive;
else if (current_drive != dest_drive) else if (current_drive != dest_drive)
grub_printf ("Warning: the option `d' is not found, but Stage 2 will" grub_printf ("Warning: the option `d' was not used, but the Stage 1 will"
"be install into a\ndifferent drive from a drive into" "be installed on a\ndifferent drive than the drive where"
" which is installed Stage 1.\n"); " the Stage 2 resides.\n");
memmove ((char*) BOOTSEC_LOCATION, buffer, SECTOR_SIZE); memmove ((char*) BOOTSEC_LOCATION, buffer, SECTOR_SIZE);
*((unsigned char *) (BOOTSEC_LOCATION + STAGE1_FIRSTLIST)) *((unsigned char *) (BOOTSEC_LOCATION + STAGE1_FIRSTLIST))
= new_drive; = new_drive;
*((unsigned short *) (BOOTSEC_LOCATION + STAGE1_INSTALLADDR)) *((unsigned short *) (BOOTSEC_LOCATION + STAGE1_INSTALLADDR))
= installaddr; = installaddr;
i = BOOTSEC_LOCATION+STAGE1_FIRSTLIST - 4; i = BOOTSEC_LOCATION+STAGE1_FIRSTLIST - 4;
while (*((unsigned long *) i)) while (*((unsigned long *) i))
{ {
@ -799,12 +799,12 @@ install_func (char *arg, int flags)
errnum = ERR_BAD_VERSION; errnum = ERR_BAD_VERSION;
return 1; return 1;
} }
*((int *) i) = 0; *((int *) i) = 0;
*((int *) (i - 4)) = 0; *((int *) (i - 4)) = 0;
i -= 8; i -= 8;
} }
installlist = BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4; installlist = BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4;
debug_fs = debug_fs_blocklist_func; debug_fs = debug_fs_blocklist_func;
@ -822,21 +822,21 @@ install_func (char *arg, int flags)
debug_fs = 0; debug_fs = 0;
return 1; return 1;
} }
stage2_sect = installsect; stage2_sect = installsect;
ptr = skip_to (0, addr); ptr = skip_to (0, addr);
if (*ptr == 'p') if (*ptr == 'p')
{ {
write_stage2_sect = 1; write_stage2_sect = 1;
*((long *) (SCRATCHADDR + STAGE2_INSTALLPART)) = current_partition; *((long *) (SCRATCHADDR + STAGE2_INSTALLPART)) = current_partition;
ptr = skip_to (0, ptr); ptr = skip_to (0, ptr);
} }
if (*ptr) if (*ptr)
{ {
char *str = ((char *) (SCRATCHADDR + STAGE2_VER_STR_OFFS)); char *str = ((char *) (SCRATCHADDR + STAGE2_VER_STR_OFFS));
write_stage2_sect = 1; write_stage2_sect = 1;
/* Find a string for the configuration filename. */ /* Find a string for the configuration filename. */
while (*(str++)) while (*(str++))
@ -855,7 +855,7 @@ install_func (char *arg, int flags)
/* Clear the cache. */ /* Clear the cache. */
buf_track = -1; buf_track = -1;
if (biosdisk (BIOSDISK_WRITE, if (biosdisk (BIOSDISK_WRITE,
dest_drive, &dest_geom, dest_drive, &dest_geom,
dest_sector, 1, (BOOTSEC_LOCATION >> 4)) dest_sector, 1, (BOOTSEC_LOCATION >> 4))
@ -868,13 +868,13 @@ install_func (char *arg, int flags)
debug_fs = 0; debug_fs = 0;
return 1; return 1;
} }
debug_fs = 0; debug_fs = 0;
#ifndef NO_DECOMPRESSION #ifndef NO_DECOMPRESSION
no_decompression = 0; no_decompression = 0;
#endif #endif
return 0; return 0;
} }
@ -884,16 +884,15 @@ static struct builtin builtin_install =
install_func, install_func,
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"install STAGE1 [d] DEVICE STAGE2 ADDR [p] [CONFIG_FILE]", "install STAGE1 [d] DEVICE STAGE2 ADDR [p] [CONFIG_FILE]",
"Install STAGE1 into DEVICE, and install a blocklist for loading STAGE2" "Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2"
" as a Stage 2. If the option `d' is present, the Stage 1 will always" " as a Stage 2. If the option `d' is present, the Stage 1 will always"
" look for the actual disk STAGE2 is installed on, rather than using" " look for the disk where STAGE2 was installed, rather than using"
" the booting drive. The Stage 2 will be loaded at address ADDR, which" " the booting drive. The Stage 2 will be loaded at address ADDR, which"
" must be 0x8000 for a true Stage 2, and 0x2000 for a Stage 1.5. If" " must be 0x8000 for a true Stage 2, and 0x2000 for a Stage 1.5. If"
" the option `p' or CONFIG_FILE are present, then it reads the first" " the option `p' or CONFIG_FILE is present, then the first block"
" block of Stage 2, modifies it with the values of the partition STAGE2" " of Stage 2 is patched with new values of the partition and name"
" was found on for `p' or places the string CONFIG_FILE into the area" " of the configuration file used by the true Stage 2 (for a Stage 1.5,"
" telling the Stage 2 where to look for a configuration file at boot" " this is the name of the true Stage 2) at boot time."
" time."
}; };
@ -902,7 +901,7 @@ static int
kernel_func (char *arg, int flags) kernel_func (char *arg, int flags)
{ {
int len = grub_strlen (arg); int len = grub_strlen (arg);
/* Reset MB_CMDLINE. */ /* Reset MB_CMDLINE. */
mb_cmdline = (char *) MB_CMDLINE_BUF; mb_cmdline = (char *) MB_CMDLINE_BUF;
if (len + 1 > MB_CMDLINE_BUFLEN) if (len + 1 > MB_CMDLINE_BUFLEN)
@ -910,13 +909,13 @@ kernel_func (char *arg, int flags)
errnum = ERR_WONT_FIT; errnum = ERR_WONT_FIT;
return 1; return 1;
} }
/* Copy the command-line to MB_CMDLINE. */ /* Copy the command-line to MB_CMDLINE. */
grub_memmove (mb_cmdline, arg, len + 1); grub_memmove (mb_cmdline, arg, len + 1);
kernel_type = load_image (arg, mb_cmdline); kernel_type = load_image (arg, mb_cmdline);
if (kernel_type == KERNEL_TYPE_NONE) if (kernel_type == KERNEL_TYPE_NONE)
return 1; return 1;
mb_cmdline += len + 1; mb_cmdline += len + 1;
return 0; return 0;
} }
@ -929,10 +928,9 @@ static struct builtin builtin_kernel =
"kernel FILE [ARG ...]", "kernel FILE [ARG ...]",
"Attempt to load the primary boot image (Multiboot a.out or ELF," "Attempt to load the primary boot image (Multiboot a.out or ELF,"
" Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from" " Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from"
" FILE. This command ignores the rest of the contents of the line," " FILE. The rest of the line is passed verbatim as the"
" except that the entire line starting with FILE is" " \"kernel command line\". Any modules must be reloaded after"
" passed verbatim as the \"kernel command line\". The module state is" " using this command."
" reset, and so you must reload any modules."
}; };
@ -942,7 +940,7 @@ makeactive_func (char *arg, int flags)
{ {
if (! make_saved_active ()) if (! make_saved_active ())
return 1; return 1;
return 0; return 0;
} }
@ -952,9 +950,8 @@ static struct builtin builtin_makeactive =
makeactive_func, makeactive_func,
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"makeactive", "makeactive",
"Set the active partition on the root disk to GRUB's root partition" "Set the active partition on the root disk to GRUB's root partition."
" (on a floppy this has no effect). This is limited to working with" " This command is limited to _primary_ PC partitions on a hard disk."
" _primary_ PC partitions."
}; };
@ -963,7 +960,7 @@ static int
module_func (char *arg, int flags) module_func (char *arg, int flags)
{ {
int len = grub_strlen (arg); int len = grub_strlen (arg);
switch (kernel_type) switch (kernel_type)
{ {
case KERNEL_TYPE_MULTIBOOT: case KERNEL_TYPE_MULTIBOOT:
@ -988,7 +985,7 @@ module_func (char *arg, int flags)
errnum = ERR_NEED_MB_KERNEL; errnum = ERR_NEED_MB_KERNEL;
return 1; return 1;
} }
return 0; return 0;
} }
@ -999,10 +996,10 @@ static struct builtin builtin_module =
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"module FILE [ARG ...]", "module FILE [ARG ...]",
"Load a boot module FILE for a Multiboot format boot image (no" "Load a boot module FILE for a Multiboot format boot image (no"
" interpretation of the file contents are made, so that user of this" " interpretation of the file contents is made, so users of this"
" command must know what the kernel in question works with). The" " command must know what the kernel in question expects). The"
" rest of the line is passed as the \"module command line\" much like" " rest of the line is passed as the \"module command line\", like"
" with the `kernel=' command." " the `kernel=' command."
}; };
@ -1011,7 +1008,7 @@ static int
modulenounzip_func (char *arg, int flags) modulenounzip_func (char *arg, int flags)
{ {
int ret; int ret;
#ifndef NO_DECOMPRESSION #ifndef NO_DECOMPRESSION
no_decompression = 1; no_decompression = 1;
#endif #endif
@ -1021,7 +1018,7 @@ modulenounzip_func (char *arg, int flags)
#ifndef NO_DECOMPRESSION #ifndef NO_DECOMPRESSION
no_decompression = 0; no_decompression = 0;
#endif #endif
return ret; return ret;
} }
@ -1031,7 +1028,7 @@ static struct builtin builtin_modulenounzip =
modulenounzip_func, modulenounzip_func,
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"modulenounzip FILE [ARG ...]", "modulenounzip FILE [ARG ...]",
"Exactly like `module=', except that automatic decompression is" "The same as `module=', except that automatic decompression is"
" disabled." " disabled."
}; };
@ -1047,7 +1044,7 @@ password_func (char *arg, int flags)
errnum = ERR_WONT_FIT; errnum = ERR_WONT_FIT;
return 1; return 1;
} }
password = (char *) PASSWORD_BUF; password = (char *) PASSWORD_BUF;
grub_memmove (password, arg, len + 1); grub_memmove (password, arg, len + 1);
return 0; return 0;
@ -1065,7 +1062,7 @@ static struct builtin builtin_password =
" FILE as a new config file and restarts the GRUB Stage 2." " FILE as a new config file and restarts the GRUB Stage 2."
#endif #endif
}; };
/* pause */ /* pause */
static int static int
@ -1074,7 +1071,7 @@ pause_func (char *arg, int flags)
/* If ESC is returned, then abort this entry. */ /* If ESC is returned, then abort this entry. */
if (ASCII_CHAR (getkey ()) == 27) if (ASCII_CHAR (getkey ()) == 27)
return 1; return 1;
return 0; return 0;
} }
@ -1109,7 +1106,7 @@ static struct builtin builtin_quit =
quit_func, quit_func,
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"quit", "quit",
"Exit from the grub shell." "Exit from the GRUB shell."
}; };
@ -1132,8 +1129,8 @@ static struct builtin builtin_read =
read_func, read_func,
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"read ADDR", "read ADDR",
"Read a 32-bit unsigned value from memory at address ADDR and" "Read a 32-bit value from memory at address ADDR and"
" displays it in hex format." " display it in hex format."
}; };
@ -1157,7 +1154,7 @@ root_func (char *arg, int flags)
errnum = 0; errnum = 0;
saved_partition = current_partition; saved_partition = current_partition;
saved_drive = current_drive; saved_drive = current_drive;
/* BSD and chainloading evil hacks !! */ /* BSD and chainloading evil hacks !! */
biasptr = skip_to (0, next); biasptr = skip_to (0, next);
safe_parse_maxint (&biasptr, &hdbias); safe_parse_maxint (&biasptr, &hdbias);
@ -1166,7 +1163,7 @@ root_func (char *arg, int flags)
/* Print the type of the filesystem. */ /* Print the type of the filesystem. */
print_fsys_type (); print_fsys_type ();
return 0; return 0;
} }
@ -1180,14 +1177,12 @@ static struct builtin builtin_root =
" attempt to mount it to get the partition size (for passing the" " attempt to mount it to get the partition size (for passing the"
" partition descriptor in `ES:ESI', used by some chain-loaded" " partition descriptor in `ES:ESI', used by some chain-loaded"
" bootloaders), the BSD drive-type (for booting BSD kernels using" " bootloaders), the BSD drive-type (for booting BSD kernels using"
" their native boot format), and fix up automatic determination of" " their native boot format), and correctly determine "
" the PC partition where a BSD sub-partition is located. The" " the PC partition where a BSD sub-partition is located. The"
" optional HDBIAS parameter is a number to tell a kernel which is" " optional HDBIAS parameter is a number to tell a BSD kernel"
" using one of the BSD boot methodologies how many BIOS drive" " how many BIOS drive numbers are on controllers before the current"
" numbers are on controllers before the current one. An example is" " one. For example, if there is an IDE disk and a SCSI disk, and your"
" if there is an IDE disk and a SCSI disk, then set the root" " FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS."
" partition normally, except for a kernel using a BSD boot"
" methodology (FreeBSD or NetBSD), then use a `1' for HDBIAS."
}; };
@ -1223,31 +1218,31 @@ static int
testload_func (char *arg, int flags) testload_func (char *arg, int flags)
{ {
int i; int i;
kernel_type = KERNEL_TYPE_NONE; kernel_type = KERNEL_TYPE_NONE;
if (! grub_open (arg)) if (! grub_open (arg))
return 1; return 1;
debug_fs = debug_fs_print_func; debug_fs = debug_fs_print_func;
/* Perform filesystem test on the specified file. */ /* Perform filesystem test on the specified file. */
/* Read whole file first. */ /* Read whole file first. */
grub_printf ("Whole file: "); grub_printf ("Whole file: ");
grub_read ((char *) RAW_ADDR (0x100000), -1); grub_read ((char *) RAW_ADDR (0x100000), -1);
/* Now compare two sections of the file read differently. */ /* Now compare two sections of the file read differently. */
for (i = 0; i < 0x10ac0; i++) for (i = 0; i < 0x10ac0; i++)
{ {
*((unsigned char *) RAW_ADDR (0x200000 + i)) = 0; *((unsigned char *) RAW_ADDR (0x200000 + i)) = 0;
*((unsigned char *) RAW_ADDR (0x300000 + i)) = 1; *((unsigned char *) RAW_ADDR (0x300000 + i)) = 1;
} }
/* First partial read. */ /* First partial read. */
grub_printf ("\nPartial read 1: "); grub_printf ("\nPartial read 1: ");
filepos = 0; filepos = 0;
grub_read ((char *) RAW_ADDR (0x200000), 0x7); grub_read ((char *) RAW_ADDR (0x200000), 0x7);
grub_read ((char *) RAW_ADDR (0x200007), 0x100); grub_read ((char *) RAW_ADDR (0x200007), 0x100);
@ -1255,10 +1250,10 @@ testload_func (char *arg, int flags)
grub_read ((char *) RAW_ADDR (0x200117), 0x999); grub_read ((char *) RAW_ADDR (0x200117), 0x999);
grub_read ((char *) RAW_ADDR (0x200ab0), 0x10); grub_read ((char *) RAW_ADDR (0x200ab0), 0x10);
grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000); grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000);
/* Second partial read. */ /* Second partial read. */
grub_printf ("\nPartial read 2: "); grub_printf ("\nPartial read 2: ");
filepos = 0; filepos = 0;
grub_read ((char *) RAW_ADDR (0x300000), 0x10000); grub_read ((char *) RAW_ADDR (0x300000), 0x10000);
grub_read ((char *) RAW_ADDR (0x310000), 0x10); grub_read ((char *) RAW_ADDR (0x310000), 0x10);
@ -1266,13 +1261,13 @@ testload_func (char *arg, int flags)
grub_read ((char *) RAW_ADDR (0x310017), 0x10); grub_read ((char *) RAW_ADDR (0x310017), 0x10);
grub_read ((char *) RAW_ADDR (0x310027), 0x999); grub_read ((char *) RAW_ADDR (0x310027), 0x999);
grub_read ((char *) RAW_ADDR (0x3109c0), 0x100); grub_read ((char *) RAW_ADDR (0x3109c0), 0x100);
grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
*((int *) RAW_ADDR (0x200000)), *((int *) RAW_ADDR (0x200000)),
*((int *) RAW_ADDR (0x200004)), *((int *) RAW_ADDR (0x200004)),
*((int *) RAW_ADDR (0x200008)), *((int *) RAW_ADDR (0x200008)),
*((int *) RAW_ADDR (0x20000c))); *((int *) RAW_ADDR (0x20000c)));
grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
*((int *) RAW_ADDR (0x300000)), *((int *) RAW_ADDR (0x300000)),
*((int *) RAW_ADDR (0x300004)), *((int *) RAW_ADDR (0x300004)),
@ -1283,7 +1278,7 @@ testload_func (char *arg, int flags)
if (*((unsigned char *) RAW_ADDR (0x200000 + i)) if (*((unsigned char *) RAW_ADDR (0x200000 + i))
!= *((unsigned char *) RAW_ADDR (0x300000 + i))) != *((unsigned char *) RAW_ADDR (0x300000 + i)))
break; break;
grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos); grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos);
debug_fs = 0; debug_fs = 0;
return 0; return 0;
@ -1301,7 +1296,7 @@ static struct builtin builtin_testload =
" filepos=Y' reading has X and Y equal, then it is definitely" " filepos=Y' reading has X and Y equal, then it is definitely"
" consistent, and very likely works correctly subject to a" " consistent, and very likely works correctly subject to a"
" consistent offset error. If this test succeeds, then a good next" " consistent offset error. If this test succeeds, then a good next"
" step is to try loading a kernel with your code." " step is to try loading a kernel."
}; };
@ -1311,7 +1306,7 @@ timeout_func (char *arg, int flags)
{ {
if (! safe_parse_maxint (&arg, &grub_timeout)) if (! safe_parse_maxint (&arg, &grub_timeout))
return 1; return 1;
return 0; return 0;
} }
@ -1358,7 +1353,7 @@ unhide_func (char *arg, int flags)
saved_partition = current_partition; saved_partition = current_partition;
saved_drive = current_drive; saved_drive = current_drive;
if (! unhide_partition ()) if (! set_partition_hidden_flag (0))
return 1; return 1;
return 0; return 0;
@ -1369,8 +1364,9 @@ static struct builtin builtin_unhide =
"unhide", "unhide",
unhide_func, unhide_func,
BUILTIN_CMDLINE | BUILTIN_MENU, BUILTIN_CMDLINE | BUILTIN_MENU,
"unhide DRIVE", "unhide PARTITION",
"Unhide the drive DRIVE by subtracting 0x10 from the partition type." "Unhide PARTITION by clearing the \"hidden\" bit in its"
" partition type code."
}; };
@ -1391,10 +1387,8 @@ static struct builtin builtin_uppermem =
uppermem_func, uppermem_func,
BUILTIN_CMDLINE, BUILTIN_CMDLINE,
"uppermem KBYTES", "uppermem KBYTES",
"Force GRUB to ignore what it found during the autoprobe of the" "Force GRUB to assume that only KBYTES kilobytes of upper memory are"
" memory available to the system, and to use KBYTES as the number of" " installed. Any system address range maps are discarded."
" kilobytes of upper memory installed. Any address range maps of the"
" system are discarded."
}; };

View file

@ -312,24 +312,28 @@ make_saved_active (void)
} }
int int
unhide_partition (void) set_partition_hidden_flag (int hidden)
{ {
if (saved_drive) if (saved_drive)
{ {
int part = saved_partition >> 16; int part = saved_partition >> 16;
if (part > 3) if (part > 3)
{ {
errnum = ERR_NO_PART; errnum = ERR_NO_PART;
return 0; return 0;
} }
if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR)) if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR))
return 0; return 0;
if (PC_SLICE_TYPE (SCRATCHADDR, part) & PC_SLICE_TYPE_HIDDEN_FLAG) if (PC_SLICE_TYPE (SCRATCHADDR, part) & PC_SLICE_TYPE_HIDDEN_FLAG)
{ {
PC_SLICE_TYPE (SCRATCHADDR, part) ^= PC_SLICE_TYPE_HIDDEN_FLAG; if (hidden)
PC_SLICE_TYPE (SCRATCHADDR, part) |= PC_SLICE_TYPE_HIDDEN_FLAG;
else
PC_SLICE_TYPE (SCRATCHADDR, part) &= ~PC_SLICE_TYPE_HIDDEN_FLAG;
buf_track = -1; buf_track = -1;
if (biosdisk (BIOSDISK_WRITE, saved_drive, &buf_geom, if (biosdisk (BIOSDISK_WRITE, saved_drive, &buf_geom,
0, 1, SCRATCHSEG)) 0, 1, SCRATCHSEG))
@ -339,41 +343,10 @@ unhide_partition (void)
} }
} }
} }
return 1; return 1;
} }
int
hide_partition (void)
{
if (saved_drive)
{
int part = saved_partition >> 16;
if (part > 3)
{
errnum = ERR_NO_PART;
return 0;
}
if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR))
return 0;
if (! (PC_SLICE_TYPE (SCRATCHADDR, part) & PC_SLICE_TYPE_HIDDEN_FLAG))
{
PC_SLICE_TYPE (SCRATCHADDR, part) |= PC_SLICE_TYPE_HIDDEN_FLAG;
buf_track = -1;
if (biosdisk (BIOSDISK_WRITE, saved_drive, &buf_geom,
0, 1, SCRATCHSEG))
{
errnum = ERR_WRITE;
return 0;
}
}
}
return 1;
}
static void static void
check_and_print_mount (void) check_and_print_mount (void)
@ -472,7 +445,7 @@ real_open_partition (int flags)
if (! sane_partition ()) if (! sane_partition ())
return 0; return 0;
#endif #endif
/* /*
* The "rawread" is probably unnecessary here, but it is good to * The "rawread" is probably unnecessary here, but it is good to
* know it works. * know it works.
@ -653,7 +626,7 @@ open_partition (void)
static int incomplete, disk_choice; static int incomplete, disk_choice;
#ifndef STAGE1_5 #ifndef STAGE1_5
static int unique; static int unique;
static char unique_string[128]; /* XXX Don't know yet */ static char unique_string[128]; /* XXX Don't know yet */
#endif #endif
static enum static enum
{ {
@ -681,7 +654,7 @@ set_device (char *device)
/* user has given '(' only, let disk_choice handle what disks we have */ /* user has given '(' only, let disk_choice handle what disks we have */
return device + 1; return device + 1;
#endif #endif
if (*device == '(' && *(++device)) if (*device == '(' && *(++device))
{ {
if (*device != ',' && *device != ')') if (*device != ',' && *device != ')')
@ -691,7 +664,7 @@ set_device (char *device)
#ifndef STAGE1_5 #ifndef STAGE1_5
if (*device == 'f' || *device == 'h') if (*device == 'f' || *device == 'h')
{ {
/* user has given '([fh]', check for resp. add 'd' and /* user has given '([fh]', check for resp. add 'd' and
let disk_choice handle what disks we have */ let disk_choice handle what disks we have */
if (!*(device + 1)) if (!*(device + 1))
{ {
@ -704,7 +677,7 @@ set_device (char *device)
return device + 2; return device + 2;
} }
#endif #endif
if ((*device == 'f' || *device == 'h') if ((*device == 'f' || *device == 'h')
&& (device += 2, (*(device - 1) != 'd'))) && (device += 2, (*(device - 1) != 'd')))
errnum = ERR_NUMBER_PARSING; errnum = ERR_NUMBER_PARSING;
@ -993,7 +966,7 @@ print_a_completion (char *filename)
{ {
char *f = filename; char *f = filename;
char *u = unique_string; char *u = unique_string;
if (! *u && unique == 0) if (! *u && unique == 0)
{ {
/* copy first string, this is unique. */ /* copy first string, this is unique. */
@ -1008,7 +981,7 @@ print_a_completion (char *filename)
*u = '\0'; *u = '\0';
} }
unique++; unique++;
printf (" %s", filename); printf (" %s", filename);
} }
@ -1024,7 +997,7 @@ print_completions (char *filename)
*unique_string = '\0'; *unique_string = '\0';
unique = 0; unique = 0;
if (*filename == '/' || (ptr = set_device (filename)) || incomplete) if (*filename == '/' || (ptr = set_device (filename)) || incomplete)
{ {
errnum = 0; errnum = 0;
@ -1039,8 +1012,8 @@ print_completions (char *filename)
printf (" Possible disks are: "); printf (" Possible disks are: ");
for (i = (ptr && (*(ptr-2) == 'h' && *(ptr-1) == 'd') ? 1 : 0); for (i = (ptr && (*(ptr-2) == 'h' && *(ptr-1) == 'd') ? 1 : 0);
i < (ptr && (*(ptr-2) == 'f' && *(ptr-1) == 'd') ? 1 : 2); i < (ptr && (*(ptr-2) == 'f' && *(ptr-1) == 'd') ? 1 : 2);
i++) i++)
{ {
for (j = 0; j < 8; j++) for (j = 0; j < 8; j++)
@ -1077,7 +1050,7 @@ print_completions (char *filename)
if ((*(ptr - 2) == 'f') && (*(ptr - 1) == 'd') if ((*(ptr - 2) == 'f') && (*(ptr - 1) == 'd')
&& ('0' <= *ptr && *ptr <= '8')) && ('0' <= *ptr && *ptr <= '8'))
*(ptr + 1) = ')', *(ptr + 2) = '\0'; *(ptr + 1) = ')', *(ptr + 2) = '\0';
putchar ('\n'); putchar ('\n');
} }
else else
@ -1113,7 +1086,7 @@ print_completions (char *filename)
dir (filename); dir (filename);
{ {
char *u = unique_string; char *u = unique_string;
if (*u) if (*u)
{ {
while (*ptr++) while (*ptr++)

View file

@ -598,11 +598,8 @@ int open_partition (void);
/* Sets device to the one represented by the SAVED_* parameters. */ /* Sets device to the one represented by the SAVED_* parameters. */
int make_saved_active (void); int make_saved_active (void);
/* Hide a partition. */ /* Set or clear the current root partition's hidden flag. */
int hide_partition (void); int set_partition_hidden_flag (int hidden);
/* Unhide a partition. */
int unhide_partition (void);
/* Open a file or directory on the active device, using GRUB's /* Open a file or directory on the active device, using GRUB's
internal filesystem support. */ internal filesystem support. */