+
+int write_events(Gedcom_write_hndl hndl, int parent, EventType evt_type,
+ struct event* evt)
+{
+ int result = 0;
+ int i;
+ struct event* obj;
+
+ if (!evt) return 1;
+
+ for (obj = evt; obj; obj = obj->next) {
+ int obj_elt = get_gedcom_elt(evt_type, obj->event);
+ result |= gedcom_write_element_str(hndl, obj_elt, obj->event,
+ parent, obj->val);
+ if (obj->type)
+ result |= gedcom_write_element_str(hndl, ELT_SUB_EVT_TYPE, 0,
+ obj_elt, obj->type);
+ if (obj->date)
+ result |= gedcom_write_element_date(hndl, ELT_SUB_EVT_DATE, 0,
+ obj_elt, obj->date);
+ if (obj->place)
+ result |= write_place(hndl, obj_elt, obj->place);
+ if (obj->address)
+ result |= write_address(hndl, obj_elt, obj->address);
+ for (i = 0; i < 3 && obj->phone[i]; i++)
+ result |= gedcom_write_element_str(hndl, ELT_SUB_PHON, 0, obj_elt,
+ obj->phone[i]);
+ if (obj->age)
+ result |= gedcom_write_element_age(hndl, ELT_SUB_EVT_AGE, 0,
+ obj_elt, obj->age);
+ if (obj->agency)
+ result |= gedcom_write_element_str(hndl, ELT_SUB_EVT_AGNC, 0,
+ obj_elt, obj->agency);
+ if (obj->cause)
+ result |= gedcom_write_element_str(hndl, ELT_SUB_EVT_CAUS, 0,
+ obj_elt, obj->cause);
+ if (obj->citation)
+ result |= write_citations(hndl, obj_elt, obj->citation);
+ if (obj->mm_link)
+ result |= write_multimedia_links(hndl, obj_elt, obj->mm_link);
+ if (obj->note)
+ result |= write_note_subs(hndl, obj_elt, obj->note);
+ if (obj->husband_age) {
+ result |= gedcom_write_element_str(hndl, ELT_SUB_FAM_EVT_HUSB, 0,
+ obj_elt, NULL);
+ result |= gedcom_write_element_age(hndl, ELT_SUB_FAM_EVT_AGE, 0,
+ ELT_SUB_FAM_EVT_HUSB,
+ obj->husband_age);
+ }
+ if (obj->wife_age) {
+ result |= gedcom_write_element_str(hndl, ELT_SUB_FAM_EVT_WIFE, 0,
+ obj_elt, NULL);
+ result |= gedcom_write_element_age(hndl, ELT_SUB_FAM_EVT_AGE, 0,
+ ELT_SUB_FAM_EVT_WIFE,
+ obj->wife_age);
+ }
+ if (obj->family) {
+ int fam_obj_elt = get_gedcom_fam_elt(obj_elt);
+ result |= gedcom_write_element_xref(hndl, fam_obj_elt, 0,
+ obj_elt, obj->family);
+ if (obj->adoption_parent) {
+ result |= gedcom_write_element_str(hndl, ELT_SUB_INDIV_ADOP_FAMC_ADOP,
+ 0, fam_obj_elt,
+ obj->adoption_parent);
+ }
+ }
+ if (obj->extra)
+ result |= write_user_data(hndl, obj->extra);
+ }
+
+ return result;
+}
+