Copyright 2004 Ray Ontko & Co. All rights reserved. !------------------------------------------------------------------------ begin-setup create-array name=stack size=10 field=row_count:number field=index:number field=parent:char:50 field=child:char:50 field=child_order:number:50 end-setup !------------------------------------------------------------------------ begin-program show 'Tom''s children' do get_children('Tom') end-program !------------------------------------------------------------------------ begin-procedure get_children($parent) add 1 to #_level move 0 to #row_count begin-select parent child child_order put &parent &child &child_order into stack(#_level) parent(#row_count) child(#row_count) child_order(#row_count) add 1 to #row_count from recurse where parent = $parent order by child_order end-select move 0 to #index while #index < #row_count get $parent $child #child_order from stack(#_level) parent(#index) child(#index) child_order(#index) let #indent = 10 - length($parent) + #_level *2 let $prefix = rpad(' ', #indent, ' ') show $parent $prefix $child ' ' #child_order edit 999 put #row_count #index into stack(#_level) row_count index do get_children($child) get #row_count #index from stack(#_level) row_count index add 1 to #index end-while subtract 1 from #_level end-procedure get_children