Files
context/_reports/browser.ll
T
2019-09-28 10:14:18 -04:00

77 lines
2.4 KiB
LLVM

/*
* @progname browser.ll
* @version 1.0
* @author Prinke
* @category
* @output onscreen
* @description
browsing via all kinds of links, especially in non-standard
or experimental GEDCOM structures
browser.ll v.1.0 Rafal T. Prinke -- 19 APR 1997 -- rafalp@hum.amu.edu.pl
*/
proc main()
{
list(back)
list(backhdr)
getindi(p, "Person to start with: ")
if(not(p)) { break() }
set(i, savenode(root(p)))
set(hdr, concat("*** INDI: ", name(p,0)," ***"))
set(bh, "----- BACK")
while(i) {
list(mnu)
list(gto)
enqueue(gto,0)
enqueue(gto,0)
enqueue(mnu,"----- STOP")
enqueue(mnu,bh)
traverse (i, node, x) {
if (reference(value(node))) {
set (n, dereference(value(node)))
enqueue(gto, savenode(n))
if(eq(substring(value(node),1,2),"@I")) {
set(show,concat("INDI: ", name(indi(value(node)),0))) }
elsif(eq(substring(value(node),1,2),"@S")) {
set(show,concat("SOUR: ", value(child(n)) )) }
elsif(eq(substring(value(node),1,2),"@E")) {
set(show,concat("EVEN: ", value(child(n)) )) }
elsif(eq(substring(value(node),1,2),"@F")) {
set(show,concat("FAM: ", name(husband(fam(value(node))),0),
" & ", name(wife(fam(value(node))),0))) }
else { set(show, concat("OTHER:",value(child(node)))) }
enqueue(mnu, show)
}
}
set(why, menuchoose(mnu, hdr))
if(eq(why, 1)) { break() }
elsif(eq(why, 2)) {
if(empty(back)) {
set(bh, "-- THIS IS THE FIRST RECORD - CAN'T GO BACK --")
push(back, savenode(i))
push(backhdr, hdr)
}
set(i, pop(back))
set(hdr, pop(backhdr))
}
else {
push(back, savenode(i))
push(backhdr, hdr)
set(nd, getel(gto, why))
set(hdr, concat("*** ",getel(mnu, why)," ***"))
set(i, nd)
set(bh, "----- BACK")
}
}
}