summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c1
-rw-r--r--dive.h1
-rw-r--r--profile.c31
3 files changed, 33 insertions, 0 deletions
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;