summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/dive.c24
-rw-r--r--core/dive.h2
2 files changed, 23 insertions, 3 deletions
diff --git a/core/dive.c b/core/dive.c
index ffdf91ae3..25084a554 100644
--- a/core/dive.c
+++ b/core/dive.c
@@ -125,10 +125,10 @@ int event_is_gaschange(const struct event *ev)
ev->type == SAMPLE_EVENT_GASCHANGE2;
}
-struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name)
+struct event *create_event(unsigned int time, int type, int flags, int value, const char *name)
{
int gas_index = -1;
- struct event *ev, **p;
+ struct event *ev;
unsigned int size, len = strlen(name);
size = sizeof(*ev) + len + 1;
@@ -163,13 +163,31 @@ struct event *add_event(struct divecomputer *dc, unsigned int time, int type, in
break;
}
+ return ev;
+}
+
+void add_event_to_dc(struct divecomputer *dc, struct event *ev)
+{
+ struct event **p;
+
p = &dc->events;
/* insert in the sorted list of events */
- while (*p && (*p)->time.seconds <= time)
+ while (*p && (*p)->time.seconds <= ev->time.seconds)
p = &(*p)->next;
ev->next = *p;
*p = ev;
+}
+
+struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name)
+{
+ struct event *ev = create_event(time, type, flags, value, name);
+
+ if (!ev)
+ return NULL;
+
+ add_event_to_dc(dc, ev);
+
remember_event(name);
return ev;
}
diff --git a/core/dive.h b/core/dive.h
index 76eccb5e8..5bbce4b00 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -377,6 +377,8 @@ extern void copy_samples(const struct divecomputer *s, struct divecomputer *d);
extern bool is_cylinder_used(const struct dive *dive, int idx);
extern bool is_cylinder_prot(const struct dive *dive, int idx);
extern void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int time, int idx);
+extern struct event *create_event(unsigned int time, int type, int flags, int value, const char *name);
+extern void add_event_to_dc(struct divecomputer *dc, struct event *ev);
extern struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name);
extern void remove_event(struct event *event);
extern void update_event_name(struct dive *d, struct event *event, const char *name);