commsfwtools/commstools/svg/viewced.pl
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/commstools/svg/viewced.pl	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,290 @@
+# Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+my $version = "1.0 (26/4/06)";
+
+#
+# Global variables
+#
+
+%interestingTables = (
+	AccessPointTable	=> 1,
+	ProtocolTable		=> 1,
+	SCprTable			=> 1,
+	CprTable			=> 1,
+	MCprTable			=> 1,
+	TierTable			=> 1
+	);
+
+$tableName = "";
+$tableId = 0;
+$tableOfInterest = 0;
+
+$topMargin = 100;
+$leftMargin = 100;
+$verticalSpacing = 100;
+$fontSize = 15;
+$fontHeight = $fontSize;
+$fontVerticalSpacing = $fontHeight + 5;
+
+$rectWidth = $fontSize * 10 ;
+$rectFontHeightRatio = 3;
+$rectHeight = $fontHeight * $rectFontHeightRatio;
+$rectHorizSpacing = 40;
+$rectVertSpacing = 40;
+$horizontalSpacing = $rectWidth + $rectHorizSpacing;
+$verticalSpacing = $rectHeight + $rectVertSpacing;
+
+while (<>) {
+	if (/^\[/)
+		{
+		processTable($_);
+		}
+	elsif (/ADD_SECTION/)
+		{
+		processAddSection();
+		}
+	elsif (/END_ADD/)
+		{
+		processEndAdd();
+		}
+	elsif ( /FIELD_COUNT\s*=\s*/ )			# ensure this check is above the field check below
+		{
+		processFieldCount();
+		}
+	elsif ( /ADD_TEMPLATE/ )
+		{
+		processAddTemplate();
+		}
+	elsif ( /\s*(\w+)=\s*(.*)$/ )
+		{
+		processField($1, $2);
+		}
+}
+
+#printDatabase();
+outputObjects();
+
+#
+# Subroutines
+#
+
+sub processTable($)
+	{
+	($tableName) = $_;
+	$tableName =~ s/^\[(\w+)\]$/$1/;
+	chomp $tableName;
+	$tableId = 0;
+	if ($interestingTables{$tableName} == 1)
+		{
+		$tableOfInterest = 1;
+		}
+	else
+		{
+		$tableOfInterest = 0;
+		}
+	}
+	
+sub processAddSection()
+	{
+	++$tableId;
+	}
+
+sub processEndAdd()
+	{
+	}
+
+sub processAddTemplate()
+	{
+	++$tableId;
+	}
+
+sub processFieldCount()
+	{
+	}
+	
+sub processField($$)
+	{
+	my $fieldName = $_[0];
+	my $value = $_[1];
+#	print "\t\tField $tableName, $tableId, $fieldName = $value\n";
+	if ($tableOfInterest == 1)
+		{
+		$database{$tableName}[$tableId]{$fieldName} = $value;
+		}
+	}
+
+sub outputObjects()
+	{
+	openSVGFile();
+	outputDocHeader();
+	my $apCount = scalar( @{$database{AccessPointTable}} );
+	my $ap;
+	my $currentY = $topMargin;
+	for ($ap = 1 ; $ap < $apCount ; ++$ap)
+		{
+		outputAP($database{AccessPointTable}[$ap], $currentY);
+		$currentY += $verticalSpacing;
+		}
+	outputDocFooter();
+	closeSVGFile();
+	}
+
+sub outputAP($$)
+	{
+	my $ap = $_[0];
+	my $y = $_[1];
+	my $x = $leftMargin;
+	outputTextRect($x, $y, $database{ProtocolTable}[$ap->{Protocol}]{Name}, UidString($database{ProtocolTable}[$ap->{Protocol}]{ProtocolUid}));
+	$x += $horizontalSpacing;
+	outputTextRect($x, $y, $database{SCprTable}[$ap->{SCpr}]{Name}, UidString($database{SCprTable}[$ap->{SCpr}]{SCprUid}));
+	$x += $horizontalSpacing;
+	outputTextRect($x, $y, $database{CprTable}[$ap->{Cpr}]{Name}, UidString($database{CprTable}[$ap->{Cpr}]{CprUid}));
+	$x += $horizontalSpacing;
+	outputTextRect($x, $y, $database{MCprTable}[$ap->{MCpr}]{Name}, UidString($database{MCprTable}[$ap->{MCpr}]{MCprUid}));
+	$x += $horizontalSpacing;
+	outputTextRect($x, $y, $database{TierTable}[$ap->{Tier}]{TierManagerName}, UidString($database{TierTable}[$ap->{Tier}]{TierManagerUid}));
+	$x += $horizontalSpacing;
+	
+#	print "AP $ap->{Name}:\n";
+#	print "\tProtocol $ap->{Protocol} ($database{ProtocolTable}[$ap->{Protocol}]{Name})\n";
+#	print "\tSCpr $ap->{SCpr} ($database{SCprTable}[$ap->{SCpr}]{Name})\n";
+#	print "\tCpr $ap->{Cpr} ($database{CprTable}[$ap->{Cpr}]{Name})\n";
+#	print "\tMCpr $ap->{MCpr} ($database{MCprTable}[$ap->{MCpr}]{Name})\n";
+#	print "\tTier $ap->{Tier} ($database{TierTable}[$ap->{Tier}]{TierManagerName}, $database{TierTable}[$ap->{Tier}]{TierManagerUid})\n";
+	}
+
+sub UidString($)
+	{
+	my $num = $_[0];
+	return sprintf("%08x", $num);
+	}
+		
+sub printDatabase()
+	{
+	foreach $table ( keys %database )
+		{
+		print "$table:\n";
+		# entry zero is not initialised (commsdat id entries begin at 1)
+		for ($record = 1 ; $record < scalar(@{$database{$table}}) ; ++$record)
+			{
+			print "\t$record:\n";
+			foreach $field ( keys %{$database{$table}[$record]} )
+				{
+				print "\t\t$field = $database{$table}[$record]{$field}\n";
+				}
+			}
+		}
+	}
+
+sub capitaliseText($)
+	{
+	my $text = $_[0];
+	my $doCpr = 1;
+	if ($text =~ s/scpr/Scpr/)
+		{
+		$doCpr = 0;
+		};
+	if ($text =~ s/mcpr/Mcpr/)
+		{
+		$doCpr = 0;
+		};
+	$text =~ s/shim/Shim/;
+	if ($doCpr == 1)
+		{
+		$text =~ s/cpr/Cpr/;
+		}
+	return $text;
+	}
+
+#######################
+# SVG output routines
+#######################
+
+sub openSVGFile()
+	{
+	open SVG, ">ced.svg" || die "Cannot open ced.svg for writing\n";
+	}
+
+sub closeSVGFile()
+	{
+	close SVG;
+	}
+
+sub outputDocHeader()
+	{
+	my ($width,$height) = @_;
+	print SVG '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',"\n";
+	print SVG '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">',"\n";
+	print SVG "<svg height=\"$height\" width=\"$width\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n";
+	}
+
+sub outputDocFooter()
+	{
+	print SVG "</svg>\n";
+	}
+
+sub outputText($$$$)
+	{
+	my ($x,$text,$y,$anchor,$decoration,$colour) = @_;
+	
+	my $attrs = qq{ x="$x" y="$y" font-size="$fontSize"};
+	
+	if ($decoration)
+		{
+		$attrs .= qq{ text-decoration="$decoration" };
+		}
+	
+	if ($anchor)
+		{
+		$attrs .= qq { text-anchor="$anchor" };
+		}
+	
+	if ($colour)
+		{
+		if ($colour =~ s/^!//)
+			{
+			outputRect($x - 1, $y - $fontHeight, 3, $fontHeight);
+			}
+		if ($colour)
+			{
+			$attrs .= qq { fill="$colour" };
+			}
+		}
+		
+	print SVG "<text $attrs>$text</text>\n";
+	}
+
+sub outputRect($$$$)
+	{
+	my ($x,$y,$width,$height) = @_;
+	print SVG qq {<rect fill="white" stroke="black" x="$x" y="$y" width="$width" height="$height" />\n};
+	}
+
+sub	outputTextRect($$$$)
+	{
+	my $x = $_[0];
+	my $y = $_[1];
+	my $text1 = $_[2];
+	my $text2 = $_[3];
+	outputRect($x,$y,$rectWidth, $rectHeight);
+	$y += $rectHeight/$rectFontHeightRatio + $fontHeight/2;
+	outputText($x + $rectWidth/2, capitaliseText($text1), $y, "middle");	
+	if ($text2)
+		{
+		$y += $fontVerticalSpacing;
+		outputText($x + $rectWidth/2, $text2, $y, "middle");	
+		}
+	}