double latest_time,
int coords_length )
{
StringBuffer linebuf;
Coord vertex;
YaxisTreeNode node;
TreeNode[] nodes;
Integer lineID;
double duration;
int idx, ii;
duration = latest_time - earliest_time;
linebuf = new StringBuffer();
linebuf.append( "duration (max) = " + tfmt.format( duration ) );
if ( num_cols < linebuf.length() )
num_cols = linebuf.length();
num_rows++;
strbuf.append( linebuf.toString() );
idx = 0;
linebuf = new StringBuffer( "[" + idx + "]: " );
vertex = start_vtx;
lineID = new Integer( vertex.lineID );
node = (YaxisTreeNode) map_line2treenodes.get( lineID );
nodes = node.getPath();
linebuf.append( "time (min) = " + fmt.format( earliest_time ) );
for ( ii = 1; ii < nodes.length; ii++ )
linebuf.append( ", " + y_colnames[ ii-1 ]
+ " = " + nodes[ ii ] );
if ( num_cols < linebuf.length() )
num_cols = linebuf.length();
num_rows++;
strbuf.append( "\n" + linebuf.toString() );
idx = coords_length-1;
linebuf = new StringBuffer( "[" + idx + "]: " );
vertex = final_vtx;
lineID = new Integer( vertex.lineID );
node = (YaxisTreeNode) map_line2treenodes.get( lineID );
nodes = node.getPath();
linebuf.append( "time (max) = " + fmt.format( latest_time ) );
for ( ii = 1; ii < nodes.length; ii++ )
linebuf.append( ", " + y_colnames[ ii-1 ]
+ " = " + nodes[ ii ] );
if ( num_cols < linebuf.length() )