/* * @progname htmlfam.ll * @version 3 * @author Tom Wetmore (ttw@shore.net) * @category * @output HTML * @description * * output family group summaries in HTML format */ /* third draft -- 12/27/95 -- Tom Wetmore -- ttw@shore.net */ global(pert) /* person table */ global(showf) /* families that have been shown */ proc main () { getindi(per0, "Who do you want to start with?") set(fam0, parents(per0)) list(perq) list(famq) table(pert) list(lst) insert(pert, save(key(per0)), lst) table(showf) enqueue(perq, per0) while (per, dequeue(perq)) { if (fam, parents(per)) { if (per, husband(fam)) { call makelink(per, fam) enqueue(perq, per) } if (per, wife(fam)) { call makelink(per, fam) enqueue(perq, per) } } } call showhead() call showper(per0) enqueue(famq, fam0) while (fam, dequeue(famq)) { if (not(lookup(showf, key(fam)))) { call showfam(fam) insert(showf, save(key(fam)), 1) } set(husb, husband(fam)) set(wife, wife(fam)) if (fam, parents(husb)) { enqueue(famq, fam) } if (fam, parents(wife)) { enqueue(famq, fam) } } call showtail() } proc makelink (per, fam) { if (lst, lookup(pert, key(per))) { call enqueueifnew(lst, key(fam)) } else { list(lst) enqueue(lst, save(key(fam))) insert(pert, save(key(per)), lst) } } proc enqueueifnew (lst, key) { forlist (lst, el, num) { if (eqstr(key, el)) { return() } } enqueue(lst, save(key)) } proc showper (per) { call showone(per) families(per, fam, sp, num) { call showone(sp) call showmarr(fam) call showchildren(fam) } "
"name(per, 0)"\n"
if (evt, birth(per)) { "
born "long(evt)"\n" }
if (evt, death(per)) { "
died "long(evt)"\n" }
set(fam, parents(per))
if (par, father(per)) {
"
father " call showlink(par, key(fam)) "\n"
}
if (par, mother(per)) {
"
mother " call showlink(par, key(fam)) "\n"
}
}
proc showmarr (fam)
{
if (evt, marriage(fam)) { "
married "long(evt)"\n" }
}
proc showchildren (fam)
{
if (eq(0, nchildren(fam))) { return() }
"
Children\n"
children (fam, per, num) {
"
" d(num) " " call showchild(per) "\n"
}
}
proc showlink (per, key) {
set(lst, lookup(pert, key(per)))
if (lst) { "" }
name(per, 0)
if (lst) { "" }
call showevents(per)
}
proc showchild (per) {
if (lst, lookup(pert, key(per))) {
call showlinks(per, lst)
} else {
name(per, 0)
call showevents(per)
}
}
proc showlinks (per, lst) /* LOOSEEND -- THIS ROUTINE NEEDS MORE */
{
if (eq(0, length(lst))) {
call showlink(per, "start")
} else {
call showlink(per, getel(lst, 1))
}
}
proc showevents (per)
{
set(evt, birth(per))
if (and(evt, year(evt))) { ", b " year(evt) }
set(evt, death(per))
if (and(evt, year(evt))) { ", d " year(evt) }
}
proc showhead () {
"