mirror of
https://github.com/kennethreitz/context.git
synced 2026-06-05 14:50:19 +00:00
65 lines
1.9 KiB
LLVM
65 lines
1.9 KiB
LLVM
/*
|
|
* @progname select.ll
|
|
* @version 3
|
|
* @author Wetmore, Groleau, McGee
|
|
* @category
|
|
* @output Custom
|
|
* @description
|
|
|
|
Customizable report stub to do the following:
|
|
o Select a person with all ancestors and all descendents.
|
|
o Add to selection all other persons within a user-specified number of
|
|
links from any person in the first selection.
|
|
o Turn the selected set of persons into a list
|
|
o Call a report subprogram to process the list.
|
|
|
|
WRITTEN BY TOM WETMORE, 21 Jul 1995
|
|
minor mods by Wes Groleau, 25 Aug 1995
|
|
Scott McGee fixed Wes's bug, 26 Aug 1995 :-)
|
|
*/
|
|
|
|
list(o) /* output list */
|
|
|
|
/* have user provide start person and link distance */
|
|
|
|
getindi(i, "Please identify start person.")
|
|
if (not(i)) { return() }
|
|
getint(n, "Please enter link distance.")
|
|
|
|
/* create set with all ancestors and descendents */
|
|
|
|
indiset(s) addtoset(s, i, 1)
|
|
indiset(a) set(a, ancestorset(s)) /* could be made optional */
|
|
indiset(d) set(d, descendentset(s)) /* could be made optional */
|
|
set(s, union(s, union(a, d)))
|
|
|
|
/* create set of additional, linked-to persons */
|
|
|
|
indiset(t) set(t, spouseset(s))
|
|
set(n, sub(n, 1))
|
|
while (gt(n, 0)) {
|
|
set(a, parentset(t))
|
|
set(d, childset(t))
|
|
set(b, siblingset(t))
|
|
set(c, spouseset(t))
|
|
set(t, union(t, union(a, union(d, union(b, c)))))
|
|
set(n, sub(n, 1))
|
|
}
|
|
|
|
/* create final set of all selected persons and generate the report */
|
|
|
|
set(s, union(s, t))
|
|
|
|
if(s){
|
|
forindiset(s, j, n, m) {
|
|
enqueue(o, j)
|
|
}
|
|
}
|
|
|
|
call do_list(o) /* your routine here */
|
|
}
|
|
|
|
|
|
|
|
proc do_list (o) { /* your routine here */ }
|