diff --git a/dive.c b/dive.c index b57205bc5..ed3908928 100644 --- a/dive.c +++ b/dive.c @@ -26,6 +26,7 @@ void add_event(struct dive *dive, int time, int type, int flags, int value, cons while (*p) p = &(*p)->next; *p = ev; + remember_event(name); } double get_depth_units(unsigned int mm, int *frac, const char **units) diff --git a/dive.h b/dive.h index 7c64c21e2..1008e56bf 100644 --- a/dive.h +++ b/dive.h @@ -262,6 +262,7 @@ extern void report_error(GError* error); extern void add_cylinder_description(cylinder_type_t *); extern void add_people(const char *string); extern void add_location(const char *string); +extern void remember_event(const char *eventname); extern void dive_list_update_dives(void); extern void flush_divelist(struct dive *dive); diff --git a/profile.c b/profile.c index 5dad475bc..11b01b503 100644 --- a/profile.c +++ b/profile.c @@ -166,6 +166,37 @@ static void plot_text(struct graphics_context *gc, const text_render_options_t * cairo_show_text(cr, buffer); } +struct ev_select { + char *ev_name; + gboolean plot_ev; +}; +static struct ev_select *ev_namelist; +static int evn_allocated; +static int evn_used; + +void remember_event(const char *eventname) +{ + int i=0, len; + + if (!eventname || (len = strlen(eventname)) == 0) + return; + while (i < evn_used) { + if (!strncmp(eventname,ev_namelist[i].ev_name,len)) + return; + i++; + } + if (evn_used == evn_allocated) { + evn_allocated += 10; + ev_namelist = realloc(ev_namelist, evn_allocated * sizeof(struct ev_select)); + if (! ev_namelist) + /* we are screwed, but let's just bail out */ + return; + } + ev_namelist[evn_used].ev_name = strdup(eventname); + ev_namelist[evn_used].plot_ev = TRUE; + evn_used++; +} + static void plot_one_event(struct graphics_context *gc, struct plot_info *pi, struct event *event, const text_render_options_t *tro) { int i, depth = 0;