1*67e74705SXin Li#!/usr/bin/env python 2*67e74705SXin Li# 3*67e74705SXin Li# The LLVM Compiler Infrastructure 4*67e74705SXin Li# 5*67e74705SXin Li# This file is distributed under the University of Illinois Open Source 6*67e74705SXin Li# License. See LICENSE.TXT for details. 7*67e74705SXin Li# 8*67e74705SXin Li##===----------------------------------------------------------------------===## 9*67e74705SXin Li# 10*67e74705SXin Li# This script reads visualization data emitted by the static analyzer for 11*67e74705SXin Li# display in Ubigraph. 12*67e74705SXin Li# 13*67e74705SXin Li##===----------------------------------------------------------------------===## 14*67e74705SXin Li 15*67e74705SXin Liimport xmlrpclib 16*67e74705SXin Liimport sys 17*67e74705SXin Li 18*67e74705SXin Lidef Error(message): 19*67e74705SXin Li print >> sys.stderr, 'ubiviz: ' + message 20*67e74705SXin Li sys.exit(1) 21*67e74705SXin Li 22*67e74705SXin Lidef StreamData(filename): 23*67e74705SXin Li file = open(filename) 24*67e74705SXin Li for ln in file: 25*67e74705SXin Li yield eval(ln) 26*67e74705SXin Li file.close() 27*67e74705SXin Li 28*67e74705SXin Lidef Display(G, data): 29*67e74705SXin Li action = data[0] 30*67e74705SXin Li if action == 'vertex': 31*67e74705SXin Li vertex = data[1] 32*67e74705SXin Li G.new_vertex_w_id(vertex) 33*67e74705SXin Li for attribute in data[2:]: 34*67e74705SXin Li G.set_vertex_attribute(vertex, attribute[0], attribute[1]) 35*67e74705SXin Li elif action == 'edge': 36*67e74705SXin Li src = data[1] 37*67e74705SXin Li dst = data[2] 38*67e74705SXin Li edge = G.new_edge(src,dst) 39*67e74705SXin Li for attribute in data[3:]: 40*67e74705SXin Li G.set_edge_attribute(edge, attribute[0], attribute[1]) 41*67e74705SXin Li elif action == "vertex_style": 42*67e74705SXin Li style_id = data[1] 43*67e74705SXin Li parent_id = data[2] 44*67e74705SXin Li G.new_vertex_style_w_id(style_id, parent_id) 45*67e74705SXin Li for attribute in data[3:]: 46*67e74705SXin Li G.set_vertex_style_attribute(style_id, attribute[0], attribute[1]) 47*67e74705SXin Li elif action == "vertex_style_attribute": 48*67e74705SXin Li style_id = data[1] 49*67e74705SXin Li for attribute in data[2:]: 50*67e74705SXin Li G.set_vertex_style_attribute(style_id, attribute[0], attribute[1]) 51*67e74705SXin Li elif action == "change_vertex_style": 52*67e74705SXin Li vertex_id = data[1] 53*67e74705SXin Li style_id = data[2] 54*67e74705SXin Li G.change_vertex_style(vertex_id,style_id) 55*67e74705SXin Li 56*67e74705SXin Lidef main(args): 57*67e74705SXin Li if len(args) == 0: 58*67e74705SXin Li Error('no input files') 59*67e74705SXin Li 60*67e74705SXin Li server = xmlrpclib.Server('http://127.0.0.1:20738/RPC2') 61*67e74705SXin Li G = server.ubigraph 62*67e74705SXin Li 63*67e74705SXin Li for arg in args: 64*67e74705SXin Li G.clear() 65*67e74705SXin Li for x in StreamData(arg): 66*67e74705SXin Li Display(G,x) 67*67e74705SXin Li 68*67e74705SXin Li sys.exit(0) 69*67e74705SXin Li 70*67e74705SXin Li 71*67e74705SXin Liif __name__ == '__main__': 72*67e74705SXin Li main(sys.argv[1:]) 73*67e74705SXin Li 74