#!/usr/bin/python

import string

print "digraph hal_nets {"
print """


graph [
rankdir = "LR"
];
node [
fontsize = "8"
];


"""

# defs
f = open("pin.out", "r")

component_hash={}

for line in f:
        comp_name, pin_type, pin_dir, pin_value, pin_name = line.split()[:5]
        if not component_hash.has_key(comp_name):
                component_hash[comp_name] = [];
        component_hash[comp_name].append(pin_name)

for comp in component_hash.keys():
        comp_labels = ["<" + c + "> " + c for c in component_hash[comp]]
        print "\"" + comp + "\"" + " ["
        print "\tlabel = " + "\"" + string.join(comp_labels, " | ") + "\""
        print "\tshape = \"record\""
        print "]"
        print "\n\n\n"

# nets


def component(component_hash,pin):
        for lst in component_hash.values():
                if pin in lst:
                        return component_hash.keys()[component_hash.values().index(lst)]



f = open("pin.out", "r")

net_list = []

for line in f:
        sig_list = line.split()
        sig_type, sig_value = sig_list[0:2]
        sig_declarations = sig_list[2:]
        for count in range(len(sig_declarations)):
                if sig_declarations[count] in ["<==", "==>"]:
                        pin1 = sig_declarations[count - 1]
                        pin2 = sig_declarations[count + 1]

                        comp1 = component(component_hash, pin1)
                        if comp1 != None:
                                comp1 = "\"" + comp1 + "\"" + ":"
                        else:
                                comp1 = ""
                        comp2 = component(component_hash, pin2)

                        if comp2 != None:
                                comp2 = "\"" + comp2 + "\"" + ":"
                        else:
                                comp2 = ""

                        comp_pin1 = comp1 + "\"" + pin1 + "\""
                        comp_pin2 = comp2 + "\"" + pin2 + "\""

                        if sig_declarations[count] == "<==":
                                net_list.append(comp_pin2 + " -> " + comp_pin1) # "a <== b" ===>> "b -> a"
                        if sig_declarations[count] == "==>":
                                net_list.append(comp_pin1 + " -> " + comp_pin2) # "a ==> b" ===>> "a -> b"

for line in net_list:
        print line + ";"

print "}"