1 /* External header for the Gedcom parser library.
2 Copyright (C) 2002 The Genes Development Team
3 This file is part of the Gedcom parser library.
4 Contributed by Peter Verthez <Peter.Verthez@advalvas.be>, 2002.
6 The Gedcom parser library is free software; you can redistribute it
7 and/or modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The Gedcom parser library is distributed in the hope that it will be
12 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the Gedcom parser library; if not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
24 #ifndef __GEDCOM_GOM_H
25 #define __GEDCOM_GOM_H
40 struct xref_value *xref_value;
41 struct user_data *next;
42 struct user_data *previous;
45 struct address { /* ADDRESS_STRUCTURE */
46 char *full_label; /* ADDRESS_LINE */
47 char *line1; /* ADDRESS_LINE1 */
48 char *line2; /* ADDRESS_LINE2 */
49 char *city; /* ADDRESS_CITY */
50 char *state; /* ADDRESS_STATE */
51 char *postal; /* ADDRESS_POSTAL_CODE */
52 char *country; /* ADDRESS_COUNTRY */
53 struct user_data *extra;
57 char *text; /* TEXT_FROM_SOURCE */
58 struct user_data *extra;
60 struct text *previous;
63 struct source_citation { /* SOURCE_CITATION */
64 char *description; /* SOURCE_DESCRIPTION */
65 struct xref_value *reference;
66 char *page; /* WHERE_WITHIN_SOURCE */
67 char *event; /* EVENT_TYPE_CITED_FROM */
68 char *role; /* ROLE_IN_EVENT */
69 struct date_value *date; /* ENTRY_RECORDING_DATE */
71 char *quality; /* CERTAINTY_ASSESSMENT */
72 struct multimedia_link *mm_link;
73 struct note_sub *note;
74 struct user_data *extra;
75 struct source_citation *next;
76 struct source_citation *previous;
79 struct note_sub { /* NOTE_STRUCTURE */
80 char *text; /* SUBMITTER_TEXT */
81 struct xref_value *reference;
82 struct source_citation *citation;
83 struct user_data *extra;
84 struct note_sub *next;
85 struct note_sub *previous;
88 struct place { /* PLACE_STRUCTURE */
89 char *value; /* PLACE_VALUE */
90 char *place_hierarchy; /* PLACE_HIERARCHY */
91 struct source_citation *citation;
92 struct note_sub *note;
93 struct user_data *extra;
96 struct multimedia_link { /* MULTIMEDIA_LINK */
97 struct xref_value *reference;
98 char *form; /* MULTIMEDIA_FORMAT */
99 char *title; /* DESCRIPTIVE_TITLE */
100 char *file; /* MULTIMEDIA_FILE_REFERENCE */
101 struct note_sub *note;
102 struct user_data *extra;
103 struct multimedia_link *next;
104 struct multimedia_link *previous;
107 struct lds_event { /* LDS_INDIVIDUAL_ORDINANCE */
110 char *date_status; /* LDS_BAPTISM_DATE_STATUS */
111 struct date_value *date; /* DATE_LDS_ORD */
112 char *temple_code; /* TEMPLE_CODE */
113 char *place_living_ordinance; /* PLACE_LIVING_ORDINANCE */
114 struct xref_value *family;
115 struct source_citation *citation;
116 struct note_sub *note;
117 struct user_data *extra;
118 struct lds_event *next;
119 struct lds_event *previous;
122 struct user_ref_number {
123 char *value; /* USER_REFERENCE_NUMBER */
124 char *type; /* USER_REFERENCE_TYPE */
125 struct user_data *extra;
126 struct user_ref_number *next;
127 struct user_ref_number *previous;
130 struct change_date { /* CHANGE_DATE_STRUCTURE */
131 struct date_value *date; /* CHANGE_DATE */
132 char *time; /* TIME_VALUE */
133 struct note_sub *note;
134 struct user_data *extra;
137 struct event { /* FAMILY_EVENT_STRUCTURE */
141 char *type; /* EVENT_DESCRIPTOR */
142 struct date_value *date; /* DATE_VALUE */
144 struct address *address;
145 char *phone[3]; /* PHONE_NUMBER */
146 struct age_value *age; /* AGE_AT_EVENT */
147 char *agency; /* RESPONSIBLE_AGENCY */
148 char *cause; /* CAUSE_OF_EVENT */
149 struct source_citation *citation;
150 struct multimedia_link *mm_link;
151 struct note_sub *note;
152 struct age_value *husband_age;
153 struct age_value *wife_age;
154 struct xref_value *family;
155 char *adoption_parent; /* ADOPTED_BY_WHICH_PARENT */
156 struct user_data *extra;
158 struct event *previous;
162 struct xref_value *xref;
163 struct user_data *extra;
164 struct xref_list *next;
165 struct xref_list *previous;
168 struct personal_name { /* PERSONAL_NAME_STRUCTURE */
169 char *name; /* NAME_PERSONAL */
170 char *prefix; /* NAME_PIECE_PREFIX */
171 char *given; /* NAME_PIECE_GIVEN */
172 char *nickname; /* NAME_PIECE_NICKNAME */
173 char *surname_prefix; /* NAME_PIECE_SURNAME_PREFIX */
174 char *surname; /* NAME_PIECE_SURNAME */
175 char *suffix; /* NAME_PIECE_SUFFIX */
176 struct source_citation *citation;
177 struct note_sub *note;
178 struct user_data *extra;
179 struct personal_name *next;
180 struct personal_name *previous;
184 char *pedigree; /* PEDIGREE_LINKAGE_TYPE */
185 struct user_data *extra;
186 struct pedigree *next;
187 struct pedigree *previous;
190 struct family_link { /* CHILD_TO_FAMILY_LINK */
191 struct xref_value *family;
192 struct pedigree *pedigree;
193 struct note_sub *note;
194 struct user_data *extra;
195 struct family_link *next;
196 struct family_link *previous;
199 struct association { /* ASSOCIATION_STRUCTURE */
200 struct xref_value *to;
201 char *type; /* RECORD_TYPE */
202 char *relation; /* RELATION_IS_DESCRIPTOR */
203 struct source_citation *citation;
204 struct note_sub *note;
205 struct user_data *extra;
206 struct association *next;
207 struct association *previous;
210 struct source_event {
211 char *recorded_events; /* EVENTS_RECORDED */
212 struct date_value *date_period; /* DATE_PERIOD */
213 char *jurisdiction; /* SOURCE_JURISDICTION_PLACE */
214 struct user_data *extra;
215 struct source_event *next;
216 struct source_event *previous;
219 struct source_description {
220 char *call_number; /* SOURCE_CALL_NUMBER */
221 char *media; /* SOURCE_MEDIA_TYPE */
222 struct user_data *extra;
223 struct source_description *next;
224 struct source_description *previous;
227 /* Main structures */
229 struct header { /* HEADER */
230 struct header_source {
231 char *id; /* APPROVED_SYSTEM_ID */
232 char *name; /* NAME_OF_PRODUCT */
233 char *version; /* VERSION_NUMBER */
234 struct header_corporation {
235 char *name; /* NAME_OF_BUSINESS */
236 struct address *address;
237 char *phone[3]; /* PHONE_NUMBER */
240 char *name; /* NAME_OF_SOURCE_DATA */
241 struct date_value *date; /* PUBLICATION_DATE */
242 char *copyright; /* COPYRIGHT_SOURCE_DATA */
245 char *destination; /* RECEIVING_SYSTEM_NAME */
246 struct date_value *date; /* TRANSMISSION_DATE */
247 char *time; /* TIME_VALUE */
248 struct xref_value *submitter;
249 struct xref_value *submission;
250 char *filename; /* FILE_NAME */
251 char *copyright; /* COPYRIGHT_GEDCOM_FILE */
252 struct header_gedcom {
253 char *version; /* VERSION_NUMBER */
254 char *form; /* GEDCOM_FORM */
256 struct header_charset {
257 char *name; /* CHARACTER_SET */
258 char *version; /* VERSION_NUMBER */
260 char *language; /* LANGUAGE_OF_TEXT */
261 char *place_hierarchy; /* PLACE_HIERARCHY */
262 char *note; /* GEDCOM_CONTENT_DESCRIPTION */
263 struct user_data *extra;
266 struct submission { /* SUBMISSION_RECORD */
268 struct xref_value *submitter;
269 char *family_file; /* NAME_OF_FAMILY_FILE */
270 char *temple_code; /* TEMPLE_CODE */
271 char *nr_of_ancestor_gens; /* GENERATIONS_OF_ANCESTORS */
272 char *nr_of_descendant_gens; /* GENERATIONS_OF_DESCENDANTS */
273 char *ordinance_process_flag; /* ORDINANCE_PROCESS_FLAG */
274 char *record_id; /* AUTOMATED_RECORD_ID */
275 struct user_data *extra;
278 struct family { /* FAM_RECORD */
281 struct xref_value *husband;
282 struct xref_value *wife;
283 struct xref_list *children;
284 char *nr_of_children; /* COUNT_OF_CHILDREN */
285 struct xref_list *submitters;
286 struct lds_event *lds_spouse_sealing;
287 struct source_citation *citation;
288 struct multimedia_link *mm_link;
289 struct note_sub *note;
290 struct user_ref_number *ref;
291 char *record_id; /* AUTOMATED_RECORD_ID */
292 struct change_date *change_date;
293 struct user_data *extra;
295 struct family *previous;
298 struct individual { /* INDIVIDUAL_RECORD */
300 char *restriction_notice; /* RESTRICTION_NOTICE */
301 struct personal_name *name;
302 char *sex; /* SEX_VALUE */
304 struct event *attribute;
305 struct lds_event *lds_individual_ordinance;
306 struct family_link *child_to_family;
307 struct family_link *spouse_to_family;
308 struct xref_list *submitters;
309 struct association *association;
310 struct xref_list *alias;
311 struct xref_list *ancestor_interest;
312 struct xref_list *descendant_interest;
313 struct source_citation *citation;
314 struct multimedia_link *mm_link;
315 struct note_sub *note;
316 char *record_file_nr; /* PERMANENT_RECORD_FILE_NUMBER */
317 char *ancestral_file_nr; /* ANCESTRAL_FILE_NUMBER */
318 struct user_ref_number *ref;
319 char *record_id; /* AUTOMATED_RECORD_ID */
320 struct change_date *change_date;
321 struct user_data *extra;
322 struct individual *next;
323 struct individual *previous;
326 struct multimedia { /* MULTIMEDIA_RECORD */
328 char *form; /* MULTIMEDIA_FORMAT */
329 char *title; /* DESCRIPTIVE_TITLE */
330 struct note_sub *note;
331 char *data; /* ENCODED_MULTIMEDIA_LINE */
332 struct xref_value *continued;
333 struct user_ref_number *ref;
334 char *record_id; /* AUTOMATED_RECORD_ID */
335 struct change_date *change_date;
336 struct user_data *extra;
337 struct multimedia *next;
338 struct multimedia *previous;
341 struct note { /* NOTE_RECORD */
343 char *text; /* SUBMITTER_TEXT */
344 struct source_citation *citation;
345 struct user_ref_number *ref;
346 char *record_id; /* AUTOMATED_RECORD_ID */
347 struct change_date *change_date;
348 struct user_data *extra;
350 struct note *previous;
353 struct repository { /* REPOSITORY_RECORD */
355 char *name; /* NAME_OF_REPOSITORY */
356 struct address *address;
357 char *phone[3]; /* PHONE_NUMBER */
358 struct note_sub *note;
359 struct user_ref_number *ref;
360 char *record_id; /* AUTOMATED_RECORD_ID */
361 struct change_date *change_date;
362 struct user_data *extra;
363 struct repository *next;
364 struct repository *previous;
367 struct source { /* SOURCE_RECORD */
370 struct source_event *event;
371 char *agency; /* RESPONSIBLE_AGENCY */
372 struct note_sub *note;
374 char *author; /* SOURCE_ORIGINATOR */
375 char *title; /* SOURCE_DESCRIPTIVE_TITLE */
376 char *abbreviation; /* SOURCE_FILED_BY_ENTRY */
377 char *publication; /* SOURCE_PUBLICATION_FACTS */
378 char *text; /* TEXT_FROM_SOURCE */
380 struct xref_value *link;
381 struct note_sub *note;
382 struct source_description *description;
384 struct multimedia_link *mm_link;
385 struct note_sub *note;
386 struct user_ref_number *ref;
387 char *record_id; /* AUTOMATED_RECORD_ID */
388 struct change_date *change_date;
389 struct user_data *extra;
391 struct source *previous;
394 struct submitter { /* SUBMITTER_RECORD */
396 char *name; /* SUBMITTER_NAME */
397 struct address *address;
398 char *phone[3]; /* PHONE_NUMBER */
399 struct multimedia_link *mm_link;
400 char *language[3]; /* LANGUAGE_PREFERENCE */
401 char *record_file_nr; /* SUBMITTER_REGISTERED_RFN */
402 char *record_id; /* AUTOMATED_RECORD_ID */
403 struct change_date *change_date;
404 struct user_data *extra;
405 struct submitter *next;
406 struct submitter *previous;
413 struct xref_value *xref_value;
414 struct user_data *extra;
415 struct user_rec *next;
416 struct user_rec *previous;
421 /** \addtogroup gommain */
423 /** \brief Parses an existing Gedcom file */
424 int gom_parse_file(const char *file_name);
425 /** \brief Starts a new Gedcom model */
429 /** \addtogroup gom_write */
431 /** \brief Write a Gedcom file */
432 int gom_write_file(const char* file_name, int *total_conv_fails);
433 /** \brief Update the timestamp in a Gedcom model */
434 int gom_header_update_timestamp(time_t t);
437 /** \addtogroup gomget */
439 /** \brief Retrieve header object
440 \return The header object */
441 struct header* gom_get_header();
442 /** \brief Retrieve submission object
443 \return The submission object, or \c NULL if there is none */
444 struct submission* gom_get_submission();
445 /** \brief Retrieve first family object
446 \return The first family object, or \c NULL if there is none */
447 struct family* gom_get_first_family();
448 /** \brief Retrieve family object by cross-reference
449 \param xref The cross-reference key of the object to retrieve
450 \return The object referenced by \c xref, \c NULL if it doesn't exist
451 or is not a family object */
452 struct family* gom_get_family_by_xref(const char *xref);
453 /** \brief Retrieve first individual object
454 \return The first individual object, or \c NULL if there is none */
455 struct individual* gom_get_first_individual();
456 /** \brief Retrieve individual object by cross-reference
457 \param xref The cross-reference key of the object to retrieve
458 \return The object referenced by \c xref, \c NULL if it doesn't exist
459 or is not an individual object */
460 struct individual* gom_get_individual_by_xref(const char *xref);
461 /** \brief Retrieve first multimedia object
462 \return The first multimedia object, or \c NULL if there is none */
463 struct multimedia* gom_get_first_multimedia();
464 /** \brief Retrieve multimedia object by cross-reference
465 \param xref The cross-reference key of the object to retrieve
466 \return The object referenced by \c xref, \c NULL if it doesn't exist
467 or is not a multimedia object */
468 struct multimedia* gom_get_multimedia_by_xref(const char *xref);
469 /** \brief Retrieve first note object
470 \return The first note object, or \c NULL if there is none */
471 struct note* gom_get_first_note();
472 /** \brief Retrieve note object by cross-reference
473 \param xref The cross-reference key of the object to retrieve
474 \return The object referenced by \c xref, \c NULL if it doesn't exist
475 or is not a note object */
476 struct note* gom_get_note_by_xref(const char *xref);
477 /** \brief Retrieve first repository object
478 \return The first repository object, or \c NULL if there is none */
479 struct repository* gom_get_first_repository();
480 /** \brief Retrieve repository object by cross-reference
481 \param xref The cross-reference key of the object to retrieve
482 \return The object referenced by \c xref, \c NULL if it doesn't exist
483 or is not a repository object */
484 struct repository* gom_get_repository_by_xref(const char *xref);
485 /** \brief Retrieve first source object
486 \return The first source object, or \c NULL if there is none */
487 struct source* gom_get_first_source();
488 /** \brief Retrieve source object by cross-reference
489 \param xref The cross-reference key of the object to retrieve
490 \return The object referenced by \c xref, \c NULL if it doesn't exist
491 or is not a source object */
492 struct source* gom_get_source_by_xref(const char *xref);
493 /** \brief Retrieve first submitter object
494 \return The first submitter object, or \c NULL if there is none */
495 struct submitter* gom_get_first_submitter();
496 /** \brief Retrieve submitter object by cross-reference
497 \param xref The cross-reference key of the object to retrieve
498 \return The object referenced by \c xref, \c NULL if it doesn't exist
499 or is not a submitter object */
500 struct submitter* gom_get_submitter_by_xref(const char *xref);
501 /** \brief Retrieve first user record object
502 \return The first user record object, or \c NULL if there is none */
503 struct user_rec* gom_get_first_user_rec();
504 /** \brief Retrieve user record object by cross-reference
505 \param xref The cross-reference key of the object to retrieve
506 \return The object referenced by \c xref, \c NULL if it doesn't exist
507 or is not a user record object */
508 struct user_rec* gom_get_user_rec_by_xref(const char *xref);
511 /** \addtogroup gom_add_rec */
513 /** \brief Add a submission record
514 \param xrefstr The cross-reference key for the new object
515 \return The new object if successful, \c NULL if an error happened (e.g.
516 the cross-reference is already in use */
517 struct submission* gom_new_submission(const char* xrefstr);
518 /** \brief Delete the submission record
519 \retval 0 if successful
520 \retval 1 if error */
521 int gom_delete_submission();
523 /** \brief Add a new family record
524 \param xrefstr The cross-reference key for the new object
525 \return The new object if successful, \c NULL if an error happened (e.g.
526 the cross-reference is already in use */
527 struct family* gom_new_family(const char* xrefstr);
528 /** \brief Delete an existing family record
529 \param obj The object to be deleted
530 \retval 0 if successful
531 \retval 1 if error */
532 int gom_delete_family(struct family* obj);
534 /** \brief Add a new individual record
535 \param xrefstr The cross-reference key for the new object
536 \return The new object if successful, \c NULL if an error happened (e.g.
537 the cross-reference is already in use */
538 struct individual* gom_new_individual(const char* xrefstr);
539 /** \brief Delete an existing individual record
540 \param obj The object to be deleted
541 \retval 0 if successful
542 \retval 1 if error */
543 int gom_delete_individual(struct individual* obj);
545 /** \brief Add a new multimedia record
546 \param xrefstr The cross-reference key for the new object
547 \return The new object if successful, \c NULL if an error happened (e.g.
548 the cross-reference is already in use */
549 struct multimedia* gom_new_multimedia(const char* xrefstr);
550 /** \brief Delete an existing multimedia record
551 \param obj The object to be deleted
552 \retval 0 if successful
553 \retval 1 if error */
554 int gom_delete_multimedia(struct multimedia* obj);
556 /** \brief Add a new note record
557 \param xrefstr The cross-reference key for the new object
558 \return The new object if successful, \c NULL if an error happened (e.g.
559 the cross-reference is already in use */
560 struct note* gom_new_note(const char* xrefstr);
561 /** \brief Delete an existing note record
562 \param obj The object to be deleted
563 \retval 0 if successful
564 \retval 1 if error */
565 int gom_delete_note(struct note* obj);
567 /** \brief Add a new repository record
568 \param xrefstr The cross-reference key for the new object
569 \return The new object if successful, \c NULL if an error happened (e.g.
570 the cross-reference is already in use */
571 struct repository* gom_new_repository(const char* xrefstr);
572 /** \brief Delete an existing repository record
573 \param obj The object to be deleted
574 \retval 0 if successful
575 \retval 1 if error */
576 int gom_delete_repository(struct repository* obj);
578 /** \brief Add a new source record
579 \param xrefstr The cross-reference key for the new object
580 \return The new object if successful, \c NULL if an error happened (e.g.
581 the cross-reference is already in use */
582 struct source* gom_new_source(const char* xrefstr);
583 /** \brief Delete an existing source record
584 \param obj The object to be deleted
585 \retval 0 if successful
586 \retval 1 if error */
587 int gom_delete_source(struct source* obj);
589 /** \brief Add a new submitter record
590 \param xrefstr The cross-reference key for the new object
591 \return The new object if successful, \c NULL if an error happened (e.g.
592 the cross-reference is already in use */
593 struct submitter* gom_new_submitter(const char* xrefstr);
594 /** \brief Delete an existing submitter record
595 \param obj The object to be deleted
596 \retval 0 if successful
597 \retval 1 if error */
598 int gom_delete_submitter(struct submitter* obj);
600 /** \brief Add a new user record
601 \param xrefstr The cross-reference key for the new object
602 \param tag The tag for the new object
603 \return The new object if successful, \c NULL if an error happened (e.g.
604 the cross-reference is already in use */
605 struct user_rec* gom_new_user_rec(const char* xrefstr, const char* tag);
606 /** \brief Delete an existing user record
607 \param obj The object to be deleted
608 \retval 0 if successful
609 \retval 1 if error */
610 int gom_delete_user_rec(struct user_rec* obj);
613 /** \addtogroup gom_mod_string */
615 /** \brief Get string in UTF-8 encoding */
616 char* gom_get_string(char* data);
617 /** \brief Modify string using UTF-8 encoding */
618 char* gom_set_string(char** data, const char* utf8_str);
620 /** \brief Get string in encoding defined by current locale */
621 char* gom_get_string_for_locale(char* data, int* conversion_failures);
622 /** \brief Modify string using encoding defined by current locale */
623 char* gom_set_string_for_locale(char** data, const char* locale_str);
624 /** \brief Set the replacement string for conversion failures */
625 void gom_set_unknown(const char* unknown);
628 /** \addtogroup gom_add_xref */
630 /** \brief Direction of moving cross-references or sub-structures. */
632 MOVE_UP, /**< Move up */
633 MOVE_DOWN /**< Move down */
636 /** \brief Direction of moving cross-references or sub-structures. */
637 typedef enum _DIR Gom_direction;
639 /** \brief Modify a cross-reference */
640 struct xref_value* gom_set_xref(struct xref_value** data, const char* xref);
642 /** \brief Add a cross-reference in a cross-reference list */
643 struct xref_list* gom_add_xref(struct xref_list** data, const char* xref);
644 /** \brief Remove a cross-reference from a cross-reference list */
645 int gom_remove_xref(struct xref_list** data, const char* xref);
646 /** \brief Move a cross-reference up or down in a cross-reference list */
647 int gom_move_xref(Gom_direction dir, struct xref_list** data,
651 /** \addtogroup gom_add_sub */
653 /** \brief Create new address substructure */
654 struct address* gom_set_new_address(struct address** obj);
655 /** \brief Delete an address substructure */
656 int gom_delete_address(struct address** obj);
658 /** \brief Add new association substructure to the list */
659 struct association* gom_add_new_association(struct association** data);
660 /** \brief Remove an association substructure to the list */
661 int gom_remove_association(struct association** data,
662 struct association* obj);
663 /** \brief Move an association substructure up or down in the list */
664 int gom_move_association(Gom_direction dir,
665 struct association** data,
666 struct association* obj);
668 /** \brief Create new change_date substructure */
669 struct change_date* gom_set_new_change_date(struct change_date** obj);
670 /** \brief Delete a change_date substructure */
671 int gom_delete_change_date(struct change_date** obj);
672 /** \brief Update the timestamp in a change_date substructure */
673 int gom_update_timestamp(struct change_date** obj, time_t t);
675 /** \brief Add new event substructure to the list */
676 struct event* gom_add_new_event(struct event** data);
677 /** \brief Remove an event substructure to the list */
678 int gom_remove_event(struct event** data, struct event* obj);
679 /** \brief Move an event substructure up or down in the list */
680 int gom_move_event(Gom_direction dir, struct event** data,
683 /** \brief Add new family_link substructure to the list */
684 struct family_link* gom_add_new_family_link(struct family_link** data);
685 /** \brief Remove a family_link substructure to the list */
686 int gom_remove_family_link(struct family_link** data,
687 struct family_link* obj);
688 /** \brief Move a family_link substructure up or down in the list */
689 int gom_move_family_link(Gom_direction dir,
690 struct family_link** data,
691 struct family_link* obj);
693 /** \brief Add new lds_event substructure to the list */
694 struct lds_event* gom_add_new_lds_event(struct lds_event** data);
695 /** \brief Remove an lds_event substructure to the list */
696 int gom_remove_lds_event(struct lds_event** data,
697 struct lds_event* obj);
698 /** \brief Move an lds_event substructure up or down in the list */
699 int gom_move_lds_event(Gom_direction dir,
700 struct lds_event** data,
701 struct lds_event* obj);
703 /** \brief Add new multimedia_link substructure to the list */
704 struct multimedia_link*
705 gom_add_new_multimedia_link(struct multimedia_link** data);
706 /** \brief Remove a multimedia_link substructure to the list */
707 int gom_remove_multimedia_link(struct multimedia_link** data,
708 struct multimedia_link* obj);
709 /** \brief Move a multimedia_link substructure up or down in the list */
710 int gom_move_multimedia_link(Gom_direction dir,
711 struct multimedia_link** data,
712 struct multimedia_link* obj);
714 /** \brief Add new note substructure to the list */
715 struct note_sub* gom_add_new_note_sub(struct note_sub** data);
716 /** \brief Remove a note substructure to the list */
717 int gom_remove_note_sub(struct note_sub** data,
718 struct note_sub* obj);
719 /** \brief Move a note substructure up or down in the list */
720 int gom_move_note_sub(Gom_direction dir,
721 struct note_sub** data,
722 struct note_sub* obj);
724 /** \brief Add new pedigree substructure to the list */
725 struct pedigree* gom_add_new_pedigree(struct pedigree** data);
726 /** \brief Remove a pedigree substructure to the list */
727 int gom_remove_pedigree(struct pedigree** data,
728 struct pedigree* obj);
729 /** \brief Move a pedigree substructure up or down in the list */
730 int gom_move_pedigree(Gom_direction dir,
731 struct pedigree** data,
732 struct pedigree* obj);
734 /** \brief Add new personal_name substructure to the list */
735 struct personal_name* gom_add_new_personal_name(struct personal_name** data);
736 /** \brief Remove a personal_name substructure to the list */
737 int gom_remove_personal_name(struct personal_name** data,
738 struct personal_name* obj);
739 /** \brief Move a personal_name substructure up or down in the list */
740 int gom_move_personal_name(Gom_direction dir,
741 struct personal_name** data,
742 struct personal_name* obj);
744 /** \brief Create new place substructure */
745 struct place* gom_set_new_place(struct place** obj);
746 /** \brief Delete a place substructure */
747 int gom_delete_place(struct place** obj);
749 /** \brief Add new source_citation substructure to the list */
750 struct source_citation*
751 gom_add_new_source_citation(struct source_citation** data);
752 /** \brief Remove a source_citation substructure to the list */
753 int gom_remove_source_citation(struct source_citation** data,
754 struct source_citation* obj);
755 /** \brief Move a source_citation substructure up or down in the list */
756 int gom_move_source_citation(Gom_direction dir,
757 struct source_citation** data,
758 struct source_citation* obj);
760 /** \brief Add new source_description substructure to the list */
761 struct source_description*
762 gom_add_new_source_description(struct source_description** data);
763 /** \brief Remove a source_description substructure to the list */
764 int gom_remove_source_description(struct source_description** data,
765 struct source_description* obj);
766 /** \brief Move a source_description substructure up or down in the list */
767 int gom_move_source_description(Gom_direction dir,
768 struct source_description** data,
769 struct source_description* obj);
771 /** \brief Add new source_event substructure to the list */
772 struct source_event* gom_add_new_source_event(struct source_event** data);
773 /** \brief Remove a source_event substructure to the list */
774 int gom_remove_source_event(struct source_event** data,
775 struct source_event* obj);
776 /** \brief Move a source_event substructure up or down in the list */
777 int gom_move_source_event(Gom_direction dir,
778 struct source_event** data,
779 struct source_event* obj);
781 /** \brief Add new text substructure to the list */
782 struct text* gom_add_new_text(struct text** data);
783 /** \brief Remove a text substructure to the list */
784 int gom_remove_text(struct text** data,
786 /** \brief Move a text substructure up or down in the list */
787 int gom_move_text(Gom_direction dir,
791 /** \brief Add new user_data substructure to the list */
792 struct user_data* gom_add_new_user_data(struct user_data** data);
793 /** \brief Remove a user_data substructure to the list */
794 int gom_remove_user_data(struct user_data** data,
795 struct user_data* obj);
796 /** \brief Move a user_data substructure up or down in the list */
797 int gom_move_user_data(Gom_direction dir,
798 struct user_data** data,
799 struct user_data* obj);
801 /** \brief Add new user_ref_number substructure to the list */
802 struct user_ref_number*
803 gom_add_new_user_ref_number(struct user_ref_number** data);
804 /** \brief Remove a user_ref_number substructure to the list */
805 int gom_remove_user_ref_number(struct user_ref_number** data,
806 struct user_ref_number* obj);
807 /** \brief Move a user_ref_number substructure up or down in the list */
808 int gom_move_user_ref_number(Gom_direction dir,
809 struct user_ref_number** data,
810 struct user_ref_number* obj);
817 #endif /* __GEDCOM_GOM_H */