#module m_tree children, content
# modfunc set_tree_content str _content
content = _content
return
# defcfunc getaptr@m_tree var p1, local hspctx, local vptr
mref hspctx, 68
dupptr vptr, hspctx.207, 8, 4
return vptr.1
# modinit str _content
set_tree_content thismod, _content
dimtype children, 5, 1
return getaptr( thismod )
# deffunc _new_tree array tree, str _content
# define global new_tree( %1, %2 = "" ) _new_tree %1,%2
newmod tree, m_tree, _content
return stat
# defcfunc get_tree_content modvar m_tree@
return content
# defcfunc get_tree_num_children modvar m_tree@
return length( children )
# modfunc get_tree_child int index, var result
if( index < 0 || index >= length( children ) ) : return 1
if( varuse( children.index ) == 0 ) : return 1
result = children.index
return 0
# modfunc add_tree_child var child
new_tree children
children.stat = child
return
# modfunc _show_tree str indent
# define global show_tree( %1, %2 = "" ) _show_tree %1, %2
mes indent + content
foreach children
if( varuse( children.cnt ) ) {
show_tree children.cnt, indent + " "
}
loop
return
# modfunc _tree_deep_clone var src, local src_child
set_tree_content thismod, get_tree_content( src )
repeat get_tree_num_children( src )
get_tree_child src, cnt, src_child
if stat : continue
new_tree children, get_tree_content( src_child )
_tree_deep_clone children.stat, src_child
loop
return
# deffunc tree_deep_clone array dest, var src
new_tree dest
_tree_deep_clone dest.stat, src
return
#global
new_tree tree, "root"
new_tree tree_1, "1"
add_tree_child tree, tree_1
new_tree tree_2, "2"
add_tree_child tree, tree_2
new_tree tree_2_1, "2-1"
add_tree_child tree_2, tree_2_1
new_tree tree_2_1_1, "2-1-1"
add_tree_child tree_2_1, tree_2_1_1
new_tree tree_2_2, "2-2"
add_tree_child tree_2, tree_2_2
show_tree tree
#if 1
tree2 = tree
#else
tree_deep_clone tree2, tree
#endif
set_tree_content tree_2_1, "2-1 *"
mes "--------------------"
show_tree tree2
eller さんがこのモジュールを利用したツリービューを作成するモジュールを作られています。
応用例: