1 /* Submission object in the gedcom object model.
2 Copyright (C) 2002 The Genes Development Team
3 This file is part of the Gedcom parser library.
4 Contributed by Peter Verthez <Peter.Verthez@advalvas.be>, 2002.
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
26 #include "submission.h"
27 #include "submitter.h"
31 #include "gom_internal.h"
33 struct submission* gom_submission = NULL;
35 DEFINE_REC_CB(submission, subn_start)
36 DEFINE_XREF_CB(submission, subn_subm_start, submitter, submitter)
37 DEFINE_STRING_CB(submission, subn_famf_start, family_file)
38 DEFINE_STRING_CB(submission, subn_temp_start, temple_code)
39 DEFINE_STRING_CB(submission, subn_ance_start, nr_of_ancestor_gens)
40 DEFINE_STRING_CB(submission, subn_desc_start, nr_of_descendant_gens)
41 DEFINE_STRING_CB(submission, subn_ordi_start, ordinance_process_flag)
42 DEFINE_STRING_CB(submission, subn_rin_start, record_id)
44 DEFINE_ADDFUNC2(submission, user_data, extra)
46 void submission_subscribe()
48 gedcom_subscribe_to_record(REC_SUBN, subn_start, def_rec_end);
49 gedcom_subscribe_to_element(ELT_SUBN_SUBM, subn_subm_start, def_elt_end);
50 gedcom_subscribe_to_element(ELT_SUBN_FAMF, subn_famf_start, def_elt_end);
51 gedcom_subscribe_to_element(ELT_SUBN_TEMP, subn_temp_start, def_elt_end);
52 gedcom_subscribe_to_element(ELT_SUBN_ANCE, subn_ance_start, def_elt_end);
53 gedcom_subscribe_to_element(ELT_SUBN_DESC, subn_desc_start, def_elt_end);
54 gedcom_subscribe_to_element(ELT_SUBN_ORDI, subn_ordi_start, def_elt_end);
55 gedcom_subscribe_to_element(ELT_SUBN_RIN, subn_rin_start, def_elt_end);
58 void submission_cleanup()
61 SAFE_FREE(gom_submission->xrefstr);
62 SAFE_FREE(gom_submission->family_file);
63 SAFE_FREE(gom_submission->temple_code);
64 SAFE_FREE(gom_submission->nr_of_ancestor_gens);
65 SAFE_FREE(gom_submission->nr_of_descendant_gens);
66 SAFE_FREE(gom_submission->ordinance_process_flag);
67 SAFE_FREE(gom_submission->record_id);
68 DESTROY_CHAIN_ELTS(user_data, gom_submission->extra);
69 SAFE_FREE(gom_submission);
73 struct submission* gom_get_submission()
75 return gom_submission;
78 struct submission* MAKEFUNC(submission)(const char* xref)
80 if (! gom_submission) {
81 gom_submission = (struct submission*)malloc(sizeof(struct submission));
85 memset(gom_submission, 0, sizeof(struct submission));
86 gom_submission->xrefstr = strdup(xref);
87 if (!gom_submission->xrefstr) MEMORY_ERROR;
91 return gom_submission;
94 void DESTROYFUNC(submission)()
99 gom_submission = NULL;
103 struct submission* ADDFUNC(submission)(const char* xrefstr)
105 if (!gom_submission) {
106 struct xref_value* xrv = gedcom_get_by_xref(xrefstr);
108 gom_xref_already_in_use(xrefstr);
110 gom_submission = MAKEFUNC(submission)(xrefstr);
111 if (gom_submission) {
112 xrv = gedcom_add_xref(XREF_SUBN, xrefstr, gom_submission);
114 DESTROYFUNC(submission)(gom_submission);
115 gom_submission = NULL;
119 return gom_submission;
125 int DELETEFUNC(submission)()
128 if (gom_submission) {
129 result = gedcom_delete_xref(gom_submission->xrefstr);
131 DESTROYFUNC(submission)();
136 int write_submission(Gedcom_write_hndl hndl)
140 if (gom_submission) {
141 result |= gedcom_write_record_str(hndl, REC_SUBN,
142 gom_submission->xrefstr, NULL);
143 if (gom_submission->submitter)
144 result |= gedcom_write_element_xref(hndl, ELT_SUBN_SUBM, 0,
145 REC_SUBN, gom_submission->submitter);
146 if (gom_submission->family_file)
147 result |= gedcom_write_element_str(hndl, ELT_SUBN_FAMF, 0, REC_SUBN,
148 gom_submission->family_file);
149 if (gom_submission->temple_code)
150 result |= gedcom_write_element_str(hndl, ELT_SUBN_TEMP, 0, REC_SUBN,
151 gom_submission->temple_code);
152 if (gom_submission->nr_of_ancestor_gens)
153 result |= gedcom_write_element_str(hndl, ELT_SUBN_ANCE, 0, REC_SUBN,
154 gom_submission->nr_of_ancestor_gens);
155 if (gom_submission->nr_of_descendant_gens)
156 result |= gedcom_write_element_str(hndl, ELT_SUBN_DESC, 0, REC_SUBN,
157 gom_submission->nr_of_descendant_gens);
158 if (gom_submission->ordinance_process_flag)
159 result |= gedcom_write_element_str(hndl, ELT_SUBN_ORDI, 0, REC_SUBN,
160 gom_submission->ordinance_process_flag);
161 if (gom_submission->record_id)
162 result |= gedcom_write_element_str(hndl, ELT_SUBN_RIN, 0, REC_SUBN,
163 gom_submission->record_id);
164 if (gom_submission->extra)
165 result |= write_user_data(hndl, gom_submission->extra);