1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Libgedcom interface details</title>
4 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"></head><body text="#000000" bgcolor="#ffffff" link="#000099" vlink="#990099" alink="#000099">
6 <h1 align="center">Libgedcom interface details</h1>
12 <li><a href="#Record_identifiers">Record identifiers</a></li>
13 <li><a href="#Element_identifiers">Element identifiers</a></li>
14 <li><a href="#Gedcom_val_types">Gedcom_val types</a></li>
17 <li><a href="#date_value">struct date_value</a></li>
18 <li><a href="#date">struct date</a></li><li><a href="#age_value">struct age_value</a><br>
21 <li><a href="#xref_value">struct xref_value</a><br>
29 <hr width="100%" size="2">
30 <h2><a name="Record_identifiers"></a>Record identifiers</h2>
31 The following table describes the identifiers to be used in the record
32 callbacks. The last columns give the <a href="#Gedcom_val_types"><code>
33 Gedcom_val</code> type</a> of the <code>xref</code> and <code>
34 val</code><code> </code> arguments in the record start and end callback.<br>
37 <table width="100%" border="1" cellspacing="2" cellpadding="2">
40 <td valign="top" align="center"><b>Record</b><br>
42 <td valign="top" align="center"><b>Meaning</b><br>
44 <td valign="top" align="center"><b>Possible<br>
45 <code>xref</code> types</b><br>
47 <td valign="top" align="center"><b>Possible start<br>
48 <code>val</code> types</b><br>
49 </td><td valign="top" align="center"><b>Possible end<br>
50 <code>val</code> types</b><br>
55 <td valign="top"><code>REC_HEAD</code><br>
57 <td valign="top">The header of the GEDCOM file<br>
59 <td valign="top"><code>NULL</code><br>
61 <td valign="top"><code>NULL</code><br>
62 </td><td valign="top"><code>NULL</code><br>
67 <td valign="top"><code>REC_FAM</code><br>
69 <td valign="top">A record describing a family<br>
71 <td valign="top"><code>XREF_PTR(FAM)</code><br>
73 <td valign="top"><code>NULL</code><br>
74 </td><td valign="top"><code>NULL</code><br>
79 <td valign="top"><code>REC_INDI</code><br>
81 <td valign="top">A record describing an individual<br>
83 <td valign="top"><code>XREF_PTR(INDI)</code><br>
85 <td valign="top"><code>NULL</code><br>
86 </td><td valign="top"><code>NULL</code><br>
91 <td valign="top"><code>REC_OBJE</code><br>
93 <td valign="top">A record describing a multimedia object<br>
95 <td valign="top"><code>XREF_PTR(OBJE)</code><br>
97 <td valign="top"><code>NULL</code><br>
98 </td><td valign="top"><code>NULL</code><br>
103 <td valign="top"><code>REC_NOTE</code><br>
105 <td valign="top">A record describing a note<br>
107 <td valign="top"><code>XREF_PTR(NOTE)</code><br>
109 <td valign="top"><code>STRING</code><br>
110 </td><td valign="top"><code>STRING</code><br>
115 <td valign="top"><code>REC_REPO</code><br>
117 <td valign="top">A record describing a source repository<br>
119 <td valign="top"><code>XREF_PTR(REPO)</code><br>
121 <td valign="top"><code>NULL</code><br>
122 </td><td valign="top"><code>NULL</code><br>
127 <td valign="top"><code>REC_SOUR</code><br>
129 <td valign="top">A record describing a source<br>
131 <td valign="top"><code>XREF_PTR(SOUR)</code><br>
133 <td valign="top"><code>NULL</code><br>
134 </td><td valign="top"><code>NULL</code><br>
139 <td valign="top"><code>REC_SUBN</code><br>
141 <td valign="top">A record describing the submission<br>
143 <td valign="top"><code>XREF_PTR(SUBN)</code><br>
145 <td valign="top"><code>NULL</code><br>
146 </td><td valign="top"><code>NULL</code><br>
151 <td valign="top"><code>REC_SUBM</code><br>
153 <td valign="top">A record describing the submitter<br>
155 <td valign="top"><code>XREF_PTR(SUBM</code>)<br>
157 <td valign="top"><code>NULL</code><br>
158 </td><td valign="top"><code>NULL</code><br>
163 <td valign="top"><code>REC_USER</code><br>
165 <td valign="top">An application-specific record (the <code>tag</code>
166 in the start callback contains the actually used tag).<br>
168 <td valign="top"><code>NULL<br>
172 <td valign="top"><code>NULL<br>
174 XREF_PTR(USER)</code><br>
175 </td><td valign="top"><code>NULL</code><br>
183 <hr width="100%" size="2">
184 <h2><a name="Element_identifiers"></a>Element identifiers</h2>
185 The following table describes the identifiers to be used in the element
186 callbacks. The last columns give the <a href="file:///home/verthezp/src/external/gedcom-parse/doc/interface.html#Gedcom_val_types"><code>
187 Gedcom_val</code> type</a> of the <code>val</code> argument in the
188 element start and end callback.<br>
191 <table cellpadding="2" cellspacing="2" border="1" width="100%">
194 <td valign="top" align="center"><b>Element</b><br>
196 <td valign="top" align="center"><b>Possible<br>
200 <td valign="top" align="center"><b>Used within</b><br>
202 <td valign="top" align="center"><b>Possible start<br>
203 <code>val</code> types<br>
205 </td><td valign="top" align="center"><b>Possible end<br>
206 <code>val</code> types</b><br>
211 <td valign="top"><code>ELT_HEAD_SOUR</code><br>
213 <td valign="top"><code>SOUR</code><br>
215 <td valign="top"><code>REC_HEAD</code><br>
217 <td valign="top"><code>STRING</code><br>
218 </td><td valign="top"><code>NULL</code><br>
223 <td valign="top"><code>ELT_HEAD_SOUR_VERS</code><br>
225 <td valign="top"><code>VERS</code><br>
227 <td valign="top"><code>ELT_HEAD_SOUR</code><br>
229 <td valign="top"><code>STRING</code><br>
230 </td><td valign="top"><code>NULL</code><br>
235 <td valign="top"><code>ELT_HEAD_SOUR_NAME</code><br>
237 <td valign="top"><code>NAME</code><br>
239 <td valign="top"><code>ELT_HEAD_SOUR</code><br>
241 <td valign="top"><code>STRING</code><br>
242 </td><td valign="top"><code>NULL</code><br>
247 <td valign="top"><code>ELT_HEAD_SOUR_CORP</code><br>
249 <td valign="top"><code>CORP</code><br>
251 <td valign="top"><code>ELT_HEAD_SOUR</code><br>
253 <td valign="top"><code>STRING</code><br>
254 </td><td valign="top"><code>NULL</code><br>
259 <td valign="top"><code>ELT_HEAD_SOUR_DATA</code><br>
261 <td valign="top"><code>DATA</code><br>
263 <td valign="top"><code>ELT_HEAD_SOUR</code><br>
265 <td valign="top"><code>STRING</code><br>
266 </td><td valign="top"><code>NULL</code><br>
271 <td valign="top"><code>ELT_HEAD_SOUR_DATA_DATE</code><br>
273 <td valign="top"><code>DATE</code><br>
275 <td valign="top"><code>ELT_HEAD_SOUR_DATA</code><br>
277 <td valign="top"><code>DATE</code><br>
278 </td><td valign="top"><code>NULL</code><br>
283 <td valign="top"><code>ELT_HEAD_SOUR_DATA_COPR</code><br>
285 <td valign="top"><code>COPR</code><br>
287 <td valign="top"><code>ELT_HEAD_SOUR_DATA</code><br>
289 <td valign="top"><code>STRING</code><br>
290 </td><td valign="top"><code>NULL</code><br>
295 <td valign="top"><code>ELT_HEAD_DEST</code><br>
297 <td valign="top"><code>DEST</code><br>
299 <td valign="top"><code>REC_HEAD</code><br>
301 <td valign="top"><code>STRING</code><br>
302 </td><td valign="top"><code>NULL</code><br>
307 <td valign="top"><code>ELT_HEAD_DATE</code><br>
309 <td valign="top"><code>DATE</code><br>
311 <td valign="top"><code>REC_HEAD</code><br>
313 <td valign="top"><code>DATE</code><br>
314 </td><td valign="top"><code>NULL</code><br>
319 <td valign="top"><code>ELT_HEAD_DATE_TIME</code><br>
321 <td valign="top"><code>TIME</code><br>
323 <td valign="top"><code>ELT_HEAD_DATE</code><br>
325 <td valign="top"><code>STRING</code><br>
326 </td><td valign="top"><code>NULL</code><br>
331 <td valign="top"><code>ELT_HEAD_SUBM</code><br>
333 <td valign="top"><code>SUBM</code><br>
335 <td valign="top"><code>REC_HEAD</code><br>
337 <td valign="top"><code>XREF_PTR(SUBM)</code><br>
338 </td><td valign="top"><code>NULL</code><br>
343 <td valign="top"><code>ELT_HEAD_SUBN</code><br>
345 <td valign="top"><code>SUBN</code><br>
347 <td valign="top"><code>REC_HEAD</code><br>
349 <td valign="top"><code>XREF_PTR(SUBN)</code><br>
350 </td><td valign="top"><code>NULL</code><br>
355 <td valign="top"><code>ELT_HEAD_FILE</code><br>
357 <td valign="top"><code>FILE</code><br>
359 <td valign="top"><code>REC_HEAD</code><br>
361 <td valign="top"><code>STRING</code><br>
362 </td><td valign="top"><code>NULL</code><br>
367 <td valign="top"><code>ELT_HEAD_COPR</code><br>
369 <td valign="top"><code>COPR</code><br>
371 <td valign="top"><code>REC_HEAD</code><br>
373 <td valign="top"><code>STRING</code><br>
374 </td><td valign="top"><code>NULL</code><br>
379 <td valign="top"><code>ELT_HEAD_GEDC</code><br>
381 <td valign="top"><code>GEDC</code><br>
383 <td valign="top"><code>REC_HEAD</code><br>
385 <td valign="top"><code>NULL</code><br>
386 </td><td valign="top"><code>NULL</code><br>
391 <td valign="top"><code>ELT_HEAD_GEDC_VERS</code><br>
393 <td valign="top"><code>VERS</code><br>
395 <td valign="top"><code>ELT_HEAD_GEDC</code><br>
397 <td valign="top"><code>STRING</code><br>
398 </td><td valign="top"><code>NULL</code><br>
403 <td valign="top"><code>ELT_HEAD_GEDC_FORM</code><br>
405 <td valign="top"><code>FORM</code><br>
407 <td valign="top"><code>ELT_HEAD_GEDC</code><br>
409 <td valign="top"><code>STRING</code><br>
410 </td><td valign="top"><code>NULL</code><br>
415 <td valign="top"><code>ELT_HEAD_CHAR</code><br>
417 <td valign="top"><code>CHAR</code><br>
419 <td valign="top"><code>REC_HEAD</code><br>
421 <td valign="top"><code>STRING</code><br>
422 </td><td valign="top"><code>NULL</code><br>
427 <td valign="top"><code>ELT_HEAD_CHAR_VERS</code><br>
429 <td valign="top"><code>VERS</code><br>
431 <td valign="top"><code>ELT_HEAD_CHAR</code><br>
433 <td valign="top"><code>STRING</code><br>
434 </td><td valign="top"><code>NULL</code><br>
439 <td valign="top"><code>ELT_HEAD_LANG</code><br>
441 <td valign="top"><code>LANG</code><br>
443 <td valign="top"><code>REC_HEAD</code><br>
445 <td valign="top"><code>STRING</code><br>
446 </td><td valign="top"><code>NULL</code><br>
451 <td valign="top"><code>ELT_HEAD_PLAC</code><br>
453 <td valign="top"><code>PLAC</code><br>
455 <td valign="top"><code>REC_HEAD</code><br>
457 <td valign="top"><code>NULL</code><br>
458 </td><td valign="top"><code>NULL</code><br>
463 <td valign="top"><code>ELT_HEAD_PLAC_FORM</code><br>
465 <td valign="top"><code>FORM</code><br>
467 <td valign="top"><code>ELT_HEAD_PLAC</code><br>
469 <td valign="top"><code>STRING</code><br>
470 </td><td valign="top"><code>NULL</code><br>
475 <td valign="top"><code>ELT_HEAD_NOTE</code><br>
477 <td valign="top"><code>NOTE</code><br>
479 <td valign="top"><code>REC_HEAD</code><br>
481 <td valign="top"><code>STRING</code><br>
482 </td><td valign="top"><code>STRING</code><br>
487 <td valign="top"><code>ELT_FAM_HUSB</code><br>
489 <td valign="top"><code>HUSB</code><br>
491 <td valign="top"><code>REC_FAM</code><br>
493 <td valign="top"><code>XREF_PTR(INDI)</code><br>
494 </td><td valign="top"><code>NULL</code><br>
499 <td valign="top"><code>ELT_FAM_WIFE</code><br>
501 <td valign="top"><code>WIFE</code><br>
503 <td valign="top"><code>REC_FAM</code><br>
505 <td valign="top"><code>XREF_PTR(INDI)</code><br>
506 </td><td valign="top"><code>NULL</code><br>
511 <td valign="top"><code>ELT_FAM_CHIL</code><br>
513 <td valign="top"><code>CHIL</code><br>
515 <td valign="top"><code>REC_FAM</code><br>
517 <td valign="top"><code>XREF_PTR(INDI)</code><br>
518 </td><td valign="top"><code>NULL</code><br>
523 <td valign="top"><code>ELT_FAM_NCHI</code><br>
525 <td valign="top"><code>NCHI</code><br>
527 <td valign="top"><code>REC_FAM</code><br>
529 <td valign="top"><code>STRING</code><br>
530 </td><td valign="top"><code>NULL</code><br>
535 <td valign="top"><code>ELT_FAM_SUBM</code><br>
537 <td valign="top"><code>SUBM</code><br>
539 <td valign="top"><code>REC_FAM</code><br>
541 <td valign="top"><code>XREF_PTR(SUBM)</code><br>
542 </td><td valign="top"><code>NULL</code><br>
547 <td valign="top"><code>ELT_INDI_RESN</code><br>
549 <td valign="top"><code>RES</code><code>N</code><br>
551 <td valign="top"><code>REC_INDI</code><br>
553 <td valign="top"><code>STRING</code><br>
554 </td><td valign="top"><code>NULL</code><br>
559 <td valign="top"><code>ELT_INDI_SEX</code><br>
561 <td valign="top"><code>SEX</code><br>
563 <td valign="top"><code>REC_INDI</code><br>
565 <td valign="top"><code>STRING</code><br>
566 </td><td valign="top"><code>NULL</code><br>
571 <td valign="top"><code>ELT_INDI_SUBM</code><br>
573 <td valign="top"><code>SUBM</code><br>
575 <td valign="top"><code>REC_INDI</code><br>
577 <td valign="top"><code>XREF_PTR(SUBM)</code><br>
578 </td><td valign="top"><code>NULL</code><br>
583 <td valign="top"><code>ELT_INDI_ALIA</code><br>
585 <td valign="top"><code>ALIA</code><br>
587 <td valign="top"><code>REC_INDI</code><br>
589 <td valign="top"><code>XREF_PTR(INDI)</code><br>
590 </td><td valign="top"><code>NULL</code><br>
595 <td valign="top"><code>ELT_INDI_ANCI</code><br>
597 <td valign="top"><code>ANCI</code><br>
599 <td valign="top"><code>REC_INDI</code><br>
601 <td valign="top"><code>XREF_PTR(SUBM)</code><br>
602 </td><td valign="top"><code>NULL</code><br>
607 <td valign="top"><code>ELT_INDI_DESI</code><br>
609 <td valign="top"><code>DESI</code><br>
611 <td valign="top"><code>REC_INDI</code><br>
613 <td valign="top"><code>XREF_PTR(SUBM)</code><br>
614 </td><td valign="top"><code>NULL</code><br>
619 <td valign="top"><code>ELT_INDI_RFN</code><br>
621 <td valign="top"><code>RFN</code><br>
623 <td valign="top"><code>REC_INDI</code><br>
625 <td valign="top"><code>STRING</code><br>
626 </td><td valign="top"><code>NULL</code><br>
631 <td valign="top"><code>ELT_INDI_AFN</code><br>
633 <td valign="top"><code>AFN</code><br>
635 <td valign="top"><code>REC_INDI</code><br>
637 <td valign="top"><code>STRING</code><br>
638 </td><td valign="top"><code>NULL</code><br>
643 <td valign="top"><code>ELT_OBJE_FORM</code><br>
645 <td valign="top"><code>FORM</code><br>
647 <td valign="top"><code>REC_OBJE</code><br>
649 <td valign="top"><code>STRING</code><br>
650 </td><td valign="top"><code>NULL</code><br>
655 <td valign="top"><code>ELT_OBJE_TITL</code><br>
657 <td valign="top"><code>TITL</code><br>
659 <td valign="top"><code>REC_OBJE</code><br>
661 <td valign="top"><code>STRING</code><br>
662 </td><td valign="top"><code>NULL</code><br>
667 <td valign="top"><code>ELT_OBJE_BLOB</code><br>
669 <td valign="top"><code>BLOB</code><br>
671 <td valign="top"><code>REC_OBJE</code><br>
673 <td valign="top"><code>NULL</code><br>
674 </td><td valign="top"><code>STRING</code><br>
679 <td valign="top"><code>ELT_OBJE_BLOB_CONT</code><br>
681 <td valign="top"><code>CONT</code><br>
683 <td valign="top"><code>ELT_OBJE_BLOB</code><br>
685 <td valign="top"><code>STRING</code><br>
686 </td><td valign="top"><code>NULL</code><br>
691 <td valign="top"><code>ELT_OBJE_OBJE</code><br>
693 <td valign="top"><code>OBJE</code><br>
695 <td valign="top"><code>REC_OBJE</code><br>
697 <td valign="top"><code>XREF_PTR(OBJE)</code><br>
698 </td><td valign="top"><code>NULL</code><br>
703 <td valign="top"><code>ELT_REPO_NAME</code><br>
705 <td valign="top"><code>NAME</code><br>
707 <td valign="top"><code>REC_REPO</code><br>
709 <td valign="top"><code>STRING</code><br>
710 </td><td valign="top"><code>NULL</code><br>
715 <td valign="top"><code>ELT_SOUR_DATA</code><br>
717 <td valign="top"><code>DATA</code><br>
719 <td valign="top"><code>REC_SOUR</code><br>
721 <td valign="top"><code>NULL</code><br>
722 </td><td valign="top"><code>NULL</code><br>
727 <td valign="top"><code>ELT_SOUR_DATA_EVEN</code><br>
729 <td valign="top"><code>EVEN</code><br>
731 <td valign="top"><code>ELT_SOUR_DATA</code><br>
733 <td valign="top"><code>STRING</code><br>
734 </td><td valign="top"><code>NULL</code><br>
739 <td valign="top"><code>ELT_SOUR_DATA_EVEN_DATE</code><br>
741 <td valign="top"><code>DATE</code><br>
743 <td valign="top"><code>ELT_SOUR_DATA_EVEN</code><br>
745 <td valign="top"><code>DATE</code><br>
746 </td><td valign="top"><code>NULL</code><br>
751 <td valign="top"><code>ELT_SOUR_DATA_EVEN_PLAC</code><br>
753 <td valign="top"><code>PLAC</code><br>
755 <td valign="top"><code>ELT_SOUR_DATA_EVEN</code><br>
757 <td valign="top"><code>STRING</code><br>
758 </td><td valign="top"><code>NULL</code><br>
763 <td valign="top"><code>ELT_SOUR_DATA_AGNC</code><br>
765 <td valign="top"><code>AGNC</code><br>
767 <td valign="top"><code>ELT_SOUR_DATA</code><br>
769 <td valign="top"><code>STRING</code><br>
770 </td><td valign="top"><code>NULL</code><br>
775 <td valign="top"><code>ELT_SOUR_AUTH</code><br>
777 <td valign="top"><code>AUTH</code><br>
779 <td valign="top"><code>REC_SOUR</code><br>
781 <td valign="top"><code>STRING</code><br>
782 </td><td valign="top"><code>STRING</code><br>
787 <td valign="top"><code>ELT_SOUR_TITL</code><br>
789 <td valign="top"><code>TITL</code><br>
791 <td valign="top"><code>REC_SOUR</code><br>
793 <td valign="top"><code>STRING</code><br>
794 </td><td valign="top"><code>STRING</code><br>
799 <td valign="top"><code>ELT_SOUR_ABBR</code><br>
801 <td valign="top"><code>ABBR</code><br>
803 <td valign="top"><code>REC_SOUR</code><br>
805 <td valign="top"><code>STRING</code><br>
806 </td><td valign="top"><code>NULL</code><br>
811 <td valign="top"><code>ELT_SOUR_PUBL</code><br>
813 <td valign="top"><code>PUBL</code><br>
815 <td valign="top"><code>REC_SOUR</code><br>
817 <td valign="top"><code>STRING</code><br>
818 </td><td valign="top"><code>STRING</code><br>
823 <td valign="top"><code>ELT_SOUR_TEXT</code><br>
825 <td valign="top"><code>TEXT</code><br>
827 <td valign="top"><code>REC_SOUR</code><br>
829 <td valign="top"><code>STRING</code><br>
830 </td><td valign="top"><code>STRING</code><br>
835 <td valign="top"><code>ELT_SUBN_SUBM</code><br>
837 <td valign="top"><code>SUBM</code><br>
839 <td valign="top"><code>REC_SUBN</code><br>
841 <td valign="top"><code>XREF_PTR(SUBM)</code><br>
842 </td><td valign="top"><code>NULL</code><br>
847 <td valign="top"><code>ELT_SUBN_FAMF</code><br>
849 <td valign="top"><code>FAMF</code><br>
851 <td valign="top"><code>REC_SUBN</code><br>
853 <td valign="top"><code>STRING</code><br>
854 </td><td valign="top"><code>NULL</code><br>
859 <td valign="top"><code>ELT_SUBN_TEMP</code><br>
861 <td valign="top"><code>TEMP</code><br>
863 <td valign="top"><code>REC_SUBN</code><br>
865 <td valign="top"><code>STRING</code><br>
866 </td><td valign="top"><code>NULL</code><br>
871 <td valign="top"><code>ELT_SUBN_ANCE</code><br>
873 <td valign="top"><code>ANCE</code><br>
875 <td valign="top"><code>REC_SUBN</code><br>
877 <td valign="top"><code>STRING</code><br>
878 </td><td valign="top"><code>NULL</code><br>
883 <td valign="top"><code>ELT_SUBN_DESC</code><br>
885 <td valign="top"><code>DESC</code><br>
887 <td valign="top"><code>REC_SUBN</code><br>
889 <td valign="top"><code>STRING</code><br>
890 </td><td valign="top"><code>NULL</code><br>
895 <td valign="top"><code>ELT_SUBN_ORDI</code><br>
897 <td valign="top"><code>ORDI</code><br>
899 <td valign="top"><code>REC_SUBN</code><br>
901 <td valign="top"><code>STRING</code><br>
902 </td><td valign="top"><code>NULL</code><br>
907 <td valign="top"><code>ELT_SUBN_RIN</code><br>
909 <td valign="top"><code>RIN</code><br>
911 <td valign="top"><code>REC_SUBN</code><br>
913 <td valign="top"><code>STRING</code><br>
914 </td><td valign="top"><code>NULL</code><br>
919 <td valign="top"><code>ELT_SUBM_NAME</code><br>
921 <td valign="top"><nobr><code>NAME</code></nobr><br>
923 <td valign="top"><code>REC_SUBM</code><br>
925 <td valign="top"><code>STRING</code><br>
926 </td><td valign="top"><code>NULL</code><br>
931 <td valign="top"><code>ELT_SUBM_LANG</code><br>
933 <td valign="top"><code>LANG</code><br>
935 <td valign="top"><code>REC_SUBM</code><br>
937 <td valign="top"><code>STRING</code><br>
938 </td><td valign="top"><code>NULL</code><br>
943 <td valign="top"><code>ELT_SUBM_RFN</code><br>
945 <td valign="top"><code>RFN</code><br>
947 <td valign="top"><code>REC_SUBM</code><br>
949 <td valign="top"><code>STRING</code><br>
950 </td><td valign="top"><code>NULL</code><br>
955 <td valign="top"><code>ELT_SUBM_RIN</code><br>
957 <td valign="top"><code>RIN</code><br>
959 <td valign="top"><code>REC_SUBM</code><br>
961 <td valign="top"><code>STRING</code><br>
962 </td><td valign="top"><code>NULL</code><br>
967 <td valign="top"><code>ELT_SUB_ADDR</code><br>
969 <td valign="top"><code>ADDR</code><br>
971 <td valign="top"><code>ELT_HEAD_SOUR_CORP,<br>
972 REC_REPO, REC_SUBM,<br>
973 </code><code>ELT_SUB_FAM_EVT</code>,<br>
974 <code>ELT_SUB_FAM_EVT_EVEN,<br>
975 ELT_SUB_INDIV_ATTR,<br>
976 ELT_SUB_INDIV_RESI,<br>
977 ELT_SUB_INDIV_BIRT,<br>
978 ELT_SUB_INDIV_GEN,<br>
979 ELT_SUB_INDIV_ADOP,<br>
980 ELT_SUB_INDIV_EVEN</code><br>
982 <td valign="top"><code>STRING</code><br>
983 </td><td valign="top"><code>STRING</code><br>
988 <td valign="top"><code>ELT_SUB_ADDR_CONT</code><br>
990 <td valign="top"><code>CONT</code><br>
992 <td valign="top"><code>ELT_SUB_ADDR</code><br>
994 <td valign="top"><code>STRING</code><br>
995 </td><td valign="top"><code>NULL</code><br>
1000 <td valign="top"><code>ELT_SUB_ADDR_ADR1</code><br>
1002 <td valign="top"><code>ADR1</code><br>
1004 <td valign="top"><code>ELT_SUB_ADDR</code><br>
1006 <td valign="top"><code>STRING</code><br>
1007 </td><td valign="top"><code>NULL</code><br>
1012 <td valign="top"><code>ELT_SUB_ADDR_ADR2</code><br>
1014 <td valign="top"><code>ADR2</code><br>
1016 <td valign="top"><code>ELT_SUB_ADDR</code><br>
1018 <td valign="top"><code>STRING</code><br>
1019 </td><td valign="top"><code>NULL</code><br>
1024 <td valign="top"><code>ELT_SUB_ADDR_CITY</code><br>
1026 <td valign="top"><code>CITY</code><br>
1028 <td valign="top"><code>ELT_SUB_ADDR</code><br>
1030 <td valign="top"><code>STRING</code><br>
1031 </td><td valign="top"><code>NULL</code><br>
1036 <td valign="top"><code>ELT_SUB_ADDR_STAE</code><br>
1038 <td valign="top"><code>STAE</code><br>
1040 <td valign="top"><code>ELT_SUB_ADDR</code><br>
1042 <td valign="top"><code>STRING</code><br>
1043 </td><td valign="top"><code>NULL</code><br>
1048 <td valign="top"><code>ELT_SUB_ADDR_POST</code><br>
1050 <td valign="top"><code>POST</code><br>
1052 <td valign="top"><code>ELT_SUB_ADDR</code><br>
1054 <td valign="top"><code>STRING</code><br>
1055 </td><td valign="top"><code>NULL</code><br>
1060 <td valign="top"><code>ELT_SUB_ADDR_CTRY</code><br>
1062 <td valign="top"><code>CTRY</code><br>
1064 <td valign="top"><code>ELT_SUB_ADDR</code><br>
1066 <td valign="top"><code>STRING</code><br>
1067 </td><td valign="top"><code>NULL</code><br>
1072 <td valign="top"><code>ELT_SUB_PHON</code><br>
1074 <td valign="top"><code>PHON</code><br>
1076 <td valign="top"><code>ELT_HEAD_SOUR_CORP,<br>
1077 REC_REPO, REC_SUBM,<br>
1078 </code><code>ELT_SUB_FAM_EVT,<br>
1079 </code><code>ELT_SUB_FAM_EVT_EVEN,<br>
1080 ELT_SUB_INDIV_ATTR,<br>
1081 ELT_SUB_INDIV_RESI,<br>
1082 ELT_SUB_INDIV_BIRT,<br>
1083 ELT_SUB_INDIV_GEN,<br>
1084 ELT_SUB_INDIV_ADOP,<br>
1085 ELT_SUB_INDIV_EVEN</code><br>
1087 <td valign="top"><code>STRING</code><br>
1088 </td><td valign="top"><code>NULL</code><br>
1093 <td valign="top"><code>ELT_SUB_ASSO</code><br>
1095 <td valign="top"><code>ASSO</code><br>
1097 <td valign="top"><code>REC_INDI</code><br>
1099 <td valign="top"><code>XREF_PTR(FAM),<br>
1106 XREF_PTR(SUBN)</code><br>
1107 </td><td valign="top"><code>NULL</code><br>
1112 <td valign="top"><code>ELT_SUB_ASSO_TYPE</code><br>
1114 <td valign="top"><code>TYPE</code><br>
1116 <td valign="top"><code>ELT_SUB_ASSO</code><br>
1118 <td valign="top"><code>STRING</code><br>
1119 </td><td valign="top"><code>NULL</code><br>
1124 <td valign="top"><code>ELT_SUB_ASSO_RELA</code><br>
1126 <td valign="top"><code>RELA</code><br>
1128 <td valign="top"><code>ELT_SUB_ASSO</code><br>
1130 <td valign="top"><code>STRING</code><br>
1131 </td><td valign="top"><code>NULL</code><br>
1136 <td valign="top"><code>ELT_SUB_CHAN</code><br>
1138 <td valign="top"><code>CHAN</code><br>
1140 <td valign="top"><code>REC_FAM, REC_INDI,<br>
1141 REC_OBJE, REC_NOTE,<br>
1142 REC_REPO, REC_SOUR,<br>
1146 <td valign="top"><code>NULL</code><br>
1147 </td><td valign="top"><code>NULL</code><br>
1152 <td valign="top"><code>ELT_SUB_CHAN_DATE</code><br>
1154 <td valign="top"><code>DATE</code><br>
1156 <td valign="top"><code>ELT_SUB_CHAN</code><br>
1158 <td valign="top"><code>DATE</code><br>
1159 </td><td valign="top"><code>NULL</code><br>
1164 <td valign="top"><code>ELT_SUB_CHAN_TIME</code><br>
1166 <td valign="top"><code>TIME</code><br>
1168 <td valign="top"><code>ELT_SUB_CHAN_DATE</code><br>
1170 <td valign="top"><code>STRING</code><br>
1171 </td><td valign="top"><code>NULL</code><br>
1176 <td valign="top"><code>ELT_SUB_FAMC</code><br>
1178 <td valign="top"><code>FAMC</code><br>
1180 <td valign="top"><code>REC_INDI</code><br>
1182 <td valign="top"><code>XREF_PTR(FAM)</code><br>
1183 </td><td valign="top"><code>NULL</code><br>
1188 <td valign="top"><code>ELT_SUB_FAMC_PEDI</code><br>
1190 <td valign="top"><code>PEDI</code><br>
1192 <td valign="top"><code>ELT_SUB_FAMC</code><br>
1194 <td valign="top"><code>STRING</code><br>
1195 </td><td valign="top"><code>NULL</code><br>
1200 <td valign="top"><code>ELT_SUB_CONT</code><br>
1202 <td valign="top"><code>CONT</code><br>
1204 <td valign="top"><code>ELT_HEAD_NOTE, REC_NOTE,<br>
1205 ELT_SOUR_AUTH, ELT_SOUR_TITL,<br>
1206 ELT_SOUR_PUBL, ELT_SOUR_TEXT,<br>
1208 ELT_SUB_SOUR, ELT_SUB_SOUR_TEXT<br>
1211 <td valign="top"><code>NULL<br>STRING</code><br>
1212 </td><td valign="top"><code>NULL</code><br>
1217 <td valign="top"><code>ELT_SUB_CONC</code><br>
1219 <td valign="top"><code>CONC</code><br>
1221 <td valign="top"><code>ELT_HEAD_NOTE, REC_NOTE,<br>
1222 ELT_SOUR_AUTH, ELT_SOUR_TITL,<br>
1223 ELT_SOUR_PUBL, ELT_SOUR_TEXT,<br>
1225 ELT_SUB_SOUR, ELT_SUB_SOUR_TEXT<br>
1228 <td valign="top"><code>STRING</code><br>
1229 </td><td valign="top"><code>NULL</code><br>
1234 <td valign="top"><code>ELT_SUB_EVT_TYPE</code><br>
1236 <td valign="top"><code>TYPE</code><br>
1238 <td valign="top"><code>ELT_SUB_FAM_EVT,<br>
1239 </code><code>ELT_SUB_FAM_EVT_EVEN,<br>
1240 ELT_SUB_INDIV_ATTR,<br>
1241 ELT_SUB_INDIV_RESI,<br>
1242 ELT_SUB_INDIV_BIRT,<br>
1243 ELT_SUB_INDIV_GEN,<br>
1244 ELT_SUB_INDIV_ADOP,<br>
1245 ELT_SUB_INDIV_EVEN</code><br>
1247 <td valign="top"><code>STRING</code><br>
1248 </td><td valign="top"><code>NULL</code><br>
1253 <td valign="top"><code>ELT_SUB_EVT_DATE</code><br>
1255 <td valign="top"><code>DATE</code><br>
1257 <td valign="top"><code>ELT_SUB_FAM_EVT</code>,<br>
1258 <code>ELT_SUB_FAM_EVT_EVEN,<br>
1259 ELT_SUB_INDIV_ATTR</code><code>,<br>
1260 ELT_SUB_INDIV_RESI,<br>
1261 ELT_SUB_INDIV_BIRT,<br>
1262 ELT_SUB_INDIV_GEN,<br>
1263 ELT_SUB_INDIV_ADOP,<br>
1264 ELT_SUB_INDIV_EVEN</code><br>
1266 <td valign="top"><code>DATE</code><br>
1267 </td><td valign="top"><code>NULL</code><br>
1272 <td valign="top"><code>ELT_SUB_EVT_AGE</code><br>
1274 <td valign="top"><code>AGE</code><br>
1276 <td valign="top"><code>ELT_SUB_FAM_EVT,<br>
1277 </code><code>ELT_SUB_FAM_EVT_EVEN,<br>
1278 ELT_SUB_INDIV_ATTR,<br>
1279 ELT_SUB_INDIV_RESI</code><code>,<br>
1280 ELT_SUB_INDIV_BIRT,<br>
1281 ELT_SUB_INDIV_GEN,<br>
1282 ELT_SUB_INDIV_ADOP,<br>
1283 ELT_SUB_INDIV_EVEN</code><br>
1285 <td valign="top"><code>AGE</code><br>
1286 </td><td valign="top"><code>NULL</code><br>
1291 <td valign="top"><code>ELT_SUB_EVT_AGNC</code><br>
1293 <td valign="top"><code>AGNC</code><br>
1295 <td valign="top"><code>ELT_SUB_FAM_EVT,<br>
1296 </code><code>ELT_SUB_FAM_EVT_EVEN,<br>
1297 ELT_SUB_INDIV_ATTR,<br>
1298 ELT_SUB_INDIV_RESI</code><code>,<br>
1299 ELT_SUB_INDIV_BIRT,<br>
1300 ELT_SUB_INDIV_GEN,<br>
1301 ELT_SUB_INDIV_ADOP,<br>
1302 ELT_SUB_INDIV_EVEN</code><br>
1304 <td valign="top"><code>STRING</code><br>
1305 </td><td valign="top"><code>NULL</code><br>
1310 <td valign="top"><code>ELT_SUB_EVT_CAUS</code><br>
1312 <td valign="top"><code>CAUS</code><br>
1314 <td valign="top"><code>ELT_SUB_FAM_EVT,<br>
1315 </code><code>ELT_SUB_FAM_EVT_EVEN,<br>
1316 ELT_SUB_INDIV_ATTR,<br>
1317 ELT_SUB_INDIV_RESI</code><code>,<br>
1318 ELT_SUB_INDIV_BIRT,<br>
1319 ELT_SUB_INDIV_GEN,<br>
1320 ELT_SUB_INDIV_ADOP,<br>
1321 ELT_SUB_INDIV_EVEN</code><br>
1323 <td valign="top"><code>STRING</code><br>
1324 </td><td valign="top"><code>NULL</code><br>
1329 <td valign="top"><code>ELT_SUB_FAM_EVT</code><br>
1331 <td valign="top"><code>ANUL, CENS, DIV,<br>
1332 DIVF, ENGA, MARR,<br>
1333 MARB, MARC, MARL,<br>
1336 <td valign="top"><code>REC_FAM</code><br>
1338 <td valign="top"><code>NULL<br>
1340 </td><td valign="top"><code>NULL</code><br>
1345 <td valign="top"><code>ELT_SUB_FAM_EVT_HUSB</code><br>
1347 <td valign="top"><code>HUSB</code><br>
1349 <td valign="top"><code>ELT_SUB_FAM_EVT</code>,<br>
1350 <code>ELT_SUB_FAM_EVT_EVEN</code><br>
1352 <td valign="top"><code>NULL</code><br>
1353 </td><td valign="top"><code>NULL</code><br>
1358 <td valign="top"><code>ELT_SUB_FAM_EVT_WIFE</code><br>
1360 <td valign="top"><code>WIFE</code><br>
1362 <td valign="top"><code>ELT_SUB_FAM_EVT</code>,<br>
1363 <code>ELT_SUB_FAM_EVT_EVEN</code><br>
1365 <td valign="top"><code>NULL</code><br>
1366 </td><td valign="top"><code>NULL</code><br>
1371 <td valign="top"><code>ELT_SUB_FAM_EVT_AGE</code><br>
1373 <td valign="top"><code>AGE</code><br>
1375 <td valign="top"><code>ELT_SUB_FAM_EVT_HUSB</code>,<br>
1376 <code>ELT_SUB_FAM_EVT_WIFE</code><br>
1378 <td valign="top"><code>AGE</code><br>
1379 </td><td valign="top"><code>NULL</code><br>
1384 <td valign="top"><code>ELT_SUB_FAM_EVT_EVEN</code><br>
1386 <td valign="top"><code>EVEN</code><br>
1388 <td valign="top"><code>REC_FAM</code><br>
1390 <td valign="top"><code>NULL</code><br>
1391 </td><td valign="top"><code>NULL</code><br>
1396 <td valign="top"><code>ELT_SUB_IDENT_REFN</code><br>
1398 <td valign="top"><code>REFN</code><br>
1400 <td valign="top"><code>REC_FAM, REC_INDI,<br>
1401 REC_OBJE, REC_NOTE,<br>
1402 REC_REPO, REC_SOUR<br>
1405 <td valign="top"><code>STRING</code><br>
1406 </td><td valign="top"><code>NULL</code><br>
1411 <td valign="top"><code>ELT_SUB_IDENT_REFN_TYPE</code><br>
1413 <td valign="top"><code>TYPE</code><br>
1415 <td valign="top"><code>ELT_SUB_IDENT_REFN</code><br>
1417 <td valign="top"><code>STRING</code><br>
1418 </td><td valign="top"><code>NULL</code><br>
1423 <td valign="top"><code>ELT_SUB_IDENT_RIN</code><br>
1425 <td valign="top"><code>RIN</code><br>
1427 <td valign="top"><code>REC_FAM, REC_INDI,<br>
1428 REC_OBJE, REC_NOTE,<br>
1429 REC_REPO, REC_SOUR<br>
1432 <td valign="top"><code>STRING</code><br>
1433 </td><td valign="top"><code>NULL</code><br>
1438 <td valign="top"><code>ELT_SUB_INDIV_ATTR</code><br>
1440 <td valign="top"><code>CAST, DSCR, EDUC,<br>
1441 IDNO, NATI, NCHR,<br>
1442 NMR, OCCU, PROP,<br>
1443 RELI, SSN, TITL</code><br>
1445 <td valign="top"><code>REC_INDI</code><br>
1447 <td valign="top"><code>STRING</code><br>
1448 </td><td valign="top"><code>NULL</code><br>
1453 <td valign="top"><code>ELT_SUB_INDIV_RESI</code><br>
1455 <td valign="top"><code>RESI</code><br>
1457 <td valign="top"><code>REC_INDI</code><br>
1459 <td valign="top"><code>NULL</code><br>
1460 </td><td valign="top"><code>NULL</code><br>
1465 <td valign="top"><code>ELT_SUB_INDIV_BIRT</code><br>
1467 <td valign="top"><code>BIRT, CHR</code><br>
1469 <td valign="top"><code>REC_INDI</code><br>
1471 <td valign="top"><code>NULL<br>
1473 </td><td valign="top"><code>NULL</code><br>
1478 <td valign="top"><code>ELT_SUB_INDIV_BIRT_FAMC</code><br>
1480 <td valign="top"><code>FAMC</code><br>
1482 <td valign="top"><code>ELT_SUB_INDIV_BIRT</code><br>
1484 <td valign="top"><code>XREF_PTR(FAM)</code><br>
1485 </td><td valign="top"><code>NULL</code><br>
1490 <td valign="top"><code>ELT_SUB_INDIV_GEN</code><br>
1492 <td valign="top"><code>DEAT, BURI, CREM,<br>
1493 BAPM, BARM, BASM,<br>
1494 BLES, CHRA, CONF,<br>
1495 FCOM, ORDN, NATU,<br>
1496 EMIG, IMMI, CENS,<br>
1497 PROB, WILL, GRAD,<br>
1500 <td valign="top"><code>REC_INDI</code><br>
1502 <td valign="top"><code>NULL<br>
1504 </td><td valign="top"><code>NULL</code><br>
1509 <td valign="top"><code>ELT_SUB_INDIV_ADOP</code><br>
1511 <td valign="top"><code>ADOP</code><br>
1513 <td valign="top"><code>REC_INDI</code><br>
1515 <td valign="top"><code>NULL<br>
1517 </td><td valign="top"><code>NULL</code><br>
1522 <td valign="top"><code>ELT_SUB_INDIV_ADOP_FAMC</code><br>
1524 <td valign="top"><code>FAMC</code><br>
1526 <td valign="top"><code>ELT_SUB_INDIV_ADOP</code><br>
1528 <td valign="top"><code>XREF_PTR(FAM)</code><br>
1529 </td><td valign="top"><code>NULL</code><br>
1534 <td valign="top"><code>ELT_SUB_INDIV_ADOP_FAMC_ADOP</code><br>
1536 <td valign="top"><code>ADOP</code><br>
1538 <td valign="top"><code>ELT_SUB_INDIV_ADOP_FAMC</code><br>
1540 <td valign="top"><code>STRING</code><br>
1541 </td><td valign="top"><code>NULL</code><br>
1546 <td valign="top"><code>ELT_SUB_INDIV_EVEN</code><br>
1548 <td valign="top"><code>EVEN</code><br>
1550 <td valign="top"><code>REC_INDI</code><br>
1552 <td valign="top"><code>NULL</code><br>
1553 </td><td valign="top"><code>NULL</code><br>
1558 <td valign="top"><code>ELT_SUB_LIO_BAPL</code><br>
1560 <td valign="top"><code>BAPL, CONL, ENDL</code><br>
1562 <td valign="top"><code>REC_INDI</code><br>
1564 <td valign="top"><code>NULL</code><br>
1565 </td><td valign="top"><code>NULL</code><br>
1570 <td valign="top"><code>ELT_SUB_LIO_BAPL_STAT</code><br>
1572 <td valign="top"><code>STAT</code><br>
1574 <td valign="top"><code></code><code>ELT_SUB_LIO_BAPL,<br>
1575 ELT_SUB_LIO_SLGC<br>
1578 <td valign="top"><code>STRING</code><br>
1579 </td><td valign="top"><code>NULL</code><br>
1584 <td valign="top"><code>ELT_SUB_LIO_BAPL_DATE</code><br>
1586 <td valign="top"><code>DATE</code><br>
1588 <td valign="top"><code>ELT_SUB_LIO_BAPL</code><code>,<br>
1589 ELT_SUB_LIO_SLGC<br>
1593 <td valign="top"><code>DATE</code><br>
1594 </td><td valign="top"><code>NULL</code><br>
1599 <td valign="top"><code>ELT_SUB_LIO_BAPL_TEMP</code><br>
1601 <td valign="top"><code>TEMP</code><br>
1603 <td valign="top"><code>ELT_SUB_LIO_BAPL</code><code>,<br>
1604 ELT_SUB_LIO_SLGC<br>
1608 <td valign="top"><code>STRING</code><br>
1609 </td><td valign="top"><code>NULL</code><br>
1614 <td valign="top"><code>ELT_SUB_LIO_BAPL_PLAC</code><br>
1616 <td valign="top"><code>PLAC</code><br>
1618 <td valign="top"><code>ELT_SUB_LIO_BAPL</code><code>,<br>
1619 ELT_SUB_LIO_SLGC<br>
1623 <td valign="top"><code>STRING</code><br>
1624 </td><td valign="top"><code>NULL</code><br>
1629 <td valign="top"><code>ELT_SUB_LIO_SLGC</code><br>
1631 <td valign="top"><code>SLGC</code><br>
1633 <td valign="top"><code>REC_INDI</code><br>
1635 <td valign="top"><code>NULL</code><br>
1636 </td><td valign="top"><code>NULL</code><br>
1641 <td valign="top"><code>ELT_SUB_LIO_SLGC_FAMC</code><br>
1643 <td valign="top"><code>FAMC</code><br>
1645 <td valign="top"><code>ELT_SUB_LIO_SLGC</code><br>
1647 <td valign="top"><code>XREF_PTR(FAM)</code><br>
1648 </td><td valign="top"><code>NULL</code><br>
1653 <td valign="top"><code>ELT_SUB_LSS_SLGS</code><br>
1655 <td valign="top"><code>SLGS</code><br>
1657 <td valign="top"><code>REC_FAM</code><br>
1659 <td valign="top"><code>NULL</code><br>
1660 </td><td valign="top"><code>NULL</code><br>
1665 <td valign="top"><code>ELT_SUB_LSS_SLGS_STAT</code><br>
1667 <td valign="top"><code>STAT</code><br>
1669 <td valign="top"><code>ELT_SUB_LSS_SLGS</code><br>
1671 <td valign="top"><code>STRING</code><br>
1672 </td><td valign="top"><code>NULL</code><br>
1677 <td valign="top"><code>ELT_SUB_LSS_SLGS_DATE</code><br>
1679 <td valign="top"><code>DATE</code><br>
1681 <td valign="top"><code>ELT_SUB_LSS_SLGS</code><br>
1683 <td valign="top"><code>DATE</code><br>
1684 </td><td valign="top"><code>NULL</code><br>
1689 <td valign="top"><code>ELT_SUB_LSS_SLGS_TEMP</code><br>
1691 <td valign="top"><code>TEMP</code><br>
1693 <td valign="top"><code>ELT_SUB_LSS_SLGS</code><br>
1695 <td valign="top"><code>STRING</code><br>
1696 </td><td valign="top"><code>NULL</code><br>
1701 <td valign="top"><code>ELT_SUB_LSS_SLGS_PLAC</code><br>
1703 <td valign="top"><code>PLAC</code><br>
1705 <td valign="top"><code>ELT_SUB_LSS_SLGS</code><br>
1707 <td valign="top"><code>STRING</code><br>
1708 </td><td valign="top"><code>NULL</code><br>
1713 <td valign="top"><code>ELT_SUB_MULTIM_OBJE</code><br>
1715 <td valign="top"><code>OBJE</code><br>
1717 <td valign="top"><code>REC_FAM, REC_INDI,<br>
1718 REC_SOUR, REC_SUBM,<br>
1719 </code><code>ELT_SUB_FAM_EVT,<br>
1720 ELT_SUB_FAM_EVT_EVEN,<br>
1721 ELT_SUB_INDIV_ATTR,<br>
1722 ELT_SUB_INDIV_RESI</code><code>,<br>
1723 ELT_SUB_INDIV_BIRT,<br>
1724 ELT_SUB_INDIV_GEN,<br>
1725 ELT_SUB_INDIV_ADOP,<br>
1726 ELT_SUB_INDIV_EVEN,<br>
1727 ELT_SUB_SOUR</code><br>
1729 <td valign="top"><code>NULL<br>
1732 </td><td valign="top"><code>NULL</code><br>
1737 <td valign="top"><code>ELT_SUB_MULTIM_OBJE_FORM</code><br>
1739 <td valign="top"><code>FORM</code><br>
1741 <td valign="top"><code>ELT_SUB_MULTIM_OBJE</code><br>
1743 <td valign="top"><code>STRING</code><br>
1744 </td><td valign="top"><code>NULL</code><br>
1749 <td valign="top"><code>ELT_SUB_MULTIM_OBJE_TITL</code><br>
1751 <td valign="top"><code>TITL</code><br>
1753 <td valign="top"><code>ELT_SUB_MULTIM_OBJE</code><br>
1755 <td valign="top"><code>STRING</code><br>
1756 </td><td valign="top"><code>NULL</code><br>
1761 <td valign="top"><code>ELT_SUB_MULTIM_OBJE_FILE</code><br>
1763 <td valign="top"><code>FILE</code><br>
1765 <td valign="top"><code>ELT_SUB_MULTIM_OBJE</code><br>
1767 <td valign="top"><code>STRING</code><br>
1768 </td><td valign="top"><code>NULL</code><br>
1773 <td valign="top"><code>ELT_SUB_NOTE</code><br>
1775 <td valign="top"><code>NOTE</code><br>
1777 <td valign="top"><code>REC_FAM, REC_INDI,<br>
1778 REC_OBJE, REC_REPO,<br>
1779 REC_SOUR, ELT_SOUR_DATA,<br>
1780 ELT_SUB_ASSO, ELT_SUB_CHAN,<br>
1781 ELT_SUB_FAMC, </code><code>ELT_SUB_FAM_EVT,<br>
1782 ELT_SUB_FAM_EVT_EVEN,<br>
1783 ELT_SUB_INDIV_ATTR,<br>
1784 ELT_SUB_INDIV_RESI</code><code>,<br>
1785 ELT_SUB_INDIV_BIRT,<br>
1786 ELT_SUB_INDIV_GEN,<br>
1787 ELT_SUB_INDIV_ADOP,<br>
1788 ELT_SUB_INDIV_EVEN,<br>
1789 ELT_SUB_LIO_BAPL,<br>
1790 ELT_SUB_LIO_SLGC,<br>
1791 ELT_SUB_LSS_SLGS,<br>
1792 ELT_SUB_MULTIM_OBJE,<br>
1793 ELT_SUB_PERS_NAME,<br>
1797 ELT_SUB_FAMS</code><br>
1799 <td valign="top"><code>NULL<br>
1803 </td><td valign="top"><code>STRING<br>
1810 <td valign="top"><code>ELT_SUB_PERS_NAME</code><br>
1812 <td valign="top"><code>NAME</code><br>
1814 <td valign="top"><code>REC_INDI</code><br>
1816 <td valign="top"><code>STRING</code><br>
1817 </td><td valign="top"><code>NULL</code><br>
1822 <td valign="top"><code>ELT_SUB_PERS_NAME_NPFX</code><br>
1824 <td valign="top"><code>NPFX</code><br>
1826 <td valign="top"><code>ELT_SUB_PERS_NAME</code><br>
1828 <td valign="top"><code>STRING</code><br>
1829 </td><td valign="top"><code>NULL</code><br>
1834 <td valign="top"><code>ELT_SUB_PERS_NAME_GIVN</code><br>
1836 <td valign="top"><code>GIVN</code><br>
1838 <td valign="top"><code>ELT_SUB_PERS_NAME</code><br>
1840 <td valign="top"><code>STRING</code><br>
1841 </td><td valign="top"><code>NULL</code><br>
1846 <td valign="top"><code>ELT_SUB_PERS_NAME_NICK</code><br>
1848 <td valign="top"><code>NICK</code><br>
1850 <td valign="top"><code>ELT_SUB_PERS_NAME</code><br>
1852 <td valign="top"><code>STRING</code><br>
1853 </td><td valign="top"><code>NULL</code><br>
1858 <td valign="top"><code>ELT_SUB_PERS_NAME_SPFX</code><br>
1860 <td valign="top"><code>SPFX</code><br>
1862 <td valign="top"><code>ELT_SUB_PERS_NAME</code><br>
1864 <td valign="top"><code>STRING</code><br>
1865 </td><td valign="top"><code>NULL</code><br>
1870 <td valign="top"><code>ELT_SUB_PERS_NAME_SURN</code><br>
1872 <td valign="top"><code>SURN</code><br>
1874 <td valign="top"><code>ELT_SUB_PERS_NAME</code><br>
1876 <td valign="top"><code>STRING</code><br>
1877 </td><td valign="top"><code>NULL</code><br>
1882 <td valign="top"><code>ELT_SUB_PERS_NAME_NSFX</code><br>
1884 <td valign="top"><code>NSFX</code><br>
1886 <td valign="top"><code>ELT_SUB_PERS_NAME</code><br>
1888 <td valign="top"><code>STRING</code><br>
1889 </td><td valign="top"><code>NULL</code><br>
1894 <td valign="top"><code>ELT_SUB_PLAC</code><br>
1896 <td valign="top"><code>PLAC</code><br>
1898 <td valign="top"><code>ELT_SUB_FAM_EVT</code>,<br>
1899 <code>ELT_SUB_FAM_EVT_EVEN,<br>
1900 ELT_SUB_INDIV_ATTR,<br>
1901 ELT_SUB_INDIV_RESI</code><code>,
1903 ELT_SUB_INDIV_BIRT,<br>
1904 ELT_SUB_INDIV_GEN,<br>
1905 ELT_SUB_INDIV_ADOP,<br>
1906 ELT_SUB_INDIV_EVEN</code><br>
1908 <td valign="top"><code>STRING</code><br>
1909 </td><td valign="top"><code>NULL</code><br>
1914 <td valign="top"><code>ELT_SUB_PLAC_FORM</code><br>
1916 <td valign="top"><code>FORM</code><br>
1918 <td valign="top"><code>ELT_SUB_PLAC</code><br>
1920 <td valign="top"><code>STRING</code><br>
1921 </td><td valign="top"><code>NULL</code><br>
1926 <td valign="top"><code>ELT_SUB_SOUR</code><br>
1928 <td valign="top"><code>SOUR</code><br>
1930 <td valign="top"><code>REC_FAM, REC_INDI,<br>
1931 REC_NOTE, ELT_SUB_ASSO<br>
1932 </code><code>ELT_SUB_FAM_EVT,<br>
1933 </code><code>ELT_SUB_FAM_EVT_EVEN,<br>
1934 ELT_SUB_INDIV_ATTR,<br>
1935 ELT_SUB_INDIV_RESI</code><code>,<br>
1936 ELT_SUB_INDIV_BIRT,<br>
1937 ELT_SUB_INDIV_GEN,<br>
1938 ELT_SUB_INDIV_ADOP,<br>
1939 ELT_SUB_INDIV_EVEN,<br>
1940 ELT_SUB_LIO_BAPL,<br>
1941 ELT_SUB_LIO_SLGC,<br>
1942 ELT_SUB_LSS_SLGS,<br>
1944 ELT_SUB_PERS_NAME,<br>
1945 ELT_SUB_PLAC</code><br>
1947 <td valign="top"><code>STRING<br>
1948 XREF_PTR(SOUR)</code><br>
1949 </td><td valign="top"><code>STRING<br>
1955 <td valign="top"><code>ELT_SUB_SOUR_PAGE</code><br>
1957 <td valign="top"><code>PAGE</code><br>
1959 <td valign="top"><code>ELT_SUB_SOUR</code><br>
1961 <td valign="top"><code>STRING</code><br>
1962 </td><td valign="top"><code>NULL</code><br>
1967 <td valign="top"><code>ELT_SUB_SOUR_EVEN</code><br>
1969 <td valign="top"><code>EVEN</code><br>
1971 <td valign="top"><code>ELT_SUB_SOUR</code><br>
1973 <td valign="top"><code>STRING</code><br>
1974 </td><td valign="top"><code>NULL</code><br>
1979 <td valign="top"><code>ELT_SUB_SOUR_EVEN_ROLE</code><br>
1981 <td valign="top"><code>ROLE</code><br>
1983 <td valign="top"><code>ELT_SUB_SOUR_EVEN</code><br>
1985 <td valign="top"><code>STRING</code><br>
1986 </td><td valign="top"><code>NULL</code><br>
1991 <td valign="top"><code>ELT_SUB_SOUR_DATA</code><br>
1993 <td valign="top"><code>DATA</code><br>
1995 <td valign="top"><code>ELT_SUB_SOUR</code><br>
1997 <td valign="top"><code>NULL</code><br>
1998 </td><td valign="top"><code>NULL</code><br>
2003 <td valign="top"><code>ELT_SUB_SOUR_DATA_DATE</code><br>
2005 <td valign="top"><code>DATE</code><br>
2007 <td valign="top"><code>ELT_SUB_SOUR_DATA</code><br>
2009 <td valign="top"><code>DATE</code><br>
2010 </td><td valign="top"><code>NULL</code><br>
2015 <td valign="top"><code>ELT_SUB_SOUR_TEXT</code><br>
2017 <td valign="top"><code>TEXT</code><br>
2019 <td valign="top"><code>ELT_SUB_SOUR<br>
2020 ELT_SUB_SOUR_DATA</code><br>
2022 <td valign="top"><code>STRING</code><br>
2023 </td><td valign="top"><code>NULL</code><br>
2028 <td valign="top"><code>ELT_SUB_SOUR_QUAY</code><br>
2030 <td valign="top"><code>QUAY</code><br>
2032 <td valign="top"><code>ELT_SUB_SOUR</code><br>
2034 <td valign="top"><code>STRING</code><br>
2035 </td><td valign="top"><code>NULL</code><br>
2040 <td valign="top"><code>ELT_SUB_REPO</code><br>
2042 <td valign="top"><code>REPO</code><br>
2044 <td valign="top"><code>REC_SOUR</code><br>
2046 <td valign="top"><code>XREF_PTR(REPO)</code><br>
2047 </td><td valign="top"><code>NULL</code><br>
2052 <td valign="top"><code>ELT_SUB_REPO_CALN</code><br>
2054 <td valign="top"><code>CALN</code><br>
2056 <td valign="top"><code>ELT_SUB_REPO</code><br>
2058 <td valign="top"><code>STRING</code><br>
2059 </td><td valign="top"><code>NULL</code><br>
2064 <td valign="top"><code>ELT_SUB_REPO_CALN_MEDI</code><br>
2066 <td valign="top"><code>MEDI</code><br>
2068 <td valign="top"><code>ELT_SUB_REPO_CALN</code><br>
2070 <td valign="top"><code>STRING</code><br>
2071 </td><td valign="top"><code>NULL</code><br>
2076 <td valign="top"><code>ELT_SUB_FAMS</code><br>
2078 <td valign="top"><code>FAMS</code><br>
2080 <td valign="top"><code>REC_INDI</code><br>
2082 <td valign="top"><code>XREF_PTR(FAM)</code><br>
2083 </td><td valign="top"><code>NULL</code><br>
2088 <td valign="top"><code>ELT_USER</code><br>
2090 <td valign="top"><code>any tag starting<br>
2091 with an underscore</code><br>
2093 <td valign="top"><code>anywhere</code><br>
2095 <td valign="top"><code>NULL<br>
2097 XREF_PTR(USER)</code><br>
2098 </td><td valign="top"><code>NULL</code><br>
2106 <hr width="100%" size="2">
2107 <h2><a name="Gedcom_val_types"></a>Gedcom_val types<br>
2109 Currently, the specific <code>Gedcom_val</code> types are (with <code>
2110 val</code> of type <code>Gedcom_val</code>):<br>
2113 <table cellpadding="2" cellspacing="2" border="1" width="100%">
2116 <td valign="top"><br>
2118 <td valign="top"><b>type checker</b><br>
2120 <td valign="top"><b>cast operator</b><br>
2124 <td valign="top">null value<br>
2126 <td valign="top"><code>GEDCOM_IS_NULL(val)</code><br>
2128 <td valign="top">N/A<br>
2132 <td valign="top">string<br>
2134 <td valign="top"><code>GEDCOM_IS_STRING(val)</code><br>
2136 <td valign="top"><code>char* str = GEDCOM_STRING(val);</code><br>
2140 <td valign="top">date<br>
2142 <td valign="top"><code>GEDCOM_IS_DATE(val)</code><br>
2144 <td valign="top"><code>struct date_value dv = GEDCOM_DATE(val);</code></td>
2147 <td valign="top">age<br>
2149 <td valign="top"><code>GEDCOM_IS_AGE(val)</code><br>
2151 <td valign="top"><code>struct age_value age = GEDCOM_AGE(val);</code><br>
2155 <td valign="top">xref pointer<br>
2157 <td valign="top"><code>GEDCOM_IS_XREF_PTR(val)</code><br>
2159 <td valign="top"><code>struct xref_value *xr = GEDCOM_XREF_PTR(val);</code><br>
2167 The type checker returns a true or a false value according to the
2168 type of the value, but this is in principle only necessary in the rare
2169 circumstances that two types are possible, or where an optional value
2170 can be provided. In most cases, the type is fixed for a specific
2173 The null value is used for when the GEDCOM spec doesn't allow a value,
2174 or when an optional value is allowed but none is given.<br>
2176 The string value is the most general used value currently, for all
2177 those values that don't have a more specific meaning. In essence,
2178 the value that is returned by <code>GEDCOM_STRING(val)</code> is always the same as the
2179 <code>raw_value</code> passed to the start callback, and is thus in fact redundant.<br>
2181 The date value is used for all elements that return a date. See
2182 <a href="#date_value">here</a> for the definition.<br>
2184 The xref value is for cross-references between records in the file. See
2185 <a href="#xref_value">here</a> for the definition.<br>
2188 <h3><a name="date_value"></a>struct date_value</h3>
2189 This struct describes a date as given in the GEDCOM file, and has the
2190 following definition:<br>
2192 <blockquote><code>struct date_value {<br>
2193 Date_value_type type;<br>
2194 struct date date1;<br>
2195 struct date date2;<br>
2196 char phrase[MAX_PHRASE_LEN
2200 It depends on the first member, the type, which members are actually
2204 <table cellpadding="2" cellspacing="2" border="1" width="100%">
2207 <td valign="top" align="center"><b>Date_value_type</b><br>
2209 <td valign="top" align="center"><b>Meaning</b><br>
2211 <td valign="top" align="center"><b>Relevant members</b><br>
2215 <td valign="top"><code>DV_NO_MODIFIER</code><br>
2217 <td valign="top">just a simple date<br>
2219 <td valign="top">date1<br>
2223 <td valign="top"><code>DV_BEFORE</code><br>
2225 <td valign="top">a range (BEFORE date1)<br>
2227 <td valign="top">date1<br>
2231 <td valign="top"><code>DV_AFTER</code><br>
2233 <td valign="top">a range (AFTER date1)<br>
2235 <td valign="top">date1<br>
2239 <td valign="top"><code>DV_BETWEEN</code><br>
2241 <td valign="top">a range (BETWEEN date1 AND date2)<br>
2243 <td valign="top">date1, date2<br>
2247 <td valign="top"><code>DV_FROM</code><br>
2249 <td valign="top">a period (FROM date1)<br>
2251 <td valign="top">date1<br>
2255 <td valign="top"><code>DV_TO</code><br>
2257 <td valign="top">a period (TO date1)<br>
2259 <td valign="top">date1<br>
2263 <td valign="top"><code>DV_FROM_TO</code><br>
2265 <td valign="top">a period (FROM date1 TO date2)<br>
2267 <td valign="top">date1, date2<br>
2271 <td valign="top"><code>DV_ABOUT</code><br>
2273 <td valign="top">an approximation (ABOUT date1)<br>
2275 <td valign="top">date1<br>
2279 <td valign="top"><code>DV_CALCULATED</code><br>
2281 <td valign="top">an approximation (CALCULATED date1)<br>
2283 <td valign="top">date1<br>
2287 <td valign="top"><code>DV_ESTIMATED</code><br>
2289 <td valign="top">an approximation (ESTIMATED date1)<br>
2291 <td valign="top">date1<br>
2295 <td valign="top"><code>DV_INTERPRETED</code><br>
2297 <td valign="top">INTERPRETED date1 FROM a given free form date
2300 <td valign="top">date1, phrase<br>
2304 <td valign="top"><code>DV_PHRASE</code><br>
2306 <td valign="top">a free form date phrase
2307 (date1 and date2 can contain meaningful values, if the dates could be parsed,
2308 but did not result in a valid date; the sdn values will then still be -1)<br>
2310 <td valign="top">phrase<br>
2317 The following function creates a new <code>date_value</code> struct and initializes it properly, or copies an existing date value:
2318 <blockquote><code>struct date_value* <b>gedcom_new_date_value</b> (const struct date_value* copy_from);<br></code></blockquote>
2319 <code></code>If the parameter <code>copy_from</code> is <code>NULL</code>, a new value is created and given initial values. If it is non-<code>NULL</code>, the value is copied into a new date value.<br>
2321 <h3><a name="date"></a>struct date<br>
2323 The <code>date1</code> and <code>date2</code> also have a strict syntax:<br>
2325 <blockquote><code>struct date {<br>
2326 Calendar_type cal;<br>
2327 char day_str[MAX_DAY_LEN +
2329 char month_str[MAX_MONTH_LEN
2331 char year_str[MAX_YEAR_LEN
2334 int day;<br>
2335 int month;<br>
2336 int year;<br>
2337 Year_type year_type;<br>
2339 Date_type type;<br>
2340 long int sdn1;<br>
2341 long int sdn2;<br>
2344 The first four fields are the primary fields parsed from the value in
2345 the GEDCOM file. The <code>day_str</code>, <code>month_str</code>
2346 and <code> year_str</code> are the literal parts of the date that denote
2347 the day, month and year (the <code>day_str</code> and <code>month_str</code>
2348 can be empty) . The calendar type <code>cal</code> is one of (see
2349 calendar overview <i>LINK TBD</i>):<br>
2352 <li><code>CAL_GREGORIAN</code> : the Gregorian calendar</li>
2353 <li><code>CAL_JULIAN</code> : the Julian calendar</li>
2354 <li><code>CAL_HEBREW</code> : the Hebrew (Jewish) calendar</li>
2355 <li><code>CAL_FRENCH_REV</code> : the calendar used after the
2356 French Revolution</li>
2357 <li><code>CAL_UNKNOWN</code> : an unknown calendar type</li>
2360 The next four fields are deduced from the first four:<br>
2363 <li>the <code>day</code> is just the numeric representation of
2364 the <code>day_str</code> (starting from 1), -1 if the <code>day_str</code>
2366 <li>the <code>month</code> is the month number of <code>month_str</code>
2367 in the given calendar type (also starting from 1), -1 if the <code>
2368 month_str</code> is empty</li>
2369 <li>the <code>year</code> is the numeric representation of the
2370 <code> year_str</code></li>
2373 It is possible that the <code>year_str</code> is given as e.g. "1677/78".
2374 This is coming from a date in a so called "annunciation style", where
2375 the year began on 25 March: "20 March 1677/78" is 20 March 1677 in "annunciation
2376 style" and 20 March 1678 in "circumcision style" (the current style). See
2377 calendar overview (<i>LINK TBD</i>).<br>
2379 In this case, the <code>year</code> will contain the "circumcision style"
2380 year (1678 in the example), and <code>year_type</code> will be <code>YEAR_DOUBLE.</code>
2381 Normal dates will have a <code>year_type</code> equal to <code>
2382 YEAR_SINGLE</code> .<br>
2384 Finally, the last three fields are probably the most interesting values
2385 for applications that want to process dates. Basically, the date
2386 is converted to a serial day number (aka Julian day), which is the unique
2387 day number since November 25, 4714 BC in the Gregorian calendar. The
2388 advantage of these day numbers is that they are unique and independent
2389 of the calendar system. Furthermore, date differences can just be
2390 computed by subtracting the serial day numbers.<br>
2392 However, since dates in GEDCOM are not necessarily exact (e.g. "MAR
2393 1990"), it is not possible to represent all GEDCOM dates with 1 serial
2394 day number. Two cases can be distinguished:<br>
2397 <li>Exact dates (e.g. "25 MAR 1990"):</li>
2402 <blockquote>These are represented by a serial day number in <code>sdn1</code>
2403 and a <code>Date_type</code> equal to <code>DATE_EXACT</code>.<br>
2408 <li>Incomplete dates (e.g. "MAR 1990"):</li>
2415 <blockquote>These are represented by 2 serial day numbers (<code>sdn1</code> and <code>sdn2</code>) and a <code>Date_type</code> equal
2416 to <code>DATE_BOUNDED</code>.<br>
2419 For example, the Gregorian date "MAR 1990" is represented by the serial
2420 day numbers for "1 MAR 1990" and "31 MAR 1990", and the Gregorian date
2421 "1990" is represented by the serial day numbers for "1 JAN 1990" and "31
2422 DEC 1990". Similarly for the other calendar types.<br>
2428 <code></code>To ensure that an updated date value is consistent, i.e. all
2429 its struct fields are consistent with each other, the following function
2431 <blockquote><code>int <b>gedcom_normalize_date</b> (Date_input compute_from, struct date_value* value);<br></code></blockquote>
2433 <code></code>The <code>compute_from</code> parameter determines which fields
2434 will be taken as input to compute the other fields. The following table
2435 gives an overview of the input and output parameters (the calendar type <code>cal</code> is always an input parameter, and should not be <code>CAL_UNKNOWN</code>):<br>
2437 <table cellpadding="2" cellspacing="2" border="1" width="100%">
2440 <td valign="top" align="center"><b>compute_from</b><br>
2442 <td valign="top" align="center"><b>input parameters</b><br>
2444 <td valign="top" align="center"><b>output parameters</b><br>
2448 <td valign="top"><code>DI_FROM_STRINGS</code><br>
2450 <td valign="top"><code>day_str, month_str, year_str</code><br>
2452 <td valign="top"><code>day, month, year, year_type<br>
2453 type, sdn1, sdn2</code><br>
2457 <td valign="top"><code>DI_FROM_NUMBERS</code><br>
2459 <td valign="top"><code>day, month, year, year_type</code><br>
2461 <td valign="top"><code>day_str, month_str, year_str<br>
2463 type, sdn1, sdn2</code><br>
2467 <td valign="top"><code>DI_FROM_SDN</code><br>
2469 <td valign="top"><code>type, sdn1, sdn2</code><br>
2471 <td valign="top"><code>day, month, year<br>
2472 day_str, month_str, year_str</code><br>
2478 If the type in the date value is <code>DV_PHRASE</code>, no conversions take
2479 place, otherwise one or both of the date structs are processed according
2480 to the table above, depending on the type. The function returns 0 in case of success, non-zero in case of an error.<br>
2482 This function could also be used to convert a date from one calendar to another,
2483 because the serial day number is calendar independent (error handling is
2484 ignored in this example):<br>
2485 <blockquote><code>struct date_value* dv = gedcom_new_date_value(NULL);<br>
2486 dv->date1.cal = CAL_GREGORIAN;<br>
2487 dv->date1.day = 4</code>;<br>
2488 <code>dv->date1.month = 2;<br>
2489 dv->date1.year = 1799;<br>
2490 dv->date1.year_type = YEAR_SINGLE;<br>
2491 gedcom_normalize_date(DI_FROM_NUMBERS, dv);<br>
2493 dv->date1.cal = CAL_FRENCH_REV;<br>
2494 gedcom_normalize_date(DI_FROM_SDN, dv);<br>
2495 /* the day, month and year are now filled in according to the French Revolution calendar */</code><br>
2502 <h3><a name="age_value"></a>struct age_value</h3>
2504 This struct describes an age as given in the GEDCOM file, and has the
2505 following definition:<br>
2508 <blockquote><code>struct age_value {<br>
2509 Age_type type;<br>
2510 Age_modifier mod;<br>
2511 int years;<br>
2512 int months;<br>
2513 int days;<br>
2514 char phrase[MAX_PHRASE_LEN
2523 It depends on the first member, the type, which members are actually
2526 <table cellpadding="2" cellspacing="2" border="1" width="100%">
2528 <td valign="top" align="center"><b>Age_type</b><br>
2530 <td valign="top" align="center"><b>Meaning</b><br>
2532 <td valign="top" align="center"><b>Relevant members</b><br>
2536 <td valign="top"><code>AGE_UNRECOGNIZED</code><br>
2538 <td valign="top">format not recognized, full raw value in phrase<br>
2540 <td valign="top">phrase<br>
2544 <td valign="top"><code>AGE_CHILD</code><br>
2546 <td valign="top">the indication 'CHILD'<br>
2548 <td valign="top">mod<br>
2552 <td valign="top"><code>AGE_INFANT</code><br>
2554 <td valign="top">the indication 'INFANT'<br>
2556 <td valign="top">mod<br>
2560 <td valign="top"><code>AGE_STILLBORN</code><br>
2562 <td valign="top">the indication 'STILLBORN'<br>
2564 <td valign="top">mod<br>
2566 <td valign="top"><code>AGE_NUMERIC</code><br>
2568 <td valign="top">an indication in years, months and/or days (each can be -1 if not given)<br>
2570 <td valign="top">mod, years, months, days<br>
2576 The modifier can be one of the following:<br>
2578 <li><code> AGE_NO_MODIFIER</code> : no modifier</li><li><code>AGE_LESS_THAN</code><code></code> : the modifier '<' is added</li><li><code>AGE_GREATER_THAN </code>: the modifier '>' is added</li>
2580 The following function creates a new <code>age_value</code> struct and initializes it properly, or copies an existing age value:
2581 <blockquote><code>struct age_value* <b>gedcom_new_age_value</b> (const struct age_value* copy_from);<br></code></blockquote>
2583 <code></code>If the parameter <code>copy_from</code> is <code>NULL</code>, a new value is created and given initial values. If it is non-<code>NULL</code>, the value is copied into a new age value.<br>
2584 <h3><a name="xref_value"></a>struct xref_value</h3>
2586 This struct represents a cross-reference in the GEDCOM file (but note that
2587 the <code>Gedcom_val</code> contains a pointer to such a struct, not the struct
2588 itself). It is defined as:<br>
2590 <blockquote><code>struct xref_value {<br>
2591 Xref_type type,<br>
2592 char* string,<br>
2593 Gedcom_ctxt object<br>
2596 The <code>Xref_type</code> gives the type of the cross-reference and can
2600 <li><code>XREF_NONE</code> (used as default value)</li>
2601 <li><code>XREF_FAM</code></li>
2602 <li><code>XREF_INDI</code></li>
2603 <li><code>XREF_NOTE</code></li>
2604 <li><code>XREF_OBJE</code></li>
2605 <li><code>XREF_REPO</code></li>
2606 <li><code>XREF_SOUR</code></li>
2607 <li><code>XREF_SUBM</code></li>
2608 <li><code>XREF_SUBN</code></li><li><code>XREF_ANY</code> (if the type is not known, see below)<br>
2611 <li><code>XREF_USER</code> (for application-specific cross-references)<br>
2615 The <code>string</code> gives the actual cross-reference string from the
2616 GEDCOM file, and the <code>object</code> is initially <code>NULL,</code> but
2617 can be filled by the application with an object (of any type) that corresponds
2618 with the cross-reference, and then later extracted when the cross-reference
2619 is used or defined again in the file. This relieves the application
2620 from the burden of maintaining the mapping between cross-references and objects.<br>
2622 The value <code>XREF_ANY</code> is used when the type of the object is not
2623 immediately known: it has to come from further information. This is
2624 the case in an association (<code>ELT_SUB_ASSO</code>): the type is then given by the <code>TYPE</code> subtag.<br>
2626 The parser checks whether all cross-references that are used are defined
2627 (if not, an error is produced) and whether all cross-references that are
2628 defined are used (if not, a warning is produced). It also checks whether
2629 the type of the cross-reference is the same on definition and use (if not,
2630 an error is produced). The first two checks are done at the end of
2631 the parsing, because cross-references can be defined after their usage in
2634 The following functions are available to manipulate xref_value objects:<br>
2635 <blockquote><code>struct xref_value* <b>gedcom_get_by_xref</b> (const char *key)</code><br>
2636 <blockquote> Retrieve an xref_value by its key. Returns <code>NULL</code> if the given key isn't a valid cross-reference key (see below) or isn't used.<br>
2638 <code>struct xref_value* <b>gedcom_add_xref</b> (Xref_type type, const char* key, Gedcom_ctxt object)</code> <br>
2639 <blockquote>Add an xref_value of the given <code>type</code> (see list above), with the given <code>key</code>, to the given <code>object</code>, with a use count equal to 0. Returns the new xref_value if success. Returns <code>NULL</code> in one of the following cases:<br>
2641 <li>the key isn't a valid cross-reference key (see below)</li>
2642 <li>there is already an xref_value with the same key</li>
2643 <li>there was a memory allocation error</li>
2646 <code>int <b>gedcom_delete_xref</b> (const char* key)<br>
2648 <blockquote>Delete the xref_value corresponding to the given key. Returns 0 if success. Returns 1 in one of the following cases:<br>
2650 <li>the key isn't a valid cross-reference key (see below)</li>
2651 <li>there is no xref_value with the given key</li>
2652 <li>the xref_value is still in use, i.e. its use count is not 0 (see <code>gedcom_link_xref</code> and <code>gedcom_unlink_xref</code> below)</li>
2655 <code>struct xref_value* <b>gedcom_link_xref</b> (Xref_type type, const char* key)<br>
2656 struct xref_value* <b>gedcom_unlink_xref</b> (Xref_type type, const char* key)</code><br>
2658 the xref_value corresponding to the given key as being used/no longer used
2659 (linked to or unlinked) as the given type. The use of these functions
2660 is not mandatory, but it can aid in spotting places in the code where xref_value
2661 objects are deleted while they are still referenced.<br>
2663 Returns the xref_value object if success, and its use count is incremented/decremented. Returns <code>NULL</code> in one of the following cases:<br>
2665 <li>the key isn't a valid cross-reference key (see below)</li>
2666 <li>there is no xref_value with the given key</li>
2667 <li>the xref_value was previously added as another type than the type provided here<br>
2675 A cross-reference key must be a string of maximum 22 characters, of the following format:<br>
2677 <li>an at sign ('@')</li>
2678 <li>followed by an alphanumeric character (A-Z, a-z, 0-9 or underscore)</li>
2679 <li>followed by zero or more characters, which can be any character except an at sign</li>
2680 <li>terminated by an at sign ('@')</li>
2682 An example would thus be: "@This is an xref_val@".<br>
2685 <hr width="100%" size="2">
2686 <pre>$Id$<br>$Name$<br></pre>