#!/usr/bin/ruby # # Copyright 2008, 2009 Michel Pollet # # This file is part of libmish. # # SPDX-License-Identifier: Apache-2.0 $files = Hash.new $syms = Hash.new tags = File.new(ARGV[0]) key = Array.new while !tags.eof? next unless tags.readline.chomp.match(/([^\t]+)\t([^\t]+)\t(.*)\$\/;"\t([^\t]+)/); key[0] = $1; key[1] = $2; key[3] = $3; key[4] = $4; next if key[4] == 'm' or key[4] == 't' or key[4] == 's' or key[4] == 'e' or key[4] == 'v'; next if key[0].match(/[us]?int[0-9]+_t/); next if key[0] == "ROM_BASED"; key[1].gsub!(/.*\/|\.[ch]$/,""); unless $files.key? key[1] $files[key[1]] = Hash.new end unless $files[key[1]].key? key[0] $files[key[1]][key[0]] = Hash.new $syms[key[0]] = key[1] end #puts key[0] + " = '#{key[4]}'" end puts "digraph dump { node [shape=rect]; compound=true; nodesep=.1; ranksep=2; rankdir=LR; concentrate=true; " modules = Hash.new; links = Array.new; 1.upto(ARGV.length-1) { |i| use = File.new(ARGV[i]) # puts "<<<<<<<>>" + line words = line.split(/[ \t]+/); words.each { |w| if $syms.key? w and $syms[w] != fil unless $files[$syms[w]][w].key? fil # puts w + " is in " + $syms[w] $files[$syms[w]][w][fil] = 1 sym=w unless modules.key? fil modules[fil] = Array.new end modules[fil] += [ "\"cc_#{fil}_#{sym}\" [label=\"#{sym}\",color=\"gray\",height=\".08\",style=dotted];" ] links += ["\"cc_#{fil}_#{sym}\" -> \"dd_#{$syms[w]}_#{sym}\";"] end end } end } $files.keys.each { |fil| # puts "File #{fil} ?" $files[fil].keys.each { |sym| # puts "\tSym #{sym} : #{$files[fil][sym].length} ?" if $files[fil][sym].length > 0 unless modules.key? fil modules[fil] = Array.new end modules[fil] += [ "\"dd_#{fil}_#{sym}\" [label=\"#{sym}\"];" ] end } } modules.keys.each {|fil| puts "\tsubgraph cluster_#{fil} {\n\t\tlabel=\"#{fil}\"; fontsize=\"18\"; " modules[fil].each { |lin| puts "\t\t#{lin}" } puts "\t}" } links.each { |lin| puts "\t#{lin}" } puts "}"