2% Misc DCTG utilities.
    3% B. Ross
    4% January 1999
    5
    6% Pretty-printer...
    7
    8prettyprint(Tree) :-
    9	pretty(Tree, 0),
   10	!.
   11
   12pretty(node(Name, Kids, ID), Tab) :-
   13	T is Tab*4,
   14	tab(T), 
   15	writel2([Name, ' (#', ID, ',d ', Tab,')', nl]),
   16	Tab2 is Tab + 1,	
   17	prettykids(Kids, Tab2),
   18	!.
   19pretty(Value, Tab) :-
   20	T is Tab*4,
   21	tab(T), 
   22	writel([Value, nl]),
   23	!.
   24
   25prettykids([], _) :- !.
   26prettykids([Node|Rest], Tab) :-
   27	pretty(Node, Tab),
   28	prettykids(Rest, Tab),
   29	!.
   30
   31% DCTG tree depth measurer...
   32
   33tree_depth(node(_, Kids, _), D) :-
   34	tree_depth_kids(Kids, D2),
   35	D is D2 + 1,
   36	!.
   37tree_depth(_, 1) :- !.
   38
   39tree_depth_kids([], 0) :- !.
   40tree_depth_kids([Node|Rest], D) :-
   41	tree_depth(Node, D2),
   42	tree_depth_kids(Rest, D3),
   43	D is max(D2, D3),
   44	!.
   45
   46% listprint converts tree to list, using DCTG verification
   47
   48listprint(Tree) :-
   49	user_args_P(UserArgs),
   50	verification(Tree, UserArgs, List),
   51	writel2(List),
   52	nl,
   53	!