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>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<br>
2308 <td valign="top">phrase<br>
2315 The following function creates a new <code>date_value</code> struct and initializes it properly, or copies an existing date value:
2316 <blockquote><code>struct date_value* <b>gedcom_new_date_value</b> (struct date_value* copy_from);<br></code></blockquote>
2317 <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>
2319 <h3><a name="date"></a>struct date<br>
2321 The <code>date1</code> and <code>date2</code> also have a strict syntax:<br>
2323 <blockquote><code>struct date {<br>
2324 Calendar_type cal;<br>
2325 char day_str[MAX_DAY_LEN +
2327 char month_str[MAX_MONTH_LEN
2329 char year_str[MAX_YEAR_LEN
2332 int day;<br>
2333 int month;<br>
2334 int year;<br>
2335 Year_type year_type;<br>
2337 Date_type type;<br>
2338 long int sdn1;<br>
2339 long int sdn2;<br>
2342 The first four fields are the primary fields parsed from the value in
2343 the GEDCOM file. The <code>day_str</code>, <code>month_str</code>
2344 and <code> year_str</code> are the literal parts of the date that denote
2345 the day, month and year (the <code>day_str</code> and <code>month_str</code>
2346 can be empty) . The calendar type <code>cal</code> is one of (see
2347 calendar overview <i>LINK TBD</i>):<br>
2350 <li><code>CAL_GREGORIAN</code> : the Gregorian calendar</li>
2351 <li><code>CAL_JULIAN</code> : the Julian calendar</li>
2352 <li><code>CAL_HEBREW</code> : the Hebrew (Jewish) calendar</li>
2353 <li><code>CAL_FRENCH_REV</code> : the calendar used after the
2354 French Revolution</li>
2355 <li><code>CAL_UNKNOWN</code> : an unknown calendar type</li>
2358 The next four fields are deduced from the first four:<br>
2361 <li>the <code>day</code> is just the numeric representation of
2362 the <code>day_str</code> (starting from 1), -1 if the <code>day_str</code>
2364 <li>the <code>month</code> is the month number of <code>month_str</code>
2365 in the given calendar type (also starting from 1), -1 if the <code>
2366 month_str</code> is empty</li>
2367 <li>the <code>year</code> is the numeric representation of the
2368 <code> year_str</code></li>
2371 It is possible that the <code>year_str</code> is given as e.g. "1677/78".
2372 This is coming from a date in a so called "annunciation style", where
2373 the year began on 25 March: "20 March 1677/78" is 20 March 1677 in "annunciation
2374 style" and 20 March 1678 in "circumcision style" (the current style). See
2375 calendar overview (<i>LINK TBD</i>).<br>
2377 In this case, the <code>year</code> will contain the "circumcision style"
2378 year (1678 in the example), and <code>year_type</code> will be <code>YEAR_DOUBLE.</code>
2379 Normal dates will have a <code>year_type</code> equal to <code>
2380 YEAR_SINGLE</code> .<br>
2382 Finally, the last three fields are probably the most interesting values
2383 for applications that want to process dates. Basically, the date
2384 is converted to a serial day number (aka Julian day), which is the unique
2385 day number since November 25, 4714 BC in the Gregorian calendar. The
2386 advantage of these day numbers is that they are unique and independent
2387 of the calendar system. Furthermore, date differences can just be
2388 computed by subtracting the serial day numbers.<br>
2390 However, since dates in GEDCOM are not necessarily exact (e.g. "MAR
2391 1990"), it is not possible to represent all GEDCOM dates with 1 serial
2392 day number. Two cases can be distinguished:<br>
2395 <li>Exact dates (e.g. "25 MAR 1990"):</li>
2400 <blockquote>These are represented by a serial day number in <code>sdn1</code>
2401 and a <code>Date_type</code> equal to <code>DATE_EXACT</code>.<br>
2406 <li>Incomplete dates (e.g. "MAR 1990"):</li>
2413 <blockquote>These are represented by 2 serial day numbers (<code>sdn1</code> and <code>sdn2</code>) and a <code>Date_type</code> equal
2414 to <code>DATE_BOUNDED</code>.<br>
2417 For example, the Gregorian date "MAR 1990" is represented by the serial
2418 day numbers for "1 MAR 1990" and "31 MAR 1990", and the Gregorian date
2419 "1990" is represented by the serial day numbers for "1 JAN 1990" and "31
2420 DEC 1990". Similarly for the other calendar types.<br>
2426 <code></code>To ensure that an updated date value is consistent, i.e. all
2427 its struct fields are consistent with each other, the following function
2429 <blockquote><code>int <b>gedcom_normalize_date</b> (Date_input compute_from, struct date_value* value);<br></code></blockquote>
2431 <code></code>The <code>compute_from</code> parameter determines which fields
2432 will be taken as input to compute the other fields. The following table
2433 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>
2435 <table cellpadding="2" cellspacing="2" border="1" width="100%">
2438 <td valign="top" align="center"><b>compute_from</b><br>
2440 <td valign="top" align="center"><b>input parameters</b><br>
2442 <td valign="top" align="center"><b>output parameters</b><br>
2446 <td valign="top"><code>DI_FROM_STRINGS</code><br>
2448 <td valign="top"><code>day_str, month_str, year_str</code><br>
2450 <td valign="top"><code>day, month, year, year_type<br>
2451 type, sdn1, sdn2</code><br>
2455 <td valign="top"><code>DI_FROM_NUMBERS</code><br>
2457 <td valign="top"><code>day, month, year, year_type</code><br>
2459 <td valign="top"><code>day_str, month_str, year_str<br>
2461 type, sdn1, sdn2</code><br>
2465 <td valign="top"><code>DI_FROM_SDN</code><br>
2467 <td valign="top"><code>type, sdn1, sdn2</code><br>
2469 <td valign="top"><code>day, month, year<br>
2470 day_str, month_str, year_str</code><br>
2476 If the type in the date value is <code>DV_PHRASE</code>, no conversions take
2477 place, otherwise one or both of the date structs are processed according
2478 to the table above, depending on the type. The function returns 0 in case of success, non-zero in case of an error.<br>
2480 This function could also be used to convert a date from one calendar to another,
2481 because the serial day number is calendar independent (error handling is
2482 ignored in this example):<br>
2483 <blockquote><code>struct date_value* dv = gedcom_new_date_value(NULL);<br>
2484 dv->date1.cal = CAL_GREGORIAN;<br>
2485 dv->date1.day = 4</code>;<br>
2486 <code>dv->date1.month = 2;<br>
2487 dv->date1.year = 1799;<br>
2488 dv->date1.year_type = YEAR_SINGLE;<br>
2489 gedcom_normalize_date(DI_FROM_NUMBERS, dv);<br>
2491 dv->date1.cal = CAL_FRENCH_REV;<br>
2492 gedcom_normalize_date(DI_FROM_SDN, dv);<br>
2493 /* the day, month and year are now filled in according to the French Revolution calendar */</code><br>
2500 <h3><a name="age_value"></a>struct age_value</h3>
2502 This struct describes an age as given in the GEDCOM file, and has the
2503 following definition:<br>
2506 <blockquote><code>struct age_value {<br>
2507 Age_type type;<br>
2508 Age_modifier mod;<br>
2509 int years;<br>
2510 int months;<br>
2511 int days;<br>
2512 char phrase[MAX_PHRASE_LEN
2521 It depends on the first member, the type, which members are actually
2524 <table cellpadding="2" cellspacing="2" border="1" width="100%">
2526 <td valign="top" align="center"><b>Age_type</b><br>
2528 <td valign="top" align="center"><b>Meaning</b><br>
2530 <td valign="top" align="center"><b>Relevant members</b><br>
2534 <td valign="top"><code>AGE_UNRECOGNIZED</code><br>
2536 <td valign="top">format not recognized, full raw value in phrase<br>
2538 <td valign="top">phrase<br>
2542 <td valign="top"><code>AGE_CHILD</code><br>
2544 <td valign="top">the indication 'CHILD'<br>
2546 <td valign="top">mod<br>
2550 <td valign="top"><code>AGE_INFANT</code><br>
2552 <td valign="top">the indication 'INFANT'<br>
2554 <td valign="top">mod<br>
2558 <td valign="top"><code>AGE_STILLBORN</code><br>
2560 <td valign="top">the indication 'STILLBORN'<br>
2562 <td valign="top">mod<br>
2564 <td valign="top"><code>AGE_NUMERIC</code><br>
2566 <td valign="top">an indication in years, months and/or days (each can be -1 if not given)<br>
2568 <td valign="top">mod, years, months, days<br>
2574 The modifier can be one of the following:<br>
2576 <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>
2578 The following function creates a new <code>age_value</code> struct and initializes it properly, or copies an existing age value:
2579 <blockquote><code>struct age_value* <b>gedcom_new_age_value</b> (struct age_value* copy_from);<br></code></blockquote>
2581 <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>
2582 <h3><a name="xref_value"></a>struct xref_value</h3>
2584 This struct represents a cross-reference in the GEDCOM file (but note that
2585 the <code>Gedcom_val</code> contains a pointer to such a struct, not the struct
2586 itself). It is defined as:<br>
2588 <blockquote><code>struct xref_value {<br>
2589 Xref_type type,<br>
2590 char* string,<br>
2591 Gedcom_ctxt object<br>
2594 The <code>Xref_type</code> gives the type of the cross-reference and can
2598 <li><code>XREF_NONE</code> (used as default value)</li>
2599 <li><code>XREF_FAM</code></li>
2600 <li><code>XREF_INDI</code></li>
2601 <li><code>XREF_NOTE</code></li>
2602 <li><code>XREF_OBJE</code></li>
2603 <li><code>XREF_REPO</code></li>
2604 <li><code>XREF_SOUR</code></li>
2605 <li><code>XREF_SUBM</code></li>
2606 <li><code>XREF_SUBN</code></li><li><code>XREF_ANY</code> (if the type is not known, see below)<br>
2609 <li><code>XREF_USER</code> (for application-specific cross-references)<br>
2613 The <code>string</code> gives the actual cross-reference string from the
2614 GEDCOM file, and the <code>object</code> is initially <code>NULL,</code> but
2615 can be filled by the application with an object (of any type) that corresponds
2616 with the cross-reference, and then later extracted when the cross-reference
2617 is used or defined again in the file. This relieves the application
2618 from the burden of maintaining the mapping between cross-references and objects.<br>
2620 The value <code>XREF_ANY</code> is used when the type of the object is not
2621 immediately known: it has to come from further information. This is
2622 the case in an association (<code>ELT_SUB_ASSO</code>): the type is then given by the <code>TYPE</code> subtag.<br>
2624 The parser checks whether all cross-references that are used are defined
2625 (if not, an error is produced) and whether all cross-references that are
2626 defined are used (if not, a warning is produced). It also checks whether
2627 the type of the cross-reference is the same on definition and use (if not,
2628 an error is produced). The first two checks are done at the end of
2629 the parsing, because cross-references can be defined after their usage in
2632 The following functions are available to manipulate xref_value objects:<br>
2633 <blockquote><code>struct xref_value* <b>gedcom_get_by_xref</b> (const char *key)</code><br>
2634 <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>
2636 <code>struct xref_value* <b>gedcom_add_xref</b> (Xref_type type, const char* key, Gedcom_ctxt object)</code> <br>
2637 <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>
2639 <li>the key isn't a valid cross-reference key (see below)</li>
2640 <li>there is already an xref_value with the same key</li>
2641 <li>there was a memory allocation error</li>
2644 <code>int <b>gedcom_delete_xref</b> (const char* key)<br>
2646 <blockquote>Delete the xref_value corresponding to the given key. Returns 0 if success. Returns 1 in one of the following cases:<br>
2648 <li>the key isn't a valid cross-reference key (see below)</li>
2649 <li>there is no xref_value with the given key</li>
2650 <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>
2653 <code>struct xref_value* <b>gedcom_link_xref</b> (Xref_type type, const char* key)<br>
2654 struct xref_value* <b>gedcom_unlink_xref</b> (Xref_type type, const char* key)</code><br>
2656 the xref_value corresponding to the given key as being used/no longer used
2657 (linked to or unlinked) as the given type. The use of these functions
2658 is not mandatory, but it can aid in spotting places in the code where xref_value
2659 objects are deleted while they are still referenced.<br>
2661 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>
2663 <li>the key isn't a valid cross-reference key (see below)</li>
2664 <li>there is no xref_value with the given key</li>
2665 <li>the xref_value was previously added as another type than the type provided here<br>
2673 A cross-reference key must be a string of maximum 22 characters, of the following format:<br>
2675 <li>an at sign ('@')</li>
2676 <li>followed by an alphanumeric character (A-Z, a-z, 0-9 or underscore)</li>
2677 <li>followed by zero or more characters, which can be any character except an at sign</li>
2678 <li>terminated by an at sign ('@')</li>
2680 An example would thus be: "@This is an xref_val@".<br>
2683 <hr width="100%" size="2">
2684 <pre>$Id$<br>$Name$<br></pre>