global(depth)
global(level)

proc main ()
{
      getindi(indi)
      set(prompt,"Enter number of generations desired")
      getintmsg(depth,prompt)
      "\\input setup" nl()
      "\\tree " nl()
      set(level,1)
      call pedout(indi)
      "\\endtree " nl()
      "\\end " nl()

}

proc printindi(indi)
{
      "{\\bf " name(indi) "}" nl()
      if (e, birth(indi)) { "    b. " short(e) nl() }
      if(male(indi))
       {
         spouses(indi,sp,fam,num)
            {
               if(e,marriage(fam)) { "   m. " short(e) nl() }
            }
       }
      if (e, death(indi)) { "    d. " short(e) nl() }
}

proc pedout(indi)
{
      call printindi(indi)
      set(level,add(level,1))
      if(le(level,depth))
      {
            if (par,father(indi))
            {
                  set(fath,father(indi))
                  "\\subtree " nl()
                  call pedout(fath)
                  "\\endsubtree " nl()
            }
            if (par,mother(indi))
            {
                  set(moth,mother(indi))
                  "\\subtree " nl()
                  call pedout(moth)
                  "\\endsubtree " nl()
            }
      }
      set(level,sub(level,1))
}
