mirror of
https://github.com/kennethreitz/context.git
synced 2026-06-05 23:00:17 +00:00
118 lines
2.9 KiB
LLVM
118 lines
2.9 KiB
LLVM
/*
|
|
* @progname anc2_ged.ll
|
|
* @version 1.0
|
|
* @author Dennis Nicklaus
|
|
* @category
|
|
* @output GedCom
|
|
* @description
|
|
* make a gedcom file of the ancestors of a set of individuals
|
|
*
|
|
*/
|
|
proc main ()
|
|
{
|
|
indiset(a)
|
|
monthformat(4)
|
|
indiset(b)
|
|
getindi(i)
|
|
|
|
while (i){
|
|
addtoset(a, i, 0)
|
|
set(i,0)
|
|
getindimsg(i,"Enter next person to output GEDCOM ancestors of")
|
|
}
|
|
set(b,ancestorset(a))
|
|
set(b,union(b,a))
|
|
|
|
call print_header()
|
|
gengedcom(b)
|
|
call sour_init()
|
|
call sour_addset(b)
|
|
call sour_ged()
|
|
|
|
"0 TRLR\n"
|
|
|
|
}
|
|
|
|
proc print_header()
|
|
{
|
|
"0 HEAD\n"
|
|
"1 SOUR Lifelines\n"
|
|
"1 DATE " stddate(gettoday()) nl()
|
|
"0 @SM1@ SUBM\n"
|
|
"1 NAME " getproperty("user.fullname") "\n"
|
|
"1 ADDR " getproperty("user.address") "\n"
|
|
"2 CONT " getproperty("user.email") "\n"
|
|
}
|
|
global(sour_list)
|
|
global(sour_table)
|
|
|
|
proc sour_init()
|
|
{
|
|
table(sour_table)
|
|
list(sour_list)
|
|
}
|
|
/* sour_addind() adds the sources referenced for this individual */
|
|
|
|
proc sour_addind(i)
|
|
{
|
|
traverse(root(i), m, l) {
|
|
if (nestr("SOUR", tag(m))) { continue() }
|
|
set(v, value(m))
|
|
if (eqstr("", v)) { continue() }
|
|
if(reference(v)) {
|
|
if (ne(0, lookup(sour_table, v))) { continue() }
|
|
set(v, save(v))
|
|
insert(sour_table, v, 1)
|
|
enqueue(sour_list, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
proc sour_addset(s)
|
|
{
|
|
forindiset (s, i, a, n) {
|
|
call sour_addind(i)
|
|
families(i, f, sp, m) {
|
|
call sour_addind(f)
|
|
}
|
|
}
|
|
}
|
|
|
|
/* sour_ged() outputs the current source list in GEDCOM format */
|
|
|
|
proc sour_ged()
|
|
{
|
|
table(other_table)
|
|
list(other_list)
|
|
|
|
forlist(sour_list, k, n) {
|
|
set(r, dereference(k))
|
|
traverse(r, s, l) {
|
|
d(l)
|
|
if (xref(s)) { " " xref(s) }
|
|
" " tag(s)
|
|
if (v, value(s)) {
|
|
" " v
|
|
if(reference(v)) {
|
|
if (ne(0, lookup(other_table, v))) { continue() }
|
|
if (ne(0, lookup(sour_table, v))) { continue() }
|
|
set(v, save(v))
|
|
insert(other_table, v, 1)
|
|
enqueue(other_list, v)
|
|
}
|
|
}
|
|
"\n"
|
|
}
|
|
}
|
|
forlist(other_list, k, n) {
|
|
set(r, dereference(k))
|
|
traverse(r, s, l) {
|
|
d(l)
|
|
if (xref(s)) { " " xref(s) }
|
|
" " tag(s)
|
|
if (v, value(s)) { " " v }
|
|
"\n"
|
|
}
|
|
}
|
|
}
|