On Mon, Sep 15, 2008 at 8:55 PM, Chouinard, Luc <Luc.Chouinard@xxxxxxxxxxxxxxxx> 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@xxxxxxxxxx > [mailto:crash-utility-bounces@xxxxxxxxxx] 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: [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@xxxxxxx> wrote: >> >> From: Cliff Wickman <cpw@xxxxxxx> >> >> 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@xxxxxxx> >> --- >> 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@xxxxxxxxxx >> https://www.redhat.com/mailman/listinfo/crash-utility >> > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility > > > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility