X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=t%2Fsrc%2Fgom_write.c;h=4bfeac5c5a93486074cab8b37cbc8a8da9049105;hb=bb5284fc2cc6ee6694ed523e01ea454141a370b3;hp=cdf8b0638ed966a9c9e338b9d8069a0f7e918975;hpb=26b300c73fd81fea51f15d66c0e94d8e32728660;p=gedcom-parse.git diff --git a/t/src/gom_write.c b/t/src/gom_write.c index cdf8b06..4bfeac5 100644 --- a/t/src/gom_write.c +++ b/t/src/gom_write.c @@ -31,6 +31,7 @@ #define WRITE_GEDCOM "gom_write.ged" #define PROG_NAME "writegomtest" #define PROG_VERSION "3.14" +#define TIMESTAMP 1000000000L void gedcom_message_handler(Gedcom_msg_type type, char *msg) { @@ -51,6 +52,7 @@ void show_help () printf(" -h Show this help text\n"); printf(" -q No output to standard output\n"); printf(" -o File to generate errors to (def. testgedcom.out)\n"); + printf(" -i File to read gedcom from (default: new file)\n"); printf(" -w File to write gedcom to (def. %s)\n", WRITE_GEDCOM); printf(" -e Encoding (UNICODE, ASCII, ANSEL, ...: see gedcom.enc)\n"); printf(" -u Encoding details for Unicode\n"); @@ -71,13 +73,12 @@ int update_header(char* encoding) if (head == NULL) return 1; else { - /* - value = gom_set_string(&head->charset.name, encoding); - if (value == NULL || strcmp(value, encoding)) - return 1; - else - return 0; - */ + /* force warning for anything except UNICODE */ + if (!strcmp(encoding, "UNICODE")) { + value = gom_set_string(&head->charset.name, encoding); + if (value == NULL || strcmp(value, encoding)) + return 1; + } value = gom_set_string(&head->note, long_note); if (value == NULL || strcmp(value, long_note)) return 1; @@ -89,8 +90,11 @@ int update_header(char* encoding) int main(int argc, char* argv[]) { int result; + struct tm* tm_ptr; + time_t tval; int total_conv_fails = 0; char* outfilename = NULL; + char* infilename = NULL; char* gedfilename = WRITE_GEDCOM; char* encoding = "ASCII"; Encoding enc = ONE_BYTE; @@ -129,6 +133,17 @@ int main(int argc, char* argv[]) exit(1); } } + else if (!strncmp(argv[i], "-i", 3)) { + i++; + if (i < argc) { + infilename = argv[i]; + } + else { + printf ("Missing input file name\n"); + show_help(); + exit(1); + } + } else if (!strncmp(argv[i], "-e", 3)) { i++; if (i < argc) { @@ -201,10 +216,23 @@ int main(int argc, char* argv[]) gedcom_write_set_line_terminator(end); output_open(outfilename); - - result = gom_new_model(); - if (result == 0) - result |= update_header(encoding); + + if (infilename) { + result = gom_parse_file(infilename); + } + else { + result = gom_new_model(); + if (result == 0) + result |= update_header(encoding); + } + /* Make sure we get a reproduceable output, in different timezones */ + if (result == 0) { + tval = TIMESTAMP; + tm_ptr = gmtime(&tval); + tm_ptr->tm_isdst = 0; + tval = mktime(tm_ptr); + result = gom_header_update_timestamp(tval); + } if (result == 0) result |= gom_write_file(gedfilename, &total_conv_fails); if (result == 0 && total_conv_fails == 0) {