Move all compatibility handling functions to compat.c; let the default
authorPeter Verthez <Peter.Verthez@advalvas.be>
Fri, 16 Aug 2002 18:41:23 +0000 (18:41 +0000)
committerPeter Verthez <Peter.Verthez@advalvas.be>
Fri, 16 Aug 2002 18:41:23 +0000 (18:41 +0000)
charset depend on the program.

gedcom/compat.c
gedcom/compat.h
gedcom/gedcom.y

index 59e61d313e8ece4954693c2ab0f3fab32f529926..f7638e6970200be8ea656cf7c94d3d525ff09391 100644 (file)
 #include "gedcom_internal.h"
 #include "gedcom.h"
 
+int compat_enabled = 1;
+int compatibility  = 0; 
 int compat_at = 0;
+char* default_charset;
 
 #define SUBMITTER_LINK         "@__COMPAT__SUBM__@"
 #define DEFAULT_SUBMITTER_NAME "Submitter"
 #define DEFAULT_GEDCOM_VERS    "5.5"
 #define DEFAULT_GEDCOM_FORM    "LINEAGE-LINKED"
-/* Make default character set ANSI, for all 'special characters'
-   typically used in non-compliant gedcom generators */
-#define DEFAULT_CHAR           "ANSI"
 
 /* Incompatibily list (with GEDCOM 5.5):
 
@@ -53,6 +53,39 @@ int compat_at = 0;
        - '@' not written as '@@' in values
  */
 
+/* Compatibility handling */
+
+void gedcom_set_compat_handling(int enable_compat)
+{
+  compat_enabled = enable_compat;
+}
+
+void set_compatibility(char* program)
+{
+  if (compat_enabled) {
+    if (! strncmp(program, "ftree", 6)) {
+      gedcom_warning(_("Enabling compatibility with 'ftree'"));
+      compatibility = C_FTREE;
+      default_charset = "ANSI";
+    }
+    else if (! strncmp(program, "LIFELINES", 9)) {
+      /* Matches "LIFELINES 3.0.2" */
+      gedcom_warning(_("Enabling compatibility with 'Lifelines'"));
+      compatibility = C_LIFELINES;
+      default_charset = "ANSI";
+      compat_at = 1;
+    }
+    else {
+      compatibility = 0;
+    }
+  }
+}
+
+int compat_mode(int compat_flags)
+{
+  return (compat_flags & compatibility);
+}
+
 void compat_generate_submitter_link(Gedcom_ctxt parent)
 {
   struct xref_value *xr = gedcom_parse_xref(SUBMITTER_LINK, XREF_USED,
@@ -137,12 +170,12 @@ int compat_generate_char(Gedcom_ctxt parent)
   /* first generate "1 CHAR <DEFAULT_CHAR>" */
   ts.string = "CHAR";
   ts.value  = TAG_CHAR;
-  self1 = start_element(ELT_HEAD_CHAR, parent, 1, ts, DEFAULT_CHAR,
-                       GEDCOM_MAKE_STRING(val1, DEFAULT_CHAR));
+  self1 = start_element(ELT_HEAD_CHAR, parent, 1, ts, default_charset,
+                       GEDCOM_MAKE_STRING(val1, default_charset));
   
   /* close "1 CHAR" */
   end_element(ELT_HEAD_CHAR, parent, self1, NULL);
-  if (open_conv_to_internal(DEFAULT_CHAR) == 0)
+  if (open_conv_to_internal(default_charset) == 0)
     return 1;
   else
     return 0;
index f92293c5629f8a560104f229b8cd76dcf64e99fb..ff2423c943ac9933811af48a2f77ab32a76ececc 100644 (file)
 
 extern int compat_at;
 
+enum _COMPAT {
+  C_FTREE = 0x01,
+  C_LIFELINES = 0x02
+};
+
+void set_compatibility(char* program);
+int  compat_mode(int flags); 
 void compat_generate_submitter_link(Gedcom_ctxt parent);
 void compat_generate_submitter();
 void compat_generate_gedcom(Gedcom_ctxt parent);
index 911b5fdf85b0a049002b59bc80de634792efe2f1..f305257db49f2f0f6e59a7c1db9c17c4347036ca 100644 (file)
 
 int  count_level    = 0;
 int  fail           = 0;
-int  compat_enabled = 1;
 int  gedcom_high_level_debug = 0; 
-int  compatibility  = 0; 
 Gedcom_err_mech error_mechanism = IMMED_FAIL;
 Gedcom_val_struct val1;
 Gedcom_val_struct val2; 
@@ -161,11 +159,6 @@ Gedcom_val_struct val2;
 char line_item_buf[MAXGEDCLINELEN * UTF_FACTOR + 1];
 char *line_item_buf_ptr;
 
-enum _COMPAT {
-  C_FTREE = 0x01,
-  C_LIFELINES = 0x02
-};
-
 /* These are defined at the bottom of the file */ 
 void push_countarray();
 void set_parenttag(char* tag);
@@ -175,8 +168,6 @@ Gedcom_ctxt get_parentctxt(int offset);
 void pop_countarray();
 int  count_tag(int tag);
 int  check_occurrence(int tag);
-void set_compatibility(char* program);
-int  compat_mode(int flags); 
 
 #define CLEAR_BUFFER(BUF)                                                     \
      memset(BUF, 0, sizeof(BUF));
@@ -3908,35 +3899,3 @@ void gedcom_set_error_handling(Gedcom_err_mech mechanism)
 {
   error_mechanism = mechanism;
 }
-
-/* Compatibility handling */
-
-void gedcom_set_compat_handling(int enable_compat)
-{
-  compat_enabled = enable_compat;
-}
-
-void set_compatibility(char* program)
-{
-  if (compat_enabled) {
-    if (! strncmp(program, "ftree", 6)) {
-      gedcom_warning(_("Enabling compatibility with 'ftree'"));
-      compatibility = C_FTREE;
-    }
-    else if (! strncmp(program, "LIFELINES", 9)) {
-      /* Matches "LIFELINES 3.0.2" */
-      gedcom_warning(_("Enabling compatibility with 'Lifelines'"));
-      compatibility = C_LIFELINES;
-      compat_at = 1;
-    }
-    else {
-      compatibility = 0;
-    }
-  }
-}
-
-int compat_mode(int compat_flags)
-{
-  return (compat_flags & compatibility);
-}
-