Remove grub_commands_iterate
This commit is contained in:
parent
e4ff66281a
commit
d85da27cc0
3 changed files with 82 additions and 99 deletions
145
commands/help.c
145
commands/help.c
|
@ -33,94 +33,87 @@ grub_cmd_help (grub_extcmd_t ext __attribute__ ((unused)), int argc,
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
char *currarg;
|
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->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) &&
|
|
||||||
(cmd->flags & GRUB_COMMAND_FLAG_CMDLINE))
|
|
||||||
{
|
|
||||||
struct grub_term_output *term;
|
|
||||||
const char *summary_translated = _(cmd->summary);
|
|
||||||
char *command_help;
|
|
||||||
grub_uint32_t *unicode_command_help;
|
|
||||||
grub_uint32_t *unicode_last_position;
|
|
||||||
|
|
||||||
command_help = grub_xasprintf ("%s %s", cmd->name, summary_translated);
|
|
||||||
if (!command_help)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
grub_utf8_to_ucs4_alloc (command_help, &unicode_command_help,
|
|
||||||
&unicode_last_position);
|
|
||||||
|
|
||||||
FOR_ACTIVE_TERM_OUTPUTS(term)
|
|
||||||
{
|
|
||||||
unsigned stringwidth;
|
|
||||||
grub_uint32_t *unicode_last_screen_position;
|
|
||||||
|
|
||||||
unicode_last_screen_position = unicode_command_help;
|
|
||||||
|
|
||||||
stringwidth = 0;
|
|
||||||
|
|
||||||
while (unicode_last_screen_position < unicode_last_position &&
|
|
||||||
stringwidth < ((grub_term_width (term) / 2) - 2))
|
|
||||||
{
|
|
||||||
stringwidth
|
|
||||||
+= grub_term_getcharwidth (term,
|
|
||||||
*unicode_last_screen_position);
|
|
||||||
unicode_last_screen_position++;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_print_ucs4 (unicode_command_help,
|
|
||||||
unicode_last_screen_position, term);
|
|
||||||
if (!(cnt % 2))
|
|
||||||
grub_print_spaces (term, grub_term_width (term) / 2
|
|
||||||
- stringwidth);
|
|
||||||
}
|
|
||||||
if (cnt % 2)
|
|
||||||
grub_printf ("\n");
|
|
||||||
cnt++;
|
|
||||||
|
|
||||||
grub_free (command_help);
|
|
||||||
grub_free (unicode_command_help);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int print_command_help (grub_command_t cmd)
|
|
||||||
{
|
|
||||||
if (cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE)
|
|
||||||
{
|
|
||||||
if (! grub_strncmp (cmd->name, currarg, grub_strlen (currarg)))
|
|
||||||
{
|
|
||||||
if (cnt++ > 0)
|
|
||||||
grub_printf ("\n\n");
|
|
||||||
|
|
||||||
if (cmd->flags & GRUB_COMMAND_FLAG_EXTCMD)
|
|
||||||
grub_arg_show_help ((grub_extcmd_t) cmd->data);
|
|
||||||
else
|
|
||||||
grub_printf ("%s %s %s\n%s\b", _("Usage:"), cmd->name, _(cmd->summary),
|
|
||||||
_(cmd->description));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
{
|
{
|
||||||
grub_command_iterate (print_command_info);
|
grub_command_t cmd;
|
||||||
|
FOR_COMMANDS(cmd)
|
||||||
|
{
|
||||||
|
if ((cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) &&
|
||||||
|
(cmd->flags & GRUB_COMMAND_FLAG_CMDLINE))
|
||||||
|
{
|
||||||
|
struct grub_term_output *term;
|
||||||
|
const char *summary_translated = _(cmd->summary);
|
||||||
|
char *command_help;
|
||||||
|
grub_uint32_t *unicode_command_help;
|
||||||
|
grub_uint32_t *unicode_last_position;
|
||||||
|
|
||||||
|
command_help = grub_xasprintf ("%s %s", cmd->name, summary_translated);
|
||||||
|
if (!command_help)
|
||||||
|
break;
|
||||||
|
|
||||||
|
grub_utf8_to_ucs4_alloc (command_help, &unicode_command_help,
|
||||||
|
&unicode_last_position);
|
||||||
|
|
||||||
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
|
{
|
||||||
|
unsigned stringwidth;
|
||||||
|
grub_uint32_t *unicode_last_screen_position;
|
||||||
|
|
||||||
|
unicode_last_screen_position = unicode_command_help;
|
||||||
|
|
||||||
|
stringwidth = 0;
|
||||||
|
|
||||||
|
while (unicode_last_screen_position < unicode_last_position &&
|
||||||
|
stringwidth < ((grub_term_width (term) / 2) - 2))
|
||||||
|
{
|
||||||
|
stringwidth
|
||||||
|
+= grub_term_getcharwidth (term,
|
||||||
|
*unicode_last_screen_position);
|
||||||
|
unicode_last_screen_position++;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_print_ucs4 (unicode_command_help,
|
||||||
|
unicode_last_screen_position, term);
|
||||||
|
if (!(cnt % 2))
|
||||||
|
grub_print_spaces (term, grub_term_width (term) / 2
|
||||||
|
- stringwidth);
|
||||||
|
}
|
||||||
|
if (cnt % 2)
|
||||||
|
grub_printf ("\n");
|
||||||
|
cnt++;
|
||||||
|
|
||||||
|
grub_free (command_help);
|
||||||
|
grub_free (unicode_command_help);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!(cnt % 2))
|
if (!(cnt % 2))
|
||||||
grub_printf ("\n");
|
grub_printf ("\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
grub_command_t cmd;
|
||||||
|
|
||||||
for (i = 0; i < argc; i++)
|
for (i = 0; i < argc; i++)
|
||||||
{
|
{
|
||||||
currarg = args[i];
|
currarg = args[i];
|
||||||
grub_command_iterate (print_command_help);
|
FOR_COMMANDS(cmd)
|
||||||
|
{
|
||||||
|
if (cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE)
|
||||||
|
{
|
||||||
|
if (! grub_strncmp (cmd->name, currarg, grub_strlen (currarg)))
|
||||||
|
{
|
||||||
|
if (cnt++ > 0)
|
||||||
|
grub_printf ("\n\n");
|
||||||
|
|
||||||
|
if (cmd->flags & GRUB_COMMAND_FLAG_EXTCMD)
|
||||||
|
grub_arg_show_help ((grub_extcmd_t) cmd->data);
|
||||||
|
else
|
||||||
|
grub_printf ("%s %s %s\n%s\b", _("Usage:"), cmd->name, _(cmd->summary),
|
||||||
|
_(cmd->description));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,12 +115,7 @@ grub_command_execute (const char *name, int argc, char **argv)
|
||||||
return (cmd) ? cmd->func (cmd, argc, argv) : GRUB_ERR_FILE_NOT_FOUND;
|
return (cmd) ? cmd->func (cmd, argc, argv) : GRUB_ERR_FILE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
#define FOR_COMMANDS(var) for ((var) = grub_command_list; (var); (var) = (var)->next)
|
||||||
grub_command_iterate (int (*func) (grub_command_t))
|
|
||||||
{
|
|
||||||
return grub_list_iterate (GRUB_AS_LIST (grub_command_list),
|
|
||||||
(grub_list_hook_t) func);
|
|
||||||
}
|
|
||||||
|
|
||||||
void grub_register_core_commands (void);
|
void grub_register_core_commands (void);
|
||||||
|
|
||||||
|
|
|
@ -176,21 +176,6 @@ iterate_dev (const char *devname)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
iterate_command (grub_command_t cmd)
|
|
||||||
{
|
|
||||||
if (cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE)
|
|
||||||
{
|
|
||||||
if (cmd->flags & GRUB_COMMAND_FLAG_CMDLINE)
|
|
||||||
{
|
|
||||||
if (add_completion (cmd->name, " ", GRUB_COMPLETION_TYPE_COMMAND))
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Complete a device. */
|
/* Complete a device. */
|
||||||
static int
|
static int
|
||||||
complete_device (void)
|
complete_device (void)
|
||||||
|
@ -421,8 +406,18 @@ grub_normal_do_completion (char *buf, int *restore,
|
||||||
if (argc == 1 || argc == 0)
|
if (argc == 1 || argc == 0)
|
||||||
{
|
{
|
||||||
/* Complete a command. */
|
/* Complete a command. */
|
||||||
if (grub_command_iterate (iterate_command))
|
grub_command_t cmd;
|
||||||
goto fail;
|
FOR_COMMANDS(cmd)
|
||||||
|
{
|
||||||
|
if (cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE)
|
||||||
|
{
|
||||||
|
if (cmd->flags & GRUB_COMMAND_FLAG_CMDLINE)
|
||||||
|
{
|
||||||
|
if (add_completion (cmd->name, " ", GRUB_COMPLETION_TYPE_COMMAND))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (*current_word == '-')
|
else if (*current_word == '-')
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue