212
226
void classify_nodes(NODE*, NODE*, NODE*);
213
227
void closexref(void);
214
228
void close_lifelines(void);
215
void close_lldb(void);
216
229
NODE convert_first_fp_to_node(FILE*, BOOLEAN, XLAT, STRING*, BOOLEAN*);
217
230
NODE copy_node(NODE);
218
NODE copy_nodes(NODE, BOOLEAN, BOOLEAN);
231
NODE copy_node_subtree(NODE node);
232
NODE copy_nodes(NODE node, BOOLEAN kids, BOOLEAN sibs);
219
233
BOOLEAN create_database(STRING dbused);
220
RECORD create_record(NODE node);
221
234
NODE create_node(STRING, STRING, STRING, NODE);
222
235
NODE create_temp_node(STRING, STRING, STRING, NODE);
223
void del_in_dbase(STRING key);
224
236
void delete_metarec(STRING key);
225
237
BOOLEAN edit_mapping(INT);
226
BOOLEAN edit_valtab_from_db(STRING, TABLE*, INT sep, STRING, STRING (*validator)(TABLE tab));
238
BOOLEAN edit_valtab_from_db(STRING, TABLE*, INT sep, STRING, STRING (*validator)(TABLE tab, void * param), void *param);
227
239
BOOLEAN equal_tree(NODE, NODE);
228
240
BOOLEAN equal_node(NODE, NODE);
229
241
BOOLEAN equal_nodes(NODE, NODE, BOOLEAN, BOOLEAN);
296
304
void init_caches(void);
297
305
void free_caches(void);
298
306
void init_disp_reformat(void);
299
BOOLEAN init_lifelines_db(void);
307
BOOLEAN init_lifelines_postdb(void);
300
308
BOOLEAN init_lifelines_global(STRING configfile, STRING * pmsg, void (*notify)(STRING db, BOOLEAN opening));
301
309
CNSTRING init_get_config_file(void);
302
void init_new_record(RECORD rec, char ntype, INT keynum);
310
void init_new_record(RECORD rec, CNSTRING key);
303
311
BOOLEAN init_valtab_from_file(STRING, TABLE, XLAT, INT sep, STRING*);
304
312
BOOLEAN init_valtab_from_rec(CNSTRING, TABLE, INT sep, STRING*);
305
313
BOOLEAN init_valtab_from_string(CNSTRING, TABLE, INT sep, STRING*);
306
BOOLEAN is_db_open(void);
307
314
BOOLEAN is_codeset_utf8(CNSTRING codeset);
308
315
BOOLEAN is_iconv_supported(void);
309
316
BOOLEAN is_nls_supported(void);
317
BOOLEAN is_record_missing_data_entry(CNSTRING key);
310
318
BOOLEAN is_temp_node(NODE);
311
319
BOOLEAN iso_list(NODE, NODE);
312
320
BOOLEAN iso_nodes(NODE, NODE, BOOLEAN, BOOLEAN);
438
451
void split_indi_old(NODE, NODE*, NODE*, NODE*, NODE*, NODE*, NODE*);
439
452
void split_othr(NODE node, NODE *prefn, NODE *prest);
440
453
BOOLEAN store_file_to_db(STRING key, STRING file);
441
BOOLEAN store_record(STRING key, STRING rec, INT len);
442
BOOLEAN store_text_file_to_db(STRING key, CNSTRING file, TRANSLFNC);
454
BOOLEAN store_record(CNSTRING key, STRING rec, INT len);
443
455
RECORD string_to_record(STRING str, CNSTRING key, INT len);
444
456
void termlocale(void);
445
void traverse_db_key_recs(BOOLEAN(*func)(CNSTRING key, RECORD, void *param), void *param);
446
void traverse_db_rec_keys(CNSTRING lo, CNSTRING hi, BOOLEAN(*func)(CNSTRING key, STRING data, INT, void *param), void * param);
447
457
BOOLEAN traverse_nodes(NODE node, BOOLEAN (*func)(NODE, VPTR), VPTR param);
448
458
void traverse_refns(BOOLEAN(*func)(CNSTRING key, CNSTRING refn, BOOLEAN newset, void *param), void *param);
449
459
INT tree_strlen(INT, NODE);
463
473
BOOLEAN valid_even_tree(NODE, STRING*, NODE);
464
474
BOOLEAN valid_othr_tree(NODE, STRING*, NODE);
465
475
INT val_to_sex(NODE);
466
BOOLEAN value_to_list(STRING, LIST, INT*, STRING);
467
476
STRING value_to_xref(STRING);
468
477
BOOLEAN writexrefs(void);
469
478
void write_node_to_editfile(NODE); /* used by Ethel */
470
INT xref_firste(void);
471
INT xref_firstf(void);
472
INT xref_firsti(void);
473
INT xref_firsts(void);
474
INT xref_firstx(void);
475
INT xref_laste(void);
476
INT xref_lastf(void);
477
INT xref_lasti(void);
478
INT xref_lasts(void);
479
INT xref_lastx(void);
480
INT xref_max_any(void);
481
INT xref_max_indis(void);
482
INT xref_max_evens (void);
483
INT xref_max_fams (void);
484
INT xref_max_othrs (void);
485
INT xref_max_sours (void);
486
INT xref_next(char ntype, INT i);
492
INT xref_prev(char ntype, INT i);
498
INT xrefval(char ntype, STRING str);
481
INT get_dblist(STRING path, LIST * dblist, LIST * dbdesclist);
482
void release_dblist(LIST dblist);
485
void del_in_dbase(CNSTRING key);
486
void delete_record_missing_data_entry(CNSTRING key);
487
BOOLEAN mark_deleted_record_as_deleted(CNSTRING key);
488
BOOLEAN mark_live_record_as_live(CNSTRING key);
489
BOOLEAN store_text_file_to_db(STRING key, CNSTRING file, TRANSLFNC);
490
void traverse_db_rec_keys(CNSTRING lo, CNSTRING hi, BOOLEAN(*func)(CNSTRING key, STRING data, INT, void *param), void * param);
491
void traverse_db_key_recs(BOOLEAN(*func)(CNSTRING key, RECORD, void *param), void *param);
494
void add_new_indi_to_cache(RECORD rec);
495
RECORD get_record_for_cel(CACHEEL cel);
501
498
STRING generic_to_list_string(NODE node, STRING key, INT len, STRING delim, RFMT rfmt, BOOLEAN appkey);
502
499
STRING *get_child_strings(NODE, RFMT, INT*, STRING**);
503
500
STRING indi_to_list_string(NODE indi, NODE fam, INT len, RFMT rfmt, BOOLEAN appkey);
503
LLDATABASE lldb_alloc(void);
504
void lldb_close(LLDATABASE *plldb);
505
void lldb_set_btree(LLDATABASE lldb, void * btree);
508
void set_gettext_codeset(CNSTRING domain, CNSTRING codeset);
509
CNSTRING get_gettext_codeset(void);
512
INT xrefval(char ntype, STRING str);
506
void add_name(STRING, STRING);
507
void free_name_list(LIST list);
508
void free_string_list(LIST list);
515
void add_name(CNSTRING name, CNSTRING key);
509
516
LIST find_indis_by_name(CNSTRING name);
510
517
CNSTRING getasurname(CNSTRING);
511
518
CNSTRING getsxsurname(CNSTRING);
512
519
CNSTRING givens(CNSTRING);
513
520
STRING manip_name(STRING name, SURCAPTYPE captype, SURORDER surorder, INT len);
514
BOOLEAN name_to_list(CNSTRING, LIST, INT*, INT*);
521
LIST name_to_list(CNSTRING name, INT *plen, INT *psind);
515
522
STRING name_string(STRING);
516
523
int namecmp(STRING, STRING);
517
void remove_name(STRING, STRING);
518
void traverse_names(BOOLEAN(*func)(STRING key, CNSTRING name, BOOLEAN newset, void *param), void *param);
524
void remove_name(STRING name, CNSTRING key);
525
void traverse_names(BOOLEAN(*func)(CNSTRING key, CNSTRING name, BOOLEAN newset, void *param), void *param);
519
526
STRING trim_name(STRING, INT);
547
562
INT soundex_count(void);
548
563
CNSTRING soundex_get(INT i, CNSTRING name);
554
#define NAME(indi) find_tag(nchild(indi),"NAME")
555
#define REFN(indi) find_tag(nchild(indi),"REFN")
556
#define SEX(indi) val_to_sex(find_tag(nchild(indi),"SEX"))
557
#define BIRT(indi) find_tag(nchild(indi),"BIRT")
558
#define DEAT(indi) find_tag(nchild(indi),"DEAT")
559
#define BAPT(indi) find_tag(nchild(indi),"CHR")
560
#define BURI(indi) find_tag(nchild(indi),"BURI")
561
#define FAMC(indi) find_tag(nchild(indi),"FAMC")
562
#define FAMS(indi) find_tag(nchild(indi),"FAMS")
564
#define HUSB(fam) find_tag(nchild(fam),"HUSB")
565
#define WIFE(fam) find_tag(nchild(fam),"WIFE")
566
#define MARR(fam) find_tag(nchild(fam),"MARR")
567
#define CHIL(fam) find_tag(nchild(fam),"CHIL")
569
#define DATE(evnt) find_tag(nchild(evnt),"DATE")
570
#define PLAC(evnt) find_tag(nchild(evnt),"PLAC")
572
/*=============================================
573
* indi_to_key, fam_to_key - return key of node
575
* returns static buffer
576
*===========================================*/
577
#define indi_to_key(indi) (rmvat(nxref(indi)))
578
#define fam_to_key(fam) (rmvat(nxref(fam)))
579
#define node_to_key(node) (rmvat(nxref(node)))
581
/*=============================================
582
* indi_to_keynum, fam_to_keynum, etc -
583
* return keynum of node, eg, 21
584
*===========================================*/
585
#define indi_to_keynum(indi) (node_to_keynum('I', indi))
586
#define fam_to_keynum(fam) (node_to_keynum('F', fam))
587
#define sour_to_keynum(sour) (node_to_keynum('S', sour))
589
/*=============================================
590
* num_families - count spouses of indi
591
*===========================================*/
592
#define num_families(indi) (length_nodes(FAMS(indi)))
594
/*=============================================
595
* num_children - count children of indi
596
*===========================================*/
597
#define num_children(fam) (length_nodes(CHIL(fam)))
600
TODO: Change all FORCHILDRENx to FORCHILDREN loops
601
This means changing use of NODE to RECORD
604
#define FORCHILDRENx(fam,child,num) \
606
NODE __node = find_tag(nchild(fam), "CHIL");\
611
__key = rmvat(nval(__node));\
612
if (!__key || !(child = key_to_indi(__key))) {\
614
__node = nsibling(__node);\
620
#define ENDCHILDRENx \
622
__node = nsibling(__node);\
623
if (__node && nestr(ntag(__node), "CHIL")) __node = NULL;\
626
#define FORCHILDREN(fam,child,num) \
628
NODE __node = find_tag(nchild(fam), "CHIL");\
633
__key = rmvat(nval(__node));\
634
if (!__key || !(child = key_to_irecord(__key))) {\
636
__node = nsibling(__node);\
642
#define ENDCHILDREN \
644
__node = nsibling(__node);\
645
if (__node && nestr(ntag(__node), "CHIL")) __node = NULL;\
648
#define FORSPOUSES(indi,spouse,fam,num) \
650
NODE __node = FAMS(indi);\
651
INT __sex = SEX(indi);\
652
NODE spouse=0,fam=0;\
656
__key = rmvat(nval(__node));\
657
if (!__key || !(fam = qkey_to_fam(__key))) {\
659
__node = nsibling(__node);\
662
if (__sex == SEX_MALE)\
663
spouse = fam_to_wife_node(fam);\
664
else if (__sex == SEX_FEMALE)\
665
spouse = fam_to_husb_node(fam);\
666
else spouse = fam_to_spouse(fam, indi);\
667
if (spouse != NULL) {\
673
__node = nsibling(__node);\
674
if (__node && nestr(ntag(__node), "FAMS")) __node = NULL;\
677
#define FORFAMSS(indi,fam,spouse,num) \
679
NODE __node = FAMS(indi);\
680
INT __sex = SEX(indi);\
681
NODE fam=0, spouse=0;\
685
__key = rmvat(nval(__node));\
686
if (!__key || !(fam = qkey_to_fam(__key))) {\
688
__node = nsibling(__node);\
691
if (__sex == SEX_MALE)\
692
spouse = fam_to_wife_node(fam);\
693
else if (__sex == SEX_FEMALE)\
694
spouse = fam_to_husb_node(fam);\
696
spouse = fam_to_spouse(fam, indi);\
702
__node = nsibling(__node);\
703
if (__node && nestr(ntag(__node), "FAMS")) __node = NULL;\
706
#define FORFAMCS(indi,fam,fath,moth,num) \
708
NODE __node = FAMC(indi);\
709
NODE fam, fath, moth;\
713
__key = rmvat(nval(__node));\
714
if (!__key || !(fam = qkey_to_fam(__key))) {\
716
__node = nsibling(__node);\
719
fath = fam_to_husb_node(fam);\
720
moth = fam_to_wife_node(fam);\
726
__node = nsibling(__node);\
727
if (__node && nestr(ntag(__node), "FAMC")) __node = NULL;\
730
#define FORHUSBS(fam,husb,num) \
732
NODE __node = find_tag(nchild(fam), "HUSB");\
737
__key = rmvat(nval(__node));\
738
if (!__key || !(husb = key_to_indi(__key))) {\
740
__node = nsibling(__node);\
748
__node = nsibling(__node);\
749
if (__node && nestr(ntag(__node), "HUSB")) __node = NULL;\
752
#define FORWIFES(fam,wife,num) \
754
NODE __node = find_tag(nchild(fam), "WIFE");\
759
__key = rmvat(nval(__node));\
760
if (!__key || !(wife = key_to_indi(__key))) {\
762
__node = nsibling(__node);\
771
__node = nsibling(__node);\
772
if (__node && nestr(ntag(__node), "WIFE")) __node = NULL;\
775
#define FORTAGVALUES(root,tag,node,value)\
777
NODE node, __node = nchild(root);\
778
STRING value, __value;\
780
while (__node && nestr(tag, ntag(__node)))\
781
__node = nsibling(__node);\
782
if (__node == NULL) break;\
783
__value = value = full_value(__node, "\n");/*OBLIGATION*/\
786
#define ENDTAGVALUES \
788
if (__value) stdfree(__value);/*RELEASE*/\
789
__node = nsibling(__node);\
566
BOOLEAN addxref_if_missing (CNSTRING key);
567
BOOLEAN delete_xref_if_present(CNSTRING key);
568
INT xref_firste(void);
569
INT xref_firstf(void);
570
INT xref_firsti(void);
571
INT xref_firsts(void);
572
INT xref_firstx(void);
573
INT xref_laste(void);
574
INT xref_lastf(void);
575
INT xref_lasti(void);
576
INT xref_lasts(void);
577
INT xref_lastx(void);
578
INT xref_max_any(void);
579
INT xref_max_indis(void);
580
INT xref_max_evens (void);
581
INT xref_max_fams (void);
582
INT xref_max_othrs (void);
583
INT xref_max_sours (void);
584
INT xref_next(char ntype, INT i);
590
INT xref_prev(char ntype, INT i);
597
#ifndef GEDCOM_MACROS_INCLUDED
598
#include "gedcom_macros.h"
792
601
#endif /* _GEDCOM_H */