#ifndef  __STAGLIST_H
#define  __STAGLIST_H

typedef struct staglist_struct staglist;
typedef struct staglist_struct *staglist_p;
struct staglist_struct
{
    /* name of this tag */
    char *name;

    /* pointer to the function which handles it */
    void (*function) (context_p, char **, int, char**);
    
    /* pointer to the next simple stag */
    staglist_p next;
};

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

staglist_p staglist_init();
void       staglist_destroy(staglist_p simple_tag_list);
int        staglist_alias(staglist_p *simple_tag_list, char *old_name,
                          char *new_name);
int        staglist_register(staglist_p *simple_tag_list, char *name,
                             void (*function)(context_p, char **, int, char**));
void       staglist_remove(staglist_p *simple_tag_list, char *name);
int        staglist_exists(staglist_p simple_tag_list, char *name);
int        staglist_exec(staglist_p simple_tag_list, char *name, context_p ctx,
                         char **output, int argc, char **argv);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __STAGLIST_H */