--- /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");
+ }
+ }