File: count_paternal_desc.ll

package info (click to toggle)
lifelines 3.0.50-2
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 11,140 kB
  • ctags: 6,517
  • sloc: ansic: 57,468; xml: 8,014; sh: 4,255; makefile: 848; yacc: 601; perl: 170; sed: 16
file content (54 lines) | stat: -rw-r--r-- 1,753 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*
 * @progname       count_paternal_desc.ll
 * @version        2.0
 * @author         Eggert
 * @category       
 * @output         Text
 * @description    

This program counts paternal descendants of a person by generation.
Only unique individuals in each generation are counted.
A person counts in all the generations he/she is in,
but only counts once in the grand total.
Male paternal descendants are also counted separately.

count_paternal_desc - a LifeLines descendants counting program
         by Jim Eggert (eggertj@atc.ll.mit.edu)
         Version 1,  1 August 1994
         Version 2, 16 February 1995, use lengthset(), print(,)
*/

proc main ()
{
    getindimsg(person,"Enter person to count paternal descendants of")
    indiset(thisgen)
    indiset(allgen)
    indiset(allmalegen)
    addtoset(thisgen, person, 0)
    if (male(person)) { addtoset(allmalegen, person, 0) }
    print("Counting generation ")
    "Number of paternal descendants of " key(person) " " name(person)
    " by generation:\n"
    set(gen,neg(1))
    while(lengthset(thisgen)) {
        indiset(thismalegen)
        forindiset(thisgen,person,val,count) {
            if (male(person)) {
                addtoset(thismalegen,person,0)
            }
        }
	incr(gen)
	print(d(gen)," ")
	"Generation " d(gen) " has " d(lengthset(thisgen))
	" paternal descendant"
	if (gt(lengthset(thisgen),1)) { "s" }
	" of which " d(lengthset(thismalegen)) " are male.\n"
	set(thisgen,childset(thismalegen))
	set(allgen,union(allgen,thisgen))
	set(allmalegen,union(allmalegen,thismalegen))
    }
    "Total unique paternal descendants in generations 1-" d(gen)
    " is " d(lengthset(allgen))
    " of which " d(lengthset(allmalegen))
    " are male paternal descendants.\n"
}