1 /*
2    Copyright (c) 1991-1999 Thomas T. Wetmore IV
3 
4    Permission is hereby granted, free of charge, to any person
5    obtaining a copy of this software and associated documentation
6    files (the "Software"), to deal in the Software without
7    restriction, including without limitation the rights to use, copy,
8    modify, merge, publish, distribute, sublicense, and/or sell copies
9    of the Software, and to permit persons to whom the Software is
10    furnished to do so, subject to the following conditions:
11 
12    The above copyright notice and this permission notice shall be
13    included in all copies or substantial portions of the Software.
14 
15    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22    SOFTWARE.
23 */
24 /* modified 05 Jan 2000 by Paul B. McBride (pmcbride@tiac.net) */
25 /*=============================================================
26  * gedcom.h -- Main header file of LifeLines system
27  * Copyright(c) 1992-96 by T.T. Wetmore IV; all rights reserved
28  * pre-SourceForge version information:
29  *   2.3.4 - 24 Jun 93    2.3.5 - 02 Sep 93
30  *   3.0.0 - 23 Sep 94    3.0.2 - 09 Dec 94
31  *   3.0.3 - 17 Jan 96
32  *===========================================================*/
33 
34 #ifndef _GEDCOM_H
35 #define _GEDCOM_H
36 
37 #include "table.h"
38 #include "translat.h"
39 
40 #ifndef INCLUDED_UIPROMPTS_H
41 #include "uiprompts.h"
42 #endif
43 
44 #define NAMESEP '/'
45 #define MAXGEDNAMELEN 512
46 /* keys run up to 9,999,999, eg I9999999 */
47 /* These are GEDCOM identifier numbers, eg, for @I510@,
48  the key is 510 */
49 /* btree databases use this as part of the database key */
50 #define MAXKEYWIDTH 8
51 #define MAXKEYNUMBER 9999999
52 
53 #define OKAY  1
54 #define ERROR 0
55 #define DONE -1
56 
57 /*=====================================
58  * NODE -- Internal form of GEDCOM line
59  *===================================*/
60 /*
61  A NODE is a struct ntag which holds the in-memory
62  representation of one line of a GEDCOM record.
63  For example, a NODE may hold the in-memory representation
64  of the GEDCOM line "2 DATE ABT 1900". The NODE actually contains
65  the "DATE" part of the string in its n_tag field, and
66  the "ABT 1900" portion of the string in its n_val field.
67  The level is not explicitly given, but is implicit in the
68  NODEs location in the NODE tree in which it lives (it has
69  fields n_parent, n_child, n_sibling which connect it into
70  its NODE tree). (E.g., its parent might be a NODE representing
71  "1 BIRT".)
72 */
73 typedef struct tag_cacheel *CACHEEL;
74 typedef struct tag_node *NODE;
75 struct tag_node {
76 	/* a NODE is an OBJECT */
77 	struct tag_vtable * vtable; /* generic object table (see vtable.h) */
78 	int    n_refcnt;    /* refcount for temp nodes */
79 	STRING n_xref;      /* cross ref */
80 	STRING n_tag;       /* tag */
81 	STRING n_val;       /* value */
82 	NODE   n_parent;    /* parent */
83 	NODE   n_child;     /* first child */
84 	NODE   n_sibling;   /* sibling */
85 	INT    n_flag;      /* eg, ND_TEMP */
86 	CACHEEL n_cel;      /* pointer to cacheel, if node is inside cache */
87 };
88 #define nxref(n)    ((n)->n_xref)
89 #define ntag(n)     ((n)->n_tag)
90 #define nval(n)     ((n)->n_val)
91 #define nparent(n)  ((n)->n_parent)
92 #define nchild(n)   ((n)->n_child)
93 #define nsibling(n) ((n)->n_sibling)
94 #define nflag(n)    ((n)->n_flag)
95 #define nrefcnt(n)  ((n)->n_refcnt)
96 #define ncel(n)     ((n)->n_cel)
97 enum { ND_TEMP=1 };
98 
99 struct tag_nkey { char ntype; INT keynum; char key[MAXKEYWIDTH+1]; };
100 typedef struct tag_nkey NKEY;
101 
102 /*=====================================
103  * RECORD -- Internal form of GEDCOM record
104  *===================================*/
105 /*
106  A RECORD is a struct record_s which holds the in-memory representation
107  of an entire GEDCOM record, such as an INDI. It has a pointer to the
108  root NODE of the INDI (which is of course a NODE representing a line
109  such as "0 @I43@ INDI"), and it also contains some additional data.
110  A RECORD will in the future contain a pointer to its cache element.
111  LifeLines is very RECORD-oriented.
112 */
113 
114 typedef struct tag_record *RECORD;
115 
116 NODE nztop(RECORD rec); /* handles NULL, also reloads from cache */
117 CNSTRING nzkey(RECORD rec);
118 INT nzkeynum(RECORD rec);
119 char nztype(RECORD rec);
120 CACHEEL nzcel(RECORD rec);
121 
122 /*============================================
123  * Traversal function pointer typedefs
124  *==========================================*/
125 typedef BOOLEAN(*TRAV_RAWRECORDS_FUNC)(CNSTRING key, STRING data, INT len, void *param);
126 #define TRAV_RAWRECORDS_FUNC_ARGS(zkey,zdata,zlen,zparam) CNSTRING zkey, STRING zdata, INT zlen, void *zparam
127 
128 typedef BOOLEAN(*TRAV_RECORDS_FUNC)(CNSTRING key, RECORD rec, void *param);
129 #define TRAV_RECORDS_FUNC_ARGS(zkey,zrec,zparam) CNSTRING zkey, RECORD zrec, void *zparam
130 
131 typedef BOOLEAN(*TRAV_NAMES_FUNC)(CNSTRING key, CNSTRING name, BOOLEAN newset, void *param);
132 #define TRAV_NAMES_FUNC_ARGS(zkey,zname,znewset,zparam) CNSTRING zkey, CNSTRING zname, BOOLEAN znewset, void *zparam
133 
134 typedef BOOLEAN(*TRAV_REFNS_FUNC)(CNSTRING key, CNSTRING refn, BOOLEAN newset, void *param);
135 #define TRAV_REFNS_FUNC_ARGS(zkey,zrefn,znewset,zparam) CNSTRING zkey, CNSTRING zrefn, BOOLEAN znewset, void *zparam
136 
137 /*=====================================
138  * LLDATABASE types -- LifeLines database
139  *===================================*/
140 
141 typedef struct tag_lldatabase *LLDATABASE;
142 
143 /*
144  reformating functions - format date or place for display
145  callbacks to GUI client to tailor display as desired
146  either or both may be null, meaning use date or place exactly as
147  occurs in data
148 */
149 struct tag_rfmt {
150 	STRING (*rfmt_date)(STRING); /* returns static buffer */
151 	STRING (*rfmt_plac)(STRING); /* returns static buffer */
152 	STRING combopic; /* stdalloc'd buffer, eg, "%1, %2" */
153 };
154 typedef struct tag_rfmt *RFMT;
155 
156 
157 /*==============================================
158  * Option type enumerations (but we use defines)
159  *============================================*/
160 
161 #define SEX_MALE    1
162 #define SEX_FEMALE  2
163 #define SEX_UNKNOWN 3
164 
165 
166 /* custom translation tables */
167 	/* MEDIN: translate editor characters to internal */
168 #define MEDIN 0
169 	/* MINED: translate internal characters to editor */
170 #define MINED 1
171 	/* MGDIN: translate gedcom file characters to internal */
172 #define MGDIN 2
173 	/* MGDIN: translate internal characters to gedcom file */
174 #define MINGD 3
175 	/* MDSIN: translate display characters to internal */
176 #define MDSIN 4
177 	/* MINDS: translate internal characters to display */
178 #define MINDS 5
179 	/* MRPIN: translate report to internal characters */
180 #define MRPIN 6
181 	/* MINRP: translate internal characters to report */
182 #define MINRP 7
183 	/* MSORT: custom sort table, characters to numeric order */
184 #define MSORT 8
185 	/* MCHAR: character table (translation result unused) */
186 #define MCHAR 9
187 	/* MLCAS: translate character to lower-case (UNIMPLEMENTED) */
188 #define MLCAS 10
189 	/* MUCAS: translate character to upper-case (UNIMPLEMENTED) */
190 #define MUCAS 11
191 	/* MPREF: prefix to skip for sorting (UNIMPLEMENTED) */
192 #define MPREF 12
193 	/* number of maps listed above */
194 #define NUM_TT_MAPS 13
195 
196 /*========
197  * Globals
198  *======*/
199 
200 extern INT flineno;
201 extern BOOLEAN keyflag;
202 extern BOOLEAN readonly;
203 extern BOOLEAN immutable;
204 extern STRING editstr;
205 extern STRING editfile;
206 /* tabtable & placabbvs should be moved into LLDATABASE */
207 extern TABLE tagtable;		/* table for GEDCOM tags */
208 extern TABLE placabbvs;		/* table for place abbrvs */
209 extern LLDATABASE def_lldb;        /* default database */
210 
211 
212 /*=====================
213  * enums for functions
214  *===================*/
215 typedef enum { DOSURCAP, NOSURCAP } SURCAPTYPE;
216 typedef enum { SURFIRST, REGORDER } SURORDER;
217 
218 /*=====================
219  * Function definitions
220  *===================*/
221 
222 STRING addat(STRING);
223 void addixref(INT key);
224 void addexref(INT key);
225 void addfxref(INT key);
226 void addref_record(RECORD rec);
227 void addsxref(INT key);
228 void addxref(CNSTRING key);
229 void addxxref(INT key);
230 BOOLEAN add_refn(CNSTRING refn, CNSTRING key);
231 BOOLEAN are_locales_supported(void);
232 void change_node_tag(NODE node, STRING newtag);
233 RECORD choose_child(RECORD irec, RECORD frec, STRING msg0, STRING msgn, ASK1Q ask1);
234 void choose_and_remove_family(void);
235 RECORD choose_father(RECORD irec, RECORD frec, STRING msg0, STRING msgn, ASK1Q ask1);
236 RECORD choose_family(RECORD irec, STRING msg0, STRING msgn, BOOLEAN fams);
237 RECORD choose_mother(RECORD indi, RECORD fam, STRING msg0, STRING msgn, ASK1Q ask1);
238 RECORD choose_note(RECORD current, STRING msg0, STRING msgn);
239 RECORD choose_pointer(RECORD current, STRING msg0, STRING msgn);
240 RECORD choose_source(RECORD current, STRING msg0, STRING msgn);
241 RECORD choose_spouse(RECORD irec, STRING msg0, STRING msgn);
242 void classify_nodes(NODE*, NODE*, NODE*);
243 void closexref(void);
244 void close_lifelines(void);
245 NODE convert_first_fp_to_node(FILE*, BOOLEAN, XLAT, STRING*, BOOLEAN*);
246 NODE copy_node(NODE);
247 NODE copy_node_subtree(NODE node);
248 NODE copy_nodes(NODE node, BOOLEAN kids, BOOLEAN sibs);
249 BOOLEAN create_database(STRING dbused, INT *lldberr);
250 NODE create_node(STRING, STRING, STRING, NODE);
251 NODE create_temp_node(STRING, STRING, STRING, NODE);
252 void delete_metarec(STRING key);
253 BOOLEAN edit_mapping(INT);
254 BOOLEAN edit_valtab_from_db(STRING, TABLE*, INT sep, STRING, STRING (*validator)(TABLE tab, void * param), void *param);
255 BOOLEAN equal_tree(NODE, NODE);
256 BOOLEAN equal_node(NODE, NODE);
257 BOOLEAN equal_nodes(NODE, NODE, BOOLEAN, BOOLEAN);
258 void even_to_cache(NODE);
259 void even_to_dbase(NODE);
260 STRING even_to_list_string(NODE even, INT len, STRING delim);
261 STRING event_to_date(NODE, BOOLEAN);
262 void event_to_date_place(NODE node, STRING * date, STRING * plac);
263 STRING event_to_plac(NODE, BOOLEAN);
264 STRING event_to_string(NODE, RFMT rfmt);
265 void fam_to_cache(NODE);
266 void fam_to_dbase(NODE);
267 STRING fam_to_event(NODE, STRING tag, STRING head, INT len, RFMT);
268 NODE fam_to_first_chil(NODE);
269 NODE fam_to_last_chil(NODE);
270 STRING fam_to_list_string(NODE fam, INT len, STRING delim);
271 NODE fam_to_spouse(NODE, NODE);
272 int next_spouse(NODE *node, RECORD *spouse);
273 RECORD file_to_record(STRING fname, XLAT ttm, STRING *pmsg, BOOLEAN *pemp);
274 NODE file_to_node(STRING, XLAT, STRING*, BOOLEAN*);
275 INT file_to_line(FILE*, XLAT, INT*, STRING*, STRING*, STRING*, STRING*);
276 NODE find_node(NODE, STRING, STRING, NODE*);
277 NODE find_tag(NODE, CNSTRING);
278 void free_node(NODE);
279 void free_nodes(NODE);
280 void free_temp_node_tree(NODE);
281 STRING full_value(NODE, STRING sep);
282 ZSTR get_cache_stats_fam(void);
283 ZSTR get_cache_stats_indi(void);
284 STRING get_current_locale_collate(void);
285 STRING get_current_locale_msgs(void);
286 INT get_decimal(STRING);
287 INT get_hexidecimal(STRING);
288 STRING get_lifelines_version(INT maxlen);
289 STRING get_original_locale_collate(void);
290 STRING get_original_locale_msgs(void);
291 STRING get_property(STRING opt);
292 void get_refns(STRING, INT*, STRING**, INT);
293 STRING getexref(void);
294 STRING getfxref(void);
295 INT getixrefnum(void);
296 STRING getsxref(void);
297 STRING getxxref(void);
298 BOOLEAN getrefnrec(CNSTRING refn);
299 void growexrefs(void);
300 void growfxrefs(void);
301 void growixrefs(void);
302 void growsxrefs(void);
303 void growxxrefs(void);
304 INT hexvalue(INT);
305 void index_by_refn(NODE, STRING);
306 void indi_to_dbase(NODE);
307 STRING indi_to_event(NODE, STRING tag, STRING head, INT len, RFMT);
308 NODE indi_to_famc(NODE);
309 NODE indi_to_fath(NODE);
310 NODE indi_to_moth(NODE);
311 STRING indi_to_name(NODE, INT);
312 RECORD indi_to_next_sib(RECORD);
313 NODE indi_to_next_sib_old(NODE);
314 STRING indi_to_ped_fix(NODE indi, INT len);
315 RECORD indi_to_prev_sib(RECORD);
316 NODE indi_to_prev_sib_old(NODE);
317 STRING indi_to_title(NODE, INT);
318 void initxref(void);
319 void init_browse_lists(void);
320 void init_caches(void);
321 void free_caches(void);
322 void init_disp_reformat(void);
323 BOOLEAN init_lifelines_postdb(void);
324 BOOLEAN init_lifelines_global(STRING configfile, STRING * pmsg, void (*notify)(STRING db, BOOLEAN opening));
325 CNSTRING init_get_config_file(void);
326 void init_new_record(RECORD rec, CNSTRING key);
327 BOOLEAN init_valtab_from_file(STRING, TABLE, XLAT, INT sep, STRING*);
328 BOOLEAN init_valtab_from_rec(CNSTRING, TABLE, INT sep, STRING*);
329 BOOLEAN init_valtab_from_string(CNSTRING, TABLE, INT sep, STRING*);
330 BOOLEAN is_codeset_utf8(CNSTRING codeset);
331 BOOLEAN is_iconv_supported(void);
332 BOOLEAN is_nls_supported(void);
333 BOOLEAN is_record_missing_data_entry(CNSTRING key);
334 BOOLEAN is_temp_node(NODE);
335 BOOLEAN iso_list(NODE, NODE);
336 BOOLEAN iso_nodes(NODE, NODE, BOOLEAN, BOOLEAN);
337 void join_fam(NODE, NODE, NODE, NODE, NODE, NODE);
338 void join_indi(NODE, NODE, NODE, NODE, NODE, NODE, NODE);
339 void join_othr(NODE root, NODE refn, NODE rest);
340 STRING key_of_record(NODE);
341 RECORD key_possible_to_record(STRING, INT let);
342 NODE key_to_even(CNSTRING);
343 RECORD key_to_erecord(CNSTRING);
344 NODE key_to_fam(CNSTRING);
345 RECORD key_to_frecord(CNSTRING);
346 NODE key_to_indi(CNSTRING);
347 RECORD key_to_irecord(CNSTRING);
348 RECORD key_to_orecord(CNSTRING);
349 NODE key_to_othr(CNSTRING);
350 RECORD key_to_record(CNSTRING key);
351 NODE key_to_sour(CNSTRING);
352 RECORD key_to_srecord(CNSTRING);
353 NODE key_to_type(CNSTRING key, INT reportmode);
354 NODE keynum_to_fam(int keynum);
355 RECORD keynum_to_erecord(int keynum);
356 RECORD keynum_to_frecord(int keynum);
357 NODE keynum_to_indi(int keynum);
358 RECORD keynum_to_irecord(int keynum);
359 NODE keynum_to_node(char ntype, int keynum);
360 RECORD keynum_to_orecord(int keynum);
361 RECORD keynum_to_record(char ntype, int keynum);
362 RECORD keynum_to_srecord(int keynum);
363 NODE keynum_to_sour(int keynum);
364 NODE keynum_to_even(int keynum);
365 NODE keynum_to_othr(int keynum);
366 INT length_nodes(NODE);
367 STRING ll_langinfo(void);
368 char * llsetlocale(int category, char * locale);
369 void load_char_mappings(void);
370 BOOLEAN load_new_tt(CNSTRING filepath, INT ttnum);
371 void locales_notify_language_change(void);
372 void locales_notify_uicodeset_changes(void);
373 STRING newexref(STRING, BOOLEAN);
374 STRING newfxref(STRING, BOOLEAN);
375 STRING newixref(STRING, BOOLEAN);
376 STRING newsxref(STRING, BOOLEAN);
377 STRING newxxref(STRING, BOOLEAN);
378 void new_name_browse_list(STRING, STRING);
379 RECORD next_fp_to_record(FILE*, BOOLEAN, XLAT, STRING*, BOOLEAN*);
380 NODE next_fp_to_node(FILE*, BOOLEAN, XLAT, STRING*, BOOLEAN*);
381 void nkey_copy(NKEY * src, NKEY * dest);
382 BOOLEAN nkey_eq(NKEY * nkey1, NKEY * nkey2);
383 void nkey_clear(NKEY * nkey);
384 void nkey_load_key(NKEY * nkey);
385 BOOLEAN nkey_to_node(NKEY * nkey, NODE * node);
386 BOOLEAN nkey_to_record(NKEY * nkey, RECORD * prec);
387 NKEY nkey_zero(void);
388 void node_to_dbase(NODE, STRING);
389 BOOLEAN node_to_file(INT, NODE, STRING, BOOLEAN, TRANTABLE);
390 INT node_to_keynum(char ntype, NODE nod);
391 NODE node_to_next_event(NODE node, CNSTRING tag);
392 BOOLEAN node_to_nkey(NODE node, NKEY * nkey);
393 NODE node_to_node(NODE, INT*);
394 RECORD node_to_record(NODE node);
395 STRING node_to_tag(NODE node, STRING tag, INT len);
396 void normalize_fam(NODE fam);
397 void normalize_irec(RECORD irec);
398 void normalize_indi(NODE indi);
399 void normalize_rec(RECORD rec);
400 INT num_evens(void);
401 INT num_fam_xrefs(NODE fam);
402 INT num_fams(void);
403 INT num_indis(void);
404 INT num_spouses_of_indi(NODE);
405 INT num_sours(void);
406 INT num_othrs(void);
407 BOOLEAN open_database(INT alteration, STRING dbused, INT *lldberr);
408 BOOLEAN openxref(BOOLEAN readonly);
409 STRING other_to_list_string(NODE node, INT len, STRING delim);
410 void othr_to_cache(NODE);
411 void othr_to_dbase(NODE);
412 BOOLEAN pointer_value(STRING);
413 NODE qkey_to_even(CNSTRING key);
414 RECORD qkey_to_erecord(CNSTRING key);
415 NODE qkey_to_fam(CNSTRING key);
416 RECORD qkey_to_frecord(CNSTRING key);
417 NODE qkey_to_indi(CNSTRING key);
418 RECORD qkey_to_irecord(CNSTRING key);
419 RECORD qkey_to_orecord(CNSTRING key);
420 NODE qkey_to_othr(CNSTRING key);
421 RECORD qkey_to_record(CNSTRING key);
422 NODE qkey_to_sour(CNSTRING key);
423 RECORD qkey_to_srecord(CNSTRING key);
424 NODE qkey_to_type(CNSTRING key);
425 RECORD qkeynum_to_frecord(int keynum);
426 NODE qkeynum_to_indi(int keynum);
427 INT record_letter(CNSTRING);
428 void record_to_date_place(RECORD record, STRING tag, STRING * date, STRING * plac, INT * count);
429 NODE record_to_first_event(RECORD record, CNSTRING tag);
430 NODE refn_to_record(STRING, INT);
431 void register_uicodeset_callback(CALLBACK_FNC fncptr, VPTR uparm);
432 void register_uilang_callback(CALLBACK_FNC fncptr, VPTR uparm);
433 void release_record(RECORD rec);
434 BOOLEAN remove_child(NODE indi, NODE fam);
435 BOOLEAN remove_empty_fam(NODE);
436 BOOLEAN remove_any_record(RECORD record);
437 void remove_indi_by_root(NODE);
438 void remove_indi_cache(STRING key);
439 void remove_fam_cache(STRING key);
440 void remove_from_cache_by_key(CNSTRING key);
441 BOOLEAN remove_fam_record(RECORD frec);
442 void remove_from_browse_lists(STRING);
443 BOOLEAN remove_refn(CNSTRING refn, CNSTRING key);
444 void rename_from_browse_lists(STRING);
445 BOOLEAN remove_spouse(NODE indi, NODE fam);
446 void replace_fam(NODE fam1, NODE fam2);
447 void replace_indi(NODE indi1, NODE indi2);
448 INT resolve_refn_links(NODE);
449 RECORD_STATUS retrieve_to_file(STRING key, STRING file);
450 RECORD_STATUS retrieve_to_textfile(STRING key, STRING file, TRANSLFNC);
451 STRING retrieve_raw_record(CNSTRING, INT*);
452 STRING rmvat(CNSTRING);
453 STRING rmvbrackets(CNSTRING str);
454 STRING rpt_setlocale(STRING str);
455 void rptlocale(void);
456 void save_original_locales(void);
457 BOOLEAN save_tt_to_file(INT ttnum, STRING filename);
458 void set_displaykeys(BOOLEAN);
459 void set_temp_node(NODE, BOOLEAN temp);
460 STRING shorten_plac(STRING);
461 void show_node(NODE node);
462 void show_node_rec(INT, NODE);
463 void sour_to_cache(NODE);
464 void sour_to_dbase(NODE);
465 STRING sour_to_list_string(NODE sour, INT len, STRING delim);
466 void split_fam(NODE, NODE*, NODE*, NODE*, NODE*, NODE*);
467 void split_indi_old(NODE, NODE*, NODE*, NODE*, NODE*, NODE*, NODE*);
468 void split_othr(NODE node, NODE *prefn, NODE *prest);
469 BOOLEAN store_file_to_db(STRING key, STRING file);
470 BOOLEAN store_record(CNSTRING key, STRING rec, INT len);
471 RECORD string_to_record(STRING str, CNSTRING key, INT len);
472 void termlocale(void);
473 BOOLEAN traverse_nodes(NODE node, BOOLEAN (*func)(NODE, VPTR), VPTR param);
474 void traverse_refns(TRAV_REFNS_FUNC func, void *param);
475 INT tree_strlen(INT, NODE);
476 void uilocale(void);
477 NODE union_nodes(NODE, NODE, BOOLEAN, BOOLEAN);
478 NODE unique_nodes(NODE, BOOLEAN);
479 void unknown_node_to_dbase(NODE node);
480 void unregister_uilang_callback(CALLBACK_FNC fncptr, VPTR uparm);
481 void unregister_uicodeset_callback(CALLBACK_FNC fncptr, VPTR uparm);
482 void update_useropts(VPTR uparm);
483 BOOLEAN valid_indi_tree(NODE, STRING*, NODE);
484 BOOLEAN valid_fam_tree(NODE, STRING*, NODE);
485 BOOLEAN valid_name(STRING);
486 BOOLEAN valid_node_type(NODE node, char ntype, STRING *pmsg, NODE node0);
487 BOOLEAN valid_sour_tree(NODE, STRING*, NODE);
488 BOOLEAN valid_to_list(STRING, LIST, INT*, STRING);
489 BOOLEAN valid_even_tree(NODE, STRING*, NODE);
490 BOOLEAN valid_othr_tree(NODE, STRING*, NODE);
491 INT val_to_sex(NODE);
492 STRING value_to_xref(STRING);
493 BOOLEAN writexrefs(void);
494 void write_node_to_editfile(NODE); /* used by Ethel */
495 
496 /* dblist.c */
497 INT get_dblist(STRING path, LIST * dblist, LIST * dbdesclist);
498 void release_dblist(LIST dblist);
499 
500 /* interface.c */
501 void del_in_dbase(CNSTRING key);
502 void delete_record_missing_data_entry(CNSTRING key);
503 BOOLEAN mark_deleted_record_as_deleted(CNSTRING key);
504 BOOLEAN mark_live_record_as_live(CNSTRING key);
505 BOOLEAN store_text_file_to_db(STRING key, CNSTRING file, TRANSLFNC);
506 void traverse_db_key_recs(TRAV_RECORDS_FUNC, void *param);
507 void traverse_db_rec_keys(CNSTRING lo, CNSTRING hi, TRAV_RAWRECORDS_FUNC func, void *param);
508 
509 /* keytonod.c */
510 void add_new_indi_to_cache(RECORD rec);
511 RECORD get_record_for_cel(CACHEEL cel);
512 
513 /* gstrings.c */
514 STRING generic_to_list_string(NODE node, STRING key, INT len, STRING delim, RFMT rfmt, BOOLEAN appkey);
515 STRING *get_child_strings(NODE, RFMT, INT*, STRING**);
516 STRING indi_to_list_string(NODE indi, NODE fam, INT len, RFMT rfmt, BOOLEAN appkey);
517 
518 /* init.c */
519 void print_version(CNSTRING program);
520 
521 /* lldatabase.c */
522 LLDATABASE lldb_alloc(void);
523 void lldb_close(LLDATABASE *plldb);
524 void lldb_set_btree(LLDATABASE lldb, void * btree);
525 
526 /* llgettext.c */
527 CNSTRING get_gettext_codeset(void);
528 void ll_bindtextdomain(CNSTRING domain, CNSTRING localeDir);
529 void llgettext_set_default_localedir(CNSTRING defLocaleDir);
530 void set_gettext_codeset(CNSTRING domain, CNSTRING codeset);
531 
532 /* misc.c */
533 INT xrefval(char ntype, STRING str);
534 
535 /* names.c */
536 void add_name(CNSTRING name, CNSTRING key);
537 LIST find_indis_by_name(CNSTRING name);
538 CNSTRING getasurname(CNSTRING);
539 CNSTRING getsxsurname(CNSTRING);
540 CNSTRING givens(CNSTRING);
541 STRING manip_name(STRING name, SURCAPTYPE captype, SURORDER surorder, INT len);
542 LIST name_to_list(CNSTRING name, INT *plen, INT *psind);
543 STRING name_string(STRING);
544 int namecmp(STRING, STRING);
545 void remove_name(STRING name, CNSTRING key);
546 void traverse_names(TRAV_NAMES_FUNC func, void *param);
547 STRING trim_name(STRING, INT);
548 
549 /* node.c */
550 /* node tree iterator */
551 struct tag_node_iter {
552 	NODE start;
553 	NODE next;
554 };
555 typedef struct tag_node_iter * NODE_ITER;
556 void begin_node_it(NODE node, NODE_ITER nodeit);
557 INT fam_to_husb(RECORD frec, RECORD * prec);
558 NODE fam_to_husb_node(NODE);
559 INT fam_to_wife(RECORD frec, RECORD * prec);
560 NODE fam_to_wife_node(NODE);
561 NODE next_node_it_ptr(NODE_ITER nodeit);
562 
563 /* nodechk.c */
564 void nodechk(NODE node, CNSTRING scope);
565 void nodechk_enable(BOOLEAN enable);
566 
567 /* nodeio.c */
568 void prefix_file_for_edit(FILE *fp);
569 void prefix_file_for_gedcom(FILE *fp);
570 void prefix_file_for_report(FILE *fp);
571 STRING node_to_string(NODE);
572 NODE string_to_node(STRING);
573 void write_indi_to_file_for_edit(NODE indi, CNSTRING file, RFMT rfmt);
574 void write_fam_to_file_for_edit(NODE fam, CNSTRING file, RFMT rfmt);
575 void write_nodes(INT, FILE*, XLAT, NODE, BOOLEAN, BOOLEAN, BOOLEAN);
576 
577 /* place.c */
578 LIST place_to_list(STRING, INT*);
579 LIST value_to_list (STRING str, INT *plen, STRING dlm);
580 
581 /* refns.c */
582 void annotate_with_supplemental(NODE node, RFMT rfmt);
583 
584 /* soundex.c */
585 CNSTRING trad_soundex(CNSTRING);
586 INT soundex_count(void);
587 CNSTRING soundex_get(INT i, CNSTRING name);
588 
589 /* xreffile.c */
590 BOOLEAN addxref_if_missing (CNSTRING key);
591 BOOLEAN delete_xref_if_present(CNSTRING key);
592 BOOLEAN is_key_in_use(CNSTRING key);
593 INT xref_firste(void);
594 INT xref_firstf(void);
595 INT xref_firsti(void);
596 INT xref_firsts(void);
597 INT xref_firstx(void);
598 INT xref_laste(void);
599 INT xref_lastf(void);
600 INT xref_lasti(void);
601 INT xref_lasts(void);
602 INT xref_lastx(void);
603 INT xref_max_any(void);
604 INT xref_max_indis(void);
605 INT xref_max_evens (void);
606 INT xref_max_fams (void);
607 INT xref_max_othrs (void);
608 INT xref_max_sours (void);
609 INT xref_next(char ntype, INT i);
610 INT xref_nexte(INT);
611 INT xref_nextf(INT);
612 INT xref_nexti(INT);
613 INT xref_nexts(INT);
614 INT xref_nextx(INT);
615 INT xref_prev(char ntype, INT i);
616 INT xref_preve(INT);
617 INT xref_prevf(INT);
618 INT xref_previ(INT);
619 INT xref_prevs(INT);
620 INT xref_prevx(INT);
621 
622 #ifndef GEDCOM_MACROS_INCLUDED
623 #include "gedcom_macros.h"
624 #endif
625 
626 #endif /* _GEDCOM_H */
627