X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=standalone.c;h=41c77524b3a99f9af453bd48f1c9250d401d02e9;hb=95deed7400e87af12a987af2abf5187ab1ddf9aa;hp=06ac82a63f8f409a157e115f9cde5468ea75d891;hpb=400d2f34fa89de4f49c048ce3ce66a6ab2b0a7dd;p=gedcom-parse.git diff --git a/standalone.c b/standalone.c index 06ac82a..41c7752 100644 --- a/standalone.c +++ b/standalone.c @@ -5,7 +5,8 @@ void show_help () { - printf("gedcom-parse test program for libgedcom\n"); + printf("gedcom-parse test program for libgedcom\n\n"); + printf("Usage: gedcom-parse [options] file\n"); printf("Options:\n"); printf(" -h Show this help text\n"); printf(" -nc Disable compatibility mode\n"); @@ -16,11 +17,72 @@ void show_help () printf(" -da Debug setting: libgedcom + yacc debug messages\n"); } +int determine_encoding(FILE* f) +{ + char first[2]; + + fread(first, 1, 2, f); + if ((first[0] == '0') && (first[1] == ' ')) { + gedcom_warning("One-byte encoding"); + fseek(f, 0, 0); + return ONE_BYTE; + } + else if ((first[0] == '\0') && (first[1] == '0')) + { + gedcom_warning("Two-byte encoding, high-low"); + fseek(f, 0, 0); + return TWO_BYTE_HILO; + } + else if ((first[0] == '\xFE') && (first[1] == '\xFF')) + { + gedcom_warning("Two-byte encoding, high-low, with BOM"); + return TWO_BYTE_HILO; + } + else if ((first[0] == '0') && (first[1] == '\0')) + { + gedcom_warning("Two-byte encoding, low-high"); + fseek(f, 0, 0); + return TWO_BYTE_LOHI; + } + else if ((first[0] == '\xFF') && (first[1] == '\xFE')) + { + gedcom_warning("Two-byte encoding, low-high, with BOM"); + return TWO_BYTE_LOHI; + } + else { + gedcom_warning("Unknown encoding, falling back to one-byte"); + fseek(f, 0, 0); + return ONE_BYTE; + } +} + +int gedcom_xxx_parse(char* file_name) +{ + ENCODING enc; + FILE* file = fopen (file_name, "r"); + if (!file) { + printf("Could not open file '%s'\n", file_name); + exit(1); + } + enc = determine_encoding(file); + + if (enc == ONE_BYTE) { + gedcom_in = file; + return gedcom_parse(); + } + else { + printf("No parser yet for encoding\n"); + exit(1); + } +} + int main(int argc, char* argv[]) { MECHANISM mech = IMMED_FAIL; int compat_enabled = 1; int debug_level = 0; + char* file_name = NULL; + if (argc > 1) { int i; for (i=1; i