X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fheader.c;h=122c780d30dc2dcb23ee169f7910914011090288;hb=08936924a7a4b1541ee5f9778cae6bffef1767b3;hp=69fb4dff4c33bc9a0a1070f96bbdc495a2f72714;hpb=5b045164f4a11b1f4d709820e784e1ca77b61b3f;p=gedcom-parse.git diff --git a/gom/header.c b/gom/header.c index 69fb4df..122c780 100644 --- a/gom/header.c +++ b/gom/header.c @@ -21,6 +21,7 @@ /* $Id$ */ /* $Name$ */ +#include #include "header.h" #include "submission.h" #include "submitter.h" @@ -61,26 +62,8 @@ STRING_CB(header, head_lang_start, language) NULL_CB(header, head_plac_start) STRING_CB(header, head_plac_form_start, place_hierarchy) NULL_CB(header, head_note_start) /* the end callback will fill the value */ +STRING_END_CB(header, head_note_end, note) -void head_note_end(_ELT_END_PARAMS_) -{ - Gom_ctxt ctxt = (Gom_ctxt)self; - - if (! ctxt) - NO_CONTEXT; - else { - struct header *head = SAFE_CTXT_CAST(header, ctxt); - if (head) { - char *str = GEDCOM_STRING(parsed_value); - char *newvalue = strdup(str); - if (! newvalue) - MEMORY_ERROR; - else - head->note = newvalue; - } - } -} - void header_add_address(Gom_ctxt ctxt, struct address* addr) { struct header *head = SAFE_CTXT_CAST(header, ctxt); @@ -181,75 +164,108 @@ struct header* gom_get_header() return &gom_header; } +int gom_header_update_timestamp(time_t t) +{ + int result = 0; + struct tm *tm_ptr = localtime(&t); + result |= update_date(&gom_header.date, tm_ptr); + result |= update_time(&gom_header.time, tm_ptr); + return result; +} + int write_header(Gedcom_write_hndl hndl) { int result = 0; + int i; - result |= gedcom_write_record_str(hndl, REC_HEAD, NULL, NULL, NULL); + result |= gedcom_write_record_str(hndl, REC_HEAD, NULL, NULL); + if (gom_header.charset.name) + result |= gedcom_write_element_str(hndl, ELT_HEAD_CHAR, 0, REC_HEAD, + gom_header.charset.name); + if (gom_header.charset.version) + result |= gedcom_write_element_str(hndl, ELT_HEAD_CHAR_VERS, 0, + ELT_HEAD_CHAR, + gom_header.charset.version); if (gom_header.source.id) - result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR, NULL, REC_HEAD, + result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR, 0, REC_HEAD, gom_header.source.id); if (gom_header.source.name) - result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_NAME, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_NAME, 0, ELT_HEAD_SOUR, gom_header.source.name); if (gom_header.source.version) - result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_VERS, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_VERS, 0, ELT_HEAD_SOUR, gom_header.source.version); if (gom_header.source.corporation.name) - result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_CORP, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_CORP, 0, ELT_HEAD_SOUR, gom_header.source.corporation.name); + if (gom_header.source.corporation.address) + result |= write_address(hndl, ELT_HEAD_SOUR_CORP, + gom_header.source.corporation.address); + for (i = 0; i < 3 && gom_header.source.corporation.phone[i]; i++) + result |= gedcom_write_element_str(hndl, ELT_SUB_PHON, 0, ELT_HEAD_SOUR_CORP, + gom_header.source.corporation.phone[i]); if (gom_header.source.data.name) - result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_DATA, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_DATA, 0, ELT_HEAD_SOUR, gom_header.source.data.name); + if (gom_header.source.data.date) + result |= gedcom_write_element_date(hndl, ELT_HEAD_SOUR_DATA_DATE, 0, + ELT_HEAD_SOUR_DATA, + gom_header.source.data.date); if (gom_header.source.data.copyright) - result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_DATA_COPR, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_SOUR_DATA_COPR, 0, ELT_HEAD_SOUR_DATA, gom_header.source.data.copyright); if (gom_header.destination) - result |= gedcom_write_element_str(hndl, ELT_HEAD_DEST, NULL, REC_HEAD, + result |= gedcom_write_element_str(hndl, ELT_HEAD_DEST, 0, REC_HEAD, gom_header.destination); + if (gom_header.date) + result |= gedcom_write_element_date(hndl, ELT_HEAD_DATE, 0, REC_HEAD, + gom_header.date); + if (gom_header.time) + result |= gedcom_write_element_str(hndl, ELT_HEAD_DATE_TIME, 0, + ELT_HEAD_DATE, gom_header.time); + if (gom_header.submitter) + result |= gedcom_write_element_xref(hndl, ELT_HEAD_SUBM, 0, REC_HEAD, + gom_header.submitter); + if (gom_header.submission) + result |= gedcom_write_element_xref(hndl, ELT_HEAD_SUBN, 0, REC_HEAD, + gom_header.submission); if (gom_header.filename) - result |= gedcom_write_element_str(hndl, ELT_HEAD_FILE, NULL, REC_HEAD, + result |= gedcom_write_element_str(hndl, ELT_HEAD_FILE, 0, REC_HEAD, gom_header.filename); if (gom_header.copyright) - result |= gedcom_write_element_str(hndl, ELT_HEAD_COPR, NULL, REC_HEAD, + result |= gedcom_write_element_str(hndl, ELT_HEAD_COPR, 0, REC_HEAD, gom_header.copyright); - result |= gedcom_write_element_str(hndl, ELT_HEAD_GEDC, NULL, REC_HEAD, + result |= gedcom_write_element_str(hndl, ELT_HEAD_GEDC, 0, REC_HEAD, NULL); if (gom_header.gedcom.version) - result |= gedcom_write_element_str(hndl, ELT_HEAD_GEDC_VERS, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_GEDC_VERS, 0, ELT_HEAD_GEDC, gom_header.gedcom.version); if (gom_header.gedcom.form) - result |= gedcom_write_element_str(hndl, ELT_HEAD_GEDC_FORM, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_GEDC_FORM, 0, ELT_HEAD_GEDC, gom_header.gedcom.form); - if (gom_header.charset.name) - result |= gedcom_write_element_str(hndl, ELT_HEAD_CHAR, NULL, - REC_HEAD, - gom_header.charset.name); - if (gom_header.charset.version) - result |= gedcom_write_element_str(hndl, ELT_HEAD_CHAR_VERS, NULL, - ELT_HEAD_CHAR, - gom_header.charset.version); if (gom_header.language) - result |= gedcom_write_element_str(hndl, ELT_HEAD_LANG, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_LANG, 0, REC_HEAD, gom_header.language); if (gom_header.place_hierarchy) { - result |= gedcom_write_element_str(hndl, ELT_HEAD_PLAC, NULL, REC_HEAD, + result |= gedcom_write_element_str(hndl, ELT_HEAD_PLAC, 0, REC_HEAD, NULL); - result |= gedcom_write_element_str(hndl, ELT_HEAD_PLAC_FORM, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_PLAC_FORM, 0, ELT_HEAD_PLAC, gom_header.place_hierarchy); } if (gom_header.note) - result |= gedcom_write_element_str(hndl, ELT_HEAD_NOTE, NULL, + result |= gedcom_write_element_str(hndl, ELT_HEAD_NOTE, 0, REC_HEAD, gom_header.note); + if (gom_header.extra) + result |= write_user_data(hndl, gom_header.extra); return result; }