--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv1/abld/e32util/prepdef.pl Wed Jun 30 11:35:58 2010 +0800
@@ -0,0 +1,151 @@
+#!/usr/bin/perl
+# Copyright (c) 2003-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:
+# e32toolp/e32util/prepdef.pl
+#
+#
+
+
+use FindBin; # for FindBin::Bin
+use Getopt::Long;
+
+my $PerlLibPath; # fully qualified pathname of the directory containing our Perl modules
+
+BEGIN {
+# check user has a version of perl that will cope
+ require 5.005_03;
+# establish the path to the Perl libraries: currently the same directory as this script
+ $PerlLibPath = $FindBin::Bin; # X:/epoc32/tools
+ if ($^O eq "MSWin32")
+ {
+ $PerlLibPath =~ s/\//\\/g; # X:\epoc32\tools
+ $PerlLibPath .= "\\";
+ }
+}
+
+use lib $PerlLibPath;
+use Defutl;
+
+# Version
+my $MajorVersion = 1;
+my $MinorVersion = 1;
+my $PatchVersion = 1;
+
+# THE MAIN PROGRAM SECTION
+##########################
+
+{
+
+
+ # process the command-line
+ unless (@ARGV==2 || @ARGV==3 || @ARGV==4) {
+ &Usage;
+ }
+ my ($FRZFILE,$GENFILE,$DATASWITCH,$ABSENTSYM)=@ARGV;
+
+
+
+# Read the Frozen .DEF file
+ my @FrzDataStruct;
+ my $FrzExportsOn=0;
+ eval { &Def_ReadFileL(\@FrzDataStruct, $FRZFILE, $FrzExportsOn); };
+ die $@ if $@;
+
+ eval { &WriteOutputFileL(\@FrzDataStruct, $GENFILE, $DATASWITCH, $ABSENTSYM); };
+ die $@ if $@;
+
+ exit;
+}
+
+#######################################################################
+# SUBROUTINES
+#######################################################################
+
+sub Usage () {
+
+ print(
+ "\n",
+ "PREPDEF - Prepare frozen DEF file for library generation V$MajorVersion.$MinorVersion.$PatchVersion\n",
+ "\n",
+ "PREPDEF [frozen .DEF file] [processed .DEF file] [nodatasizes] [entrypoint_name]\n",
+ "\n",
+ "\n",
+ "\n"
+ );
+ exit 1;
+}
+
+
+
+sub WriteOutputFileL ($$$$) {
+ my ($FrzStructRef, $FILE, $DATASWITCH, $ABSENTSYM)=@_;
+
+ my @Text;
+
+ if ($ABSENTSYM) {
+ $ABSENTSYM = '='.$ABSENTSYM;
+ }
+
+# Process the frozen .DEF file
+ my $FrzRef;
+ my $ExportsDeclared;
+
+# get the lines of text from the frozen .DEF file
+ foreach $FrzRef (@$FrzStructRef) {
+ next if (!$FrzRef);
+ if (!defined($$FrzRef{Ordinal})) {
+ push @Text, $$FrzRef{Line};
+ $ExportsDeclared = 1 if ($$FrzRef{Line} =~ /^\s*EXPORTS\s*(\s+\S+.*)?$/io);
+ next;
+ }
+ my $Comment='';
+ if ($$FrzRef{Comment}) {
+ $Comment=" ; $$FrzRef{Comment}";
+ }
+# Mention if it is a Data symbol along with its size.
+ my $data = "";
+ if(defined $$FrzRef{Data})
+ {
+ if ($DATASWITCH eq "nodatasizes")
+ {
+ $data = " DATA";
+ }
+ else
+ {
+ $data = " DATA $$FrzRef{Size}";
+ }
+ }
+ my $r3unused = $$FrzRef{R3Unused} ? " R3UNUSED" : "";
+ my $ord = $$FrzRef{Ordinal};
+ if ($$FrzRef{Absent}) {
+ push @Text, "\t\"_._.absent_export_$ord\"$ABSENTSYM \@ $ord NONAME$data$r3unused$Comment\n";
+ } else {
+ my $export = $$FrzRef{ExportName};
+ if ($export ne $$FrzRef{Name})
+ {
+ $export .= "=$$FrzRef{Name}";
+ }
+ push @Text, "\t$export \@ $ord NONAME$data$r3unused$Comment\n";
+ }
+ }
+ unshift @Text, "EXPORTS\n" unless ($ExportsDeclared);
+
+# add a terminating newline
+ push @Text, "\n";
+
+# write the new frozen .DEF file
+ eval { &Def_WriteFileL(\@Text, $FILE); };
+ die $@ if $@;
+}
+