From 3b259b56207e6334eb4ec98f7c17d6b11cf15b85 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Wed, 4 Jul 2012 10:51:26 +0200
Subject: Add day_item_fork()

Add a new function that can be used to copy one day item into another,
cloning the actual item that is linked.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/calcurse.h |  1 +
 src/day.c      | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/src/calcurse.h b/src/calcurse.h
index afbf1b0..cefc850 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -667,6 +667,7 @@ char *day_item_get_mesg(struct day_item *);
 char *day_item_get_note(struct day_item *);
 long day_item_get_duration(struct day_item *);
 int day_item_get_state(struct day_item *);
+void day_item_fork(struct day_item *, struct day_item *);
 int day_store_items(long, unsigned *, unsigned *, regex_t *);
 struct day_items_nb *day_process_storage(struct date *, unsigned,
                                          struct day_items_nb *);
diff --git a/src/day.c b/src/day.c
index 179b97b..26ae3e0 100644
--- a/src/day.c
+++ b/src/day.c
@@ -149,6 +149,31 @@ int day_item_get_state(struct day_item *day)
   }
 }
 
+/* Clone the actual item. */
+void day_item_fork(struct day_item *day_in, struct day_item *day_out)
+{
+  day_out->type = day_in->type;
+  day_out->start = day_in->start;
+
+  switch (day_in->type) {
+  case APPT:
+    day_out->item.apt = apoint_dup(day_in->item.apt);
+    break;
+  case EVNT:
+    day_out->item.ev = event_dup(day_in->item.ev);
+    break;
+  case RECUR_APPT:
+    day_out->item.rapt = recur_apoint_dup(day_in->item.rapt);
+    break;
+  case RECUR_EVNT:
+    day_out->item.rev = recur_event_dup(day_in->item.rev);
+    break;
+  default:
+    EXIT(_("unknown item type"));
+    /* NOTREACHED */
+  }
+}
+
 /*
  * Store the events for the selected day in structure pointed
  * by day_items. This is done by copying the events
-- 
cgit v1.2.3-70-g09d2