8 printf("gedcom-parse test program for libgedcom\n\n");
9 printf("Usage: gedcom-parse [options] file\n");
11 printf(" -h Show this help text\n");
12 printf(" -nc Disable compatibility mode\n");
13 printf(" -fi Fail immediately on errors\n");
14 printf(" -fd Deferred fail on errors, but parse completely\n");
15 printf(" -fn No fail on errors\n");
16 printf(" -dg Debug setting: only libgedcom debug messages\n");
17 printf(" -da Debug setting: libgedcom + yacc debug messages\n");
20 int determine_encoding(FILE* f)
24 fread(first, 1, 2, f);
25 if ((first[0] == '0') && (first[1] == ' ')) {
26 gedcom_warning("One-byte encoding");
30 else if ((first[0] == '\0') && (first[1] == '0'))
32 gedcom_warning("Two-byte encoding, high-low");
36 else if ((first[0] == '\xFE') && (first[1] == '\xFF'))
38 gedcom_warning("Two-byte encoding, high-low, with BOM");
41 else if ((first[0] == '0') && (first[1] == '\0'))
43 gedcom_warning("Two-byte encoding, low-high");
47 else if ((first[0] == '\xFF') && (first[1] == '\xFE'))
49 gedcom_warning("Two-byte encoding, low-high, with BOM");
53 gedcom_warning("Unknown encoding, falling back to one-byte");
59 int gedcom_xxx_parse(char* file_name)
62 FILE* file = fopen (file_name, "r");
64 printf("Could not open file '%s'\n", file_name);
67 enc = determine_encoding(file);
69 if (enc == ONE_BYTE) {
71 return gedcom_parse();
74 printf("No parser yet for encoding\n");
79 int main(int argc, char* argv[])
81 MECHANISM mech = IMMED_FAIL;
82 int compat_enabled = 1;
84 char* file_name = NULL;
88 for (i=1; i<argc; i++) {
89 if (!strncmp(argv[i], "-da", 4))
91 else if (!strncmp(argv[i], "-dg", 4))
93 else if (!strncmp(argv[i], "-fi", 4))
95 else if (!strncmp(argv[i], "-fd", 4))
97 else if (!strncmp(argv[i], "-fn", 4))
99 else if (!strncmp(argv[i], "-nc", 4))
101 else if (!strncmp(argv[i], "-h", 3)) {
105 else if (strncmp(argv[i], "-", 1)) {
110 printf ("Unrecognized option: %s\n", argv[i]);
118 printf("No file name given\n");
123 gedcom_set_debug_level(debug_level);
124 gedcom_set_compat_handling(compat_enabled);
125 gedcom_set_error_handling(mech);
127 if (gedcom_xxx_parse(file_name) == 0) {
128 printf("Parse succeeded\n");
132 printf("Parse failed\n");
137 int gedcom_warning(char* s, ...)
143 fprintf(stderr, "Warning on line %d: ", line_no);
144 res = vfprintf(stderr, s, ap);
145 fprintf(stderr, "\n");
151 int gedcom_error(char* s, ...)
157 fprintf(stderr, "Error on line %d: ", line_no);
158 res = vfprintf(stderr, s, ap);
159 fprintf(stderr, "\n");