Writing dates and ages.
[gedcom-parse.git] / gom / submission.c
index 1c84088572303e6d43ca212b48cb83796f2a7687..3fe9b4041ffaece01f2c45cad5be84ef4cc1c485 100644 (file)
@@ -56,7 +56,8 @@ void submission_subscribe()
 void submission_add_user_data(Gom_ctxt ctxt, struct user_data* data)
 {
   struct submission *obj = SAFE_CTXT_CAST(submission, ctxt);
-  LINK_CHAIN_ELT(user_data, obj->extra, data)
+  if (obj)
+    LINK_CHAIN_ELT(user_data, obj->extra, data);
 }
 
 void submission_cleanup()
@@ -69,7 +70,7 @@ void submission_cleanup()
     SAFE_FREE(gom_submission->nr_of_descendant_gens);
     SAFE_FREE(gom_submission->ordinance_process_flag);
     SAFE_FREE(gom_submission->record_id);
-    DESTROY_CHAIN_ELTS(user_data, gom_submission->extra, user_data_cleanup)
+    DESTROY_CHAIN_ELTS(user_data, gom_submission->extra, user_data_cleanup);
     SAFE_FREE(gom_submission);
   }
 }
@@ -79,13 +80,53 @@ struct submission* gom_get_submission()
   return gom_submission;
 }
 
-struct submission* make_submission_record(char* xref)
+struct submission* make_submission_record(const char* xref)
 {
   if (! gom_submission) {
     gom_submission = (struct submission*)malloc(sizeof(struct submission));
-    memset(gom_submission, 0, sizeof(struct submission));
-    gom_submission->xrefstr = strdup(xref);
+    if (! gom_submission)
+      MEMORY_ERROR;
+    else {
+      memset(gom_submission, 0, sizeof(struct submission));
+      gom_submission->xrefstr = strdup(xref);
+      if (!gom_submission->xrefstr) MEMORY_ERROR;
+    }
   }
   
   return gom_submission;
 }
+
+int write_submission(Gedcom_write_hndl hndl)
+{
+  int result = 0;
+
+  if (gom_submission) {
+    result |= gedcom_write_record_str(hndl, REC_SUBN, 0,
+                                     gom_submission->xrefstr, NULL);
+    if (gom_submission->submitter)
+      result |= gedcom_write_element_xref(hndl, ELT_SUBN_SUBM, 0,
+                                         REC_SUBN, gom_submission->submitter);
+    if (gom_submission->family_file)
+      result |= gedcom_write_element_str(hndl, ELT_SUBN_FAMF, 0, REC_SUBN,
+                                        gom_submission->family_file);
+    if (gom_submission->temple_code)
+      result |= gedcom_write_element_str(hndl, ELT_SUBN_TEMP, 0, REC_SUBN,
+                                        gom_submission->temple_code);
+    if (gom_submission->nr_of_ancestor_gens)
+      result |= gedcom_write_element_str(hndl, ELT_SUBN_ANCE, 0, REC_SUBN,
+                                        gom_submission->nr_of_ancestor_gens);
+    if (gom_submission->nr_of_descendant_gens)
+      result |= gedcom_write_element_str(hndl, ELT_SUBN_DESC, 0, REC_SUBN,
+                                       gom_submission->nr_of_descendant_gens);
+    if (gom_submission->ordinance_process_flag)
+      result |= gedcom_write_element_str(hndl, ELT_SUBN_ORDI, 0, REC_SUBN,
+                                     gom_submission->ordinance_process_flag);
+    if (gom_submission->record_id)
+      result |= gedcom_write_element_str(hndl, ELT_SUBN_RIN, 0, REC_SUBN,
+                                        gom_submission->record_id);
+    if (gom_submission->extra)
+      result |= write_user_data(hndl, gom_submission->extra);
+  }
+  
+  return result;
+}