[Crash-utility] [PATCH] help screen indication of extensioncommands
Jun Koi
junkoi2004 at gmail.com
Mon Sep 15 14:39:28 UTC 2008
On Mon, Sep 15, 2008 at 8:55 PM, Chouinard, Luc
<Luc.Chouinard at trueposition.com> wrote:
> Simple Image Access Language
> An embedded C interpreter [C syntax with a few twists].
> Start with Dave's page, there are a couple of URLs to more info from
> there.
>
> http://people.redhat.com/anderson/extensions.html
Is it true that SIAL is only limited to use with crash and LKCD (and
nobody else)?
I found very limited documentation about SIAL in the crash source
tree. Is there anything useful elsewhere? (Google didnt show anything
interesting)
Thanks,
Jun
> -----Original Message-----
> From: crash-utility-bounces at redhat.com
> [mailto:crash-utility-bounces at redhat.com] On Behalf Of Jun Koi
> Sent: Monday, September 15, 2008 1:35 AM
> To: Discussion list for crash utility usage,maintenance and development
> Subject: Re: [Crash-utility] [PATCH] help screen indication of
> extensioncommands
>
> Hi,
>
> Sorry but could you explain a bit about that "SIAL" feature? Where can
> I have some information on the "SIAL"?
>
> Thanks,
> Jun
>
> On Sun, Sep 14, 2008 at 3:11 PM, Cliff Wickman <cpw at sgi.com> wrote:
>>
>> From: Cliff Wickman <cpw at sgi.com>
>>
>> It would be nice if the help screen differentiated between built-in
>> commands and extension commands.
>> Particularly in the case of sial extensions, as you can edit them
>> in your crash session. If you know that the command is sial you
>> can fix or enhance it if necessary.
>>
>> This patch implements that by changing the pc->cmdlist from a list
>> of name pointers to a list of struct command_table_entry pointers.
>> Then the help screen can highlight those containing a new flag:
>> if (cp->flags & EXTENSION)
>>
>> Diffed against crash-4.0-4.7
>>
>> Signed-off-by: Cliff Wickman <cpw at sgi.com>
>> ---
>> defs.h | 4 ++-
>> help.c | 66
> ++++++++++++++++++++++++++++++++++++++++-------------------------
>> 2 files changed, 44 insertions(+), 26 deletions(-)
>>
>> Index: crash-4.0-4.7/help.c
>> ===================================================================
>> --- crash-4.0-4.7.orig/help.c
>> +++ crash-4.0-4.7/help.c
>> @@ -154,19 +154,23 @@ help_init(void)
>> for (cp = ext->command_table; cp->name; cp++) {
>> if (!(cp->flags & (CLEANUP|HIDDEN_COMMAND)))
>> pc->ncmds++;
>> + cp->flags |= EXTENSION;
>> }
>> }
>>
>> if (!pc->cmdlist) {
>> pc->cmdlistsz = pc->ncmds;
>> - if ((pc->cmdlist = (char **)
>> - malloc(sizeof(char *) * pc->cmdlistsz)) ==
> NULL)
>> + if ((pc->cmdlist = (struct command_table_entry **)
>> + malloc(sizeof(struct command_table_entry *) *
>> + pc->cmdlistsz)) == NULL)
>> error(FATAL,
>> "cannot malloc command list
> space\n");
>> } else if (pc->ncmds > pc->cmdlistsz) {
>> pc->cmdlistsz = pc->ncmds;
>> - if ((pc->cmdlist = (char **)realloc(pc->cmdlist,
>> - sizeof(char *) * pc->cmdlistsz)) == NULL)
>> + if ((pc->cmdlist = (struct command_table_entry **)
>> + realloc(pc->cmdlist,
>> + sizeof(struct command_table_entry *) *
>> + pc->cmdlistsz)) == NULL)
>> error(FATAL,
>> "cannot realloc command list
> space\n");
>> }
>> @@ -190,13 +194,13 @@ reshuffle_cmdlist(void)
>>
>> for (cnt = 0, cp = pc->cmd_table; cp->name; cp++) {
>> if (!(cp->flags & HIDDEN_COMMAND))
>> - pc->cmdlist[cnt++] = cp->name;
>> + pc->cmdlist[cnt++] = cp;
>> }
>>
>> for (ext = extension_table; ext; ext = ext->next) {
>> for (cp = ext->command_table; cp->name; cp++) {
>> if (!(cp->flags & (CLEANUP|HIDDEN_COMMAND)))
>> - pc->cmdlist[cnt++] = cp->name;
>> + pc->cmdlist[cnt++] = cp;
>> }
>> }
>>
>> @@ -212,19 +216,21 @@ reshuffle_cmdlist(void)
>> * The help list is in alphabetical order, with exception of the "q"
> command,
>> * which has historically always been the last command in the list.
>> */
>> -
>> +/*
>> + * the pointers are pointers to struct command_table_entry
>> + */
>> static int
>> -sort_command_name(const void *name1, const void *name2)
>> +sort_command_name(const void *struct1, const void *struct2)
>> {
>> - char **s1, **s2;
>> + char *s1, *s2;
>>
>> - s1 = (char **)name1;
>> - s2 = (char **)name2;
>> + s1 = (*(struct command_table_entry **)struct1)->name;
>> + s2 = (*(struct command_table_entry **)struct2)->name;
>>
>> - if (STREQ(*s1, "q"))
>> + if (STREQ(s1, "q"))
>> return 1;
>>
>> - return strcmp(*s1, *s2);
>> + return strcmp(s1, s2);
>> }
>>
>>
>> @@ -408,8 +414,9 @@ cmd_help(void)
>> void
>> display_help_screen(char *indent)
>> {
>> - int i, j, rows;
>> + int i, j, rows, ext_count=0;
>> char **namep;
>> + struct command_table_entry **cpp, *cp;
>>
>> help_init();
>>
>> @@ -418,15 +425,23 @@ display_help_screen(char *indent)
>> rows = (pc->ncmds + (HELP_COLUMNS-1)) / HELP_COLUMNS;
>>
>> for (i = 0; i < rows; i++) {
>> - namep = &pc->cmdlist[i];
>> + cpp = &(pc->cmdlist[i]);
>> for (j = 0; j < HELP_COLUMNS; j++) {
>> - fprintf(fp,"%-15s", *namep);
>> - namep += rows;
>> - if ((namep - pc->cmdlist) >= pc->ncmds)
>> + cp = *cpp;
>> + if (cp->flags & EXTENSION) {
>> + fprintf(fp,"+%-15s", cp->name);
>> + ext_count++;
>> + } else {
>> + fprintf(fp," %-15s", cp->name);
>> + }
>> + cpp += rows;
>> + if ((cpp - pc->cmdlist) >= pc->ncmds)
>> break;
>> }
>> fprintf(fp,"\n%s", indent);
>> }
>> + if (ext_count)
>> + fprintf(fp,"+ denotes an extension command\n%s",
> indent);
>>
>> fprintf(fp, "\n%s%s version: %-6s gdb version: %s\n",
> indent,
>> pc->program_name, pc->program_version,
> pc->gdb_version);
>> @@ -454,17 +469,16 @@ static void
>> display_commands(void)
>> {
>> int i, j, rows;
>> - char **namep;
>> + struct command_table_entry **cp;
>>
>> help_init();
>> rows = (pc->ncmds + (HELP_COLUMNS-1)) / HELP_COLUMNS;
>>
>> for (i = 0; i < rows; i++) {
>> - namep = &pc->cmdlist[i];
>> + cp = &pc->cmdlist[i];
>> for (j = 0; j < HELP_COLUMNS; j++) {
>> - fprintf(fp,"%s\n", *namep);
>> - namep += rows;
>> - if ((namep - pc->cmdlist) >= pc->ncmds) {
>> + cp += rows;
>> + if ((cp - pc->cmdlist) >= pc->ncmds) {
>> fprintf(fp, "BREAK\n");
>> break;
>> }
>> @@ -4957,8 +4971,10 @@ cmd_usage(char *cmd, int helpflag)
>> display_input_info();
>> display_output_info();
>> help_init();
>> - for (i = 0; i < pc->ncmds; i++)
>> - cmd_usage(pc->cmdlist[i], COMPLETE_HELP);
>> + for (i = 0; i < pc->ncmds; i++) {
>> + cp = *(&(pc->cmdlist[i]));
>> + cmd_usage(cp->name, COMPLETE_HELP);
>> + }
>> display_warranty_info();
>> display_copying_info();
>> goto done_usage;
>> Index: crash-4.0-4.7/defs.h
>> ===================================================================
>> --- crash-4.0-4.7.orig/defs.h
>> +++ crash-4.0-4.7/defs.h
>> @@ -383,7 +383,8 @@ struct program_context {
>> struct termios termios_orig; /* non-raw settings */
>> struct termios termios_raw; /* while gathering command
> input */
>> int ncmds; /* number of commands in menu
> */
>> - char **cmdlist; /* current list of available
> commands */
>> + struct command_table_entry **cmdlist;
>> + /* current list of available
> commands */
>> int cmdlistsz; /* space available in cmdlist
> */
>> unsigned output_radix; /* current gdb output_radix */
>> void *sbrk; /* current sbrk value */
>> @@ -409,6 +410,7 @@ struct command_table_entry {
>> #define REFRESH_TASK_TABLE (0x1) /* command_table_entry
> flags */
>> #define HIDDEN_COMMAND (0x2)
>> #define CLEANUP (0x4) /* for extensions only */
>> +#define EXTENSION (0x8) /* is an extension */
>>
>> /*
>> * A linked list of extension table structures keeps track of the
> current
>>
>> --
>> Crash-utility mailing list
>> Crash-utility at redhat.com
>> https://www.redhat.com/mailman/listinfo/crash-utility
>>
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
>
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
More information about the Crash-utility
mailing list