summaryrefslogtreecommitdiffstats
path: root/core/event.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/event.h')
-rw-r--r--core/event.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/core/event.h b/core/event.h
new file mode 100644
index 000000000..4c729e3f3
--- /dev/null
+++ b/core/event.h
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef EVENT_H
+#define EVENT_H
+
+#include "divemode.h"
+#include "gas.h"
+#include "units.h"
+
+#include <libdivecomputer/parser.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Events are currently based straight on what libdivecomputer gives us.
+ * We need to wrap these into our own events at some point to remove some of the limitations.
+ */
+struct event {
+ struct event *next;
+ duration_t time;
+ int type;
+ /* This is the annoying libdivecomputer format. */
+ int flags, value;
+ /* .. and this is our "extended" data for some event types */
+ union {
+ enum divemode_t divemode; // for divemode change events
+ /*
+ * NOTE! The index may be -1, which means "unknown". In that
+ * case, the get_cylinder_index() function will give the best
+ * match with the cylinders in the dive based on gasmix.
+ */
+ struct { // for gas switch events
+ int index;
+ struct gasmix mix;
+ } gas;
+ };
+ bool deleted;
+ char name[];
+};
+
+struct ev_select {
+ char *ev_name;
+ bool plot_ev;
+};
+
+/* collect all event names and whether we display them */
+extern struct ev_select *ev_namelist;
+extern int evn_used;
+
+extern int event_is_gaschange(const struct event *ev);
+extern bool event_is_divemodechange(const struct event *ev);
+extern struct event *clone_event(const struct event *src_ev);
+extern void free_events(struct event *ev);
+extern struct event *create_event(unsigned int time, int type, int flags, int value, const char *name);
+extern struct event *clone_event_rename(const struct event *ev, const char *name);
+extern bool same_event(const struct event *a, const struct event *b);
+extern void remember_event(const char *eventname);
+extern void clear_events(void);
+
+/* Since C doesn't have parameter-based overloading, two versions of get_next_event. */
+extern const struct event *get_next_event(const struct event *event, const char *name);
+extern struct event *get_next_event_mutable(struct event *event, const char *name);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif