File: gcat.tcl

package info (click to toggle)
graphviz 14.0.5-2
  • links: PTS
  • area: main
  • in suites: forky
  • size: 139,388 kB
  • sloc: ansic: 141,938; cpp: 11,957; python: 7,766; makefile: 4,043; yacc: 3,030; xml: 2,972; tcl: 2,495; sh: 1,388; objc: 1,159; java: 560; lex: 423; perl: 243; awk: 156; pascal: 139; php: 58; ruby: 49; cs: 31; sed: 1
file content (47 lines) | stat: -rwxr-xr-x 894 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/sh
# next line is a comment in tcl \
exec tclsh "$0" ${1+"$@"}

package require Tcldot

#  gcat f1 [f2 ... ]
#
# merge a number of digraphs into one and output to stdout
#
# John Ellson  <ellson@graphviz.org>
# 

# merge graph $g2 into $g
proc merge {g g2} {
	foreach i [$g2 listnodes] {
		set n [$g addnode [$i showname]]
		$n setattributes [$i queryattributevalues [$i listattributes]]
	}
	foreach i [$g2 listedges] {
		foreach {t h} [$i listnodes] {break}
		set e [$g addedge [$t showname] [$h showname]]
		$e setattributes [$i queryattributevalues [$i listattributes]]
	}
}

set g [dotnew digraph]
if {$argc} {
	foreach file $argv {
		set f [open $file r]
		if {[catch {dotread $f} g2]} {
			puts stderr $g2
			exit
		}
		merge $g $g2
		close $f
	}
} {
	while {![catch {dotread stdin} g2]} {
		merge $g $g2
	}
	if {![eof stdin]} {
		puts stderr $g2
		exit
	}
}
$g write stdout CANON