1 /* Test program for the Gedcom library.
2 Copyright (C) 2001, 2002 The Genes Development Team
3 This file is part of the Gedcom parser library.
4 Contributed by Peter Verthez <Peter.Verthez@advalvas.be>, 2001.
6 The Gedcom parser library is free software; you can redistribute it
7 and/or modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The Gedcom parser library is distributed in the hope that it will be
12 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the Gedcom parser library; if not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
27 #include "portability.h"
31 #define WRITE_GEDCOM "gom_write.ged"
32 #define PROG_NAME "writegomtest"
33 #define PROG_VERSION "3.14"
35 void gedcom_message_handler(Gedcom_msg_type type, char *msg)
38 output(1, "MESSAGE: ");
39 else if (type == WARNING)
40 output(1, "WARNING: ");
41 else if (type == ERROR)
43 output(1, "%s\n", msg);
48 printf("gedcom-parse test program for libgedcom\n\n");
49 printf("Usage: writegomtest [options]\n");
51 printf(" -h Show this help text\n");
52 printf(" -q No output to standard output\n");
53 printf(" -o <outfile> File to generate errors to (def. testgedcom.out)\n");
54 printf(" -i <gedfile> File to read gedcom from (default: new file)\n");
55 printf(" -w <gedfile> File to write gedcom to (def. %s)\n", WRITE_GEDCOM);
56 printf(" -e <encoding> Encoding (UNICODE, ASCII, ANSEL, ...: see gedcom.enc)\n");
57 printf(" -u <unicode_enc> Encoding details for Unicode\n");
58 printf(" <unicode_enc> can be: HILO, LOHI, HILO_BOM, LOHI_BOM\n");
59 printf(" -t <terminator> Line terminator\n");
60 printf(" <terminator> can be CR, LF, CR_LF, LF_CR\n");
63 int update_header(char* encoding)
65 struct header* head = NULL;
67 char* long_note = "This note is for testing the continuation stuff\n"
68 "Some Specials: This line is very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long but too long (255 caharcters is the limit), so this is going over the border\n"
69 "And now we have an at character: @, which should be doubled";
71 head = gom_get_header();
76 value = gom_set_string(&head->charset.name, encoding);
77 if (value == NULL || strcmp(value, encoding))
82 value = gom_set_string(&head->note, long_note);
83 if (value == NULL || strcmp(value, long_note))
90 int main(int argc, char* argv[])
93 int total_conv_fails = 0;
94 char* outfilename = NULL;
95 char* infilename = NULL;
96 char* gedfilename = WRITE_GEDCOM;
97 char* encoding = "ASCII";
98 Encoding enc = ONE_BYTE;
99 Enc_bom bom = WITHOUT_BOM;
100 Enc_line_end end = END_LF;
104 for (i=1; i<argc; i++) {
105 if (!strncmp(argv[i], "-h", 3)) {
109 else if (!strncmp(argv[i], "-q", 3)) {
112 else if (!strncmp(argv[i], "-o", 3)) {
115 outfilename = argv[i];
118 printf ("Missing output file name\n");
123 else if (!strncmp(argv[i], "-w", 3)) {
126 gedfilename = argv[i];
129 printf ("Missing output file name\n");
134 else if (!strncmp(argv[i], "-i", 3)) {
137 infilename = argv[i];
140 printf ("Missing input file name\n");
145 else if (!strncmp(argv[i], "-e", 3)) {
151 printf ("Missing encoding\n");
156 else if (!strncmp(argv[i], "-u", 3)) {
159 char* details = argv[i];
160 if (!strncmp(details, "HILO", 4))
162 else if (!strncmp(details, "LOHI", 4))
165 printf("Unknown encoding details %s\n", details);
169 if (!strncmp(details+5, "BOM", 4))
173 printf ("Missing encoding details\n");
178 else if (!strncmp(argv[i], "-t", 3)) {
181 char* term = argv[i];
182 if (!strncmp(term, "CR", 3))
184 else if (!strncmp(term, "LF", 3))
186 else if (!strncmp(term, "CR_LF", 6))
188 else if (!strncmp(term, "LF_CR", 6))
191 printf("Unknown terminator: %s\n", term);
197 printf ("Missing terminator\n");
203 printf ("Unrecognized option: %s\n", argv[i]);
211 setlocale(LC_ALL, "");
212 gedcom_set_message_handler(gedcom_message_handler);
213 gedcom_write_set_encoding(encoding, enc, bom);
214 gedcom_write_set_line_terminator(end);
216 output_open(outfilename);
219 result = gom_parse_file(infilename);
222 result = gom_new_model();
224 result |= update_header(encoding);
227 result |= gom_write_file(gedfilename, &total_conv_fails);
228 if (result == 0 && total_conv_fails == 0) {
229 output(1, "Test succeeded\n");
232 output(1, "Test failed: %d\n", result);