diff -r 000000000000 -r dfb7c4ff071f commsfwtools/commstools/svg/viewced.pl --- /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 '',"\n"; + print SVG '',"\n"; + print SVG "\n"; + } + +sub outputDocFooter() + { + print 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\n"; + } + +sub outputRect($$$$) + { + my ($x,$y,$width,$height) = @_; + print SVG qq {\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"); + } + }