+ readloop(readfwd, eUseDefault);
+ }
+}
+
+
+/*
+ * free memory allocated using libical
+ */
+void delete_task(void *vCal)
+{
+ disp_cal *Cal = (disp_cal*) vCal;
+ icalcomponent_free(Cal->cal);
+ free(Cal->from);
+ free(Cal);
+}
+
+
+/*
+ * Load a Task into a hash table for later display.
+ */
+void load_task(icalcomponent *event, long msgnum, char *from, int unread, calview *calv)
+{
+ icalproperty *ps = NULL;
+ struct icaltimetype dtstart, dtend;
+ wcsession *WCC = WC;
+ disp_cal *Cal;
+ size_t len;
+ icalcomponent *cptr = NULL;
+
+ dtstart = icaltime_null_time();
+ dtend = icaltime_null_time();
+
+ if (WCC->disp_cal_items == NULL) {
+ WCC->disp_cal_items = NewHash(0, Flathash);
+ }
+
+ Cal = (disp_cal*) malloc(sizeof(disp_cal));
+ memset(Cal, 0, sizeof(disp_cal));
+ Cal->cal = icalcomponent_new_clone(event);
+
+ /* Dezonify and decapsulate at the very last moment */
+ ical_dezonify(Cal->cal);
+ if (icalcomponent_isa(Cal->cal) != ICAL_VTODO_COMPONENT) {
+ cptr = icalcomponent_get_first_component(Cal->cal, ICAL_VTODO_COMPONENT);
+ if (cptr) {
+ cptr = icalcomponent_new_clone(cptr);
+ icalcomponent_free(Cal->cal);
+ Cal->cal = cptr;
+ }