imported Stefan's colored version of drawmodules...
mtk [Sun, 25 Jul 2010 15:27:03 +0000 (15:27 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1649 270642c3-0616-0410-b53a-bc976706d245

tools/drawmodules.py

index 51c6aaa..05a27c0 100755 (executable)
@@ -2,6 +2,8 @@
 
 import sys
 
+COLOR_SCHEME = 'pastel19'  # see http://www.graphviz.org/doc/info/colors.html
+
 mode = "MODULE"
 
 sys.stdout.write("""
@@ -11,6 +13,11 @@ node [shape=Mrecord, fontsize=8, fontname="Helvetica"];
 
 modules = {}
 connectors = {}
+p = 0
+
+for opt in sys.argv:
+   if opt in ("-p","--packet"):
+        p = 1
 
 for line in sys.stdin:
     line = line.strip()
@@ -25,39 +32,56 @@ for line in sys.stdin:
     else:
         connectorid, type = line.split(' ',1);
         connectorid = connectorid[1:]
-        elts = type.rsplit(' ',1);
+       
+       packet = type.rsplit('<',1)[1];
+       packet = packet.rsplit('::',1)[-1];
+       packet = packet.split('>',1)[0];
+               
+       elts = type.rsplit(' ',1);
         if elts[-1].startswith('0x'):
             type, peerid = elts
             peerid = peerid[1:]
         else:
             peerid = None
-        modules[moduleid][1].append((connectorid, type, peerid))
+        modules[moduleid][1].append((connectorid, type, peerid, packet))
         connectors[connectorid] = moduleid
 
 for moduleid, (module, cs) in modules.iteritems():
     module = module.split('<',1)[0]
+    if "senf" not in module.split('::',1)[0]:
+       color = 6
+    elif "senf::ppi::module::ActiveSocketSource" in module:
+       color = 1
+    elif "senf::ppi::module::PassiveSocketSink" in module:
+       color = 1
+    else:
+        color = 3
     module = module.rsplit('::',1)[-1]
     inputs = []
     outputs = []
-    for connectorid, type, peerid in cs:
+    for connectorid, type, peerid,packet in cs:
         if 'Input' in type: inputs.append("<%s>%s" % (connectorid,connectorid))
         else:               outputs.append("<%s>%s" % (connectorid,connectorid))
     rows = []
     if inputs: rows.append("{%s}" % "|".join(inputs))
     rows.append("%s (%s)" % (module, moduleid))
     if outputs: rows.append("{%s}" % "|".join(outputs))
-    sys.stdout.write('%s [label="{%s}"]\n' % (moduleid, "|".join(rows) ))
+    sys.stdout.write('%s [label="{%s}" style="filled" fillcolor="/%s/%s"  ]\n' % (moduleid, "|".join(rows),                            COLOR_SCHEME, color ))
 
 anonid = 0
 
 for moduleid, (type, cs) in modules.iteritems():
-    for connectorid, type, peerid in cs:
+    for connectorid, type, peerid, packet in cs:
         opts = []
         if "Passive" in type: opts.append("arrowtail=odot");
         opts = ",".join(opts)
         if opts: opts = " [%s]" % opts
         if "Output" in type and peerid is not None:
-            sys.stdout.write('%s:%s -> %s:%s%s\n' 
+           if "Packet" in packet and p is 1:
+               sys.stdout.write('%s:%s -> %s:%s%s [label=" %s", fontsize=8, fontname="Helvetica"]\n' 
+                             % (moduleid, connectorid, connectors[peerid], peerid, opts,packet))
+           else:
+               sys.stdout.write('%s:%s -> %s:%s%s\n' 
                              % (moduleid, connectorid, connectors[peerid], peerid, opts))
         elif peerid is None:
             sys.stdout.write('anon%d [label="", shape=point, height=.05];\n' % anonid)