#!/usr/bin/env python # # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. # ##===----------------------------------------------------------------------===## # # This script reads visualization data emitted by the static analyzer for # display in Ubigraph. # ##===----------------------------------------------------------------------===## import xmlrpclib import sys def Error(message): print >> sys.stderr, 'ubiviz: ' + message sys.exit(1) def StreamData(filename): file = open(filename) for ln in file: yield eval(ln) file.close() def Display(G, data): action = data[0] if action == 'vertex': vertex = data[1] G.new_vertex_w_id(vertex) for attribute in data[2:]: G.set_vertex_attribute(vertex, attribute[0], attribute[1]) elif action == 'edge': src = data[1] dst = data[2] edge = G.new_edge(src,dst) for attribute in data[3:]: G.set_edge_attribute(edge, attribute[0], attribute[1]) elif action == "vertex_style": style_id = data[1] parent_id = data[2] G.new_vertex_style_w_id(style_id, parent_id) for attribute in data[3:]: G.set_vertex_style_attribute(style_id, attribute[0], attribute[1]) elif action == "vertex_style_attribute": style_id = data[1] for attribute in data[2:]: G.set_vertex_style_attribute(style_id, attribute[0], attribute[1]) elif action == "change_vertex_style": vertex_id = data[1] style_id = data[2] G.change_vertex_style(vertex_id,style_id) def main(args): if len(args) == 0: Error('no input files') server = xmlrpclib.Server('http://127.0.0.1:20738/RPC2') G = server.ubigraph for arg in args: G.clear() for x in StreamData(arg): Display(G,x) sys.exit(0) if __name__ == '__main__': main(sys.argv[1:])