mirror of
https://github.com/kennethreitz/context.git
synced 2026-06-05 14:50:19 +00:00
81 lines
1.8 KiB
LLVM
81 lines
1.8 KiB
LLVM
/*
|
|
* @progname afg.ll
|
|
* @version 1.0
|
|
* @author Tom Wetmore
|
|
* @category
|
|
* @output Text
|
|
* @description
|
|
|
|
Shows simple family groups starting at a person and extending
|
|
out in ancestry.
|
|
|
|
* Tom Wetmore -- 1 March 2008
|
|
*/
|
|
global(iset)
|
|
|
|
proc main ()
|
|
{
|
|
list(fams) /* families queued for possible processing */
|
|
table(fset) /* families that have been processed */
|
|
table(iset) /* table of ancestors that have been given numbers */
|
|
set(n, 1) /* counter that assigns numbers to ancestors */
|
|
|
|
getindi(p, "enter person to build the family groups for")
|
|
if (not(p)) { return() }
|
|
set(k, save(key(p)))
|
|
insert(iset, k, rjustify(d(n), 3))
|
|
incr(n)
|
|
set(f, parents(p))
|
|
if (not(f)) { return() }
|
|
|
|
enqueue(fams, f)
|
|
while (f, dequeue(fams)) {
|
|
set(k, key(f))
|
|
if (lookup(fset, k)) { continue() }
|
|
insert(fset, save(k), 1)
|
|
if (h, husband(f)) {
|
|
if (g, parents(h)) { enqueue(fams, g) }
|
|
insert(iset, save(key(h)), rjustify(d(n), 3))
|
|
incr(n)
|
|
}
|
|
if (w, wife(f)) {
|
|
if (g, parents(w)) { enqueue(fams, g) }
|
|
insert(iset, save(key(w)), rjustify(d(n), 3))
|
|
incr(n)
|
|
}
|
|
call showfamily(f)
|
|
}
|
|
}
|
|
|
|
proc showfamily (f)
|
|
{
|
|
if (p, husband(f)) { call showperson(p, 0) }
|
|
if (p, wife(f)) { call showperson(p, 0) }
|
|
if (e, marriage(f)) {
|
|
if (long(e)) { " m. " long(e) nl() }
|
|
}
|
|
children (f, c, i) { call showperson(c, 1) }
|
|
|
|
"----------------------------------------" nl()
|
|
}
|
|
|
|
proc showperson (p, child)
|
|
{
|
|
if (child) { " " }
|
|
set(i, lookup(iset, key(p)))
|
|
if (i) { i " " } else { " " }
|
|
name(p) nl()
|
|
if (e, birth(p)) {
|
|
if (child) { " " }
|
|
" b. " long(e) nl()
|
|
}
|
|
if (e, death(p)) {
|
|
if (child) { " " }
|
|
" d. " long(e) nl()
|
|
}
|
|
fornotes (root(p), n) {
|
|
if (child) { " " }
|
|
" n: " n nl()
|
|
}
|
|
}
|