+
+int is_551_tag(const char* tag)
+{
+ if (strncmp(tag, "EMAIL", 6))
+ return 1;
+ else if (strncmp(tag, "FONE", 5))
+ return 1;
+ else if (strncmp(tag, "ROMN", 5))
+ return 1;
+ else
+ return 0;
+}
+
+int compat_check_551_tag(const char* tag, struct safe_buffer* b)
+{
+ if (is_551_tag(tag)) {
+ reset_buffer(b);
+ SAFE_BUF_ADDCHAR(b, '_');
+ safe_buf_append(b, tag);
+ gedcom_warning(_("Converting 5.5.1 tag '%s' to standard 5.5 user tag '%s'"),
+ tag, get_buf_string(b));
+ return 1;
+ }
+ else
+ return 0;
+}
+
+void compat_generate_slgc_famc_link(Gedcom_ctxt parent)
+{
+ struct xref_value *xr = gedcom_parse_xref(SLGC_FAMC_LINK, XREF_USED,
+ XREF_FAM);
+ struct tag_struct ts;
+ Gedcom_ctxt self;
+
+ ts.string = "FAMC";
+ ts.value = TAG_FAMC;
+ gedcom_warning(_("Adding link to family record with xref '%s'"),
+ SLGC_FAMC_LINK);
+ self = start_element(ELT_SUB_LIO_SLGC_FAMC,
+ parent, 2, ts, SLGC_FAMC_LINK,
+ GEDCOM_MAKE_XREF_PTR(val1, xr));
+ end_element(ELT_SUB_LIO_SLGC_FAMC, parent, self, NULL);
+ compat_state[C_NO_SLGC_FAMC]++;
+}
+
+void compat_generate_slgc_famc_fam()
+{
+ /* If bigger than 1, then the FAM record has already been generated */
+ if (compat_state[C_NO_SLGC_FAMC] == 1) {
+ struct xref_value *xr = gedcom_parse_xref(SLGC_FAMC_LINK, XREF_DEFINED,
+ XREF_FAM);
+ struct tag_struct ts;
+ Gedcom_ctxt self;
+
+ /* generate "0 FAM" */
+ ts.string = "FAM";
+ ts.value = TAG_FAM;
+ self = start_record(REC_FAM, 0, GEDCOM_MAKE_XREF_PTR(val1, xr), ts,
+ NULL, GEDCOM_MAKE_NULL(val2));
+
+ /* close "0 FAM" */
+ end_record(REC_FAM, self, NULL);
+ }
+}