Rename 'add' functions to 'new'.
[gedcom-parse.git] / include / gom.h
index 0af1ee5753be930c359dcb5177891b87d781ae18..12352734604c2e07dee5b4e1bc8d50b44704ac78 100644 (file)
 #define __GEDCOM_GOM_H
 
 #include "gedcom.h"
+#include <time.h>
 
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /* Sub-structures */
 
@@ -39,33 +42,33 @@ struct user_data {
   struct user_data *previous;
 };
 
-struct address {
-  char *full_label;
-  char *line1;
-  char *line2;
-  char *city;
-  char *state;
-  char *postal;
-  char *country;
+struct address {                      /* ADDRESS_STRUCTURE */
+  char *full_label;                   /* ADDRESS_LINE */
+  char *line1;                        /* ADDRESS_LINE1 */
+  char *line2;                        /* ADDRESS_LINE2 */
+  char *city;                         /* ADDRESS_CITY */
+  char *state;                        /* ADDRESS_STATE */
+  char *postal;                       /* ADDRESS_POSTAL_CODE */
+  char *country;                      /* ADDRESS_COUNTRY */
   struct user_data *extra;
 };
 
 struct text {
-  char *text;
+  char *text;                         /* TEXT_FROM_SOURCE */
   struct user_data *extra;
   struct text *next;
   struct text *previous;
 };
 
-struct source_citation {
-  char *description;
+struct source_citation {              /* SOURCE_CITATION */
+  char *description;                  /* SOURCE_DESCRIPTION */
   struct xref_value *reference;
-  char *page;
-  char *event;
-  char *role;
-  struct date_value *date;
+  char *page;                         /* WHERE_WITHIN_SOURCE */
+  char *event;                        /* EVENT_TYPE_CITED_FROM */
+  char *role;                         /* ROLE_IN_EVENT */
+  struct date_value *date;            /* ENTRY_RECORDING_DATE */
   struct text *text;
-  char *quality;
+  char *quality;                      /* CERTAINTY_ASSESSMENT */
   struct multimedia_link *mm_link;
   struct note_sub *note;
   struct user_data *extra;
@@ -73,8 +76,8 @@ struct source_citation {
   struct source_citation *previous;
 };
 
-struct note_sub {
-  char *text;
+struct note_sub {                     /* NOTE_STRUCTURE */
+  char *text;                         /* SUBMITTER_TEXT */
   struct xref_value *reference;
   struct source_citation *citation;
   struct user_data *extra;
@@ -82,30 +85,32 @@ struct note_sub {
   struct note_sub *previous;
 };
 
-struct place {
-  char *value;
-  char *place_hierarchy;
-  struct user_data *extra;
+struct place {                        /* PLACE_STRUCTURE */
+  char *value;                        /* PLACE_VALUE */
+  char *place_hierarchy;              /* PLACE_HIERARCHY */
   struct source_citation *citation;
   struct note_sub *note;
+  struct user_data *extra;
 };
 
-struct multimedia_link {
+struct multimedia_link {              /* MULTIMEDIA_LINK */
   struct xref_value *reference;
-  char *form;
-  char *title;
-  char *file;
+  char *form;                         /* MULTIMEDIA_FORMAT */
+  char *title;                        /* DESCRIPTIVE_TITLE */
+  char *file;                         /* MULTIMEDIA_FILE_REFERENCE */
   struct note_sub *note;
   struct user_data *extra;
   struct multimedia_link *next;
   struct multimedia_link *previous;
 };
 
-struct lds_event {
-  char *date_status;
-  struct date_value *date;
-  char *temple_code;
-  char *place_living_ordinance;
+struct lds_event {                    /* LDS_INDIVIDUAL_ORDINANCE */
+  int event;
+  char *event_name;
+  char *date_status;                  /* LDS_BAPTISM_DATE_STATUS */
+  struct date_value *date;            /* DATE_LDS_ORD */
+  char *temple_code;                  /* TEMPLE_CODE */
+  char *place_living_ordinance;       /* PLACE_LIVING_ORDINANCE */
   struct xref_value *family;
   struct source_citation *citation;
   struct note_sub *note;
@@ -115,39 +120,39 @@ struct lds_event {
 };
 
 struct user_ref_number {
-  char *value;
-  char *type;
+  char *value;                        /* USER_REFERENCE_NUMBER */
+  char *type;                         /* USER_REFERENCE_TYPE */
   struct user_data *extra;
   struct user_ref_number *next;
   struct user_ref_number *previous;
 };
 
-struct change_date {
-  struct date_value *date;
-  char *time;
+struct change_date {                  /* CHANGE_DATE_STRUCTURE */
+  struct date_value *date;            /* CHANGE_DATE */
+  char *time;                         /* TIME_VALUE */
   struct note_sub *note;
   struct user_data *extra;
 };
 
-struct event {
+struct event {                        /* FAMILY_EVENT_STRUCTURE */
   int event;
   char *event_name;
   char *val;
-  char *type;
-  struct date_value *date;
+  char *type;                         /* EVENT_DESCRIPTOR */
+  struct date_value *date;            /* DATE_VALUE */
   struct place *place;
   struct address *address;
-  char *phone[3];
-  struct age_value *age;
-  char *agency;
-  char *cause;
+  char *phone[3];                     /* PHONE_NUMBER */
+  struct age_value *age;              /* AGE_AT_EVENT */
+  char *agency;                       /* RESPONSIBLE_AGENCY */
+  char *cause;                        /* CAUSE_OF_EVENT */
   struct source_citation *citation;
   struct multimedia_link *mm_link;
   struct note_sub *note;
   struct age_value *husband_age;
   struct age_value *wife_age;
   struct xref_value *family;
-  char *adoption_parent;
+  char *adoption_parent;              /* ADOPTED_BY_WHICH_PARENT */
   struct user_data *extra;
   struct event *next;
   struct event *previous;
@@ -160,14 +165,14 @@ struct xref_list {
   struct xref_list *previous;
 };
 
-struct personal_name {
-  char *name;
-  char *prefix;
-  char *given;
-  char *nickname;
-  char *surname_prefix;
-  char *surname;
-  char *suffix;
+struct personal_name {                /* PERSONAL_NAME_STRUCTURE */
+  char *name;                         /* NAME_PERSONAL */
+  char *prefix;                       /* NAME_PIECE_PREFIX */
+  char *given;                        /* NAME_PIECE_GIVEN */
+  char *nickname;                     /* NAME_PIECE_NICKNAME */
+  char *surname_prefix;               /* NAME_PIECE_SURNAME_PREFIX */
+  char *surname;                      /* NAME_PIECE_SURNAME */
+  char *suffix;                       /* NAME_PIECE_SUFFIX */
   struct source_citation *citation;
   struct note_sub *note;
   struct user_data *extra;
@@ -176,13 +181,13 @@ struct personal_name {
 };
 
 struct pedigree {
-  char *pedigree;
+  char *pedigree;                     /* PEDIGREE_LINKAGE_TYPE */
   struct user_data *extra;
   struct pedigree *next;
   struct pedigree *previous;
 };
 
-struct family_link {
+struct family_link {                  /* CHILD_TO_FAMILY_LINK */
   struct xref_value *family;
   struct pedigree *pedigree;
   struct note_sub *note;
@@ -191,10 +196,10 @@ struct family_link {
   struct family_link *previous;
 };
 
-struct association {
+struct association {                  /* ASSOCIATION_STRUCTURE */
   struct xref_value *to;
-  char *type;
-  char *relation;
+  char *type;                         /* RECORD_TYPE */
+  char *relation;                     /* RELATION_IS_DESCRIPTOR */
   struct source_citation *citation;
   struct note_sub *note;
   struct user_data *extra;
@@ -203,17 +208,17 @@ struct association {
 };
 
 struct source_event {
-  char *recorded_events;
-  struct date_value *date_period;
-  char *jurisdiction;
+  char *recorded_events;              /* EVENTS_RECORDED */
+  struct date_value *date_period;     /* DATE_PERIOD */
+  char *jurisdiction;                 /* SOURCE_JURISDICTION_PLACE */
   struct user_data *extra;
   struct source_event *next;
   struct source_event *previous;
 };
 
 struct source_description {
-  char *call_number;
-  char *media;
+  char *call_number;                  /* SOURCE_CALL_NUMBER */
+  char *media;                        /* SOURCE_MEDIA_TYPE */
   struct user_data *extra;
   struct source_description *next;
   struct source_description *previous;
@@ -221,80 +226,80 @@ struct source_description {
 
 /* Main structures */
 
-struct header {
+struct header {                       /* HEADER */
   struct header_source {
-    char *id;
-    char *name;
-    char *version;
+    char *id;                         /* APPROVED_SYSTEM_ID */
+    char *name;                       /* NAME_OF_PRODUCT */
+    char *version;                    /* VERSION_NUMBER */
     struct header_corporation {
-      char *name;
+      char *name;                     /* NAME_OF_BUSINESS */
       struct address *address;
-      char *phone[3];
+      char *phone[3];                 /* PHONE_NUMBER */
     } corporation;
     struct header_data {
-      char *name;
-      struct date_value *date;
-      char *copyright;
+      char *name;                     /* NAME_OF_SOURCE_DATA */
+      struct date_value *date;        /* PUBLICATION_DATE */
+      char *copyright;                /* COPYRIGHT_SOURCE_DATA */
     } data;
   } source;
-  char *destination;
-  struct date_value *date;
-  char *time;
+  char *destination;                  /* RECEIVING_SYSTEM_NAME */
+  struct date_value *date;            /* TRANSMISSION_DATE */
+  char *time;                         /* TIME_VALUE */
   struct xref_value *submitter;
   struct xref_value *submission;
-  char *filename;
-  char *copyright;
+  char *filename;                     /* FILE_NAME */
+  char *copyright;                    /* COPYRIGHT_GEDCOM_FILE */
   struct header_gedcom {
-    char *version;
-    char *form;
+    char *version;                    /* VERSION_NUMBER */
+    char *form;                       /* GEDCOM_FORM */
   } gedcom;
   struct header_charset {
-    char *name;
-    char *version;
+    char *name;                       /* CHARACTER_SET */
+    char *version;                    /* VERSION_NUMBER */
   } charset;
-  char *language;
-  char *place_hierarchy;
-  char *note;
+  char *language;                     /* LANGUAGE_OF_TEXT */
+  char *place_hierarchy;              /* PLACE_HIERARCHY */
+  char *note;                         /* GEDCOM_CONTENT_DESCRIPTION */
   struct user_data *extra;
 };
 
-struct submission {
+struct submission {                   /* SUBMISSION_RECORD */
   char *xrefstr;
   struct xref_value *submitter;
-  char *family_file;
-  char *temple_code;
-  char *nr_of_ancestor_gens;
-  char *nr_of_descendant_gens;
-  char *ordinance_process_flag;
-  char *record_id;
+  char *family_file;                  /* NAME_OF_FAMILY_FILE */
+  char *temple_code;                  /* TEMPLE_CODE */
+  char *nr_of_ancestor_gens;          /* GENERATIONS_OF_ANCESTORS */
+  char *nr_of_descendant_gens;        /* GENERATIONS_OF_DESCENDANTS */
+  char *ordinance_process_flag;       /* ORDINANCE_PROCESS_FLAG */
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct user_data *extra;
 };
 
-struct family {
+struct family {                       /* FAM_RECORD */
   char *xrefstr;
   struct event *event;
   struct xref_value *husband;
   struct xref_value *wife;
   struct xref_list *children;
-  char *nr_of_children;
+  char *nr_of_children;               /* COUNT_OF_CHILDREN */
   struct xref_list *submitters;
   struct lds_event *lds_spouse_sealing;
   struct source_citation *citation;
   struct multimedia_link *mm_link;
   struct note_sub *note;
   struct user_ref_number *ref;
-  char *record_id;
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct change_date *change_date;
   struct user_data *extra;
   struct family *next;
   struct family *previous;
 };
 
-struct individual {
+struct individual {                   /* INDIVIDUAL_RECORD */
   char *xrefstr;
-  char *restriction_notice;
+  char *restriction_notice;           /* RESTRICTION_NOTICE */
   struct personal_name *name;
-  char *sex;
+  char *sex;                          /* SEX_VALUE */
   struct event *event;
   struct event *attribute;
   struct lds_event *lds_individual_ordinance;
@@ -308,69 +313,69 @@ struct individual {
   struct source_citation *citation;
   struct multimedia_link *mm_link;
   struct note_sub *note;
-  char *record_file_nr;
-  char *ancestral_file_nr;
+  char *record_file_nr;               /* PERMANENT_RECORD_FILE_NUMBER */
+  char *ancestral_file_nr;            /* ANCESTRAL_FILE_NUMBER */
   struct user_ref_number *ref;
-  char *record_id;
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct change_date *change_date;
   struct user_data *extra;
   struct individual *next;
   struct individual *previous;
 };
 
-struct multimedia {
+struct multimedia {                   /* MULTIMEDIA_RECORD */
   char *xrefstr;
-  char *form;
-  char *title;
+  char *form;                         /* MULTIMEDIA_FORMAT */
+  char *title;                        /* DESCRIPTIVE_TITLE */
   struct note_sub *note;
-  char *data;
+  char *data;                         /* ENCODED_MULTIMEDIA_LINE */
   struct xref_value *continued;
   struct user_ref_number *ref;
-  char *record_id;
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct change_date *change_date;
   struct user_data *extra;
   struct multimedia *next;
   struct multimedia *previous;
 };
 
-struct note {
+struct note {                         /* NOTE_RECORD */
   char *xrefstr;
-  char *text;
+  char *text;                         /* SUBMITTER_TEXT */
   struct source_citation *citation;
   struct user_ref_number *ref;
-  char *record_id;
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct change_date *change_date;
   struct user_data *extra;
   struct note *next;
   struct note *previous;
 };
 
-struct repository {
+struct repository {                   /* REPOSITORY_RECORD */
   char *xrefstr;
-  char *name;
+  char *name;                         /* NAME_OF_REPOSITORY */
   struct address *address;
-  char *phone[3];
+  char *phone[3];                     /* PHONE_NUMBER */
   struct note_sub *note;
   struct user_ref_number *ref;
-  char *record_id;
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct change_date *change_date;
   struct user_data *extra;
   struct repository *next;
   struct repository *previous;
 };
 
-struct source {
+struct source {                       /* SOURCE_RECORD */
   char *xrefstr;
   struct source_data {
     struct source_event *event;
-    char *agency;
+    char *agency;                     /* RESPONSIBLE_AGENCY */
     struct note_sub *note;
   } data;
-  char *author;
-  char *title;
-  char *abbreviation;
-  char *publication;
-  char *text;
+  char *author;                       /* SOURCE_ORIGINATOR */
+  char *title;                        /* SOURCE_DESCRIPTIVE_TITLE */
+  char *abbreviation;                 /* SOURCE_FILED_BY_ENTRY */
+  char *publication;                  /* SOURCE_PUBLICATION_FACTS */
+  char *text;                         /* TEXT_FROM_SOURCE */
   struct repo_link {
     struct xref_value *link;
     struct note_sub *note;
@@ -379,22 +384,22 @@ struct source {
   struct multimedia_link *mm_link;
   struct note_sub *note;
   struct user_ref_number *ref;
-  char *record_id;
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct change_date *change_date;
   struct user_data *extra;
   struct source *next;
   struct source *previous;
 };
 
-struct submitter {
+struct submitter {                    /* SUBMITTER_RECORD */
   char *xrefstr;
-  char *name;
+  char *name;                         /* SUBMITTER_NAME */
   struct address *address;
-  char *phone[3];
+  char *phone[3];                     /* PHONE_NUMBER */
   struct multimedia_link *mm_link;
-  char *language[3];
-  char *record_file_nr;
-  char *record_id;
+  char *language[3];                  /* LANGUAGE_PREFERENCE */
+  char *record_file_nr;               /* SUBMITTER_REGISTERED_RFN */
+  char *record_id;                    /* AUTOMATED_RECORD_ID */
   struct change_date *change_date;
   struct user_data *extra;
   struct submitter *next;
@@ -414,34 +419,79 @@ struct user_rec {
 /* Functions */
 
 int  gom_parse_file(const char *file_name);
+int  gom_new_model();
+int  gom_write_file(const char* file_name, int *total_conv_fails);
 
 struct header*     gom_get_header();
+int                gom_header_update_timestamp(time_t t);
+  
 struct submission* gom_get_submission();
+struct submission* gom_new_submission(const char* xrefstr);
+int                gom_delete_submission();
 
 struct family*     gom_get_first_family();
 struct family*     gom_get_family_by_xref(const char *xref);
+struct family*     gom_new_family(const char* xrefstr);
+int                gom_delete_family(struct family* obj);
 
 struct individual* gom_get_first_individual();
 struct individual* gom_get_individual_by_xref(const char *xref);
+struct individual* gom_new_individual(const char* xrefstr);
+int                gom_delete_individual(struct individual* obj);
 
 struct multimedia* gom_get_first_multimedia();
 struct multimedia* gom_get_multimedia_by_xref(const char *xref);
+struct multimedia* gom_new_multimedia(const char* xrefstr);
+int                gom_delete_multimedia(struct multimedia* obj);
 
 struct note*       gom_get_first_note();
 struct note*       gom_get_note_by_xref(const char *xref);
+struct note*       gom_new_note(const char* xrefstr);
+int                gom_delete_note(struct note* obj);
 
 struct repository* gom_get_first_repository();
 struct repository* gom_get_repository_by_xref(const char *xref);
+struct repository* gom_new_repository(const char* xrefstr);
+int                gom_delete_repository(struct repository* obj);
 
 struct source*     gom_get_first_source();
 struct source*     gom_get_source_by_xref(const char *xref);
+struct source*     gom_new_source(const char* xrefstr);
+int                gom_delete_source(struct source* obj);
 
 struct submitter*  gom_get_first_submitter();
 struct submitter*  gom_get_submitter_by_xref(const char *xref);
+struct submitter*  gom_new_submitter(const char* xrefstr);
+int                gom_delete_submitter(struct submitter* obj);
 
 struct user_rec*   gom_get_first_user_rec();
 struct user_rec*   gom_get_user_rec_by_xref(const char *xref);
+struct user_rec*   gom_new_user_rec(const char* xrefstr, const char* tag);
+int                gom_delete_user_rec(struct user_rec* obj);
+
+char* gom_get_string(char* data);
+char* gom_set_string(char** data, const char* utf8_str);
+
+char* gom_get_string_for_locale(char* data, int* conversion_failures);
+char* gom_set_string_for_locale(char** data, const char* locale_str);
+void  gom_set_unknown(const char* unknown);
+
+struct xref_value* gom_set_xref(struct xref_value** data, const char* xref);
+struct xref_list*  gom_add_xref(struct xref_list** data, const char* xref);
+int                gom_remove_xref(struct xref_list** data, const char* xref);
+
+struct address*    gom_set_new_address(struct address** obj);
+int                gom_delete_address(struct address** obj);
+
+struct place*      gom_set_new_place(struct place** obj);
+int                gom_delete_place(struct place** obj);
 
-__END_DECLS
+struct change_date* gom_set_new_change_date(struct change_date** obj);
+int                 gom_delete_change_date(struct change_date** obj);
+int                 gom_update_timestamp(struct change_date** obj, time_t t);
+  
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* __GEDCOM_GOM_H */