* commands/help.c: New file.
* normal/arg.c (show_help): Renamed to...
(grub_arg_show_help): ... this.
* commands/i386/pc/halt.c: New file.
* commands/i386/pc/reboot.c: Likewise.
* conf/i386-pc.rmk (grub_emu_SOURCES): Add `commands/help.c'.
(pkgdata_MODULES): Add `reboot.mod', `halt.mod' and `help.mod'.
(help_mod_SOURCES, help_mod_CFLAGS, reboot_mod_SOURCES)
(reboot_mod_CFLAGS, halt_mod_SOURCES, halt_mod_CFLAGS): New
variables.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add
`commands/help.c'.
(pkgdata_MODULES): Add `help.mod'.
(help_mod_SOURCES, help_mod_CFLAGS): New variables.
* grub/i386/pc/init.h (grub_reboot): New prototype.
(grub_halt): Likewise.
* include/grub/normal.h (grub_arg_show_help): New prototype.
(grub_help_init): Likewise.
(grub_help_fini): Likewise.
* util/grub-emu.c (main): Initialize and deinitialize the help
command.
* normal/cmdline.c (grub_cmdline_get): Doc fix.
* normal/command.c (grub_command_init): Fixed the description of
the `set' and `unset' commands.
-2005-01-30 Marco Gerards <metgerards@student.han.nl>
+2005-01-31 Marco Gerards <metgerards@student.han.nl>
+
+ * commands/help.c: New file.
+ * normal/arg.c (show_help): Renamed to...
+ (grub_arg_show_help): ... this.
+ * commands/i386/pc/halt.c: New file.
+ * commands/i386/pc/reboot.c: Likewise.
+ * conf/i386-pc.rmk (grub_emu_SOURCES): Add `commands/help.c'.
+ (pkgdata_MODULES): Add `reboot.mod', `halt.mod' and `help.mod'.
+ (help_mod_SOURCES, help_mod_CFLAGS, reboot_mod_SOURCES)
+ (reboot_mod_CFLAGS, halt_mod_SOURCES, halt_mod_CFLAGS): New
+ variables.
+ * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add
+ `commands/help.c'.
+ (pkgdata_MODULES): Add `help.mod'.
+ (help_mod_SOURCES, help_mod_CFLAGS): New variables.
+ * grub/i386/pc/init.h (grub_reboot): New prototype.
+ (grub_halt): Likewise.
+ * include/grub/normal.h (grub_arg_show_help): New prototype.
+ (grub_help_init): Likewise.
+ (grub_help_fini): Likewise.
+ * util/grub-emu.c (main): Initialize and deinitialize the help
+ command.
+
+ * normal/cmdline.c (grub_cmdline_get): Doc fix.
+
+ * normal/command.c (grub_command_init): Fixed the description of
+ the `set' and `unset' commands.
+
+2005-01-31 Marco Gerards <metgerards@student.han.nl>
* boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_interpret): New
function.
--- /dev/null
+/* help.c - command to show a help text. */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2005 Free Software Foundation, Inc.
+ *
+ * GRUB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/arg.h>
+#include <grub/misc.h>
+
+/* XXX: This has to be changed into a function so the screen can be
+ optimally used. */
+#define TERM_WIDTH 80
+
+static grub_err_t
+grub_cmd_help (struct grub_arg_list *state __attribute__ ((unused)), int argc,
+ char **args)
+
+{
+ int cnt = 0;
+ char *currarg;
+
+ auto int print_command_info (grub_command_t cmd);
+ auto int print_command_help (grub_command_t cmd);
+
+ int print_command_info (grub_command_t cmd)
+ {
+ if (cmd->flags & GRUB_COMMAND_FLAG_CMDLINE)
+ {
+ char description[TERM_WIDTH / 2];
+ int desclen = grub_strlen (cmd->summary);
+
+ /* Make a string with a length of TERM_WIDTH / 2 - 1 filled
+ with the description followed by spaces. */
+ grub_memset (description, ' ', TERM_WIDTH / 2 - 1);
+ description[TERM_WIDTH / 2 - 1] = '\0';
+ grub_memcpy (description, cmd->summary,
+ (desclen < TERM_WIDTH / 2 - 1
+ ? desclen : TERM_WIDTH / 2 - 1));
+
+ grub_printf ("%s%s", description, (cnt++) % 2 ? "\n" : " ");
+ }
+
+ return 0;
+ }
+
+ int print_command_help (grub_command_t cmd)
+ {
+ if (!grub_strncmp (cmd->name, currarg, grub_strlen (currarg)))
+ {
+ grub_arg_show_help (cmd);
+ grub_printf ("\n\n");
+ }
+ return 0;
+ }
+
+ if (argc == 0)
+ grub_iterate_commands (print_command_info);
+ else
+ {
+ int i;
+
+ for (i = 0; i < argc; i++)
+ {
+ currarg = args[i];
+ grub_iterate_commands (print_command_help);
+ }
+ }
+
+ return 0;
+}
+
+
+\f
+#ifdef GRUB_UTIL
+void
+grub_help_init (void)
+{
+ grub_register_command ("help", grub_cmd_help, GRUB_COMMAND_FLAG_CMDLINE,
+ "help [PATTERN ...]", "Shows a help message", 0);
+}
+
+void
+grub_help_fini (void)
+{
+ grub_unregister_command ("help");
+}
+#else /* ! GRUB_UTIL */
+GRUB_MOD_INIT
+{
+ (void)mod; /* To stop warning. */
+ grub_register_command ("help", grub_cmd_help, GRUB_COMMAND_FLAG_CMDLINE,
+ "help [PATTERN ...]", "Shows a help message", 0);
+}
+
+GRUB_MOD_FINI
+{
+ grub_unregister_command ("help");
+}
+#endif /* ! GRUB_UTIL */
--- /dev/null
+/* halt.c - command to halt the computer. */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2005 Free Software Foundation, Inc.
+ *
+ * GRUB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/arg.h>
+#include <grub/machine/init.h>
+
+static const struct grub_arg_option options[] =
+ {
+ {"no-apm", 'n', 0, "Don't use APM to halt the computer", 0, 0},
+ {0, 0, 0, 0, 0, 0}
+ };
+
+static grub_err_t
+grub_cmd_halt (struct grub_arg_list *state,
+ int argc __attribute__ ((unused)),
+ char **args __attribute__ ((unused)))
+
+{
+ int no_apm = 0;
+ if (state[0].set)
+ no_apm = 1;
+ grub_halt (no_apm);
+ return 0;
+}
+
+
+\f
+#ifdef GRUB_UTIL
+void
+grub_halt_init (void)
+{
+ grub_register_command ("halt", grub_cmd_halt, GRUB_COMMAND_FLAG_BOTH,
+ "halt [OPTIONS...]",
+ "Halt the system, if possible using APM", options);
+}
+
+void
+grub_halt_fini (void)
+{
+ grub_unregister_command ("halt");
+}
+#else /* ! GRUB_UTIL */
+GRUB_MOD_INIT
+{
+ (void)mod; /* To stop warning. */
+ grub_register_command ("halt", grub_cmd_halt, GRUB_COMMAND_FLAG_BOTH,
+ "halt [OPTIONS...]",
+ "Halt the system, if possible using APM", options);
+}
+
+GRUB_MOD_FINI
+{
+ grub_unregister_command ("halt");
+}
+#endif /* ! GRUB_UTIL */
--- /dev/null
+/* reboot.c - command to reboot the computer. */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2005 Free Software Foundation, Inc.
+ *
+ * GRUB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/arg.h>
+#include <grub/machine/init.h>
+
+static grub_err_t
+grub_cmd_reboot (struct grub_arg_list *state __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char **args __attribute__ ((unused)))
+
+{
+ grub_reboot ();
+ return 0;
+}
+
+
+\f
+#ifdef GRUB_UTIL
+void
+grub_reboot_init (void)
+{
+ grub_register_command ("reboot", grub_cmd_reboot, GRUB_COMMAND_FLAG_BOTH,
+ "reboot", "Reboot the computer", 0);
+}
+
+void
+grub_reboot_fini (void)
+{
+ grub_unregister_command ("reboot");
+}
+#else /* ! GRUB_UTIL */
+GRUB_MOD_INIT
+{
+ (void)mod; /* To stop warning. */
+ grub_register_command ("reboot", grub_cmd_reboot, GRUB_COMMAND_FLAG_BOTH,
+ "reboot", "Reboot the computer", 0);
+}
+
+GRUB_MOD_FINI
+{
+ grub_unregister_command ("reboot");
+}
+#endif /* ! GRUB_UTIL */
commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c \
util/i386/pc/biosdisk.c fs/fat.c fs/ext2.c fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c fs/iso9660.c \
normal/cmdline.c normal/command.c normal/main.c normal/menu.c normal/arg.c \
- util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c disk/loopback.c
+ util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c commands/help.c \
+ disk/loopback.c
grub_emu_LDFLAGS = -lncurses
# For genmoddep.
pkgdata_MODULES = _chain.mod _linux.mod linux.mod fat.mod ufs.mod ext2.mod minix.mod \
hfs.mod jfs.mod normal.mod hello.mod vga.mod font.mod _multiboot.mod ls.mod \
boot.mod cmp.mod cat.mod terminal.mod fshelp.mod chain.mod multiboot.mod \
- amiga.mod apple.mod pc.mod loopback.mod
+ amiga.mod apple.mod pc.mod loopback.mod reboot.mod halt.mod help.mod
# For _chain.mod.
_chain_mod_SOURCES = loader/i386/pc/chainloader.c
cat_mod_SOURCES = commands/cat.c
cat_mod_CFLAGS = $(COMMON_CFLAGS)
+# For help.mod.
+help_mod_SOURCES = commands/help.c
+help_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For reboot.mod.
+reboot_mod_SOURCES = commands/i386/pc/reboot.c
+reboot_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For halt.mod.
+halt_mod_SOURCES = commands/i386/pc/halt.c
+halt_mod_CFLAGS = $(COMMON_CFLAGS)
+
# For vga.mod.
vga_mod_SOURCES = term/i386/pc/vga.c
vga_mod_CFLAGS = $(COMMON_CFLAGS)
normal/cmdline.c normal/command.c normal/main.c normal/menu.c \
normal/arg.c kern/partition.c \
util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c \
- kern/env.c disk/loopback.c commands/ls.c \
+ kern/env.c disk/loopback.c commands/ls.c commands/help.c \
commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c
grub_emu_LDFLAGS = -lncurses
pkgdata_MODULES = _linux.mod linux.mod fat.mod ufs.mod ext2.mod minix.mod \
hfs.mod jfs.mod normal.mod hello.mod font.mod \
boot.mod cmp.mod cat.mod terminal.mod fshelp.mod amiga.mod apple.mod \
- pc.mod suspend.mod loopback.mod reboot.mod halt.mod
+ pc.mod suspend.mod loopback.mod help.mod reboot.mod halt.mod
# For fshelp.mod.
fshelp_mod_SOURCES = fs/fshelp.c
# For halt.mod
halt_mod_SOURCES = commands/ieee1275/halt.c
halt_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For help.mod.
+help_mod_SOURCES = commands/help.c
+help_mod_CFLAGS = $(COMMON_CFLAGS)
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ * Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/* Turn on/off Gate A20. */
void grub_gate_a20 (int on);
+/* Reboot the machine. */
+void EXPORT_FUNC (grub_reboot) (void);
+
+/* Halt the system, using APM if possible. If NO_APM is true, don't
+ * use APM even if it is available. */
+void EXPORT_FUNC (grub_halt) (int no_apm);
+
+
#endif /* ! GRUB_INIT_MACHINE_HEADER */
/* normal.h - prototypes for the normal mode */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2002,2003,2005 Free Software Foundation, Inc.
+ * Copyright (C) 2002,2003 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
void grub_normal_init_page (void);
int grub_arg_parse (grub_command_t parser, int argc, char **argv,
struct grub_arg_list *usr, char ***args, int *argnum);
+void grub_arg_show_help (grub_command_t cmd);
#ifdef GRUB_UTIL
void grub_terminal_fini (void);
void grub_loop_init (void);
void grub_loop_fini (void);
+void grub_help_init (void);
+void grub_help_fini (void);
#endif
#endif /* ! GRUB_NORMAL_HEADER */
grub_printf ("Usage: %s\n", cmd->summary);
}
-static void
-show_help (grub_command_t cmd)
+void
+grub_arg_show_help (grub_command_t cmd)
{
static void showargs (const struct grub_arg_option *opt)
{
switch (key)
{
case 'h':
- show_help (cmd);
+ grub_arg_show_help (cmd);
return -1;
case 'u':
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
+ * Copyright (C) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/* Get a command-line. If ECHO_CHAR is not zero, echo it instead of input
characters. If READLINE is non-zero, readline-like key bindings are
- available. If ESC is pushed, return non-zero, otherwise return zero. */
+ available. If ESC is pushed, return zero, otherwise return non-zero. */
/* FIXME: The dumb interface is not supported yet. */
int
grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len,
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2003 Free Software Foundation, Inc.
+ * Copyright (C) 2003, 2005 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
"rescue", "Enter into the rescue mode.", 0);
grub_register_command ("set", set_command, GRUB_COMMAND_FLAG_BOTH,
- "unset ENVVAR", "Set an environment variable.", 0);
+ "set [ENVVAR=VALUE]", "Set an environment variable.", 0);
grub_register_command ("unset", unset_command, GRUB_COMMAND_FLAG_BOTH,
- "set [ENVVAR=VALUE]", "Remove an environment variable.", 0);
+ "unset ENVVAR", "Remove an environment variable.", 0);
grub_register_command ("insmod", insmod_command, GRUB_COMMAND_FLAG_BOTH,
"insmod MODULE|FILE", "Insert a module.", 0);
grub_cat_init ();
grub_terminal_init ();
grub_loop_init ();
+ grub_help_init ();
/* XXX: Should normal mode be started by default? */
grub_normal_init ();
/* Start GRUB! */
grub_main ();
+ grub_help_fini ();
grub_loop_fini ();
grub_util_biosdisk_fini ();
grub_normal_fini ();