#!/bin/sh
#! perl 
	eval 'exec perl -x $0 ${1+"$@"}'
		if 0;

# Converts a topology in adjacency list format to a format suitable
# for input to nam (a topology visualization program).
#
# John Mehringer
# Los Angeles, February 2000.
# This software is released under the GPL.
#
# Modifed by Graham Phillips <graham@isi.edu>
# See http://www.isi.edu/~graham/contrib/index.html for more
# information.


# Use the newer nam format
print "V -t * -v 1.0a8 -a 0\n";

# ignore the num_vertices num_edges line
<>;

$nam_nodes = "";
$nam_links = "";
$nam_labels  = ""; 
$i = 1;
while (<>) {
	($src_addr, $dest_addr) = split;

	die "Circular edge $src_addr (nam will struggle)\n" if ($src_addr eq $dest_addr);

	if (!defined($nodes{$src_addr})) {
		$nodes{$src_addr} = $i;
		$i++;
		$nam_nodes .= "n -t * -s $nodes{$src_addr} -v circle -c black -S UP\n";
		$nam_labels .= "n -t 0 -s $nodes{$src_addr} -S DLABEL -l $src_addr\n";
	}

	if (!defined($nodes{$dest_addr})) {
		$nodes{$dest_addr} = $i;
		$i++;
		$nam_nodes .= "n -t * -s $nodes{$dest_addr} -v circle -c black -S UP\n";
		$nam_labels .= "n -t 0 -s $nodes{$src_addr} -S DLABEL -l $src_addr\n";
	}

	if (!defined($links{$src_addr . $dest_addr})) { 
		# Check for duplicates edges
		$links{$src_addr . $dest_addr} = 1; 
		$nam_links .= "l -t * -s $nodes{$src_addr} -d $nodes{$dest_addr} -r 1.0 -D 1.0 -c gray -S UP\n";
	}
}
print $nam_nodes . $nam_links . $nam_labels;

