--- a/bintools/evalid/EvalidCompare.pm Tue Oct 26 11:12:31 2010 +0800
+++ b/bintools/evalid/EvalidCompare.pm Wed Oct 27 19:35:19 2010 +0800
@@ -231,7 +231,7 @@
}
}
- if ($typeBuf =~ /^!<arch>\x0A(.{48}([0-9 ]{9}).\x60\x0A(......))/s) {
+ if ($typeBuf =~ /^!<arch>\x0A(.{48}([0-9 ]{9})\x60\x0A(......))/s) {
# library - could be MARM or WINS
$typeBuf = $1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/EvalidCompare.pm.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1068 @@
+#
+# 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 the License "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:
+#
+
+package EvalidCompare;
+
+use strict;
+our $VERSION = '1.00';
+use IO::Handle;
+use IO::File;
+use Cwd;
+
+use File::Temp qw/ tempfile tempdir /;
+use File::Find;
+use File::Path;
+use File::Basename;
+use File::Copy;
+
+#
+# Constants.
+#
+
+my %typeLookup = (
+ 'ARM PE-COFF executable' => 'ignore',
+ 'E32 EXE' => 'e32',
+ 'E32 DLL' => 'e32',
+ 'Uncompressed E32 EXE' => 'e32',
+ 'Uncompressed E32 DLL' => 'e32',
+ 'Compressed E32 EXE' => 'e32',
+ 'Compressed E32 DLL' => 'e32',
+ 'Intel DLL' => 'intel_pe',
+ 'Intel EXE' => 'intel_pe',
+ 'MSDOS EXE' => 'intel_pe',
+ 'Intel object' => 'intel',
+ 'Intel library' => 'intel',
+ 'ELF library' => 'elf',
+ 'ARM object' => 'arm',
+ 'ARM library' => 'arm',
+ 'unknown format' => 'identical',
+ 'Java class' => 'identical',
+ 'ZIP file' => 'zip',
+ 'Permanent File Store' => 'permanent_file_store',
+ 'SIS file' => 'identical',
+ 'MSVC database' => 'ignore',
+ 'MAP file' => 'map',
+ 'SGML file' => 'sgml',
+ 'Preprocessed text' => 'preprocessed_text',
+ 'ELF file' => 'elf',
+ 'Unknown COFF object' => 'identical',
+ 'Unknown library' => 'identical',
+ 'chm file' => 'chm_file',
+ 'Header file' => 'header',
+ 'Distribution Policy' => 'distpol'
+ );
+
+
+# %TEMPDIR% and %FILE% are magic words for the expandor
+# they will be replaced with suitable values when used
+# they also enabled an order of expandor arguments where the filename is not last
+my %typeHandler = (
+ e32 => {reader => 'elf2e32 --dump --e32input=', filter => \&Elf2E32Filter},
+ arm => {reader => 'nm --no-sort', filter => \&NmFilter, retry => 1, relative_paths => 1},
+ elf => {reader => 'elfdump -i', filter => \&ElfDumpFilter, rawretry => 1},
+ intel => {reader => '%EPOCROOT%epoc32\gcc_mingw\bin\nm --no-sort', filter => \&NmFilter, rawretry => 1, relative_paths => 1, skipstderr => 1},
+ intel_pe => {reader => 'pe_dump', filter => \&FilterNone, rawretry => 1},
+ zip => {reader => '"'.$FindBin::Bin.'/unzip" -l -v', filter => \&UnzipFilter, rawretry => 1},
+ map => {filter => \&MapFilter, skipblanks => 1},
+ sgml => {filter => \&SgmlFilter},
+ preprocessed_text => {filter => \&PreprocessedTextFilter},
+ permanent_file_store => {reader => 'pfsdump -c -v', filter => \&PermanentFileStoreFilter, rawretry => 1, relative_paths => 1},
+ ignore => {filter => \&FilterAll},
+ chm_file => {expandor => 'hh -decompile %TEMPDIR% %FILE%', rawretry => 1},
+ header => {filter => \&FilterCVSTags},
+ distpol => {filter => \&DistributionPolicyFilter}
+ );
+
+
+#
+# Globals.
+#
+
+my $log;
+my $verbose;
+my $toRoot;
+my $dumpDir;
+
+undef $dumpDir;
+
+
+#
+# Public.
+#
+
+sub CompareFiles {
+ my $file1 = shift;
+ my $file2 = shift;
+ $verbose = defined($_[0]) ? shift : 0;
+ $log = defined($_[0]) ? shift : *STDOUT;
+ # Try binary compare first (to keep semantics the same as evalid)...
+ if (DoCompareFiles($file1, $file2, 'unknown format')) {
+ return 1,'identical';
+ }
+ my $type = IdentifyFileType($file1);
+ if ($typeLookup{$type} eq 'identical') {
+ return 0,$type; # We already know a binary compare is going to return false.
+ }
+ return DoCompareFiles($file1, $file2, $type),$type;
+}
+
+sub GenerateSignature {
+ my $file = shift;
+ $dumpDir = shift;
+ $verbose = defined($_[0]) ? shift : 0;
+ $log = defined($_[0]) ? shift : *STDOUT;
+ my $md5;
+
+ if (eval "require Digest::MD5") { # Prefer Digest::MD5, if available.
+ $md5 = Digest::MD5->new();
+ } elsif (eval "require MD5") { # Try old version of MD5, if available.
+ $md5 = new MD5;
+ } elsif (eval "require Digest::Perl::MD5") { # Try Perl (Slow) version of MD5, if available.
+ $md5 = Digest::Perl::MD5->new();
+ } else {
+ die "Error: Cannot load any MD5 Modules";
+ }
+
+ my $type = IdentifyFileType($file);
+ WriteFilteredData($file, $type, $md5);
+ return $md5->hexdigest(), $type;
+}
+
+
+#
+# Private.
+#
+
+sub IdentifyFileType {
+ my $file = shift;
+ open (FILE, $file) or die "Error: Couldn't open \"$file\" for reading: $!\n";
+ binmode (FILE);
+ my $typeBuf;
+ read (FILE, $typeBuf, 512);
+ close (FILE);
+ my ($uid1, $uid2, $uid3, $checksum) = unpack "V4", $typeBuf;
+
+ # NB. Need to use the s modifier so that '.' will match \x0A
+
+ if ($typeBuf =~ /^.\x00\x00\x10.{12}EPOC.{8}(....).{12}(.)..(.)/s) {
+ # E32 Image file with a 0x100000?? UID1
+ # $2 is the flag field indicating an EXE or a DLL
+ # $3 is the flag byte indicating compressable executables
+ # $1 is the format field indicating compression type
+ # See e32tools\inc\e32image.h
+ #
+ my $typename = "E32 EXE";
+ if ((ord $2) & 0x1) {
+ $typename = "E32 DLL";
+ }
+ if ((ord $3) >= 0x1) {
+ if ((ord $1) != 0) {
+ $typename = "Compressed $typename";
+ }
+ else {
+ $typename = "Uncompressed $typename";
+ }
+ }
+ return $typename;
+ }
+
+ if ($typeBuf =~ /^\x4D\x5A.{38}\x00{20}(....)/s) {
+ # A standard 64-byte MS-DOS header with e_magic == IMAGE_DOS_SIGNATURE
+ # $1 is e_lfanew, which we expect to point to a COFF header
+
+ my $offset = unpack "V",$1;
+ if ($offset + 24 <= length $typeBuf) {
+ $typeBuf = substr $typeBuf, $offset;
+ }
+ else {
+ open FILE, $file or die "Error: Couldn't open \"$file\" for reading: $!\n";
+ binmode FILE;
+ seek FILE, $offset, 0;
+ read FILE, $typeBuf, 512;
+ close FILE;
+ }
+
+ if ($typeBuf =~ /^PE\0\0\x4c\x01.{16}(..)/s) {
+ # A PE signature "PE\0\0" followed by a COFF header with
+ # machine type IMAGE_FILE_MACHINE_I386
+ # $1 is the characteristics field
+ #
+ if ((unpack "v",$1) & 0x2000) {
+ return "Intel DLL";
+ }
+ else {
+ return "Intel EXE";
+ }
+ }
+ elsif($typeBuf =~ /^PE\0\0\0\x0a/) {
+ # A PE signature "PE\0\0" followed by ARM COFF file magic value 0xA00
+ return "ARM PE-COFF executable";
+ }
+ else {
+ return "MSDOS EXE";
+ }
+ }
+
+ if ($typeBuf =~ /^(\x4c\x01|\x00\x0A).(\x00|\x01).{4}...\x00/s) {
+ # COFF header with less than 512 sections and a symbol table
+ # at an offset no greater than 0x00ffffff
+
+ if ($1 eq "\x4c\x01") {
+ return "Intel object";
+ }
+ elsif ($1 eq "\x00\x0A") {
+ return "ARM object";
+ }
+ else {
+ return "Unknown COFF object";
+ }
+ }
+
+ if ($typeBuf =~ /^!<arch>\x0A(.{48}([0-9 ]{9})\x60\x0A(......))/s) {
+ # library - could be MARM or WINS
+
+ $typeBuf = $1;
+ my $member_start = 8;
+
+ open (FILE, $file) or die "Error: Couldn't open \"$file\" for reading: $!\n";
+ binmode (FILE);
+
+ while ($typeBuf =~ /^.{48}([0-9 ]{9})\x60\x0A(......)/s) {
+ # $1 is the size of the archive member, $2 is first 6 bytes of the file
+ # There may be several different sorts of file in the archive, and we
+ # need to scan through until we find a type we recognize:
+ # $2 == 0x0A00 would be ARM COFF, 0x014C would be Intel COFF
+ if ($2 =~ /^\x00\x0A/) {
+ close FILE;
+ return "ARM library";
+ }
+ if ($2 =~ /^\x4C\x01/) {
+ close FILE;
+ return "Intel library";
+ }
+ my $elfBuf = $2;
+ if ($2 =~ /^\x7F\x45\x4C\x46/) {
+ close FILE;
+ my $dataEncodingLib = substr($elfBuf, 5, 6);
+ if ( $dataEncodingLib =~ /^\x02/) {
+ # e_ident[EI_DATA] == 2 (Data Encoding ELFDATA2MSB - big endian)
+ # this is not supported by Elfdump hence it is treated as 'unknown format'
+ return 'unknown library';
+ }
+ else {
+ return "ELF library";
+ }
+ }
+
+ $member_start += 60 + $1;
+ if ($member_start & 0x1) {
+ $member_start += 1; # align to multiple of 2 bytes
+ }
+ seek FILE, $member_start, 0;
+ read FILE, $typeBuf, 512;
+ }
+ close FILE;
+ return "Unknown library";
+ }
+
+ if ($typeBuf =~ /^\xCA\xFE\xBA\xBE/) {
+ # Java class file - should have match as a straight binary comparison
+ return "Java class";
+ }
+
+ if ($typeBuf =~ /^PK\x03\x04/) {
+ # ZIP file
+ return "ZIP file";
+ }
+
+ if ($uid1 && $uid1==0x10000050) {
+ # Permanent File Store
+ return "Permanent File Store";
+ }
+
+ if ($uid1 && $uid2 && $uid3 && $checksum && $uid3==0x10000419) {
+ if (($uid1==0x100002c3 && $uid2==0x1000006d && $checksum==0x128ca96f) # narrow
+ || ($uid1==0x10003b0b && $uid2==0x1000006d && $checksum==0x75e21a1d) # unicode
+ || ($uid1==0x10009205 && $uid2==0x10003a12 && $checksum==0x986a0c25)) # new format
+ {
+ # SIS file
+ return "SIS file";
+ }
+ }
+
+ if ($typeBuf =~ /^Microsoft [^\x0A]+ [Dd]atabase/s) {
+ return "MSVC database";
+ }
+
+ if ($typeBuf =~ /^\S.+ needed due to / || $typeBuf =~ /^Archive member included.*because of file/) {
+ # GCC MAP file
+ return "MAP file";
+ }
+
+ if ($typeBuf =~ /Preferred load address is/) {
+ # Developer Studio MAP file
+ return "MAP file";
+ }
+
+ if ($typeBuf =~ /^Address\s+Size\s+Name\s+Subname\s+Module/) {
+ # CodeWarrior MAP file
+ return "MAP file";
+ }
+
+ if ($typeBuf =~ /^ARM Linker,/) {
+ # RVCT MAP file
+ return "MAP file";
+ }
+
+ if ($typeBuf =~ /<!DOCTYPE/i) {
+ # XML or HTML file - need to ignore javadoc generation dates
+ return "SGML file";
+ }
+
+ if ($typeBuf =~ /^# 1 ".*"(\x0D|\x0A)/s) {
+ # Output of CPP
+ return "Preprocessed text";
+ }
+
+ if ($typeBuf =~ /^\x7F\x45\x4C\x46/) {
+ my $dataEncoding = substr($typeBuf, 5, 6);
+ if ( $dataEncoding =~ /^\x02/) {
+ # e_ident[EI_DATA] == 2 (Data Encoding ELFDATA2MSB - big endian)
+ # this is not supported by Elfdump hence it is treated as 'unknown format'
+ return 'unknown format';
+ }
+ else {
+ return "ELF file";;
+ }
+ }
+
+ if ($typeBuf =~/^ITSF/) {
+ # chm file
+ return "chm file";
+ }
+
+ if ($file =~ m/\.(iby|h|hby|hrh|oby|rsg|cpp)$/i) {
+ return "Header file";
+ }
+
+ if ($file =~ /distribution\.policy$/i) {
+ return "Distribution Policy"
+ }
+
+ return 'unknown format';
+}
+
+sub WriteFilteredData {
+ my $file = shift;
+ my $type = shift;
+ my $md5 = shift;
+ my $dumpDirExpandedFile = shift;
+
+ my (@dumpDirBuffer);
+
+ unless (exists $typeLookup{$type}) {
+ die "Invalid file type \"$type\"";
+ }
+ $type = $typeLookup{$type};
+
+ # Check to see if this file type requires expanding first
+ if (exists $typeHandler{$type}->{expandor})
+ {
+ my $expandor = $typeHandler{$type}->{expandor};
+ # Create two temporary directories
+ my $tempdir = tempdir ( "EvalidExpand_XXXXXX", DIR => File::Spec->tmpdir, CLEANUP => 1);
+
+ # Build the Expandor commandline
+ $expandor =~ s/%TEMPDIR%/$tempdir/g;
+ $expandor =~ s/%FILE%/$file/g;
+
+ # Expand files
+ my $output = `$expandor 2>&1`;
+ print($log "Expanding using $expandor output was:-\n$output") if ($verbose);
+ if ($? > 0)
+ {
+ print ($log "$expandor exited with $?") if ($verbose);
+ # set type to be identical for retry if raw
+ if ($typeHandler{$type}->{rawretry} == 1)
+ {
+ $type = 'identical';
+ } else {
+ print "ERROR: failed to start $expandor (" .($?). ") - reporting failure\n";
+ }
+ } else {
+ # Process all files in $tempdir
+ my @FileList;
+ find(sub { push @FileList, $File::Find::name if (! -d);}, $tempdir);
+ foreach my $expandfile (@FileList)
+ {
+ my $dumpDirExpandedFilename = "";
+
+ if ($dumpDir)
+ {
+ $dumpDirExpandedFilename = $expandfile;
+ $dumpDirExpandedFilename =~ s/^.*EvalidExpand_\w+//;
+ $dumpDirExpandedFilename = $file.$dumpDirExpandedFilename;
+ }
+
+ my $type = IdentifyFileType($expandfile);
+
+ &WriteFilteredData($expandfile, $type, $md5, $dumpDirExpandedFilename);
+ }
+ }
+ } elsif ($type ne 'identical') {
+ unless (exists $typeHandler{$type}) {
+ die "Invalid comparison type \"$type\"";
+ }
+ my $reader = $typeHandler{$type}->{reader};
+ my $filter = $typeHandler{$type}->{filter};
+ my $retry = $typeHandler{$type}->{retry} || 0;
+ my $rawretry = $typeHandler{$type}->{rawretry} || 0;
+ my $skipblanks = $typeHandler{$type}->{skipblanks} || 0;
+ my $relativePaths = $typeHandler{$type}->{relative_paths} || 0;
+ my $dosPaths = $typeHandler{$type}->{dos_paths} || 0;
+
+ my $skipstderr = $typeHandler{$type}->{skipstderr} || 0;
+ my $redirectstd = "2>&1";
+
+ if ($skipstderr) {
+ $redirectstd = "2>NUL";
+ }
+
+ if ($relativePaths) {
+ $file = RelativePath($file);
+ }
+ if ($dosPaths) {
+ $file =~ s/\//\\/g; # convert to DOS-style backslash separators
+ }
+
+ my $raw;
+ if ($reader) {
+ $raw = IO::File->new("$reader \"$file\" $redirectstd |") or die "Error: Couldn't run \"$reader $file\": $!\n";
+ }
+ else {
+ $raw = IO::File->new("$file") or die "Error: Couldn't open \"$file\": $!\n";
+ }
+ while (my $line = <$raw>) {
+ &$filter(\$line);
+ next if $skipblanks and $line =~ /^\s*$/;
+ $md5->add($line);
+ push @dumpDirBuffer, $line if ($dumpDir);
+ }
+ Drain($raw);
+ $raw->close();
+
+ # Retry once if reader failed and reader has retry specified
+ if ((($?>>8) != 0) && ($retry == 1))
+ {
+ print "Warning: $reader failed (" .($?>>8). ") on $file - retrying\n";
+ # Reset MD5
+ $md5->reset;
+ undef @dumpDirBuffer if ($dumpDir);
+ $raw = IO::File->new("$reader \"$file\" $redirectstd |") or die "Error: Couldn't run \"$reader $file\": $!\n";
+ while (my $line = <$raw>)
+ {
+ &$filter(\$line);
+ next if $skipblanks and $line =~ /^\s*$/;
+ $md5->add($line);
+ push @dumpDirBuffer, $line if ($dumpDir);
+ }
+ Drain($raw);
+ $raw->close();
+ if (($?>>8) != 0)
+ {
+ print "Error: $reader failed again (" .($?>>8) .") on $file - reporting failure\n";
+ }
+ }
+
+ # Retry as raw if specified
+ if (($?>>8) != 0) {
+ if ($rawretry)
+ {
+ if ($reader =~ /^pfsdump/) {
+ print "Warning: $reader failed (". ($?>>8) .") on file $file - retrying as raw binary\n";
+ }
+ else {
+ print "Info: something wrong to execute $reader (". ($?>>8) .") on file $file - retrying as raw binary\n";
+ }
+ # Set type to be identical so it will try it as a raw binary stream
+ $type = 'identical';
+ } else {
+ print "Error: $reader failed (". ($?>>8) .") on file $file - not retrying as raw binary\n";
+ }
+ }
+ }
+ if ($type eq 'identical') {
+ # Reset md5 as it might have been used in reader section
+ $md5->reset;
+ undef @dumpDirBuffer if ($dumpDir);
+ # Treat 'identical' as a special case - no filtering, just write raw binary stream.
+ my $raw = IO::File->new($file) or die "Error: Couldn't open \"$file\" for reading: $!\n";
+ binmode($raw);
+ my $buf;
+ while ($raw->read($buf, 4096)) {
+ $md5->add($buf);
+ }
+ $raw->close();
+ }
+
+ my $dumpDirFilename = $file;
+ $dumpDirFilename = $dumpDirExpandedFile if ($dumpDirExpandedFile);
+ dumpDescriptiveOutput ($file, $dumpDirFilename, @dumpDirBuffer) if ($dumpDir);
+
+ # Make sure the $? is reset for the next file otherwise it will report errors
+ $? = 0;
+}
+
+sub DoCompareFiles {
+ my $file1 = shift;
+ my $file2 = shift;
+ my $type = shift;
+ my $same = 0;
+ unless (exists $typeLookup{$type}) {
+ die "Invalid file type \"$type\"";
+ }
+
+ $type = $typeLookup{$type};
+
+ # Check to see if this file type requires expanding first
+ if (exists $typeHandler{$type}->{expandor})
+ {
+ $same = &ExpandAndCompareFiles($file1, $file2, $typeHandler{$type}->{expandor});
+ # Check for Expanding error
+ if ($same == -1)
+ {
+ if ($typeHandler{$type}->{rawretry} == 1)
+ {
+ # Set type to be identical if rawrety is set
+ $type = 'identical';
+ print($log "Warning: Expandor $typeHandler{$type}->{expandor} failed for $file1 or $file2 : retrying as raw\n") if ($verbose);
+ } else {
+ die "Error: Expandor $typeHandler{$type}->{expandor} failed for $file1 or $file2\n";
+ }
+ } else {
+ return $same;
+ }
+ }
+
+ if ($type ne 'identical')
+ {
+ unless (exists $typeHandler{$type}) {
+ die "Invalid comparison type \"$type\"";
+ }
+
+ my $reader = $typeHandler{$type}->{reader};
+ my $filter = $typeHandler{$type}->{filter};
+ my $retry = $typeHandler{$type}->{retry} || 0;
+ my $skipblanks= $typeHandler{$type}->{skipblanks} || 0;
+ my $rawretry = $typeHandler{$type}->{rawretry} || 0;
+ my $relativePaths = $typeHandler{$type}->{relative_paths} || 0;
+ my $skipstderr = $typeHandler{$type}->{skipstderr} || 0;
+ my $redirectstd = "2>&1";
+
+ if ($skipstderr) {
+ $redirectstd = "2>NUL";
+ }
+
+ if ($relativePaths) {
+ $file1 = RelativePath($file1);
+ $file2 = RelativePath($file2);
+ }
+ my $fileHandle1;
+ my $fileHandle2;
+ if ($reader) {
+ $fileHandle1 = IO::File->new("$reader \"$file1\" $redirectstd |") or die "Error: Couldn't run \"$reader $file1\": $!\n";
+ $fileHandle2 = IO::File->new("$reader \"$file2\" $redirectstd |") or die "Error: Couldn't run \"$reader $file2\": $!\n";
+ }
+ else {
+ $fileHandle1 = IO::File->new("$file1") or die "Error: Couldn't open \"$file1\": $!\n";
+ $fileHandle2 = IO::File->new("$file2") or die "Error: Couldn't open \"$file2\": $!\n";
+ }
+ $same = CompareTexts($fileHandle1, $fileHandle2, $filter, $file1, $skipblanks);
+ Drain($fileHandle1, $fileHandle2);
+
+ $fileHandle1->close();
+ my $status1 = $?>>8;
+ $fileHandle2->close();
+ my $status2 = $?>>8;
+ if (($retry) && ($status1 != 0 or $status2 != 0))
+ {
+ print ($log "Warning: $reader failed ($status1, $status2) - retrying\n");
+
+ # Repeat previous code by hand, rather than calling DoCompareFiles
+ # again: if it's a systematic failure that would be a never ending loop...
+
+ $fileHandle1 = IO::File->new("$reader \"$file1\" $redirectstd |") or die "Error: Couldn't run \"$reader $file1\": $!\n";
+ $fileHandle2 = IO::File->new("$reader \"$file2\" $redirectstd |") or die "Error: Couldn't run \"$reader $file2\": $!\n";
+ $same = CompareTexts($fileHandle1, $fileHandle2, $filter, $file1, $skipblanks);
+ Drain($fileHandle1, $fileHandle2);
+ $fileHandle1->close();
+ $status1 = $?>>8;
+ $fileHandle2->close();
+ $status2 = $?>>8;
+ if ($status1 != 0 or $status2 != 0)
+ {
+ print ($log "Warning: $reader failed again ($status1, $status2) - reporting failure\n");
+ $same = 0;
+ }
+ }
+
+ # Retry as raw if specified
+ if (($rawretry)&& ($status1 != 0 or $status2 != 0))
+ {
+ if ($rawretry)
+ {
+ print ($log "Warning: $reader failed (" .($?>>8). ") on a file retrying as raw binary\n");
+ # Set type to be identical so it will try it as a raw binary stream
+ $type = 'identical';
+ } else {
+ print ($log "Error: $reader failed (" .($?>>8). ") on a file not retrying as raw binary\n");
+ }
+ }
+
+ }
+
+ if ($type eq 'identical') {
+ # Treat 'identical' as a special case - no filtering, just do raw binary stream comparison.
+ my $fileHandle1 = IO::File->new($file1) or die "Error: Couldn't open \"$file1\" for reading: $!\n";
+ my $fileHandle2 = IO::File->new($file2) or die "Error: Couldn't open \"$file2\" for reading: $!\n";
+ binmode($fileHandle1);
+ binmode($fileHandle2);
+ $same = CompareStreams($fileHandle1, $fileHandle2, $file1);
+ }
+
+ # Make sure the $? is reset for the next file otherwise it will report errors
+ $? = 0;
+
+ return $same;
+}
+
+sub CompareStreams {
+ my $fileHandle1 = shift;
+ my $fileHandle2 = shift;
+ my $filename = shift;
+ my $same = 1;
+ my $offset = -4096;
+ my $buf1;
+ my $buf2;
+ while ($same) {
+ my $len1 = $fileHandle1->read($buf1, 4096);
+ my $len2 = $fileHandle2->read($buf2, 4096);
+ if ($len1 == 0 and $len2 == 0) {
+ return 1;
+ }
+ $same = $buf1 eq $buf2;
+ $offset += 4096;
+ }
+ if ($verbose) {
+ my @bytes1 = unpack "C*", $buf1;
+ my @bytes2 = unpack "C*", $buf2;
+ foreach my $thisByte (@bytes1) {
+ if ($thisByte != $bytes2[0]) {
+ printf $log "Binary comparison: %s failed at byte %d: %02x != %02x\n", $filename, $offset, $thisByte, $bytes2[0];
+ last;
+ }
+ shift @bytes2;
+ $offset+=1;
+ }
+ }
+ return 0;
+}
+
+sub NextSignificantLine {
+ my $filehandle = shift;
+ my $linenumber = shift;
+ my $cleanersub = shift;
+ my $skipblanks = shift;
+
+ while (!eof($filehandle)) {
+ my $line = <$filehandle>;
+ $$linenumber++;
+ $cleanersub->(\$line);
+ return $line if !$skipblanks or $line !~ /^\s*$/;
+ }
+ return undef; # on eof
+}
+
+sub CompareTexts {
+ my $filehandle1 = shift;
+ my $filehandle2 = shift;
+ my $cleaner = shift;
+ my $filename = shift;
+ my $skipblanks = shift;
+ my $lineNum1 = 0;
+ my $lineNum2 = 0;
+
+ while (1) {
+ my $line1 = NextSignificantLine($filehandle1, \$lineNum1, $cleaner, $skipblanks);
+ my $line2 = NextSignificantLine($filehandle2, \$lineNum2, $cleaner, $skipblanks);
+
+ return 0 if defined($line1) != defined($line2); # eof vs. significant content
+ return 1 if !defined($line1) and !defined($line2); # eof on both files
+
+ if ($line1 ne $line2) {
+ printf($log "Text comparison: %s failed at lines %d/%d\n< %s> %s\n",
+ $filename, $lineNum1, $lineNum2, $line1, $line2) if $verbose;
+ return 0;
+ }
+ }
+}
+
+sub Drain {
+ foreach my $handle (@_) {
+ while (my $line = <$handle>) {
+ }
+ }
+}
+
+sub RelativePath {
+ my $name = shift;
+ if (($name =~ /^\\[^\\]/) || ($name =~ /^\//)) { # abs path (unix or windows), not UNC
+ unless ($toRoot) {
+ $toRoot = getcwd();
+ $toRoot =~ s/\//\\/g;
+ $toRoot =~ s/^[a-zA-Z]:\\(.*)$/$1/;
+ $toRoot =~ s/[^\\]+/../g;
+ if ($toRoot =~ /^$/) {
+ $toRoot = '.'; # because we are starting in the root
+ }
+ }
+ return $toRoot.$name;
+ }
+ return $name;
+}
+
+# Function to expand compressed formats and recompare expanded files
+# This is the file against file implementation
+# It returns one identical / non indentical result based on all files in the
+# expanded content. i.e one non identical expanded file will cause the non
+# expanded file to be reported as non identical.
+sub ExpandAndCompareFiles
+{
+ my $file1 = shift;
+ my $file2 = shift;
+ my $expandor = shift;
+
+ # Create two temporary directories
+ my $tempdir1 = tempdir ( "EvalidExpand_XXXXXX", DIR => File::Spec->tmpdir, CLEANUP => 1);
+ my $tempdir2 = tempdir ( "EvalidExpand_XXXXXX", DIR => File::Spec->tmpdir, CLEANUP => 1);
+
+ # Build the Expandor commandline
+ my $cmd1 = $expandor;
+ $cmd1 =~ s/%TEMPDIR%/$tempdir1/g;
+ $cmd1 =~ s/%FILE%/$file1/g;
+
+ my $cmd2 = $expandor;
+ $cmd2 =~ s/%TEMPDIR%/$tempdir2/g;
+ $cmd2 =~ s/%FILE%/$file2/g;
+
+ # Expand files
+ my $output = `$cmd1 2>&1`;
+ print($log "Expanding using $cmd1 output was:-\n$output") if ($verbose);
+ if ($? > 0)
+ {
+ print ($log "$cmd1 exited with $?") if ($verbose);
+ return -1;
+ }
+
+ $output = `$cmd2 2>&1`;
+ print($log "Expanding using $cmd2 output was:-\n$output") if ($verbose);
+ if ($? > 0)
+ {
+ print ($log "$cmd2 exited with $?") if ($verbose);
+ return -1;
+ }
+
+ # Produce full filelist of expanded files without directory names
+ my %iFileList1;
+ $tempdir1 =~ s#\\#/#g; # Make sure the dir seperators are / for consistent and easier matching.
+ find sub {
+ if (!-d)
+ {
+ my ($fixedpath) = $File::Find::name;
+ $fixedpath =~ s#\\#/#g;
+ my ($relpath) = $File::Find::name =~ /$tempdir1(.*)/i;
+ $iFileList1{$relpath} = "left";
+ }
+ }, $tempdir1;
+
+ my %iFileList2;
+ $tempdir2 =~ s#\\#/#g; # Make sure the dir seperators are / for consistent and easier matching.
+ find sub {
+ if (!-d)
+ {
+ my ($fixedpath) = $File::Find::name;
+ $fixedpath =~ s#\\#/#g;
+ my ($relpath) = $File::Find::name =~ /$tempdir2(.*)/i;
+ $iFileList2{$relpath} = "right";
+ }
+ }, $tempdir2;
+
+ #Work out the if the two file lists are different
+ foreach my $file (sort keys %iFileList1)
+ {
+ if (! defined $iFileList2{$file})
+ {
+ # If the filename does not exist in the second filelist the compressed files cannot be the same.
+ print ($log "Did not find $file in $file2\n") if ($verbose);
+ return 0;
+ } else {
+ delete $iFileList2{$file}
+ }
+ }
+
+ # There are extra files in the second compressed file therefore the compressed files cannot be the same.
+ if (scalar(keys %iFileList2) > 0)
+ {
+ print ($log "$file2 contained more files than $file1\n") if ($verbose);
+ return 0;
+ }
+
+ print($log "Comparing content\n") if ($verbose);
+ #filelist1 and filelist2 contain all the same filenames, now compare the contents of each file
+ my $same = -1; # Variable to store collated result of comparison, assume an error
+ foreach my $file (keys %iFileList1)
+ {
+ my $type;
+ ($same, $type) = CompareFiles($tempdir1.$file,$tempdir2.$file, $verbose, $log);
+ print ($log "Comparing $tempdir1.$file against $tempdir2.$file\n") if ($verbose);
+ last if ($same == 0); # do not bother comparing more files if one of the expanded files is different.
+ }
+
+ #Cleanup the temporary directories
+ rmtree([$tempdir1,$tempdir2]);
+
+ return $same;
+}
+
+# Create descriptive versions of input files in response to the -d option to MD5 generation
+sub dumpDescriptiveOutput ($$@)
+ {
+ my ($originalFile, $dumpDirFile, @content) = @_;
+
+ my $currentDir = cwd;
+ my $drive = "";
+ $dumpDirFile =~ s/^.://; # Remove drive letter
+
+ $drive = $1 if ($currentDir =~ /^(\w{1}:)\//);
+
+ my $DUMPFILE = $dumpDir;
+ $DUMPFILE = cwd."\\$dumpDir" if ($dumpDir !~ /^(\\|\/|\w{1}:\\)/);
+ $DUMPFILE = $drive.$dumpDir if ($dumpDir =~ /^\\/);
+ $DUMPFILE .= "\\" if ($DUMPFILE !~ /(\\|\/)$/);
+ $DUMPFILE .= $dumpDirFile;
+ $DUMPFILE =~ s/\//\\/g;
+
+ # This is most likely to come about due to maintaining path structures in expanded archives e.g. .chm files
+ if (length ($DUMPFILE) > 255)
+ {
+ print ("Warning: Not attempting to create \"$DUMPFILE\" as it exceeds Windows MAX_PATH limit.\n");
+ return;
+ }
+
+ mkpath (dirname ($DUMPFILE));
+
+ my $success = 0;
+
+ if (@content)
+ {
+ if (open DUMPFILE, "> $DUMPFILE")
+ {
+ print DUMPFILE $_ foreach (@content);
+ close DUMPFILE;
+ $success = 1;
+ }
+ }
+ else
+ {
+ $success = 1 if (copy ($originalFile, $DUMPFILE));
+ }
+
+ print ("Warning: Cannot create \"$DUMPFILE\".\n") if (!$success);
+ }
+
+
+#
+# Filters.
+#
+
+sub Elf2E32Filter {
+ my $line = shift;
+ if ($$line =~ /Time Stamp:|E32ImageFile|Header CRC:/) { # Ignore time stamps, file name and Header CRC which uses the timestamp.
+ $$line = '';
+ }
+ if ($$line =~ /imports from /) {
+ $$line = lc $$line; # DLL names are not case-sensitive in the Symbian platform loader
+ }
+}
+
+sub ElfDumpFilter {
+ my $line = shift;
+ $$line =~ s/^\tProgram header offset.*$/Program header offset/;
+ $$line =~ s/^\tSection header offset.*$/Section header offset/;
+ $$line =~ s/#<DLL>(\S+\.\S+)#<\\DLL>/#<DLL>\L$1\E#<\\DLL>/; # DLL names are not case-sensitive in the Symbian platform loader
+ if ($$line =~ /^\.(rel\.)?debug_/) {
+ $$line = ''; # additional debug-related information - not considered significant
+ }
+}
+
+sub NmFilter {
+ my $line = shift;
+ $$line =~ s/^.*:$//; # ignore the filenames
+ $$line =~ s/\.\.\\[^(]*\\//g;
+ $$line =~ s/\.\.\/[^(]*\///g; # ignore pathnames of object files
+ $$line =~ s/^BFD: (.*)$//; # ignore the Binary File Descriptor(BFD) warning messages
+ if ($$line =~ /^(.+ (_head|_))\w+_(EPOC32_\w+(_LIB|_iname))$/i) {
+ # dlltool uses the "-o" argument string as the basis for a "unique symbol", but
+ # doesn't turn the name into a canonical form first.
+ # dh.o:
+ # U ________EPOC32_RELEASE_ARM4_UREL_EIKCOCTL_LIB_iname
+ # 00000000 ? _head_______EPOC32_RELEASE_ARM4_UREL_EIKCOCTL_LIB
+ $$line = uc "$1_..._$3\n";
+ }
+}
+
+
+sub MapFilter {
+ my $line = shift;
+ $$line =~ s/([d-z])\d*s_?\d+\.o/$1s999.o/; # ignore the names of intermediate files in .LIB
+ $$line =~ s/([d-z])\d*([ht])\.o/$1$2.o/; # ignore the names of intermediate files in .LIB
+ $$line =~ s-/-\\-go; # convert / into \
+ $$line =~ s/(\.\.\\|.:\\)[^(]*\\//g; # ignore pathnames of object files
+ $$line =~ s/\.stab.*$//; # ignore .stab and .stabstr lines
+ $$line =~ s/0x.*size before relaxing//; # ignore additional comments about .stab and .stabstr
+ $$line =~ s/(_head|_)\w+_(EPOC32_\w+(_LIB|_iname))/$1_,,,_$3/; # dlltool-generated unique symbols
+ $$line =~ s/Timestamp is .*$//; # ignore timestamps in DevStudio map files
+ if ($$line =~ /^ARM Linker,/) {
+ $$line = '';
+ } # ignore the message that armlink's license will expire. (in RVCT MAP file)
+ if ($$line =~ /^Your license/) {
+ $$line = '';
+ }
+ $$line =~ s/\s__T\d{8}\s/ __Tnnnnnnnn /; # ignore RVCT generated internal symbols
+ if ($$line =~ /0x00000000 Number 0 /) { # ignore filenames in RVCT link maps
+ $$line = '';
+ }
+
+ # Ignore various case differences:
+
+ ## RVCT
+
+ # source filenames turning up in mangled symbols e.g.:
+ # __sti___13_BALServer_cpp 0x000087c9 Thumb Code 52 BALServer.o(.text)
+ $$line =~ s/^(\s+__sti___\d+_)(\w+)(.*\(\.text\))$/$1\L$2\E$3/;
+
+ # object filenames e.g.:
+ # .text 0x0000a01c Section 164 AssertE.o(.text)
+ $$line =~ s/^(\s+\.text\s+0x[0-9A-Fa-f]{8}\s+Section\s+\d+\s+)(.+)(\(\.text\))$/$1\L$2\E$3/;
+
+ ## WINSCW
+
+ # import/static libraries processed listed in the last section e.g.:
+ #1 EDLL.LIB
+ #99 EDLL.LIB (not used)
+ $$line =~ s/^(\d{1,2} {5,6})(\w+\.lib)( \(not used\)|)$/$1\L$2\E$3/i;
+}
+
+sub UnzipFilter {
+ my $line = shift;
+ $$line =~ s/^Archive:.*$/Archive/; # ignore the archive names
+ # Line format of unzip -l -v
+ # Length Method Size Ratio Date Time CRC-32 Name, Date can be dd-mm-yy or mm/dd/yy
+ $$line =~ s/ (\d+).*? ..-..-..\s+..:.. / ($1) 99-99-99 99:99 /; # ignore (Method Size Ratio Date Time) on contained files
+ $$line =~ s^ (\d+).*? ..\/..\/..\s+..:.. ^ ($1) 99-99-99 99:99 ^; # ignore (Method Size Ratio Date Time) on contained files
+}
+
+sub SgmlFilter {
+ my $line = shift;
+ $$line =~ s/<!--.*-->//; # ignore comments such as "generated by javadoc"
+}
+
+sub PreprocessedTextFilter {
+ my $line = shift;
+ $$line =~ s/^# \d+ ".*"( \d)?$//; # ignore #include history
+}
+
+sub FilterCVSTags {
+ my $line = shift;
+ $$line =~ s#//\s+\$(?:Id|Name|Header|Date|DateTime|Change|File|Revision|Author):.*\$$##m;
+ # Remove tags like:
+ # // $Id: //my/perforce/here $
+ # which may be inserted into source code by some licensees
+}
+
+sub PermanentFileStoreFilter {
+ my $line = shift;
+ $$line =~ s/^Dumping .*$/Dumping (file)/; # ignore the source file names
+}
+
+sub DistributionPolicyFilter {
+ my $line = shift;
+ $$line =~ s/# DistPolGen.*//;
+}
+
+sub FilterAll {
+ my $line = shift;
+ $$line = '';
+}
+
+sub FilterNone {
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+EvalidCompare.pm - Utilities for comparing the contents of files.
+
+=head1 DESCRIPTION
+
+This package has been largely factored out of the C<e32toolp> tool C<evalid>. The main pieces of borrowed functionality are the ability to identify file types by examining their content, and the ability to filter irrelevant data out of files to allow comparisons to be performed. This refactoring was done in order to allow both direct and indirect comparisons of files to be supported. Direct comparisions are done by reading a pair of files (in the same way the C<evalid> does). Indirect comparisons are done by generating MD5 signatures of the files to be compared. The later method allows comparisons to be performed much more efficiently, because only one file need be present provided the signature of the other is known.
+
+=head1 INTERFACE
+
+=head2 CompareFiles
+
+Expects to be passed a pair of file names. May optionally also be passed a verbosity level (defaults to 0) and a file handle for logging purposes (defaults to *STDIN). Returns 1 if the files match, 0 if not. Firstly does a raw binary compare of the two files. If they match, no further processing is done and 1 is returned. If not, the type of the first file is found and the files are re-compared, this time ignoring data known to be irrelevant for the file type. The result of this compare is then returned.
+
+=head2 GenerateSignature
+
+Expects to be passed a file name. May optionally also be passed a verbosity level (defaults to 0) and a file handle for logging purposes (defaults to *STDIN). Returns an MD5 signature of the specified file contents, having ignored irrelevant data associted with its type. This signature may subsequently be used to verify that the contents of the file has not been altered in a significant way.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+
+=cut
+
+__END__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/evalid.lis Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,118 @@
+OK: left\ok\CHM_file\identical\file.chm and right\ok\CHM_file\identical\file.chm (identical)
+OK: left\ok\CHM_file\rebuilt\file.chm and right\ok\CHM_file\rebuilt\file.chm (chm file)
+OK: left\ok\E32_EXE\case_diff\armv5\udeb\usestaticdll.exe and right\ok\E32_EXE\case_diff\armv5\udeb\usestaticdll.exe (Compressed E32 EXE)
+OK: left\ok\E32_EXE\case_diff\armv5\urel\usestaticdll.exe and right\ok\E32_EXE\case_diff\armv5\urel\usestaticdll.exe (Compressed E32 EXE)
+OK: left\ok\ELF_library\case_diff\armv5\createstaticdll.lib and right\ok\ELF_library\case_diff\armv5\createstaticdll.lib (ELF library)
+OK: left\ok\identical\console.ini and right\ok\identical\console.ini (identical)
+OK: left\ok\Intel_DLL\winscw\udeb\ALARMSHARED.DLL and right\ok\Intel_DLL\winscw\udeb\ALARMSHARED.DLL (Intel DLL)
+OK: left\ok\Intel_DLL\winscw\urel\ALARMSHARED.DLL and right\ok\Intel_DLL\winscw\urel\ALARMSHARED.DLL (Intel DLL)
+OK: left\ok\Intel_exe\wins\urel\E32STRT.EXE and right\ok\Intel_exe\wins\urel\E32STRT.EXE (Intel EXE)
+OK: left\ok\Intel_exe\winscw\udeb\AlarmServer.exe and right\ok\Intel_exe\winscw\udeb\AlarmServer.exe (Intel EXE)
+OK: left\ok\Intel_exe\winscw\urel\E32STRT.EXE and right\ok\Intel_exe\winscw\urel\E32STRT.EXE (Intel EXE)
+OK: left\ok\Intel_library\wins\udeb\ALARMSHARED.LIB and right\ok\Intel_library\wins\udeb\ALARMSHARED.LIB (Intel library)
+OK: left\ok\Intel_library\wins\udeb\EEXE.LIB and right\ok\Intel_library\wins\udeb\EEXE.LIB (Intel library)
+OK: left\ok\Intel_library\wins\urel\EEXE.LIB and right\ok\Intel_library\wins\urel\EEXE.LIB (Intel library)
+OK: left\ok\Intel_library\winscw\udeb\ALARMSHARED.LIB and right\ok\Intel_library\winscw\udeb\ALARMSHARED.LIB (Intel library)
+OK: left\ok\Intel_library\winscw\udeb\EEXE.LIB and right\ok\Intel_library\winscw\udeb\EEXE.LIB (Intel library)
+OK: left\ok\Intel_library\winscw\urel\EEXE.LIB and right\ok\Intel_library\winscw\urel\EEXE.LIB (Intel library)
+OK: left\ok\Intel_object\FNTTRAN.exp and right\ok\Intel_object\FNTTRAN.exp (Intel object)
+OK: left\ok\MAP_file\arm4\udeb\ALARMSHARED.DLL.map and right\ok\MAP_file\arm4\udeb\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\arm4\udeb\E32STRT.EXE.map and right\ok\MAP_file\arm4\udeb\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\arm4\urel\ALARMSHARED.DLL.map and right\ok\MAP_file\arm4\urel\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\arm4\urel\E32STRT.EXE.map and right\ok\MAP_file\arm4\urel\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\thumb\udeb\ALARMSHARED.DLL.map and right\ok\MAP_file\thumb\udeb\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\thumb\udeb\E32STRT.EXE.map and right\ok\MAP_file\thumb\udeb\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\thumb\urel\ALARMSHARED.DLL.map and right\ok\MAP_file\thumb\urel\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\thumb\urel\E32STRT.EXE.map and right\ok\MAP_file\thumb\urel\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\winscw\urel\ALARMSHARED.DLL.map and right\ok\MAP_file\winscw\urel\ALARMSHARED.DLL.map (identical)
+OK: left\ok\MAP_file\winscw\urel\E32STRT.EXE.map and right\ok\MAP_file\winscw\urel\E32STRT.EXE.map (identical)
+OK: left\ok\Preprocessed_text\IRCOMM.rpp and right\ok\Preprocessed_text\IRCOMM.rpp (Preprocessed text)
+OK: left\ok\SGML_file\allclasses-frame.html and right\ok\SGML_file\allclasses-frame.html (SGML file)
+
+Results of evalid left\ok right\ok
+
+17 failed comparisons
+
+FAILED: left\ok\Compressed_E32_DLL\arm4\udeb\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\arm4\udeb\ALARMSHARED.DLL (Uncompressed E32 DLL)
+FAILED: left\ok\Compressed_E32_DLL\arm4\urel\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\arm4\urel\ALARMSHARED.DLL (Uncompressed E32 DLL)
+FAILED: left\ok\Compressed_E32_DLL\thumb\udeb\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\thumb\udeb\ALARMSHARED.DLL (Uncompressed E32 DLL)
+FAILED: left\ok\Compressed_E32_DLL\thumb\urel\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\thumb\urel\ALARMSHARED.DLL (Uncompressed E32 DLL)
+FAILED: left\ok\Compressed_E32_EXE\arm4\udeb\E32STRT.EXE and right\ok\Compressed_E32_EXE\arm4\udeb\E32STRT.EXE (Uncompressed E32 EXE)
+FAILED: left\ok\Compressed_E32_EXE\arm4\urel\E32STRT.EXE and right\ok\Compressed_E32_EXE\arm4\urel\E32STRT.EXE (Uncompressed E32 EXE)
+FAILED: left\ok\Compressed_E32_EXE\thumb\udeb\E32STRT.EXE and right\ok\Compressed_E32_EXE\thumb\udeb\E32STRT.EXE (Uncompressed E32 EXE)
+FAILED: left\ok\Compressed_E32_EXE\thumb\urel\E32STRT.EXE and right\ok\Compressed_E32_EXE\thumb\urel\E32STRT.EXE (Uncompressed E32 EXE)
+FAILED: left\ok\E32_DLL\arm4\udeb\ALARMSHARED.DLL and right\ok\E32_DLL\arm4\udeb\ALARMSHARED.DLL (E32 DLL)
+FAILED: left\ok\E32_DLL\arm4\urel\ALARMSHARED.DLL and right\ok\E32_DLL\arm4\urel\ALARMSHARED.DLL (E32 DLL)
+FAILED: left\ok\E32_DLL\thumb\udeb\ALARMSHARED.DLL and right\ok\E32_DLL\thumb\udeb\ALARMSHARED.DLL (E32 DLL)
+FAILED: left\ok\E32_DLL\thumb\urel\ALARMSHARED.DLL and right\ok\E32_DLL\thumb\urel\ALARMSHARED.DLL (E32 DLL)
+FAILED: left\ok\E32_EXE\arm4\udeb\ALARMSERVER.EXE and right\ok\E32_EXE\arm4\udeb\ALARMSERVER.EXE (E32 EXE)
+FAILED: left\ok\E32_EXE\arm4\urel\ALARMSERVER.EXE and right\ok\E32_EXE\arm4\urel\ALARMSERVER.EXE (E32 EXE)
+FAILED: left\ok\E32_EXE\thumb\udeb\ALARMSERVER.EXE and right\ok\E32_EXE\thumb\udeb\ALARMSERVER.EXE (E32 EXE)
+FAILED: left\ok\E32_EXE\thumb\urel\ALARMSERVER.EXE and right\ok\E32_EXE\thumb\urel\ALARMSERVER.EXE (E32 EXE)
+FAILED: left\ok\ZIP_file\aifapp_ResourceBundles.jar and right\ok\ZIP_file\aifapp_ResourceBundles.jar (ZIP file)
+
+----------------
+15:21 16/04/2010
+evalid left\ok right\ok
+Failed 17 of 47 comparisons
+----------------
+
+OK: left\ok\CHM_file\identical\file.chm and right\ok\CHM_file\identical\file.chm (identical)
+OK: left\ok\CHM_file\rebuilt\file.chm and right\ok\CHM_file\rebuilt\file.chm (chm file)
+OK: left\ok\Compressed_E32_DLL\arm4\udeb\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\arm4\udeb\ALARMSHARED.DLL (Uncompressed E32 DLL)
+OK: left\ok\Compressed_E32_DLL\arm4\urel\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\arm4\urel\ALARMSHARED.DLL (Uncompressed E32 DLL)
+OK: left\ok\Compressed_E32_DLL\thumb\udeb\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\thumb\udeb\ALARMSHARED.DLL (Uncompressed E32 DLL)
+OK: left\ok\Compressed_E32_DLL\thumb\urel\ALARMSHARED.DLL and right\ok\Compressed_E32_DLL\thumb\urel\ALARMSHARED.DLL (Uncompressed E32 DLL)
+OK: left\ok\Compressed_E32_EXE\arm4\udeb\E32STRT.EXE and right\ok\Compressed_E32_EXE\arm4\udeb\E32STRT.EXE (Uncompressed E32 EXE)
+OK: left\ok\Compressed_E32_EXE\arm4\urel\E32STRT.EXE and right\ok\Compressed_E32_EXE\arm4\urel\E32STRT.EXE (Uncompressed E32 EXE)
+OK: left\ok\Compressed_E32_EXE\thumb\udeb\E32STRT.EXE and right\ok\Compressed_E32_EXE\thumb\udeb\E32STRT.EXE (Uncompressed E32 EXE)
+OK: left\ok\Compressed_E32_EXE\thumb\urel\E32STRT.EXE and right\ok\Compressed_E32_EXE\thumb\urel\E32STRT.EXE (Uncompressed E32 EXE)
+OK: left\ok\E32_DLL\arm4\udeb\ALARMSHARED.DLL and right\ok\E32_DLL\arm4\udeb\ALARMSHARED.DLL (E32 DLL)
+OK: left\ok\E32_DLL\arm4\urel\ALARMSHARED.DLL and right\ok\E32_DLL\arm4\urel\ALARMSHARED.DLL (E32 DLL)
+OK: left\ok\E32_DLL\thumb\udeb\ALARMSHARED.DLL and right\ok\E32_DLL\thumb\udeb\ALARMSHARED.DLL (E32 DLL)
+OK: left\ok\E32_DLL\thumb\urel\ALARMSHARED.DLL and right\ok\E32_DLL\thumb\urel\ALARMSHARED.DLL (E32 DLL)
+OK: left\ok\E32_EXE\arm4\udeb\ALARMSERVER.EXE and right\ok\E32_EXE\arm4\udeb\ALARMSERVER.EXE (E32 EXE)
+OK: left\ok\E32_EXE\arm4\urel\ALARMSERVER.EXE and right\ok\E32_EXE\arm4\urel\ALARMSERVER.EXE (E32 EXE)
+OK: left\ok\E32_EXE\case_diff\armv5\udeb\usestaticdll.exe and right\ok\E32_EXE\case_diff\armv5\udeb\usestaticdll.exe (Compressed E32 EXE)
+OK: left\ok\E32_EXE\case_diff\armv5\urel\usestaticdll.exe and right\ok\E32_EXE\case_diff\armv5\urel\usestaticdll.exe (Compressed E32 EXE)
+OK: left\ok\E32_EXE\thumb\udeb\ALARMSERVER.EXE and right\ok\E32_EXE\thumb\udeb\ALARMSERVER.EXE (E32 EXE)
+OK: left\ok\E32_EXE\thumb\urel\ALARMSERVER.EXE and right\ok\E32_EXE\thumb\urel\ALARMSERVER.EXE (E32 EXE)
+OK: left\ok\ELF_library\case_diff\armv5\createstaticdll.lib and right\ok\ELF_library\case_diff\armv5\createstaticdll.lib (ELF library)
+OK: left\ok\identical\console.ini and right\ok\identical\console.ini (identical)
+OK: left\ok\Intel_DLL\winscw\udeb\ALARMSHARED.DLL and right\ok\Intel_DLL\winscw\udeb\ALARMSHARED.DLL (Intel DLL)
+OK: left\ok\Intel_DLL\winscw\urel\ALARMSHARED.DLL and right\ok\Intel_DLL\winscw\urel\ALARMSHARED.DLL (Intel DLL)
+OK: left\ok\Intel_exe\wins\urel\E32STRT.EXE and right\ok\Intel_exe\wins\urel\E32STRT.EXE (Intel EXE)
+OK: left\ok\Intel_exe\winscw\udeb\AlarmServer.exe and right\ok\Intel_exe\winscw\udeb\AlarmServer.exe (Intel EXE)
+OK: left\ok\Intel_exe\winscw\urel\E32STRT.EXE and right\ok\Intel_exe\winscw\urel\E32STRT.EXE (Intel EXE)
+OK: left\ok\Intel_library\wins\udeb\ALARMSHARED.LIB and right\ok\Intel_library\wins\udeb\ALARMSHARED.LIB (Intel library)
+OK: left\ok\Intel_library\wins\udeb\EEXE.LIB and right\ok\Intel_library\wins\udeb\EEXE.LIB (Intel library)
+OK: left\ok\Intel_library\wins\urel\EEXE.LIB and right\ok\Intel_library\wins\urel\EEXE.LIB (Intel library)
+OK: left\ok\Intel_library\winscw\udeb\ALARMSHARED.LIB and right\ok\Intel_library\winscw\udeb\ALARMSHARED.LIB (Intel library)
+OK: left\ok\Intel_library\winscw\udeb\EEXE.LIB and right\ok\Intel_library\winscw\udeb\EEXE.LIB (Intel library)
+OK: left\ok\Intel_library\winscw\urel\EEXE.LIB and right\ok\Intel_library\winscw\urel\EEXE.LIB (Intel library)
+OK: left\ok\Intel_object\FNTTRAN.exp and right\ok\Intel_object\FNTTRAN.exp (Intel object)
+OK: left\ok\MAP_file\arm4\udeb\ALARMSHARED.DLL.map and right\ok\MAP_file\arm4\udeb\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\arm4\udeb\E32STRT.EXE.map and right\ok\MAP_file\arm4\udeb\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\arm4\urel\ALARMSHARED.DLL.map and right\ok\MAP_file\arm4\urel\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\arm4\urel\E32STRT.EXE.map and right\ok\MAP_file\arm4\urel\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\thumb\udeb\ALARMSHARED.DLL.map and right\ok\MAP_file\thumb\udeb\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\thumb\udeb\E32STRT.EXE.map and right\ok\MAP_file\thumb\udeb\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\thumb\urel\ALARMSHARED.DLL.map and right\ok\MAP_file\thumb\urel\ALARMSHARED.DLL.map (MAP file)
+OK: left\ok\MAP_file\thumb\urel\E32STRT.EXE.map and right\ok\MAP_file\thumb\urel\E32STRT.EXE.map (MAP file)
+OK: left\ok\MAP_file\winscw\urel\ALARMSHARED.DLL.map and right\ok\MAP_file\winscw\urel\ALARMSHARED.DLL.map (identical)
+OK: left\ok\MAP_file\winscw\urel\E32STRT.EXE.map and right\ok\MAP_file\winscw\urel\E32STRT.EXE.map (identical)
+OK: left\ok\Preprocessed_text\IRCOMM.rpp and right\ok\Preprocessed_text\IRCOMM.rpp (Preprocessed text)
+OK: left\ok\SGML_file\allclasses-frame.html and right\ok\SGML_file\allclasses-frame.html (SGML file)
+
+Results of evalid left\ok right\ok
+
+1 failed comparisons
+
+FAILED: left\ok\ZIP_file\aifapp_ResourceBundles.jar and right\ok\ZIP_file\aifapp_ResourceBundles.jar (ZIP file)
+
+----------------
+15:22 16/04/2010
+evalid left\ok right\ok
+Failed 1 of 47 comparisons
+----------------
+
Binary file bintools/evalid/left/fail/CHM_file/content/file.chm has changed
Binary file bintools/evalid/left/fail/CHM_file/less_files/filelist.chm has changed
Binary file bintools/evalid/left/fail/CHM_file/more_files/filelist.chm has changed
Binary file bintools/evalid/left/fail/Intel_DLL/wins/udeb/C32.DLL has changed
Binary file bintools/evalid/left/fail/Intel_DLL/wins/urel/BAFL.DLL has changed
Binary file bintools/evalid/left/fail/Intel_DLL/winscw_data.dll has changed
Binary file bintools/evalid/left/fail/Intel_DLL/winscw_export.dll has changed
Binary file bintools/evalid/left/fail/Intel_DLL/winscw_import.dll has changed
Binary file bintools/evalid/left/fail/Intel_DLL/winscw_rdata.dll has changed
Binary file bintools/evalid/left/fail/Intel_DLL/winscw_text.dll has changed
Binary file bintools/evalid/left/fail/Intel_DLL/winscw_uid.dll has changed
Binary file bintools/evalid/left/fail/Intel_EXE/winscw_data.exe has changed
Binary file bintools/evalid/left/fail/Intel_EXE/winscw_import.exe has changed
Binary file bintools/evalid/left/fail/Intel_EXE/winscw_rdata.exe has changed
Binary file bintools/evalid/left/fail/Intel_EXE/winscw_text.exe has changed
Binary file bintools/evalid/left/fail/Intel_EXE/winscw_uid.exe has changed
Binary file bintools/evalid/left/fail/Intel_library/symbol.lib has changed
Binary file bintools/evalid/left/fail/Intel_object/symbol.obj has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/MAP_file/offset.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o) (_head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o) (________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o) (_head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o) (___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001048 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ 0x10003000 _head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ 0x10003014 _head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ 0x10003104 ___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ 0x10003124 ________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/MAP_file/size.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o) (_head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o) (________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o) (_head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o) (___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001048 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ 0x10003000 _head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ 0x10003014 _head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ 0x10003104 ___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ 0x10003124 ________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/MAP_file/symbol.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o) (_head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o) (________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o) (_head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o) (___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001048 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ 0x10003000 _head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ 0x10003014 _head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ 0x10003104 ___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ 0x10003124 ________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/MAP_file/winscw_offset.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,145 @@
+Address Size Name Subname Module
+
+40701000 0000003d .text ASSHDALARM.o(??0TASShdAlarm@@QAE@XZ)
+4070103d 00000107 .text ASSHDALARM.o(?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z)
+40701144 000000dc .text ASSHDALARM.o(?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z)
+40701220 000000a2 .text ASSHDALARM.o(?Reset@TASShdAlarm@@QAEXXZ)
+407012c2 00000003 .text ASSHDDLL.o(?E32Dll@@YAHW4TDllReason@@@Z)
+407012c6 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+407012cc 00000006 .text ESTOR.dll(?ReadUint16L@RReadStream@@QAEGXZ)
+407012d2 00000006 .text ESTOR.dll(?ReadInt8L@RReadStream@@QAECXZ)
+407012d8 00000006 .text ESTOR.dll(?ReadInt32L@RReadStream@@QAEJXZ)
+407012de 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+407012e4 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+407012ea 00000006 .text ESTOR.dll(?ReadInt16L@RReadStream@@QAEFXZ)
+407012f0 00000006 .text ESTOR.dll(?WriteUint16L@RWriteStream@@QAEXI@Z)
+407012f6 00000006 .text ESTOR.dll(?WriteInt8L@RWriteStream@@QAEXH@Z)
+407012fc 00000006 .text ESTOR.dll(?WriteInt32L@RWriteStream@@QAEXJ@Z)
+40701302 00000006 .text ESTOR.dll(?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+40701308 00000006 .text ESTOR.dll(?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+4070130e 00000006 .text ESTOR.dll(?WriteInt16L@RWriteStream@@QAEXH@Z)
+40701314 00000006 .text EUSER.dll(?NullTTime@Time@@SA?AVTTime@@XZ)
+4070131a 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+40701320 00000020 .text UP_DLL.obj(?initTable@@YAXPAP6AXXZ0@Z)
+40701340 000000a7 .text UP_DLL.obj(?_E32Dll@@YGHPAXI0@Z)
+407013e8 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+40702000 0000001c .data ASSHDALARM.o
+40702020 00000018 .data ASSHDDLL.o
+40702038 00000018 .data uid.o
+40702050 00000018 .data UP_DLL.obj
+40702068 00000010 .data UP_DLL.obj
+40703000 0000000c .E32_UID uid.o
+40704000 00000014 .idata $2 ESTOR.dll
+40704014 00000014 .idata $2 EUSER.dll
+40704028 00000014 .idata $3 EUSER.dll
+4070403c 00000004 .idata $4 ESTOR.dll
+40704040 00000004 .idata $4 ESTOR.dll
+40704044 00000004 .idata $4 ESTOR.dll
+40704048 00000004 .idata $4 ESTOR.dll
+4070404c 00000004 .idata $4 ESTOR.dll
+40704050 00000004 .idata $4 ESTOR.dll
+40704054 00000004 .idata $4 ESTOR.dll
+40704058 00000004 .idata $4 ESTOR.dll
+4070405c 00000004 .idata $4 ESTOR.dll
+40704060 00000004 .idata $4 ESTOR.dll
+40704064 00000004 .idata $4 ESTOR.dll
+40704068 00000004 .idata $4 ESTOR.dll
+4070406c 00000004 .idata $4 ESTOR.dll
+40704070 00000004 .idata $4 EUSER.dll
+40704074 00000004 .idata $4 EUSER.dll
+40704078 00000004 .idata $4 EUSER.dll
+4070407c 00000004 .idata $4 EUSER.dll
+40704080 00000004 .idata $4 EUSER.dll
+40704084 00000004 .idata $5 ESTOR.dll(__imp_?ReadUint16L@RReadStream@@QAEGXZ)
+40704088 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt8L@RReadStream@@QAECXZ)
+4070408c 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt32L@RReadStream@@QAEJXZ)
+40704090 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+40704094 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+40704098 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt16L@RReadStream@@QAEFXZ)
+4070409c 00000004 .idata $5 ESTOR.dll(__imp_?WriteUint16L@RWriteStream@@QAEXI@Z)
+407040a0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt8L@RWriteStream@@QAEXH@Z)
+407040a4 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt32L@RWriteStream@@QAEXJ@Z)
+407040a8 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+407040ac 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+407040b0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt16L@RWriteStream@@QAEXH@Z)
+407040b4 00000004 .idata $5 ESTOR.dll
+407040b8 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+407040bc 00000004 .idata $5 EUSER.dll(__imp_?NullTTime@Time@@SA?AVTTime@@XZ)
+407040c0 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+407040c4 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+407040c8 00000004 .idata $5 EUSER.dll
+407040cc 0000000a .idata $6 ESTOR.dll
+407040d6 0000000a .idata $6 EUSER.dll
+40705000 00000004 .CRT $XCA UP_DLL.obj
+40705008 00000004 .CRT $XCZ UP_DLL.obj
+40705010 00000004 .CRT $XIA UP_DLL.obj
+40705018 00000004 .CRT $XIZ UP_DLL.obj
+40705020 00000004 .CRT $XPA UP_DLL.obj
+40705028 00000004 .CRT $XPZ UP_DLL.obj
+40705030 00000004 .CRT $XTA UP_DLL.obj
+40705038 00000004 .CRT $XTZ UP_DLL.obj
+40706000 00000012 .bss ASSHDALARM.o
+40706018 00000008 .bss ASSHDDLL.o
+40706020 00000008 .bss uid.o
+40706028 00000008 .bss UP_DLL.obj
+40706030 00000004 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+40701000 ASSHDALARM.o ??0TASShdAlarm@@QAE@XZ
+4070103d ASSHDALARM.o ?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z
+40701144 ASSHDALARM.o ?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z
+40701220 ASSHDALARM.o ?Reset@TASShdAlarm@@QAEXXZ
+407012c2 ASSHDDLL.o ?E32Dll@@YAHW4TDllReason@@@Z
+407012c6 EUSER.dll ??0TBufBase16@@IAE@H@Z
+407012cc ESTOR.dll ?ReadUint16L@RReadStream@@QAEGXZ
+407012d2 ESTOR.dll ?ReadInt8L@RReadStream@@QAECXZ
+407012d8 ESTOR.dll ?ReadInt32L@RReadStream@@QAEJXZ
+407012de ESTOR.dll ?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+407012e4 ESTOR.dll ?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+407012ea ESTOR.dll ?ReadInt16L@RReadStream@@QAEFXZ
+407012f0 ESTOR.dll ?WriteUint16L@RWriteStream@@QAEXI@Z
+407012f6 ESTOR.dll ?WriteInt8L@RWriteStream@@QAEXH@Z
+407012fc ESTOR.dll ?WriteInt32L@RWriteStream@@QAEXJ@Z
+40701302 ESTOR.dll ?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+40701308 ESTOR.dll ?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+4070130e ESTOR.dll ?WriteInt16L@RWriteStream@@QAEXH@Z
+40701314 EUSER.dll ?NullTTime@Time@@SA?AVTTime@@XZ
+4070131a EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+40701340 UP_DLL.obj ?_E32Dll@@YGHPAXI0@Z
+407013e8 EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+40703000 uid.o ?uid@@3PAVTUid@@A
+40704000 ESTOR.dll __IMPORT_DESCRIPTOR_ESTOR
+40704014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+40704028 EUSER.dll __NULL_IMPORT_DESCRIPTOR
+40704084 ESTOR.dll __imp_?ReadUint16L@RReadStream@@QAEGXZ
+40704088 ESTOR.dll __imp_?ReadInt8L@RReadStream@@QAECXZ
+4070408c ESTOR.dll __imp_?ReadInt32L@RReadStream@@QAEJXZ
+40704090 ESTOR.dll __imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+40704094 ESTOR.dll __imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+40704098 ESTOR.dll __imp_?ReadInt16L@RReadStream@@QAEFXZ
+4070409c ESTOR.dll __imp_?WriteUint16L@RWriteStream@@QAEXI@Z
+407040a0 ESTOR.dll __imp_?WriteInt8L@RWriteStream@@QAEXH@Z
+407040a4 ESTOR.dll __imp_?WriteInt32L@RWriteStream@@QAEXJ@Z
+407040a8 ESTOR.dll __imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+407040ac ESTOR.dll __imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+407040b0 ESTOR.dll __imp_?WriteInt16L@RWriteStream@@QAEXH@Z
+407040b4 ESTOR.dll ESTOR_NULL_THUNK_DATA
+407040b8 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+407040bc EUSER.dll __imp_?NullTTime@Time@@SA?AVTTime@@XZ
+407040c0 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+407040c4 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+407040c8 EUSER.dll EUSER_NULL_THUNK_DATA
+40705000 UP_DLL.obj ?__xc_a@@3PAP6AXXZA
+40705008 UP_DLL.obj ?__xc_z@@3PAP6AXXZA
+40705010 UP_DLL.obj ?__xi_a@@3PAP6AXXZA
+40705018 UP_DLL.obj ?__xi_z@@3PAP6AXXZA
+40705020 UP_DLL.obj ?__xp_a@@3PAP6AXXZA
+40705028 UP_DLL.obj ?__xp_z@@3PAP6AXXZA
+40705030 UP_DLL.obj ?__xt_a@@3PAP6AXXZA
+40705038 UP_DLL.obj ?__xt_z@@3PAP6AXXZA
+40706030 common ?_initialised@@3HA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/MAP_file/winscw_symbol.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,145 @@
+Address Size Name Subname Module
+
+40701000 0000003d .text ASSHDALARM.o(??0TASShdAlarm@@QAE@XZ)
+4070103d 00000107 .text ASSHDALARM.o(?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z)
+40701144 000000dc .text ASSHDALARM.o(?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z)
+40701220 000000a2 .text ASSHDALARM.o(?Reset@TASShdAlarm@@QAEXXZ)
+407012c2 00000003 .text ASSHDDLL.o(?E32Dll@@YAHW4TDllReason@@@Z)
+407012c6 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+407012cc 00000006 .text ESTOR.dll(?ReadUint16L@RReadStream@@QAEGXZ)
+407012d2 00000006 .text ESTOR.dll(?ReadInt8L@RReadStream@@QAECXZ)
+407012d8 00000006 .text ESTOR.dll(?ReadInt32L@RReadStream@@QAEJXZ)
+407012de 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+407012e4 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+407012ea 00000006 .text ESTOR.dll(?ReadInt16L@RReadStream@@QAEFXZ)
+407012f0 00000006 .text ESTOR.dll(?WriteUint16L@RWriteStream@@QAEXI@Z)
+407012f6 00000006 .text ESTOR.dll(?WriteInt8L@RWriteStream@@QAEXH@Z)
+407012fc 00000006 .text ESTOR.dll(?WriteInt32L@RWriteStream@@QAEXJ@Z)
+40701302 00000006 .text ESTOR.dll(?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+40701308 00000006 .text ESTOR.dll(?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+4070130e 00000006 .text ESTOR.dll(?WriteInt16L@RWriteStream@@QAEXH@Z)
+40701314 00000006 .text EUSER.dll(?NullTTime@Time@@SA?AVTTime@@XZ)
+4070131a 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+40701320 00000020 .text UP_DLL.obj(?initTable@@YAXPAP6AXXZ0@Z)
+40701340 000000a7 .text UP_DLL.obj(?_E32Dll@@YGHPAXI0@Z)
+407013e8 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+40702000 0000001c .data ASSHDALARM.o
+40702020 00000018 .data ASSHDDLL.o
+40702038 00000018 .data uid.o
+40702050 00000018 .data UP_DLL.obj
+40702068 00000010 .data UP_DLL.obj
+40703000 0000000c .E32_UID uid.o
+40704000 00000014 .idata $2 ESTOR.dll
+40704014 00000014 .idata $2 EUSER.dll
+40704028 00000014 .idata $3 EUSER.dll
+4070403c 00000004 .idata $4 ESTOR.dll
+40704040 00000004 .idata $4 ESTOR.dll
+40704044 00000004 .idata $4 ESTOR.dll
+40704048 00000004 .idata $4 ESTOR.dll
+4070404c 00000004 .idata $4 ESTOR.dll
+40704050 00000004 .idata $4 ESTOR.dll
+40704054 00000004 .idata $4 ESTOR.dll
+40704058 00000004 .idata $4 ESTOR.dll
+4070405c 00000004 .idata $4 ESTOR.dll
+40704060 00000004 .idata $4 ESTOR.dll
+40704064 00000004 .idata $4 ESTOR.dll
+40704068 00000004 .idata $4 ESTOR.dll
+4070406c 00000004 .idata $4 ESTOR.dll
+40704070 00000004 .idata $4 EUSER.dll
+40704074 00000004 .idata $4 EUSER.dll
+40704078 00000004 .idata $4 EUSER.dll
+4070407c 00000004 .idata $4 EUSER.dll
+40704080 00000004 .idata $4 EUSER.dll
+40704084 00000004 .idata $5 ESTOR.dll(__imp_?ReadUint16L@RReadStream@@QAEGXZ)
+40704088 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt8L@RReadStream@@QAECXZ)
+4070408c 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt32L@RReadStream@@QAEJXZ)
+40704090 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+40704094 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+40704098 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt16L@RReadStream@@QAEFXZ)
+4070409c 00000004 .idata $5 ESTOR.dll(__imp_?WriteUint16L@RWriteStream@@QAEXI@Z)
+407040a0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt8L@RWriteStream@@QAEXH@Z)
+407040a4 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt32L@RWriteStream@@QAEXJ@Z)
+407040a8 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+407040ac 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+407040b0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt16L@RWriteStream@@QAEXH@Z)
+407040b4 00000004 .idata $5 ESTOR.dll
+407040b8 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+407040bc 00000004 .idata $5 EUSER.dll(__imp_?NullTTime@Time@@SA?AVTTime@@XZ)
+407040c0 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+407040c4 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+407040c8 00000004 .idata $5 EUSER.dll
+407040cc 0000000a .idata $6 ESTOR.dll
+407040d6 0000000a .idata $6 EUSER.dll
+40705000 00000004 .CRT $XCA UP_DLL.obj
+40705008 00000004 .CRT $XCZ UP_DLL.obj
+40705010 00000004 .CRT $XIA UP_DLL.obj
+40705018 00000004 .CRT $XIZ UP_DLL.obj
+40705020 00000004 .CRT $XPA UP_DLL.obj
+40705028 00000004 .CRT $XPZ UP_DLL.obj
+40705030 00000004 .CRT $XTA UP_DLL.obj
+40705038 00000004 .CRT $XTZ UP_DLL.obj
+40706000 00000012 .bss ASSHDALARM.o
+40706018 00000008 .bss ASSHDDLL.o
+40706020 00000008 .bss uid.o
+40706028 00000008 .bss UP_DLL.obj
+40706030 00000004 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+40701000 ASSHDALARM.o ??0TASShdAlarm@@QAE@XZ
+4070103d ASSHDALARM.o ?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z
+40701144 ASSHDALARM.o ?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z
+40701220 ASSHDALARM.o ?Reset@TASShdAlarm@@QAEXXZ
+407012c2 ASSHDDLL.o ?E32Dll@@YAHW4TDllReason@@@Z
+407012c6 EUSER.dll ??0TBufBase16@@IAE@H@Z
+407012cc ESTOR.dll ?ReadUint16L@RReadStream@@QAEGXZ
+407012d2 ESTOR.dll ?ReadInt8L@RReadStream@@QAECXZ
+407012d8 ESTOR.dll ?ReadInt32L@RReadStream@@QAEJXZ
+407012de ESTOR.dll ?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+407012e4 ESTOR.dll ?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+407012ea ESTOR.dll ?ReadInt16L@RReadStream@@QAEFXZ
+407012f0 ESTOR.dll ?WriteUint16L@RWriteStream@@QAEXI@Z
+407012f6 ESTOR.dll ?WriteInt8L@RWriteStream@@QAEXH@Z
+407012fc ESTOR.dll ?WriteInt32L@RWriteStream@@QAEXJ@Z
+40701302 ESTOR.dll ?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+40701308 ESTOR.dll ?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+4070130e ESTOR.dll ?WriteInt16L@RWriteStream@@QAEXH@Z
+40701314 EUSER.dll ?NullTTime@Time@@SA?AVTTime@@XZ
+4070131a EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+40701340 UP_DLL.obj ?_E32Dll@@YGHPAXI0@Z
+407013e8 EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+40703000 uid.o ?uid@@3PAVTUid@@A
+40704000 ESTOR.dll __IMPORT_DESCRIPTOR_ESTOR
+40704014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+40704028 EUSER.dll __NULL_IMPORT_DESCRIPTOR
+40704084 ESTOR.dll __imp_?ReadUint16L@RReadStream@@QAEGXZ
+40704088 ESTOR.dll __imp_?ReadInt8L@RReadStream@@QAECXZ
+4070408c ESTOR.dll __imp_?ReadInt32L@RReadStream@@QAEJXZ
+40704090 ESTOR.dll __imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+40704094 ESTOR.dll __imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+40704098 ESTOR.dll __imp_?ReadInt16L@RReadStream@@QAEFXZ
+4070409c ESTOR.dll __imp_?WriteUint16L@RWriteStream@@QAEXI@Z
+407040a0 ESTOR.dll __imp_?WriteInt8L@RWriteStream@@QAEXH@Z
+407040a4 ESTOR.dll __imp_?WriteInt32L@RWriteStream@@QAEXJ@Z
+407040a8 ESTOR.dll __imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+407040ac ESTOR.dll __imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+407040b0 ESTOR.dll __imp_?WriteInt16L@RWriteStream@@QAEXH@Z
+407040b4 ESTOR.dll ESTOR_NULL_THUNK_DATA
+407040b8 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+407040bc EUSER.dll __imp_?NullTTime@Time@@SA?AVTTime@@XZ
+407040c0 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+407040c4 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+407040c8 EUSER.dll EUSER_NULL_THUNK_DATA
+40705000 UP_DLL.obj ?__xc_a@@3PAP6AXXZA
+40705008 UP_DLL.obj ?__xc_z@@3PAP6AXXZA
+40705010 UP_DLL.obj ?__xi_a@@3PAP6AXXZA
+40705018 UP_DLL.obj ?__xi_z@@3PAP6AXXZA
+40705020 UP_DLL.obj ?__xp_a@@3PAP6AXXZA
+40705028 UP_DLL.obj ?__xp_z@@3PAP6AXXZA
+40705030 UP_DLL.obj ?__xt_a@@3PAP6AXXZA
+40705038 UP_DLL.obj ?__xt_z@@3PAP6AXXZA
+40706030 common ?_initialised@@3HA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/Preprocessed_text/content.rpp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+# 1 "W:\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS"
+// IRCOMM.RSS
+//
+// Copyright (c) 1998 Symbian Ltd. All rights reserved.
+//
+
+# 1 "ircomm.rls" 1
+rls_string STRING_r_irccsy_info1 "Infrared"
+# 6 "W:\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+# 1 "..\\INC\\csy.rh" 1
+// CSY.RH
+//
+// Copyright (c) 1998 Symbian Ltd. All rights reserved.
+//
+
+
+STRUCT CSY_INFORMATION
+ {
+ LTEXT humanreadablename;
+ }
+# 7 "W:\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+
+RESOURCE CSY_INFORMATION r_irccsy_info
+ {
+ humanreadablename=STRING_r_irccsy_info1;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/SGML_file/content.html Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Tue Jul 15 18:05:14 BST 2003 -->
+<TITLE>
+All Classes
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+</HEAD>
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/symbian/sdk/util/assertion/Assert.html" TARGET="classFrame">Assert</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/AssertionException.html" TARGET="classFrame">AssertionException</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/JniOutOfMemoryError.html" TARGET="classFrame">JniOutOfMemoryError</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
Binary file bintools/evalid/left/fail/SIS_file/release/armi/urel/gdbstub.sis has changed
Binary file bintools/evalid/left/fail/ZIP_file/content.zip has changed
Binary file bintools/evalid/left/fail/ZIP_file/order.zip has changed
Binary file bintools/evalid/left/fail/ZIP_file/size.zip has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/fail/unknown_format/data/BuildInfo.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,3 @@
+DeviceFamily 100
+DeviceFamilyRev 0x700
+ManufacturerSoftwareBuild 02223
Binary file bintools/evalid/left/fail/unknown_format/ksa/layout.bin has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/missing/leftonlydir/file.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1 @@
+left only dir
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/missing/leftonlyfile.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1 @@
+left only file
Binary file bintools/evalid/left/ok/CHM_file/identical/file.chm has changed
Binary file bintools/evalid/left/ok/CHM_file/rebuilt/file.chm has changed
Binary file bintools/evalid/left/ok/Compressed_E32_DLL/arm4/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/Compressed_E32_DLL/arm4/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/Compressed_E32_DLL/thumb/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/Compressed_E32_DLL/thumb/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/Compressed_E32_EXE/arm4/udeb/E32STRT.EXE has changed
Binary file bintools/evalid/left/ok/Compressed_E32_EXE/arm4/urel/E32STRT.EXE has changed
Binary file bintools/evalid/left/ok/Compressed_E32_EXE/thumb/udeb/E32STRT.EXE has changed
Binary file bintools/evalid/left/ok/Compressed_E32_EXE/thumb/urel/E32STRT.EXE has changed
Binary file bintools/evalid/left/ok/E32_DLL/arm4/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/E32_DLL/arm4/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/E32_DLL/thumb/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/E32_DLL/thumb/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/E32_EXE/arm4/udeb/ALARMSERVER.EXE has changed
Binary file bintools/evalid/left/ok/E32_EXE/arm4/urel/ALARMSERVER.EXE has changed
Binary file bintools/evalid/left/ok/E32_EXE/case_diff/armv5/udeb/usestaticdll.exe has changed
Binary file bintools/evalid/left/ok/E32_EXE/case_diff/armv5/urel/usestaticdll.exe has changed
Binary file bintools/evalid/left/ok/E32_EXE/thumb/udeb/ALARMSERVER.EXE has changed
Binary file bintools/evalid/left/ok/E32_EXE/thumb/urel/ALARMSERVER.EXE has changed
Binary file bintools/evalid/left/ok/ELF_library/case_diff/armv5/createstaticdll.lib has changed
Binary file bintools/evalid/left/ok/Intel_DLL/winscw/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/Intel_DLL/winscw/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/left/ok/Intel_exe/wins/urel/E32STRT.EXE has changed
Binary file bintools/evalid/left/ok/Intel_exe/winscw/udeb/AlarmServer.exe has changed
Binary file bintools/evalid/left/ok/Intel_exe/winscw/urel/E32STRT.EXE has changed
Binary file bintools/evalid/left/ok/Intel_library/wins/udeb/ALARMSHARED.LIB has changed
Binary file bintools/evalid/left/ok/Intel_library/wins/udeb/EEXE.LIB has changed
Binary file bintools/evalid/left/ok/Intel_library/wins/urel/EEXE.LIB has changed
Binary file bintools/evalid/left/ok/Intel_library/winscw/udeb/ALARMSHARED.LIB has changed
Binary file bintools/evalid/left/ok/Intel_library/winscw/udeb/EEXE.LIB has changed
Binary file bintools/evalid/left/ok/Intel_library/winscw/urel/EEXE.LIB has changed
Binary file bintools/evalid/left/ok/Intel_object/FNTTRAN.exp has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/arm4/udeb/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,301 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ (_E32Dll)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o) (_head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o) (________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o) (_head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o) (___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.exp
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLLSTUB.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x600
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001014 0x338 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ 0x10001060 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001290 TASShdAlarm::Reset(void)
+ 0x10001014 TASShdAlarm::TASShdAlarm(void)
+ 0x10001198 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000134c 0x14 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDDLL.o)
+ 0x1000134c E32Dll(TDllReason)
+ .text 0x10001360 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x10001360 TBufBase16::TBufBase16(int)
+ .text 0x1000136c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x1000136c Time::NullTTime(void)
+ .text 0x10001378 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x10001378 TDes16::Copy(TDesC16 const &)
+ .text 0x10001384 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x10001384 RReadStream::ReadUint16L(void)
+ .text 0x10001390 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x10001390 RReadStream::ReadInt8L(void)
+ .text 0x1000139c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x1000139c RReadStream::ReadInt32L(void)
+ .text 0x100013a8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x100013a8 InternalizeL(TInt64 &, RReadStream &)
+ .text 0x100013b4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x100013b4 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x100013c0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x100013c0 RReadStream::ReadInt16L(void)
+ .text 0x100013cc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x100013cc RWriteStream::WriteUint16L(unsigned int)
+ .text 0x100013d8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x100013d8 RWriteStream::WriteInt8L(int)
+ .text 0x100013e4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100013e4 RWriteStream::WriteInt32L(long)
+ .text 0x100013f0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x100013f0 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013fc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x100013fc ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x10001408 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x10001408 RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x10001414 ___CTOR_LIST__=.
+ 0x10001414 __CTOR_LIST__=.
+ 0x10001414 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x10001418 0x4 LONG 0x0
+ 0x1000141c ___DTOR_LIST__=.
+ 0x1000141c __DTOR_LIST__=.
+ 0x1000141c 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x10001420 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x10001424 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x10001424 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ 0x10003000 _head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ 0x10003014 _head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ 0x10003104 ___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ 0x10003124 ________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x10005000 0x4a00
+ *(.stab)
+ .stab 0x10005000 0x1d94 ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ .stab 0x10006d94 0x2928 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ 0x2934 (size before relaxing)
+ .stab 0x100096bc 0x1bc ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDDLL.o)
+ 0xd74 (size before relaxing)
+
+.stabstr 0x1000a000 0x53400
+ *(.stabstr)
+ .stabstr 0x1000a000 0x53226 ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/arm4/udeb/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,458 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ (_E32Startup)
+..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFsBase::Close(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFs::Connect(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Size(int &) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o) (_head__________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o) (___________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TLocale::TLocale(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TLocale::Set(void) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::Alloc(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::Free(void *))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RProcess::Resume(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RHandleBase::Close(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o) (_head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o) (________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o) (_head_______EPOC32_RELEASE_ARM4_UREL_HAL_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o) (________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.exp
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB
+
+.text 0x00401000 0xa00
+ *(.init)
+ *(.text)
+ .text 0x00401000 0xac ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ 0x0040109c atexit
+ 0x00401000 _E32Startup
+ .text 0x004010ac 0x540 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ 0x00401328 E32Main(void)
+ .text 0x004015ec 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ 0x004015ec TFindFile::TFindFile(RFs &)
+ .text 0x004015f8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ 0x004015f8 TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x00401604 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ 0x00401604 TParseBase::FullName(void) const
+ .text 0x00401610 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ 0x00401610 RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x0040161c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ 0x0040161c RFile::Read(TDes8 &, int) const
+ .text 0x00401628 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ 0x00401628 RFsBase::Close(void)
+ .text 0x00401634 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ 0x00401634 RFs::Connect(int)
+ .text 0x00401640 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ 0x00401640 RFile::Size(int &) const
+ .text 0x0040164c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ 0x0040164c RFile::Read(TDes8 &) const
+ .text 0x00401658 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ 0x00401658 RFs::DriveList(TBuf8<26> &) const
+ .text 0x00401664 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ 0x00401664 TLocale::TLocale(void)
+ .text 0x00401670 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ 0x00401670 TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x0040167c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ 0x0040167c TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401688 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x00401688 TDes16::Copy(TDesC16 const &)
+ .text 0x00401694 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ 0x00401694 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x004016a0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ 0x004016a0 TLocale::Set(void) const
+ .text 0x004016ac 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ 0x004016ac TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x004016b8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ 0x004016b8 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x004016c4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x004016c4 TBufBase16::TBufBase16(int)
+ .text 0x004016d0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ 0x004016d0 UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x004016dc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ 0x004016dc User::Panic(TDesC16 const &, int)
+ .text 0x004016e8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ 0x004016e8 User::Alloc(int)
+ .text 0x004016f4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ 0x004016f4 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x00401700 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ 0x00401700 User::Free(void *)
+ .text 0x0040170c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ 0x0040170c TBufBase8::TBufBase8(int)
+ .text 0x00401718 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ 0x00401718 TDesC8::AtC(int) const
+ .text 0x00401724 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ 0x00401724 TDesC16::AtC(int) const
+ .text 0x00401730 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ 0x00401730 RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x0040173c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ 0x0040173c RProcess::Resume(void)
+ .text 0x00401748 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ 0x00401748 RHandleBase::Close(void)
+ .text 0x00401754 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ 0x00401754 HAL::Get(HALData::TAttribute, int &)
+ .text 0x00401760 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ 0x00401760 HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x0040176c ___CTOR_LIST__=.
+ 0x0040176c __CTOR_LIST__=.
+ 0x0040176c 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x00401770 0x4 LONG 0x0
+ 0x00401774 ___DTOR_LIST__=.
+ 0x00401774 __DTOR_LIST__=.
+ 0x00401774 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x00401778 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x0040177c etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x0040177c 0xe0 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ 0x00402000 _head__________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ 0x00402014 _head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ 0x00402028 _head_______EPOC32_RELEASE_ARM4_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ 0x004021c8 ___________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ 0x0040222c ________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ 0x00402248 ________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x60 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x00404000 0x4600
+ *(.stab)
+ .stab 0x00404000 0xe34 ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ .stab 0x00404e34 0x3618 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ 0x3624 (size before relaxing)
+
+.stabstr 0x00409000 0x34000
+ *(.stabstr)
+ .stabstr 0x00409000 0x33f32 ..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/arm4/urel/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o) (_head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o) (________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o) (_head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o) (___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001048 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ 0x10003000 _head__________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ 0x10003014 _head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d2091t.o)
+ 0x10003104 ___________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ 0x10003124 ________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/arm4/urel/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,453 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UREL/UC_EXE.o)
+ (_E32Startup)
+..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFsBase::Close(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFs::Connect(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Size(int &) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o) (_head__________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o) (___________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TLocale::TLocale(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TLocale::Set(void) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::Alloc(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::Free(void *))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RProcess::Resume(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RHandleBase::Close(void))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o) (_head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o) (________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o) (_head_______EPOC32_RELEASE_ARM4_UREL_HAL_LIB)
+..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o) (________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.exp
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB
+
+.text 0x00401000 0x800
+ *(.init)
+ *(.text)
+ .text 0x00401000 0x98 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UREL/UC_EXE.o)
+ 0x00401094 atexit
+ 0x00401000 _E32Startup
+ .text 0x00401098 0x4e0 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o)
+ 0x004012dc E32Main(void)
+ .text 0x00401578 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ 0x00401578 TFindFile::TFindFile(RFs &)
+ .text 0x00401584 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ 0x00401584 TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x00401590 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ 0x00401590 TParseBase::FullName(void) const
+ .text 0x0040159c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ 0x0040159c RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x004015a8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ 0x004015a8 RFile::Read(TDes8 &, int) const
+ .text 0x004015b4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ 0x004015b4 RFsBase::Close(void)
+ .text 0x004015c0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ 0x004015c0 RFs::Connect(int)
+ .text 0x004015cc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ 0x004015cc RFile::Size(int &) const
+ .text 0x004015d8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ 0x004015d8 RFile::Read(TDes8 &) const
+ .text 0x004015e4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ 0x004015e4 RFs::DriveList(TBuf8<26> &) const
+ .text 0x004015f0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ 0x004015f0 TLocale::TLocale(void)
+ .text 0x004015fc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ 0x004015fc TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x00401608 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ 0x00401608 TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401614 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x00401614 TDes16::Copy(TDesC16 const &)
+ .text 0x00401620 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ 0x00401620 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x0040162c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ 0x0040162c TLocale::Set(void) const
+ .text 0x00401638 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ 0x00401638 TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x00401644 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ 0x00401644 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x00401650 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x00401650 TBufBase16::TBufBase16(int)
+ .text 0x0040165c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ 0x0040165c UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x00401668 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ 0x00401668 User::Panic(TDesC16 const &, int)
+ .text 0x00401674 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ 0x00401674 User::Alloc(int)
+ .text 0x00401680 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ 0x00401680 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x0040168c 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ 0x0040168c User::Free(void *)
+ .text 0x00401698 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ 0x00401698 TBufBase8::TBufBase8(int)
+ .text 0x004016a4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ 0x004016a4 TDesC8::AtC(int) const
+ .text 0x004016b0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ 0x004016b0 TDesC16::AtC(int) const
+ .text 0x004016bc 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ 0x004016bc RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x004016c8 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ 0x004016c8 RProcess::Resume(void)
+ .text 0x004016d4 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ 0x004016d4 RHandleBase::Close(void)
+ .text 0x004016e0 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ 0x004016e0 HAL::Get(HALData::TAttribute, int &)
+ .text 0x004016ec 0xc ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ 0x004016ec HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x004016f8 ___CTOR_LIST__=.
+ 0x004016f8 __CTOR_LIST__=.
+ 0x004016f8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x004016fc 0x4 LONG 0x0
+ 0x00401700 ___DTOR_LIST__=.
+ 0x00401700 __DTOR_LIST__=.
+ 0x00401700 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x00401704 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x00401708 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x00401708 0xe0 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ 0x00402000 _head__________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ 0x00402014 _head_______EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ 0x00402028 _head_______EPOC32_RELEASE_ARM4_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/ARM4/UREL/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1285t.o)
+ 0x004021c8 ___________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1216t.o)
+ 0x0040222c ________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1415t.o)
+ 0x00402248 ________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x60 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/thumb/udeb/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,301 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ (_E32Dll)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o) (_head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o) (________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o) (_head__________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o) (___________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.exp
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLLSTUB.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0xc ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x1000100c 0x254 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ 0x1000104c TASShdAlarm::InternalizeL(RReadStream &)
+ 0x100011d8 TASShdAlarm::Reset(void)
+ 0x1000100c TASShdAlarm::TASShdAlarm(void)
+ 0x1000111c TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x10001260 0x4 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDDLL.o)
+ 0x10001260 E32Dll(TDllReason)
+ .text 0x10001264 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x10001264 TBufBase16::TBufBase16(int)
+ .text 0x10001270 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ 0x10001270 Time::NullTTime(void)
+ .text 0x1000127c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x1000127c TDes16::Copy(TDesC16 const &)
+ .text 0x10001288 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ 0x10001288 RReadStream::ReadUint16L(void)
+ .text 0x10001294 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ 0x10001294 RReadStream::ReadInt8L(void)
+ .text 0x100012a0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ 0x100012a0 RReadStream::ReadInt32L(void)
+ .text 0x100012ac 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ 0x100012ac InternalizeL(TInt64 &, RReadStream &)
+ .text 0x100012b8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ 0x100012b8 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x100012c4 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ 0x100012c4 RReadStream::ReadInt16L(void)
+ .text 0x100012d0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ 0x100012d0 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x100012dc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ 0x100012dc RWriteStream::WriteInt8L(int)
+ .text 0x100012e8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ 0x100012e8 RWriteStream::WriteInt32L(long)
+ .text 0x100012f4 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ 0x100012f4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x10001304 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ 0x10001304 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x10001310 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ 0x10001310 RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x1000131c ___CTOR_LIST__=.
+ 0x1000131c __CTOR_LIST__=.
+ 0x1000131c 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x10001320 0x4 LONG 0x0
+ 0x10001324 ___DTOR_LIST__=.
+ 0x10001324 __DTOR_LIST__=.
+ 0x10001324 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x10001328 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x1000132c etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x1000132c 0xc ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ 0x10003000 _head__________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ 0x10003014 _head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ 0x10003104 ___________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ 0x10003124 ________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x2c ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x10005000 0x4a00
+ *(.stab)
+ .stab 0x10005000 0x1da0 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ .stab 0x10006da0 0x29ac ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ 0x29b8 (size before relaxing)
+ .stab 0x1000974c 0x1bc ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDDLL.o)
+ 0xd74 (size before relaxing)
+
+.stabstr 0x1000a000 0x53400
+ *(.stabstr)
+ .stabstr 0x1000a000 0x532bd ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/thumb/udeb/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,478 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ (_E32Startup)
+..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EPOC/EGCC/THUMB/UDEB/UP_GCC.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o) (_call_via_r0)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFsBase::Close(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFs::Connect(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Size(int &) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o) (_head__________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o) (___________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TLocale::TLocale(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TLocale::Set(void) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::Alloc(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::Free(void *))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RProcess::Resume(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RHandleBase::Close(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o) (_head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o) (________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o) (_head_______EPOC32_RELEASE_THUMB_UREL_HAL_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o) (________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.exp
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB
+
+.text 0x00401000 0x800
+ *(.init)
+ *(.text)
+ .text 0x00401000 0x60 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ 0x0040105c atexit
+ 0x00401000 _E32Startup
+ .text 0x00401060 0x438 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ 0x00401244 E32Main(void)
+ .text 0x00401498 0x38 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EPOC/EGCC/THUMB/UDEB/UP_GCC.o)
+ 0x004014a0 _call_via_r2
+ 0x004014b0 _call_via_r6
+ 0x004014ac _call_via_r5
+ 0x004014a4 _call_via_r3
+ 0x004014c4 _call_via_fp
+ 0x004014b8 _call_via_r8
+ 0x004014b4 _call_via_r7
+ 0x00401498 _call_via_r0
+ 0x004014c0 _call_via_sl
+ 0x004014bc _call_via_r9
+ 0x004014a8 _call_via_r4
+ 0x0040149c _call_via_r1
+ 0x004014c8 _call_via_ip
+ 0x004014cc _call_via_lr
+ .text 0x004014d0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ 0x004014d0 TFindFile::TFindFile(RFs &)
+ .text 0x004014dc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ 0x004014dc TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x004014e8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ 0x004014e8 TParseBase::FullName(void) const
+ .text 0x004014f4 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ 0x004014f4 RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x00401504 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ 0x00401504 RFile::Read(TDes8 &, int) const
+ .text 0x00401510 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ 0x00401510 RFsBase::Close(void)
+ .text 0x0040151c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ 0x0040151c RFs::Connect(int)
+ .text 0x00401528 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ 0x00401528 RFile::Size(int &) const
+ .text 0x00401534 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ 0x00401534 RFile::Read(TDes8 &) const
+ .text 0x00401540 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ 0x00401540 RFs::DriveList(TBuf8<26> &) const
+ .text 0x0040154c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ 0x0040154c TLocale::TLocale(void)
+ .text 0x00401558 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ 0x00401558 TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x00401564 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ 0x00401564 TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401574 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x00401574 TDes16::Copy(TDesC16 const &)
+ .text 0x00401580 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ 0x00401580 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x0040158c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ 0x0040158c TLocale::Set(void) const
+ .text 0x00401598 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ 0x00401598 TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x004015a4 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ 0x004015a4 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x004015b0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x004015b0 TBufBase16::TBufBase16(int)
+ .text 0x004015bc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ 0x004015bc UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x004015c8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ 0x004015c8 User::Panic(TDesC16 const &, int)
+ .text 0x004015d4 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ 0x004015d4 User::Alloc(int)
+ .text 0x004015e0 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ 0x004015e0 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x004015f0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ 0x004015f0 User::Free(void *)
+ .text 0x004015fc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ 0x004015fc TBufBase8::TBufBase8(int)
+ .text 0x00401608 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ 0x00401608 TDesC8::AtC(int) const
+ .text 0x00401614 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ 0x00401614 TDesC16::AtC(int) const
+ .text 0x00401620 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ 0x00401620 RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x00401630 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ 0x00401630 RProcess::Resume(void)
+ .text 0x0040163c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ 0x0040163c RHandleBase::Close(void)
+ .text 0x00401648 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ 0x00401648 HAL::Get(HALData::TAttribute, int &)
+ .text 0x00401654 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ 0x00401654 HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x00401660 ___CTOR_LIST__=.
+ 0x00401660 __CTOR_LIST__=.
+ 0x00401660 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x00401664 0x4 LONG 0x0
+ 0x00401668 ___DTOR_LIST__=.
+ 0x00401668 __DTOR_LIST__=.
+ 0x00401668 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x0040166c 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x00401670 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x00401670 0x8 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ .rdata 0x00401678 0x108 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ 0x00402000 _head__________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ 0x00402014 _head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ 0x00402028 _head_______EPOC32_RELEASE_THUMB_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ 0x004021c8 ___________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ 0x0040222c ________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ 0x00402248 ________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x78 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x00404000 0x5400
+ *(.stab)
+ .stab 0x00404000 0xe34 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ .stab 0x00404e34 0x369c ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ 0x36a8 (size before relaxing)
+ .stab 0x004084d0 0xd38 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EPOC/EGCC/THUMB/UDEB/UP_GCC.o)
+ 0x18f0 (size before relaxing)
+
+.stabstr 0x0040a000 0x47e00
+ *(.stabstr)
+ .stabstr 0x0040a000 0x47c60 ..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/thumb/urel/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/THUMB/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o) (_head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o) (________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o) (_head__________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o) (___________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.exp
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLL.LIB
+LOAD ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLL.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EDLL/THUMB/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x1000100c 0x254 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o)
+ 0x1000104c TASShdAlarm::InternalizeL(RReadStream &)
+ 0x100011d8 TASShdAlarm::Reset(void)
+ 0x1000100c TASShdAlarm::TASShdAlarm(void)
+ 0x1000111c TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x10001260 0x4 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDDLL.o)
+ 0x10001260 E32Dll(TDllReason)
+ .text 0x10001264 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x10001264 TBufBase16::TBufBase16(int)
+ .text 0x10001270 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ 0x10001270 Time::NullTTime(void)
+ .text 0x1000127c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x1000127c TDes16::Copy(TDesC16 const &)
+ .text 0x10001288 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ 0x10001288 RReadStream::ReadUint16L(void)
+ .text 0x10001294 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ 0x10001294 RReadStream::ReadInt8L(void)
+ .text 0x100012a0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ 0x100012a0 RReadStream::ReadInt32L(void)
+ .text 0x100012ac 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ 0x100012ac InternalizeL(TInt64 &, RReadStream &)
+ .text 0x100012b8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ 0x100012b8 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x100012c4 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ 0x100012c4 RReadStream::ReadInt16L(void)
+ .text 0x100012d0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ 0x100012d0 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x100012dc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ 0x100012dc RWriteStream::WriteInt8L(int)
+ .text 0x100012e8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ 0x100012e8 RWriteStream::WriteInt32L(long)
+ .text 0x100012f4 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ 0x100012f4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x10001304 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ 0x10001304 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x10001310 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ 0x10001310 RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x1000131c ___CTOR_LIST__=.
+ 0x1000131c __CTOR_LIST__=.
+ 0x1000131c 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x10001320 0x4 LONG 0x0
+ 0x10001324 ___DTOR_LIST__=.
+ 0x10001324 __DTOR_LIST__=.
+ 0x10001324 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x10001328 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x1000132c etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x1000132c 0xc ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../EPOC32/BUILD/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ 0x10003000 _head__________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ 0x10003014 _head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1951t.o)
+ 0x10003104 ___________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ 0x10003124 ________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x2c ..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\EPOC32\BUILD\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/thumb/urel/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,471 @@
+Archive member included because of file (symbol)
+
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ (_E32Startup)
+..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o)
+ (--whole-archive)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EPOC/EGCC/THUMB/UREL/UP_GCC.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o) (_call_via_r0)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFsBase::Close(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFs::Connect(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Size(int &) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o) (_head__________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o) (___________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TLocale::TLocale(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TLocale::Set(void) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::Alloc(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::Free(void *))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RProcess::Resume(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RHandleBase::Close(void))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o) (_head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o) (________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o) (_head_______EPOC32_RELEASE_THUMB_UREL_HAL_LIB)
+..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o) (________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.exp
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB
+LOAD ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB
+
+.text 0x00401000 0x800
+ *(.init)
+ *(.text)
+ .text 0x00401000 0x60 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ 0x0040105c atexit
+ 0x00401000 _E32Startup
+ .text 0x00401060 0x438 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o)
+ 0x00401244 E32Main(void)
+ .text 0x00401498 0x38 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EPOC/EGCC/THUMB/UREL/UP_GCC.o)
+ 0x004014a0 _call_via_r2
+ 0x004014b0 _call_via_r6
+ 0x004014ac _call_via_r5
+ 0x004014a4 _call_via_r3
+ 0x004014c4 _call_via_fp
+ 0x004014b8 _call_via_r8
+ 0x004014b4 _call_via_r7
+ 0x00401498 _call_via_r0
+ 0x004014c0 _call_via_sl
+ 0x004014bc _call_via_r9
+ 0x004014a8 _call_via_r4
+ 0x0040149c _call_via_r1
+ 0x004014c8 _call_via_ip
+ 0x004014cc _call_via_lr
+ .text 0x004014d0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ 0x004014d0 TFindFile::TFindFile(RFs &)
+ .text 0x004014dc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ 0x004014dc TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x004014e8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ 0x004014e8 TParseBase::FullName(void) const
+ .text 0x004014f4 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ 0x004014f4 RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x00401504 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ 0x00401504 RFile::Read(TDes8 &, int) const
+ .text 0x00401510 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ 0x00401510 RFsBase::Close(void)
+ .text 0x0040151c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ 0x0040151c RFs::Connect(int)
+ .text 0x00401528 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ 0x00401528 RFile::Size(int &) const
+ .text 0x00401534 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ 0x00401534 RFile::Read(TDes8 &) const
+ .text 0x00401540 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ 0x00401540 RFs::DriveList(TBuf8<26> &) const
+ .text 0x0040154c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ 0x0040154c TLocale::TLocale(void)
+ .text 0x00401558 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ 0x00401558 TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x00401564 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ 0x00401564 TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401574 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x00401574 TDes16::Copy(TDesC16 const &)
+ .text 0x00401580 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ 0x00401580 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x0040158c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ 0x0040158c TLocale::Set(void) const
+ .text 0x00401598 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ 0x00401598 TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x004015a4 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ 0x004015a4 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x004015b0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x004015b0 TBufBase16::TBufBase16(int)
+ .text 0x004015bc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ 0x004015bc UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x004015c8 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ 0x004015c8 User::Panic(TDesC16 const &, int)
+ .text 0x004015d4 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ 0x004015d4 User::Alloc(int)
+ .text 0x004015e0 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ 0x004015e0 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x004015f0 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ 0x004015f0 User::Free(void *)
+ .text 0x004015fc 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ 0x004015fc TBufBase8::TBufBase8(int)
+ .text 0x00401608 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ 0x00401608 TDesC8::AtC(int) const
+ .text 0x00401614 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ 0x00401614 TDesC16::AtC(int) const
+ .text 0x00401620 0x10 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ 0x00401620 RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x00401630 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ 0x00401630 RProcess::Resume(void)
+ .text 0x0040163c 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ 0x0040163c RHandleBase::Close(void)
+ .text 0x00401648 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ 0x00401648 HAL::Get(HALData::TAttribute, int &)
+ .text 0x00401654 0xc ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ 0x00401654 HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x00401660 ___CTOR_LIST__=.
+ 0x00401660 __CTOR_LIST__=.
+ 0x00401660 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x00401664 0x4 LONG 0x0
+ 0x00401668 ___DTOR_LIST__=.
+ 0x00401668 __DTOR_LIST__=.
+ 0x00401668 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x0040166c 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x00401670 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x00401670 0x8 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ .rdata 0x00401678 0x108 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../EPOC32/BUILD/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ 0x00402000 _head__________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ 0x00402014 _head_______EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ 0x00402028 _head_______EPOC32_RELEASE_THUMB_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../EPOC32/BUILD/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1559t.o)
+ 0x004021c8 ___________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1529t.o)
+ 0x0040222c ________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/WINNT/Profiles/RMBUIL~1/LOCALS~1/Temp/d1622t.o)
+ 0x00402248 ________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x78 ..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\EPOC32\BUILD\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/winscw/urel/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,145 @@
+Address Size Name Subname Module
+
+40701000 0000003d .text ASSHDALARM.o(??0TASShdAlarm@@QAE@XZ)
+4070103d 00000107 .text ASSHDALARM.o(?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z)
+40701144 000000dc .text ASSHDALARM.o(?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z)
+40701220 000000a2 .text ASSHDALARM.o(?Reset@TASShdAlarm@@QAEXXZ)
+407012c2 00000003 .text ASSHDDLL.o(?E32Dll@@YAHW4TDllReason@@@Z)
+407012c6 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+407012cc 00000006 .text ESTOR.dll(?ReadUint16L@RReadStream@@QAEGXZ)
+407012d2 00000006 .text ESTOR.dll(?ReadInt8L@RReadStream@@QAECXZ)
+407012d8 00000006 .text ESTOR.dll(?ReadInt32L@RReadStream@@QAEJXZ)
+407012de 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+407012e4 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+407012ea 00000006 .text ESTOR.dll(?ReadInt16L@RReadStream@@QAEFXZ)
+407012f0 00000006 .text ESTOR.dll(?WriteUint16L@RWriteStream@@QAEXI@Z)
+407012f6 00000006 .text ESTOR.dll(?WriteInt8L@RWriteStream@@QAEXH@Z)
+407012fc 00000006 .text ESTOR.dll(?WriteInt32L@RWriteStream@@QAEXJ@Z)
+40701302 00000006 .text ESTOR.dll(?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+40701308 00000006 .text ESTOR.dll(?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+4070130e 00000006 .text ESTOR.dll(?WriteInt16L@RWriteStream@@QAEXH@Z)
+40701314 00000006 .text EUSER.dll(?NullTTime@Time@@SA?AVTTime@@XZ)
+4070131a 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+40701320 00000020 .text UP_DLL.obj(?initTable@@YAXPAP6AXXZ0@Z)
+40701340 000000a7 .text UP_DLL.obj(?_E32Dll@@YGHPAXI0@Z)
+407013e8 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+40702000 0000001c .data ASSHDALARM.o
+40702020 00000018 .data ASSHDDLL.o
+40702038 00000018 .data uid.o
+40702050 00000018 .data UP_DLL.obj
+40702068 00000010 .data UP_DLL.obj
+40703000 0000000c .E32_UID uid.o
+40704000 00000014 .idata $2 ESTOR.dll
+40704014 00000014 .idata $2 EUSER.dll
+40704028 00000014 .idata $3 EUSER.dll
+4070403c 00000004 .idata $4 ESTOR.dll
+40704040 00000004 .idata $4 ESTOR.dll
+40704044 00000004 .idata $4 ESTOR.dll
+40704048 00000004 .idata $4 ESTOR.dll
+4070404c 00000004 .idata $4 ESTOR.dll
+40704050 00000004 .idata $4 ESTOR.dll
+40704054 00000004 .idata $4 ESTOR.dll
+40704058 00000004 .idata $4 ESTOR.dll
+4070405c 00000004 .idata $4 ESTOR.dll
+40704060 00000004 .idata $4 ESTOR.dll
+40704064 00000004 .idata $4 ESTOR.dll
+40704068 00000004 .idata $4 ESTOR.dll
+4070406c 00000004 .idata $4 ESTOR.dll
+40704070 00000004 .idata $4 EUSER.dll
+40704074 00000004 .idata $4 EUSER.dll
+40704078 00000004 .idata $4 EUSER.dll
+4070407c 00000004 .idata $4 EUSER.dll
+40704080 00000004 .idata $4 EUSER.dll
+40704084 00000004 .idata $5 ESTOR.dll(__imp_?ReadUint16L@RReadStream@@QAEGXZ)
+40704088 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt8L@RReadStream@@QAECXZ)
+4070408c 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt32L@RReadStream@@QAEJXZ)
+40704090 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+40704094 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+40704098 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt16L@RReadStream@@QAEFXZ)
+4070409c 00000004 .idata $5 ESTOR.dll(__imp_?WriteUint16L@RWriteStream@@QAEXI@Z)
+407040a0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt8L@RWriteStream@@QAEXH@Z)
+407040a4 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt32L@RWriteStream@@QAEXJ@Z)
+407040a8 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+407040ac 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+407040b0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt16L@RWriteStream@@QAEXH@Z)
+407040b4 00000004 .idata $5 ESTOR.dll
+407040b8 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+407040bc 00000004 .idata $5 EUSER.dll(__imp_?NullTTime@Time@@SA?AVTTime@@XZ)
+407040c0 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+407040c4 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+407040c8 00000004 .idata $5 EUSER.dll
+407040cc 0000000a .idata $6 ESTOR.dll
+407040d6 0000000a .idata $6 EUSER.dll
+40705000 00000004 .CRT $XCA UP_DLL.obj
+40705008 00000004 .CRT $XCZ UP_DLL.obj
+40705010 00000004 .CRT $XIA UP_DLL.obj
+40705018 00000004 .CRT $XIZ UP_DLL.obj
+40705020 00000004 .CRT $XPA UP_DLL.obj
+40705028 00000004 .CRT $XPZ UP_DLL.obj
+40705030 00000004 .CRT $XTA UP_DLL.obj
+40705038 00000004 .CRT $XTZ UP_DLL.obj
+40706000 00000012 .bss ASSHDALARM.o
+40706018 00000008 .bss ASSHDDLL.o
+40706020 00000008 .bss uid.o
+40706028 00000008 .bss UP_DLL.obj
+40706030 00000004 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+40701000 ASSHDALARM.o ??0TASShdAlarm@@QAE@XZ
+4070103d ASSHDALARM.o ?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z
+40701144 ASSHDALARM.o ?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z
+40701220 ASSHDALARM.o ?Reset@TASShdAlarm@@QAEXXZ
+407012c2 ASSHDDLL.o ?E32Dll@@YAHW4TDllReason@@@Z
+407012c6 EUSER.dll ??0TBufBase16@@IAE@H@Z
+407012cc ESTOR.dll ?ReadUint16L@RReadStream@@QAEGXZ
+407012d2 ESTOR.dll ?ReadInt8L@RReadStream@@QAECXZ
+407012d8 ESTOR.dll ?ReadInt32L@RReadStream@@QAEJXZ
+407012de ESTOR.dll ?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+407012e4 ESTOR.dll ?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+407012ea ESTOR.dll ?ReadInt16L@RReadStream@@QAEFXZ
+407012f0 ESTOR.dll ?WriteUint16L@RWriteStream@@QAEXI@Z
+407012f6 ESTOR.dll ?WriteInt8L@RWriteStream@@QAEXH@Z
+407012fc ESTOR.dll ?WriteInt32L@RWriteStream@@QAEXJ@Z
+40701302 ESTOR.dll ?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+40701308 ESTOR.dll ?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+4070130e ESTOR.dll ?WriteInt16L@RWriteStream@@QAEXH@Z
+40701314 EUSER.dll ?NullTTime@Time@@SA?AVTTime@@XZ
+4070131a EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+40701340 UP_DLL.obj ?_E32Dll@@YGHPAXI0@Z
+407013e8 EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+40703000 uid.o ?uid@@3PAVTUid@@A
+40704000 ESTOR.dll __IMPORT_DESCRIPTOR_ESTOR
+40704014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+40704028 EUSER.dll __NULL_IMPORT_DESCRIPTOR
+40704084 ESTOR.dll __imp_?ReadUint16L@RReadStream@@QAEGXZ
+40704088 ESTOR.dll __imp_?ReadInt8L@RReadStream@@QAECXZ
+4070408c ESTOR.dll __imp_?ReadInt32L@RReadStream@@QAEJXZ
+40704090 ESTOR.dll __imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+40704094 ESTOR.dll __imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+40704098 ESTOR.dll __imp_?ReadInt16L@RReadStream@@QAEFXZ
+4070409c ESTOR.dll __imp_?WriteUint16L@RWriteStream@@QAEXI@Z
+407040a0 ESTOR.dll __imp_?WriteInt8L@RWriteStream@@QAEXH@Z
+407040a4 ESTOR.dll __imp_?WriteInt32L@RWriteStream@@QAEXJ@Z
+407040a8 ESTOR.dll __imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+407040ac ESTOR.dll __imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+407040b0 ESTOR.dll __imp_?WriteInt16L@RWriteStream@@QAEXH@Z
+407040b4 ESTOR.dll ESTOR_NULL_THUNK_DATA
+407040b8 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+407040bc EUSER.dll __imp_?NullTTime@Time@@SA?AVTTime@@XZ
+407040c0 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+407040c4 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+407040c8 EUSER.dll EUSER_NULL_THUNK_DATA
+40705000 UP_DLL.obj ?__xc_a@@3PAP6AXXZA
+40705008 UP_DLL.obj ?__xc_z@@3PAP6AXXZA
+40705010 UP_DLL.obj ?__xi_a@@3PAP6AXXZA
+40705018 UP_DLL.obj ?__xi_z@@3PAP6AXXZA
+40705020 UP_DLL.obj ?__xp_a@@3PAP6AXXZA
+40705028 UP_DLL.obj ?__xp_z@@3PAP6AXXZA
+40705030 UP_DLL.obj ?__xt_a@@3PAP6AXXZA
+40705038 UP_DLL.obj ?__xt_z@@3PAP6AXXZA
+40706030 common ?_initialised@@3HA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/MAP_file/winscw/urel/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,311 @@
+Address Size Name Subname Module
+
+00401000 00000179 .text ESTART.o(?LoadLocale@@YAXAAVRFs@@@Z)
+00401179 0000011b .text ESTART.o(?InitialiseScreenCalibration@@YAXAAVRFs@@@Z)
+00401294 0000008a .text ESTART.o(?LocalFSInitialisation@@YAXAAVRFs@@@Z)
+0040131e 000002d7 .text ESTART.o(?E32Main@@YAHXZ)
+004015f6 00000006 .text EUSER.dll(??0TLocale@@QAE@XZ)
+004015fc 00000006 .text EFSRV.dll(??0TFindFile@@QAE@AAVRFs@@@Z)
+00401602 00000006 .text EUSER.dll(??0TBufBase16@@IAE@ABVTDesC16@@H@Z)
+00401608 00000006 .text HAL.dll(?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z)
+0040160e 00000006 .text EUSER.dll(?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z)
+00401614 00000006 .text HAL.dll(?Set@HAL@@SAHW4TAttribute@HALData@@H@Z)
+0040161a 00000006 .text EFSRV.dll(?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z)
+00401620 00000006 .text EFSRV.dll(?FullName@TParseBase@@QBEABVTDesC16@@XZ)
+00401626 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+0040162c 00000006 .text EFSRV.dll(?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z)
+00401632 00000006 .text EUSER.dll(??0TPtr8@@QAE@PAEH@Z)
+00401638 00000006 .text EFSRV.dll(?Read@RFile@@QBEHAAVTDes8@@H@Z)
+0040163e 00000006 .text EUSER.dll(?Set@TLocale@@QBEXXZ)
+00401644 00000006 .text EUSER.dll(??0TCurrencySymbol@@QAE@XZ)
+0040164a 00000006 .text EUSER.dll(?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z)
+00401650 00000006 .text EFSRV.dll(?Close@RFsBase@@QAEXXZ)
+00401656 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+0040165c 00000006 .text EUSER.dll(?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z)
+00401662 00000006 .text EUSER.dll(??0TBufBase8@@IAE@H@Z)
+00401668 00000006 .text EFSRV.dll(?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z)
+0040166e 00000006 .text EUSER.dll(?Panic@User@@SAXABVTDesC16@@H@Z)
+00401674 00000006 .text EUSER.dll(?AtC@TDesC8@@IBEABEH@Z)
+0040167a 00000006 .text EFSRV.dll(?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z)
+00401680 00000006 .text EFSRV.dll(?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z)
+00401686 00000006 .text EUSER.dll(?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z)
+0040168c 00000006 .text EFSRV.dll(?Connect@RFs@@QAEHH@Z)
+00401692 00000006 .text EFSRV.dll(?Size@RFile@@QBEHAAH@Z)
+00401698 00000006 .text EFSRV.dll(?Read@RFile@@QBEHAAVTDes8@@@Z)
+0040169e 00000006 .text EUSER.dll(?Alloc@User@@SAPAXH@Z)
+004016a4 00000006 .text EUSER.dll(??0TPtr8@@QAE@PAEHH@Z)
+004016aa 00000006 .text EUSER.dll(?Free@User@@SAXPAX@Z)
+004016b0 00000006 .text EUSER.dll(?AtC@TDesC16@@IBEABGH@Z)
+004016b6 00000006 .text EUSER.dll(?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z)
+004016bc 00000006 .text EUSER.dll(?Resume@RProcess@@QAEXXZ)
+004016c2 00000006 .text EUSER.dll(?Close@RHandleBase@@QAEXXZ)
+004016c8 00000020 .text UP_EXE.obj(?initTable@@YAXPAP6AXXZ0@Z)
+004016e8 00000021 .text UP_EXE.obj(?Panic@@YAXW4TStatPanic@@@Z)
+00401709 00000177 .text UP_EXE.obj(?startupThread@@YAHXZ)
+00401880 00000011 .text UP_EXE.obj(?_E32Startup@@YGXXZ)
+00401892 00000006 .text EUSER.dll(??0TPtrC16@@QAE@PBG@Z)
+00401898 00000006 .text EUSER.dll(?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z)
+0040189e 00000006 .text EUSER.dll(?__DllAttachProcess@UpWins@@SAXXZ)
+004018a4 00000006 .text EUSER.dll(?__FileServer@UpWins@@SAP6AHPAX@ZXZ)
+004018aa 00000006 .text EUSER.dll(?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z)
+004018b0 00000006 .text EUSER.dll(?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z)
+004018b6 00000006 .text EUSER.dll(?SetSystem@RThread@@QBEXH@Z)
+004018bc 00000006 .text EUSER.dll(?SetProtected@RThread@@QBEXH@Z)
+004018c2 00000006 .text EUSER.dll(?Resume@RThread@@QBEXXZ)
+004018c8 00000006 .text EUSER.dll(?__Synchronize@UpWins@@SAXXZ)
+004018ce 00000006 .text EUSER.dll(?__ReleaseInitThreads@UpWins@@SAXXZ)
+004018d4 00000006 .text EUSER.dll(?__WindowServer@UpWins@@SAP6AHPAX@ZXZ)
+004018da 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+004018e0 00000006 .text EUSER.dll(?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z)
+00402000 0000019c .data ESTART.o
+004021a0 00000018 .data uid.o
+004021b8 00000018 .data UP_EXE.obj
+004021d0 00000040 .data UP_EXE.obj
+00403000 0000000c .E32_UID uid.o
+00404000 00000014 .idata $2 EFSRV.dll
+00404014 00000014 .idata $2 EUSER.dll
+00404028 00000014 .idata $2 HAL.dll
+0040403c 00000014 .idata $3 EFSRV.dll
+00404050 00000004 .idata $4 EFSRV.dll
+00404054 00000004 .idata $4 EFSRV.dll
+00404058 00000004 .idata $4 EFSRV.dll
+0040405c 00000004 .idata $4 EFSRV.dll
+00404060 00000004 .idata $4 EFSRV.dll
+00404064 00000004 .idata $4 EFSRV.dll
+00404068 00000004 .idata $4 EFSRV.dll
+0040406c 00000004 .idata $4 EFSRV.dll
+00404070 00000004 .idata $4 EFSRV.dll
+00404074 00000004 .idata $4 EFSRV.dll
+00404078 00000004 .idata $4 EFSRV.dll
+0040407c 00000004 .idata $4 EFSRV.dll
+00404080 00000004 .idata $4 EFSRV.dll
+00404084 00000004 .idata $4 EUSER.dll
+00404088 00000004 .idata $4 EUSER.dll
+0040408c 00000004 .idata $4 EUSER.dll
+00404090 00000004 .idata $4 EUSER.dll
+00404094 00000004 .idata $4 EUSER.dll
+00404098 00000004 .idata $4 EUSER.dll
+0040409c 00000004 .idata $4 EUSER.dll
+004040a0 00000004 .idata $4 EUSER.dll
+004040a4 00000004 .idata $4 EUSER.dll
+004040a8 00000004 .idata $4 EUSER.dll
+004040ac 00000004 .idata $4 EUSER.dll
+004040b0 00000004 .idata $4 EUSER.dll
+004040b4 00000004 .idata $4 EUSER.dll
+004040b8 00000004 .idata $4 EUSER.dll
+004040bc 00000004 .idata $4 EUSER.dll
+004040c0 00000004 .idata $4 EUSER.dll
+004040c4 00000004 .idata $4 EUSER.dll
+004040c8 00000004 .idata $4 EUSER.dll
+004040cc 00000004 .idata $4 EUSER.dll
+004040d0 00000004 .idata $4 EUSER.dll
+004040d4 00000004 .idata $4 EUSER.dll
+004040d8 00000004 .idata $4 EUSER.dll
+004040dc 00000004 .idata $4 EUSER.dll
+004040e0 00000004 .idata $4 EUSER.dll
+004040e4 00000004 .idata $4 EUSER.dll
+004040e8 00000004 .idata $4 EUSER.dll
+004040ec 00000004 .idata $4 EUSER.dll
+004040f0 00000004 .idata $4 EUSER.dll
+004040f4 00000004 .idata $4 EUSER.dll
+004040f8 00000004 .idata $4 EUSER.dll
+004040fc 00000004 .idata $4 EUSER.dll
+00404100 00000004 .idata $4 EUSER.dll
+00404104 00000004 .idata $4 EUSER.dll
+00404108 00000004 .idata $4 EUSER.dll
+0040410c 00000004 .idata $4 EUSER.dll
+00404110 00000004 .idata $4 EUSER.dll
+00404114 00000004 .idata $4 HAL.dll
+00404118 00000004 .idata $4 HAL.dll
+0040411c 00000004 .idata $4 HAL.dll
+00404120 00000004 .idata $5 EFSRV.dll(__imp_??0TFindFile@@QAE@AAVRFs@@@Z)
+00404124 00000004 .idata $5 EFSRV.dll(__imp_?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z)
+00404128 00000004 .idata $5 EFSRV.dll(__imp_?FullName@TParseBase@@QBEABVTDesC16@@XZ)
+0040412c 00000004 .idata $5 EFSRV.dll(__imp_?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z)
+00404130 00000004 .idata $5 EFSRV.dll(__imp_?Read@RFile@@QBEHAAVTDes8@@H@Z)
+00404134 00000004 .idata $5 EFSRV.dll(__imp_?Close@RFsBase@@QAEXXZ)
+00404138 00000004 .idata $5 EFSRV.dll(__imp_?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z)
+0040413c 00000004 .idata $5 EFSRV.dll(__imp_?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z)
+00404140 00000004 .idata $5 EFSRV.dll(__imp_?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z)
+00404144 00000004 .idata $5 EFSRV.dll(__imp_?Connect@RFs@@QAEHH@Z)
+00404148 00000004 .idata $5 EFSRV.dll(__imp_?Size@RFile@@QBEHAAH@Z)
+0040414c 00000004 .idata $5 EFSRV.dll(__imp_?Read@RFile@@QBEHAAVTDes8@@@Z)
+00404150 00000004 .idata $5 EFSRV.dll
+00404154 00000004 .idata $5 EUSER.dll(__imp_??0TLocale@@QAE@XZ)
+00404158 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@ABVTDesC16@@H@Z)
+0040415c 00000004 .idata $5 EUSER.dll(__imp_?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z)
+00404160 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+00404164 00000004 .idata $5 EUSER.dll(__imp_??0TPtr8@@QAE@PAEH@Z)
+00404168 00000004 .idata $5 EUSER.dll(__imp_?Set@TLocale@@QBEXXZ)
+0040416c 00000004 .idata $5 EUSER.dll(__imp_??0TCurrencySymbol@@QAE@XZ)
+00404170 00000004 .idata $5 EUSER.dll(__imp_?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z)
+00404174 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+00404178 00000004 .idata $5 EUSER.dll(__imp_?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z)
+0040417c 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase8@@IAE@H@Z)
+00404180 00000004 .idata $5 EUSER.dll(__imp_?Panic@User@@SAXABVTDesC16@@H@Z)
+00404184 00000004 .idata $5 EUSER.dll(__imp_?AtC@TDesC8@@IBEABEH@Z)
+00404188 00000004 .idata $5 EUSER.dll(__imp_?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z)
+0040418c 00000004 .idata $5 EUSER.dll(__imp_?Alloc@User@@SAPAXH@Z)
+00404190 00000004 .idata $5 EUSER.dll(__imp_??0TPtr8@@QAE@PAEHH@Z)
+00404194 00000004 .idata $5 EUSER.dll(__imp_?Free@User@@SAXPAX@Z)
+00404198 00000004 .idata $5 EUSER.dll(__imp_?AtC@TDesC16@@IBEABGH@Z)
+0040419c 00000004 .idata $5 EUSER.dll(__imp_?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z)
+004041a0 00000004 .idata $5 EUSER.dll(__imp_?Resume@RProcess@@QAEXXZ)
+004041a4 00000004 .idata $5 EUSER.dll(__imp_?Close@RHandleBase@@QAEXXZ)
+004041a8 00000004 .idata $5 EUSER.dll(__imp_??0TPtrC16@@QAE@PBG@Z)
+004041ac 00000004 .idata $5 EUSER.dll(__imp_?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z)
+004041b0 00000004 .idata $5 EUSER.dll(__imp_?__DllAttachProcess@UpWins@@SAXXZ)
+004041b4 00000004 .idata $5 EUSER.dll(__imp_?__FileServer@UpWins@@SAP6AHPAX@ZXZ)
+004041b8 00000004 .idata $5 EUSER.dll(__imp_?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z)
+004041bc 00000004 .idata $5 EUSER.dll(__imp_?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z)
+004041c0 00000004 .idata $5 EUSER.dll(__imp_?SetSystem@RThread@@QBEXH@Z)
+004041c4 00000004 .idata $5 EUSER.dll(__imp_?SetProtected@RThread@@QBEXH@Z)
+004041c8 00000004 .idata $5 EUSER.dll(__imp_?Resume@RThread@@QBEXXZ)
+004041cc 00000004 .idata $5 EUSER.dll(__imp_?__Synchronize@UpWins@@SAXXZ)
+004041d0 00000004 .idata $5 EUSER.dll(__imp_?__ReleaseInitThreads@UpWins@@SAXXZ)
+004041d4 00000004 .idata $5 EUSER.dll(__imp_?__WindowServer@UpWins@@SAP6AHPAX@ZXZ)
+004041d8 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+004041dc 00000004 .idata $5 EUSER.dll(__imp_?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z)
+004041e0 00000004 .idata $5 EUSER.dll
+004041e4 00000004 .idata $5 HAL.dll(__imp_?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z)
+004041e8 00000004 .idata $5 HAL.dll(__imp_?Set@HAL@@SAHW4TAttribute@HALData@@H@Z)
+004041ec 00000004 .idata $5 HAL.dll
+004041f0 0000000a .idata $6 EFSRV.dll
+004041fa 0000000a .idata $6 EUSER.dll
+00404204 00000008 .idata $6 HAL.dll
+00405000 00000004 .CRT $XCA UP_EXE.obj
+00405008 00000004 .CRT $XCZ UP_EXE.obj
+00405010 00000004 .CRT $XIA UP_EXE.obj
+00405018 00000004 .CRT $XIZ UP_EXE.obj
+00405020 00000004 .CRT $XPA UP_EXE.obj
+00405028 00000004 .CRT $XPZ UP_EXE.obj
+00405030 00000004 .CRT $XTA UP_EXE.obj
+00405038 00000004 .CRT $XTZ UP_EXE.obj
+00406000 00000008 .bss ESTART.o
+00406008 00000008 .bss uid.o
+00406010 00000008 .bss UP_EXE.obj
+00406018 00000000 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+0040131e ESTART.o ?E32Main@@YAHXZ
+004015f6 EUSER.dll ??0TLocale@@QAE@XZ
+004015fc EFSRV.dll ??0TFindFile@@QAE@AAVRFs@@@Z
+00401602 EUSER.dll ??0TBufBase16@@IAE@ABVTDesC16@@H@Z
+00401608 HAL.dll ?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z
+0040160e EUSER.dll ?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z
+00401614 HAL.dll ?Set@HAL@@SAHW4TAttribute@HALData@@H@Z
+0040161a EFSRV.dll ?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z
+00401620 EFSRV.dll ?FullName@TParseBase@@QBEABVTDesC16@@XZ
+00401626 EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+0040162c EFSRV.dll ?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z
+00401632 EUSER.dll ??0TPtr8@@QAE@PAEH@Z
+00401638 EFSRV.dll ?Read@RFile@@QBEHAAVTDes8@@H@Z
+0040163e EUSER.dll ?Set@TLocale@@QBEXXZ
+00401644 EUSER.dll ??0TCurrencySymbol@@QAE@XZ
+0040164a EUSER.dll ?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z
+00401650 EFSRV.dll ?Close@RFsBase@@QAEXXZ
+00401656 EUSER.dll ??0TBufBase16@@IAE@H@Z
+0040165c EUSER.dll ?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z
+00401662 EUSER.dll ??0TBufBase8@@IAE@H@Z
+00401668 EFSRV.dll ?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z
+0040166e EUSER.dll ?Panic@User@@SAXABVTDesC16@@H@Z
+00401674 EUSER.dll ?AtC@TDesC8@@IBEABEH@Z
+0040167a EFSRV.dll ?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z
+00401680 EFSRV.dll ?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z
+00401686 EUSER.dll ?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z
+0040168c EFSRV.dll ?Connect@RFs@@QAEHH@Z
+00401692 EFSRV.dll ?Size@RFile@@QBEHAAH@Z
+00401698 EFSRV.dll ?Read@RFile@@QBEHAAVTDes8@@@Z
+0040169e EUSER.dll ?Alloc@User@@SAPAXH@Z
+004016a4 EUSER.dll ??0TPtr8@@QAE@PAEHH@Z
+004016aa EUSER.dll ?Free@User@@SAXPAX@Z
+004016b0 EUSER.dll ?AtC@TDesC16@@IBEABGH@Z
+004016b6 EUSER.dll ?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z
+004016bc EUSER.dll ?Resume@RProcess@@QAEXXZ
+004016c2 EUSER.dll ?Close@RHandleBase@@QAEXXZ
+004016e8 UP_EXE.obj ?Panic@@YAXW4TStatPanic@@@Z
+00401880 UP_EXE.obj ?_E32Startup@@YGXXZ
+00401892 EUSER.dll ??0TPtrC16@@QAE@PBG@Z
+00401898 EUSER.dll ?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z
+0040189e EUSER.dll ?__DllAttachProcess@UpWins@@SAXXZ
+004018a4 EUSER.dll ?__FileServer@UpWins@@SAP6AHPAX@ZXZ
+004018aa EUSER.dll ?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z
+004018b0 EUSER.dll ?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z
+004018b6 EUSER.dll ?SetSystem@RThread@@QBEXH@Z
+004018bc EUSER.dll ?SetProtected@RThread@@QBEXH@Z
+004018c2 EUSER.dll ?Resume@RThread@@QBEXXZ
+004018c8 EUSER.dll ?__Synchronize@UpWins@@SAXXZ
+004018ce EUSER.dll ?__ReleaseInitThreads@UpWins@@SAXXZ
+004018d4 EUSER.dll ?__WindowServer@UpWins@@SAP6AHPAX@ZXZ
+004018da EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+004018e0 EUSER.dll ?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z
+00403000 uid.o ?uid@@3PAVTUid@@A
+00404000 EFSRV.dll __IMPORT_DESCRIPTOR_EFSRV
+00404014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+00404028 HAL.dll __IMPORT_DESCRIPTOR_HAL
+0040403c EFSRV.dll __NULL_IMPORT_DESCRIPTOR
+00404120 EFSRV.dll __imp_??0TFindFile@@QAE@AAVRFs@@@Z
+00404124 EFSRV.dll __imp_?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z
+00404128 EFSRV.dll __imp_?FullName@TParseBase@@QBEABVTDesC16@@XZ
+0040412c EFSRV.dll __imp_?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z
+00404130 EFSRV.dll __imp_?Read@RFile@@QBEHAAVTDes8@@H@Z
+00404134 EFSRV.dll __imp_?Close@RFsBase@@QAEXXZ
+00404138 EFSRV.dll __imp_?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z
+0040413c EFSRV.dll __imp_?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z
+00404140 EFSRV.dll __imp_?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z
+00404144 EFSRV.dll __imp_?Connect@RFs@@QAEHH@Z
+00404148 EFSRV.dll __imp_?Size@RFile@@QBEHAAH@Z
+0040414c EFSRV.dll __imp_?Read@RFile@@QBEHAAVTDes8@@@Z
+00404150 EFSRV.dll EFSRV_NULL_THUNK_DATA
+00404154 EUSER.dll __imp_??0TLocale@@QAE@XZ
+00404158 EUSER.dll __imp_??0TBufBase16@@IAE@ABVTDesC16@@H@Z
+0040415c EUSER.dll __imp_?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z
+00404160 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+00404164 EUSER.dll __imp_??0TPtr8@@QAE@PAEH@Z
+00404168 EUSER.dll __imp_?Set@TLocale@@QBEXXZ
+0040416c EUSER.dll __imp_??0TCurrencySymbol@@QAE@XZ
+00404170 EUSER.dll __imp_?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z
+00404174 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+00404178 EUSER.dll __imp_?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z
+0040417c EUSER.dll __imp_??0TBufBase8@@IAE@H@Z
+00404180 EUSER.dll __imp_?Panic@User@@SAXABVTDesC16@@H@Z
+00404184 EUSER.dll __imp_?AtC@TDesC8@@IBEABEH@Z
+00404188 EUSER.dll __imp_?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z
+0040418c EUSER.dll __imp_?Alloc@User@@SAPAXH@Z
+00404190 EUSER.dll __imp_??0TPtr8@@QAE@PAEHH@Z
+00404194 EUSER.dll __imp_?Free@User@@SAXPAX@Z
+00404198 EUSER.dll __imp_?AtC@TDesC16@@IBEABGH@Z
+0040419c EUSER.dll __imp_?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z
+004041a0 EUSER.dll __imp_?Resume@RProcess@@QAEXXZ
+004041a4 EUSER.dll __imp_?Close@RHandleBase@@QAEXXZ
+004041a8 EUSER.dll __imp_??0TPtrC16@@QAE@PBG@Z
+004041ac EUSER.dll __imp_?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z
+004041b0 EUSER.dll __imp_?__DllAttachProcess@UpWins@@SAXXZ
+004041b4 EUSER.dll __imp_?__FileServer@UpWins@@SAP6AHPAX@ZXZ
+004041b8 EUSER.dll __imp_?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z
+004041bc EUSER.dll __imp_?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z
+004041c0 EUSER.dll __imp_?SetSystem@RThread@@QBEXH@Z
+004041c4 EUSER.dll __imp_?SetProtected@RThread@@QBEXH@Z
+004041c8 EUSER.dll __imp_?Resume@RThread@@QBEXXZ
+004041cc EUSER.dll __imp_?__Synchronize@UpWins@@SAXXZ
+004041d0 EUSER.dll __imp_?__ReleaseInitThreads@UpWins@@SAXXZ
+004041d4 EUSER.dll __imp_?__WindowServer@UpWins@@SAP6AHPAX@ZXZ
+004041d8 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+004041dc EUSER.dll __imp_?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z
+004041e0 EUSER.dll EUSER_NULL_THUNK_DATA
+004041e4 HAL.dll __imp_?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z
+004041e8 HAL.dll __imp_?Set@HAL@@SAHW4TAttribute@HALData@@H@Z
+004041ec HAL.dll HAL_NULL_THUNK_DATA
+00405000 UP_EXE.obj ?__xc_a@@3PAP6AXXZA
+00405008 UP_EXE.obj ?__xc_z@@3PAP6AXXZA
+00405010 UP_EXE.obj ?__xi_a@@3PAP6AXXZA
+00405018 UP_EXE.obj ?__xi_z@@3PAP6AXXZA
+00405020 UP_EXE.obj ?__xp_a@@3PAP6AXXZA
+00405028 UP_EXE.obj ?__xp_z@@3PAP6AXXZA
+00405030 UP_EXE.obj ?__xt_a@@3PAP6AXXZA
+00405038 UP_EXE.obj ?__xt_z@@3PAP6AXXZA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/Preprocessed_text/IRCOMM.rpp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+# 1 "W:\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS"
+// IRCOMM.RSS
+//
+// Copyright (c) 1998 Symbian Ltd. All rights reserved.
+//
+
+# 1 "ircomm.rls" 1
+rls_string STRING_r_irccsy_info1 "Infrared"
+# 6 "W:\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+# 1 "..\\INC\\csy.rh" 1
+// CSY.RH
+//
+// Copyright (c) 1998 Symbian Ltd. All rights reserved.
+//
+
+
+STRUCT CSY_INFORMATION
+ {
+ LTEXT humanreadablename;
+ }
+# 7 "W:\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+
+RESOURCE CSY_INFORMATION r_irccsy_info
+ {
+ humanreadablename=STRING_r_irccsy_info1;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/SGML_file/allclasses-frame.html Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Tue Jul 15 18:05:14 BST 2003 -->
+<TITLE>
+All Classes
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+</HEAD>
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/symbian/sdk/util/assertion/Assert.html" TARGET="classFrame">Assert</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/AssertionException.html" TARGET="classFrame">AssertionException</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/JniOutOfMemoryError.html" TARGET="classFrame">JniOutOfMemoryError</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
Binary file bintools/evalid/left/ok/ZIP_file/aifapp_ResourceBundles.jar has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/left/ok/identical/console.ini Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Console.ini
+# Copyright (c) 1997-2001 Symbian Ltd. All rights reserved.
+#
+ScreenWidth 640
+ScreenHeight 240
+
+PhysicalScreenWidth 0
+PhysicalScreenHeight 0
+
+fasciabitmap console.bmp
+
+ScreenOffsetX 0
+ScreenOffsetY 0
+
+
+# could be decreased to reflect the amount of memory available on Brutus
+MegabytesOfFreeMemory 16
+
+
Binary file bintools/evalid/right/fail/CHM_file/content/file.chm has changed
Binary file bintools/evalid/right/fail/CHM_file/less_files/filelist.chm has changed
Binary file bintools/evalid/right/fail/CHM_file/more_files/filelist.chm has changed
Binary file bintools/evalid/right/fail/Intel_DLL/wins/udeb/C32.DLL has changed
Binary file bintools/evalid/right/fail/Intel_DLL/wins/urel/BAFL.DLL has changed
Binary file bintools/evalid/right/fail/Intel_DLL/winscw_data.dll has changed
Binary file bintools/evalid/right/fail/Intel_DLL/winscw_export.dll has changed
Binary file bintools/evalid/right/fail/Intel_DLL/winscw_import.dll has changed
Binary file bintools/evalid/right/fail/Intel_DLL/winscw_rdata.dll has changed
Binary file bintools/evalid/right/fail/Intel_DLL/winscw_text.dll has changed
Binary file bintools/evalid/right/fail/Intel_DLL/winscw_uid.dll has changed
Binary file bintools/evalid/right/fail/Intel_EXE/winscw_data.exe has changed
Binary file bintools/evalid/right/fail/Intel_EXE/winscw_import.exe has changed
Binary file bintools/evalid/right/fail/Intel_EXE/winscw_rdata.exe has changed
Binary file bintools/evalid/right/fail/Intel_EXE/winscw_text.exe has changed
Binary file bintools/evalid/right/fail/Intel_EXE/winscw_uid.exe has changed
Binary file bintools/evalid/right/fail/Intel_library/symbol.lib has changed
Binary file bintools/evalid/right/fail/Intel_object/symbol.obj has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/MAP_file/offset.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o) (_head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o) (_________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o) (_head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o) (____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001050 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ 0x10003000 _head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ 0x10003014 _head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ 0x10003104 ____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ 0x10003124 _________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/MAP_file/size.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o) (_head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o) (_________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o) (_head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o) (____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001048 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x64 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ 0x10003000 _head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ 0x10003014 _head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ 0x10003104 ____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ 0x10003124 _________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/MAP_file/symbol.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o) (_head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o) (_________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o) (_head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o) (____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001048 TASShdAlarm::InternaliseL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ 0x10003000 _head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ 0x10003014 _head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ 0x10003104 ____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ 0x10003124 _________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/MAP_file/winscw_offset.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,145 @@
+Address Size Name Subname Module
+
+40701000 0000003d .text ASSHDALARM.o(??0TASShdAlarm@@QAE@XZ)
+4070103d 00000107 .text ASSHDALARM.o(?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z)
+40701144 000000dc .text ASSHDALARM.o(?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z)
+40701220 000000a0 .text ASSHDALARM.o(?Reset@TASShdAlarm@@QAEXXZ)
+407012c0 00000005 .text ASSHDDLL.o(?E32Dll@@YAHW4TDllReason@@@Z)
+407012c6 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+407012cc 00000006 .text ESTOR.dll(?ReadUint16L@RReadStream@@QAEGXZ)
+407012d2 00000006 .text ESTOR.dll(?ReadInt8L@RReadStream@@QAECXZ)
+407012d8 00000006 .text ESTOR.dll(?ReadInt32L@RReadStream@@QAEJXZ)
+407012de 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+407012e4 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+407012ea 00000006 .text ESTOR.dll(?ReadInt16L@RReadStream@@QAEFXZ)
+407012f0 00000006 .text ESTOR.dll(?WriteUint16L@RWriteStream@@QAEXI@Z)
+407012f6 00000006 .text ESTOR.dll(?WriteInt8L@RWriteStream@@QAEXH@Z)
+407012fc 00000006 .text ESTOR.dll(?WriteInt32L@RWriteStream@@QAEXJ@Z)
+40701302 00000006 .text ESTOR.dll(?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+40701308 00000006 .text ESTOR.dll(?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+4070130e 00000006 .text ESTOR.dll(?WriteInt16L@RWriteStream@@QAEXH@Z)
+40701314 00000006 .text EUSER.dll(?NullTTime@Time@@SA?AVTTime@@XZ)
+4070131a 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+40701320 00000020 .text UP_DLL.obj(?initTable@@YAXPAP6AXXZ0@Z)
+40701340 000000a7 .text UP_DLL.obj(?_E32Dll@@YGHPAXI0@Z)
+407013e8 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+40702000 0000001c .data ASSHDALARM.o
+40702020 00000018 .data ASSHDDLL.o
+40702038 00000018 .data uid.o
+40702050 00000018 .data UP_DLL.obj
+40702068 00000010 .data UP_DLL.obj
+40703000 0000000c .E32_UID uid.o
+40704000 00000014 .idata $2 ESTOR.dll
+40704014 00000014 .idata $2 EUSER.dll
+40704028 00000014 .idata $3 EUSER.dll
+4070403c 00000004 .idata $4 ESTOR.dll
+40704040 00000004 .idata $4 ESTOR.dll
+40704044 00000004 .idata $4 ESTOR.dll
+40704048 00000004 .idata $4 ESTOR.dll
+4070404c 00000004 .idata $4 ESTOR.dll
+40704050 00000004 .idata $4 ESTOR.dll
+40704054 00000004 .idata $4 ESTOR.dll
+40704058 00000004 .idata $4 ESTOR.dll
+4070405c 00000004 .idata $4 ESTOR.dll
+40704060 00000004 .idata $4 ESTOR.dll
+40704064 00000004 .idata $4 ESTOR.dll
+40704068 00000004 .idata $4 ESTOR.dll
+4070406c 00000004 .idata $4 ESTOR.dll
+40704070 00000004 .idata $4 EUSER.dll
+40704074 00000004 .idata $4 EUSER.dll
+40704078 00000004 .idata $4 EUSER.dll
+4070407c 00000004 .idata $4 EUSER.dll
+40704080 00000004 .idata $4 EUSER.dll
+40704084 00000004 .idata $5 ESTOR.dll(__imp_?ReadUint16L@RReadStream@@QAEGXZ)
+40704088 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt8L@RReadStream@@QAECXZ)
+4070408c 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt32L@RReadStream@@QAEJXZ)
+40704090 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+40704094 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+40704098 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt16L@RReadStream@@QAEFXZ)
+4070409c 00000004 .idata $5 ESTOR.dll(__imp_?WriteUint16L@RWriteStream@@QAEXI@Z)
+407040a0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt8L@RWriteStream@@QAEXH@Z)
+407040a4 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt32L@RWriteStream@@QAEXJ@Z)
+407040a8 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+407040ac 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+407040b0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt16L@RWriteStream@@QAEXH@Z)
+407040b4 00000004 .idata $5 ESTOR.dll
+407040b8 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+407040bc 00000004 .idata $5 EUSER.dll(__imp_?NullTTime@Time@@SA?AVTTime@@XZ)
+407040c0 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+407040c4 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+407040c8 00000004 .idata $5 EUSER.dll
+407040cc 0000000a .idata $6 ESTOR.dll
+407040d6 0000000a .idata $6 EUSER.dll
+40705000 00000004 .CRT $XCA UP_DLL.obj
+40705008 00000004 .CRT $XCZ UP_DLL.obj
+40705010 00000004 .CRT $XIA UP_DLL.obj
+40705018 00000004 .CRT $XIZ UP_DLL.obj
+40705020 00000004 .CRT $XPA UP_DLL.obj
+40705028 00000004 .CRT $XPZ UP_DLL.obj
+40705030 00000004 .CRT $XTA UP_DLL.obj
+40705038 00000004 .CRT $XTZ UP_DLL.obj
+40706000 00000012 .bss ASSHDALARM.o
+40706018 00000008 .bss ASSHDDLL.o
+40706020 00000008 .bss uid.o
+40706028 00000008 .bss UP_DLL.obj
+40706030 00000004 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+40701000 ASSHDALARM.o ??0TASShdAlarm@@QAE@XZ
+4070103d ASSHDALARM.o ?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z
+40701144 ASSHDALARM.o ?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z
+40701220 ASSHDALARM.o ?Reset@TASShdAlarm@@QAEXXZ
+407012c0 ASSHDDLL.o ?E32Dll@@YAHW4TDllReason@@@Z
+407012c6 EUSER.dll ??0TBufBase16@@IAE@H@Z
+407012cc ESTOR.dll ?ReadUint16L@RReadStream@@QAEGXZ
+407012d2 ESTOR.dll ?ReadInt8L@RReadStream@@QAECXZ
+407012d8 ESTOR.dll ?ReadInt32L@RReadStream@@QAEJXZ
+407012de ESTOR.dll ?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+407012e4 ESTOR.dll ?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+407012ea ESTOR.dll ?ReadInt16L@RReadStream@@QAEFXZ
+407012f0 ESTOR.dll ?WriteUint16L@RWriteStream@@QAEXI@Z
+407012f6 ESTOR.dll ?WriteInt8L@RWriteStream@@QAEXH@Z
+407012fc ESTOR.dll ?WriteInt32L@RWriteStream@@QAEXJ@Z
+40701302 ESTOR.dll ?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+40701308 ESTOR.dll ?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+4070130e ESTOR.dll ?WriteInt16L@RWriteStream@@QAEXH@Z
+40701314 EUSER.dll ?NullTTime@Time@@SA?AVTTime@@XZ
+4070131a EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+40701340 UP_DLL.obj ?_E32Dll@@YGHPAXI0@Z
+407013e8 EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+40703000 uid.o ?uid@@3PAVTUid@@A
+40704000 ESTOR.dll __IMPORT_DESCRIPTOR_ESTOR
+40704014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+40704028 EUSER.dll __NULL_IMPORT_DESCRIPTOR
+40704084 ESTOR.dll __imp_?ReadUint16L@RReadStream@@QAEGXZ
+40704088 ESTOR.dll __imp_?ReadInt8L@RReadStream@@QAECXZ
+4070408c ESTOR.dll __imp_?ReadInt32L@RReadStream@@QAEJXZ
+40704090 ESTOR.dll __imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+40704094 ESTOR.dll __imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+40704098 ESTOR.dll __imp_?ReadInt16L@RReadStream@@QAEFXZ
+4070409c ESTOR.dll __imp_?WriteUint16L@RWriteStream@@QAEXI@Z
+407040a0 ESTOR.dll __imp_?WriteInt8L@RWriteStream@@QAEXH@Z
+407040a4 ESTOR.dll __imp_?WriteInt32L@RWriteStream@@QAEXJ@Z
+407040a8 ESTOR.dll __imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+407040ac ESTOR.dll __imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+407040b0 ESTOR.dll __imp_?WriteInt16L@RWriteStream@@QAEXH@Z
+407040b4 ESTOR.dll ESTOR_NULL_THUNK_DATA
+407040b8 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+407040bc EUSER.dll __imp_?NullTTime@Time@@SA?AVTTime@@XZ
+407040c0 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+407040c4 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+407040c8 EUSER.dll EUSER_NULL_THUNK_DATA
+40705000 UP_DLL.obj ?__xc_a@@3PAP6AXXZA
+40705008 UP_DLL.obj ?__xc_z@@3PAP6AXXZA
+40705010 UP_DLL.obj ?__xi_a@@3PAP6AXXZA
+40705018 UP_DLL.obj ?__xi_z@@3PAP6AXXZA
+40705020 UP_DLL.obj ?__xp_a@@3PAP6AXXZA
+40705028 UP_DLL.obj ?__xp_z@@3PAP6AXXZA
+40705030 UP_DLL.obj ?__xt_a@@3PAP6AXXZA
+40705038 UP_DLL.obj ?__xt_z@@3PAP6AXXZA
+40706030 common ?_initialised@@3HA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/MAP_file/winscw_symbol.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,145 @@
+Address Size Name Subname Module
+
+40701000 0000003d .text ASSHDALARM.o(??0TASShdAlarm@@QAE@XZ)
+4070103d 00000107 .text ASSHDALARM.o(?InternaliseL@TASShdAlarm@@QAEXAAVRReadStream@@@Z)
+40701144 000000dc .text ASSHDALARM.o(?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z)
+40701220 000000a2 .text ASSHDALARM.o(?Reset@TASShdAlarm@@QAEXXZ)
+407012c2 00000003 .text ASSHDDLL.o(?E32Dll@@YAHW4TDllReason@@@Z)
+407012c6 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+407012cc 00000006 .text ESTOR.dll(?ReadUint16L@RReadStream@@QAEGXZ)
+407012d2 00000006 .text ESTOR.dll(?ReadInt8L@RReadStream@@QAECXZ)
+407012d8 00000006 .text ESTOR.dll(?ReadInt32L@RReadStream@@QAEJXZ)
+407012de 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+407012e4 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+407012ea 00000006 .text ESTOR.dll(?ReadInt16L@RReadStream@@QAEFXZ)
+407012f0 00000006 .text ESTOR.dll(?WriteUint16L@RWriteStream@@QAEXI@Z)
+407012f6 00000006 .text ESTOR.dll(?WriteInt8L@RWriteStream@@QAEXH@Z)
+407012fc 00000006 .text ESTOR.dll(?WriteInt32L@RWriteStream@@QAEXJ@Z)
+40701302 00000006 .text ESTOR.dll(?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+40701308 00000006 .text ESTOR.dll(?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+4070130e 00000006 .text ESTOR.dll(?WriteInt16L@RWriteStream@@QAEXH@Z)
+40701314 00000006 .text EUSER.dll(?NullTTime@Time@@SA?AVTTime@@XZ)
+4070131a 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+40701320 00000020 .text UP_DLL.obj(?initTable@@YAXPAP6AXXZ0@Z)
+40701340 000000a7 .text UP_DLL.obj(?_E32Dll@@YGHPAXI0@Z)
+407013e8 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+40702000 0000001c .data ASSHDALARM.o
+40702020 00000018 .data ASSHDDLL.o
+40702038 00000018 .data uid.o
+40702050 00000018 .data UP_DLL.obj
+40702068 00000010 .data UP_DLL.obj
+40703000 0000000c .E32_UID uid.o
+40704000 00000014 .idata $2 ESTOR.dll
+40704014 00000014 .idata $2 EUSER.dll
+40704028 00000014 .idata $3 EUSER.dll
+4070403c 00000004 .idata $4 ESTOR.dll
+40704040 00000004 .idata $4 ESTOR.dll
+40704044 00000004 .idata $4 ESTOR.dll
+40704048 00000004 .idata $4 ESTOR.dll
+4070404c 00000004 .idata $4 ESTOR.dll
+40704050 00000004 .idata $4 ESTOR.dll
+40704054 00000004 .idata $4 ESTOR.dll
+40704058 00000004 .idata $4 ESTOR.dll
+4070405c 00000004 .idata $4 ESTOR.dll
+40704060 00000004 .idata $4 ESTOR.dll
+40704064 00000004 .idata $4 ESTOR.dll
+40704068 00000004 .idata $4 ESTOR.dll
+4070406c 00000004 .idata $4 ESTOR.dll
+40704070 00000004 .idata $4 EUSER.dll
+40704074 00000004 .idata $4 EUSER.dll
+40704078 00000004 .idata $4 EUSER.dll
+4070407c 00000004 .idata $4 EUSER.dll
+40704080 00000004 .idata $4 EUSER.dll
+40704084 00000004 .idata $5 ESTOR.dll(__imp_?ReadUint16L@RReadStream@@QAEGXZ)
+40704088 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt8L@RReadStream@@QAECXZ)
+4070408c 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt32L@RReadStream@@QAEJXZ)
+40704090 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+40704094 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+40704098 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt16L@RReadStream@@QAEFXZ)
+4070409c 00000004 .idata $5 ESTOR.dll(__imp_?WriteUint16L@RWriteStream@@QAEXI@Z)
+407040a0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt8L@RWriteStream@@QAEXH@Z)
+407040a4 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt32L@RWriteStream@@QAEXJ@Z)
+407040a8 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+407040ac 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+407040b0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt16L@RWriteStream@@QAEXH@Z)
+407040b4 00000004 .idata $5 ESTOR.dll
+407040b8 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+407040bc 00000004 .idata $5 EUSER.dll(__imp_?NullTTime@Time@@SA?AVTTime@@XZ)
+407040c0 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+407040c4 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+407040c8 00000004 .idata $5 EUSER.dll
+407040cc 0000000a .idata $6 ESTOR.dll
+407040d6 0000000a .idata $6 EUSER.dll
+40705000 00000004 .CRT $XCA UP_DLL.obj
+40705008 00000004 .CRT $XCZ UP_DLL.obj
+40705010 00000004 .CRT $XIA UP_DLL.obj
+40705018 00000004 .CRT $XIZ UP_DLL.obj
+40705020 00000004 .CRT $XPA UP_DLL.obj
+40705028 00000004 .CRT $XPZ UP_DLL.obj
+40705030 00000004 .CRT $XTA UP_DLL.obj
+40705038 00000004 .CRT $XTZ UP_DLL.obj
+40706000 00000012 .bss ASSHDALARM.o
+40706018 00000008 .bss ASSHDDLL.o
+40706020 00000008 .bss uid.o
+40706028 00000008 .bss UP_DLL.obj
+40706030 00000004 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+40701000 ASSHDALARM.o ??0TASShdAlarm@@QAE@XZ
+4070103d ASSHDALARM.o ?InternaliseL@TASShdAlarm@@QAEXAAVRReadStream@@@Z
+40701144 ASSHDALARM.o ?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z
+40701220 ASSHDALARM.o ?Reset@TASShdAlarm@@QAEXXZ
+407012c2 ASSHDDLL.o ?E32Dll@@YAHW4TDllReason@@@Z
+407012c6 EUSER.dll ??0TBufBase16@@IAE@H@Z
+407012cc ESTOR.dll ?ReadUint16L@RReadStream@@QAEGXZ
+407012d2 ESTOR.dll ?ReadInt8L@RReadStream@@QAECXZ
+407012d8 ESTOR.dll ?ReadInt32L@RReadStream@@QAEJXZ
+407012de ESTOR.dll ?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+407012e4 ESTOR.dll ?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+407012ea ESTOR.dll ?ReadInt16L@RReadStream@@QAEFXZ
+407012f0 ESTOR.dll ?WriteUint16L@RWriteStream@@QAEXI@Z
+407012f6 ESTOR.dll ?WriteInt8L@RWriteStream@@QAEXH@Z
+407012fc ESTOR.dll ?WriteInt32L@RWriteStream@@QAEXJ@Z
+40701302 ESTOR.dll ?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+40701308 ESTOR.dll ?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+4070130e ESTOR.dll ?WriteInt16L@RWriteStream@@QAEXH@Z
+40701314 EUSER.dll ?NullTTime@Time@@SA?AVTTime@@XZ
+4070131a EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+40701340 UP_DLL.obj ?_E32Dll@@YGHPAXI0@Z
+407013e8 EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+40703000 uid.o ?uid@@3PAVTUid@@A
+40704000 ESTOR.dll __IMPORT_DESCRIPTOR_ESTOR
+40704014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+40704028 EUSER.dll __NULL_IMPORT_DESCRIPTOR
+40704084 ESTOR.dll __imp_?ReadUint16L@RReadStream@@QAEGXZ
+40704088 ESTOR.dll __imp_?ReadInt8L@RReadStream@@QAECXZ
+4070408c ESTOR.dll __imp_?ReadInt32L@RReadStream@@QAEJXZ
+40704090 ESTOR.dll __imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+40704094 ESTOR.dll __imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+40704098 ESTOR.dll __imp_?ReadInt16L@RReadStream@@QAEFXZ
+4070409c ESTOR.dll __imp_?WriteUint16L@RWriteStream@@QAEXI@Z
+407040a0 ESTOR.dll __imp_?WriteInt8L@RWriteStream@@QAEXH@Z
+407040a4 ESTOR.dll __imp_?WriteInt32L@RWriteStream@@QAEXJ@Z
+407040a8 ESTOR.dll __imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+407040ac ESTOR.dll __imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+407040b0 ESTOR.dll __imp_?WriteInt16L@RWriteStream@@QAEXH@Z
+407040b4 ESTOR.dll ESTOR_NULL_THUNK_DATA
+407040b8 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+407040bc EUSER.dll __imp_?NullTTime@Time@@SA?AVTTime@@XZ
+407040c0 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+407040c4 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+407040c8 EUSER.dll EUSER_NULL_THUNK_DATA
+40705000 UP_DLL.obj ?__xc_a@@3PAP6AXXZA
+40705008 UP_DLL.obj ?__xc_z@@3PAP6AXXZA
+40705010 UP_DLL.obj ?__xi_a@@3PAP6AXXZA
+40705018 UP_DLL.obj ?__xi_z@@3PAP6AXXZA
+40705020 UP_DLL.obj ?__xp_a@@3PAP6AXXZA
+40705028 UP_DLL.obj ?__xp_z@@3PAP6AXXZA
+40705030 UP_DLL.obj ?__xt_a@@3PAP6AXXZA
+40705038 UP_DLL.obj ?__xt_z@@3PAP6AXXZA
+40706030 common ?_initialised@@3HA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/Preprocessed_text/content.rpp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+# 1 "M:\\SRC\\COMMON\\GENERIC\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS"
+// IRCOMM.RSS
+//
+// Copyright (c) 1998 Symbian Ltd. All rights reserved.
+//
+
+# 1 "ircomm.rls" 1
+rls_string STRING_r_irccsy_info1 "Infrared"
+# 6 "M:\\SRC\\COMMON\\GENERIC\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+# 1 "..\\INC\\csy.rh" 1
+// CSY.RH
+//
+// Copyright (c) 2003 Symbian Ltd. All rights reserved.
+//
+
+
+STRUCT CSY_INFORMATION
+ {
+ LTEXT humanreadablename;
+ }
+# 7 "M:\\SRC\\COMMON\\GENERIC\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+
+RESOURCE CSY_INFORMATION r_irccsy_info
+ {
+ humanreadablename=STRING_r_irccsy_info1;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/SGML_file/content.html Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Jul 16 16:53:16 BST 2003 -->
+<TITLE>
+All Classes
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+</HEAD>
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>Not Same...</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/symbian/sdk/util/assertion/Assert.html" TARGET="classFrame">Assert</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/AssertionException.html" TARGET="classFrame">AssertionException</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/JniOutOfMemoryError.html" TARGET="classFrame">JniOutOfMemoryError</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
Binary file bintools/evalid/right/fail/SIS_file/release/armi/urel/gdbstub.sis has changed
Binary file bintools/evalid/right/fail/ZIP_file/content.zip has changed
Binary file bintools/evalid/right/fail/ZIP_file/order.zip has changed
Binary file bintools/evalid/right/fail/ZIP_file/size.zip has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/fail/unknown_format/data/BuildInfo.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,3 @@
+DeviceFamily 100
+DeviceFamilyRev 0x700
+ManufacturerSoftwareBuild 03062_beech
Binary file bintools/evalid/right/fail/unknown_format/ksa/layout.bin has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/missing/rightonlydir/file.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1 @@
+right only dir
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/missing/rightonlyfile.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1 @@
+right only file
Binary file bintools/evalid/right/ok/ARM_library/arm4/udeb/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/ARM_library/arm4/urel/ALARMSHARED.LIB has changed
Binary file bintools/evalid/right/ok/ARM_library/arm4/urel/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/ARM_library/thumb/udeb/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/ARM_library/thumb/urel/ALARMSHARED.LIB has changed
Binary file bintools/evalid/right/ok/ARM_library/thumb/urel/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/CHM_file/identical/file.chm has changed
Binary file bintools/evalid/right/ok/CHM_file/rebuilt/file.chm has changed
Binary file bintools/evalid/right/ok/Compressed_E32_DLL/arm4/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Compressed_E32_DLL/arm4/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Compressed_E32_DLL/thumb/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Compressed_E32_DLL/thumb/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Compressed_E32_EXE/arm4/udeb/E32STRT.EXE has changed
Binary file bintools/evalid/right/ok/Compressed_E32_EXE/arm4/urel/E32STRT.EXE has changed
Binary file bintools/evalid/right/ok/Compressed_E32_EXE/thumb/udeb/E32STRT.EXE has changed
Binary file bintools/evalid/right/ok/Compressed_E32_EXE/thumb/urel/E32STRT.EXE has changed
Binary file bintools/evalid/right/ok/E32_DLL/arm4/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/E32_DLL/arm4/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/E32_DLL/thumb/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/E32_DLL/thumb/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/E32_EXE/arm4/udeb/ALARMSERVER.EXE has changed
Binary file bintools/evalid/right/ok/E32_EXE/arm4/urel/ALARMSERVER.EXE has changed
Binary file bintools/evalid/right/ok/E32_EXE/case_diff/armv5/udeb/USESTATICDLL.EXE has changed
Binary file bintools/evalid/right/ok/E32_EXE/case_diff/armv5/urel/USESTATICDLL.EXE has changed
Binary file bintools/evalid/right/ok/E32_EXE/thumb/udeb/ALARMSERVER.EXE has changed
Binary file bintools/evalid/right/ok/E32_EXE/thumb/urel/ALARMSERVER.EXE has changed
Binary file bintools/evalid/right/ok/ELF_library/case_diff/armv5/CREATESTATICDLL.LIB has changed
Binary file bintools/evalid/right/ok/Intel_DLL/wins/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Intel_DLL/wins/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Intel_DLL/winscw/udeb/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Intel_DLL/winscw/urel/ALARMSHARED.DLL has changed
Binary file bintools/evalid/right/ok/Intel_EXE/wins/urel/E32STRT.EXE has changed
Binary file bintools/evalid/right/ok/Intel_EXE/winscw/udeb/AlarmServer.exe has changed
Binary file bintools/evalid/right/ok/Intel_EXE/winscw/urel/E32STRT.EXE has changed
Binary file bintools/evalid/right/ok/Intel_library/wins/udeb/ALARMSHARED.LIB has changed
Binary file bintools/evalid/right/ok/Intel_library/wins/udeb/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/Intel_library/wins/urel/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/Intel_library/winscw/udeb/ALARMSHARED.LIB has changed
Binary file bintools/evalid/right/ok/Intel_library/winscw/udeb/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/Intel_library/winscw/urel/EEXE.LIB has changed
Binary file bintools/evalid/right/ok/Intel_object/FNTTRAN.exp has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/arm4/udeb/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,301 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ (_E32Dll)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o) (_head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o) (_________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o) (_head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o) (____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLLSTUB.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x600
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001014 0x338 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ 0x10001060 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001290 TASShdAlarm::Reset(void)
+ 0x10001014 TASShdAlarm::TASShdAlarm(void)
+ 0x10001198 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000134c 0x14 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDDLL.o)
+ 0x1000134c E32Dll(TDllReason)
+ .text 0x10001360 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x10001360 TBufBase16::TBufBase16(int)
+ .text 0x1000136c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x1000136c Time::NullTTime(void)
+ .text 0x10001378 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x10001378 TDes16::Copy(TDesC16 const &)
+ .text 0x10001384 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x10001384 RReadStream::ReadUint16L(void)
+ .text 0x10001390 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x10001390 RReadStream::ReadInt8L(void)
+ .text 0x1000139c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x1000139c RReadStream::ReadInt32L(void)
+ .text 0x100013a8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x100013a8 InternalizeL(TInt64 &, RReadStream &)
+ .text 0x100013b4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x100013b4 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x100013c0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x100013c0 RReadStream::ReadInt16L(void)
+ .text 0x100013cc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x100013cc RWriteStream::WriteUint16L(unsigned int)
+ .text 0x100013d8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x100013d8 RWriteStream::WriteInt8L(int)
+ .text 0x100013e4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100013e4 RWriteStream::WriteInt32L(long)
+ .text 0x100013f0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x100013f0 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013fc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x100013fc ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x10001408 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x10001408 RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x10001414 ___CTOR_LIST__=.
+ 0x10001414 __CTOR_LIST__=.
+ 0x10001414 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x10001418 0x4 LONG 0x0
+ 0x1000141c ___DTOR_LIST__=.
+ 0x1000141c __DTOR_LIST__=.
+ 0x1000141c 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x10001420 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x10001424 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x10001424 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ 0x10003000 _head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ 0x10003014 _head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ 0x10003104 ____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ 0x10003124 _________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x10005000 0x4a00
+ *(.stab)
+ .stab 0x10005000 0x1d94 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ .stab 0x10006d94 0x2928 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDALARM.o)
+ 0x2934 (size before relaxing)
+ .stab 0x100096bc 0x1bc ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UDEB/ASSHDDLL.o)
+ 0xd74 (size before relaxing)
+
+.stabstr 0x1000a000 0x53400
+ *(.stabstr)
+ .stabstr 0x1000a000 0x532c3 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UDEB/UP_DLL.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UDEB\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/arm4/udeb/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,458 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ (_E32Startup)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFsBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFs::Connect(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Size(int &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o) (_head___________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o) (____________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TLocale::TLocale(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TLocale::Set(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::Alloc(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (User::Free(void *))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RProcess::Resume(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (RHandleBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o) (_head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o) (_________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o) (_head________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o) (_________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB
+
+.text 0x00401000 0xa00
+ *(.init)
+ *(.text)
+ .text 0x00401000 0xac ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ 0x0040109c atexit
+ 0x00401000 _E32Startup
+ .text 0x004010ac 0x540 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ 0x00401328 E32Main(void)
+ .text 0x004015ec 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ 0x004015ec TFindFile::TFindFile(RFs &)
+ .text 0x004015f8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ 0x004015f8 TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x00401604 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ 0x00401604 TParseBase::FullName(void) const
+ .text 0x00401610 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ 0x00401610 RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x0040161c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ 0x0040161c RFile::Read(TDes8 &, int) const
+ .text 0x00401628 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ 0x00401628 RFsBase::Close(void)
+ .text 0x00401634 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ 0x00401634 RFs::Connect(int)
+ .text 0x00401640 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ 0x00401640 RFile::Size(int &) const
+ .text 0x0040164c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ 0x0040164c RFile::Read(TDes8 &) const
+ .text 0x00401658 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ 0x00401658 RFs::DriveList(TBuf8<26> &) const
+ .text 0x00401664 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ 0x00401664 TLocale::TLocale(void)
+ .text 0x00401670 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ 0x00401670 TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x0040167c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ 0x0040167c TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401688 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x00401688 TDes16::Copy(TDesC16 const &)
+ .text 0x00401694 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ 0x00401694 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x004016a0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ 0x004016a0 TLocale::Set(void) const
+ .text 0x004016ac 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ 0x004016ac TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x004016b8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ 0x004016b8 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x004016c4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x004016c4 TBufBase16::TBufBase16(int)
+ .text 0x004016d0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ 0x004016d0 UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x004016dc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ 0x004016dc User::Panic(TDesC16 const &, int)
+ .text 0x004016e8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ 0x004016e8 User::Alloc(int)
+ .text 0x004016f4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ 0x004016f4 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x00401700 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ 0x00401700 User::Free(void *)
+ .text 0x0040170c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ 0x0040170c TBufBase8::TBufBase8(int)
+ .text 0x00401718 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ 0x00401718 TDesC8::AtC(int) const
+ .text 0x00401724 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ 0x00401724 TDesC16::AtC(int) const
+ .text 0x00401730 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ 0x00401730 RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x0040173c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ 0x0040173c RProcess::Resume(void)
+ .text 0x00401748 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ 0x00401748 RHandleBase::Close(void)
+ .text 0x00401754 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ 0x00401754 HAL::Get(HALData::TAttribute, int &)
+ .text 0x00401760 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ 0x00401760 HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x0040176c ___CTOR_LIST__=.
+ 0x0040176c __CTOR_LIST__=.
+ 0x0040176c 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x00401770 0x4 LONG 0x0
+ 0x00401774 ___DTOR_LIST__=.
+ 0x00401774 __DTOR_LIST__=.
+ 0x00401774 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x00401778 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x0040177c etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x0040177c 0xe0 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ 0x00402000 _head___________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ 0x00402014 _head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ 0x00402028 _head________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ 0x004021c8 ____________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ 0x0040222c _________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ 0x00402248 _________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x00404000 0x4600
+ *(.stab)
+ .stab 0x00404000 0xe34 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ .stab 0x00404e34 0x3618 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UDEB/ESTART.o)
+ 0x3624 (size before relaxing)
+
+.stabstr 0x00409000 0x34000
+ *(.stabstr)
+ .stabstr 0x00409000 0x33ff2 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UDEB/UC_EXE.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UDEB\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/arm4/urel/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o) (_head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o) (_________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o) (_head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o) (____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/ARM4/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x10001004 0x318 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ 0x10001048 TASShdAlarm::InternalizeL(RReadStream &)
+ 0x10001264 TASShdAlarm::Reset(void)
+ 0x10001004 TASShdAlarm::TASShdAlarm(void)
+ 0x10001174 TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x1000131c 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDDLL.o)
+ 0x1000131c E32Dll(TDllReason)
+ .text 0x10001324 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x10001324 TBufBase16::TBufBase16(int)
+ .text 0x10001330 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x10001330 Time::NullTTime(void)
+ .text 0x1000133c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x1000133c TDes16::Copy(TDesC16 const &)
+ .text 0x10001348 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x10001348 RReadStream::ReadUint16L(void)
+ .text 0x10001354 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x10001354 RReadStream::ReadInt8L(void)
+ .text 0x10001360 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x10001360 RReadStream::ReadInt32L(void)
+ .text 0x1000136c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x1000136c InternalizeL(TInt64 &, RReadStream &)
+ .text 0x10001378 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10001378 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x10001384 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x10001384 RReadStream::ReadInt16L(void)
+ .text 0x10001390 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x10001390 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x1000139c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x1000139c RWriteStream::WriteInt8L(int)
+ .text 0x100013a8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100013a8 RWriteStream::WriteInt32L(long)
+ .text 0x100013b4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x100013b4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x100013c0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x100013c0 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x100013cc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100013cc RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x100013d8 ___CTOR_LIST__=.
+ 0x100013d8 __CTOR_LIST__=.
+ 0x100013d8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x100013dc 0x4 LONG 0x0
+ 0x100013e0 ___DTOR_LIST__=.
+ 0x100013e0 __DTOR_LIST__=.
+ 0x100013e0 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x100013e4 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x100013e8 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x100013e8 0x8 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/ARM4/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ 0x10003000 _head___________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ 0x10003014 _head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1112t.o)
+ 0x10003104 ____________________EPOC32_RELEASE_ARM4_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ 0x10003124 _________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x28 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\ARM4\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/arm4/urel/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,453 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UREL/UC_EXE.o)
+ (_E32Startup)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFsBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFs::Connect(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Size(int &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o) (_head___________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o) (____________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TLocale::TLocale(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TLocale::Set(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::Alloc(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (User::Free(void *))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RProcess::Resume(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (RHandleBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o) (_head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o) (_________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o) (_head________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o) (_________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB
+
+.text 0x00401000 0x800
+ *(.init)
+ *(.text)
+ .text 0x00401000 0x98 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UREL/UC_EXE.o)
+ 0x00401094 atexit
+ 0x00401000 _E32Startup
+ .text 0x00401098 0x4e0 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o)
+ 0x004012dc E32Main(void)
+ .text 0x00401578 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ 0x00401578 TFindFile::TFindFile(RFs &)
+ .text 0x00401584 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ 0x00401584 TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x00401590 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ 0x00401590 TParseBase::FullName(void) const
+ .text 0x0040159c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ 0x0040159c RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x004015a8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ 0x004015a8 RFile::Read(TDes8 &, int) const
+ .text 0x004015b4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ 0x004015b4 RFsBase::Close(void)
+ .text 0x004015c0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ 0x004015c0 RFs::Connect(int)
+ .text 0x004015cc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ 0x004015cc RFile::Size(int &) const
+ .text 0x004015d8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ 0x004015d8 RFile::Read(TDes8 &) const
+ .text 0x004015e4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ 0x004015e4 RFs::DriveList(TBuf8<26> &) const
+ .text 0x004015f0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ 0x004015f0 TLocale::TLocale(void)
+ .text 0x004015fc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ 0x004015fc TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x00401608 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ 0x00401608 TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401614 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x00401614 TDes16::Copy(TDesC16 const &)
+ .text 0x00401620 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ 0x00401620 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x0040162c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ 0x0040162c TLocale::Set(void) const
+ .text 0x00401638 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ 0x00401638 TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x00401644 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ 0x00401644 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x00401650 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x00401650 TBufBase16::TBufBase16(int)
+ .text 0x0040165c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ 0x0040165c UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x00401668 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ 0x00401668 User::Panic(TDesC16 const &, int)
+ .text 0x00401674 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ 0x00401674 User::Alloc(int)
+ .text 0x00401680 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ 0x00401680 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x0040168c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ 0x0040168c User::Free(void *)
+ .text 0x00401698 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ 0x00401698 TBufBase8::TBufBase8(int)
+ .text 0x004016a4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ 0x004016a4 TDesC8::AtC(int) const
+ .text 0x004016b0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ 0x004016b0 TDesC16::AtC(int) const
+ .text 0x004016bc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ 0x004016bc RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x004016c8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ 0x004016c8 RProcess::Resume(void)
+ .text 0x004016d4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ 0x004016d4 RHandleBase::Close(void)
+ .text 0x004016e0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ 0x004016e0 HAL::Get(HALData::TAttribute, int &)
+ .text 0x004016ec 0xc ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ 0x004016ec HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x004016f8 ___CTOR_LIST__=.
+ 0x004016f8 __CTOR_LIST__=.
+ 0x004016f8 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x004016fc 0x4 LONG 0x0
+ 0x00401700 ___DTOR_LIST__=.
+ 0x00401700 __DTOR_LIST__=.
+ 0x00401700 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x00401704 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x00401708 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x00401708 0xe0 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/ARM4/UREL/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ 0x00402000 _head___________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ 0x00402014 _head________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ 0x00402028 _head________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/ARM4/UREL/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1177t.o)
+ 0x004021c8 ____________________EPOC32_RELEASE_ARM4_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1102t.o)
+ 0x0040222c _________________EPOC32_RELEASE_ARM4_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\ARM4\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1301t.o)
+ 0x00402248 _________________EPOC32_RELEASE_ARM4_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\ARM4\UREL\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/thumb/udeb/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,301 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ (_E32Dll)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o) (_head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o) (_________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o) (_head___________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o) (____________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLLSTUB.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x1000100c 0x254 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ 0x1000104c TASShdAlarm::InternalizeL(RReadStream &)
+ 0x100011d8 TASShdAlarm::Reset(void)
+ 0x1000100c TASShdAlarm::TASShdAlarm(void)
+ 0x1000111c TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x10001260 0x4 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDDLL.o)
+ 0x10001260 E32Dll(TDllReason)
+ .text 0x10001264 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x10001264 TBufBase16::TBufBase16(int)
+ .text 0x10001270 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ 0x10001270 Time::NullTTime(void)
+ .text 0x1000127c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x1000127c TDes16::Copy(TDesC16 const &)
+ .text 0x10001288 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ 0x10001288 RReadStream::ReadUint16L(void)
+ .text 0x10001294 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ 0x10001294 RReadStream::ReadInt8L(void)
+ .text 0x100012a0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ 0x100012a0 RReadStream::ReadInt32L(void)
+ .text 0x100012ac 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ 0x100012ac InternalizeL(TInt64 &, RReadStream &)
+ .text 0x100012b8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ 0x100012b8 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x100012c4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ 0x100012c4 RReadStream::ReadInt16L(void)
+ .text 0x100012d0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ 0x100012d0 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x100012dc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ 0x100012dc RWriteStream::WriteInt8L(int)
+ .text 0x100012e8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ 0x100012e8 RWriteStream::WriteInt32L(long)
+ .text 0x100012f4 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ 0x100012f4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x10001304 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ 0x10001304 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x10001310 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ 0x10001310 RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x1000131c ___CTOR_LIST__=.
+ 0x1000131c __CTOR_LIST__=.
+ 0x1000131c 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x10001320 0x4 LONG 0x0
+ 0x10001324 ___DTOR_LIST__=.
+ 0x10001324 __DTOR_LIST__=.
+ 0x10001324 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x10001328 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x1000132c etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x1000132c 0xc ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ 0x10003000 _head___________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ 0x10003014 _head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ 0x10003104 ____________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ 0x10003124 _________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x2c ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x10005000 0x4a00
+ *(.stab)
+ .stab 0x10005000 0x1da0 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ .stab 0x10006da0 0x29ac ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDALARM.o)
+ 0x29b8 (size before relaxing)
+ .stab 0x1000974c 0x1bc ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UDEB/ASSHDDLL.o)
+ 0xd74 (size before relaxing)
+
+.stabstr 0x1000a000 0x53400
+ *(.stabstr)
+ .stabstr 0x1000a000 0x5335a ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/THUMB/UDEB/UP_DLL.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UDEB\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/thumb/udeb/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,478 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ (_E32Startup)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EPOC/EGCC/THUMB/UDEB/UP_GCC.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o) (_call_via_r0)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFsBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFs::Connect(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Size(int &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o) (_head___________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o) (____________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TLocale::TLocale(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TLocale::Set(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::Alloc(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (User::Free(void *))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RProcess::Resume(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (RHandleBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o) (_head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o) (_________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o) (_head________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o) (_________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB
+
+.text 0x00401000 0x800
+ *(.init)
+ *(.text)
+ .text 0x00401000 0x60 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ 0x0040105c atexit
+ 0x00401000 _E32Startup
+ .text 0x00401060 0x438 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ 0x00401244 E32Main(void)
+ .text 0x00401498 0x38 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EPOC/EGCC/THUMB/UDEB/UP_GCC.o)
+ 0x004014a0 _call_via_r2
+ 0x004014b0 _call_via_r6
+ 0x004014ac _call_via_r5
+ 0x004014a4 _call_via_r3
+ 0x004014c4 _call_via_fp
+ 0x004014b8 _call_via_r8
+ 0x004014b4 _call_via_r7
+ 0x00401498 _call_via_r0
+ 0x004014c0 _call_via_sl
+ 0x004014bc _call_via_r9
+ 0x004014a8 _call_via_r4
+ 0x0040149c _call_via_r1
+ 0x004014c8 _call_via_ip
+ 0x004014cc _call_via_lr
+ .text 0x004014d0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ 0x004014d0 TFindFile::TFindFile(RFs &)
+ .text 0x004014dc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ 0x004014dc TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x004014e8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ 0x004014e8 TParseBase::FullName(void) const
+ .text 0x004014f4 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ 0x004014f4 RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x00401504 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ 0x00401504 RFile::Read(TDes8 &, int) const
+ .text 0x00401510 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ 0x00401510 RFsBase::Close(void)
+ .text 0x0040151c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ 0x0040151c RFs::Connect(int)
+ .text 0x00401528 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ 0x00401528 RFile::Size(int &) const
+ .text 0x00401534 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ 0x00401534 RFile::Read(TDes8 &) const
+ .text 0x00401540 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ 0x00401540 RFs::DriveList(TBuf8<26> &) const
+ .text 0x0040154c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ 0x0040154c TLocale::TLocale(void)
+ .text 0x00401558 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ 0x00401558 TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x00401564 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ 0x00401564 TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401574 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x00401574 TDes16::Copy(TDesC16 const &)
+ .text 0x00401580 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ 0x00401580 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x0040158c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ 0x0040158c TLocale::Set(void) const
+ .text 0x00401598 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ 0x00401598 TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x004015a4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ 0x004015a4 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x004015b0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x004015b0 TBufBase16::TBufBase16(int)
+ .text 0x004015bc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ 0x004015bc UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x004015c8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ 0x004015c8 User::Panic(TDesC16 const &, int)
+ .text 0x004015d4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ 0x004015d4 User::Alloc(int)
+ .text 0x004015e0 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ 0x004015e0 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x004015f0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ 0x004015f0 User::Free(void *)
+ .text 0x004015fc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ 0x004015fc TBufBase8::TBufBase8(int)
+ .text 0x00401608 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ 0x00401608 TDesC8::AtC(int) const
+ .text 0x00401614 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ 0x00401614 TDesC16::AtC(int) const
+ .text 0x00401620 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ 0x00401620 RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x00401630 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ 0x00401630 RProcess::Resume(void)
+ .text 0x0040163c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ 0x0040163c RHandleBase::Close(void)
+ .text 0x00401648 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ 0x00401648 HAL::Get(HALData::TAttribute, int &)
+ .text 0x00401654 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ 0x00401654 HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x00401660 ___CTOR_LIST__=.
+ 0x00401660 __CTOR_LIST__=.
+ 0x00401660 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x00401664 0x4 LONG 0x0
+ 0x00401668 ___DTOR_LIST__=.
+ 0x00401668 __DTOR_LIST__=.
+ 0x00401668 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x0040166c 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x00401670 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x00401670 0x8 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ .rdata 0x00401678 0x108 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ 0x00402000 _head___________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ 0x00402014 _head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ 0x00402028 _head________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ 0x004021c8 ____________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ 0x0040222c _________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ 0x00402248 _________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x78 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab 0x00404000 0x5400
+ *(.stab)
+ .stab 0x00404000 0xe34 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ .stab 0x00404e34 0x369c ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UDEB/ESTART.o)
+ 0x36a8 (size before relaxing)
+ .stab 0x004084d0 0xd38 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EGCC.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EPOC/EGCC/THUMB/UDEB/UP_GCC.o)
+ 0x18f0 (size before relaxing)
+
+.stabstr 0x0040a000 0x47e00
+ *(.stabstr)
+ .stabstr 0x0040a000 0x47d20 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UDEB\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UDEB/UC_EXE.o)
+ 0x0 (size before relaxing)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UDEB\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/thumb/urel/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,294 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/THUMB/UREL/UP_DLL.o)
+ (_E32Dll)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDDLL.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (Time::NullTTime(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o) (_head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o) (_________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadUint16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadInt8L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadInt32L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (InternalizeL(TInt64 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (InternalizeL(TDes16 &, RReadStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RReadStream::ReadInt16L(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteUint16L(unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteInt8L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteInt32L(long))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (ExternalizeL(TInt64, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (ExternalizeL(TDesC16 const &, RWriteStream &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o) (RWriteStream::WriteInt16L(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o) (_head___________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o) (____________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x10000000 __image_base__=0x10000000
+ 0x00000001 __dll__=0x1
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLL.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLLSTUB.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB
+
+.text 0x10001000 0x400
+ *(.init)
+ *(.text)
+ .text 0x10001000 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EDLL.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EDLL/THUMB/UREL/UP_DLL.o)
+ 0x10001000 _E32Dll
+ .text 0x1000100c 0x254 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o)
+ 0x1000104c TASShdAlarm::InternalizeL(RReadStream &)
+ 0x100011d8 TASShdAlarm::Reset(void)
+ 0x1000100c TASShdAlarm::TASShdAlarm(void)
+ 0x1000111c TASShdAlarm::ExternalizeL(RWriteStream &) const
+ .text 0x10001260 0x4 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDDLL.o)
+ 0x10001260 E32Dll(TDllReason)
+ .text 0x10001264 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x10001264 TBufBase16::TBufBase16(int)
+ .text 0x10001270 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ 0x10001270 Time::NullTTime(void)
+ .text 0x1000127c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x1000127c TDes16::Copy(TDesC16 const &)
+ .text 0x10001288 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ 0x10001288 RReadStream::ReadUint16L(void)
+ .text 0x10001294 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ 0x10001294 RReadStream::ReadInt8L(void)
+ .text 0x100012a0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ 0x100012a0 RReadStream::ReadInt32L(void)
+ .text 0x100012ac 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ 0x100012ac InternalizeL(TInt64 &, RReadStream &)
+ .text 0x100012b8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ 0x100012b8 InternalizeL(TDes16 &, RReadStream &)
+ .text 0x100012c4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ 0x100012c4 RReadStream::ReadInt16L(void)
+ .text 0x100012d0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ 0x100012d0 RWriteStream::WriteUint16L(unsigned int)
+ .text 0x100012dc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ 0x100012dc RWriteStream::WriteInt8L(int)
+ .text 0x100012e8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ 0x100012e8 RWriteStream::WriteInt32L(long)
+ .text 0x100012f4 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ 0x100012f4 ExternalizeL(TInt64, RWriteStream &)
+ .text 0x10001304 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ 0x10001304 ExternalizeL(TDesC16 const &, RWriteStream &)
+ .text 0x10001310 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ 0x10001310 RWriteStream::WriteInt16L(int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x1000131c ___CTOR_LIST__=.
+ 0x1000131c __CTOR_LIST__=.
+ 0x1000131c 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x10001320 0x4 LONG 0x0
+ 0x10001324 ___DTOR_LIST__=.
+ 0x10001324 __DTOR_LIST__=.
+ 0x10001324 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x10001328 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x1000132c etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x1000132c 0xc ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.in(../../../../../../EPOC32/BUILD/SRC/COMMON/GENERIC/APP-SERVICES/ALARMSERVER/GROUP/ALARMSHARED/THUMB/UREL/ASSHDALARM.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x10002000 0x0
+ 0x10002000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x10002000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x10002000 0x0
+ 0x10002000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x10002000 __bss_end__=.
+
+.edata 0x10002000 0x200
+ *(.edata)
+ .edata 0x10002000 0x60 ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.exp
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x10003000 0x200
+ SORT(*)(.idata$2)
+ .idata$2 0x10003000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ 0x10003000 _head___________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB
+ .idata$2 0x10003014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ 0x10003014 _head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ SORT(*)(.idata$3)
+ 0x10003028 0x4 LONG 0x0
+ 0x1000302c 0x4 LONG 0x0
+ 0x10003030 0x4 LONG 0x0
+ 0x10003034 0x4 LONG 0x0
+ 0x10003038 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x1000303c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ .idata$4 0x10003040 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ .idata$4 0x10003044 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ .idata$4 0x10003048 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ .idata$4 0x1000304c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ .idata$4 0x10003050 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ .idata$4 0x10003054 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ .idata$4 0x10003058 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ .idata$4 0x1000305c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ .idata$4 0x10003060 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ .idata$4 0x10003064 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ .idata$4 0x10003068 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ .idata$4 0x1000306c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ .idata$4 0x10003070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ .idata$4 0x10003074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$4 0x10003078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$4 0x1000307c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ .idata$4 0x10003080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$4 0x10003084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x10003088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968h.o)
+ .idata$5 0x1000308c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ 0x1000308c _imp__ExternalizeL__FG6TInt64R12RWriteStream
+ 0x1000308c __imp_ExternalizeL(TInt64, RWriteStream &)
+ .idata$5 0x10003090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ 0x10003090 _imp__ExternalizeL__FRC7TDesC16R12RWriteStream
+ 0x10003090 __imp_ExternalizeL(TDesC16 const &, RWriteStream &)
+ .idata$5 0x10003094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ 0x10003094 _imp__InternalizeL__FR6TDes16R11RReadStream
+ 0x10003094 __imp_InternalizeL(TDes16 &, RReadStream &)
+ .idata$5 0x10003098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ 0x10003098 __imp_InternalizeL(TInt64 &, RReadStream &)
+ 0x10003098 _imp__InternalizeL__FR6TInt64R11RReadStream
+ .idata$5 0x1000309c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ 0x1000309c _imp__ReadInt16L__11RReadStream
+ 0x1000309c RReadStream::__imp_ReadInt16L(void)
+ .idata$5 0x100030a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ 0x100030a0 _imp__ReadInt32L__11RReadStream
+ 0x100030a0 RReadStream::__imp_ReadInt32L(void)
+ .idata$5 0x100030a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ 0x100030a4 _imp__ReadInt8L__11RReadStream
+ 0x100030a4 RReadStream::__imp_ReadInt8L(void)
+ .idata$5 0x100030a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ 0x100030a8 _imp__ReadUint16L__11RReadStream
+ 0x100030a8 RReadStream::__imp_ReadUint16L(void)
+ .idata$5 0x100030ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ 0x100030ac _imp__WriteInt16L__12RWriteStreami
+ 0x100030ac RWriteStream::__imp_WriteInt16L(int)
+ .idata$5 0x100030b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ 0x100030b0 _imp__WriteInt32L__12RWriteStreaml
+ 0x100030b0 RWriteStream::__imp_WriteInt32L(long)
+ .idata$5 0x100030b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ 0x100030b4 _imp__WriteInt8L__12RWriteStreami
+ 0x100030b4 RWriteStream::__imp_WriteInt8L(int)
+ .idata$5 0x100030b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ 0x100030b8 _imp__WriteUint16L__12RWriteStreamUi
+ 0x100030b8 RWriteStream::__imp_WriteUint16L(unsigned int)
+ .idata$5 0x100030bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ .idata$5 0x100030c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$5 0x100030c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x100030c4 _imp__Copy__6TDes16RC7TDesC16
+ 0x100030c4 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x100030c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ 0x100030c8 _imp__NullTTime__4Time
+ 0x100030c8 Time::__imp_NullTTime(void)
+ .idata$5 0x100030cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x100030cc TBufBase16::_imp__(int)
+ 0x100030cc __imp___10TBufBase16i
+ .idata$5 0x100030d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x100030d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00190.o)
+ .idata$7 0x100030d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00195.o)
+ .idata$7 0x100030dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00251.o)
+ .idata$7 0x100030e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00252.o)
+ .idata$7 0x100030e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00348.o)
+ .idata$7 0x100030e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00349.o)
+ .idata$7 0x100030ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00350.o)
+ .idata$7 0x100030f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00366.o)
+ .idata$7 0x100030f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00442.o)
+ .idata$7 0x100030f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00443.o)
+ .idata$7 0x100030fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00444.o)
+ .idata$7 0x10003100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968s_00460.o)
+ .idata$7 0x10003104 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\ESTOR.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1968t.o)
+ 0x10003104 ____________________EPOC32_RELEASE_THUMB_UREL_ESTOR_LIB_iname
+ .idata$7 0x10003118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$7 0x1000311c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00769.o)
+ .idata$7 0x10003120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$7 0x10003124 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ 0x10003124 _________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x10004000 0x0
+ 0x10004000 end=.
+ 0x10004000 _end=.
+ 0x10004000 __end__=.
+
+.reloc 0x10004000 0x200
+ *(.reloc)
+ .reloc 0x10004000 0x2c ..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\COMMON\GENERIC\APP-SERVICES\ALARMSERVER\GROUP\ALARMSHARED\THUMB\UREL\ALARMSHARED.DLL epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/thumb/urel/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,471 @@
+Archive member included because of file (symbol)
+
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ (_E32Startup)
+..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o)
+ (--whole-archive)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EPOC/EGCC/THUMB/UREL/UP_GCC.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o) (_call_via_r0)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TFindFile::TFindFile(RFs &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TFindFile::FindByDir(TDesC16 const &, TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TParseBase::FullName(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Open(RFs &, TDesC16 const &, unsigned int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Read(TDes8 &, int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFsBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFs::Connect(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Size(int &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFile::Read(TDes8 &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RFs::DriveList(TBuf8<26> &) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o) (_head___________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o) (____________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TLocale::TLocale(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TBufBase16::TBufBase16(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDes16::AppendNumFixedWidth(unsigned int, TRadix, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDes16::Copy(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TLocale::Set(void) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TCurrencySymbol::TCurrencySymbol(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::SetCurrencySymbol(TDesC16 const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TBufBase16::TBufBase16(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (UserHal::SetXYInputCalibration(TDigitizerCalibration const &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::Panic(TDesC16 const &, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::Alloc(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TPtr8::TPtr8(unsigned char *, int, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (User::Free(void *))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TBufBase8::TBufBase8(int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDesC8::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (TDesC16::AtC(int) const)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RProcess::Resume(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (RHandleBase::Close(void))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o) (_head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o) (_________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (HAL::Get(HALData::TAttribute, int &))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o) (HAL::Set(HALData::TAttribute, int))
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o) (_head________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB)
+..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o) (_________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00400000 __image_base__=0x400000
+ 0x00000000 __dll__=0x0
+ 0x00001000 __section_alignment__=0x1000
+ 0x00000200 __file_alignment__=0x200
+ 0x00000004 __major_os_version__=0x4
+ 0x00000000 __minor_os_version__=0x0
+ 0x00000001 __major_image_version__=0x1
+ 0x00000000 __minor_image_version__=0x0
+ 0x00000004 __major_subsystem_version__=0x4
+ 0x00000000 __minor_subsystem_version__=0x0
+ 0x00000003 __subsystem__=0x3
+ 0x02000000 __size_of_stack_reserve__=0x2000000
+ 0x00001000 __size_of_stack_commit__=0x1000
+ 0x00100000 __size_of_heap_reserve__=0x100000
+ 0x00001000 __size_of_heap_commit__=0x1000
+ 0x00000000 __loader_flags__=0x0
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.exp
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB
+LOAD ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB
+LOAD ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB
+
+.text 0x00401000 0x800
+ *(.init)
+ *(.text)
+ .text 0x00401000 0x60 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ 0x0040105c atexit
+ 0x00401000 _E32Startup
+ .text 0x00401060 0x438 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o)
+ 0x00401244 E32Main(void)
+ .text 0x00401498 0x38 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EGCC.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EPOC/EGCC/THUMB/UREL/UP_GCC.o)
+ 0x004014a0 _call_via_r2
+ 0x004014b0 _call_via_r6
+ 0x004014ac _call_via_r5
+ 0x004014a4 _call_via_r3
+ 0x004014c4 _call_via_fp
+ 0x004014b8 _call_via_r8
+ 0x004014b4 _call_via_r7
+ 0x00401498 _call_via_r0
+ 0x004014c0 _call_via_sl
+ 0x004014bc _call_via_r9
+ 0x004014a8 _call_via_r4
+ 0x0040149c _call_via_r1
+ 0x004014c8 _call_via_ip
+ 0x004014cc _call_via_lr
+ .text 0x004014d0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ 0x004014d0 TFindFile::TFindFile(RFs &)
+ .text 0x004014dc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ 0x004014dc TFindFile::FindByDir(TDesC16 const &, TDesC16 const &)
+ .text 0x004014e8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ 0x004014e8 TParseBase::FullName(void) const
+ .text 0x004014f4 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ 0x004014f4 RFile::Open(RFs &, TDesC16 const &, unsigned int)
+ .text 0x00401504 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ 0x00401504 RFile::Read(TDes8 &, int) const
+ .text 0x00401510 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ 0x00401510 RFsBase::Close(void)
+ .text 0x0040151c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ 0x0040151c RFs::Connect(int)
+ .text 0x00401528 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ 0x00401528 RFile::Size(int &) const
+ .text 0x00401534 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ 0x00401534 RFile::Read(TDes8 &) const
+ .text 0x00401540 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ 0x00401540 RFs::DriveList(TBuf8<26> &) const
+ .text 0x0040154c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ 0x0040154c TLocale::TLocale(void)
+ .text 0x00401558 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ 0x00401558 TBufBase16::TBufBase16(TDesC16 const &, int)
+ .text 0x00401564 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ 0x00401564 TDes16::AppendNumFixedWidth(unsigned int, TRadix, int)
+ .text 0x00401574 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x00401574 TDes16::Copy(TDesC16 const &)
+ .text 0x00401580 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ 0x00401580 TPtr8::TPtr8(unsigned char *, int)
+ .text 0x0040158c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ 0x0040158c TLocale::Set(void) const
+ .text 0x00401598 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ 0x00401598 TCurrencySymbol::TCurrencySymbol(void)
+ .text 0x004015a4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ 0x004015a4 User::SetCurrencySymbol(TDesC16 const &)
+ .text 0x004015b0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x004015b0 TBufBase16::TBufBase16(int)
+ .text 0x004015bc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ 0x004015bc UserHal::SetXYInputCalibration(TDigitizerCalibration const &)
+ .text 0x004015c8 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ 0x004015c8 User::Panic(TDesC16 const &, int)
+ .text 0x004015d4 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ 0x004015d4 User::Alloc(int)
+ .text 0x004015e0 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ 0x004015e0 TPtr8::TPtr8(unsigned char *, int, int)
+ .text 0x004015f0 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ 0x004015f0 User::Free(void *)
+ .text 0x004015fc 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ 0x004015fc TBufBase8::TBufBase8(int)
+ .text 0x00401608 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ 0x00401608 TDesC8::AtC(int) const
+ .text 0x00401614 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ 0x00401614 TDesC16::AtC(int) const
+ .text 0x00401620 0x10 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ 0x00401620 RProcess::Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .text 0x00401630 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ 0x00401630 RProcess::Resume(void)
+ .text 0x0040163c 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ 0x0040163c RHandleBase::Close(void)
+ .text 0x00401648 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ 0x00401648 HAL::Get(HALData::TAttribute, int &)
+ .text 0x00401654 0xc ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ 0x00401654 HAL::Set(HALData::TAttribute, int)
+ *(SORT(.text$*))
+ *(.glue_7t)
+ *(.glue_7)
+ 0x00401660 ___CTOR_LIST__=.
+ 0x00401660 __CTOR_LIST__=.
+ 0x00401660 0x4 LONG 0xffffffff
+ *(.ctors)
+ *(.ctor)
+ 0x00401664 0x4 LONG 0x0
+ 0x00401668 ___DTOR_LIST__=.
+ 0x00401668 __DTOR_LIST__=.
+ 0x00401668 0x4 LONG 0xffffffff
+ *(.dtors)
+ *(.dtor)
+ 0x0040166c 0x4 LONG 0x0
+ *(.fini)
+ *(.gcc_exc)
+ 0x00401670 etext=.
+ *(.gcc_except_table)
+ *(.rdata)
+ .rdata 0x00401670 0x8 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ .rdata 0x00401678 0x108 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.in(../../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/F32/GROUP/ESTART/THUMB/UREL/ESTART.o)
+ *(SORT(.rdata$*))
+ *(.eh_frame)
+
+.data 0x00402000 0x0
+ 0x00402000 __data_start__=.
+ *(.data)
+ *(.data2)
+ *(SORT(.data$*))
+ 0x00402000 __data_end__=.
+ *(.data_cygwin_nocopy)
+
+.bss 0x00402000 0x0
+ 0x00402000 __bss_start__=.
+ *(.bss)
+ *(COMMON)
+ 0x00402000 __bss_end__=.
+
+.edata
+ *(.edata)
+
+/DISCARD/
+ *(.debug$S)
+ *(.debug$T)
+ *(.debug$F)
+ *(.drectve)
+
+.idata 0x00402000 0x400
+ SORT(*)(.idata$2)
+ .idata$2 0x00402000 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ 0x00402000 _head___________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB
+ .idata$2 0x00402014 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ 0x00402014 _head________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB
+ .idata$2 0x00402028 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ 0x00402028 _head________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB
+ SORT(*)(.idata$3)
+ .idata$3 0x0040203c 0x20 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EEXE.LIB(../../../../../EPOC32/BUILD/SRC/BEECH/GENERIC/BASE/E32/EUSER/EEXE/THUMB/UREL/UC_EXE.o)
+ 0x0040205c 0x4 LONG 0x0
+ 0x00402060 0x4 LONG 0x0
+ 0x00402064 0x4 LONG 0x0
+ 0x00402068 0x4 LONG 0x0
+ 0x0040206c 0x4 LONG 0x0
+ SORT(*)(.idata$4)
+ .idata$4 0x00402070 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ .idata$4 0x00402074 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ .idata$4 0x00402078 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ .idata$4 0x0040207c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ .idata$4 0x00402080 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ .idata$4 0x00402084 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ .idata$4 0x00402088 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ .idata$4 0x0040208c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ .idata$4 0x00402090 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ .idata$4 0x00402094 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ .idata$4 0x00402098 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ .idata$4 0x0040209c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ .idata$4 0x004020a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$4 0x004020a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ .idata$4 0x004020a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ .idata$4 0x004020ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ .idata$4 0x004020b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ .idata$4 0x004020b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ .idata$4 0x004020b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$4 0x004020bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ .idata$4 0x004020c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ .idata$4 0x004020c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ .idata$4 0x004020c8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ .idata$4 0x004020cc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ .idata$4 0x004020d0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ .idata$4 0x004020d4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ .idata$4 0x004020d8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ .idata$4 0x004020dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$4 0x004020e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ .idata$4 0x004020e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ .idata$4 0x004020e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ .idata$4 0x004020ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ .idata$4 0x004020f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ .idata$4 0x004020f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$4 0x004020f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ .idata$4 0x004020fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ .idata$4 0x00402100 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ .idata$4 0x00402104 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ SORT(*)(.idata$5)
+ .idata$5 0x00402108 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583h.o)
+ .idata$5 0x0040210c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ 0x0040210c _imp__Close__7RFsBase
+ 0x0040210c RFsBase::__imp_Close(void)
+ .idata$5 0x00402110 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ 0x00402110 _imp__Connect__3RFsi
+ 0x00402110 RFs::__imp_Connect(int)
+ .idata$5 0x00402114 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ 0x00402114 RFs::__imp_DriveList(TBuf8<26> &) const
+ 0x00402114 _imp__DriveList__C3RFsRt5TBuf81i26
+ .idata$5 0x00402118 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ 0x00402118 _imp__FindByDir__9TFindFileRC7TDesC16T1
+ 0x00402118 TFindFile::__imp_FindByDir(TDesC16 const &, TDesC16 const &)
+ .idata$5 0x0040211c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ 0x0040211c _imp__FullName__C10TParseBase
+ 0x0040211c TParseBase::__imp_FullName(void) const
+ .idata$5 0x00402120 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ 0x00402120 RFile::__imp_Open(RFs &, TDesC16 const &, unsigned int)
+ 0x00402120 _imp__Open__5RFileR3RFsRC7TDesC16Ui
+ .idata$5 0x00402124 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ 0x00402124 _imp__Read__C5RFileR5TDes8
+ 0x00402124 RFile::__imp_Read(TDes8 &) const
+ .idata$5 0x00402128 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ 0x00402128 _imp__Read__C5RFileR5TDes8i
+ 0x00402128 RFile::__imp_Read(TDes8 &, int) const
+ .idata$5 0x0040212c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ 0x0040212c RFile::__imp_Size(int &) const
+ 0x0040212c _imp__Size__C5RFileRi
+ .idata$5 0x00402130 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ 0x00402130 TFindFile::_imp__(RFs &)
+ 0x00402130 __imp___9TFindFileR3RFs
+ .idata$5 0x00402134 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ .idata$5 0x00402138 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559h.o)
+ .idata$5 0x0040213c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ 0x0040213c User::__imp_Alloc(int)
+ 0x0040213c _imp__Alloc__4Useri
+ .idata$5 0x00402140 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ 0x00402140 _imp__AppendNumFixedWidth__6TDes16Ui6TRadixi
+ 0x00402140 TDes16::__imp_AppendNumFixedWidth(unsigned int, TRadix, int)
+ .idata$5 0x00402144 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ 0x00402144 TDesC8::__imp_AtC(int) const
+ 0x00402144 _imp__AtC__C6TDesC8i
+ .idata$5 0x00402148 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ 0x00402148 _imp__AtC__C7TDesC16i
+ 0x00402148 TDesC16::__imp_AtC(int) const
+ .idata$5 0x0040214c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ 0x0040214c RHandleBase::__imp_Close(void)
+ 0x0040214c _imp__Close__11RHandleBase
+ .idata$5 0x00402150 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ 0x00402150 _imp__Copy__6TDes16RC7TDesC16
+ 0x00402150 TDes16::__imp_Copy(TDesC16 const &)
+ .idata$5 0x00402154 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ 0x00402154 _imp__Create__8RProcessRC7TDesC16T110TOwnerType
+ 0x00402154 RProcess::__imp_Create(TDesC16 const &, TDesC16 const &, TOwnerType)
+ .idata$5 0x00402158 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ 0x00402158 _imp__Free__4UserPv
+ 0x00402158 User::__imp_Free(void *)
+ .idata$5 0x0040215c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ 0x0040215c _imp__Panic__4UserRC7TDesC16i
+ 0x0040215c User::__imp_Panic(TDesC16 const &, int)
+ .idata$5 0x00402160 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ 0x00402160 _imp__Resume__8RProcess
+ 0x00402160 RProcess::__imp_Resume(void)
+ .idata$5 0x00402164 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ 0x00402164 _imp__SetCurrencySymbol__4UserRC7TDesC16
+ 0x00402164 User::__imp_SetCurrencySymbol(TDesC16 const &)
+ .idata$5 0x00402168 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ 0x00402168 _imp__SetXYInputCalibration__7UserHalRC21TDigitizerCalibration
+ 0x00402168 UserHal::__imp_SetXYInputCalibration(TDigitizerCalibration const &)
+ .idata$5 0x0040216c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ 0x0040216c _imp__Set__C7TLocale
+ 0x0040216c TLocale::__imp_Set(void) const
+ .idata$5 0x00402170 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ 0x00402170 TBufBase16::_imp__(TDesC16 const &, int)
+ 0x00402170 __imp___10TBufBase16RC7TDesC16i
+ .idata$5 0x00402174 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ 0x00402174 TBufBase16::_imp__(int)
+ 0x00402174 __imp___10TBufBase16i
+ .idata$5 0x00402178 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ 0x00402178 __imp___15TCurrencySymbol
+ 0x00402178 TCurrencySymbol::_imp__(void)
+ .idata$5 0x0040217c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ 0x0040217c TPtr8::_imp__(unsigned char *, int)
+ 0x0040217c __imp___5TPtr8PUci
+ .idata$5 0x00402180 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ 0x00402180 __imp___5TPtr8PUcii
+ 0x00402180 TPtr8::_imp__(unsigned char *, int, int)
+ .idata$5 0x00402184 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ 0x00402184 TLocale::_imp__(void)
+ 0x00402184 __imp___7TLocale
+ .idata$5 0x00402188 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ 0x00402188 __imp___9TBufBase8i
+ 0x00402188 TBufBase8::_imp__(int)
+ .idata$5 0x0040218c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ .idata$5 0x00402190 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643h.o)
+ .idata$5 0x00402194 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ 0x00402194 HAL::__imp_Get(HALData::TAttribute, int &)
+ 0x00402194 _imp__Get__3HALQ27HALData10TAttributeRi
+ .idata$5 0x00402198 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ 0x00402198 _imp__Set__3HALQ27HALData10TAttributei
+ 0x00402198 HAL::__imp_Set(HALData::TAttribute, int)
+ .idata$5 0x0040219c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)
+ .idata$7 0x004021a0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00015.o)
+ .idata$7 0x004021a4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00018.o)
+ .idata$7 0x004021a8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00034.o)
+ .idata$7 0x004021ac 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00044.o)
+ .idata$7 0x004021b0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00051.o)
+ .idata$7 0x004021b4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00121.o)
+ .idata$7 0x004021b8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00136.o)
+ .idata$7 0x004021bc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00138.o)
+ .idata$7 0x004021c0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00185.o)
+ .idata$7 0x004021c4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583s_00217.o)
+ .idata$7 0x004021c8 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EFSRV.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1583t.o)
+ 0x004021c8 ____________________EPOC32_RELEASE_THUMB_UREL_EFSRV_LIB_iname
+ .idata$7 0x004021dc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00045.o)
+ .idata$7 0x004021e0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00068.o)
+ .idata$7 0x004021e4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00098.o)
+ .idata$7 0x004021e8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00099.o)
+ .idata$7 0x004021ec 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00172.o)
+ .idata$7 0x004021f0 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00251.o)
+ .idata$7 0x004021f4 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00292.o)
+ .idata$7 0x004021f8 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00476.o)
+ .idata$7 0x004021fc 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00809.o)
+ .idata$7 0x00402200 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00953.o)
+ .idata$7 0x00402204 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_00981.o)
+ .idata$7 0x00402208 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01039.o)
+ .idata$7 0x0040220c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01074.o)
+ .idata$7 0x00402210 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01282.o)
+ .idata$7 0x00402214 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01283.o)
+ .idata$7 0x00402218 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01336.o)
+ .idata$7 0x0040221c 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01366.o)
+ .idata$7 0x00402220 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01367.o)
+ .idata$7 0x00402224 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01405.o)
+ .idata$7 0x00402228 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559s_01431.o)
+ .idata$7 0x0040222c 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\EUSER.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1559t.o)
+ 0x0040222c _________________EPOC32_RELEASE_THUMB_UREL_EUSER_LIB_iname
+ .idata$7 0x00402240 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00001.o)
+ .idata$7 0x00402244 0x4 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643s_00002.o)
+ .idata$7 0x00402248 0x14 ..\..\..\..\..\..\EPOC32\RELEASE\THUMB\UREL\HAL.LIB(C:/DOCUME~1/SIBUIL~1/LOCALS~1/Temp/d1643t.o)
+ 0x00402248 _________________EPOC32_RELEASE_THUMB_UREL_HAL_LIB_iname
+
+.CRT
+ *(SORT(.CRT$*))
+
+.endjunk 0x00403000 0x0
+ 0x00403000 end=.
+ 0x00403000 _end=.
+ 0x00403000 __end__=.
+
+.reloc 0x00403000 0x200
+ *(.reloc)
+ .reloc 0x00403000 0x78 ..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.exp
+
+.rsrc
+ *(.rsrc)
+ *(SORT(.rsrc$*))
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+OUTPUT(..\..\..\..\..\..\EPOC32\BUILD\SRC\BEECH\GENERIC\BASE\F32\GROUP\ESTART\THUMB\UREL\E32STRT.EXE epoc-pei-arm-little)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/winscw/urel/ALARMSHARED.DLL.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,145 @@
+Address Size Name Subname Module
+
+40701000 0000003d .text ASSHDALARM.o(??0TASShdAlarm@@QAE@XZ)
+4070103d 00000107 .text ASSHDALARM.o(?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z)
+40701144 000000dc .text ASSHDALARM.o(?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z)
+40701220 000000a2 .text ASSHDALARM.o(?Reset@TASShdAlarm@@QAEXXZ)
+407012c2 00000003 .text ASSHDDLL.o(?E32Dll@@YAHW4TDllReason@@@Z)
+407012c6 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+407012cc 00000006 .text ESTOR.dll(?ReadUint16L@RReadStream@@QAEGXZ)
+407012d2 00000006 .text ESTOR.dll(?ReadInt8L@RReadStream@@QAECXZ)
+407012d8 00000006 .text ESTOR.dll(?ReadInt32L@RReadStream@@QAEJXZ)
+407012de 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+407012e4 00000006 .text ESTOR.dll(?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+407012ea 00000006 .text ESTOR.dll(?ReadInt16L@RReadStream@@QAEFXZ)
+407012f0 00000006 .text ESTOR.dll(?WriteUint16L@RWriteStream@@QAEXI@Z)
+407012f6 00000006 .text ESTOR.dll(?WriteInt8L@RWriteStream@@QAEXH@Z)
+407012fc 00000006 .text ESTOR.dll(?WriteInt32L@RWriteStream@@QAEXJ@Z)
+40701302 00000006 .text ESTOR.dll(?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+40701308 00000006 .text ESTOR.dll(?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+4070130e 00000006 .text ESTOR.dll(?WriteInt16L@RWriteStream@@QAEXH@Z)
+40701314 00000006 .text EUSER.dll(?NullTTime@Time@@SA?AVTTime@@XZ)
+4070131a 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+40701320 00000020 .text UP_DLL.obj(?initTable@@YAXPAP6AXXZ0@Z)
+40701340 000000a7 .text UP_DLL.obj(?_E32Dll@@YGHPAXI0@Z)
+407013e8 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+40702000 0000001c .data ASSHDALARM.o
+40702020 00000018 .data ASSHDDLL.o
+40702038 00000018 .data uid.o
+40702050 00000018 .data UP_DLL.obj
+40702068 00000010 .data UP_DLL.obj
+40703000 0000000c .E32_UID uid.o
+40704000 00000014 .idata $2 ESTOR.dll
+40704014 00000014 .idata $2 EUSER.dll
+40704028 00000014 .idata $3 EUSER.dll
+4070403c 00000004 .idata $4 ESTOR.dll
+40704040 00000004 .idata $4 ESTOR.dll
+40704044 00000004 .idata $4 ESTOR.dll
+40704048 00000004 .idata $4 ESTOR.dll
+4070404c 00000004 .idata $4 ESTOR.dll
+40704050 00000004 .idata $4 ESTOR.dll
+40704054 00000004 .idata $4 ESTOR.dll
+40704058 00000004 .idata $4 ESTOR.dll
+4070405c 00000004 .idata $4 ESTOR.dll
+40704060 00000004 .idata $4 ESTOR.dll
+40704064 00000004 .idata $4 ESTOR.dll
+40704068 00000004 .idata $4 ESTOR.dll
+4070406c 00000004 .idata $4 ESTOR.dll
+40704070 00000004 .idata $4 EUSER.dll
+40704074 00000004 .idata $4 EUSER.dll
+40704078 00000004 .idata $4 EUSER.dll
+4070407c 00000004 .idata $4 EUSER.dll
+40704080 00000004 .idata $4 EUSER.dll
+40704084 00000004 .idata $5 ESTOR.dll(__imp_?ReadUint16L@RReadStream@@QAEGXZ)
+40704088 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt8L@RReadStream@@QAECXZ)
+4070408c 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt32L@RReadStream@@QAEJXZ)
+40704090 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z)
+40704094 00000004 .idata $5 ESTOR.dll(__imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z)
+40704098 00000004 .idata $5 ESTOR.dll(__imp_?ReadInt16L@RReadStream@@QAEFXZ)
+4070409c 00000004 .idata $5 ESTOR.dll(__imp_?WriteUint16L@RWriteStream@@QAEXI@Z)
+407040a0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt8L@RWriteStream@@QAEXH@Z)
+407040a4 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt32L@RWriteStream@@QAEXJ@Z)
+407040a8 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z)
+407040ac 00000004 .idata $5 ESTOR.dll(__imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z)
+407040b0 00000004 .idata $5 ESTOR.dll(__imp_?WriteInt16L@RWriteStream@@QAEXH@Z)
+407040b4 00000004 .idata $5 ESTOR.dll
+407040b8 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+407040bc 00000004 .idata $5 EUSER.dll(__imp_?NullTTime@Time@@SA?AVTTime@@XZ)
+407040c0 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+407040c4 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+407040c8 00000004 .idata $5 EUSER.dll
+407040cc 0000000a .idata $6 ESTOR.dll
+407040d6 0000000a .idata $6 EUSER.dll
+40705000 00000004 .CRT $XCA UP_DLL.obj
+40705008 00000004 .CRT $XCZ UP_DLL.obj
+40705010 00000004 .CRT $XIA UP_DLL.obj
+40705018 00000004 .CRT $XIZ UP_DLL.obj
+40705020 00000004 .CRT $XPA UP_DLL.obj
+40705028 00000004 .CRT $XPZ UP_DLL.obj
+40705030 00000004 .CRT $XTA UP_DLL.obj
+40705038 00000004 .CRT $XTZ UP_DLL.obj
+40706000 00000012 .bss ASSHDALARM.o
+40706018 00000008 .bss ASSHDDLL.o
+40706020 00000008 .bss uid.o
+40706028 00000008 .bss UP_DLL.obj
+40706030 00000004 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+40701000 ASSHDALARM.o ??0TASShdAlarm@@QAE@XZ
+4070103d ASSHDALARM.o ?InternalizeL@TASShdAlarm@@QAEXAAVRReadStream@@@Z
+40701144 ASSHDALARM.o ?ExternalizeL@TASShdAlarm@@QBEXAAVRWriteStream@@@Z
+40701220 ASSHDALARM.o ?Reset@TASShdAlarm@@QAEXXZ
+407012c2 ASSHDDLL.o ?E32Dll@@YAHW4TDllReason@@@Z
+407012c6 EUSER.dll ??0TBufBase16@@IAE@H@Z
+407012cc ESTOR.dll ?ReadUint16L@RReadStream@@QAEGXZ
+407012d2 ESTOR.dll ?ReadInt8L@RReadStream@@QAECXZ
+407012d8 ESTOR.dll ?ReadInt32L@RReadStream@@QAEJXZ
+407012de ESTOR.dll ?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+407012e4 ESTOR.dll ?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+407012ea ESTOR.dll ?ReadInt16L@RReadStream@@QAEFXZ
+407012f0 ESTOR.dll ?WriteUint16L@RWriteStream@@QAEXI@Z
+407012f6 ESTOR.dll ?WriteInt8L@RWriteStream@@QAEXH@Z
+407012fc ESTOR.dll ?WriteInt32L@RWriteStream@@QAEXJ@Z
+40701302 ESTOR.dll ?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+40701308 ESTOR.dll ?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+4070130e ESTOR.dll ?WriteInt16L@RWriteStream@@QAEXH@Z
+40701314 EUSER.dll ?NullTTime@Time@@SA?AVTTime@@XZ
+4070131a EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+40701340 UP_DLL.obj ?_E32Dll@@YGHPAXI0@Z
+407013e8 EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+40703000 uid.o ?uid@@3PAVTUid@@A
+40704000 ESTOR.dll __IMPORT_DESCRIPTOR_ESTOR
+40704014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+40704028 EUSER.dll __NULL_IMPORT_DESCRIPTOR
+40704084 ESTOR.dll __imp_?ReadUint16L@RReadStream@@QAEGXZ
+40704088 ESTOR.dll __imp_?ReadInt8L@RReadStream@@QAECXZ
+4070408c ESTOR.dll __imp_?ReadInt32L@RReadStream@@QAEJXZ
+40704090 ESTOR.dll __imp_?InternalizeL@@YAXAAVTInt64@@AAVRReadStream@@@Z
+40704094 ESTOR.dll __imp_?InternalizeL@@YAXAAVTDes16@@AAVRReadStream@@@Z
+40704098 ESTOR.dll __imp_?ReadInt16L@RReadStream@@QAEFXZ
+4070409c ESTOR.dll __imp_?WriteUint16L@RWriteStream@@QAEXI@Z
+407040a0 ESTOR.dll __imp_?WriteInt8L@RWriteStream@@QAEXH@Z
+407040a4 ESTOR.dll __imp_?WriteInt32L@RWriteStream@@QAEXJ@Z
+407040a8 ESTOR.dll __imp_?ExternalizeL@@YAXVTInt64@@AAVRWriteStream@@@Z
+407040ac ESTOR.dll __imp_?ExternalizeL@@YAXABVTDesC16@@AAVRWriteStream@@@Z
+407040b0 ESTOR.dll __imp_?WriteInt16L@RWriteStream@@QAEXH@Z
+407040b4 ESTOR.dll ESTOR_NULL_THUNK_DATA
+407040b8 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+407040bc EUSER.dll __imp_?NullTTime@Time@@SA?AVTTime@@XZ
+407040c0 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+407040c4 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+407040c8 EUSER.dll EUSER_NULL_THUNK_DATA
+40705000 UP_DLL.obj ?__xc_a@@3PAP6AXXZA
+40705008 UP_DLL.obj ?__xc_z@@3PAP6AXXZA
+40705010 UP_DLL.obj ?__xi_a@@3PAP6AXXZA
+40705018 UP_DLL.obj ?__xi_z@@3PAP6AXXZA
+40705020 UP_DLL.obj ?__xp_a@@3PAP6AXXZA
+40705028 UP_DLL.obj ?__xp_z@@3PAP6AXXZA
+40705030 UP_DLL.obj ?__xt_a@@3PAP6AXXZA
+40705038 UP_DLL.obj ?__xt_z@@3PAP6AXXZA
+40706030 common ?_initialised@@3HA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/MAP_file/winscw/urel/E32STRT.EXE.map Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,311 @@
+Address Size Name Subname Module
+
+00401000 00000179 .text ESTART.o(?LoadLocale@@YAXAAVRFs@@@Z)
+00401179 0000011b .text ESTART.o(?InitialiseScreenCalibration@@YAXAAVRFs@@@Z)
+00401294 0000008a .text ESTART.o(?LocalFSInitialisation@@YAXAAVRFs@@@Z)
+0040131e 000002d7 .text ESTART.o(?E32Main@@YAHXZ)
+004015f6 00000006 .text EUSER.dll(??0TLocale@@QAE@XZ)
+004015fc 00000006 .text EFSRV.dll(??0TFindFile@@QAE@AAVRFs@@@Z)
+00401602 00000006 .text EUSER.dll(??0TBufBase16@@IAE@ABVTDesC16@@H@Z)
+00401608 00000006 .text HAL.dll(?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z)
+0040160e 00000006 .text EUSER.dll(?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z)
+00401614 00000006 .text HAL.dll(?Set@HAL@@SAHW4TAttribute@HALData@@H@Z)
+0040161a 00000006 .text EFSRV.dll(?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z)
+00401620 00000006 .text EFSRV.dll(?FullName@TParseBase@@QBEABVTDesC16@@XZ)
+00401626 00000006 .text EUSER.dll(?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+0040162c 00000006 .text EFSRV.dll(?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z)
+00401632 00000006 .text EUSER.dll(??0TPtr8@@QAE@PAEH@Z)
+00401638 00000006 .text EFSRV.dll(?Read@RFile@@QBEHAAVTDes8@@H@Z)
+0040163e 00000006 .text EUSER.dll(?Set@TLocale@@QBEXXZ)
+00401644 00000006 .text EUSER.dll(??0TCurrencySymbol@@QAE@XZ)
+0040164a 00000006 .text EUSER.dll(?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z)
+00401650 00000006 .text EFSRV.dll(?Close@RFsBase@@QAEXXZ)
+00401656 00000006 .text EUSER.dll(??0TBufBase16@@IAE@H@Z)
+0040165c 00000006 .text EUSER.dll(?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z)
+00401662 00000006 .text EUSER.dll(??0TBufBase8@@IAE@H@Z)
+00401668 00000006 .text EFSRV.dll(?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z)
+0040166e 00000006 .text EUSER.dll(?Panic@User@@SAXABVTDesC16@@H@Z)
+00401674 00000006 .text EUSER.dll(?AtC@TDesC8@@IBEABEH@Z)
+0040167a 00000006 .text EFSRV.dll(?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z)
+00401680 00000006 .text EFSRV.dll(?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z)
+00401686 00000006 .text EUSER.dll(?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z)
+0040168c 00000006 .text EFSRV.dll(?Connect@RFs@@QAEHH@Z)
+00401692 00000006 .text EFSRV.dll(?Size@RFile@@QBEHAAH@Z)
+00401698 00000006 .text EFSRV.dll(?Read@RFile@@QBEHAAVTDes8@@@Z)
+0040169e 00000006 .text EUSER.dll(?Alloc@User@@SAPAXH@Z)
+004016a4 00000006 .text EUSER.dll(??0TPtr8@@QAE@PAEHH@Z)
+004016aa 00000006 .text EUSER.dll(?Free@User@@SAXPAX@Z)
+004016b0 00000006 .text EUSER.dll(?AtC@TDesC16@@IBEABGH@Z)
+004016b6 00000006 .text EUSER.dll(?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z)
+004016bc 00000006 .text EUSER.dll(?Resume@RProcess@@QAEXXZ)
+004016c2 00000006 .text EUSER.dll(?Close@RHandleBase@@QAEXXZ)
+004016c8 00000020 .text UP_EXE.obj(?initTable@@YAXPAP6AXXZ0@Z)
+004016e8 00000021 .text UP_EXE.obj(?Panic@@YAXW4TStatPanic@@@Z)
+00401709 00000177 .text UP_EXE.obj(?startupThread@@YAHXZ)
+00401880 00000011 .text UP_EXE.obj(?_E32Startup@@YGXXZ)
+00401892 00000006 .text EUSER.dll(??0TPtrC16@@QAE@PBG@Z)
+00401898 00000006 .text EUSER.dll(?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z)
+0040189e 00000006 .text EUSER.dll(?__DllAttachProcess@UpWins@@SAXXZ)
+004018a4 00000006 .text EUSER.dll(?__FileServer@UpWins@@SAP6AHPAX@ZXZ)
+004018aa 00000006 .text EUSER.dll(?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z)
+004018b0 00000006 .text EUSER.dll(?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z)
+004018b6 00000006 .text EUSER.dll(?SetSystem@RThread@@QBEXH@Z)
+004018bc 00000006 .text EUSER.dll(?SetProtected@RThread@@QBEXH@Z)
+004018c2 00000006 .text EUSER.dll(?Resume@RThread@@QBEXXZ)
+004018c8 00000006 .text EUSER.dll(?__Synchronize@UpWins@@SAXXZ)
+004018ce 00000006 .text EUSER.dll(?__ReleaseInitThreads@UpWins@@SAXXZ)
+004018d4 00000006 .text EUSER.dll(?__WindowServer@UpWins@@SAP6AHPAX@ZXZ)
+004018da 00000006 .text EUSER.dll(?__WireKernel@UpWins@@SAXXZ)
+004018e0 00000006 .text EUSER.dll(?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z)
+00402000 0000019c .data ESTART.o
+004021a0 00000018 .data uid.o
+004021b8 00000018 .data UP_EXE.obj
+004021d0 00000040 .data UP_EXE.obj
+00403000 0000000c .E32_UID uid.o
+00404000 00000014 .idata $2 EFSRV.dll
+00404014 00000014 .idata $2 EUSER.dll
+00404028 00000014 .idata $2 HAL.dll
+0040403c 00000014 .idata $3 EFSRV.dll
+00404050 00000004 .idata $4 EFSRV.dll
+00404054 00000004 .idata $4 EFSRV.dll
+00404058 00000004 .idata $4 EFSRV.dll
+0040405c 00000004 .idata $4 EFSRV.dll
+00404060 00000004 .idata $4 EFSRV.dll
+00404064 00000004 .idata $4 EFSRV.dll
+00404068 00000004 .idata $4 EFSRV.dll
+0040406c 00000004 .idata $4 EFSRV.dll
+00404070 00000004 .idata $4 EFSRV.dll
+00404074 00000004 .idata $4 EFSRV.dll
+00404078 00000004 .idata $4 EFSRV.dll
+0040407c 00000004 .idata $4 EFSRV.dll
+00404080 00000004 .idata $4 EFSRV.dll
+00404084 00000004 .idata $4 EUSER.dll
+00404088 00000004 .idata $4 EUSER.dll
+0040408c 00000004 .idata $4 EUSER.dll
+00404090 00000004 .idata $4 EUSER.dll
+00404094 00000004 .idata $4 EUSER.dll
+00404098 00000004 .idata $4 EUSER.dll
+0040409c 00000004 .idata $4 EUSER.dll
+004040a0 00000004 .idata $4 EUSER.dll
+004040a4 00000004 .idata $4 EUSER.dll
+004040a8 00000004 .idata $4 EUSER.dll
+004040ac 00000004 .idata $4 EUSER.dll
+004040b0 00000004 .idata $4 EUSER.dll
+004040b4 00000004 .idata $4 EUSER.dll
+004040b8 00000004 .idata $4 EUSER.dll
+004040bc 00000004 .idata $4 EUSER.dll
+004040c0 00000004 .idata $4 EUSER.dll
+004040c4 00000004 .idata $4 EUSER.dll
+004040c8 00000004 .idata $4 EUSER.dll
+004040cc 00000004 .idata $4 EUSER.dll
+004040d0 00000004 .idata $4 EUSER.dll
+004040d4 00000004 .idata $4 EUSER.dll
+004040d8 00000004 .idata $4 EUSER.dll
+004040dc 00000004 .idata $4 EUSER.dll
+004040e0 00000004 .idata $4 EUSER.dll
+004040e4 00000004 .idata $4 EUSER.dll
+004040e8 00000004 .idata $4 EUSER.dll
+004040ec 00000004 .idata $4 EUSER.dll
+004040f0 00000004 .idata $4 EUSER.dll
+004040f4 00000004 .idata $4 EUSER.dll
+004040f8 00000004 .idata $4 EUSER.dll
+004040fc 00000004 .idata $4 EUSER.dll
+00404100 00000004 .idata $4 EUSER.dll
+00404104 00000004 .idata $4 EUSER.dll
+00404108 00000004 .idata $4 EUSER.dll
+0040410c 00000004 .idata $4 EUSER.dll
+00404110 00000004 .idata $4 EUSER.dll
+00404114 00000004 .idata $4 HAL.dll
+00404118 00000004 .idata $4 HAL.dll
+0040411c 00000004 .idata $4 HAL.dll
+00404120 00000004 .idata $5 EFSRV.dll(__imp_??0TFindFile@@QAE@AAVRFs@@@Z)
+00404124 00000004 .idata $5 EFSRV.dll(__imp_?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z)
+00404128 00000004 .idata $5 EFSRV.dll(__imp_?FullName@TParseBase@@QBEABVTDesC16@@XZ)
+0040412c 00000004 .idata $5 EFSRV.dll(__imp_?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z)
+00404130 00000004 .idata $5 EFSRV.dll(__imp_?Read@RFile@@QBEHAAVTDes8@@H@Z)
+00404134 00000004 .idata $5 EFSRV.dll(__imp_?Close@RFsBase@@QAEXXZ)
+00404138 00000004 .idata $5 EFSRV.dll(__imp_?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z)
+0040413c 00000004 .idata $5 EFSRV.dll(__imp_?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z)
+00404140 00000004 .idata $5 EFSRV.dll(__imp_?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z)
+00404144 00000004 .idata $5 EFSRV.dll(__imp_?Connect@RFs@@QAEHH@Z)
+00404148 00000004 .idata $5 EFSRV.dll(__imp_?Size@RFile@@QBEHAAH@Z)
+0040414c 00000004 .idata $5 EFSRV.dll(__imp_?Read@RFile@@QBEHAAVTDes8@@@Z)
+00404150 00000004 .idata $5 EFSRV.dll
+00404154 00000004 .idata $5 EUSER.dll(__imp_??0TLocale@@QAE@XZ)
+00404158 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@ABVTDesC16@@H@Z)
+0040415c 00000004 .idata $5 EUSER.dll(__imp_?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z)
+00404160 00000004 .idata $5 EUSER.dll(__imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z)
+00404164 00000004 .idata $5 EUSER.dll(__imp_??0TPtr8@@QAE@PAEH@Z)
+00404168 00000004 .idata $5 EUSER.dll(__imp_?Set@TLocale@@QBEXXZ)
+0040416c 00000004 .idata $5 EUSER.dll(__imp_??0TCurrencySymbol@@QAE@XZ)
+00404170 00000004 .idata $5 EUSER.dll(__imp_?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z)
+00404174 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase16@@IAE@H@Z)
+00404178 00000004 .idata $5 EUSER.dll(__imp_?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z)
+0040417c 00000004 .idata $5 EUSER.dll(__imp_??0TBufBase8@@IAE@H@Z)
+00404180 00000004 .idata $5 EUSER.dll(__imp_?Panic@User@@SAXABVTDesC16@@H@Z)
+00404184 00000004 .idata $5 EUSER.dll(__imp_?AtC@TDesC8@@IBEABEH@Z)
+00404188 00000004 .idata $5 EUSER.dll(__imp_?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z)
+0040418c 00000004 .idata $5 EUSER.dll(__imp_?Alloc@User@@SAPAXH@Z)
+00404190 00000004 .idata $5 EUSER.dll(__imp_??0TPtr8@@QAE@PAEHH@Z)
+00404194 00000004 .idata $5 EUSER.dll(__imp_?Free@User@@SAXPAX@Z)
+00404198 00000004 .idata $5 EUSER.dll(__imp_?AtC@TDesC16@@IBEABGH@Z)
+0040419c 00000004 .idata $5 EUSER.dll(__imp_?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z)
+004041a0 00000004 .idata $5 EUSER.dll(__imp_?Resume@RProcess@@QAEXXZ)
+004041a4 00000004 .idata $5 EUSER.dll(__imp_?Close@RHandleBase@@QAEXXZ)
+004041a8 00000004 .idata $5 EUSER.dll(__imp_??0TPtrC16@@QAE@PBG@Z)
+004041ac 00000004 .idata $5 EUSER.dll(__imp_?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z)
+004041b0 00000004 .idata $5 EUSER.dll(__imp_?__DllAttachProcess@UpWins@@SAXXZ)
+004041b4 00000004 .idata $5 EUSER.dll(__imp_?__FileServer@UpWins@@SAP6AHPAX@ZXZ)
+004041b8 00000004 .idata $5 EUSER.dll(__imp_?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z)
+004041bc 00000004 .idata $5 EUSER.dll(__imp_?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z)
+004041c0 00000004 .idata $5 EUSER.dll(__imp_?SetSystem@RThread@@QBEXH@Z)
+004041c4 00000004 .idata $5 EUSER.dll(__imp_?SetProtected@RThread@@QBEXH@Z)
+004041c8 00000004 .idata $5 EUSER.dll(__imp_?Resume@RThread@@QBEXXZ)
+004041cc 00000004 .idata $5 EUSER.dll(__imp_?__Synchronize@UpWins@@SAXXZ)
+004041d0 00000004 .idata $5 EUSER.dll(__imp_?__ReleaseInitThreads@UpWins@@SAXXZ)
+004041d4 00000004 .idata $5 EUSER.dll(__imp_?__WindowServer@UpWins@@SAP6AHPAX@ZXZ)
+004041d8 00000004 .idata $5 EUSER.dll(__imp_?__WireKernel@UpWins@@SAXXZ)
+004041dc 00000004 .idata $5 EUSER.dll(__imp_?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z)
+004041e0 00000004 .idata $5 EUSER.dll
+004041e4 00000004 .idata $5 HAL.dll(__imp_?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z)
+004041e8 00000004 .idata $5 HAL.dll(__imp_?Set@HAL@@SAHW4TAttribute@HALData@@H@Z)
+004041ec 00000004 .idata $5 HAL.dll
+004041f0 0000000a .idata $6 EFSRV.dll
+004041fa 0000000a .idata $6 EUSER.dll
+00404204 00000008 .idata $6 HAL.dll
+00405000 00000004 .CRT $XCA UP_EXE.obj
+00405008 00000004 .CRT $XCZ UP_EXE.obj
+00405010 00000004 .CRT $XIA UP_EXE.obj
+00405018 00000004 .CRT $XIZ UP_EXE.obj
+00405020 00000004 .CRT $XPA UP_EXE.obj
+00405028 00000004 .CRT $XPZ UP_EXE.obj
+00405030 00000004 .CRT $XTA UP_EXE.obj
+00405038 00000004 .CRT $XTZ UP_EXE.obj
+00406000 00000008 .bss ESTART.o
+00406008 00000008 .bss uid.o
+00406010 00000008 .bss UP_EXE.obj
+00406018 00000000 .bss
+
+--------------
+Public Symbols
+--------------
+
+Address Module Name
+-------- -------------------- ----
+0040131e ESTART.o ?E32Main@@YAHXZ
+004015f6 EUSER.dll ??0TLocale@@QAE@XZ
+004015fc EFSRV.dll ??0TFindFile@@QAE@AAVRFs@@@Z
+00401602 EUSER.dll ??0TBufBase16@@IAE@ABVTDesC16@@H@Z
+00401608 HAL.dll ?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z
+0040160e EUSER.dll ?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z
+00401614 HAL.dll ?Set@HAL@@SAHW4TAttribute@HALData@@H@Z
+0040161a EFSRV.dll ?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z
+00401620 EFSRV.dll ?FullName@TParseBase@@QBEABVTDesC16@@XZ
+00401626 EUSER.dll ?Copy@TDes16@@QAEXABVTDesC16@@@Z
+0040162c EFSRV.dll ?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z
+00401632 EUSER.dll ??0TPtr8@@QAE@PAEH@Z
+00401638 EFSRV.dll ?Read@RFile@@QBEHAAVTDes8@@H@Z
+0040163e EUSER.dll ?Set@TLocale@@QBEXXZ
+00401644 EUSER.dll ??0TCurrencySymbol@@QAE@XZ
+0040164a EUSER.dll ?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z
+00401650 EFSRV.dll ?Close@RFsBase@@QAEXXZ
+00401656 EUSER.dll ??0TBufBase16@@IAE@H@Z
+0040165c EUSER.dll ?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z
+00401662 EUSER.dll ??0TBufBase8@@IAE@H@Z
+00401668 EFSRV.dll ?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z
+0040166e EUSER.dll ?Panic@User@@SAXABVTDesC16@@H@Z
+00401674 EUSER.dll ?AtC@TDesC8@@IBEABEH@Z
+0040167a EFSRV.dll ?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z
+00401680 EFSRV.dll ?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z
+00401686 EUSER.dll ?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z
+0040168c EFSRV.dll ?Connect@RFs@@QAEHH@Z
+00401692 EFSRV.dll ?Size@RFile@@QBEHAAH@Z
+00401698 EFSRV.dll ?Read@RFile@@QBEHAAVTDes8@@@Z
+0040169e EUSER.dll ?Alloc@User@@SAPAXH@Z
+004016a4 EUSER.dll ??0TPtr8@@QAE@PAEHH@Z
+004016aa EUSER.dll ?Free@User@@SAXPAX@Z
+004016b0 EUSER.dll ?AtC@TDesC16@@IBEABGH@Z
+004016b6 EUSER.dll ?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z
+004016bc EUSER.dll ?Resume@RProcess@@QAEXXZ
+004016c2 EUSER.dll ?Close@RHandleBase@@QAEXXZ
+004016e8 UP_EXE.obj ?Panic@@YAXW4TStatPanic@@@Z
+00401880 UP_EXE.obj ?_E32Startup@@YGXXZ
+00401892 EUSER.dll ??0TPtrC16@@QAE@PBG@Z
+00401898 EUSER.dll ?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z
+0040189e EUSER.dll ?__DllAttachProcess@UpWins@@SAXXZ
+004018a4 EUSER.dll ?__FileServer@UpWins@@SAP6AHPAX@ZXZ
+004018aa EUSER.dll ?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z
+004018b0 EUSER.dll ?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z
+004018b6 EUSER.dll ?SetSystem@RThread@@QBEXH@Z
+004018bc EUSER.dll ?SetProtected@RThread@@QBEXH@Z
+004018c2 EUSER.dll ?Resume@RThread@@QBEXXZ
+004018c8 EUSER.dll ?__Synchronize@UpWins@@SAXXZ
+004018ce EUSER.dll ?__ReleaseInitThreads@UpWins@@SAXXZ
+004018d4 EUSER.dll ?__WindowServer@UpWins@@SAP6AHPAX@ZXZ
+004018da EUSER.dll ?__WireKernel@UpWins@@SAXXZ
+004018e0 EUSER.dll ?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z
+00403000 uid.o ?uid@@3PAVTUid@@A
+00404000 EFSRV.dll __IMPORT_DESCRIPTOR_EFSRV
+00404014 EUSER.dll __IMPORT_DESCRIPTOR_EUSER
+00404028 HAL.dll __IMPORT_DESCRIPTOR_HAL
+0040403c EFSRV.dll __NULL_IMPORT_DESCRIPTOR
+00404120 EFSRV.dll __imp_??0TFindFile@@QAE@AAVRFs@@@Z
+00404124 EFSRV.dll __imp_?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z
+00404128 EFSRV.dll __imp_?FullName@TParseBase@@QBEABVTDesC16@@XZ
+0040412c EFSRV.dll __imp_?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z
+00404130 EFSRV.dll __imp_?Read@RFile@@QBEHAAVTDes8@@H@Z
+00404134 EFSRV.dll __imp_?Close@RFsBase@@QAEXXZ
+00404138 EFSRV.dll __imp_?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z
+0040413c EFSRV.dll __imp_?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z
+00404140 EFSRV.dll __imp_?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z
+00404144 EFSRV.dll __imp_?Connect@RFs@@QAEHH@Z
+00404148 EFSRV.dll __imp_?Size@RFile@@QBEHAAH@Z
+0040414c EFSRV.dll __imp_?Read@RFile@@QBEHAAVTDes8@@@Z
+00404150 EFSRV.dll EFSRV_NULL_THUNK_DATA
+00404154 EUSER.dll __imp_??0TLocale@@QAE@XZ
+00404158 EUSER.dll __imp_??0TBufBase16@@IAE@ABVTDesC16@@H@Z
+0040415c EUSER.dll __imp_?AppendNumFixedWidth@TDes16@@QAEXIW4TRadix@@H@Z
+00404160 EUSER.dll __imp_?Copy@TDes16@@QAEXABVTDesC16@@@Z
+00404164 EUSER.dll __imp_??0TPtr8@@QAE@PAEH@Z
+00404168 EUSER.dll __imp_?Set@TLocale@@QBEXXZ
+0040416c EUSER.dll __imp_??0TCurrencySymbol@@QAE@XZ
+00404170 EUSER.dll __imp_?SetCurrencySymbol@User@@SAXABVTDesC16@@@Z
+00404174 EUSER.dll __imp_??0TBufBase16@@IAE@H@Z
+00404178 EUSER.dll __imp_?SetXYInputCalibration@UserHal@@SAHABVTDigitizerCalibration@@@Z
+0040417c EUSER.dll __imp_??0TBufBase8@@IAE@H@Z
+00404180 EUSER.dll __imp_?Panic@User@@SAXABVTDesC16@@H@Z
+00404184 EUSER.dll __imp_?AtC@TDesC8@@IBEABEH@Z
+00404188 EUSER.dll __imp_?WaitForRequest@User@@SAXAAVTRequestStatus@@@Z
+0040418c EUSER.dll __imp_?Alloc@User@@SAPAXH@Z
+00404190 EUSER.dll __imp_??0TPtr8@@QAE@PAEHH@Z
+00404194 EUSER.dll __imp_?Free@User@@SAXPAX@Z
+00404198 EUSER.dll __imp_?AtC@TDesC16@@IBEABGH@Z
+0040419c EUSER.dll __imp_?Create@RProcess@@QAEHABVTDesC16@@0W4TOwnerType@@@Z
+004041a0 EUSER.dll __imp_?Resume@RProcess@@QAEXXZ
+004041a4 EUSER.dll __imp_?Close@RHandleBase@@QAEXXZ
+004041a8 EUSER.dll __imp_??0TPtrC16@@QAE@PBG@Z
+004041ac EUSER.dll __imp_?BlockThreads@UserSvr@@SAXW4TBlockType@@@Z
+004041b0 EUSER.dll __imp_?__DllAttachProcess@UpWins@@SAXXZ
+004041b4 EUSER.dll __imp_?__FileServer@UpWins@@SAP6AHPAX@ZXZ
+004041b8 EUSER.dll __imp_?Create@RThread@@QAEHABVTDesC16@@P6AHPAX@ZHHH1W4TOwnerType@@@Z
+004041bc EUSER.dll __imp_?SetPriority@RThread@@QBEXW4TThreadPriority@@@Z
+004041c0 EUSER.dll __imp_?SetSystem@RThread@@QBEXH@Z
+004041c4 EUSER.dll __imp_?SetProtected@RThread@@QBEXH@Z
+004041c8 EUSER.dll __imp_?Resume@RThread@@QBEXXZ
+004041cc EUSER.dll __imp_?__Synchronize@UpWins@@SAXXZ
+004041d0 EUSER.dll __imp_?__ReleaseInitThreads@UpWins@@SAXXZ
+004041d4 EUSER.dll __imp_?__WindowServer@UpWins@@SAP6AHPAX@ZXZ
+004041d8 EUSER.dll __imp_?__WireKernel@UpWins@@SAXXZ
+004041dc EUSER.dll __imp_?KernelStartup@UserSvr@@SAXP6AHPAX@Z@Z
+004041e0 EUSER.dll EUSER_NULL_THUNK_DATA
+004041e4 HAL.dll __imp_?Get@HAL@@SAHW4TAttribute@HALData@@AAH@Z
+004041e8 HAL.dll __imp_?Set@HAL@@SAHW4TAttribute@HALData@@H@Z
+004041ec HAL.dll HAL_NULL_THUNK_DATA
+00405000 UP_EXE.obj ?__xc_a@@3PAP6AXXZA
+00405008 UP_EXE.obj ?__xc_z@@3PAP6AXXZA
+00405010 UP_EXE.obj ?__xi_a@@3PAP6AXXZA
+00405018 UP_EXE.obj ?__xi_z@@3PAP6AXXZA
+00405020 UP_EXE.obj ?__xp_a@@3PAP6AXXZA
+00405028 UP_EXE.obj ?__xp_z@@3PAP6AXXZA
+00405030 UP_EXE.obj ?__xt_a@@3PAP6AXXZA
+00405038 UP_EXE.obj ?__xt_z@@3PAP6AXXZA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/Preprocessed_text/IRCOMM.rpp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+# 1 "M:\\SRC\\COMMON\\GENERIC\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS"
+// IRCOMM.RSS
+//
+// Copyright (c) 1998 Symbian Ltd. All rights reserved.
+//
+
+# 1 "ircomm.rls" 1
+rls_string STRING_r_irccsy_info1 "Infrared"
+# 6 "M:\\SRC\\COMMON\\GENERIC\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+# 1 "..\\INC\\csy.rh" 1
+// CSY.RH
+//
+// Copyright (c) 1998 Symbian Ltd. All rights reserved.
+//
+
+
+STRUCT CSY_INFORMATION
+ {
+ LTEXT humanreadablename;
+ }
+# 7 "M:\\SRC\\COMMON\\GENERIC\\INFRA-RED\\IRDA\\GROUP\\IRCOMM.RSS" 2
+
+
+RESOURCE CSY_INFORMATION r_irccsy_info
+ {
+ humanreadablename=STRING_r_irccsy_info1;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/SGML_file/allclasses-frame.html Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Jul 16 16:53:16 BST 2003 -->
+<TITLE>
+All Classes
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+</HEAD>
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/symbian/sdk/util/assertion/Assert.html" TARGET="classFrame">Assert</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/AssertionException.html" TARGET="classFrame">AssertionException</A>
+<BR>
+<A HREF="com/symbian/sdk/util/assertion/JniOutOfMemoryError.html" TARGET="classFrame">JniOutOfMemoryError</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
Binary file bintools/evalid/right/ok/ZIP_file/aifapp_ResourceBundles.jar has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/right/ok/identical/console.ini Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Console.ini
+# Copyright (c) 1997-2001 Symbian Ltd. All rights reserved.
+#
+ScreenWidth 640
+ScreenHeight 240
+
+PhysicalScreenWidth 0
+PhysicalScreenHeight 0
+
+fasciabitmap console.bmp
+
+ScreenOffsetX 0
+ScreenOffsetY 0
+
+
+# could be decreased to reflect the amount of memory available on Brutus
+MegabytesOfFreeMemory 16
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/evalid/tools_evalid.history.xml.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+
+ -->
+<relnotes name="EVALID">
+ <purpose>
+ </purpose>
+
+ <defect number="DEF120580" title="EVALID : x86 static library comparisons sometimes fail when they shouldn't" revision="007">
+ EVALID : x86 static library comparisons sometimes fail when they shouldn't
+ </defect>
+
+ <defect number="DEF119569" title="EVALID incorrectly passes different WINSCW binaries after recent 'nm' change" revision="006">
+ EVALID incorrectly passes different WINSCW binaries after recent "nm" change
+ </defect>
+
+ <defect number="DEF114373" title="EVALID should use OBJDUMP instead of DUMPBIN" revision="005">
+ EVALID should use OBJDUMP instead of DUMPBIN
+ </defect>
+
+ <defect number="DEF114371" title="EVALID should be using ELF2E32 instead of PETRAN" revision="004">
+ EVALID should be using ELF2E32 instead of PETRAN
+ </defect>
+
+ <defect number="DEF096631" title="EVALID doesn't process -f listfile option correctly." revision="003">
+ EVALID doesn't process -f listfile option correctly
+ </defect>
+
+ <defect number="DEF099894" title="EVALID does not ignore all debug-related info in ELF files" revision="002">
+ EVALID does not ignore all debug-related info in ELF files
+ </defect>
+
+ <defect number="DEF099893" title="EVALID does not recognise some modern E32 Image files" revision="001">
+ EVALID does not recognise some modern E32 Image files
+ </defect>
+</relnotes>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/app-services/buildstubsis.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2006-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:
+# Meta information for stub .sis building extension template
+#
+
+platform win32
+makefile gnumake
+techstream app-services
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/app-services/buildstubsis.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,72 @@
+# Copyright (c) 2006-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:
+# Build Stub SIS file
+#
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+# Select appropriate directory and ensure it exists
+
+TARGETDIR=$(EPOCROOT)epoc32/data/z/system/install
+
+ifeq ($(PLATFORM),WINS)
+ TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/system/install
+else
+ifeq ($(PLATFORM),WINSCW)
+ TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/system/install
+endif
+endif
+
+$(TARGETDIR) :
+ $(call createdir,"$(TARGETDIR)")
+
+# Build stub SIS file
+
+SISFILE= $(TARGETDIR)/$(SISNAME).sis
+
+$(SISFILE) : $(EXTENSION_ROOT)/$(SRCDIR)/$(SISNAME).pkg
+ $(EPOCROOT)epoc32/tools/makesis -s $? $@
+
+do_nothing :
+ echo do_nothing
+
+# The targets invoked by abld
+
+MAKMAKE : do_nothing
+
+RESOURCE : $(TARGETDIR) $(SISFILE)
+
+SAVESPACE : BLD
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN :
+ -$(ERASE) $(SISFILE)
+
+RELEASABLES :
+ @echo $(SISFILE)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/app-services/buildupgradesis.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2006-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:
+# Meta information for upgrade sis building extension template
+#
+
+platform win32
+makefile gnumake
+techstream app-services
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/app-services/buildupgradesis.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,72 @@
+# Copyright (c) 2006-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:
+# Build Upgrade SIS file
+#
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+# Select appropriate directory and ensure it exists
+
+TARGETDIR=$(EPOCROOT)epoc32/data/z/private/$(UID_DIR)
+ifeq ($(PLATFORM),WINS)
+ TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/private/$(UID_DIR)
+else
+ifeq ($(PLATFORM),WINSCW)
+ TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/private/$(UID_DIR)
+endif
+endif
+
+$(TARGETDIR) :
+ @$(call createdir,"$(TARGETDIR)")
+
+# Build stub SIS file
+
+SISFILE= $(TARGETDIR)/$(SISNAME).sis
+
+$(SISFILE) : $(EXTENSION_ROOT)/$(SRCDIR)/$(SISNAME).pkg
+ $(EPOCROOT)epoc32/tools/makesis -d$(EXTENSION_ROOT)/$(SRCDIR) $? $@
+
+
+do_nothing :
+# do_nothing
+
+# The targets invoked by abld
+
+MAKMAKE : do_nothing
+
+RESOURCE : $(TARGETDIR) $(SISFILE)
+
+SAVESPACE : BLD
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN :
+ -$(ERASE) $(SISFILE)
+
+RELEASABLES :
+ @echo $(SISFILE)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/app-services/tzlocaltestserver.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2006-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:
+# Meta information for stub .sis building extension template
+#
+
+platform win32
+makefile gnumake
+techstream app-services
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/app-services/tzlocaltestserver.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,62 @@
+# Copyright (c) 2007-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:
+# TzLocalTestServer - makefile for TimeZoneLocalization test data
+#
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+MBSDIR = $(EPOCROOT)epoc32/tools/shell
+include $(MBSDIR)/$(notdir $(basename $(SHELL))).mk
+
+
+# Erase resources command
+erase_res = $(ERASE) $(EPOCROOT)epoc32$/release$/$(PLATFORM)$/$(CFG)$/z$/resource$/timezonelocalization
+erase_data = $(ERASE) $(EPOCROOT)epoc32$/data$/z$/resource$/timezonelocalization
+do_nothing :
+
+RESOURCE :
+ -$(erase_res)$/$(TZ_RSC)
+ -$(erase_data)$/$(TZ_RSC)
+ -$(erase_res)$/$(TZ_R01)
+ -$(erase_data)$/$(TZ_R01)
+ -$(erase_res)$/$(TZ_R02)
+ -$(erase_data)$/$(TZ_R02)
+ -$(erase_res)$/$(TZ_GRP_RSC)
+ -$(erase_data)$/$(TZ_GRP_RSC)
+ -$(erase_res)$/$(TZ_GRP_R01)
+ -$(erase_data)$/$(TZ_GRP_R01)
+ -$(erase_res)$/$(TZ_GRP_R02)
+ -$(erase_data)$/$(TZ_GTP_R02)
+
+BLD : do_nothing
+
+MAKMAKE : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+CLEAN : do_nothing
+
+FINAL : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASEABLES : do_nothing
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/application-protocols/buildstubsis.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2007-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:
+# Meta information for stub .sis building extension template
+#
+
+platform win32
+makefile gnumake
+techstream application-protocols
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/application-protocols/buildstubsis.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,72 @@
+# Copyright (c) 2007-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:
+# buildstubsis.mk - Build Stub SIS file
+#
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+# Select appropriate directory and ensure it exists
+
+TARGETDIR=$(EPOCROOT)epoc32/data/z/system/install
+
+ifeq ($(PLATFORM),WINS)
+ TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/system/install
+else
+ifeq ($(PLATFORM),WINSCW)
+ TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/system/install
+endif
+endif
+
+$(TARGETDIR) :
+ $(call createdir,"$(TARGETDIR)")
+
+# Build stub SIS file
+
+SISFILE= $(TARGETDIR)/$(SISNAME).sis
+
+$(SISFILE) : $(EXTENSION_ROOT)/$(SRCDIR)/$(SISNAME).pkg
+ $(EPOCROOT)epoc32/tools/makesis -s $? $@
+
+do_nothing :
+ echo do_nothing
+
+# The targets invoked by abld
+
+MAKMAKE : do_nothing
+
+RESOURCE : $(TARGETDIR) $(SISFILE)
+
+SAVESPACE : BLD
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN :
+ -$(ERASE) $(SISFILE)
+
+RELEASABLES :
+ @echo $(SISFILE)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/base_rvct_common.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,69 @@
+# Copyright (c) 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:
+# Some functions that are commonly used by base FLM
+
+define base__compile
+$(1) : $(2) : $(3)
+ $(call startrule,base__compile) \
+ $(CC) $(ARMCCFLAGS) $$< -o $$@ \
+ $(call endrule,base__compile)
+
+CLEANTARGETS := $(CLEANTARGETS) $(1)
+endef
+
+define base__h2inc
+$(1) : $(2)
+ $(call startrule,base__h2inc) \
+ $(PERL) $(EPOCROOT)/epoc32/tools/h2inc.pl $$< $$@ ARMASM \
+ $(call endrule,base__h2inc)
+
+CLEANTARGETS := $(CLEANTARGETS) $(1)
+endef
+
+define base__asm
+$(1) : $(2) : $(3)
+ $(call startrule,base__asm) \
+ $(ASM) $(AFLAGS) -o $$@ --LIST $(join $(basename $(1)),.lst) $$< \
+ $(call endrule,base__asm)
+
+CLEANTARGETS := $(CLEANTARGETS) $(1) $(join $(basename $(1)),.lst)
+endef
+
+define base__link
+$(1) : $(2)
+ $(call startrule,base__link) \
+ $(LD) $(LFLAGS) -o $$@ $(FULLOBJECTS) \
+ $(call endrule,base__link)
+
+CLEANTARGETS := $(CLEANTARGETS) $(1)
+endef
+
+define base__strip
+$(1) : $(2)
+ $(call startrule,base__strip) \
+ $(FROMELF) --bin --output $$@ $$< \
+ $(call endrule,base__strip)
+
+CLEANTARGETS := $(CLEANTARGETS) $(1)
+endef
+
+define base__omapsig
+$(1) : $(2)
+ $(call startrule,base__omapsig) \
+ $(PERL) $(EPOCROOT)/epoc32/tools/omapsig.pl $(LINKBASE) $$< $$@ \
+ $(call endrule,base__omapsig)
+
+CLEANTARGETS := $(CLEANTARGETS) $(1)
+endef
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/bootstrap.flm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,195 @@
+# Copyright (c) 2009-2010 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:
+#
+
+ifeq ($($(NAME)_$(PLATFORM_PATH)_bootstrap_flm),)
+$(NAME)_$(PLATFORM_PATH)_bootstrap_flm := 1
+
+E32PATH := $(EXTENSION_ROOT)/$(E32PATH)
+SOURCES := $(foreach S,$(SOURCES),$(addprefix $(EXTENSION_ROOT)/,$(S)))
+INCLUDES2:=$(addprefix $(EXTENSION_ROOT)/,$(INCLUDES))
+EXTRA_INC_PATH := $(foreach S,$(EXTRA_INC_PATH),$(addprefix $(EXTENSION_ROOT)/,$(S)))
+GENINCLUDES_HEADERS := $(foreach H,$(GENINCLUDES_HEADERS),$(addprefix $(EXTENSION_ROOT)/,$(H)))
+
+ifndef LINKBASE
+LINKBASE := 0x00000000
+endif
+
+UNIQ:=$(E32PATH)$(PLATFORM_PATH)$(NAME)$(MEMMODEL)$(SOURCES)$(ASM_MACROS)
+UNIQ:=$(word 1,$(shell echo $(UNIQ) | $(GNUMD5SUM)))
+
+# Make the output build directory name unique, starting with NAME of the binary being built
+EPOCBLDABS := $(EPOCBLD)/$(NAME)_$(UNIQ)
+
+EPOCINC := $(EPOCROOT)/epoc32/include
+EPOCKERNINC := $(EPOCINC)/kernel
+EPOCCPUINC := $(EPOCKERNINC)/$(CPU)
+EPOCTRG := $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)
+TRG := $(EPOCTRG)/$(NAME).bin
+TEMPTRG := $(EPOCBLDABS)/$(NAME).bin
+ASMINCPATH :=
+ASM_MACROS :=
+CLEANTARGETS :=
+
+CLEANTARGETS := $(CLEANTARGETS) $(TRG) $(TEMPTRG) $(join $(basename $(TRG)),.sym)
+
+ifneq ($(EXTRA_INC_PATH),)
+ASMINCPATH := $(EXTRA_INC_PATH)
+endif
+
+ASMINCPATH := . $(EPOCBLDABS) $(ASMINCPATH) $(EXTENSION_ROOT) $(EPOCCPUINC) $(EXTRA_EPOC32_INC_PATH) $(E32PATH)/eka/include/kernel/$(CPU)
+
+ifeq ($(MEMMODEL),)
+$(error MEMMODEL parameter not specified)
+endif
+
+# Convert MEMMODEL parameter to lower case
+MEMMODEL := $(shell echo $(MEMMODEL) | tr A-Z a-z)
+
+ifeq ($(MEMMODEL),direct)
+CFG_MM := CFG_MMDirect
+HEADERS_MM :=
+endif
+ifeq ($(MEMMODEL),flexible)
+CFG_MM := CFG_MMFlexible
+HEADERS_MM := $(E32PATH)/eka/include/memmodel/epoc/flexible/$(CPU)/mmboot.h
+endif
+ifeq ($(MEMMODEL),moving)
+CFG_MM := CFG_MMMoving
+HEADERS_MM := $(E32PATH)/eka/include/memmodel/epoc/moving/$(CPU)/mmboot.h
+endif
+ifeq ($(MEMMODEL),multiple)
+CFG_MM := CFG_MMMultiple
+HEADERS_MM := $(E32PATH)/eka/include/memmodel/epoc/multiple/$(CPU)/mmboot.h
+endif
+ifndef CFG_MM
+$(error '$(MEMMODEL)' memory model unknown)
+endif
+
+ASM_MACROS := $(ASM_MACROS) $(CFG_MM)
+ifneq ($(SMP),)
+ASM_MACROS := $(ASM_MACROS) SMP
+endif
+
+ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))
+ASM_MACROS := $(ASM_MACROS) USE_CXSF
+
+INCEXT := inc
+ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),--predefine "$(macro) SETL {TRUE}")
+AFLAGS := -g --keep $(ASM_MACRO_CMD) $(ASMINCPATHCMD)
+LFLAGS := --ro-base $(LINKBASE) --entry $(LINKBASE) --map
+SYMOPT := --symdefs
+
+define bootstrap_asm
+$(1) : $(2) : $(3)
+ $(call startrule,bootstrap_rvct_asm) \
+ $(ASM) $(AFLAGS) -o $$@ --LIST $$(join $$(basename $$@),.lst) $$< \
+ $(call endrule,bootstrap_rvct_asm)
+endef
+
+define bootstrap_link
+$(EPOCBLDABS)/$(NAME).in : $(LINKOBJECTS) $(LINKFILE) | $(EPOCBLDABS)
+ $(call startrule,bootstrap_rvct_link) \
+ $(LD) $(LFLAGS) $(SYMOPT) $$(join $$(basename $$@),.sym) -o $$@ $$(filter %.o,$$^); \
+ $(GNUCP) $$@ $$(join $$(basename $(TRG)),.sym) \
+ $(call endrule,bootstrap_rvct_link)
+endef
+
+define bootstrap_strip
+$(TRG) : $(EPOCBLDABS)/$(NAME).in
+ $(call startrule,bootstrap_strip) \
+ $(FROMELF) --bin --output $$@ $$< \
+ $(call endrule,bootstrap_rvct_strip)
+endef
+
+define bootstrap_h2inc
+# How to translate the .h files to .inc
+$(1) : $(2)
+ $(call startrule,bootstrap_h2inc) \
+ $(PERL) $(EPOCROOT)/epoc32/tools/h2inc.pl $$< $$@ ARMASM \
+ $(call endrule, bootsrap_h2inc)
+endef
+
+# Joins two lists with a 1:1 mapping, separated by a ->
+# $(call bootstrap_joinlists,a b c,d e f) returns a->d b->e c->f
+define bootstrap_joinlists
+$(join $(1),$(addprefix ->,$(2)))
+endef
+
+# Path for generic source files
+BASESRCPATH := $(E32PATH)/eka/kernel/$(CPU)
+
+# Generic source files
+BASESOURCES := $(foreach S,$(BASESOURCES_NAMES),$(addprefix $(BASESRCPATH)/,$(S)))
+
+HEADERS:= $(E32PATH)/eka/include/kernel/kernboot.h $(E32PATH)/eka/include/kernel/arm/bootdefs.h $(E32PATH)/eka/include/e32rom.h $(GENINCLUDES_HEADERS) $(HEADERS_MM)
+
+# Generated include files
+BOOTSTRAP_GENINCLUDES := $(foreach f,$(HEADERS),$(basename $(notdir $(f))).$(INCEXT))
+
+# Non-generated generic include files
+ifeq ($(BASEINCLUDES),)
+BASEINCLUDES := $(E32PATH)/eka/include/kernel/$(CPU)/bootcpu.inc $(E32PATH)/eka/include/kernel/$(CPU)/bootmacro.inc
+endif
+INCLUDES2 := $(foreach f,$(INCLUDES2),$(basename $(f)).$(INCEXT))
+
+# Generic object files
+FULLBASEOBJECTS := $(foreach src, $(BASESOURCES_NAMES), $(addprefix $(EPOCBLDABS)/,$(basename $(src)).o))
+
+# Platform specific object files
+FULLOBJECTS := $(foreach src, $(SOURCES), $(addprefix $(EPOCBLDABS)/,$(basename $(notdir $(src))).o))
+
+LINKOBJECTS := $(FULLBASEOBJECTS) $(FULLOBJECTS)
+
+# Generated include files with paths
+FULLGENINCLUDES := $(addprefix $(EPOCBLDABS)/,$(BOOTSTRAP_GENINCLUDES))
+
+CLEANTARGETS := $(CLEANTARGETS) $(FULLBASEOBJECTS) $(FULLOBJECTS) $(LINKOBJECTS) $(FULLGENINCLUDES)
+
+CLEANTARGETS := $(CLEANTARGETS) $(EPOCBLDABS)/$(NAME).in $(join $(basename $(EPOCBLDABS)/$(NAME).in),.sym)
+
+JOINED_INC := $(call bootstrap_joinlists,$(FULLGENINCLUDES),$(HEADERS))
+$(foreach J,$(JOINED_INC),$(eval $(call bootstrap_h2inc,$(word 1,$(subst ->, ,$(J))),$(word 2,$(subst ->, ,$(J))) | $(EPOCBLDABS))))
+
+# How to strip linked object to binary
+$(eval $(call bootstrap_strip,$(TRG),$(EPOCBLDABS)/$(NAME).in))
+
+LISTFILE := $(foreach f,$(FULLBASEOBJECTS),$(join $(basename $(f)),.lst)) $(foreach f,$(FULLOBJECTS),$(join $(basename $(f)),.lst))
+CLEANTARGETS := $(CLEANTARGETS) $(LISTFILE)
+
+JOINED_BASEOBJECTS := $(call bootstrap_joinlists,$(FULLBASEOBJECTS),$(BASESOURCES))
+
+$(foreach J,$(JOINED_BASEOBJECTS),$(eval $(call bootstrap_asm,$(word 1,$(subst ->, ,$(J))),$(EPOCBLDABS)/%.o,$(word 2,$(subst ->, ,$(J))) $(BASEINCLUDES) $(FULLGENINCLUDES) $(INCLUDES2) | $(EPOCBLDABS))))
+
+JOINED_OBJECTS := $(call bootstrap_joinlists,$(FULLOBJECTS),$(SOURCES))
+
+$(foreach J,$(JOINED_OBJECTS),$(eval $(call bootstrap_asm,$(word 1,$(subst ->, ,$(J))),$(EPOCBLDABS)/%.o,$(word 2,$(subst ->, ,$(J))) $(BASEINCLUDES) $(FULLGENINCLUDES) $(INCLUDES2) |$(EPOCBLDABS))))
+
+# How to link the object files
+$(eval $(bootstrap_link))
+
+# Hook into global targets
+TARGET :: $(TRG)
+
+#############################################
+
+# --what to show releasables
+$(eval $(call whatmacro,$(TRG),USERFLM))
+# create directory
+CREATABLEPATHS := $(EPOCBLDABS) $(EPOCTRG)
+$(call makepath,$(CREATABLEPATHS))
+# clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(BUILDLOC)))
+
+endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/bootstrap.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the boot strap extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/bootstrap.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,391 @@
+# Copyright (c) 2006-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:
+#
+
+# To ensure that EPOCROOT always ends with a forward slash.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+ifndef CPU
+CPU := arm
+endif
+
+ifndef LINKBASE
+LINKBASE := 0x00000000
+endif
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+PROCEED:=build
+ifneq "$(PBUILDPID)" ""
+ ifneq "$(CFG)" "UREL"
+ PROCEED:=skip
+ endif
+endif
+
+COPY := $(call ecopy)
+
+ifeq "$(CPU)" "x86"
+ ifeq "$(MEMMODEL)" "direct"
+ BLDSGL:=s
+ else
+ ifeq "$(MEMMODEL)" "flexible"
+ BLDSGL:=f
+ else
+ BLDSGL:=
+ endif
+ endif
+ ifdef SMP
+ BLDSMP:=smp
+ else
+ BLDSMP:=
+ endif
+ EPOCROOT:=$(subst /,\,$(EPOCROOT))
+ EPOCBLDABS := $(EPOCROOT)epoc32\build\tasm$(PBUILDPID)\$(BLDSGL)$(VNAME)$(BLDSMP)
+else
+ DRIVELETTER := $(shell cd 2>NUL)
+ DRIVELETTER_2 := $(word 1,$(subst \, ,$(DRIVELETTER)))
+ EPOCBLDABS_1 := $(subst $(TO_ROOT),,$(EPOCBLD))
+ EPOCBLDABS_2 := $(subst $(DRIVELETTER_2),,$(EPOCBLDABS_1))
+
+ EPOCBLDABS := $(call epocbldabs,$(DRIVELETTER_2),$(EPOCBLDABS_2))/$(NAME)
+endif
+
+EPOCINC := $(INC_PATH)
+EPOCKERNINC := $(EPOCINC)/kernel
+EPOCCPUINC := $(EPOCKERNINC)/$(CPU)
+EPOCMMINC := $(INC_PATH)/memmodel/epoc/$(MEMMODEL)/$(CPU)
+EPOCTRG := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TRG := $(EPOCTRG)/$(NAME).bin
+TEMPTRG := $(EPOCBLDABS)/$(NAME).bin
+
+ifdef EXTRA_INC_PATH
+ASMINCPATH := $(EXTRA_INC_PATH)
+endif
+
+ifeq "$(CPU)" "arm"
+ASMINCPATH := . $(EPOCBLDABS) $(ASMINCPATH) $(EXTENSION_ROOT) $(EPOCCPUINC)
+ARMASM_OUT := $(shell armasm 2>&1)
+ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+ARMASM_OUT_6 := $(word 6,$(ARMASM_OUT))
+
+# Use GCC toolchain if no other is available
+TOOLVER := GCC
+
+RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4)))
+ifeq "$(RVCTSTR)" "RVCT"
+ TOOLVER := RVCT
+ OP := --
+endif
+ifeq "$(ARMASM_OUT_6)" "2.37"
+ TOOLVER := 211
+endif
+endif
+
+ifeq "$(MEMMODEL)" "direct"
+CFG_MM := CFG_MMDirect
+endif
+ifeq "$(MEMMODEL)" "moving"
+CFG_MM := CFG_MMMoving
+endif
+ifeq "$(MEMMODEL)" "multiple"
+CFG_MM := CFG_MMMultiple
+endif
+ifeq "$(MEMMODEL)" "flexible"
+CFG_MM := CFG_MMFlexible
+endif
+ifndef CFG_MM
+$(error Memory model unknown)
+endif
+
+ASM_MACROS += $(CFG_MM)
+ifdef SMP
+ ASM_MACROS += SMP
+endif
+
+ifeq "$(CPU)" "x86"
+ ifndef BASEINCLUDES
+ BASEINCLUDES := bootcpu.inc bootmacr.inc
+ endif
+ ifndef BASESOURCES
+ BASESOURCES := bootmain.asm bootcpu.asm bootutil.asm
+ endif
+ GENINCLUDES := $(GENINCLUDES) x86boot.h
+ ASMINCPATH := .
+ ASM := tasm
+ LINK := tlink
+ EXE2BIN := exe2bin
+ SRCEXT := asm
+ INCEXT := inc
+ OBJEXT := obj
+ EXEEXT := exe
+
+ ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join /i,$(call slash2generic,$(dir))))
+ ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),/d$(macro)=1)
+ AFLAGS := /l /m3 /ML /W-PDC $(ASM_MACRO_CMD) $(ASMINCPATHCMD)
+ LFLAGS := /m /s /n /3 /c
+ ASMTYP := TASM
+ LINKFILE :=
+ define do_asm
+ cd $(EPOCBLDABS) && $(CP) $(call slash2generic,$<) .
+ cd $(EPOCBLDABS) && $(ASM) $(AFLAGS) $(notdir $<)
+ endef
+ define do_link
+ cd $(EPOCBLDABS) && $(LINK) $(LFLAGS) $(filter %.$(OBJEXT),$(foreach obj,$^,$(notdir $(obj)))), temp.exe
+ cd $(EPOCBLDABS) && $(COPY) temp.exe $@
+ cd $(EPOCBLDABS) && $(ERASE) temp.exe
+ endef
+ define do_strip
+ cd $(EPOCBLDABS) && $(COPY) $< temp.exe
+ cd $(EPOCBLDABS) && $(EXE2BIN) temp.exe temp.bin
+ cd $(EPOCBLDABS) && $(COPY) temp.bin $@
+ cd $(EPOCBLDABS) && $(ERASE) temp.exe temp.bin
+ endef
+endif
+ifeq "$(CPU)" "arm"
+ ifeq "$(TOOLVER)" "211"
+ ASM := armasm
+ LINK := armlink
+ SRCEXT := s
+ INCEXT := inc
+ OBJEXT := o
+ EXEEXT := in
+ ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))
+ ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),-predefine "$(macro) SETL {TRUE}")
+ AFLAGS := $(ASM_ARM211_VARIANTFLAGS) -apcs 3/32bit/nosw -Length 0 -Width 200 $(ASM_MACRO_CMD) $(ASMINCPATHCMD)
+ LFLAGS := -Base $(LINKBASE) -Data 0xf0000000 -Entry $(LINKBASE) -Bin -map
+ SYMOPT := -symbols
+ ASMTYP := ARMASM
+ LINKFILE :=
+ define do_asm
+ $(ASM) $(AFLAGS) -o $@ -LIST $(join $(basename $@),.lst) $<
+ endef
+ define do_link
+ $(LINK) $(LFLAGS) $(SYMOPT) $(join $(basename $@),.sym) -o $@ $(filter %.$(OBJEXT),$^)
+ endef
+ define do_strip
+ @if exist $@ $(ERASE) $(call slash2generic,$@)
+ $(COPY) $< $@
+ endef
+ endif
+ ifeq "$(TOOLVER)" "RVCT"
+ ASM_MACROS += USE_CXSF
+ ASM := armasm
+ LINK := armlink
+ FROMELF := fromelf
+ SRCEXT := s
+ INCEXT := inc
+ OBJEXT := o
+ EXEEXT := in
+ ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))
+ ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ AFLAGS := -g $(OP)keep $(ASM_MACRO_CMD) $(ASMINCPATHCMD) $(ASM_RVCT_VARIANTFLAGS)
+ LFLAGS := $(OP)ro-base $(LINKBASE) $(OP)entry $(LINKBASE) $(OP)map
+ SYMOPT := $(OP)symdefs
+ ASMTYP := ARMASM
+ LINKFILE :=
+ define do_asm
+ $(ASM) $(AFLAGS) -o $@ $(OP)LIST $(join $(basename $@),.lst) $<
+ endef
+ define do_link
+ $(LINK) $(LFLAGS) $(SYMOPT) $(join $(basename $@),.sym) -o $@ $(filter %.$(OBJEXT),$^)
+ $(COPY) $@ $(join $(basename $(TRG)),.sym)
+ endef
+ define do_strip
+ $(FROMELF) $(OP)bin $(OP)output $@ $<
+ endef
+ endif
+ ifeq "$(TOOLVER)" "GCC"
+ ASM_MACROS += USE_CXSF GNU_ASM
+ ASM := as
+ LINK := ld
+ STRIP := strip
+ SRCEXT := s
+ INCEXT := ginc
+ OBJEXT := o
+ EXEEXT := in
+ ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))
+ ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),--defsym $(macro)=1 )
+ AFLAGS := -mapcs-32 -R -n $(ASM_MACRO_CMD) -I- $(ASMINCPATHCMD)
+ LFLAGS := -n -x --section-alignment 4 --file-alignment 2 -no-whole-archive
+ SYMOPT := -symdefs
+ ASMTYP := AS
+ PROCESS_INCLUDES := 1
+ ifndef LINKFILE
+ LINKFILE := bootstrap.lnk
+ endif
+ define do_asm
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $(join $(basename $@),.ss)
+ $(ASM) $(AFLAGS) -acdhlms=$(join $(basename $@),.lst) -o $@ $(join $(basename $@),.ss)
+ endef
+ define do_link
+ if exist $(join $(basename $@),.lnk) $(ERASE) $(call slash2generic,$(join $(basename $@),.lnk))
+ $(COPY) $(subst /,\,$(filter %.lnk,$^)) $(join $(basename $@),.lnk)
+ $(LINK) -M -o $@ $(filter %.$(OBJEXT),$^) $(LFLAGS) --script=$(join $(basename $@),.lnk) >$(join $(basename $@),.map)
+ endef
+ define do_strip
+ $(STRIP) -O binary -o $(TEMPTRG) $<
+ $(COPY) $(TEMPTRG) $@
+ $(ERASE) $(call slash2generic,$(TEMPTRG))
+ endef
+ endif
+endif
+
+
+
+# Generic source files
+ifndef BASESOURCES
+BASESOURCES := bootmain.s bootcpu.s bootutils.s
+endif
+
+# Path for generic source files
+ifndef BASESRCPATH
+BASESRCPATH := $(E32PATH)/eka/kernel/$(CPU)
+endif
+
+
+# Generated include files
+GENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))
+GENINCLUDES := $(GENINCLUDES) e32rom.$(INCEXT) kernboot.$(INCEXT)
+GENINCLUDES := $(GENINCLUDES) bootdefs.$(INCEXT)
+ifneq "$(MEMMODEL)" "direct"
+GENINCLUDES := $(GENINCLUDES) mmboot.$(INCEXT)
+endif
+
+# Headers from which GENINCLUDES are generated
+GENHEADERS = $(foreach inc,$(GENINCLUDES),$(basename $(inc)).h)
+
+# Non-generated generic include files
+ifndef BASEINCLUDES
+BASEINCLUDES := bootcpu.inc bootmacro.inc
+endif
+BASEINCLUDES := $(foreach f,$(BASEINCLUDES),$(basename $(f)).$(INCEXT))
+INCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT))
+
+# Generic object files
+BASEOBJECTS = $(foreach src, $(BASESOURCES), $(basename $(src)).$(OBJEXT))
+
+# Platform specific object files
+OBJECTS = $(foreach src, $(SOURCES), $(basename $(src)).$(OBJEXT))
+
+# Object files with paths
+FULLBASEOBJECTS = $(addprefix $(EPOCBLDABS)/,$(BASEOBJECTS))
+FULLOBJECTS = $(addprefix $(EPOCBLDABS)/,$(OBJECTS))
+LINKOBJECTS = $(FULLBASEOBJECTS) $(FULLOBJECTS)
+
+# Generated include files with paths
+FULLGENINCLUDES = $(addprefix $(EPOCBLDABS)/,$(GENINCLUDES))
+
+# Tell make where to look for things
+vpath %.h . $(EXTRA_INC_PATH) $(EPOCINC) $(EPOCKERNINC) $(EPOCCPUINC) $(EPOCMMINC)
+vpath %.inc . $(EXTRA_INC_PATH) $(EXTENSION_ROOT) $(EPOCINC) $(EPOCKERNINC) $(EPOCCPUINC) $(EPOCMMINC) $(EPOCBLDABS)
+vpath %.ginc $(EPOCBLDABS)
+vpath %.$(SRCEXT) . $(EXTRA_SRC_PATH) $(EXTENSION_ROOT) $(BASESRCPATH)
+vpath %.$(OBJEXT) $(EPOCBLDABS)
+vpath %.lnk . $(EXTENSION_ROOT) $(EPOCCPUINC)
+
+# How to link the object files
+$(EPOCBLDABS)/$(NAME).$(EXEEXT): $(LINKOBJECTS) $(LINKFILE) $(call pipe,$(EPOCBLDABS))
+ $(do_link)
+
+# How to strip linked object to binary
+$(TRG): $(EPOCBLDABS)/$(NAME).$(EXEEXT)
+ $(do_strip)
+
+# How to assemble the source files
+ifdef PROCESS_INCLUDES
+FULLBASEINCLUDES := $(addprefix $(EPOCBLDABS)/,$(BASEINCLUDES))
+FULLINCLUDES := $(addprefix $(EPOCBLDABS)/,$(INCLUDES))
+
+$(FULLBASEINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS))
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@
+
+$(FULLINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS))
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@
+
+$(FULLBASEOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS))
+ $(do_asm)
+
+$(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS))
+ $(do_asm)
+
+else
+
+ifeq "$(CPU)" "x86"
+FULLBASEINCLUDES := $(addprefix $(EPOCBLDABS)/,$(BASEINCLUDES))
+FULLINCLUDES := $(addprefix $(EPOCBLDABS)/,$(INCLUDES))
+
+$(FULLBASEINCLUDES) $(FULLINCLUDES) : $(EPOCBLDABS)/%.inc : %.inc
+ $(CP) $(call slash2generic,$<) $(call slash2generic,$@)
+
+$(FULLBASEOBJECTS) $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(FULLINCLUDES)
+ $(do_asm)
+
+else
+$(FULLBASEOBJECTS) $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(BASEINCLUDES) $(FULLGENINCLUDES) $(INCLUDES) $(call pipe,$(EPOCBLDABS))
+ $(do_asm)
+
+endif
+endif
+
+# How to translate the .h files to .inc
+$(FULLGENINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.h $(call pipe,$(EPOCBLDABS))
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ $(ASMTYP)
+
+
+# How to make the working directories
+$(EPOCBLDABS) $(EPOCTRG) :
+ $(call ifnotexistd,$(call slash2generic,$@))
+
+# Makmake targets
+.PHONY : MAKMAKE FREEZE LIB CLEANLIB RESOURCE FINAL BLD SAVESPACE RELEASABLES CLEAN
+.PHONY : build skip
+
+MAKMAKE :
+ echo Nothing to do
+ echo $(BASESRCPATH)
+
+FREEZE :
+ echo Nothing to do
+ echo $(BASESRCPATH)
+
+LIB :
+ echo Nothing to do
+ echo $(BASESRCPATH)
+
+CLEANLIB :
+ echo Nothing to do
+ echo $(BASESRCPATH)
+
+RESOURCE :
+ echo Nothing to do
+ echo $(BASESRCPATH)
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(PROCEED)
+
+RELEASABLES :
+ @echo $(TRG)
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(TRG))
+ -$(ERASE) $(call slash2generic,$(EPOCBLDABS)/*.*)
+
+build: $(EPOCTRG) $(EPOCBLDABS) $(TRG)
+ echo Bootstrap built for $(PLATFORM) $(CFG)
+
+skip:
+ echo Bootstrap build skipped for $(PLATFORM) $(CFG)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/bootstrap.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!-- Extension interfaces : replacements for Template Extension Makefiles
+-->
+
+<interface name="base.bootstrap" extends="Symbian.KernelFLM" flm="bootstrap.flm">
+ <param name="E32PATH" />
+ <param name="NAME" />
+ <param name="MEMMODEL" />
+ <param name="EXTRA_INC_PATH" default=''/>
+ <param name="EXTRA_EPOC32_INC_PATH" default=''/>
+ <param name="SOURCES" />
+ <param name="INCLUDES" />
+ <param name="ASM_MACROS" default='' />
+ <param name="GENINCLUDES_HEADERS" default=''/>
+ <param name="CPU" default='arm'/>
+ <param name="SMP" default=''/>
+ <param name="LINKBASE" default='0x00000000'/>
+ <param name="BASESOURCES_NAMES" default="bootmain.s bootcpu.s bootutils.s"/>
+ <param name="INC_PATH" default=''/>
+ </interface>
+</build>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/config.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the config extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/config.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,65 @@
+# Copyright (c) 2006-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:
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+ifndef HALPATH
+HALPATH := ..
+endif
+
+ifndef SOURCE
+SOURCE := hal
+endif
+
+#MDIR := $(call generated,generatedcpp/hal) # abld
+#MDIR := $(call generated,base/lubbock) # raptor
+MDIR := $(call generatedcpp)
+
+MAKMAKE : $(MDIR)/$(PREFIX)values.cpp $(MDIR)/$(PREFIX)config.cpp
+
+FREEZE :
+
+LIB :
+
+CLEANLIB :
+
+RESOURCE :
+
+FINAL :
+
+BLD SAVESPACE : $(MDIR)/$(PREFIX)values.cpp $(MDIR)/$(PREFIX)config.cpp
+
+RELEASABLES :
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(MDIR)/$(PREFIX)values.cpp)
+ -$(ERASE) $(call slash2generic,$(MDIR)/$(PREFIX)config.cpp)
+# -$(ERASE) $(MDIR)/$(PREFIX)values.cpp
+# -$(ERASE) $(MDIR)/$(PREFIX)config.cpp
+
+$(MDIR)/$(PREFIX)values.cpp : $(SOURCE)/values.hda $(EPOCROOT)epoc32/include/platform/hal_data.h
+ -$(call createdir,"$(MDIR)")
+ perl $(HALPATH)/hal/halcfg.pl $(EPOCROOT)epoc32/include/platform/hal_data.h $(SOURCE)/values.hda $(MDIR)/$(PREFIX)values.cpp
+
+$(MDIR)/$(PREFIX)config.cpp : $(SOURCE)/config.hcf $(EPOCROOT)epoc32/include/platform/hal_data.h
+ -$(call createdir,"$(MDIR)")
+ perl $(HALPATH)/hal/halcfg.pl -x $(EPOCROOT)epoc32/include/platform/hal_data.h $(SOURCE)/config.hcf $(MDIR)/$(PREFIX)config.cpp
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/copy_default.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2006-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:
+# Meta information for the copy_default extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/copy_default.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,48 @@
+# 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:
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+SOURCE_COPY=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/$(SOURCES)
+TARGET_COPY=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/$(TARGET)
+
+$(TARGET_COPY) : $(SOURCE_COPY)
+ $(call cpfeature,"$(SOURCE_COPY)","$(TARGET_COPY)")
+# perl $(EPOCROOT)epoc32/tools/copyfeaturevariants.pl "$(SOURCE_COPY)" "$(TARGET_COPY)"
+# $(CP) "$?" "$@"
+
+#
+# The targets invoked by abld...
+#
+
+MAKMAKE BLD SAVESPACE FREEZE LIB CLEANLIB RESOURCE :
+ @echo Nothing to do for "$@"
+
+CLEAN :
+ -$(ERASE) $(TARGET_COPY)
+
+RELEASABLES :
+ @echo $(TARGET_COPY)
+
+# we have to wait until the SOURCE_COPY is built before we can copy it...
+#
+FINAL : $(TARGET_COPY)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/genexec.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the genexec extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/genexec.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,71 @@
+# Copyright (c) 2006-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:
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+XINCDIR := $(INC_PATH)
+XINCKDIR := $(INC_PATH)/kernel
+
+PROCEED:=all
+ifneq "$(PBUILDPID)" ""
+ ifneq "$(PLATFORM)" "$(__firstplat)"
+ PROCEED:=skip
+ endif
+endif
+
+.PHONY : MAKMAKE FREEZE LIB CLEANLIB RESOURCE FINAL BLD SAVESPACE RELEASABLES CLEAN
+.PHONY : all skip
+
+MAKMAKE : $(PROCEED)
+
+FREEZE :
+
+LIB : $(PROCEED)
+
+CLEANLIB :
+
+RESOURCE :
+
+FINAL :
+
+BLD SAVESPACE : $(PROCEED)
+
+RELEASABLES :
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(XINCDIR)/exec_enum.h)
+ -$(ERASE) $(call slash2generic,$(XINCDIR)/exec_user.h)
+ -$(ERASE) $(call slash2generic,$(XINCKDIR)/exec_kernel.h)
+
+all: $(XINCDIR)/exec_enum.h $(XINCDIR)/exec_user.h $(XINCKDIR)/exec_kernel.h
+
+$(XINCDIR)/exec_enum.h : $(EXTRA_SRC_PATH)/execs.txt $(EXTRA_SRC_PATH)/genexec.pl
+ perl $(EXTRA_SRC_PATH)/genexec.pl -i $(EXTRA_SRC_PATH)/execs.txt -e $(XINCDIR)/exec_enum.h -u $(XINCDIR)/exec_user.h -k $(XINCKDIR)/exec_kernel.h
+
+$(XINCDIR)/exec_user.h : $(EXTRA_SRC_PATH)/execs.txt $(EXTRA_SRC_PATH)/genexec.pl
+ perl $(EXTRA_SRC_PATH)/genexec.pl -i $(EXTRA_SRC_PATH)/execs.txt -e $(XINCDIR)/exec_enum.h -u $(XINCDIR)/exec_user.h -k $(XINCKDIR)/exec_kernel.h
+
+$(XINCKDIR)/exec_kernel.h : $(EXTRA_SRC_PATH)/execs.txt $(EXTRA_SRC_PATH)/genexec.pl
+ perl $(EXTRA_SRC_PATH)/genexec.pl -i $(EXTRA_SRC_PATH)/execs.txt -e $(XINCDIR)/exec_enum.h -u $(XINCDIR)/exec_user.h -k $(XINCKDIR)/exec_kernel.h
+
+
+skip:
+ echo GENEXEC skipped for $(PLATFORM) $(CFG)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h2_genbootinc.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the h2_genbootinc extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h2_genbootinc.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,64 @@
+# Copyright (c) 2006-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:
+# Generate assembler inc files from header files
+#
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+XINCDIR := $(INC_PATH)/h2
+XINCDIR2 := $(INC_PATH)/assp/omap1610
+
+MAKMAKE : all
+
+FREEZE :
+
+LIB : all
+
+CLEANLIB :
+
+RESOURCE :
+
+FINAL :
+
+BLD SAVESPACE : all
+
+RELEASABLES :
+ @echo $(XINCDIR)/h2const.inc
+ @echo $(XINCDIR)/nand_fbr_offset.inc
+ @echo $(XINCDIR2)/omapconst.inc
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(XINCDIR)/h2const.inc)
+ -$(ERASE) $(call slash2generic,$(XINCDIR)/nand_fbr_offset.inc)
+# -$(ERASE) $(XINCDIR)/h2const.inc
+# -$(ERASE) $(XINCDIR)/nand_fbr_offset.inc
+ @echo $(XINCDIR2)/omapconst.inc
+
+all: $(XINCDIR)/h2const.inc $(XINCDIR)/nand_fbr_offset.inc $(XINCDIR2)/omapconst.inc
+
+$(XINCDIR)/h2const.inc : $(XINCDIR)/h2const.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR)/h2const.h $(XINCDIR)/h2const.inc ARMASM
+
+$(XINCDIR)/nand_fbr_offset.inc : $(XINCDIR)/nand_fbr_offset.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR)/nand_fbr_offset.h $(XINCDIR)/nand_fbr_offset.inc ARMASM
+
+$(XINCDIR2)/omapconst.inc : $(XINCDIR2)/omapconst.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR2)/omapconst.h $(XINCDIR2)/omapconst.inc ARMASM
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h2_restricted_coreldr.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the h2_restricted_coreldr extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h2_restricted_coreldr.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,389 @@
+# Copyright (c) 2006-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:
+# Code execute address set in the linker file
+#
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+## If any of these macros are changed, then execute "abld clean coreldr" from this directory
+## Use this macro if it is required to use the MMU
+## if the MMU is not require either comment it out or set it FALSE
+USE_MMU := TRUE
+
+## This macro enables benchmarking code. Comment out or set FALSE if not required
+#WRITE_TIMINGS := TRUE
+
+## This macro causes the page tables to be output. Comment out or set FALSE if not required
+## If this option is selected then the MMU code will be enabled
+#DUMP_PAGE_TABLES := TRUE
+
+
+## Make sure all 3 macros are either TRUE or FALSE
+# Enforce USE_MMU if page table is to be dumped
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ USE_MMU := TRUE
+else
+ DUMP_PAGE_TABLES := FALSE
+endif
+
+ifneq "$(USE_MMU)" "TRUE"
+ USE_MMU := FALSE
+endif
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+#Set the directories
+GENSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr
+XSRSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr/unistore2
+SPECSRCDIR := $(EXTENSION_ROOT)/../omaph2bsp/h2/nandboot/coreldr
+PLATSRCDIR := $(EXTENSION_ROOT)/../omaph2bsp/shared/bootstrap
+
+VARIANTINC := $(EXTENSION_ROOT)/../omaph2bsp/h2/inc
+ARMDIR := $(INC_PATH)/kernel/arm
+
+GENINC1 := $(INC_PATH) /epoc32/include
+GENDRIVERINC := $(INC_PATH)/drivers
+GENINC2 := $(INC_PATH)/drivers/unistore2
+H2BLDDIR := $(EXTENSION_ROOT)/../omaph2bsp/h2
+GENINCPATH:= $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR) $(VARIANTINC) $(GENINC1) $(GENDRIVERINC) $(GENINC2) $(H2BLDDIR) $(PLATSRCDIR)
+
+# Set the source/include/target directories
+GSRCDIR = ../../../unref/orphan/cedgen/shared/nandboot
+VINCDIR = ../../../unref/orphan/cedgen/h2/inc
+GINCDIR = ../../../unref/orphan/cedgen/shared/inc
+
+# Build directory (EPOCBLD too long)
+#BUILDLOC = $(EPOCROOT)epoc32/build/omap/h2/specific/unistore2/nandboot/coreldr/$(PLATFORM_PATH)/$(CFG_PATH)
+BUILDLOC = $(EPOCBLD)/$(PLATFORM_PATH)/$(CFG_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TARGET = $(TARGETDIR)/h2_un2_coreldr.bin
+TMPTARGET = $(BUILDLOC)/coreldr.tmp
+
+#Rules
+vpath %.s . $(SPECSRCDIR) $(SRCDIR) $(GENSRCDIR)
+vpath %.inc . $(SPECSRCDIR) $(VARIANTINC) $(EPOCINCDIR) $(BLDDIR) $(ARMDIR) $(PLATSRCDIR) $(GENSRCDIR) $(H2BLDDIR)
+vpath %.ginc . $(BUILDLOC)
+
+INCLUDES := nand_macro.inc
+
+VHEADERS := nanddevice.h
+BUILTINCLUDES := nanddevice.inc
+BUILTINCLUDES2 := nand_plat.inc
+BLDINCLUDES := config.inc
+PLATINCLUDES := 16xx_common.inc general.inc
+GENINCLUDES := armcpudefs.inc
+
+ASMSOURCE := coreldrasm.s
+GENCPPSOURCE := coreldr.cpp inflate.cpp
+XSRCPPSOURCE := coreldrxsr.cpp
+ifeq "$(USE_MMU)" "TRUE"
+ GENASMSOURCE := coreldrmmu.s # only link in the MMU stuff if required
+endif
+
+HEADERS := inflate.h coreldr.h
+SPECHEADERS := nand_plat.h
+
+## Address at which binary is loaded and started from
+LINKBASE = 0x20000C00
+
+
+
+#ARMASM_OUT := $(shell armasm 2>&1)
+#ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+ARMASM_OUT := $(wordlist 2, 4, $(shell armasm --vsn 2>&1))
+
+# Select the toolchain: ARM RVCT, then GCC
+
+# Use GCC toolchain if no other is available
+TOOLVER := GCC
+#RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4)))
+RVCTSTR := $(strip $(findstring RVCT,$(ARMASM_OUT)))
+ifeq "$(RVCTSTR)" "RVCT"
+ TOOLVER := RVCT
+ OP := --
+ OB := o
+endif
+TOOLVER := RVCT
+OP := --
+OB := o
+
+# Build up logical TRUE defines
+ifeq "$(USE_MMU)" "TRUE"
+ ASM_TRUE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ ASM_TRUE_MACROS += DUMP_PAGE_TABLES
+endif
+
+# Build up logical FALSE defines
+ifeq "$(USE_MMU)" "FALSE"
+ ASM_FALSE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "FALSE"
+ ASM_FALSE_MACROS += DUMP_PAGE_TABLES
+endif
+
+#Arm RVCT tools
+ifeq "$(TOOLVER)" "RVCT"
+ ASM_TRUE_MACROS += USE_CXSF
+ ASM := armasm
+ LINK := armlink
+ FROMELF := fromelf
+ CPP := armcc
+
+ OBJEXT := o
+ INCEXT := inc
+
+ ARMCCFLAGS := --arm -c -Otime --cpp
+ ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ ARMCCFLAGS := $(ARMCCFLAGS) -DEKA2
+ ARMCCFLAGS := $(ARMCCFLAGS) -DSYMBIAN_SUPPORT_UNISTORE2
+
+
+ ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)epoc32/include/rvct/rvct.h
+
+ ifeq "$(CFG)" "UDEB"
+ ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG
+ endif
+
+ ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),$(OP)predefine "$(macro) SETL {FALSE}")
+ ASM_LINKBASE_MACRO := $(OP)predefine "_LINKBASE_ SETA $(LINKBASE)"
+
+ AFLAGS := -g $(OP)keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -I$(BUILDLOC) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ LFLAGS := $(OP)entry BootEntry $(OP)ro-base $(LINKBASE) $(OP)FIRST BootEntry $(OP)map
+ SYMOPT := $(OP)symdefs
+ ASMTYP := ARMASM
+ LINKFILE :=
+
+ define do_compile
+ $(CPP) $(ARMCCFLAGS) $< -o $@
+ endef
+ define do_h2inc
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ ARMASM
+ endef
+ define do_asm
+ $(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $<
+ endef
+ define do_link
+ $(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS)
+ endef
+ define do_strip
+ $(FROMELF) $(OP)bin $(OP)output $@ $<
+ endef
+endif
+
+
+#GCC build options
+ifeq "$(TOOLVER)" "GCC"
+ ASM := as
+ AFLAGS := -mapcs-32 -R -n -I$(BUILDLOC)
+
+ ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),--defsym $(macro)=1)
+ ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),--defsym $(macro)=0)
+ ASM_LINKBASE_MACRO := --defsym _LINKBASE_=$(LINKBASE)
+
+ LINKFLAGS = -n --section-alignment 4 --file-alignment 2 -no-whole-archive
+ GCCFLAGS=-march=armv4 -nostdinc -pipe -c -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas
+ GCCFLAGS := $(GCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ GCCDEFS = -D__SYMBIAN32__ -D__GCC32__ -D__EPOC32__ -D__MARM__ -D__MARM_ARM4__ -DEKA2 -DSYMBIAN_SUPPORT_UNISTORE2
+ ifeq "$(CFG)" "UDEB"
+ GCC = gcc -x c++ -g -O2 $(GCCFLAGS) -D_DEBUG -D_UNICODE $(GCCDEFS)
+ else
+ GCC = gcc -x c++ -s -fomit-frame-pointer -O2 $(GCCFLAGS) -DNDEBUG -D_UNICODE $(GCCDEFS)
+ endif
+
+ LINKFILE = $(SPECSRCDIR)/coreldr.lnk
+ OBJEXT := o
+ INCEXT := ginc
+
+ PROCESS_INCLUDES := 1
+ define do_compile
+ $(GCC) -o $@ $<
+ endef
+ define do_h2inc
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ AS
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $@ $(join $(basename $@),.ginc)
+ endef
+ define do_includes
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@
+ endef
+ define do_asm
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $(join $(basename $@),.s)
+ $(AS) $(AFLAGS) $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -o $@ $(join $(basename $@),.s)
+ endef
+ define do_strip
+ strip -O binary -o "$(TARGET)" "$(TMPTARGET)"
+
+ $(ERASE) $(call slash2generic,"$(TMPTARGET)")
+ # $(ERASE) "$(TMPTARGET)"
+ echo Built $(TARGET)
+ endef
+ define do_link
+ ld -o "$(TMPTARGET)" --start $(FULLOBJECTS) --script=$(LINKFILE)
+ endef
+endif
+
+
+#CPP source processing
+FULLCPPSOURCE := $(addprefix $(GENSRCDIR)/,$(GENCPPSOURCE))
+
+#Header processing
+FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS))
+FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+
+FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS))
+FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES))
+$(FULLBUILTINCLUDES) : $(FULLVHEADERS)
+ $(do_h2inc)
+
+FULLVHEADERS2 := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+FULLBUILTINCLUDES2 := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES2))
+$(FULLBUILTINCLUDES2) : $(FULLVHEADERS2)
+ $(do_h2inc)
+
+#object names
+GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS))
+
+XSRCPPOBJECTS := $(foreach f,$(XSRCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS))
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLXSRCPPOBJECTS)
+
+ifdef PROCESS_INCLUDES
+
+GCCSRC := $(addprefix $(BUILDLOC)/,$(SRC))
+
+#Creation of headers
+FULLINCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT))
+FULLINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLINCLUDES))
+
+$(FULLINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLBLDINCLUDES := $(foreach f,$(BLDINCLUDES),$(basename $(f)).$(INCEXT))
+FULLBLDINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLBLDINCLUDES))
+$(FULLBLDINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLPLATINCLUDES := $(foreach f,$(PLATINCLUDES),$(basename $(f)).$(INCEXT))
+FULLPLATINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLPLATINCLUDES))
+$(FULLPLATINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLGENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))
+FULLGENINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLGENINCLUDES))
+$(FULLGENINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+else
+FULLINCLUDES:= $(addprefix $(SPECSRCDIR)/,$(INCLUDES))
+FULLPLATINCLUDES:= $(addprefix $(PLATSRCDIR)/,$(PLATINCLUDES))
+FULLGENINCLUDES:= $(addprefix $(GENSRCDIR)/,$(GENINCLUDES))
+FULLBLDINCLUDES:= $(addprefix $(H2BLDDIR)/,$(BLDINCLUDES))
+
+#Arm RVCT specifics here
+
+endif
+
+
+#Link
+$(TMPTARGET) : $(FULLOBJECTS)
+ $(do_link)
+
+#strip
+$(TARGET) : $(TMPTARGET)
+ $(do_strip)
+
+#CPP objects
+$(FULLGENCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLXSRCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(XSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+
+#Asm objects
+$(FULLGENASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+$(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+# make the work directories
+$(TARGETDIR) :
+ $(call ifnotexistd,"$(TARGETDIR)")
+
+$(BUILDLOC) :
+ $(call ifnotexistd,"$(BUILDLOC)")
+
+
+
+MAKMAKE :
+ echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET)
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*")
+# -$(ERASE) "$(TARGET)"
+# -$(ERASE) "$(BUILDLOC)/*.*"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_genbootinc.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,22 @@
+# Copyright (c) 2005-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:
+# Meta information for the h4_genbootinc extension template
+#
+
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_genbootinc.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,58 @@
+# Copyright (c) 2006-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:
+# Generate assembler inc files from header files
+#
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+XINCDIR := $(INC_PATH)/omap_hrp/h4
+XINCDIR2 := $(INC_PATH)/omap_hrp/assp/omap24xx
+
+MAKMAKE : all
+
+FREEZE :
+
+LIB : all
+
+CLEANLIB :
+
+RESOURCE :
+
+FINAL :
+
+BLD SAVESPACE : all
+
+RELEASABLES :
+ @echo $(XINCDIR)/nand_fbr_offset.inc
+ @echo $(XINCDIR2)/omap24xxconst.inc
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(XINCDIR)/nand_fbr_offset.inc)
+# -$(ERASE) $(XINCDIR)/nand_fbr_offset.inc
+ @echo $(XINCDIR2)/omap24xxconst.inc
+
+all: $(XINCDIR2)/omap24xxconst.inc $(XINCDIR)/nand_fbr_offset.inc
+
+$(XINCDIR)/nand_fbr_offset.inc : $(XINCDIR)/nand_fbr_offset.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR)/nand_fbr_offset.h $(XINCDIR)/nand_fbr_offset.inc ARMASM
+
+$(XINCDIR2)/omap24xxconst.inc : $(XINCDIR2)/omap24xxconst.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR2)/omap24xxconst.h $(XINCDIR2)/omap24xxconst.inc ARMASM
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_restricted_coreldr.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the h4_restricted_coreldr extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_restricted_coreldr.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,388 @@
+# Copyright (c) 2006-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:
+# # NB! LINKBASE : Code execute address also set coreldr.lnk file
+# # MUST REFLECT CORELOADER ADDRESS RELOCATION IN BOTH FILES!!
+#
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+## If any of these macros are changed, then execute "abld clean coreldr" from this directory
+## Use this macro if it is required to use the MMU
+## if the MMU is not require either comment it out or set it FALSE
+USE_MMU := TRUE
+
+## This macro enables benchmarking code. Comment out or set FALSE if not required
+#WRITE_TIMINGS := TRUE
+
+## This macro causes the page tables to be output. Comment out or set FALSE if not required
+## If this option is selected then the MMU code will be enabled
+#DUMP_PAGE_TABLES := TRUE
+
+
+## Make sure all 3 macros are either TRUE or FALSE
+# Enforce USE_MMU if page table is to be dumped
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ USE_MMU := TRUE
+else
+ DUMP_PAGE_TABLES := FALSE
+endif
+
+ifneq "$(USE_MMU)" "TRUE"
+ USE_MMU := FALSE
+endif
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+#Set the directories
+GENSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr
+XSRSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr/unistore2
+SPECSRCDIR := $(EXTENSION_ROOT)/../omaph4bsp/h4/nandboot/coreldr_smallblk
+
+VARIANTINC := $(INC_PATH)/omap_hrp/h4
+VARIANTINC2 := $(EXTENSION_ROOT)/../omaph4bsp/shared/bootstrap
+VARIANTINC3 := $(EXTENSION_ROOT)/../omaph4bsp/h4/nand
+
+GENINC1 := $(INC_PATH)
+GENINC3 := $(EPOCROOT)epoc32/include
+GENDRIVERINC := $(INC_PATH)/drivers
+GENINC2 := $(INC_PATH)/drivers/unistore2
+GENINCPATH:= $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR) $(VARIANTINC) $(VARIANTINC2) $(VARIANTINC3) $(GENINC1) $(GENDRIVERINC) $(GENINC2) $(GENINC3)
+
+# Set the source/include/target directories
+GSRCDIR = ../../../unref/orphan/cedgen/shared/nandboot
+VINCDIR = ../../../unref/orphan/cedgen/h4/inc
+GINCDIR = ../../../unref/orphan/cedgen/shared/inc
+EPOCINCDIR = $(INC_PATH)/omap_hrp/h4
+
+# Build directory (EPOCBLD too long)
+#BUILDLOC = $(EPOCROOT)epoc32/build/omap_hrp/h4_restricted/unistore2/nandboot/coreldr/$(PLATFORM_PATH)
+#BUILDLOC = $(EPOCBLD)/$(PLATFORM_PATH)/$(CFG_PATH) # Error as $(EPOCBLD) include platform
+BUILDLOC = $(EPOCBLD)/$(CFG_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TARGET = $(TARGETDIR)/h4hrp_un2_sb_coreldr.bin
+TMPTARGET = $(BUILDLOC)/h4hrp_un2_sb_coreldr.elf
+
+#Rules
+vpath %.s . $(SPECSRCDIR) $(SRCDIR)
+vpath %.inc . $(SPECSRCDIR) $(EPOCINCDIR)
+vpath %.ginc . $(BUILDLOC)
+
+INCLUDES :=
+
+VHEADERS := nanddevice.h
+BUILTINCLUDES := nanddevice.inc config.inc
+BUILTINCLUDES2 := nand_plat.inc
+
+ASMSOURCE := coreldrasm_smallblk.s
+GENCPPSOURCE := coreldr.cpp inflate.cpp
+XSRCPPSOURCE := coreldrxsr.cpp
+
+ifeq "$(USE_MMU)" "TRUE"
+ GENASMSOURCE := coreldrmmu.s # only link in the MMU stuff if required
+endif
+
+HEADERS := inflate.h coreldr.h
+SPECHEADERS := nand_plat.h
+
+## Address at which coreloader binary is loaded and then started from
+#
+# On H4 this number is base of ram + 48MB (permitting 48MB core images)
+# this number is pretty arbitrary and may be raised higher into ram
+# if necessary as long as the corresponding change is also made to
+# KCoreLoaderAddress in variant_bootstrap.inc
+#
+LINKBASE = 0x83000000
+
+
+
+#ARMASM_OUT := $(shell armasm 2>&1)
+#ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+ARMASM_OUT := $(wordlist 2, 4, $(shell armasm --vsn 2>&1))
+
+# Select the toolchain: ARM RVCT, then GCC
+
+# Use GCC toolchain if no other is available
+TOOLVER := GCC
+#RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4)))
+RVCTSTR := $(strip $(findstring RVCT,$(ARMASM_OUT)))
+ifeq "$(RVCTSTR)" "RVCT"
+ TOOLVER := RVCT
+ OP := --
+ OB := o
+endif
+
+# Build up logical TRUE defines
+ifeq "$(USE_MMU)" "TRUE"
+ ASM_TRUE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ ASM_TRUE_MACROS += DUMP_PAGE_TABLES
+endif
+
+# Build up logical FALSE defines
+ifeq "$(USE_MMU)" "FALSE"
+ ASM_FALSE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "FALSE"
+ ASM_FALSE_MACROS += DUMP_PAGE_TABLES
+endif
+
+#Arm RVCT tools
+ifeq "$(TOOLVER)" "RVCT"
+ ASM_TRUE_MACROS += USE_CXSF
+ ASM := armasm
+ LINK := armlink
+ FROMELF := fromelf
+ CPP := armcc
+
+ OBJEXT := o
+ INCEXT := inc
+
+ ARMCCFLAGS := --arm -c -Otime --cpp
+ ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ ARMCCFLAGS := $(ARMCCFLAGS) -DEKA2
+ ARMCCFLAGS := $(ARMCCFLAGS) -DSYMBIAN_SUPPORT_UNISTORE2
+
+ ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)epoc32/include/rvct/rvct.h
+
+ ifeq "$(CFG)" "UDEB"
+ ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG
+ endif
+
+ ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),$(OP)predefine "$(macro) SETL {FALSE}")
+ ASM_LINKBASE_MACRO := $(OP)predefine "_LINKBASE_ SETA $(LINKBASE)"
+
+ AFLAGS := -g $(OP)keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -I$(BUILDLOC) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ LFLAGS := $(OP)entry BootEntry $(OP)ro-base $(LINKBASE) $(OP)FIRST BootEntry $(OP)map
+ SYMOPT := $(OP)symdefs
+ ASMTYP := ARMASM
+ LINKFILE :=
+
+ define do_compile
+ $(CPP) $(ARMCCFLAGS) $< -o $@
+ endef
+ define do_h2inc
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ ARMASM
+ endef
+ define do_asm
+ $(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $<
+ endef
+ define do_link
+ $(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS)
+ endef
+ define do_strip
+ $(FROMELF) $(OP)bin $(OP)output $@ $<
+ endef
+endif
+
+
+#GCC build options
+ifeq "$(TOOLVER)" "GCC"
+ ASM := as
+ AFLAGS := -mapcs-32 -R -n -I$(BUILDLOC)
+
+ ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),--defsym $(macro)=1)
+ ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),--defsym $(macro)=0)
+ ASM_LINKBASE_MACRO := --defsym _LINKBASE_=$(LINKBASE)
+
+ LINKFLAGS = -n --section-alignment 4 --file-alignment 2 -no-whole-archive
+ GCCFLAGS=-march=armv4 -nostdinc -pipe -c -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas
+ GCCFLAGS := $(GCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ GCCDEFS = -D__SYMBIAN32__ -D__GCC32__ -D__EPOC32__ -D__MARM__ -D__MARM_ARM4__ -DEKA2 -DSYMBIAN_SUPPORT_UNISTORE2
+ ifeq "$(CFG)" "UDEB"
+ GCC = gcc -x c++ -g -O2 $(GCCFLAGS) -D_DEBUG -D_UNICODE $(GCCDEFS)
+ else
+ GCC = gcc -x c++ -s -fomit-frame-pointer -O2 $(GCCFLAGS) -DNDEBUG -D_UNICODE $(GCCDEFS)
+ endif
+
+ LINKFILE = $(SPECSRCDIR)/coreldr.lnk
+ OBJEXT := o
+ INCEXT := ginc
+
+ PROCESS_INCLUDES := 1
+ define do_compile
+ $(GCC) -o $@ $<
+ endef
+ define do_h2inc
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ AS
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $@ $(join $(basename $@),.ginc)
+ endef
+ define do_includes
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@
+ endef
+ define do_asm
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $(join $(basename $@),.s)
+ $(AS) $(AFLAGS) $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -o $@ $(join $(basename $@),.s)
+ endef
+ define do_strip
+ strip -O binary -o "$(TARGET)" "$(TMPTARGET)"
+ echo Built $(TARGET)
+ endef
+ define do_link
+ ld -o "$(TMPTARGET)" --start $(FULLOBJECTS) --script=$(LINKFILE)
+ endef
+endif
+
+
+#CPP source processing
+FULLCPPSOURCE := $(addprefix $(GENSRCDIR)/,$(GENCPPSOURCE))
+
+#Header processing
+FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS))
+FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+
+FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS))
+FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES))
+$(FULLBUILTINCLUDES) : $(FULLVHEADERS)
+ $(do_h2inc)
+
+FULLVHEADERS2 := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+FULLBUILTINCLUDES2 := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES2))
+$(FULLBUILTINCLUDES2) : $(FULLVHEADERS2)
+ $(do_h2inc)
+
+#object names
+GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS))
+
+XSRCPPOBJECTS := $(foreach f,$(XSRCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS))
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLXSRCPPOBJECTS)
+
+ifdef PROCESS_INCLUDES
+
+GCCSRC := $(addprefix $(BUILDLOC)/,$(SRC))
+
+#Creation of headers
+FULLINCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT))
+FULLINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLINCLUDES))
+
+$(FULLINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLBLDINCLUDES := $(foreach f,$(BLDINCLUDES),$(basename $(f)).$(INCEXT))
+FULLBLDINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLBLDINCLUDES))
+$(FULLBLDINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLPLATINCLUDES := $(foreach f,$(PLATINCLUDES),$(basename $(f)).$(INCEXT))
+FULLPLATINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLPLATINCLUDES))
+$(FULLPLATINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLGENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))
+FULLGENINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLGENINCLUDES))
+$(FULLGENINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+else
+FULLINCLUDES:= $(addprefix $(SPECSRCDIR)/,$(INCLUDES))
+FULLPLATINCLUDES:= $(addprefix $(PLATSRCDIR)/,$(PLATINCLUDES))
+FULLGENINCLUDES:= $(addprefix $(GENSRCDIR)/,$(GENINCLUDES))
+FULLBLDINCLUDES:= $(addprefix $(H2BLDDIR)/,$(BLDINCLUDES))
+
+#Arm RVCT specifics here
+
+endif
+
+
+#Link
+$(TMPTARGET) : $(FULLOBJECTS)
+ $(do_link)
+
+#strip
+$(TARGET) : $(TMPTARGET)
+ $(do_strip)
+
+#CPP objects
+$(FULLGENCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLXSRCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(XSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+#Asm objects
+$(FULLGENASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+$(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+# make the work directories
+$(TARGETDIR) :
+ $(call ifnotexistd,"$(TARGETDIR)")
+
+$(BUILDLOC) :
+ $(call ifnotexistd,"$(BUILDLOC)")
+
+
+
+MAKMAKE :
+ echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET)
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*")
+# -$(ERASE) "$(TARGET)"
+# -$(ERASE) "$(BUILDLOC)/*.*"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_restricted_on_coreldr.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the h4_restricted_coreldr extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_restricted_on_coreldr.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,375 @@
+# Copyright (c) 2007-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:
+# # NB! LINKBASE : Code execute address also set coreldr.lnk file
+# # MUST REFLECT CORELOADER ADDRESS RELOCATION IN BOTH FILES!!
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+## If any of these macros are changed, then execute "abld clean coreldr" from this directory
+## Use this macro if it is required to use the MMU
+## if the MMU is not require either comment it out or set it FALSE
+USE_MMU := TRUE
+
+# This macro enables benchmarking code. Comment out or set FALSE if not required
+#WRITE_TIMINGS := TRUE
+
+## This macro causes the page tables to be output. Comment out or set FALSE if not required
+## If this option is selected then the MMU code will be enabled
+#DUMP_PAGE_TABLES := TRUE
+
+
+## Make sure all 3 macros are either TRUE or FALSE
+# Enforce USE_MMU if page table is to be dumped
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ USE_MMU := TRUE
+else
+ DUMP_PAGE_TABLES := FALSE
+endif
+
+ifneq "$(USE_MMU)" "TRUE"
+ USE_MMU := FALSE
+endif
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+#Set the directories
+GENSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr
+BLSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/util/ONBL2
+XSRSRCDIR1 := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/OAM/OSLess
+XSRSRCDIR2 := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/LLD/DNandO
+SPECSRCDIR := $(EXTENSION_ROOT)/../omaph4bsp/h4/nandboot/coreldr_onenand
+SPECXSRSRCDIR := $(EXTENSION_ROOT)/drivers/h4ons
+
+VARIANTINC := $(INC_PATH)/omap_hrp/h4
+VARIANTINC2 := $(EXTENSION_ROOT)/../omaph4bsp/shared/bootstrap
+VARIANTINC3 := $(EXTENSION_ROOT)/../omaph4bsp/h4/nand $(EXTENSION_ROOT)/../omaph4bsp/assp/shared/assp $(EXTENSION_ROOT)/../omaph4bsp/assp/omap24xx/inc $(EXTENSION_ROOT)/../omaph4bsp/assp/omap24xx/assp $(EXTENSION_ROOT)/../omaph4bsp/assp/shared/interrupt $(EXTENSION_ROOT)/../omaph4bsp/assp/omap24xx/interrupt $(EXTENSION_ROOT)/../omaph4bsp/shared/gpio $(EXTENSION_ROOT)/../omaph4bsp/shared/mcspi $(EXTENSION_ROOT)/../omaph4bsp/assp/omap24xx/gpio $(EXTENSION_ROOT)/../omaph4bsp/assp/shared $(EXTENSION_ROOT)/../omaph4bsp/shared/cirq $(EXTENSION_ROOT)/../omaph4bsp/shared/dma $(EXTENSION_ROOT)/../omaph4bsp/assp/shared/dma
+
+GENINC1 := $(INC_PATH)
+GENINC3 := $(EPOCROOT)epoc32/include
+GENDRIVERINC := $(INC_PATH)/drivers
+GENINC2 := $(INC_PATH)/drivers/unistore2 $(INC_PATH)/memmodel/epoc $(INC_PATH)/kernel $(INC_PATH)/kernel/arm $(INC_PATH)/nkern $(INC_PATH)/nkern/arm
+GENXSRINC := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/inc
+GENINCPATH:= $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR1) $(XSRSRCDIR2) $(SPECXSRSRCDIR) $(VARIANTINC) $(VARIANTINC2) $(VARIANTINC3) $(GENINC1) $(GENDRIVERINC) $(GENINC2) $(GENINC3) $(GENINC4) $(GENXSRINC) $(GENINC3)
+
+# Set the source/include/target directories
+GSRCDIR = ../../../unref/orphan/cedgen/shared/nandboot
+VINCDIR = ../../../unref/orphan/cedgen/h4/inc
+GINCDIR = ../../../unref/orphan/cedgen/shared/inc
+EPOCINCDIR = $(INC_PATH)/omap_hrp/h4
+
+# Build directory (EPOCBLD too long)
+BUILDLOC = $(EPOCROOT)epoc32/build/omap_hrp/h4_restricted/unistore2/nandboot/coreldr/$(PLATFORM_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TARGET = $(TARGETDIR)$/h4hrp_un2_on_coreldr.bin
+TMPTARGET = $(BUILDLOC)$/h4hrp_un2_on_coreldr.elf
+
+#Rules
+vpath %.s . $(SPECSRCDIR) $(SRCDIR)
+vpath %.inc . $(SPECSRCDIR) $(EPOCINCDIR)
+vpath %.ginc . $(BUILDLOC)
+
+VHEADERS := nanddevice.h
+BUILTINCLUDES := nanddevice.inc config.inc
+BUILTINCLUDES2 := nand_plat.inc
+
+ASMSOURCE := coreldrasm_onenand.s
+GENCPPSOURCE := inflate.cpp
+BLCPPSOURCE := ONBL2.CPP
+XSRCPPSOURCE1 := OSLessOAM.cpp
+XSRCPPSOURCE2 := ONLD.cpp
+SPECXSRCPPSOURCE := pam.cpp
+
+XSRLIB := $(EPOCROOT)epoc32/release/armv5/$(CFG)/nbl2.lib
+
+ifeq "$(USE_MMU)" "TRUE"
+ GENASMSOURCE := coreldrmmu.s # only link in the MMU stuff if required
+endif
+
+# HEADERS := inflate.h coreldr.h
+HEADERS :=
+SPECHEADERS := nand_plat.h
+
+## Address at which coreloader binary is loaded and then started from
+#
+# On H4 this number is base of ram + 48MB (permitting 48MB core images)
+# this number is pretty arbitrary and may be raised higher into ram
+# if necessary as long as the corresponding change is also made to
+# KCoreLoaderAddress in variant_bootstrap.inc
+#
+LINKBASE = 0x83000000
+
+
+
+#ARMASM_OUT := $(shell armasm 2>&1)
+#ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+ARMASM_OUT := $(wordlist 2, 4, $(shell armasm --vsn 2>&1))
+
+# Select the toolchain: ARM RVCT, then GCC
+
+# Use GCC toolchain if no other is available
+TOOLVER := GCC
+#RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4)))
+RVCTSTR := $(strip $(findstring RVCT2.2,$(ARMASM_OUT)))
+RVCTSTR_4 := $(strip $(findstring RVCT4.0,$(ARMASM_OUT)))
+
+ifeq "$(RVCTSTR)" "RVCT2.2"
+
+ TOOLVER := RVCT2.2
+ OP := --
+ OB := o
+ endif
+
+ ifeq "$(RVCTSTR_4)" "RVCT4.0"
+ TOOLVER := RVCT4.0
+ OP := --
+ OB := o
+endif
+
+# Build up logical TRUE defines
+ifeq "$(USE_MMU)" "TRUE"
+ ASM_TRUE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ ASM_TRUE_MACROS += DUMP_PAGE_TABLES
+endif
+
+# Build up logical FALSE defines
+ifeq "$(USE_MMU)" "FALSE"
+ ASM_FALSE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "FALSE"
+ ASM_FALSE_MACROS += DUMP_PAGE_TABLES
+endif
+
+#Arm RVCT tools
+#echo hello2 "$(strip $(findstring RVCT, $(TOOLVER)))"
+TOOLVER1 := $(strip $(findstring RVCT, $(TOOLVER)))
+ifeq "$(TOOLVER1)" "RVCT"
+#echo hello2
+ASM_TRUE_MACROS += USE_CXSF
+ASM := armasm
+LINK := armlink
+FROMELF := fromelf
+CPP := armcc
+
+OBJEXT := o
+INCEXT := inc
+
+ARMCCFLAGS := --arm -c -Otime --cpp
+ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ARMCCFLAGS := $(ARMCCFLAGS) -DEKA2
+ARMCCFLAGS := $(ARMCCFLAGS) -DXSR_NBL2 -DREAL_TARGET -DSYMBIAN_SUPPORT_UNISTORE2
+
+ ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)epoc32/include/rvct/rvct.h
+
+ ifeq "$(CFG)" "UDEB"
+ ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG
+ endif
+
+ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),$(OP)predefine "$(macro) SETL {FALSE}")
+ASM_LINKBASE_MACRO := $(OP)predefine "_LINKBASE_ SETA $(LINKBASE)"
+
+AFLAGS := -g $(OP)keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -I$(BUILDLOC) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ifeq "$(TOOLVER)" "RVCT4.0"
+LFLAGS := $(OP)entry BootEntry $(OP)ro-base $(LINKBASE) $(OP)FIRST BootEntry $(OP)map $(OP)no_strict_wchar_size $(OP)no_strict_enum_size
+endif
+ifeq "$(TOOLVER)" "RVCT2.2"
+LFLAGS := $(OP)entry BootEntry $(OP)ro-base $(LINKBASE) $(OP)FIRST BootEntry $(OP)map
+endif
+
+SYMOPT := $(OP)symdefs
+ASMTYP := ARMASM
+LINKFILE :=
+
+define do_compile
+$(CPP) $(ARMCCFLAGS) $< -o $@
+endef
+define do_h2inc
+perl -S $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ ARMASM
+endef
+define do_asm
+$(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $<
+endef
+define do_link
+$(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS)
+endef
+define do_strip
+$(FROMELF) $(OP)bin $(OP)output $@ $<
+endef
+endif
+
+#Header processing
+FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS))
+FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+
+FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS))
+FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES))
+$(FULLBUILTINCLUDES) : $(FULLVHEADERS)
+ $(do_h2inc)
+
+FULLVHEADERS2 := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+FULLBUILTINCLUDES2 := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES2))
+$(FULLBUILTINCLUDES2) : $(FULLVHEADERS2)
+ $(do_h2inc)
+
+#object names
+GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS))
+
+BLCPPOBJECTS := $(foreach f,$(BLCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLBLCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(BLCPPOBJECTS))
+
+XSRCPPOBJECTS1 := $(foreach f,$(XSRCPPSOURCE1),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS1 := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS1))
+
+XSRCPPOBJECTS2 := $(foreach f,$(XSRCPPSOURCE2),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS2 := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS2))
+
+SPECXSRCPPOBJECTS := $(foreach f,$(SPECXSRCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLSPECXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(SPECXSRCPPOBJECTS))
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLBLCPPOBJECTS) $(FULLXSRCPPOBJECTS1) $(FULLXSRCPPOBJECTS2) $(FULLSPECXSRCPPOBJECTS) $(XSRLIB)
+
+ifdef PROCESS_INCLUDES
+
+GCCSRC := $(addprefix $(BUILDLOC)/,$(SRC))
+
+#Creation of headers
+FULLINCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT))
+FULLINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLINCLUDES))
+
+$(FULLINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLBLDINCLUDES := $(foreach f,$(BLDINCLUDES),$(basename $(f)).$(INCEXT))
+FULLBLDINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLBLDINCLUDES))
+$(FULLBLDINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLPLATINCLUDES := $(foreach f,$(PLATINCLUDES),$(basename $(f)).$(INCEXT))
+FULLPLATINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLPLATINCLUDES))
+$(FULLPLATINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLGENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))
+FULLGENINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLGENINCLUDES))
+$(FULLGENINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+else
+FULLINCLUDES:= $(addprefix $(SPECSRCDIR)/,$(INCLUDES))
+FULLPLATINCLUDES:= $(addprefix $(PLATSRCDIR)/,$(PLATINCLUDES))
+FULLGENINCLUDES:= $(addprefix $(GENSRCDIR)/,$(GENINCLUDES))
+FULLBLDINCLUDES:= $(addprefix $(H2BLDDIR)/,$(BLDINCLUDES))
+
+#Arm RVCT specifics here
+
+endif
+
+
+#Link
+$(TMPTARGET) : $(FULLOBJECTS)
+ $(do_link)
+
+#strip
+$(TARGET) : $(TMPTARGET)
+ $(do_strip)
+
+#CPP objects
+$(FULLGENCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLBLCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(BLSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLXSRCPPOBJECTS1) : $(BUILDLOC)/%.$(OBJEXT) : $(XSRSRCDIR1)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLXSRCPPOBJECTS2) : $(BUILDLOC)/%.$(OBJEXT) : $(XSRSRCDIR2)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLSPECXSRCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECXSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+
+#Asm objects
+$(FULLGENASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+$(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+# make the work directories
+$(TARGETDIR) :
+ $(call ifnotexistd,"$(TARGETDIR)")
+
+$(BUILDLOC) :
+ $(call ifnotexistd,"$(BUILDLOC)")
+
+
+MAKMAKE :
+ echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET)
+ @echo BLD
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_restricted_on_miniboot.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the h4_restricted_coreldr extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/h4_restricted_on_miniboot.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,149 @@
+# Copyright (c) 2007-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+## This macro enables benchmarking code. Comment out or set FALSE if not required
+# WRITE_TIMINGS := TRUE
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+#Set the directories
+GENSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/util/ONBL1
+SPECSRCDIR := $(EXTENSION_ROOT)/nandboot/miniboot_onenand
+
+# Build directory (EPOCBLD too long)
+BUILDLOC = $(EPOCROOT)epoc32/build/omap_hrp/h4_restricted/unistore2/nandboot/miniboot/$(PLATFORM_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TARGET = $(TARGETDIR)$/h4hrp_un2_on_miniboot.bin
+TMPTARGET = $(BUILDLOC)$/h4hrp_un2_on_miniboot.elf
+
+#Rules
+vpath %.s . $(GENSRCDIR) $(SPECSRCDIR)
+
+GENASMSOURCE := onbl1.s
+ASMSOURCE := miniboot_onenand.s
+
+ARMASM_OUT := $(shell armasm 2>&1)
+ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+
+# Select the toolchain: ARM RVCT, then GCC
+#TOOLVER := RVCT
+OP := --
+OB := o
+
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS += WRITE_TIMINGS
+endif
+
+#Arm RVCT tools
+ASM_TRUE_MACROS += USE_CXSF
+ASM := armasm
+LINK := armlink
+FROMELF := fromelf
+
+OBJEXT := o
+
+ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),$(OP)predefine "$(macro) SETL {FALSE}")
+
+AFLAGS := -g $(OP)keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) -I$(BUILDLOC)
+LFLAGS := $(OP)entry BootEntry $(OP)FIRST BootEntry $(OP)map
+SYMOPT := $(OP)symdefs
+ASMTYP := ARMASM
+
+define do_asm
+ $(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $<
+endef
+
+define do_link
+ $(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS)
+endef
+
+define do_strip
+ $(FROMELF) $(OP)bin $(OP)output $@ $<
+endef
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS)
+
+
+#Link
+$(TMPTARGET) : $(FULLOBJECTS)
+ $(do_link)
+
+#strip
+$(TARGET) : $(TMPTARGET)
+ $(do_strip)
+
+#Asm objects
+$(FULLGENASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+$(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+# make the work directories
+$(TARGETDIR) :
+ $(call ifnotexistd,"$(TARGETDIR)")
+
+$(BUILDLOC) :
+ $(call ifnotexistd,"$(BUILDLOC)")
+
+
+
+MAKMAKE :
+ echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET)
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/lab_restricted_miniboot.flm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,84 @@
+# lab_restricted_miniboot.flm
+#
+# Copyright (c) 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:
+#
+
+ifeq ($(lab_restricted_miniboot_flm),)
+lab_restricted_miniboot_flm := 1
+
+# Set the directories
+SRCDIR := $(EXTENSION_ROOT)/../../lab_restricted/unistore2/nandboot/miniboot_largeblk
+
+# Build directory
+BUILDLOC := $(EPOCBLD)/lab_restricted_miniboot_flm/$(PLATFORM_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)
+BINTARGET := $(TARGETDIR)/lab_miniboot.bin
+TMPTARGET := $(BUILDLOC)/lab_miniboot.elf
+TMPTARGET2 := $(BUILDLOC)/lab_miniboot.bin
+
+# Set the Load Address for the miniboot
+# This is currently set to the beginning of SRAM
+LINKBASE := 0x40200000
+
+# Rules
+vpath %.s . $(SRCDIR)
+
+ASMSOURCE := miniboot_largeblk.s
+
+
+# Arm RVCT tools
+ASM_TRUE_MACROS := USE_CXSF
+
+OBJEXT := o
+
+ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),--predefine "$(macro) SETL {TRUE}")
+ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),--predefine "$(macro) SETL {FALSE}")
+
+AFLAGS := -g --keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) -I$(BUILDLOC)
+LFLAGS := --ro-base $(LINKBASE) --entry BootEntry --FIRST BootEntry --map
+SYMOPT := --symdefs
+ASMTYP := ARMASM
+
+# Include base commonly used functions
+include $(EPOCROOT)/epoc32/tools/makefile_templates/base/base_rvct_common.mk
+
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS)
+
+# Link
+$(eval $(call base__link,$(TMPTARGET),$(FULLOBJECTS)))
+# Strip
+$(eval $(call base__strip,$(TMPTARGET2),$(TMPTARGET)))
+# Omapsig
+$(eval $(call base__omapsig,$(BINTARGET),$(TMPTARGET2)))
+
+# Asm objects
+$(eval $(call base__asm,$(FULLASMOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(SRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)))
+
+#
+TARGET :: $(BINTARGET) $(TARGETDIR) $(BUILDLOC)
+
+# --what to show releasables
+$(eval $(call whatmacro,$(BINTARGET),USERFLM))
+# Create directory
+CREATABLEPATHS := $(TARGETDIR) $(BUILDLOC)
+$(call makepath,$(CREATABLEPATHS))
+# Clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(BUILDLOC)))
+
+endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/lab_restricted_miniboot.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,22 @@
+# Copyright (c) 2005-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:
+#
+# Meta information for the lab_restricted_miniboot extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/lab_restricted_miniboot.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,141 @@
+# lab_restricted_miniboot.mk
+#
+# Copyright (c) 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:
+#
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+#Set the directories
+SRCDIR := $(EXTENSION_ROOT)/../../lab_restricted/unistore2/nandboot/miniboot_largeblk
+
+# Build directory (EPOCBLD too long)
+BUILDLOC = $(EPOCROOT)epoc32/build/lab_restricted/unistore2/nandboot/miniboot/$(PLATFORM_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TARGET = $(TARGETDIR)$/lab_miniboot.bin
+TMPTARGET = $(BUILDLOC)$/lab_miniboot.elf
+TMPTARGET2 = $(BUILDLOC)$/lab_miniboot.bin
+
+# Set the Load Address for the miniboot
+# This is currently set to the beginning of SRAM
+LINKBASE=0x40200000
+
+#Rules
+vpath %.s . $(SRCDIR)
+
+ASMSOURCE := miniboot_largeblk.s
+
+ARMASM_OUT := $(shell armasm 2>&1)
+ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+
+# Select the toolchain: ARM RVCT, then GCC
+#TOOLVER := RVCT
+OP := --
+OB := o
+
+#Arm RVCT tools
+ASM_TRUE_MACROS += USE_CXSF
+ASM := armasm
+LINK := armlink
+FROMELF := fromelf
+
+OBJEXT := o
+
+ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),$(OP)predefine "$(macro) SETL {FALSE}")
+
+AFLAGS := -g $(OP)keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) -I$(BUILDLOC)
+LFLAGS := $(OP)ro-base $(LINKBASE) $(OP)entry BootEntry $(OP)FIRST BootEntry $(OP)map
+SYMOPT := $(OP)symdefs
+ASMTYP := ARMASM
+
+define do_asm
+ $(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $<
+endef
+
+define do_link
+ $(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS)
+endef
+
+define do_strip
+ $(FROMELF) $(OP)bin $(OP)output $@ $<
+endef
+
+define do_omapsig
+ perl -S $(EPOCROOT)epoc32/tools/omapsig.pl $(LINKBASE) $< $@
+endef
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS)
+
+
+#Link
+$(TMPTARGET) : $(FULLOBJECTS)
+ $(do_link)
+
+#strip
+$(TMPTARGET2) : $(TMPTARGET)
+ $(do_strip)
+
+#omapsig
+$(TARGET) : $(TMPTARGET2)
+ $(do_omapsig)
+
+#Asm objects
+
+$(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+# make the work directories
+$(TARGETDIR) :
+ $(call ifnotexistd,"$(TARGETDIR)")
+
+$(BUILDLOC) :
+ $(call ifnotexistd,"$(BUILDLOC)")
+
+
+
+MAKMAKE :
+ echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET)
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/lab_restricted_miniboot.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!-- Extension interfaces : replacements for Template Extension Makefiles -->
+
+ <interface name="base.lab_restricted_miniboot" extends="Symbian.KernelFLM" flm="lab_restricted_miniboot.flm">
+ </interface>
+
+</build>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/nand_fbr_offset.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2005-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:
+# Meta information for the nand_fbr_offset extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/nand_fbr_offset.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,85 @@
+# Copyright (c) 2006-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:
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+# Build directory (EPOCBLD too long)
+BUILDLOC = $(EXTENSION_ROOT)/drivers
+
+## Set the target name
+SRC := $(SRCDIR)/nand_fbr_offset.h
+TARGET = $(TARGETDIR)/nand_fbr_offset.inc
+
+
+
+#Include processing
+FULLINCLUDES := $(addprefix $(SRCDIR)/,$(INCLUDES))
+#Object processing
+FULLSRC := $(addprefix $(SRCDIR)/,$(SRC))
+
+ifdef PROCESS_INCLUDES
+GCCSRC := $(addprefix $(BUILDLOC)/,$(SRC))
+FULLINCLUDES := $(foreach f,$(FULLINCLUDES),$(basename $(f)).$(INCEXT))
+#Creation of headers
+$(FULLINCLUDES) : $(SRCDIR)/%.$(INCEXT) : %.inc
+ $(do_headers)
+else
+#Armasm sytax specifc asm rule goes here
+endif
+
+
+#Rules
+#vpath %.inc . $(SRCDIR)
+
+
+MAKMAKE :
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(SRC) $(TARGET) ARMASM
+# echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+
+
+BLD SAVESPACE :
+ echo Nothing to do
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/$(TARGET)")
+# -$(ERASE) "$(TARGET)")
+# -$(ERASE) "$(BUILDLOC)/$(TARGET)")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/ne1_tb_genbootinc.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,22 @@
+# Copyright (c) 2005-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:
+# Meta information for the h4_genbootinc extension template
+#
+
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/ne1_tb_genbootinc.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,54 @@
+# Copyright (c) 2006-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:
+# h4_genbootinc.mk
+# Generate assembler inc files from header files
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+XINCDIR := $(INC_PATH)/assp/naviengine
+XGENDIR := $(INC_PATH)/assp/naviengine/$(MEMMODEL)
+
+MAKMAKE : all
+
+FREEZE :
+
+LIB : all
+
+CLEANLIB :
+
+RESOURCE :
+
+FINAL :
+
+BLD SAVESPACE : all
+
+RELEASABLES :
+ @echo $(XGENDIR)/naviengine.inc
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(XGENDIR)/naviengine.inc)
+ @echo $(XGENDIR)/naviengine.inc
+
+all: $(XGENDIR)/naviengine.inc
+
+$(XGENDIR)/naviengine.inc : $(XINCDIR)/naviengine.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR)/naviengine.h $(XGENDIR)/naviengine.inc ARMASM
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/ne1_tb_restricted_coreldr.flm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,281 @@
+# Copyright (c) 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:
+# ne1_tb_restricted_coreldr.flm
+# # NB! LINKBASE : Code execute address also set coreldr.lnk file
+# # MUST REFLECT CORELOADER ADDRESS RELOCATION IN BOTH FILES!!
+#
+#
+
+ifeq ($($(NAME)_ne1_tb_resricted_coreldr_flm),)
+$(NAME)_ne1_tb_resricted_coreldr_flm := 1
+
+## THESE MACROS NEED TO BE SET EXPLICITLY TO TRUE OR BLANK
+
+## Use this macro if it is required to use the MMU
+## if the MMU is not require either comment it out or set it FALSE
+USE_MMU := TRUE
+
+# This macro enables benchmarking code. Comment out or set FALSE if not required
+WRITE_TIMINGS :=
+# Timer is not implemented for Naviengine. Do not enable!
+
+## This macro causes the page tables to be output. Comment out or set FALSE if not required
+## If this option is selected then the MMU code will be enabled
+DUMP_PAGE_TABLES :=
+# Page tables cannot be dumped on Naviengine due to the NANDController used. Do not enable!
+
+# This macro enables the MMU enabled version of the coreldr to call RestartAuxiliaryCores
+# before it runs the core image. This function should be defined in the variant, to
+# restart the auxiliary cores, which it should have paused on startup.
+RUNS_WITH_SMP := TRUE
+
+## Make sure all 3 macros are either TRUE or FALSE
+# Enforce USE_MMU if page table is to be dumped
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ USE_MMU := TRUE
+else
+ DUMP_PAGE_TABLES := FALSE
+endif
+
+ifneq "$(USE_MMU)" "TRUE"
+ USE_MMU := FALSE
+endif
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+# Set the directories; based on calling bld.inf
+GENSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr
+# Generic drivers
+BLSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/util/ONBL2
+XSRSRCDIR1 := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/OAM/OSLess
+XSRSRCDIR2 := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/LLD/DNandO
+# Coreloader ASM...
+SPECSRCDIR := $(EXTENSION_ROOT)/../navienginebsp/ne1_tb/nandboot
+# PAM - Platform specific Version
+SPECXSRSRCDIR := $(EXTENSION_ROOT)/pam
+SPECXSRSRCDIR1 := $(EXTENSION_ROOT)/lld
+
+# Platform Variant includes
+VARIANTINC := $(INC_PATH)/ne1_tb
+VARIANTINC2 := $(EXTENSION_ROOT)/../navienginebsp/ne1_tb/bootstrap
+VARIANTINC3 := $(EXTENSION_ROOT)/../navienginebsp/ne1_tb/nand $(EXTENSION_ROOT)/../navienginebsp/naviengine_assp $(INC_PATH)/assp/naviengine/$(MEMMODEL)
+
+# Generic driver file includes
+GENINC1 := $(INC_PATH) $(EPOCROOT)/epoc32/include
+GENDRIVERINC := $(INC_PATH)/drivers
+GENINC2 := $(INC_PATH)/drivers/unistore2 $(INC_PATH)/memmodel/epoc $(INC_PATH)/kernel $(INC_PATH)/kernel/arm $(INC_PATH)/nkern $(INC_PATH)/nkern/arm
+GENXSRINC := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/inc
+GENINCPATH:= $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR1) $(XSRSRCDIR2) $(SPECXSRSRCDIR) $(SPECXSRSRCDIR1) $(VARIANTINC) $(VARIANTINC2) $(VARIANTINC3) $(GENINC1) $(GENDRIVERINC) $(GENINC2) $(GENINC3) $(GENINC4) $(GENXSRINC)
+
+
+# Set the source/include/target directories
+
+# epoc32 folder for exported header files
+EPOCINCDIR := $(INC_PATH)/ne1_tb
+
+# Build directory
+BUILDLOC := $(EPOCBLD)/ne1_tb_restricted_coreldr_flm/$(PLATFORM_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)
+BINTARGET := $(TARGETDIR)/$(NAME).bin
+TMPTARGET := $(BUILDLOC)/$(NAME).elf
+
+# Rules
+vpath %.s . $(SPECSRCDIR) $(SRCDIR)
+vpath %.inc . $(SPECSRCDIR) $(EPOCINCDIR)
+vpath %.ginc . $(BUILDLOC)
+
+
+# from base/e32/include/drivers/...
+VHEADERS := nanddevice.h
+# the following .inc files get built as part of the process
+BUILTINCLUDES := nanddevice.inc config.inc
+BUILTINCLUDES2 := nand_plat.inc
+
+#
+ASMSOURCE := coreldrasm.s
+GENCPPSOURCE := inflate.cpp
+BLCPPSOURCE := ONBL2.CPP
+XSRCPPSOURCE1 := OSLessOAM.cpp
+SPECXSRCPPSOURCE := pam.cpp
+SPECXSRCPPSOURCE1 := pnl.cpp
+
+XSRLIB := $(EPOCROOT)/epoc32/release/armv5/$(CFG)/nbl2.lib
+
+# Only link in the MMU stuff if required
+GENASMSOURCE :=
+ifeq "$(USE_MMU)" "TRUE"
+ GENASMSOURCE := coreldrmmu.s
+endif
+
+HEADERS :=
+SPECHEADERS := nand_plat.h
+
+## Address at which coreloader binary is loaded and then started from
+#
+# On NaviEngine this number is base of ram + 208MB (permitting 208MB core images)
+# this number is pretty arbitrary
+# if necessary as long as the corresponding change is also made to
+# KCoreLoaderAddress in variant_bootstrap.inc
+#
+LINKBASE := 0x8D000000
+
+# Build up logical TRUE defines
+ASM_TRUE_MACROS :=
+
+ifeq "$(USE_MMU)" "TRUE"
+ ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) DUMP_PAGE_TABLES
+endif
+
+ifeq "$(RUNS_WITH_SMP)" "TRUE"
+ ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) RUNS_WITH_SMP
+endif
+
+# Build up logical FALSE defines
+ASM_FALSE_MACROS :=
+
+ifeq "$(USE_MMU)" "FALSE"
+ ASM_FALSE_MACROS := $(ASM_FALSE_MACROS) USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS := $(ASM_FALSE_MACROS) WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "FALSE"
+ ASM_FALSE_MACROS := $(ASM_FALSE_MACROS) DUMP_PAGE_TABLES
+endif
+
+
+# Arm RVCT tools
+ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) USE_CXSF
+
+OBJEXT := o
+INCEXT := inc
+
+ARMCCFLAGS := --arm -c -Otime --cpp --enum_is_int
+ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ARMCCFLAGS := $(ARMCCFLAGS) -DEKA2
+ARMCCFLAGS := $(ARMCCFLAGS) -DXSR_NBL2 -DREAL_TARGET -DDEFERED_CHK -DSYMBIAN_SUPPORT_UNISTORE2
+
+ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)/epoc32/include/rvct/rvct.h
+
+ifeq "$(CFG)" "UDEB"
+ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG
+endif
+
+ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),--predefine "$(macro) SETL {TRUE}")
+ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),--predefine "$(macro) SETL {FALSE}")
+ASM_LINKBASE_MACRO := --predefine "_LINKBASE_ SETA $(LINKBASE)"
+
+AFLAGS := -g --keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -I$(BUILDLOC) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+LFLAGS := --entry BootEntry --ro-base $(LINKBASE) --FIRST BootEntry --map
+SYMOPT := --symdefs
+ASMTYP := ARMASM
+LINKFILE :=
+
+# include base commonly used functions
+include $(EPOCROOT)/epoc32/tools/makefile_templates/base/base_rvct_common.mk
+
+
+# Header processing
+FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS))
+FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+
+FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS))
+FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES))
+# do h2inc
+$(eval $(call base__h2inc,$(FULLBUILTINCLUDES),$(FULLVHEADERS)))
+
+FULLVHEADERS2 := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+FULLBUILTINCLUDES2 := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES2))
+# do h2inc
+$(eval $(call base__h2inc,$(FULLBUILTINCLUDES2),$(FULLVHEADERS2)))
+
+# object names
+GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS))
+
+BLCPPOBJECTS := $(foreach f,$(BLCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLBLCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(BLCPPOBJECTS))
+
+XSRCPPOBJECTS1 := $(foreach f,$(XSRCPPSOURCE1),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS1 := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS1))
+
+SPECXSRCPPOBJECTS := $(foreach f,$(SPECXSRCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLSPECXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(SPECXSRCPPOBJECTS))
+
+SPECXSRCPPOBJECTS1 := $(foreach f,$(SPECXSRCPPSOURCE1),$(basename $(f)).$(OBJEXT))
+FULLSPECXSRCPPOBJECTS1 := $(addprefix $(BUILDLOC)/,$(SPECXSRCPPOBJECTS1))
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLBLCPPOBJECTS) $(FULLXSRCPPOBJECTS1) $(FULLSPECXSRCPPOBJECTS) $(FULLSPECXSRCPPOBJECTS1) $(XSRLIB)
+
+
+FULLINCLUDES:= $(addprefix $(SPECSRCDIR)/,$(INCLUDES))
+FULLPLATINCLUDES:= $(addprefix $(PLATSRCDIR)/,$(PLATINCLUDES))
+FULLGENINCLUDES:= $(addprefix $(GENSRCDIR)/,$(GENINCLUDES))
+FULLBLDINCLUDES:= $(addprefix $(H2BLDDIR)/,$(BLDINCLUDES))
+
+
+# Link
+$(eval $(call base__link,$(TMPTARGET),$(FULLOBJECTS)))
+
+# Strip
+$(eval $(call base__strip,$(BINTARGET),$(TMPTARGET)))
+
+# CPP objects
+$(eval $(call base__compile,$(FULLGENCPPOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)))
+
+$(eval $(call base__compile,$(FULLBLCPPOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(BLSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)))
+
+$(eval $(call base__compile,$(FULLXSRCPPOBJECTS1),$(BUILDLOC)/%.$(OBJEXT),$(XSRSRCDIR1)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)))
+
+$(eval $(call base__compile,$(FULLSPECXSRCPPOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(SPECXSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)))
+
+$(eval $(call base__compile,$(FULLSPECXSRCPPOBJECTS1),$(BUILDLOC)/%.$(OBJEXT),$(SPECXSRSRCDIR1)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)))
+
+# Asm objects
+$(eval $(call base__asm,$(FULLGENASMOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)))
+
+$(eval $(call base__asm,$(FULLASMOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)))
+
+#
+TARGET :: $(TARGETDIR) $(BUILDLOC) $(BINTARGET)
+
+# --what to show releasables
+$(eval $(call whatmacro,$(BINTARGET),USERFLM))
+# Create directory
+CREATABLEPATHS := $(TARGETDIR) $(BUILDLOC)
+$(call makepath,$(CREATABLEPATHS))
+# Clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(BUILDLOC)))
+
+endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/ne1_tb_restricted_coreldr.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2008-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:
+# Meta information for the Navi_restricted_coreldr extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/ne1_tb_restricted_coreldr.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,398 @@
+# Copyright (c) 2008-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:
+# ne1_tb_restricted_coreldr.mk
+# # NB! LINKBASE : Code execute address also set coreldr.lnk file
+# # MUST REFLECT CORELOADER ADDRESS RELOCATION IN BOTH FILES!!
+#
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+## If any of these macros are changed, then execute "abld clean coreldr" from this directory
+## Use this macro if it is required to use the MMU
+## if the MMU is not require either comment it out or set it FALSE
+USE_MMU := TRUE
+
+# This macro enables benchmarking code. Comment out or set FALSE if not required
+#WRITE_TIMINGS := TRUE
+# Timer is not implemented for Naviengine. Do not enable!
+
+
+## This macro causes the page tables to be output. Comment out or set FALSE if not required
+## If this option is selected then the MMU code will be enabled
+# DUMP_PAGE_TABLES := TRUE
+# Page tables cannot be dumped on Naviengine due to the NANDController used. Do not enable!
+
+# This macro enables the MMU enabled version of the coreldr to call RestartAuxiliaryCores
+# before it runs the core image. This function should be defined in the variant, to
+# restart the auxiliary cores, which it should have paused on startup.
+RUNS_WITH_SMP := TRUE
+
+# Macro used to enable support for Shadowed Memory Regions feature in loader
+# See also varaint\config.inc to enable in bootstrap
+SUPPORTS_SMR := TRUE
+
+## Make sure all 3 macros are either TRUE or FALSE
+# Enforce USE_MMU if page table is to be dumped
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ USE_MMU := TRUE
+else
+ DUMP_PAGE_TABLES := FALSE
+endif
+
+ifneq "$(USE_MMU)" "TRUE"
+ USE_MMU := FALSE
+endif
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+ifneq "$(SUPPORTS_SMR)" "TRUE"
+ SUPPORTS_SMR := FALSE
+endif
+
+#Set the directories; based on calling bld.inf
+GENSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr
+#Generic drivers
+BLSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/util/ONBL2
+XSRSRCDIR1 := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/OAM/OSLess
+XSRSRCDIR2 := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/LLD/DNandO
+#Coreloader ASM...
+SPECSRCDIR := $(EXTENSION_ROOT)/../navienginebsp/ne1_tb/nandboot
+#PAM - Platform specific Version
+SPECXSRSRCDIR := $(EXTENSION_ROOT)/pam
+SPECXSRSRCDIR1 := $(EXTENSION_ROOT)/lld
+
+#Platform Variant includes
+VARIANTINC := $(INC_PATH)/ne1_tb
+VARIANTINC2 := $(EXTENSION_ROOT)/../navienginebsp/ne1_tb/bootstrap
+VARIANTINC3 := $(EXTENSION_ROOT)/../navienginebsp/ne1_tb/nand $(EXTENSION_ROOT)/../navienginebsp/naviengine_assp $(INC_PATH)/assp/naviengine/$(MEMMODEL)
+
+#Generic driver file includes
+GENINC1 := $(INC_PATH) $(EPOCROOT)epoc32/include
+GENDRIVERINC := $(INC_PATH)/drivers
+GENINC2 := $(INC_PATH)/drivers/unistore2 $(INC_PATH)/memmodel/epoc $(INC_PATH)/kernel $(INC_PATH)/kernel/arm $(INC_PATH)/nkern $(INC_PATH)/nkern/arm
+GENXSRINC := $(EXTENSION_ROOT)/../../../kernelhwsrv/kernel/eka/drivers/unistore2/srca/xsr/inc
+GENINCPATH:= $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR1) $(XSRSRCDIR2) $(SPECXSRSRCDIR) $(SPECXSRSRCDIR1) $(VARIANTINC) $(VARIANTINC2) $(VARIANTINC3) $(GENINC1) $(GENDRIVERINC) $(GENINC2) $(GENINC3) $(GENINC4) $(GENXSRINC)
+
+
+# Set the source/include/target directories
+
+#epoc32 folder for exported header files
+EPOCINCDIR = $(INC_PATH)/ne1_tb
+
+# Build directory (EPOCBLD too long)
+BUILDLOC = $(EPOCROOT)epoc32/build/bsp/hwip_nec_naviengine/ne1_tb_restricted/unistore2/nandboot/coreldr/$(PLATFORM_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TARGET = $(TARGETDIR)$/$(NAME).bin
+TMPTARGET = $(BUILDLOC)$/$(NAME).elf
+
+#Rules
+vpath %.s . $(SPECSRCDIR) $(SRCDIR)
+vpath %.inc . $(SPECSRCDIR) $(EPOCINCDIR)
+vpath %.ginc . $(BUILDLOC)
+
+
+# from base/e32/include/drivers/...
+VHEADERS := nanddevice.h
+# the following .inc files get built as part of the process
+BUILTINCLUDES := nanddevice.inc config.inc
+BUILTINCLUDES2 := nand_plat.inc
+
+
+
+ASMSOURCE := coreldrasm.s
+GENCPPSOURCE := inflate.cpp
+BLCPPSOURCE := ONBL2.CPP
+XSRCPPSOURCE1 := OSLessOAM.cpp
+SPECXSRCPPSOURCE := pam.cpp
+SPECXSRCPPSOURCE1 := pnl.cpp
+
+XSRLIB := $(EPOCROOT)epoc32/release/armv5/$(CFG)/nbl2.lib
+
+ifeq "$(USE_MMU)" "TRUE"
+ #generic version found in base/e32utils/nandboot/coreldr/...
+ GENASMSOURCE := coreldrmmu.s # only link in the MMU stuff if required
+endif
+
+HEADERS :=
+SPECHEADERS := nand_plat.h
+
+## Address at which coreloader binary is loaded and then started from
+#
+# On NaviEngine this number is base of ram + 208MB (permitting 208MB core images)
+# this number is pretty arbitrary
+# if necessary as long as the corresponding change is also made to
+# KCoreLoaderAddress in variant_bootstrap.inc
+#
+LINKBASE = 0x8D000000
+
+ARMASM_OUT := $(shell armasm 2>&1)
+ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+
+# Select the toolchain: ARM RVCT, then GCC
+
+# Use GCC toolchain if no other is available
+TOOLVER := GCC
+RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4)))
+ifeq "$(RVCTSTR)" "RVCT"
+ TOOLVER := RVCT
+ OP := --
+ OB := o
+endif
+
+# Build up logical TRUE defines
+ifeq "$(USE_MMU)" "TRUE"
+ ASM_TRUE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(SUPPORTS_SMR)" "TRUE"
+ ASM_TRUE_MACROS += SUPPORTS_SMR
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ ASM_TRUE_MACROS += DUMP_PAGE_TABLES
+endif
+
+ifeq "$(RUNS_WITH_SMP)" "TRUE"
+ ASM_TRUE_MACROS += RUNS_WITH_SMP
+endif
+
+# Build up logical FALSE defines
+ifeq "$(USE_MMU)" "FALSE"
+ ASM_FALSE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(SUPPORTS_SMR)" "FALSE"
+ ASM_FALSE_MACROS += SUPPORTS_SMR
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "FALSE"
+ ASM_FALSE_MACROS += DUMP_PAGE_TABLES
+endif
+
+#Arm RVCT tools
+ifeq "$(TOOLVER)" "RVCT"
+ASM_TRUE_MACROS += USE_CXSF
+ASM := armasm
+LINK := armlink
+FROMELF := fromelf
+CPP := armcc
+
+OBJEXT := o
+INCEXT := inc
+
+ARMCCFLAGS := --arm -c -Otime --cpp
+ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ARMCCFLAGS := $(ARMCCFLAGS) -DEKA2
+ARMCCFLAGS := $(ARMCCFLAGS) -DXSR_NBL2 -DREAL_TARGET -DDEFERED_CHK -DSYMBIAN_SUPPORT_UNISTORE2
+
+
+ifeq "$(SUPPORTS_SMR)" "TRUE"
+ ARMCCFLAGS := $(ARMCCFLAGS) -DSUPPORTS_SMR
+endif
+
+
+
+ ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)epoc32/include/rvct/rvct.h
+
+ ifeq "$(CFG)" "UDEB"
+ ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG
+ endif
+
+ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),$(OP)predefine "$(macro) SETL {FALSE}")
+ASM_LINKBASE_MACRO := $(OP)predefine "_LINKBASE_ SETA $(LINKBASE)"
+
+AFLAGS := -g $(OP)keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -I$(BUILDLOC) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+LFLAGS := $(OP)entry BootEntry $(OP)ro-base $(LINKBASE) $(OP)FIRST BootEntry $(OP)map
+SYMOPT := $(OP)symdefs
+ASMTYP := ARMASM
+LINKFILE :=
+
+define do_compile
+$(CPP) $(ARMCCFLAGS) $< -o $@
+endef
+define do_h2inc
+perl -S $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ ARMASM
+endef
+define do_asm
+$(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $<
+endef
+define do_link
+$(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS)
+endef
+define do_strip
+$(FROMELF) $(OP)bin $(OP)output $@ $<
+endef
+endif
+
+#Header processing
+FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS))
+FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+
+FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS))
+FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES))
+$(FULLBUILTINCLUDES) : $(FULLVHEADERS)
+ $(do_h2inc)
+
+FULLVHEADERS2 := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+FULLBUILTINCLUDES2 := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES2))
+$(FULLBUILTINCLUDES2) : $(FULLVHEADERS2)
+ $(do_h2inc)
+
+#object names
+GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS))
+
+BLCPPOBJECTS := $(foreach f,$(BLCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLBLCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(BLCPPOBJECTS))
+
+XSRCPPOBJECTS1 := $(foreach f,$(XSRCPPSOURCE1),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS1 := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS1))
+
+SPECXSRCPPOBJECTS := $(foreach f,$(SPECXSRCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLSPECXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(SPECXSRCPPOBJECTS))
+
+SPECXSRCPPOBJECTS1 := $(foreach f,$(SPECXSRCPPSOURCE1),$(basename $(f)).$(OBJEXT))
+FULLSPECXSRCPPOBJECTS1 := $(addprefix $(BUILDLOC)/,$(SPECXSRCPPOBJECTS1))
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLBLCPPOBJECTS) $(FULLXSRCPPOBJECTS1) $(FULLSPECXSRCPPOBJECTS) $(FULLSPECXSRCPPOBJECTS1) $(XSRLIB)
+
+ifdef PROCESS_INCLUDES
+
+GCCSRC := $(addprefix $(BUILDLOC)/,$(SRC))
+
+#Creation of headers
+FULLINCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT))
+FULLINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLINCLUDES))
+
+$(FULLINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLBLDINCLUDES := $(foreach f,$(BLDINCLUDES),$(basename $(f)).$(INCEXT))
+FULLBLDINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLBLDINCLUDES))
+$(FULLBLDINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLPLATINCLUDES := $(foreach f,$(PLATINCLUDES),$(basename $(f)).$(INCEXT))
+FULLPLATINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLPLATINCLUDES))
+$(FULLPLATINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLGENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))
+FULLGENINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLGENINCLUDES))
+$(FULLGENINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+else
+FULLINCLUDES:= $(addprefix $(SPECSRCDIR)/,$(INCLUDES))
+FULLPLATINCLUDES:= $(addprefix $(PLATSRCDIR)/,$(PLATINCLUDES))
+FULLGENINCLUDES:= $(addprefix $(GENSRCDIR)/,$(GENINCLUDES))
+FULLBLDINCLUDES:= $(addprefix $(H2BLDDIR)/,$(BLDINCLUDES))
+
+#Arm RVCT specifics here
+
+endif
+
+
+#Link
+$(TMPTARGET) : $(FULLOBJECTS)
+ $(do_link)
+
+#strip
+$(TARGET) : $(TMPTARGET)
+ $(do_strip)
+
+#CPP objects
+$(FULLGENCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLBLCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(BLSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLXSRCPPOBJECTS1) : $(BUILDLOC)/%.$(OBJEXT) : $(XSRSRCDIR1)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLSPECXSRCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECXSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLSPECXSRCPPOBJECTS1) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECXSRSRCDIR1)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+#Asm objects
+$(FULLGENASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+$(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+# make the work directories
+$(TARGETDIR) :
+ $(call ifnotexistd,"$(TARGETDIR)")
+
+$(BUILDLOC) :
+ $(call ifnotexistd,"$(BUILDLOC)")
+
+
+MAKMAKE :
+ echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET)
+ @echo BLD
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*")
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/ne1_tb_restricted_coreldr.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!-- Extension interfaces : replacements for Template Extension Makefiles -->
+
+ <interface name="base.ne1_tb_restricted_coreldr" extends="Symbian.KernelFLM" flm="ne1_tb_restricted_coreldr.flm">
+ <param name="NAME" />
+ <param name="MEMMODEL" />
+ <param name="INCLUDES" default='' />
+ <param name="INC_PATH" />
+ </interface>
+
+</build>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/omap3_genbootinc.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,22 @@
+# Copyright (c) 2008-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:
+# Meta information for the omap3_genbootinc extension template
+#
+
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/omap3_genbootinc.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,59 @@
+# Copyright (c) 2006-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:
+# Generate assembler inc files from header files
+#
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+# This will need to change when the directory gets renamed
+XINCDIR := $(INC_PATH)/tiomap3/variant/common
+XINCDIR2 := $(INC_PATH)/tiomap3/assp/common
+
+
+MAKMAKE : all
+
+FREEZE :
+
+LIB : all
+
+CLEANLIB :
+
+RESOURCE :
+
+FINAL :
+
+BLD SAVESPACE : all
+
+RELEASABLES :
+ @echo $(XINCDIR)/nand_fbr_offset.inc
+ @echo $(XINCDIR2)/customrestartreasons.inc
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(XINCDIR)/nand_fbr_offset.inc)
+# -$(ERASE) $(XINCDIR)/nand_fbr_offset.inc
+ @echo $(XINCDIR2)/customrestartreasons.inc
+
+all: $(XINCDIR2)/customrestartreasons.inc $(XINCDIR)/nand_fbr_offset.inc
+
+$(XINCDIR)/nand_fbr_offset.inc : $(XINCDIR)/nand_fbr_offset.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR)/nand_fbr_offset.h $(XINCDIR)/nand_fbr_offset.inc ARMASM
+
+$(XINCDIR2)/customrestartreasons.inc : $(XINCDIR2)/customrestartreasons.h
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $(XINCDIR2)/customrestartreasons.h $(XINCDIR2)/customrestartreasons.inc ARMASM
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/omap3_restricted_coreldr.flm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,244 @@
+# Copyright (c) 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:
+# # NB! LINKBASE : Code execute address also set coreldr.lnk file
+# # MUST REFLECT CORELOADER ADDRESS RELOCATION IN BOTH FILES!!
+#
+
+ifeq ($($(NAME)_omap3_resricted_coreldr_flm),)
+$(NAME)_omap3_resricted_coreldr_flm := 1
+
+## THESE MACROS NEED TO BE SET EXPLICITLY TO TRUE OR BLANK
+
+## Use this macro if it is required to use the MMU
+## if the MMU is not require either comment it out or set it FALSE
+USE_MMU :=
+
+## This macro enables benchmarking code. Comment out or set FALSE if not required
+WRITE_TIMINGS :=
+
+## This macro causes the page tables to be output. Comment out or set FALSE if not required
+## If this option is selected then the MMU code will be enabled
+DUMP_PAGE_TABLES :=
+
+## Make sure all 3 macros are either TRUE or FALSE
+# Enforce USE_MMU if page table is to be dumped
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ USE_MMU := TRUE
+else
+ DUMP_PAGE_TABLES := FALSE
+endif
+
+ifneq "$(USE_MMU)" "TRUE"
+ USE_MMU := FALSE
+endif
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+# Set the directories
+GENSRCDIR := $(EXTENSION_ROOT)/../../../../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr
+XSRSRCDIR := $(EXTENSION_ROOT)/../../../../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr/unistore2
+SPECSRCDIR := $(EXTENSION_ROOT)/../../../assp/common/nandboot/coreldr_largeblk
+
+VARIANTINC := $(INC_PATH)/tiomap3/variant/$(VARIANT_PATH)
+VARIANTINC2 := $(EXTENSION_ROOT)/../../../assp/common/bootstrap
+VARIANTINC3 := $(EXTENSION_ROOT)/../../34xx_sdp/nand
+VARIANTINC4 := $(INC_PATH)/tiomap3/variant/common
+
+GENINC1 := $(INC_PATH) $(EPOCROOT)/epoc32/include
+GENDRIVERINC := $(INC_PATH)/drivers
+GENINC2 := $(INC_PATH)/drivers/unistore2
+GENINCPATH := $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR) $(VARIANTINC) $(VARIANTINC2) $(VARIANTINC3) $(VARIANTINC4) $(GENINC1) $(GENDRIVERINC) $(GENINC2)
+
+# Set the source/include/target directories
+GSRCDIR := ../../../assp/common/nandboot
+VINCDIR := ../../../h4/inc
+GINCDIR := ../../../shared/inc
+EPOCINCDIR := $(INC_PATH)/tiomap3/variant/34xx_sdp
+
+# Build directory
+BUILDLOC := $(EPOCBLD)/omap3_restricted_coreldr_flm/$(PLATFORM_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)
+BINTARGET := $(TARGETDIR)/$(NAME).bin
+TMPTARGET := $(BUILDLOC)/$(NAME).elf
+
+# Rules
+vpath %.s . $(SPECSRCDIR) $(SRCDIR)
+vpath %.inc . $(SPECSRCDIR) $(EPOCINCDIR)
+vpath %.ginc . $(BUILDLOC)
+
+INCLUDES :=
+
+VHEADERS := nanddevice.h
+BUILTINCLUDES := nanddevice.inc config.inc
+BUILTINCLUDES2 := nand_plat.inc
+
+ASMSOURCE := coreldrasm_largeblk.s
+GENCPPSOURCE := coreldr.cpp inflate.cpp
+XSRCPPSOURCE := coreldrxsr.cpp
+
+# Only link in the MMU stuff if required
+GENASMSOURCE :=
+ifeq "$(USE_MMU)" "TRUE"
+ GENASMSOURCE := coreldrmmu.s
+endif
+
+HEADERS := inflate.h coreldr.h
+SPECHEADERS := nand_plat.h
+
+## Address at which coreloader binary is loaded and then started from
+#
+# On H4 this number is base of ram + 48MB (permitting 48MB core images)
+# this number is pretty arbitrary and may be raised higher into ram
+# if necessary as long as the corresponding change is also made to
+# KCoreLoaderAddress in variant_bootstrap.inc
+#
+LINKBASE := 0x83000000
+
+# Build up logical TRUE defines
+ASM_TRUE_MACROS :=
+
+ifeq "$(USE_MMU)" "TRUE"
+ ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) DUMP_PAGE_TABLES
+endif
+
+# Build up logical FALSE defines
+ASM_FALSE_MACROS :=
+
+ifeq "$(USE_MMU)" "FALSE"
+ ASM_FALSE_MACROS := $(ASM_FALSE_MACROS) USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS := $(ASM_FALSE_MACROS) WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "FALSE"
+ ASM_FALSE_MACROS := $(ASM_FALSE_MACROS) DUMP_PAGE_TABLES
+endif
+
+
+# Arm RVCT tools
+ASM_TRUE_MACROS := $(ASM_TRUE_MACROS) USE_CXSF
+
+OBJEXT := o
+INCEXT := inc
+
+ARMCCFLAGS := --arm -c -Otime --cpp --enum_is_int
+ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ARMCCFLAGS := $(ARMCCFLAGS) -DEKA2
+ARMCCFLAGS := $(ARMCCFLAGS) -DSYMBIAN_SUPPORT_UNISTORE2
+
+ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)/epoc32/include/rvct/rvct.h
+
+ifdef MACRO
+ARMCCFLAGS := $(ARMCCFLAGS) -D$(MACRO)
+endif
+
+ifeq "$(CFG)" "UDEB"
+ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG
+endif
+
+ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),--predefine "$(macro) SETL {TRUE}")
+ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),--predefine "$(macro) SETL {FALSE}")
+ASM_LINKBASE_MACRO := --predefine "_LINKBASE_ SETA $(LINKBASE)"
+
+AFLAGS := -g --keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -I$(BUILDLOC) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+LFLAGS := --entry BootEntry --ro-base $(LINKBASE) --FIRST BootEntry --map
+SYMOPT := --symdefs
+ASMTYP := ARMASM
+LINKFILE :=
+
+# Include base commonly used functions with RVCT toolchain
+include $(EPOCROOT)/epoc32/tools/makefile_templates/base/base_rvct_common.mk
+
+
+# CPP source processing
+FULLCPPSOURCE := $(addprefix $(GENSRCDIR)/,$(GENCPPSOURCE))
+
+# Header processing
+FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS))
+FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+
+FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS))
+FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES))
+
+$(eval $(call base__h2inc,$(FULLBUILTINCLUDES),$(FULLVHEADERS)))
+
+FULLVHEADERS2 := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+FULLBUILTINCLUDES2 := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES2))
+
+$(eval $(call base__h2inc,$(FULLBUILTINCLUDES2),$(FULLVHEADERS2)))
+
+# Object names
+GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS))
+
+XSRCPPOBJECTS := $(foreach f,$(XSRCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS))
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLXSRCPPOBJECTS)
+
+
+FULLINCLUDES := $(addprefix $(SPECSRCDIR)/,$(INCLUDES))
+FULLPLATINCLUDES := $(addprefix $(PLATSRCDIR)/,$(PLATINCLUDES))
+FULLGENINCLUDES := $(addprefix $(GENSRCDIR)/,$(GENINCLUDES))
+FULLBLDINCLUDES := $(addprefix $(H2BLDDIR)/,$(BLDINCLUDES))
+
+
+# Link
+$(eval $(call base__link,$(TMPTARGET),$(FULLOBJECTS)))
+
+# Strip
+$(eval $(call base__strip,$(BINTARGET),$(TMPTARGET)))
+
+# CPP objects
+$(eval $(call base__compile,$(FULLGENCPPOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)))
+
+$(eval $(call base__compile,$(FULLXSRCPPOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(XSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)))
+
+# Asm objects
+$(eval $(call base__asm,$(FULLGENASMOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)))
+
+$(eval $(call base__asm,$(FULLASMOBJECTS),$(BUILDLOC)/%.$(OBJEXT),$(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)))
+
+#
+TARGET :: $(TARGETDIR) $(BUILDLOC) $(BINTARGET)
+
+# --what to show releasables
+$(eval $(call whatmacro,$(BINTARGET),USERFLM))
+# Create directory
+CREATABLEPATHS := $(TARGETDIR) $(BUILDLOC)
+$(call makepath,$(CREATABLEPATHS))
+# Clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(BUILDLOC)))
+
+endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/omap3_restricted_coreldr.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+# Copyright (c) 2008-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:
+# Meta information for the omap3_restricted_coreldr extension template
+#
+
+platform win32
+makefile gnumake
+techstream base
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/omap3_restricted_coreldr.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,391 @@
+# Copyright (c) 2008-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:
+# # NB! LINKBASE : Code execute address also set coreldr.lnk file
+# # MUST REFLECT CORELOADER ADDRESS RELOCATION IN BOTH FILES!!
+#
+#
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+## If any of these macros are changed, then execute "abld clean coreldr" from this directory
+## Use this macro if it is required to use the MMU
+## if the MMU is not require either comment it out or set it FALSE
+## USE_MMU := TRUE
+
+## This macro enables benchmarking code. Comment out or set FALSE if not required
+#WRITE_TIMINGS := TRUE
+
+## This macro causes the page tables to be output. Comment out or set FALSE if not required
+## If this option is selected then the MMU code will be enabled
+#DUMP_PAGE_TABLES := TRUE
+
+
+## Make sure all 3 macros are either TRUE or FALSE
+# Enforce USE_MMU if page table is to be dumped
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ USE_MMU := TRUE
+else
+ DUMP_PAGE_TABLES := FALSE
+endif
+
+ifneq "$(USE_MMU)" "TRUE"
+ USE_MMU := FALSE
+endif
+
+ifneq "$(WRITE_TIMINGS)" "TRUE"
+ WRITE_TIMINGS := FALSE
+endif
+
+#Set the directories
+GENSRCDIR := $(EXTENSION_ROOT)/../../../../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr
+XSRSRCDIR := $(EXTENSION_ROOT)/../../../../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr/unistore2
+SPECSRCDIR := $(EXTENSION_ROOT)/../../../assp/common/nandboot/coreldr_largeblk
+
+VARIANTINC := $(INC_PATH)/tiomap3/variant/$(VARIANT_PATH)
+VARIANTINC2 := $(EXTENSION_ROOT)/../../../assp/common/bootstrap
+VARIANTINC3 := $(EXTENSION_ROOT)/../../34xx_sdp/nand
+VARIANTINC4 := $(INC_PATH)/tiomap3/variant/common
+
+GENINC1 := $(INC_PATH) $(EPOCROOT)epoc32/include
+GENDRIVERINC := $(INC_PATH)/drivers
+GENINC2 := $(INC_PATH)/drivers/unistore2
+GENINCPATH:= $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR) $(VARIANTINC) $(VARIANTINC2) $(VARIANTINC3) $(VARIANTINC4) $(GENINC1) $(GENDRIVERINC) $(GENINC2)
+
+# Set the source/include/target directories
+GSRCDIR = ../../../assp/common/nandboot
+VINCDIR = ../../../h4/inc
+GINCDIR = ../../../shared/inc
+EPOCINCDIR = $(INC_PATH)/tiomap3/variant/34xx_sdp
+
+# Build directory (EPOCBLD too long)
+BUILDLOC = $(EPOCROOT)epoc32/build/tiomap3/$(VARIANT_PATH)_restricted/unistore2/nandboot/coreldr/$(PLATFORM)
+#BUILDLOC = $(EPOCROOT)epoc32/build/tiomap3/34xx_sdp_restricted/unistore2/nandboot/coreldr/$(PLATFORM)
+#BUILDLOC = $(EPOCBLD)/$(PLATFORM_PATH)/$(CFG) # Error as $(EPOCBLD) include platform
+#BUILDLOC = $(EPOCBLD)/$(CFG_PATH)
+
+# Set the target name
+TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
+TARGET = $(TARGETDIR)/$(NAME).bin
+TMPTARGET = $(BUILDLOC)/$(NAME).elf
+
+#Rules
+vpath %.s . $(SPECSRCDIR) $(SRCDIR)
+vpath %.inc . $(SPECSRCDIR) $(EPOCINCDIR)
+vpath %.ginc . $(BUILDLOC)
+
+INCLUDES :=
+
+VHEADERS := nanddevice.h
+BUILTINCLUDES := nanddevice.inc config.inc
+BUILTINCLUDES2 := nand_plat.inc
+
+ASMSOURCE := coreldrasm_largeblk.s
+GENCPPSOURCE := coreldr.cpp inflate.cpp
+XSRCPPSOURCE := coreldrxsr.cpp
+
+ifeq "$(USE_MMU)" "TRUE"
+ GENASMSOURCE := coreldrmmu.s # only link in the MMU stuff if required
+endif
+
+HEADERS := inflate.h coreldr.h
+SPECHEADERS := nand_plat.h
+
+## Address at which coreloader binary is loaded and then started from
+#
+# On H4 this number is base of ram + 48MB (permitting 48MB core images)
+# this number is pretty arbitrary and may be raised higher into ram
+# if necessary as long as the corresponding change is also made to
+# KCoreLoaderAddress in variant_bootstrap.inc
+#
+LINKBASE = 0x83000000
+
+
+
+ARMASM_OUT := $(shell armasm 2>&1)
+ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
+
+# Select the toolchain: ARM RVCT, then GCC
+
+# Use GCC toolchain if no other is available
+TOOLVER := GCC
+RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4)))
+ifeq "$(RVCTSTR)" "RVCT"
+ TOOLVER := RVCT
+ OP := --
+ OB := o
+endif
+
+# Build up logical TRUE defines
+ifeq "$(USE_MMU)" "TRUE"
+ ASM_TRUE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "TRUE"
+ ASM_TRUE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "TRUE"
+ ASM_TRUE_MACROS += DUMP_PAGE_TABLES
+endif
+
+# Build up logical FALSE defines
+ifeq "$(USE_MMU)" "FALSE"
+ ASM_FALSE_MACROS += USE_MMU
+endif
+
+ifeq "$(WRITE_TIMINGS)" "FALSE"
+ ASM_FALSE_MACROS += WRITE_TIMINGS
+endif
+
+ifeq "$(DUMP_PAGE_TABLES)" "FALSE"
+ ASM_FALSE_MACROS += DUMP_PAGE_TABLES
+endif
+
+#Arm RVCT tools
+ifeq "$(TOOLVER)" "RVCT"
+ ASM_TRUE_MACROS += USE_CXSF
+ ASM := armasm
+ LINK := armlink
+ FROMELF := fromelf
+ CPP := armcc
+
+ OBJEXT := o
+ INCEXT := inc
+
+ ARMCCFLAGS := --arm -c -Otime --cpp
+ ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ ARMCCFLAGS := $(ARMCCFLAGS) -DEKA2
+ ARMCCFLAGS := $(ARMCCFLAGS) -DSYMBIAN_SUPPORT_UNISTORE2
+
+ ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)epoc32/include/rvct/rvct.h
+
+ ifdef MACRO
+ ARMCCFLAGS := $(ARMCCFLAGS) -D$(MACRO)
+ endif
+
+ ifeq "$(CFG)" "UDEB"
+ ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG
+ endif
+
+ ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
+ ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),$(OP)predefine "$(macro) SETL {FALSE}")
+ ASM_LINKBASE_MACRO := $(OP)predefine "_LINKBASE_ SETA $(LINKBASE)"
+
+ AFLAGS := -g $(OP)keep $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -I$(BUILDLOC) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ LFLAGS := $(OP)entry BootEntry $(OP)ro-base $(LINKBASE) $(OP)FIRST BootEntry $(OP)map
+ SYMOPT := $(OP)symdefs
+ ASMTYP := ARMASM
+ LINKFILE :=
+
+ define do_compile
+ $(CPP) $(ARMCCFLAGS) $< -o $@
+ endef
+ define do_h2inc
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ ARMASM
+ endef
+ define do_asm
+ $(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $<
+ endef
+ define do_link
+ $(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS)
+ endef
+ define do_strip
+ $(FROMELF) $(OP)bin $(OP)output $@ $<
+ endef
+endif
+
+
+#GCC build options
+ifeq "$(TOOLVER)" "GCC"
+ ASM := as
+ AFLAGS := -mapcs-32 -R -n -I$(BUILDLOC)
+
+ ASM_TRUE_MACRO_CMD := $(foreach macro,$(ASM_TRUE_MACROS),--defsym $(macro)=1)
+ ASM_FALSE_MACRO_CMD := $(foreach macro,$(ASM_FALSE_MACROS),--defsym $(macro)=0)
+ ASM_LINKBASE_MACRO := --defsym _LINKBASE_=$(LINKBASE)
+
+ LINKFLAGS = -n --section-alignment 4 --file-alignment 2 -no-whole-archive
+ GCCFLAGS=-march=armv4 -nostdinc -pipe -c -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas
+ GCCFLAGS := $(GCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir)))
+ GCCDEFS = -D__SYMBIAN32__ -D__GCC32__ -D__EPOC32__ -D__MARM__ -D__MARM_ARM4__ -DEKA2 -DSYMBIAN_SUPPORT_UNISTORE2
+ ifeq "$(CFG)" "UDEB"
+ GCC = gcc -x c++ -g -O2 $(GCCFLAGS) -D_DEBUG -D_UNICODE $(GCCDEFS)
+ else
+ GCC = gcc -x c++ -s -fomit-frame-pointer -O2 $(GCCFLAGS) -DNDEBUG -D_UNICODE $(GCCDEFS)
+ endif
+
+ LINKFILE = $(SPECSRCDIR)/coreldr.lnk
+ OBJEXT := o
+ INCEXT := ginc
+
+ PROCESS_INCLUDES := 1
+ define do_compile
+ $(GCC) -o $@ $<
+ endef
+ define do_h2inc
+ perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ AS
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $@ $(join $(basename $@),.ginc)
+ endef
+ define do_includes
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@
+ endef
+ define do_asm
+ perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $(join $(basename $@),.s)
+ $(AS) $(AFLAGS) $(ASM_TRUE_MACRO_CMD) $(ASM_FALSE_MACRO_CMD) $(ASM_LINKBASE_MACRO) -o $@ $(join $(basename $@),.s)
+ endef
+ define do_strip
+ strip -O binary -o "$(TARGET)" "$(TMPTARGET)"
+ echo Built $(TARGET)
+ endef
+ define do_link
+ ld -o "$(TMPTARGET)" --start $(FULLOBJECTS) --script=$(LINKFILE)
+ endef
+endif
+
+
+#CPP source processing
+FULLCPPSOURCE := $(addprefix $(GENSRCDIR)/,$(GENCPPSOURCE))
+
+#Header processing
+FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS))
+FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+
+FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS))
+FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES))
+$(FULLBUILTINCLUDES) : $(FULLVHEADERS)
+ $(do_h2inc)
+
+FULLVHEADERS2 := $(addprefix $(VARIANTINC)/,$(SPECHEADERS))
+FULLBUILTINCLUDES2 := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES2))
+$(FULLBUILTINCLUDES2) : $(FULLVHEADERS2)
+ $(do_h2inc)
+
+#object names
+GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS))
+
+XSRCPPOBJECTS := $(foreach f,$(XSRCPPSOURCE),$(basename $(f)).$(OBJEXT))
+FULLXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS))
+
+ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS))
+
+GENASMOBJECTS := $(foreach f,$(GENASMSOURCE),$(basename $(f)).$(OBJEXT))
+FULLGENASMOBJECTS := $(addprefix $(BUILDLOC)/,$(GENASMOBJECTS))
+
+FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLXSRCPPOBJECTS)
+
+ifdef PROCESS_INCLUDES
+
+GCCSRC := $(addprefix $(BUILDLOC)/,$(SRC))
+
+#Creation of headers
+FULLINCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT))
+FULLINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLINCLUDES))
+
+$(FULLINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLBLDINCLUDES := $(foreach f,$(BLDINCLUDES),$(basename $(f)).$(INCEXT))
+FULLBLDINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLBLDINCLUDES))
+$(FULLBLDINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLPLATINCLUDES := $(foreach f,$(PLATINCLUDES),$(basename $(f)).$(INCEXT))
+FULLPLATINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLPLATINCLUDES))
+$(FULLPLATINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+FULLGENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))
+FULLGENINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLGENINCLUDES))
+$(FULLGENINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc
+ $(do_includes)
+
+else
+FULLINCLUDES:= $(addprefix $(SPECSRCDIR)/,$(INCLUDES))
+FULLPLATINCLUDES:= $(addprefix $(PLATSRCDIR)/,$(PLATINCLUDES))
+FULLGENINCLUDES:= $(addprefix $(GENSRCDIR)/,$(GENINCLUDES))
+FULLBLDINCLUDES:= $(addprefix $(H2BLDDIR)/,$(BLDINCLUDES))
+
+#Arm RVCT specifics here
+
+endif
+
+
+#Link
+$(TMPTARGET) : $(FULLOBJECTS)
+ $(do_link)
+
+#strip
+$(TARGET) : $(TMPTARGET)
+ $(do_strip)
+
+#CPP objects
+$(FULLGENCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+$(FULLXSRCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(XSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS)
+ $(do_compile)
+
+#Asm objects
+$(FULLGENASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/$(GENASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBUILTINCLUDES3) $(FULLDRIVERINCLUDES) $(FULLARMINCLUDES) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+$(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) $(FULLBUILTINCLUDES2) $(FULLBLDINCLUDES) $(FULLGENINCLUDES) $(FULLPLATINCLUDES)
+ $(do_asm)
+
+# make the work directories
+$(TARGETDIR) :
+ $(call ifnotexistd,"$(TARGETDIR)")
+
+$(BUILDLOC) :
+ $(call ifnotexistd,"$(BUILDLOC)")
+
+
+
+MAKMAKE :
+ echo Nothing to do
+
+FREEZE :
+ echo Nothing to do
+
+LIB :
+ echo Nothing to do
+
+CLEANLIB :
+ echo Nothing to do
+
+RESOURCE :
+ echo Nothing to do
+
+FINAL :
+ echo Nothing to do
+
+BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET)
+
+RELEASABLES :
+ @echo "$(TARGET)"
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,"$(TARGET)")
+ -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*")
+# -$(ERASE) "$(TARGET)"
+# -$(ERASE) "$(BUILDLOC)/*.*"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/base/omap3_restricted_coreldr.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!-- Extension interfaces : replacements for Template Extension Makefiles
+ -->
+
+ <interface name="base.omap3_restricted_coreldr" extends="Symbian.KernelFLM" flm="omap3_restricted_coreldr.flm">
+ <param name="VARIANT_PATH" />
+ <param name="NAME" />
+ <param name="INC_PATH" />
+ <param name="MACRO" default=''/>
+ <param name="INCLUDES" default='' />
+ </interface>
+
+</build>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/converged-comms/createcommdbs.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2006-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:
+# Meta information for PDR generation
+#
+
+platform win32
+makefile gnumake
+techstream converged-comms
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/converged-comms/createcommdbs.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,50 @@
+# Copyright (c) 2007-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:
+# Envoke CED to create correct CommDB
+#
+#
+
+do_nothing :
+
+
+#
+# The targets invoked by abld
+#
+
+MAKMAKE : do_nothing
+
+RESOURCE : do_nothing
+
+SAVESPACE : BLD
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL :
+ perl $(EXTENSION_ROOT)/createcommdbs.pl --command=build --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec
+
+CLEAN :
+ perl $(EXTENSION_ROOT)/createcommdbs.pl --command=clean --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec
+
+RELEASABLES :
+ @perl $(EXTENSION_ROOT)/createcommdbs.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/converged-comms/installdefaultcommdb.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2006-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:
+# Meta information for PDR generation
+#
+
+platform win32
+makefile gnumake
+techstream converged-comms
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/converged-comms/installdefaultcommdb.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,48 @@
+# Copyright (c) 2007-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:
+# Envoke CED to install correct CommDB
+#
+
+do_nothing :
+ rem do_nothing
+
+#
+# The targets invoked by abld
+#
+
+MAKMAKE : do_nothing
+
+RESOURCE : do_nothing
+
+SAVESPACE : BLD
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL :
+ perl $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=build --platform=$(PLATFORM) --variant=$(CFG) --platsec
+
+CLEAN :
+ perl $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=clean --platform=$(PLATFORM) --variant=$(CFG) --platsec
+
+RELEASABLES :
+ @perl $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --platsec
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/security/upsserver.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2008-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:
+# Meta information for the GNU ups server extension template
+#
+
+platform win32
+makefile gnumake
+techstream security
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/security/upsserver.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,74 @@
+# Copyright (c) 2007-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ZDIR:=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z
+
+ifeq "$(PLATFORM)" "WINSCW"
+COPIED_EXE=$(ZDIR)/sys/bin/upsserver.exe
+endif
+
+
+do_nothing:
+
+
+#
+# The targets invoked by bld...
+#
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+ifdef COPIED_EXE
+#
+# Rules to create and package winscw Z drive upsserver.exe copy
+#
+.PHONY: FINAL
+FINAL : $(COPIED_EXE)
+
+$(COPIED_EXE) : $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/upsserver.exe
+ echo Copying upsserver.exe to emulator Z drive so the UPS romstub works.
+ $(CP) $(call slash2generic,$<) $(call slash2generic,$@)
+
+CLEAN :
+ -$(ERASE) $(COPIED_EXE)
+
+RELEASABLES :
+ echo $(COPIED_EXE)
+
+else
+
+FINAL : do_nothing
+CLEAN : do_nothing
+RELEASABLES : do_nothing
+
+endif
+
+SAVESPACE : BLD
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+RESOURCE : do_nothing
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/conversiontable.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2006-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:
+# Meta information for conversiontable use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/conversiontable.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,75 @@
+# Copyright (c) 2004-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:
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+BUILD_DIR = $(call generated,generated/fatcharsetconv)
+
+
+SOURCE_DIR = $(EXTENSION_ROOT)/../unicodeTables
+
+TARGET= $(BUILD_DIR)/cp950.cpp \
+ $(BUILD_DIR)/cp949.cpp \
+ $(BUILD_DIR)/cp936.cpp \
+ $(BUILD_DIR)/cp932.cpp \
+ $(BUILD_DIR)/cp874.cpp \
+ $(BUILD_DIR)/cp1258.cpp \
+ $(BUILD_DIR)/cp1257.cpp \
+ $(BUILD_DIR)/cp1256.cpp \
+ $(BUILD_DIR)/cp1255.cpp \
+ $(BUILD_DIR)/cp1254.cpp \
+ $(BUILD_DIR)/cp1253.cpp \
+ $(BUILD_DIR)/cp1252.cpp \
+ $(BUILD_DIR)/cp1251.cpp \
+ $(BUILD_DIR)/cp1250.cpp
+
+$(BUILD_DIR):
+ $(call createdir,$(BUILD_DIR))
+
+$(TARGET):$(BUILD_DIR)/cp%.cpp : $(SOURCE_DIR)/CP%.txt $(BUILD_DIR)
+ perl $(EXTENSION_ROOT)/FatConversionTable.pl $< $@
+
+
+do_nothing:
+ @echo do nothing
+
+
+MAKMAKE : $(TARGET)
+
+BLD : do_nothing
+
+SAVESPACE : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB: do_nothing
+
+RESOURCE : do_nothing
+
+FINAL : do_nothing
+
+# Do not echo 'do nothing'.
+# Do not specify any 'epoc32/build' files, unless they are built into the CBR.
+RELEASABLES :
+
+CLEAN :
+ -$(ERASE) $(TARGET)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/fm_copyfile_to_winscw_zdrive.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# fm_copyfiles_to_winscw_zdrive.meta
+#
+
+platform winscw
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/fm_copyfile_to_winscw_zdrive.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,71 @@
+# Copyright (c) 2007-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:
+# fm_copyfiles_to_winscw_zdrive.mk
+# Arguments to makefile are:
+# option FILE_TO_COPY <src/dest_filename_without_any_path>
+# option SRC_PATH <epocroot_starting_path>
+# option DEST_PATH <emulator_zdrive_path_starting_with_a_z>
+# Job of the this makefile is to copy the specified file to
+# the epoc32/release/winscw/CFG/z/... folder for the current config e.g. UREL or
+# UDEB.
+#
+#
+
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+SOURCE_FILE=$(SRC_PATH)/$(FILE_TO_COPY)
+TARGET_DIR=$(EPOCROOT)epoc32/release/winscw/$(CFG_PATH)/$(DEST_PATH)
+TARGET_FILE=$(TARGET_DIR)/$(FILE_TO_COPY)
+
+DO_NOTHING :
+ @echo do nothing
+
+$(TARGET_DIR) :
+ $(MKDIR) $(call slash2generic,$(TARGET_DIR))
+
+#
+# The targets invoked by abld...
+#
+
+MAKMAKE : DO_NOTHING
+
+BLD : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+CLEAN :
+ @echo Erasing $(call slash2generic,$(TARGET_FILE))
+ -$(ERASE) $(call slash2generic,$(TARGET_FILE))
+
+RELEASABLES :
+ @echo $(TARGET_FILE)
+
+FINAL : $(TARGET_DIR)
+ @echo Copying $(call slash2generic,$(SOURCE_FILE)) to $(call slash2generic,$(TARGET_FILE))
+ $(CP) $(call slash2generic,$(SOURCE_FILE)) $(call slash2generic,$(TARGET_FILE))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/generate_cpp.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2006-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:
+# Meta information for cnvtool invocation
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/generate_cpp.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,112 @@
+# Copyright (c) 2000-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:
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+ifneq ($(FIRST_PASS),completed)
+
+FIRST_PASS=completed
+
+SOURCE_DIRECTORY=$(EXTENSION_ROOT)/../data
+
+TOOLS=\
+$(EPOCROOT)epoc32/tools/PARSER.pm \
+$(EPOCROOT)epoc32/tools/WRITER.pm \
+$(EPOCROOT)epoc32/tools/cnvtool.pl
+
+TARGET_DIRECTORY:=$(call generated,generatedcpp/charconv)
+TARGET_DIRECTORY2:=$(EPOCROOT)epoc32/tools/charconv
+
+endif
+
+
+ifeq ($(TYPE),dat)
+
+TARGET_FILES2=$(patsubst %,$(TARGET_DIRECTORY2)/%.dat,$(STEMS))
+
+$(TARGET_FILES2) : $(TARGET_DIRECTORY2)/%.dat: $(SOURCE_DIRECTORY)/%.txt $(SOURCE_DIRECTORY)/%$(CTL_EXT).ctl $(EXTRA_DEP) $(TOOLS)
+ @$(call createdir,"$(TARGET_DIRECTORY2)")
+ perl $(EPOCROOT)epoc32/tools/cnvtool.pl $(subst .txt,$(CTL_EXT).ctl,$<) $< $@ -flattenHashAndSave $(foreach PARAM,$(EXTRA_PARAMS),"$(PARAM)" )
+
+else
+
+# This is required by parellel build
+
+TARGET_FILES=$(patsubst %,$(TARGET_DIRECTORY)/g_%.cpp,$(STEMS))
+
+$(TARGET_FILES) : $(TARGET_DIRECTORY)/g_%.cpp: $(SOURCE_DIRECTORY)/%.txt $(SOURCE_DIRECTORY)/%$(CTL_EXT).ctl $(EXTRA_DEP) $(TOOLS)
+ @$(call createdir,"$(TARGET_DIRECTORY)")
+ @$(call createdir,"$(TARGET_DIRECTORY2)")
+ perl $(EPOCROOT)epoc32/tools/cnvtool.pl $(subst .txt,$(CTL_EXT).ctl,$<) $< $@ -generateSourceCode $(foreach PARAM,$(EXTRA_PARAMS),"$(PARAM)" )
+
+endif
+
+
+
+ifneq ($(TYPE),all)
+
+DO_NOTHING :
+# do nothing
+
+ # the targets below are the public ones
+
+MAKMAKE : $(TARGET_FILES2) $(TARGET_FILES)
+
+BLD : $(TARGET_FILES2) $(TARGET_FILES)
+
+SAVESPACE : BLD
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+CLEAN :
+ -$(ERASE) $(TARGET_FILES2) $(TARGET_FILES)
+
+RELEASABLES : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+endif
+
+
+
+ifeq ($(TYPE),dat)
+
+RELEASABLES :
+ $(call formatreleasables,$(TARGET_FILES2))
+
+endif
+
+
+
+ifeq ($(TYPE),all)
+
+TYPE=dat
+TARGET_FILES2=$(TARGET_FILES)
+
+include $(call include)
+
+endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/generate_snm.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2006-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:
+# Meta information for snmtool use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/generate_snm.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,77 @@
+# Copyright (c) 2000-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:
+# basic_snm.mk
+#
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+ifeq ($(PLATFORM),WINS)
+ TARGET_DIRECTORY := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/resource/charconv
+else
+ifeq ($(PLATFORM),WINSCW)
+ TARGET_DIRECTORY := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/resource/charconv
+else
+ TARGET_DIRECTORY := $(EPOCROOT)epoc32/data/z/resource/charconv
+endif
+endif
+
+SOURCE_DIRECTORY=$(EXTENSION_ROOT)
+
+TARGET_FILE=\
+ $(TARGET_DIRECTORY)/$(TARGET)
+
+TOOLS=\
+ $(EPOCROOT)epoc32/tools/PARSER.pm \
+ $(EPOCROOT)epoc32/tools/WRITER.pm \
+ $(EPOCROOT)epoc32/tools/snmtool.pl
+
+$(TARGET_DIRECTORY) :
+ @$(call createdir,"$@")
+
+$(TARGET_DIRECTORY)/basic.snm : $(SOURCE_DIRECTORY)/$(SOURCES) $(TOOLS)
+ perl $(EPOCROOT)epoc32/tools/snmtool.pl $(SOURCE_DIRECTORY)/$(SOURCES) $@
+
+DO_NOTHING :
+ @echo do nothing
+
+# the targets below are the public ones
+
+MAKMAKE : DO_NOTHING
+
+BLD : $(TARGET_DIRECTORY) $(TARGET_FILE)
+
+SAVESPACE : BLD
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+CLEAN :
+ -$(ERASE) $(TARGET_FILE)
+
+RELEASABLES :
+ @echo $(TARGET_FILE)
+
+FINAL : DO_NOTHING
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/bafl_copytestfiles.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for bafl_copytestfiles use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/bafl_copytestfiles.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,74 @@
+# Copyright (c) 2007-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:
+# Copy test files to test sortbytable functionality.
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+EPOCDATADIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+else
+EPOCDATADIR=$(EPOCROOT)epoc32/data
+endif
+
+TARGETDIR=$(EPOCDATADIR)/z/system/documents/baflsortbytabletest
+SOURCEDIR=$(EXTENSION_ROOT)/../tsrc
+
+COPYFILES :
+ $(CP) $(call slash2generic,$(SOURCEDIR)/ADDCERT.RSC $(TARGETDIR)/addcert.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/HELP.RSC $(TARGETDIR)/help.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/MSGEDITOR.RSC $(TARGETDIR)/msgeditor.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/SMLPROGRESS.RSC $(TARGETDIR)/smlprogress.rsc)
+
+$(TARGETDIR) :
+ $(call createdir,"$@")
+
+DO_NOTHING :
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+BLD : $(TARGETDIR) COPYFILES
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(TARGETDIR)/addcert.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGETDIR)/help.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGETDIR)/msgeditor.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGETDIR)/smlprogress.rsc)
+
+RELEASABLES :
+ @echo $(TARGETDIR)/addcert.rsc
+ @echo $(TARGETDIR)/help.rsc
+ @echo $(TARGETDIR)/msgeditor.rsc
+ @echo $(TARGETDIR)/smlprogress.rsc
+
+MAKMAKE : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FINAL : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/bafl_resource_files.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for t_copytestfiles use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/bafl_resource_files.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,205 @@
+# Copyright (c) 2007-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:
+# Copy test files to test sortbytable functionality.
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+TARGET_DIRECTORY=$(EPOCROOT)epoc32/release/$(PLATFORM)/$(CFG)/z/system/data
+else
+TARGET_DIRECTORY=$(EPOCROOT)epoc32/data/z/system/data
+endif
+
+SOURCEDIR=$(EXTENSION_ROOT)/../tsrc
+
+$(TARGET_DIRECTORY) :
+ $(call createdir,"$@")
+
+TARGET_FILES=\
+ $(TARGET_DIRECTORY)/t_compressed_unicode_1.rsc $(EPOCROOT)epoc32\include\T_COMPRESSED_UNICODE_1.RSG \
+ $(TARGET_DIRECTORY)/t_compressed_unicode_2.rsc $(EPOCROOT)epoc32\include\T_COMPRESSED_UNICODE_2.RSG \
+ $(TARGET_DIRECTORY)/t_dictionary_compressed_versio_of_2.rsc \
+ $(TARGET_DIRECTORY)/t_calypso_test_resource_file_1.rsc \
+ $(TARGET_DIRECTORY)/t_notrscfile.rsc \
+ $(TARGET_DIRECTORY)/rscheader.bin \
+ $(TARGET_DIRECTORY)/newrscformat.rsc \
+
+$(TARGET_DIRECTORY)/t_compressed_unicode_1.rsc : $(SOURCEDIR)/T_COMPRESSED_UNICODE_1.RPP
+ @RCOMP.EXE -s$? -o$@ -h$(EPOCROOT)epoc32/include/T_COMPRESSED_UNICODE_1.RSG -u -{0x000eb205,*}
+$(EPOCROOT)epoc32/include/T_COMPRESSED_UNICODE_1.RSG : $(SOURCEDIR)/T_COMPRESSED_UNICODE_1.RPP
+ @RCOMP.EXE -s$? -o$(TARGET_DIRECTORY)/t_compressed_unicode_1.rsc -h$@ -u -{0x000eb205,*}
+
+$(TARGET_DIRECTORY)/t_compressed_unicode_2.rsc : $(SOURCEDIR)/T_COMPRESSED_UNICODE_2.RPP
+ @RCOMP.EXE -s$? -o$@ -h$(EPOCROOT)epoc32/include/T_COMPRESSED_UNICODE_2.RSG -u
+$(EPOCROOT)epoc32/include/T_COMPRESSED_UNICODE_2.RSG : $(SOURCEDIR)/T_COMPRESSED_UNICODE_2.RPP
+ @RCOMP.EXE -s$? -o$(TARGET_DIRECTORY)/t_compressed_unicode_2.rsc -h$@ -u
+
+$(TARGET_DIRECTORY)/t_dictionary_compressed_versio_of_2.rsc : $(SOURCEDIR)/T_GENERATE_DICTIONARY_COMPRESSED_VERSION_OF_2.PL
+ @perl -w $(SOURCEDIR)/T_GENERATE_DICTIONARY_COMPRESSED_VERSION_OF_2.PL $(TARGET_DIRECTORY)/t_dictionary_compressed_versio_of_2.rsc
+
+$(TARGET_DIRECTORY)/t_calypso_test_resource_file_1.rsc : $(SOURCEDIR)/T_CALYPSO_COMPILED_RESOURCE_FILE_1.RSC
+ $(CP) $(call slash2generic,$(SOURCEDIR)/T_CALYPSO_COMPILED_RESOURCE_FILE_1.RSC $(TARGET_DIRECTORY)/t_calypso_test_resource_file_1.rsc)
+
+$(TARGET_DIRECTORY)/t_notrscfile.rsc : $(SOURCEDIR)/T_NotRscFile.RSC
+ $(CP) $(call slash2generic,$(SOURCEDIR)/T_NotRscFile.RSC $(TARGET_DIRECTORY)/t_notrscfile.rsc)
+
+$(TARGET_DIRECTORY)/rscheader.bin :
+ $(CP) $(call slash2generic,$(SOURCEDIR)/RscHeader.Bin $(TARGET_DIRECTORY)/rscheader.bin)
+
+$(TARGET_DIRECTORY)/newrscformat.rsc : $(SOURCEDIR)/RscHeader.Bin $(SOURCEDIR)/RLETest.BMP $(TARGET_DIRECTORY)/TRSC.rsc
+ @BMCONV.EXE $(SOURCEDIR)/16RAMC.MBM /c16$(SOURCEDIR)/RLETest.BMP
+ $(CP) $(call slash2generic,$(SOURCEDIR)/RscHeader.Bin)/b + $(call slash2generic,$(TARGET_DIRECTORY)/TRSC.rsc)/b + $(call slash2generic,$(SOURCEDIR)/16RAMC.MBM) /b $(call slash2generic,$(TARGET_DIRECTORY)/newrscformat.rsc)
+
+COPYFILES :
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv1.RSC $(TARGET_DIRECTORY)/trsc_inv1.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv2.RSC $(TARGET_DIRECTORY)/trsc_inv2.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv3.RSC $(TARGET_DIRECTORY)/trsc_inv3.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv4.RSC $(TARGET_DIRECTORY)/trsc_inv4.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv5.RSC $(TARGET_DIRECTORY)/trsc_inv5.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv6.RSC $(TARGET_DIRECTORY)/trsc_inv6.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv7.RSC $(TARGET_DIRECTORY)/trsc_inv7.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv8.RSC $(TARGET_DIRECTORY)/trsc_inv8.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRSC_Inv9.RSC $(TARGET_DIRECTORY)/trsc_inv9.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscCalypso_Inv10.RSC $(TARGET_DIRECTORY)/trsccalypso_inv10.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscCalypso_Inv11.RSC $(TARGET_DIRECTORY)/trsccalypso_inv11.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscCalypso_Inv12.RSC $(TARGET_DIRECTORY)/trsccalypso_inv12.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscComprU_Inv13.RSC $(TARGET_DIRECTORY)/trsccompru_inv13.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscComprU_Inv14.RSC $(TARGET_DIRECTORY)/trsccompru_inv14.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscComprU_Inv15.RSC $(TARGET_DIRECTORY)/trsccompru_inv15.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscCalypso_Inv16.RSC $(TARGET_DIRECTORY)/trsccalypso_inv16.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/TRscCalypso_Inv17.RSC $(TARGET_DIRECTORY)/trsccalypso_inv17.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/RscHeader.Bin)/b + $(call slash2generic,$(TARGET_DIRECTORY)/t_calypso_test_resource_file_1.rsc)/b $(call slash2generic,$(TARGET_DIRECTORY)/trscromcalypsocomprnewfmt.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_ECom.spi $(TARGET_DIRECTORY)/spi_ecom.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_EComRsc1.RSC $(TARGET_DIRECTORY)/spi_ecomrsc1.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_EComRsc2.RSC $(TARGET_DIRECTORY)/spi_ecomrsc2.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_EComRsc3.RSC $(TARGET_DIRECTORY)/spi_ecomrsc3.rsc)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/ECom-1-0.spi $(TARGET_DIRECTORY)/ecom-1-0.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/ECom-1-0.s02 $(TARGET_DIRECTORY)/ecom-1-0.s02)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/ECom-2-0.spi $(TARGET_DIRECTORY)/ecom-2-0.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/ECom-2-0.s02 $(TARGET_DIRECTORY)/ecom-2-0.s02)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_ECom-0-0.spi $(TARGET_DIRECTORY)/spi_ecom-0-0.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_ECom-1-0.spi $(TARGET_DIRECTORY)/spi_ecom-1-0.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/CECom-0-0.spi $(TARGET_DIRECTORY)/cecom-0-0.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/CECom-1-0.spi $(TARGET_DIRECTORY)/cecom-1-0.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_ECom_Case-0-0.spi $(TARGET_DIRECTORY)/spi_ecom_case-0-0.spi)
+ $(CP) $(call slash2generic,$(SOURCEDIR)/Spi_ECom_Case-1-0.spi $(TARGET_DIRECTORY)/spi_ecom_case-1-0.spi)
+
+
+DO_NOTHING :
+ @echo do nothing
+
+# the targets below are the public ones
+
+MAKMAKE : DO_NOTHING
+
+BLD : $(TARGET_DIRECTORY) $(TARGET_FILES) COPYFILES
+
+SAVESPACE : BLD
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/t_compressed_unicode_1.rsc $(EPOCROOT)epoc32/include/t_compressed_unicode_1.rsg)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/t_compressed_unicode_2.rsc $(EPOCROOT)epoc32/include/t_compressed_unicode_2.rsg)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/t_dictionary_compressed_versio_of_2.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/t_calypso_test_resource_file_1.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/t_notrscfile.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/rscheader.bin)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/newrscformat.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv1.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv2.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv3.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv4.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv5.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv6.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv7.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv8.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsc_inv9.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccalypso_inv10.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccalypso_inv11.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccalypso_inv12.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccompru_inv13.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccompru_inv14.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccompru_inv15.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccalypso_inv16.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trsccalypso_inv17.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/trscromcalypsocomprnewfmt.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecom.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecomrsc1.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecomrsc2.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecomrsc3.rsc)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/ecom-1-0.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/ecom-1-0.s02)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/ecom-2-0.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/ecom-2-0.s02)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecom-0-0.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecom-1-0.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/cecom-0-0.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/cecom-1-0.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecom_case-0-0.spi)
+ -$(ERASE) $(call slash2generic,$(TARGET_DIRECTORY)/spi_ecom_case-1-0.spi)
+
+RELEASABLES :
+ @echo $(TARGET_DIRECTORY)/t_compressed_unicode_1.rsc $(EPOCROOT)epoc32/include/t_compressed_unicode_1.rsg
+ @echo $(TARGET_DIRECTORY)/t_compressed_unicode_2.rsc $(EPOCROOT)epoc32/include/t_compressed_unicode_2.rsg
+ @echo $(TARGET_DIRECTORY)/t_dictionary_compressed_versio_of_2.rsc
+ @echo $(TARGET_DIRECTORY)/t_calypso_test_resource_file_1.rsc
+ @echo $(TARGET_DIRECTORY)/t_notrscfile.rsc
+ @echo $(TARGET_DIRECTORY)/rscheader.bin
+ @echo $(TARGET_DIRECTORY)/newrscformat.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv1.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv2.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv3.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv4.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv5.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv6.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv7.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv8.rsc
+ @echo $(TARGET_DIRECTORY)/trsc_inv9.rsc
+ @echo $(TARGET_DIRECTORY)/trsccalypso_inv10.rsc
+ @echo $(TARGET_DIRECTORY)/trsccalypso_inv11.rsc
+ @echo $(TARGET_DIRECTORY)/trsccalypso_inv12.rsc
+ @echo $(TARGET_DIRECTORY)/trsccompru_inv13.rsc
+ @echo $(TARGET_DIRECTORY)/trsccompru_inv14.rsc
+ @echo $(TARGET_DIRECTORY)/trsccompru_inv15.rsc
+ @echo $(TARGET_DIRECTORY)/trsccalypso_inv16.rsc
+ @echo $(TARGET_DIRECTORY)/trsccalypso_inv17.rsc
+ @echo $(TARGET_DIRECTORY)/trscromcalypsocomprnewfmt.rsc
+ @echo $(TARGET_DIRECTORY)/spi_ecom.spi
+ @echo $(TARGET_DIRECTORY)/spi_ecomrsc1.rsc
+ @echo $(TARGET_DIRECTORY)/spi_ecomrsc2.rsc
+ @echo $(TARGET_DIRECTORY)/spi_ecomrsc3.rsc
+ @echo $(TARGET_DIRECTORY)/ecom-1-0.spi
+ @echo $(TARGET_DIRECTORY)/ecom-1-0.s02
+ @echo $(TARGET_DIRECTORY)/ecom-2-0.spi
+ @echo $(TARGET_DIRECTORY)/ecom-2-0.s02
+ @echo $(TARGET_DIRECTORY)/spi_ecom-0-0.spi
+ @echo $(TARGET_DIRECTORY)/spi_ecom-1-0.spi
+ @echo $(TARGET_DIRECTORY)/cecom-0-0.spi
+ @echo $(TARGET_DIRECTORY)/cecom-1-0.spi
+ @echo $(TARGET_DIRECTORY)/spi_ecom_case-0-0.spi
+ @echo $(TARGET_DIRECTORY)/spi_ecom_case-1-0.spi
+
+FINAL : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copydatfile.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for centrep_copydatfile use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copydatfile.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,70 @@
+# Copyright (c) 2007-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ EPOCDATADIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+else
+ EPOCDATADIR=$(EPOCROOT)epoc32/data
+endif
+
+TARGETDIR = $(EPOCDATADIR)/z/resource
+SOURCEDIR = $(EXTENSION_ROOT)/../data/certstore
+
+FILE = swicertstore.dat
+
+$(TARGETDIR) :
+ $(call createdir, "$@")
+
+COPYFILES : $(FILE)
+
+ $(call forcecopy,$(SOURCEDIR)/$^,$(TARGETDIR)/$^)
+
+$(FILE) :
+
+DO_NOTHING:
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+BLD : $(TARGETDIR) COPYFILES
+
+CLEAN :
+ $(call forceremove,$(TARGETDIR)/swicertstore.dat)
+
+RELEASABLES :
+ @echo $(TARGETDIR)/swicertstore.dat
+
+MAKMAKE : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+ROMFILE : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copyincentrepsrv.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for centrep_copyincentrepsrv use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copyincentrepsrv.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,74 @@
+# Copyright (c) 2007-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+CENTREPSRVSRCDIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+CENTREPSRVTGTDIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/sys/bin
+
+FILE = centralrepositorysrv.exe
+
+$(CENTREPSRVTGTDIR) :
+ $(call createdir, "$(CENTREPSRVTGTDIR)")
+
+COPYFILE : $(FILE)
+ $(call forcecopy,$(CENTREPSRVSRCDIR)/$^,$(CENTREPSRVTGTDIR))
+
+$(FILE):
+endif
+
+DO_NOTHING :
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+BLD : $(CENTREPSRVTGTDIR) $(CENTREPSRVSRCDIR) COPYFILE
+
+CLEAN : $(FILE)
+ $(call forceremove,$(CENTREPSRVTGTDIR)/$^)
+
+RELEASABLES : $(FILE)
+ @echo $(CENTREPSRVTGTDIR)/$^
+
+else
+BLD : DO_NOTHING
+
+CLEAN : DO_NOTHING
+
+RELEASABLES : DO_NOTHING
+endif
+
+MAKMAKE : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+ROMFILE : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copypctestfile.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2008-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:
+# Meta information for centrep_copypctestfile use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copypctestfile.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,203 @@
+# Copyright (c) 2008-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ EPOCDATADIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+else
+ EPOCDATADIR = $(EPOCROOT)epoc32/data
+endif
+
+SECURETARGETDIR = $(EPOCDATADIR)/z/private/10202BE9
+
+PCCENREPSOURCE = $(EXTENSION_ROOT)/../test
+PCCENREPDATADIR = $(EPOCROOT)epoc32/winscw/c/private/00000000
+PCCENREPTESTDIR = $(EPOCROOT)epoc32/winscw/c
+PCCENREPPCTESTDIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+
+$(SECURETARGETDIR) :
+ $(call createdir, "$@")
+
+$(PCCENREPDATADIR) :
+ $(call createdir, "$@")
+
+COPYFILES :
+ifneq ($(findstring TOOLS2,$(PLATFORM)),TOOLS2)
+
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(SECURETARGETDIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.cre,$(SECURETARGETDIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.cre,$(SECURETARGETDIR)/000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888880.txt,$(SECURETARGETDIR)/88888880.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888881.cre,$(SECURETARGETDIR)/88888881.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(SECURETARGETDIR)/00022222.txt)
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPDATADIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.cre,$(PCCENREPDATADIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.cre,$(PCCENREPDATADIR)/000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888880.txt,$(PCCENREPDATADIR)/88888880.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888881.cre,$(PCCENREPDATADIR)/88888881.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwcre.cre,$(PCCENREPDATADIR)/ref_winscwcre.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwtxt.cre,$(PCCENREPDATADIR)/ref_winscwtxt.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPDATADIR)/copy000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.cre,$(PCCENREPDATADIR)/copy00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.cre,$(PCCENREPDATADIR)/copy000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(PCCENREPDATADIR)/00022222.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.cre,$(PCCENREPDATADIR)/copy00022222.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPTESTDIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.cre,$(PCCENREPTESTDIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.cre,$(PCCENREPTESTDIR)/copy00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(PCCENREPTESTDIR)/00022222.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.cre,$(PCCENREPTESTDIR)/copy00022222.cre)
+endif
+
+else
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPPCTESTDIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.cre,$(PCCENREPPCTESTDIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPPCTESTDIR)/copy000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.cre,$(PCCENREPPCTESTDIR)/copy00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.cre,$(PCCENREPPCTESTDIR)/000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.cre,$(PCCENREPPCTESTDIR)/copy000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwcre.cre,$(PCCENREPPCTESTDIR)/ref_winscwcre.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwtxt.cre,$(PCCENREPPCTESTDIR)/ref_winscwtxt.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888880.txt,$(PCCENREPPCTESTDIR)/88888880.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888881.cre,$(PCCENREPPCTESTDIR)/88888881.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(PCCENREPPCTESTDIR)/00022222.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.cre,$(PCCENREPPCTESTDIR)/copy00022222.cre)
+
+endif
+
+DO_NOTHING:
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+BLD : $(SECURETARGETDIR) $(PCCENREPDATADIR) $(PCCENREPTESTDIR) $(PCCENREPSOURCE) $(PCCENREPPCTESTDIR) COPYFILES
+
+CLEAN :
+
+ifneq ($(findstring TOOLS2,$(PLATFORM)),TOOLS2)
+
+ $(call forceremove,$(SECURETARGETDIR)/000001ff.txt)
+ $(call forceremove,$(SECURETARGETDIR)/00001fff.cre)
+ $(call forceremove,$(SECURETARGETDIR)/000002ff.cre)
+ $(call forceremove,$(SECURETARGETDIR)/88888880.txt)
+ $(call forceremove,$(SECURETARGETDIR)/88888881.cre)
+ $(call forceremove,$(SECURETARGETDIR)/00022222.txt)
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ $(call forceremove,$(PCCENREPDATADIR)/000001ff.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/00001fff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/000002ff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/88888880.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/88888881.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/ref_winscwcre.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/ref_winscwtxt.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/copy000001ff.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/copy00001fff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/copy000002ff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/00022222.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/copy00022222.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/000001ff.txt)
+ $(call forceremove,$(PCCENREPTESTDIR)/00001fff.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/copy00001fff.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/00022222.txt)
+ $(call forceremove,$(PCCENREPTESTDIR)/copy00022222.cre)
+
+endif
+
+else
+ $(call forceremove,$(PCCENREPPCTESTDIR)/000001ff.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/00001fff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy000001ff.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy00001fff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/000002ff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy000002ff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/ref_winscwcre.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/ref_winscwtxt.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/88888880.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/88888881.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/00022222.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy00022222.cre)
+
+endif
+
+RELEASABLES :
+ifneq ($(findstring TOOLS2,$(PLATFORM)),TOOLS2)
+
+ @echo $(SECURETARGETDIR)/000001ff.txt
+ @echo $(SECURETARGETDIR)/00001fff.cre
+ @echo $(SECURETARGETDIR)/000002ff.cre
+ @echo $(SECURETARGETDIR)/88888880.txt
+ @echo $(SECURETARGETDIR)/88888881.cre
+ @echo $(SECURETARGETDIR)/00022222.txt
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ @echo $(PCCENREPDATADIR)/000001ff.txt
+ @echo $(PCCENREPDATADIR)/00001fff.cre
+ @echo $(PCCENREPDATADIR)/000002ff.cre
+ @echo $(PCCENREPDATADIR)/88888880.txt
+ @echo $(PCCENREPDATADIR)/88888881.cre
+ @echo $(PCCENREPDATADIR)/ref_winscwcre.cre
+ @echo $(PCCENREPDATADIR)/ref_winscwtxt.cre
+ @echo $(PCCENREPDATADIR)/copy000001ff.txt
+ @echo $(PCCENREPDATADIR)/copy00001fff.cre
+ @echo $(PCCENREPDATADIR)/copy000002ff.cre
+ @echo $(PCCENREPDATADIR)/00022222.txt
+ @echo $(PCCENREPDATADIR)/copy00022222.cre
+ @echo $(PCCENREPTESTDIR)/000001ff.txt
+ @echo $(PCCENREPTESTDIR)/00001fff.cre
+ @echo $(PCCENREPTESTDIR)/copy00001fff.cre
+ @echo $(PCCENREPTESTDIR)/00022222.txt
+ @echo $(PCCENREPTESTDIR)/copy00022222.cre
+
+endif
+
+else
+ @echo $(PCCENREPPCTESTDIR)/000001ff.txt
+ @echo $(PCCENREPPCTESTDIR)/00001fff.cre
+ @echo $(PCCENREPPCTESTDIR)/copy000001ff.txt
+ @echo $(PCCENREPPCTESTDIR)/copy00001fff.cre
+ @echo $(PCCENREPPCTESTDIR)/000002ff.cre
+ @echo $(PCCENREPPCTESTDIR)/copy000002ff.cre
+ @echo $(PCCENREPPCTESTDIR)/ref_winscwcre.cre
+ @echo $(PCCENREPPCTESTDIR)/ref_winscwtxt.cre
+ @echo $(PCCENREPPCTESTDIR)/88888880.txt
+ @echo $(PCCENREPPCTESTDIR)/88888881.cre
+ @echo $(PCCENREPPCTESTDIR)/00022222.txt
+ @echo $(PCCENREPPCTESTDIR)/copy00022222.cre
+endif
+
+MAKMAKE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+ROMFILE : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copypctestfilev2.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2008-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:
+# centrep_copypctestfile.meta
+# Meta information for centrep_copypctestfile use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/centrep_copypctestfilev2.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,238 @@
+# Copyright (c) 2008-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:
+# centrep_copypctestfile.mk
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ EPOCDATADIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+else
+ EPOCDATADIR = $(EPOCROOT)epoc32/data
+endif
+
+SECURETARGETDIR = $(EPOCDATADIR)/z/private/10202BE9
+
+PCCENREPSOURCE = $(EXTENSION_ROOT)/../test
+PCCENREPDATADIR = $(EPOCROOT)epoc32/winscw/c/private/00000000
+PCCENREPTESTDIR = $(EPOCROOT)epoc32/winscw/c
+PCCENREPPCTESTDIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+
+$(SECURETARGETDIR) :
+ $(call createdir, "$@")
+
+$(PCCENREPDATADIR) :
+ $(call createdir, "$@")
+
+COPYFILES :
+ifneq ($(findstring TOOLS2,$(PLATFORM)),TOOLS2)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(SECURETARGETDIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.crev2,$(SECURETARGETDIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.crev2,$(SECURETARGETDIR)/000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888880.txt,$(SECURETARGETDIR)/88888880.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888881.cre,$(SECURETARGETDIR)/88888881.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00004fff.cre,$(SECURETARGETDIR)/00004fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(SECURETARGETDIR)/00022222.txt)
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPDATADIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.crev2,$(PCCENREPDATADIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.crev2,$(PCCENREPDATADIR)/000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888880.txt,$(PCCENREPDATADIR)/88888880.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888881.cre,$(PCCENREPDATADIR)/88888881.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwcre.crev2,$(PCCENREPDATADIR)/ref_winscwcre.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwtxt.crev2,$(PCCENREPDATADIR)/ref_winscwtxt.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPDATADIR)/copy000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.crev2,$(PCCENREPDATADIR)/copy00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.crev2,$(PCCENREPDATADIR)/copy000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00004fff.cre,$(PCCENREPDATADIR)/00004fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00004fff.cre,$(PCCENREPDATADIR)/copy00004fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(PCCENREPDATADIR)/00022222.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.crev2,$(PCCENREPDATADIR)/copy00022222.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPTESTDIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.crev2,$(PCCENREPTESTDIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.crev2,$(PCCENREPTESTDIR)/copy00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00004fff.cre,$(PCCENREPTESTDIR)/00004fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00004fff.cre,$(PCCENREPTESTDIR)/copy00004fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(PCCENREPTESTDIR)/00022222.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.crev2,$(PCCENREPTESTDIR)/copy00022222.cre)
+# Shared files between the t_cenreppc (WINSCW) and testsymcenrep (TOOLS2) tests.
+ $(call forcecopy,$(PCCENREPSOURCE)/common_crc.txt,$(PCCENREPTESTDIR)/common_crc.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/common_ref_00022222.cre,$(PCCENREPDATADIR)/common_ref_00022222.cre)
+endif
+
+# TOOLS2
+else
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPPCTESTDIR)/000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.crev2,$(PCCENREPPCTESTDIR)/00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00004fff.cre,$(PCCENREPPCTESTDIR)/00004fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000001ff.txt,$(PCCENREPPCTESTDIR)/copy000001ff.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00001fff.crev2,$(PCCENREPPCTESTDIR)/copy00001fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00004fff.cre,$(PCCENREPPCTESTDIR)/copy00004fff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.crev2,$(PCCENREPPCTESTDIR)/000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/000002ff.crev2,$(PCCENREPPCTESTDIR)/copy000002ff.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwcre.crev2,$(PCCENREPPCTESTDIR)/ref_winscwcre.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/winscwtxt.crev2,$(PCCENREPPCTESTDIR)/ref_winscwtxt.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888880.txt,$(PCCENREPPCTESTDIR)/88888880.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/88888881.cre,$(PCCENREPPCTESTDIR)/88888881.cre)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.txt,$(PCCENREPPCTESTDIR)/00022222.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/00022222.crev2,$(PCCENREPPCTESTDIR)/copy00022222.cre)
+# Shared files between the t_cenreppc (WINSCW) and testsymcenrep (TOOLS2) tests.
+ $(call forcecopy,$(PCCENREPSOURCE)/common_crc.txt,$(PCCENREPTESTDIR)/common_crc.txt)
+ $(call forcecopy,$(PCCENREPSOURCE)/common_ref_00022222.cre,$(PCCENREPDATADIR)/common_ref_00022222.cre)
+endif
+
+DO_NOTHING:
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+BLD : $(SECURETARGETDIR) $(PCCENREPDATADIR) $(PCCENREPTESTDIR) $(PCCENREPSOURCE) $(PCCENREPPCTESTDIR) COPYFILES
+
+CLEAN :
+
+ifneq ($(findstring TOOLS2,$(PLATFORM)),TOOLS2)
+ $(call forceremove,$(SECURETARGETDIR)/000001ff.txt)
+ $(call forceremove,$(SECURETARGETDIR)/00001fff.cre)
+ $(call forceremove,$(SECURETARGETDIR)/000002ff.cre)
+ $(call forceremove,$(SECURETARGETDIR)/88888880.txt)
+ $(call forceremove,$(SECURETARGETDIR)/88888881.cre)
+ $(call forceremove,$(SECURETARGETDIR)/00004fff.cre)
+ $(call forceremove,$(SECURETARGETDIR)/00022222.txt)
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ $(call forceremove,$(PCCENREPDATADIR)/000001ff.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/00001fff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/000002ff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/88888880.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/88888881.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/ref_winscwcre.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/ref_winscwtxt.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/copy000001ff.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/copy00001fff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/copy000002ff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/00004fff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/copy00004fff.cre)
+ $(call forceremove,$(PCCENREPDATADIR)/00022222.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/copy00022222.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/000001ff.txt)
+ $(call forceremove,$(PCCENREPTESTDIR)/00001fff.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/copy00001fff.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/00004fff.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/copy00004fff.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/00022222.txt)
+ $(call forceremove,$(PCCENREPTESTDIR)/copy00022222.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/common_crc.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/common_ref_00022222.cre)
+endif
+
+
+# TOOLS2
+else
+ $(call forceremove,$(PCCENREPPCTESTDIR)/000001ff.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/00001fff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/00004fff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy000001ff.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy00001fff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/000002ff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy000002ff.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/ref_winscwcre.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/ref_winscwtxt.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/88888880.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/88888881.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/00022222.txt)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy00022222.cre)
+ $(call forceremove,$(PCCENREPPCTESTDIR)/copy00004fff.cre)
+ $(call forceremove,$(PCCENREPTESTDIR)/common_crc.txt)
+ $(call forceremove,$(PCCENREPDATADIR)/common_ref_00022222.cre)
+
+endif
+
+RELEASABLES :
+ifneq ($(findstring TOOLS2,$(PLATFORM)),TOOLS2)
+ @echo $(SECURETARGETDIR)/000001ff.txt
+ @echo $(SECURETARGETDIR)/00001fff.cre
+ @echo $(SECURETARGETDIR)/000002ff.cre
+ @echo $(SECURETARGETDIR)/88888880.txt
+ @echo $(SECURETARGETDIR)/88888881.cre
+ @echo $(SECURETARGETDIR)/00004fff.cre
+ @echo $(SECURETARGETDIR)/00022222.txt
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ @echo $(PCCENREPDATADIR)/000001ff.txt
+ @echo $(PCCENREPDATADIR)/00001fff.cre
+ @echo $(PCCENREPDATADIR)/000002ff.cre
+ @echo $(PCCENREPDATADIR)/88888880.txt
+ @echo $(PCCENREPDATADIR)/88888881.cre
+ @echo $(PCCENREPDATADIR)/ref_winscwcre.cre
+ @echo $(PCCENREPDATADIR)/ref_winscwtxt.cre
+ @echo $(PCCENREPDATADIR)/copy000001ff.txt
+ @echo $(PCCENREPDATADIR)/copy00001fff.cre
+ @echo $(PCCENREPDATADIR)/copy000002ff.cre
+ @echo $(PCCENREPDATADIR)/00004fff.cre
+ @echo $(PCCENREPDATADIR)/copy00004fff.cre
+ @echo $(PCCENREPDATADIR)/00022222.txt
+ @echo $(PCCENREPDATADIR)/copy00022222.cre
+ @echo $(PCCENREPTESTDIR)/000001ff.txt
+ @echo $(PCCENREPTESTDIR)/00001fff.cre
+ @echo $(PCCENREPTESTDIR)/copy00001fff.cre
+ @echo $(PCCENREPTESTDIR)/00004fff.cre
+ @echo $(PCCENREPTESTDIR)/copy00004fff.cre
+ @echo $(PCCENREPTESTDIR)/00022222.txt
+ @echo $(PCCENREPTESTDIR)/copy00022222.cre
+ @echo $(PCCENREPTESTDIR)/common_crc.txt
+ @echo $(PCCENREPDATADIR)/common_ref_00022222.cre
+endif
+
+# TOOLS2
+else
+ @echo $(PCCENREPPCTESTDIR)/000001ff.txt
+ @echo $(PCCENREPPCTESTDIR)/00001fff.cre
+ @echo $(PCCENREPPCTESTDIR)/copy000001ff.txt
+ @echo $(PCCENREPPCTESTDIR)/copy00001fff.cre
+ @echo $(PCCENREPPCTESTDIR)/000002ff.cre
+ @echo $(PCCENREPPCTESTDIR)/copy000002ff.cre
+ @echo $(PCCENREPPCTESTDIR)/ref_winscwcre.cre
+ @echo $(PCCENREPPCTESTDIR)/ref_winscwtxt.cre
+ @echo $(PCCENREPPCTESTDIR)/88888880.txt
+ @echo $(PCCENREPPCTESTDIR)/88888881.cre
+ @echo $(PCCENREPPCTESTDIR)/00022222.txt
+ @echo $(PCCENREPPCTESTDIR)/copy00022222.cre
+ @echo $(PCCENREPPCTESTDIR)/copy00004fff.cre
+ @echo $(PCCENREPTESTDIR)/common_crc.txt
+ @echo $(PCCENREPDATADIR)/common_ref_00022222.cre
+
+endif
+
+MAKMAKE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+ROMFILE : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/charconv_testpostbuild.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2007-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:
+# charconv_tiso8859x_generate_cpp.meta
+# Meta information for charconv_tiso8859x_generate_cpp use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/charconv_testpostbuild.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,74 @@
+# Copyright (c) 2007-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:
+# This postbuild script is only called when a Test Build is done. It deletes the KDDI/AU versions of the shiftjis and j5 plugin RSC file, so
+# that only the Docomo versions remain. This removed ambiguity over which one will load during tests - a seperate version of the KDDI/AU
+# plugins is created for test build, with a unique UID number so they may coexist for test purposes.
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+# Only remove files on emulator build - for hardware, iby file selects correct plugin.
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ TARGETDIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/resource/plugins
+
+ TARGET_FILES = \
+ $(TARGETDIR)/shiftjis_kddiau.rsc \
+ $(TARGETDIR)/j5_kddiau.rsc \
+ $(TARGETDIR)/eucjp_packed_2.rsc \
+ $(TARGETDIR)/iso2022jp_2.rsc \
+ $(TARGETDIR)/iso2022jp1_2.rsc \
+ $(TARGETDIR)/j5_kddiau_2.rsc \
+ $(TARGETDIR)/jis_2.rsc\
+ $(TARGETDIR)/shiftjis_kddiau_2.rsc
+
+ TARGET_FILES:=$(subst /,\,$(TARGET_FILES))
+endif
+
+DO_NOTHING :
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+BLD :
+ @echo Below rsc files will be deleted to remove ambiguity in testing:
+ @echo $(TARGET_FILES)
+ -$(ERASE) $(TARGET_FILES)
+else
+BLD : DO_NOTHING
+endif
+
+RELEASABLES : DO_NOTHING
+
+MAKMAKE : DO_NOTHING
+
+CLEAN : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FINAL : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/charconv_tiso8859x_generate_cpp.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for charconv_tiso8859x_generate_cpp use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/charconv_tiso8859x_generate_cpp.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,73 @@
+# Copyright (c) 2007-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+TARGET_DIRECTORY = $(EXTENSION_ROOT)/../test/rtest/tsrc/main
+
+TEXT_FILE_DIRECTORY = $(EXTENSION_ROOT)/../data
+
+TARGET_CPP_FILES = $(TARGET_DIRECTORY)/g_tiso8859x.cpp
+
+TOOLS = $(EXTENSION_ROOT)/../test/rtest/tsrc/main/tiso8859x_generate_cpp.pl
+
+$(TARGET_DIRECTORY) :
+
+$(TARGET_DIRECTORY)/g_tiso8859x.cpp : $(TOOLS) \
+ $(TEXT_FILE_DIRECTORY)/iso88592.txt \
+ $(TEXT_FILE_DIRECTORY)/iso88593.txt \
+ $(TEXT_FILE_DIRECTORY)/iso88594.txt \
+ $(TEXT_FILE_DIRECTORY)/iso88595.txt \
+ $(TEXT_FILE_DIRECTORY)/iso88596.txt \
+ $(TEXT_FILE_DIRECTORY)/iso88597.txt \
+ $(TEXT_FILE_DIRECTORY)/iso88598.txt \
+ $(TEXT_FILE_DIRECTORY)/iso88599.txt \
+ $(TEXT_FILE_DIRECTORY)/iso885910.txt \
+ $(TEXT_FILE_DIRECTORY)/iso885913.txt \
+ $(TEXT_FILE_DIRECTORY)/iso885914.txt \
+ $(TEXT_FILE_DIRECTORY)/iso885915.txt
+ @perl -w $(call slash2generic, $(EXTENSION_ROOT)/../test/rtest/tsrc/main/tiso8859x_generate_cpp.pl '$(EXTENSION_ROOT)')
+
+DO_NOTHING :
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+MAKMAKE : $(TARGET_DIRECTORY) $(TARGET_CPP_FILES)
+
+BLD : $(TARGET_DIRECTORY) $(TARGET_CPP_FILES)
+
+SAVESPACE : BLD
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+CLEAN :
+ -$(ERASE) $(TARGET_CPP_FILES)
+
+RELEASABLES :
+ @echo $(TARGET_CPP_FILES)
+
+FINAL : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/charconv_tsnmdata.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for charconv_tsnmdata use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/charconv_tsnmdata.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,68 @@
+# Copyright (c) 1997-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ TARGET_DIRECTORY = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/resource/charconv
+else
+ TARGET_DIRECTORY = $(EPOCROOT)epoc32/data/z/resource/charconv
+endif
+
+TARGET_FILES = $(TARGET_DIRECTORY)/tsnm.snm
+
+SOURCE_DIRECTORY = $(EXTENSION_ROOT)/../test/data/main
+
+TOOLS = \
+ $(EPOCROOT)epoc32/tools/PARSER.PM \
+ $(EPOCROOT)epoc32/tools/WRITER.PM \
+ $(EPOCROOT)epoc32/tools/snmtool.pl
+
+$(TARGET_DIRECTORY) :
+ $(call createdir,"$@")
+
+$(TARGET_FILES) : $(SOURCE_DIRECTORY)/tsnm.txt $(TOOLS)
+ perl $(EPOCROOT)epoc32/tools/snmtool.pl $(SOURCE_DIRECTORY)/tsnm.txt $@
+DO_NOTHING :
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+MAKMAKE : DO_NOTHING
+
+BLD : $(TARGET_DIRECTORY) $(TARGET_FILES)
+
+SAVESPACE : BLD
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+CLEAN :
+ -$(ERASE) $(TARGET_FILES)
+
+RELEASABLES :
+ @echo $(TARGET_FILES)
+
+FINAL : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/ecom3_buildsis.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2008-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:
+# Meta information for the ecom3_buildsis extension template
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/ecom3_buildsis.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,60 @@
+# Copyright (c) 2008-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:
+# Params:
+# SOURCES - list of .pkg files
+# TARGET - not used
+# OPTION OUTDIR - mandatory, it is tef_ecomswi
+# OPTION INDIR - mandatory, path relative to bld.inf containing the
+# .pkg files.
+# OPTION CERTPEM - mandatory
+# OPTION CERTKEY - mandatory
+# OPTION STUBLIST - mandatory, identify stubs in $(SOURCES)
+# OPTION SCRIPTNAME - mandatory, perl script to build SIS. Must be in
+# same dir as .pkg files.
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+CERTPEM := $(subst /,$(/),$(CERTPEM))
+CERTKEY := $(subst /,$(/),$(CERTKEY))
+OUTDIR := $(subst /,$(/),$(OUTDIR))
+INDIR := $(subst /,$(/),$(INDIR))
+BASEDIR := $(EXTENSION_ROOT)/$(INDIR)
+
+TARGETS := $(shell perl $(BASEDIR)/$(SCRIPTNAME) -platform $(PLATFORM_PATH) -cfg $(CFG_PATH) -outdir $(OUTDIR) -maketrgt RELEASABLES -sources "$(SOURCES)" -stublist "$(STUBLIST)")
+EXTRA := $(shell perl $(BASEDIR)/$(SCRIPTNAME) -platform $(PLATFORM_PATH) -cfg $(CFG_PATH) -outdir $(OUTDIR) -maketrgt EXTRATARGET -sources "$(SOURCES)" -stublist "$(STUBLIST)")
+
+
+$(TARGETS) :
+ @perl $(call slash2generic, $(BASEDIR)/$(SCRIPTNAME)) -basedir $(BASEDIR) -platform $(PLATFORM_PATH) -cfg $(CFG_PATH) -certpem $(CERTPEM) -certkey $(CERTKEY) -maketrgt FINAL $@
+
+#
+# The targets invoked by abld...
+#
+FINAL : $(TARGETS)
+
+BLD MAKMAKE SAVESPACE FREEZE LIB CLEANLIB RESOURCE :
+ @echo do nothing
+
+CLEAN :
+ -$(ERASE) $(TARGETS) $(EXTRA)
+
+RELEASABLES :
+ @echo $(TARGETS) $(EXTRA)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/ecom3_postbuild.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for ecom3_postbuild use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/ecom3_postbuild.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,353 @@
+# Copyright (c) 2007-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z
+RAMONLYTARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/ramonly
+SOURCEDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+SOURCEDIR2=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/resource/plugins
+else
+TARGETDIR=$(EPOCROOT)epoc32/data/z
+RAMONLYTARGETDIR=$(EPOCROOT)epoc32/data/z/ramonly
+SOURCEDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+SOURCEDIR2=$(EPOCROOT)epoc32/data/z/resource/plugins
+endif
+
+DO_NOTHING:
+ @echo do_nothing
+
+$(RAMONLYTARGETDIR) :
+ $(call createdir,"$@")
+
+COPYFILES :
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/HeapTestImpl.dll $(TARGETDIR)/heaptestimpl.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/HeapTestImpl.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample5.dll $(RAMONLYTARGETDIR)/ecomexample5.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample5.dll $(RAMONLYTARGETDIR)/invalidsidplugin.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample5.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample12.dll $(RAMONLYTARGETDIR)/ecomexample12.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample12.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample12Upgraded.dll $(RAMONLYTARGETDIR)/ecomexample12Upgraded.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample12Upgraded.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample12Downgraded.dll $(RAMONLYTARGETDIR)/ecomexample12Downgraded.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample12Downgraded.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample14.dll $(RAMONLYTARGETDIR)/ecomexample14.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample14.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample14Upgraded.dll $(RAMONLYTARGETDIR)/ecomexample14Upgraded.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample14Upgraded.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample15.dll $(RAMONLYTARGETDIR)/ecomexample15.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample15.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExampleBadData.dll $(RAMONLYTARGETDIR)/ecomexamplebaddata.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExampleBadData.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExampleBadData1.dll $(RAMONLYTARGETDIR)/ecomexamplebaddata1.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExampleBadData1.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExampleBadData2.dll $(RAMONLYTARGETDIR)/ecomexamplebaddata2.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExampleBadData2.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample3.dll $(RAMONLYTARGETDIR)/ecomexample3.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample2.dll $(RAMONLYTARGETDIR)/ecomexample2.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample.dll $(RAMONLYTARGETDIR)/ecomexample.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComNullExample.dll $(RAMONLYTARGETDIR)/ecomnullexample.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComRomOnlyExampleOnC.dll $(RAMONLYTARGETDIR)/ecomromonlyexampleonc.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComRomOnlyExampleOnC.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComRomRslvrExampleOnC.dll $(RAMONLYTARGETDIR)/ecomromrslvrexampleonc.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComRomRslvrExampleOnC.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComRomRslvrExampleOnZ.dll $(RAMONLYTARGETDIR)/ecomromrslvrexampleonz.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/T_PlatSecResolverC.dll $(RAMONLYTARGETDIR)/t_platsecresolverc.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/T_PlatSecResolverC.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/T_PlatSecEcom4.dll $(RAMONLYTARGETDIR)/t_platsececom4.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/T_PlatSecEcom4.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EcomUpgradeExample1.dll $(RAMONLYTARGETDIR)/ecomupgradeexample1.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EcomUpgradeExample1.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EcomUpgradeExample2.dll $(RAMONLYTARGETDIR)/ecomupgradeexample2.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EcomUpgradeExample3.dll $(RAMONLYTARGETDIR)/ecomupgradeexample3.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EcomUpgradeExample3.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EcomUpgradeROExample1.dll $(RAMONLYTARGETDIR)/ecomupgraderoexample1.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EcomUpgradeROExample1.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EcomUpgradeROExample2.dll $(RAMONLYTARGETDIR)/ecomupgraderoexample2.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EcomUpgradeROExample3.dll $(RAMONLYTARGETDIR)/ecomupgraderoexample3.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EcomUpgradeROExample3.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/DefectPlugin.dll $(RAMONLYTARGETDIR)/defectplugin.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/DefectPlugin.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample7.dll $(RAMONLYTARGETDIR)/ecomexample7.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample7.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComExample8.dll $(RAMONLYTARGETDIR)/ecomexample8.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComExample8.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComCR629Example1.dll $(RAMONLYTARGETDIR)/ecomcr629example1.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComCR629Example1.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComCR629Example2.dll $(RAMONLYTARGETDIR)/ecomcr629example2.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComCR629Example2.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/LanguagePlugin.dll $(RAMONLYTARGETDIR)/languageplugin.dll)
+ -$(ERASE) $(call slash2generic $(SOURCEDIR)/LanguagePlugin.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComHashExample.dll $(RAMONLYTARGETDIR)/ecomhashexample.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComHashExample.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/EComSwiExample.dll $(RAMONLYTARGETDIR)/ecomswiexample.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/EComSwiExample.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/exampleNine.dll $(RAMONLYTARGETDIR)/examplenine.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/exampleNine.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR)/dummycustomresolver1.dll $(RAMONLYTARGETDIR)/dummycustomresolver1.dll)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/dummycustomresolver1.dll)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/HeapTestImpl.rsc $(TARGETDIR)/heaptestimpl.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/HeapTestImpl.rsc $(RAMONLYTARGETDIR)/invalidsidplugin.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/HeapTestImpl.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample5.RSC $(RAMONLYTARGETDIR)/ecomexample5.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExample5.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample12.RSC $(RAMONLYTARGETDIR)/ecomexample12.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExample12.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample12Upgraded.RSC $(RAMONLYTARGETDIR)/ecomexample12Upgraded.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExample12Upgraded.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample12Downgraded.RSC $(RAMONLYTARGETDIR)/ecomexample12Downgraded.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExample12Downgraded.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample14.RSC $(RAMONLYTARGETDIR)/ecomexample14.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExample14.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample14Upgraded.RSC $(RAMONLYTARGETDIR)/ecomexample14Upgraded.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExample14Upgraded.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample15.RSC $(RAMONLYTARGETDIR)/ecomexample15.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExample15.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExampleBadData.RSC $(RAMONLYTARGETDIR)/ecomexamplebaddata.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExampleBadData.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExampleBadData1.RSC $(RAMONLYTARGETDIR)/ecomexamplebaddata1.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExampleBadData1.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExampleBadData2.RSC $(RAMONLYTARGETDIR)/ecomexamplebaddata2.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComExampleBadData2.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample3.RSC $(RAMONLYTARGETDIR)/ecomexample3.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample2.RSC $(RAMONLYTARGETDIR)/ecomexample2.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample.RSC $(RAMONLYTARGETDIR)/ecomexample.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComRomOnlyExampleOnC.RSC $(RAMONLYTARGETDIR)/ecomromonlyexampleonc.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComRomOnlyExampleOnC.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComRomRslvrExampleOnC.RSC $(RAMONLYTARGETDIR)/ecomromrslvrexampleonc.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComRomRslvrExampleOnC.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComRomRslvrExampleOnZ.RSC $(RAMONLYTARGETDIR)/ecomromrslvrexampleonz.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/T_PlatSecResolverC.RSC $(RAMONLYTARGETDIR)/t_platsecresolverc.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/T_PlatSecResolverC.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/T_PlatSecEcom4.RSC $(RAMONLYTARGETDIR)/t_platsececom4.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/T_PlatSecEcom4.RSC)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EcomNullExample.RSC $(RAMONLYTARGETDIR)/ecomnullexample.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeExample1.rsc $(RAMONLYTARGETDIR)/ecomupgradeexample1.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeExample1.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeExample2.rsc $(RAMONLYTARGETDIR)/ecomupgradeexample2.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeExample3.rsc $(RAMONLYTARGETDIR)/ecomupgradeexample3.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeExample3.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeROExample1.rsc $(RAMONLYTARGETDIR)/ecomupgraderoexample1.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeROExample1.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeROExample2.rsc $(RAMONLYTARGETDIR)/ecomupgraderoexample2.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeROExample3.rsc $(RAMONLYTARGETDIR)/ecomupgraderoexample3.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EcomUpgradeROExample3.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/DefectPlugin.rsc $(RAMONLYTARGETDIR)/defectplugin.rsc)
+ -$(ERASE) $(SOURCEDIR2)/DefectPlugin.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample7.rsc $(RAMONLYTARGETDIR)/ecomexample7.rsc)
+ -$(ERASE) $(SOURCEDIR2)/EComExample7.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComExample8.rsc $(RAMONLYTARGETDIR)/ecomexample8.rsc)
+ -$(ERASE) $(SOURCEDIR2)/EComExample8.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComCR629Example1.rsc $(RAMONLYTARGETDIR)/ecomcr629example1.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComCR629Example1.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComCR629Example2.rsc $(RAMONLYTARGETDIR)/ecomcr629example2.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComCR629Example2.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.rsc $(RAMONLYTARGETDIR)/languageplugin.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.r01 $(RAMONLYTARGETDIR)/languageplugin.r01)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.r01)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.r02 $(RAMONLYTARGETDIR)/languageplugin.r02)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.r02)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.r03 $(RAMONLYTARGETDIR)/languageplugin.r03)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/LanguagePlugin.r03)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComHashExample.rsc $(RAMONLYTARGETDIR)/ecomhashexample.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComHashExample.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/EComSwiExample.rsc $(RAMONLYTARGETDIR)/ecomswiexample.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/EComSwiExample.rsc)
+ $(CP) /B $(call slash2generic, $(SOURCEDIR2)/dummycustomresolver1.rsc $(RAMONLYTARGETDIR)/dummycustomresolver1.rsc)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR2)/dummycustomresolver1.rsc)
+
+#
+# The targets invoked by bld...
+#
+
+MAKMAKE : DO_NOTHING
+
+BLD : $(RAMONLYTARGETDIR) COPYFILES
+
+CLEAN :
+ -$(ERASE) $(call slash2generic, $(TARGETDIR)/heaptestimpl.dll)
+ -$(ERASE) $(call slash2generic, $(TARGETDIR)/heaptestimpl.rsc )
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample5.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample12.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample12Upgraded.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample12Downgraded.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample14.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample14Upgraded.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample15.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexamplebaddata.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexamplebaddata1.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexamplebaddata2.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample3.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample2.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample.rsc )
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomromonlyexampleonc.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomromrslvrexampleonc.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomromrslvrexampleonz.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample5.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample12.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample12Upgraded.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample12Downgraded.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample14.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample14Upgraded.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample15.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexamplebaddata.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexamplebaddata1.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexamplebaddata2.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample3.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample2.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomromonlyexampleonc.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomromrslvrexampleonc.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomromrslvrexampleonz.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/invalidsidplugin.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/invalidsidplugin.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/t_platsecresolverc.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/t_platsecresolverc.rsc )
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/t_platsececom4.dll )
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/t_platsececom4.rsc)
+
+
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomnullexample.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomnullexample.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgradeexample1.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgradeexample1.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgradeexample2.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgradeexample2.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgradeexample3.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgradeexample3.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgraderoexample1.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgraderoexample1.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgraderoexample2.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgraderoexample2.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgraderoexample3.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomupgraderoexample3.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/defectplugin.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/defectplugin.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample7.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample7.rsc )
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample8.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomexample8.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomcr629example1.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomcr629example1.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomcr629example2.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomcr629example2.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/languageplugin.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/languageplugin.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/languageplugin.r01)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/languageplugin.r02)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/languageplugin.r03)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomhashexample.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomhashexample.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomswiexample.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/ecomswiexample.rsc)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/examplenine.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/dummycustomresolver1.dll)
+ -$(ERASE) $(call slash2generic, $(RAMONLYTARGETDIR)/dummycustomresolver1.rsc)
+
+SAVESPACE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+RELEASABLES :
+ @echo $(TARGETDIR)/heaptestimpl.dll
+ @echo $(TARGETDIR)/heaptestimpl.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample5.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample12.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample12Upgraded.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample12Downgraded.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample14.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample14Upgraded.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample15.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexamplebaddata.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexamplebaddata1.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexamplebaddata2.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample3.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample2.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomromonlyexampleonc.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomromrslvrexampleonc.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomromrslvrexampleonz.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample5.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample12.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample12Upgraded.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample12Downgraded.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample14.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample14Upgraded.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample15.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexamplebaddata.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexamplebaddata1.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexamplebaddata2.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample3.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample2.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample.dll
+ @echo $(RAMONLYTARGETDIR)/ecomromonlyexampleonc.dll
+ @echo $(RAMONLYTARGETDIR)/ecomromrslvrexampleonc.dll
+ @echo $(RAMONLYTARGETDIR)/ecomromrslvrexampleonz.dll
+ @echo $(RAMONLYTARGETDIR)/invalidsidplugin.rsc
+ @echo $(RAMONLYTARGETDIR)/invalidsidplugin.dll
+ @echo $(RAMONLYTARGETDIR)/t_platsecresolverc.dll
+ @echo $(RAMONLYTARGETDIR)/t_platsecresolverc.rsc
+ @echo $(RAMONLYTARGETDIR)/t_platsececom4.dll
+ @echo $(RAMONLYTARGETDIR)/t_platsececom4.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomnullexample.dll
+ @echo $(RAMONLYTARGETDIR)/ecomnullexample.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomupgradeexample1.dll
+ @echo $(RAMONLYTARGETDIR)/ecomupgradeexample1.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomupgradeexample2.dll
+ @echo $(RAMONLYTARGETDIR)/ecomupgradeexample2.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomupgradeexample3.dll
+ @echo $(RAMONLYTARGETDIR)/ecomupgradeexample3.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomupgraderoexample1.dll
+ @echo $(RAMONLYTARGETDIR)/ecomupgraderoexample1.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomupgraderoexample2.dll
+ @echo $(RAMONLYTARGETDIR)/ecomupgraderoexample2.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomupgraderoexample3.dll
+ @echo $(RAMONLYTARGETDIR)/ecomupgraderoexample3.rsc
+ @echo $(RAMONLYTARGETDIR)/defectplugin.dll
+ @echo $(RAMONLYTARGETDIR)/defectplugin.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample7.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample7.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomexample8.dll
+ @echo $(RAMONLYTARGETDIR)/ecomexample8.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomcr629example1.dll
+ @echo $(RAMONLYTARGETDIR)/ecomcr629example1.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomcr629example2.dll
+ @echo $(RAMONLYTARGETDIR)/ecomcr629example2.rsc
+ @echo $(RAMONLYTARGETDIR)/languageplugin.dll
+ @echo $(RAMONLYTARGETDIR)/languageplugin.rsc
+ @echo $(RAMONLYTARGETDIR)/languageplugin.r01
+ @echo $(RAMONLYTARGETDIR)/languageplugin.r02
+ @echo $(RAMONLYTARGETDIR)/languageplugin.r03
+ @echo $(RAMONLYTARGETDIR)/ecomhashexample.dll
+ @echo $(RAMONLYTARGETDIR)/ecomhashexample.rsc
+ @echo $(RAMONLYTARGETDIR)/ecomswiexample.dll
+ @echo $(RAMONLYTARGETDIR)/ecomswiexample.rsc
+ @echo $(RAMONLYTARGETDIR)/examplenine.dll
+ @echo $(RAMONLYTARGETDIR)/dummycustomresolver1.dll
+ @echo $(RAMONLYTARGETDIR)/dummycustomresolver1.rsc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/ecom3_relocatetarget.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2008-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:
+# Meta information for the ecom3_relocatetarget extension template
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/ecom3_relocatetarget.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,74 @@
+# Copyright (c) 2008-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:
+# Different from ecom3_postbuild.mk in that on armv5 the RAMONLYTARGETDIR
+# is not \epoc32\data\z\ramonly. It is \epoc32\release\armv5\<CFG>\z\ramonly.
+# This template has to preserve the udeb/urel targets.
+# Params:
+# SOURCES - list of .exe and .dll files to relocate
+# TARGET - not used
+# OPTION TARGETDIR - mandatory, it is "ramonly" for ecom testing.
+# OPTION TARGETBASE - optional, overrides \epoc32\release\<platform>\<cfg>\z
+# OPTION SOURCEDIR - optional, overrides \epoc32\release\<platform>\<cfg>
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+# $(/) is actually back slash in Windows environment. Since bld.inf are written
+# with forward slashes and $(CP) is "copy", this substitution is important.
+TARGETDIR := $(subst /,$(/),$(TARGETDIR))
+
+ifdef TARGETBASE
+TARGETBASE := $(subst PLATFORM,$(PLATFORM_PATH),$(TARGETBASE))
+TARGETBASE := $(subst CFG,$(CFG_PATH),$(TARGETBASE))
+TARGETBASE := $(subst /,$(/),$(TARGETBASE))
+DESTDIR:=$(TARGETBASE)/$(TARGETDIR)
+else
+DESTDIR:=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/$(TARGETDIR)
+endif
+
+ifdef SOURCEDIR
+SOURCEDIR := $(subst PLATFORM,$(PLATFORM_PATH),$(SOURCEDIR))
+SOURCEDIR := $(subst CFG,$(CFG_PATH),$(SOURCEDIR))
+SOURCEDIR := $(subst /,$(/),$(SOURCEDIR))
+else
+SOURCEDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+endif
+
+TARGET_COPY := $(foreach f,$(SOURCES),$(DESTDIR)/$(f) )
+
+$(DESTDIR) :
+ $(call createdir,"$@")
+
+$(TARGET_COPY) :
+ $(CP) $(call slash2generic, $(SOURCEDIR)/$(notdir $@) $@)
+ -$(ERASE) $(call slash2generic, $(SOURCEDIR)/$(notdir $@))
+
+#
+# The targets invoked by abld...
+#
+BLD : $(DESTDIR) $(TARGET_COPY)
+
+MAKMAKE SAVESPACE FREEZE LIB CLEANLIB RESOURCE FINAL :
+ @echo do nothing
+
+CLEAN :
+ -$(ERASE) $(TARGET_COPY)
+
+RELEASABLES :
+ @echo $(TARGET_COPY)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/featmgr_moveplugin.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2007-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:
+# template.meta
+# Meta information for template use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/featmgr_moveplugin.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,162 @@
+# Copyright (c) 2007-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:
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ EPOCDATADIR:=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+else
+ EPOCDATADIR:=$(EPOCROOT)epoc32/data
+endif
+
+BINSOURCEDIR:=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)
+RESOURCESOURCEDIR:=$(EPOCDATADIR)/z/resource/plugins
+
+FILE1:=normal_plugin.dll
+FILE2:=hanging_plugin.dll
+FILE3:=corrupt_plugin.dll
+FILE4:=reconciliation_plugin.dll
+FILE5:=ab_normal_plugin.dll
+FILE6:=bc_enhanced_plugin.dll
+FILE7:=slowstart_plugin.dll
+FILE8:=invalid_plugin.dll
+FILE9:=normal_plugin.rsc
+FILE10:=hanging_plugin.rsc
+FILE11:=corrupt_plugin.rsc
+FILE12:=reconciliation_plugin.rsc
+FILE13:=ab_normal_plugin.rsc
+FILE14:=bc_enhanced_plugin.rsc
+FILE15:=slowstart_plugin.rsc
+FILE16:=invalid_plugin.rsc
+
+TARGETDIR:=$(EPOCDATADIR)/z/test/efm/plugins
+# we copy the normal plugin files to the resource folder on C: drive for the plugin ignoring test
+PLUGINTARGETDIR:=$(EPOCROOT)epoc32/winscw/c/sys/bin
+RESOURCETARGETDIR:=$(EPOCROOT)epoc32/winscw/c/resource/plugins
+
+$(TARGETDIR) :
+ $(call createdir,"$@")
+
+$(PLUGINTARGETDIR) :
+ $(call createdir,"$@")
+
+$(RESOURCETARGETDIR) :
+ $(call createdir,"$@")
+
+COPYFILES : $(TARGETDIR) $(PLUGINTARGETDIR) $(RESOURCETARGETDIR)
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE1),$(TARGETDIR)/$(FILE1))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE1),$(PLUGINTARGETDIR)/$(FILE1))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE2),$(TARGETDIR)/$(FILE2))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE3),$(TARGETDIR)/$(FILE3))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE4),$(TARGETDIR)/$(FILE4))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE5),$(TARGETDIR)/$(FILE5))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE6),$(TARGETDIR)/$(FILE6))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE7),$(TARGETDIR)/$(FILE7))
+ $(call forcecopy,$(BINSOURCEDIR)/$(FILE8),$(TARGETDIR)/$(FILE8))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE9),$(TARGETDIR)/$(FILE9))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE9),$(RESOURCETARGETDIR)/$(FILE9))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE10),$(TARGETDIR)/$(FILE10))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE11),$(TARGETDIR)/$(FILE11))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE12),$(TARGETDIR)/$(FILE12))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE13),$(TARGETDIR)/$(FILE13))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE14),$(TARGETDIR)/$(FILE14))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE15),$(TARGETDIR)/$(FILE15))
+ $(call forcecopy,$(RESOURCESOURCEDIR)/$(FILE16),$(TARGETDIR)/$(FILE16))
+
+ERASEFILES : $(call slash2generic,$(foreach FILE, $(FILE1) $(FILE2) $(FILE3) $(FILE4) $(FILE5) $(FILE6) $(FILE7) $(FILE8), $(TARGETDIR)/$(FILE)) $(PLUGINTARGETDIR)/$(FILE1))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE1))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE2))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE3))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE4))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE5))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE6))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE7))
+ $(call forceremove,$(BINSOURCEDIR)/$(FILE8))
+
+DO_NOTHING:
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+BLD : DO_NOTHING
+
+CLEAN :
+ $(call forceremove,$(TARGETDIR)/$(FILE1))
+ $(call forceremove,$(PLUGINTARGETDIR)/$(FILE1))
+ $(call forceremove,$(TARGETDIR)/$(FILE2))
+ $(call forceremove,$(TARGETDIR)/$(FILE3))
+ $(call forceremove,$(TARGETDIR)/$(FILE4))
+ $(call forceremove,$(TARGETDIR)/$(FILE5))
+ $(call forceremove,$(TARGETDIR)/$(FILE6))
+ $(call forceremove,$(TARGETDIR)/$(FILE7))
+ $(call forceremove,$(TARGETDIR)/$(FILE8))
+ $(call forceremove,$(TARGETDIR)/$(FILE9))
+ $(call forceremove,$(RESOURCETARGETDIR)/$(FILE9))
+ $(call forceremove,$(TARGETDIR)/$(FILE10))
+ $(call forceremove,$(TARGETDIR)/$(FILE11))
+ $(call forceremove,$(TARGETDIR)/$(FILE12))
+ $(call forceremove,$(TARGETDIR)/$(FILE13))
+ $(call forceremove,$(TARGETDIR)/$(FILE14))
+ $(call forceremove,$(TARGETDIR)/$(FILE15))
+ $(call forceremove,$(TARGETDIR)/$(FILE16))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE9))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE10))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE11))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE12))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE13))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE14))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE15))
+ $(call forceremove,$(RESOURCESOURCEDIR)/$(FILE16))
+
+RELEASABLES :
+ @echo $(TARGETDIR)/$(FILE1)
+ @echo $(PLUGINTARGETDIR)/$(FILE1)
+ @echo $(TARGETDIR)/$(FILE2)
+ @echo $(TARGETDIR)/$(FILE3)
+ @echo $(TARGETDIR)/$(FILE4)
+ @echo $(TARGETDIR)/$(FILE5)
+ @echo $(TARGETDIR)/$(FILE6)
+ @echo $(TARGETDIR)/$(FILE7)
+ @echo $(TARGETDIR)/$(FILE8)
+ @echo $(TARGETDIR)/$(FILE9)
+ @echo $(RESOURCETARGETDIR)/$(FILE9)
+ @echo $(TARGETDIR)/$(FILE10)
+ @echo $(TARGETDIR)/$(FILE11)
+ @echo $(TARGETDIR)/$(FILE12)
+ @echo $(TARGETDIR)/$(FILE13)
+ @echo $(TARGETDIR)/$(FILE14)
+ @echo $(TARGETDIR)/$(FILE15)
+ @echo $(TARGETDIR)/$(FILE16)
+
+MAKMAKE : DO_NOTHING
+
+SAVESPACE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+FINAL : COPYFILES ERASEFILES
+
+ROMFILE : DO_NOTHING
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/sqlite3_securecopytestfiles.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2007-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:
+# Meta information for sqlite3_securecopytestfiles
+#
+
+platform win32
+makefile gnumake
+techstream pds
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/test/sqlite3_securecopytestfiles.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,69 @@
+# Copyright (c) 2007-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:
+# Copy SQLITE3_SECURE test files
+#
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ TARGETDIR=$(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/private/10286A82
+else
+ TARGETDIR=$(EPOCROOT)epoc32/data/z/private/10286A82
+
+endif
+
+SOURCEDIR = $(EXTENSION_ROOT)/../TEST/TCLSCRIPT
+
+$(TARGETDIR):
+ $(call createdir, "$@")
+
+COPYFILES :
+ $(call forcecopy,$(SOURCEDIR)/*.test,$(TARGETDIR)/)
+ $(call forcecopy,$(SOURCEDIR)/tester.tcl,$(TARGETDIR)/)
+
+
+DO_NOTHING :
+ @echo do nothing
+
+#
+# The targets invoked by bld...
+#
+
+MAKMAKE : DO_NOTHING
+
+BLD : $(TARGETDIR) $(SOURCEDIR) COPYFILES
+
+CLEAN :
+ $(call forceremove,$(TARGETDIR)/*.test)
+ $(call forceremove,$(TARGETDIR)/tester.tcl)
+
+SAVESPACE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+RELEASABLES :
+ @echo $(TARGETDIR)/*.test
+ @echo $(TARGETDIR)/tester.tcl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/word_template.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2007-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:
+# template.meta
+# Meta information for template use
+#
+
+platform win32
+makefile gnumake
+techstream syslibs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/syslibs/word_template.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,68 @@
+# Copyright (c) 2007-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:
+# template.mk
+# Build Word template files
+#
+#
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+ifeq ($(findstring WINS,$(PLATFORM)),WINS)
+ TARGETDIR = $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/private/10003a64
+else
+ # The IBY file uses the template file stored here when building ROMs
+ TARGETDIR = $(EPOCROOT)epoc32/data/z/private/10003a64
+endif
+
+TEMPLATES = $(TARGETDIR)/blank
+
+$(TARGETDIR) :
+ $(call createdir, "$@")
+
+# Well, actually just copy the prebuilt ones for now...
+# - deleting existing file first (in case it's read-only)
+
+TEMPLATESRCDIR = $(EXTENSION_ROOT)/../utemplat
+
+$(TEMPLATES) : $(TEMPLATESRCDIR)$/BLANK.UK $(TARGETDIR)
+ $(call forceremove,$@)
+ $(call forcecopy,$(TEMPLATESRCDIR)/BLANK.UK,"$@")
+DO_NOTHING :
+ @echo do nothing
+
+# The targets invoked by bld...
+
+MAKMAKE : DO_NOTHING
+
+RESOURCE : DO_NOTHING
+
+SAVESPACE : BLD
+
+BLD : $(TARGETDIR) $(TEMPLATES)
+
+FREEZE : DO_NOTHING
+
+LIB : DO_NOTHING
+
+CLEANLIB : DO_NOTHING
+
+FINAL : DO_NOTHING
+
+CLEAN :
+ -$(ERASE) $(TEMPLATES)
+
+RELEASABLES :
+ @echo $(TEMPLATES)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/tools/compsupp.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+# Copyright (c) 2008-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:
+# Meta information for the config extension template
+#
+
+platform win32
+makefile gnumake
+techstream Tools
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/tools/compsupp.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,43 @@
+# Copyright (c) 2008-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:
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+do_nothing:
+
+MAKMAKE : do_nothing
+
+FREEZE : do_nothing
+
+LIB :
+ unzip -o $(FILE) -d $(TODIR)
+
+CLEANLIB : do_nothing
+
+RESOURCE : do_nothing
+
+FINAL : do_nothing
+
+BLD : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @perl -S $(EPOCROOT)epoc32/tools/listzip.pl $(EPOCROOT)epoc32/release $(FILE)
+
+CLEAN : do_nothing
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/tools/features.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2007-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:
+# Meta information for features file generation
+#
+
+platform win32
+makefile gnumake
+techstream tools
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/tools/features.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,78 @@
+# Copyright (c) 2007-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:
+# This makefile template is used to generate header/iby/features.dat file
+#
+#
+
+# To ensure that EPOCROOT always ends with a forward slash
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+
+ifeq "$(CFG_PATH)" "rel"
+
+FEAT_TOOL := perl -S $(call slash2generic,features.pl)
+
+ifndef FEAT_DATABASE
+FEAT_DATABASE := $(EPOCROOT)epoc32/rom/include/featuredatabase.xml
+endif
+
+ifndef FEAT_HEADER_PATH
+FEAT_HEADER_PATH := $(EPOCROOT)epoc32/include
+endif
+
+ifndef FEAT_IBY_PATH
+FEAT_IBY_PATH := $(EPOCROOT)epoc32/rom/include
+endif
+
+ifndef FEAT_DAT_PATH
+FEAT_DAT_PATH := $(EPOCROOT)epoc32/data/config
+endif
+
+# Features tool will be invoked here
+ALL:
+ $(FEAT_TOOL) --datfile=$(FEAT_DAT_PATH) --hdrfile=$(FEAT_HEADER_PATH) --ibyfile=$(FEAT_IBY_PATH) $(FEAT_DATABASE)
+
+
+BLD SAVESPACE: ALL
+
+CLEAN :
+ -$(ERASE) $(call slash2generic,$(FEAT_HEADER_PATH)/featureuids.h)
+ -$(ERASE) $(call slash2generic,$(FEAT_IBY_PATH)/feature.iby)
+ -$(ERASE) $(call slash2generic,$(FEAT_DAT_PATH)/features.dat)
+
+RELEASABLES :
+ @echo $(FEAT_HEADER_PATH)/featureuids.h
+ @echo $(FEAT_IBY_PATH)/feature.iby
+ @echo $(FEAT_DAT_PATH)/features.dat
+
+DO_NOTHING :
+ @echo do nothing
+
+MAKMAKE : DO_NOTHING
+FREEZE : DO_NOTHING
+LIB : DO_NOTHING
+CLEANLIB : DO_NOTHING
+RESOURCE : DO_NOTHING
+FINAL : DO_NOTHING
+
+#if $(CFG_PATH) == "deb"
+else
+
+FINAL FREEZE LIB CLEANLIB RESOURCE RELEASABLES CLEAN BLD SAVESPACE MAKMAKE :
+
+endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/tools/x86tool.meta Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2006-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:
+# Meta information for the GNU makesis extension template
+#
+
+platform win32
+makefile gnumake
+techstream tools
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/extension/tools/x86tool.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,373 @@
+# Copyright (c) 2008-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:
+# /epoc32/tools/makefile_templates/tools/x86tool.mk
+# SBSv2 issues and differences from SBSv1
+# 1/ The shell is different
+# 2/ The msys shell can't handle absolute paths from root without the drive letter e.g. it can't find /epoc32 but it can find x:/epoc32
+# workaround is to go back to TO_ROOT
+# 3/ The current directory is at the bld.inf rather than /epoc32/build
+# 4/ Backslash is problematic
+# 5/ Path variables include the drive letter x: which causes problems for make when used in targets due to :
+# 6/ TO_ROOT is not defined
+# 7/ Some tool compatibility is problematic e.g. createdir doesn't work with paths containing forward slash
+#
+#
+
+# If this environment variable is defined we're definitely building for win32
+ifdef ComSpec
+WIN32:=1
+endif
+
+space:=
+space+=
+LETTERS:=a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
+
+# If win32 isn't defined yet - then we're probably building on sbsv2
+# So see if EPOCROOT starts with a drive letter to work out if we're building for win32
+ifndef WIN32
+ ifneq ($(subst $(space),,$(foreach let,$(LETTERS),$(if $(findstring $(let):,$(EPOCROOT)),1,))),)
+ WIN32:=1
+ endif
+endif
+
+# To guarantee there is a slash at the end of EPOCROOT in case there is not.
+# This is needed to ensure compatibility with SBSv1.
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+
+# Get standard shell definitions
+include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
+
+# Raptor includes the drive letter on paths - this makefile can't handle the drive letter
+# If we don't do this we get "multiple target patterns" errors in sbsv2
+TMPROOT:=$(strip $(foreach let,$(LETTERS),$(if $(findstring $(let):,$(EPOCROOT)),$(subst $(let):,,$(EPOCROOT)))))
+ifneq ($(TMPROOT),)
+ EPOCROOT:=$(TMPROOT)
+endif
+TMPROOT:=$(strip $(foreach let,$(LETTERS),$(if $(findstring $(let):,$(EXTENSION_ROOT)),$(subst $(let):,,$(EXTENSION_ROOT)))))
+ifneq ($(TMPROOT),)
+ EXTENSION_ROOT:=$(TMPROOT)
+endif
+
+# Make up for raptor not defining TO_ROOT properly
+# This might get broken if they change the current directory (which should really be in /epoc32/build)
+# We're using TO_ROOT to handle the fact that the msys shell doesn't seem to handle absolute paths
+ifdef WIN32
+ ifeq ($(TO_ROOT),)
+ TMPROOT:=$(strip $(foreach let,$(LETTERS),$(if $(findstring $(let):,$(TO_BLDINF)),$(subst $(let):,,$(TO_BLDINF)))))
+ TO_ROOT:=.$(subst $(space),,$(foreach word,$(subst /,$(space),$(TMPROOT)),/..))
+ endif
+endif
+
+# Handle inconsistent case for build variant
+CFG_PATH:=$(CFG)
+ifeq ($(CFG_PATH),DEB)
+ CFG_PATH:=deb
+endif
+ifeq ($(CFG_PATH),REL)
+ CFG_PATH:=rel
+endif
+
+# Set the following to enable code coverage stats
+CODE_COVERAGE:=
+
+# Build
+ifdef WIN32
+ TARGET_DIR_REL:=$(EPOCROOT)epoc32/release/tools2/rel/
+ TARGET_DIR_DEB:=$(EPOCROOT)epoc32/release/tools2/deb/
+ GCOVDIR:=$(if $(CODE_COVERAGE),$(EPOCROOT)epoc32/gcc_mingw/libgcc/mingw32/3.4.5/)
+else
+ TARGET_DIR_REL:=$(EPOCROOT)epoc32/release/tools2/linux-i386/rel/
+ TARGET_DIR_DEB:=$(EPOCROOT)epoc32/release/tools2/linux-i386/deb/
+endif
+
+# The root to the source code - paths are relative to bld.inf if NOT specified
+# If SOURCE_ROOT specified then it's relative to EPOCROOT
+ifndef SOURCE_ROOT
+ ROOT:=$(subst \,/,$(EXTENSION_ROOT))
+ OBJSUBST:=/
+else
+ ROOT:=$(EPOCROOT)$(subst $(space)/,/,$(SOURCE_ROOT))
+ OBJSUBST:=$(EPOCROOT)
+endif
+
+# ***
+# STATIC LIBRARY
+#
+ifeq ($(TARGET_TYPE),lib)
+ TARGET_FULLNAME_REL:=$(TARGET_DIR_REL)lib$(TARGET_NAME)$(if $(findstring .,$(TARGET_NAME)),,.a)
+ TARGET_FULLNAME_DEB:=$(TARGET_DIR_DEB)lib$(TARGET_NAME)$(if $(findstring .,$(TARGET_NAME)),,.a)
+
+ ifeq ($(CFG_PATH),deb)
+ TARGET_LIB:=$(TARGET_FULLNAME_DEB)
+ endif
+ ifeq ($(CFG_PATH),rel)
+ TARGET_LIB:=$(TARGET_FULLNAME_REL)
+ endif
+ TARGET_LIB?=$(TARGET_FULLNAME_REL) $(TARGET_FULLNAME_DEB)
+endif
+
+# ***
+# EXE
+#
+ifeq ($(TARGET_TYPE),exe)
+ TARGET_FULLNAME_REL:=$(TARGET_DIR_REL)$(TARGET_SUB_DIR)$(TARGET_NAME)$(if $(findstring .,$(TARGET_NAME)),,$(if $(WIN32),.exe))
+ TARGET_FULLNAME_DEB:=$(TARGET_DIR_DEB)$(TARGET_SUB_DIR)$(TARGET_NAME)$(if $(findstring .,$(TARGET_NAME)),,$(if $(WIN32),.exe))
+
+ ifeq ($(CFG_PATH),deb)
+ TARGET_BLD:=$(TARGET_FULLNAME_DEB)
+ endif
+ ifeq ($(CFG_PATH),rel)
+ TARGET_BLD:=$(TARGET_FULLNAME_REL)
+ endif
+ TARGET_BLD?=$(TARGET_FULLNAME_REL) $(TARGET_FULLNAME_DEB)
+
+ LIBS+=symexestub
+ ifdef STLPORT
+ LIBS+=-lstlport.5.1
+ endif
+endif
+
+# ***
+# DLL/SO
+#
+ifeq ($(TARGET_TYPE),dll)
+
+ TARGET_FULLNAME_REL:=$(TARGET_DIR_REL)$(TARGET_SUB_DIR)lib$(TARGET_NAME)$(if $(findstring .,$(TARGET_NAME)),,$(if $(WIN32),.dll,.so))
+ TARGET_FULLNAME_DEB:=$(TARGET_DIR_DEB)$(TARGET_SUB_DIR)lib$(TARGET_NAME)$(if $(findstring .,$(TARGET_NAME)),,$(if $(WIN32),.dll,.so))
+
+ ifeq ($(CFG_PATH),deb)
+ TARGET_BLD:=$(TARGET_FULLNAME_DEB)
+ endif
+ ifeq ($(CFG_PATH),rel)
+ TARGET_BLD:=$(TARGET_FULLNAME_REL)
+ endif
+ TARGET_BLD?=$(TARGET_FULLNAME_REL) $(TARGET_FULLNAME_DEB)
+
+ ifdef STLPORT
+ LIBS+=-lstlport.5.1
+ endif
+endif
+
+# Pick up MINGW compiler from epoc32 on Windows
+ifdef WIN32
+ AR:=$(EPOCROOT)epoc32/gcc_mingw/bin/ar
+ CXX:=$(EPOCROOT)epoc32/gcc_mingw/bin/g++
+endif
+
+# Product include files are different for S60
+ifdef S60_BUILD
+ PRODUCT_INCLUDE:=$(EPOCROOT)epoc32/include/oem/bldvariant.hrh
+else
+ PRODUCT_INCLUDE:=$(EPOCROOT)epoc32/include/variant/Symbian_OS.hrh
+endif
+
+# Define macros we need
+CXXDEFS_COMMON:=$(foreach def,$(MACROS),-D$(def)) -D__SYMBIAN32__ -D__GCC32__ -D__EPOC32__ -D__X86__ -D_UNICODE -D__SUPPORT_CPP_EXCEPTIONS__ -D__TOOLS2__ -D'__PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)"'
+CXXDEFS_DEB:=$(CXXDEFS_COMMON) -D_DEBUG
+CXXDEFS_REL:=$(CXXDEFS_COMMON)
+
+# Setup the command line options for the compiler
+PREINC=$(EPOCROOT)epoc32/include/x86tool/x86tool.h
+CXXOPT_DEB:=-fshort-wchar -x c++ -O0 -g3 -Wall -c -fmessage-length=0 -include $(PREINC) -masm=intel
+OPTIMISE:=-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fif-conversion -fif-conversion2 -fguess-branch-probability -fcprop-registers -fforce-mem -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks -freorder-functions -fstrict-aliasing -funit-at-a-time -falign-functions -falign-jumps -falign-loops -falign-labels -fcrossjumping
+CXXOPT_REL:=-fshort-wchar -x c++ -Wall -c -fmessage-length=0 -include $(PREINC) $(if $(CODE_COVERAGE),-O0,$(OPTIMISE)) -masm=intel
+
+# Allow specification of additional build include file
+ifdef BUILDINC
+ CXXOPT_DEB+= -include $(BUILDINC)
+ CXXOPT_REL+= -include $(BUILDINC)
+endif
+
+# Extra options needed for cia files
+ASMOPT:=-fomit-frame-pointer
+
+# Linker options for DLL
+ifndef DLL_WIN_LINKER_OPTS
+ DLL_WIN_LINKER_OPTS:= $(if $(CODE_COVERAGE),-lgcov) -Wl,-export-all-symbols
+endif
+ifndef DLL_LIN_LINKER_OPTS
+ DLL_LIN_LINKER_OPTS:= -Wl,-export-all-symbols $(if $(CODE_COVERAGE),-lgcov) -ldl
+endif
+
+# Source files to scan for in a directory
+# Note that CPP and cpp will match on the same files - so a sort is necessary on wildcard results
+SOURCE_EXT:=CPP cpp c cia
+
+# Source code assumed to be all cpp/cia files in supplied directories
+SOURCE_FILES:=$(foreach dir,$(SOURCE_DIRS),$(sort $(foreach ext,$(SOURCE_EXT),$(wildcard $(ROOT)/$(dir)/*.$(ext))))) \
+ $(foreach src,$(SOURCE),$(ROOT)/$(if $(SOURCE_FOLDER),$(SOURCE_FOLDER)/)$(src)) \
+ $(foreach src,$(SOURCE_MOD),$(subst \,/,$(EXTENSION_ROOT))/$(src)) \
+ $(foreach id,$(SOURCE_IDS),$(foreach src,$($(id)_SOURCE),$(subst $(space)/,/,$(if $($(id)_SOURCE_ROOT),$(EPOCROOT)$($(id)_SOURCE_ROOT),$(ROOT))/$(src))))
+
+# Include folders
+CXXINC:=$(foreach inc,$(INCLUDES) $(SOURCE_DIRS),-I$(ROOT)/$(inc)) \
+ $(foreach inc,$(SYS_INCLUDES),-I$(EPOCROOT)$(inc)) -I$(ROOT) \
+ $(foreach id,$(SOURCE_IDS),$(foreach inc,$($(id)_SOURCE_INC),-I$(subst $(space)/,/,$(if $($(id)_SOURCE_ROOT),$(EPOCROOT)$($(id)_SOURCE_ROOT),$(ROOT)))/$(inc)))
+
+# Add standard include paths?
+ifndef NO_STD_INCLUDE
+ CXXINC+= -I$(EPOCROOT)epoc32/include/x86tool -I$(EPOCROOT)epoc32/include
+ ifdef S60_BUILD
+ CXXINC+= -I$(EPOCROOT)epoc32/include/oem
+ endif
+endif
+
+# Support for building JNI
+ifdef JAVA_JNI
+ CXXINC+= -I"$(JAVA_HOME)/include"
+ ifdef WIN32
+ CXXINC+= -I"$(JAVA_HOME)/include/win32"
+ else
+ CXXINC+= -I"$(JAVA_HOME)/include/linux"
+ endif
+endif
+
+
+# STL Port support needed? Note STL and Symbian won't mix!
+ifdef STLPORT
+ CXXINC+= -I$(EPOCROOT)epoc32/include/tools/stlport
+endif
+
+# ***
+# DEBUG
+#
+
+# Object files are the same name as the source files with a .o extension
+OBJECTFILES_DEB:=$(foreach src,$(SOURCE_FILES),deb$(src).o)
+
+# Compile
+$(OBJECTFILES_DEB) : $(PREINC) $(SOURCE_FILES)
+ @echo ***
+ @echo Making: $@
+ $(call createdir,$(dir $@))
+ $(CXX) $(CXXDEFS_DEB) $(CXXINC) -I$(subst deb$(OBJSUBST),$(OBJSUBST),$(dir $@)) $(CXXOPT_DEB) $(if $(findstring .cia,$@),$(ASMOPT),$(if $(CODE_COVERAGE),-fprofile-arcs -ftest-coverage)) -o$@ $(subst deb$(OBJSUBST),$(OBJSUBST),$(basename $@))
+
+# Link
+$(TARGET_FULLNAME_DEB) : $(OBJECTFILES_DEB) $(foreach lib,$(LIBS),$(TARGET_DIR_DEB)lib$(lib).a) $(foreach lib,$(SHARED_LIBS),$(TARGET_DIR_DEB)lib$(lib)$(if $(WIN32),.a,.so))
+ifeq ($(TARGET_TYPE),lib)
+ @echo ***
+ @echo Creating lib: $@
+ $(AR) -r $(TARGET_FULLNAME_DEB) $(OBJECTFILES_DEB)
+endif
+ifeq ($(TARGET_TYPE),exe)
+ @echo ***
+ @echo Creating exe: $@
+ $(CXX) -L$(TARGET_DIR_DEB) $(if $(GCOVDIR),-L$(GCOVDIR)) \
+ -o$(TARGET_FULLNAME_DEB) $(OBJECTFILES_DEB) \
+ $(foreach lib,$(LIBS) $(SHARED_LIBS), -l$(lib)) \
+ $(if $(CODE_COVERAGE),-lgcov) $(if $(WIN32),,-ldl)
+endif
+ifeq ($(TARGET_TYPE),dll)
+ ifdef WIN32
+ @echo ***
+ @echo Creating Windows dll: $@
+ $(CXX) -L$(TARGET_DIR_DEB) $(if $(GCOVDIR),-L$(GCOVDIR)) \
+ -shared -o$(TARGET_FULLNAME_DEB) $(OBJECTFILES_DEB) \
+ $(foreach lib,$(LIBS) $(SHARED_LIBS), -l$(lib)) \
+ -Wl,-out-implib,$(@D)/$(basename $(@F)).a \
+ $(DLL_WIN_LINKER_OPTS)
+ else
+ @echo ***
+ @echo Creating Linux shared object: $@
+ $(CXX) -L$(TARGET_DIR_DEB) \
+ -shared -o$(TARGET_FULLNAME_DEB) $(OBJECTFILES_DEB) \
+ $(foreach lib,$(LIBS) $(SHARED_LIBS), -l$(lib)) \
+ $(DLL_LIN_LINKER_OPTS)
+ endif
+endif
+
+# ***
+# RELEASE
+#
+
+# Object files are the same name as the source files with a .o extension
+OBJECTFILES_REL:=$(foreach src,$(SOURCE_FILES),rel$(src).o)
+
+# Compile
+$(OBJECTFILES_REL) : $(PREINC) $(SOURCE_FILES)
+ @echo ***
+ @echo Making: $@
+ $(call createdir,$(dir $@))
+ $(CXX) $(CXXDEFS_REL) $(CXXINC) -I$(subst rel$(OBJSUBST),$(OBJSUBST),$(dir $@)) $(CXXOPT_REL) $(if $(findstring .cia,$@),$(ASMOPT),$(if $(CODE_COVERAGE),-fprofile-arcs -ftest-coverage)) -o$@ $(subst rel$(OBJSUBST),$(OBJSUBST),$(basename $@))
+
+# Link
+$(TARGET_FULLNAME_REL) : $(OBJECTFILES_REL) $(foreach lib,$(LIBS),$(TARGET_DIR_REL)lib$(lib).a) $(foreach lib,$(SHARED_LIBS),$(TARGET_DIR_REL)lib$(lib)$(if $(WIN32),.a,.so))
+ifeq ($(TARGET_TYPE),lib)
+ @echo ***
+ @echo Creating lib: $@
+ $(AR) -r $(TARGET_FULLNAME_REL) $(OBJECTFILES_REL)
+endif
+ifeq ($(TARGET_TYPE),exe)
+ @echo ***
+ @echo Creating exe: $@
+ $(CXX) -L$(TARGET_DIR_REL) $(if $(GCOVDIR),-L$(GCOVDIR)) \
+ -o$(TARGET_FULLNAME_REL) $(OBJECTFILES_REL) \
+ $(foreach lib,$(LIBS) $(SHARED_LIBS), -l$(lib)) \
+ $(if $(CODE_COVERAGE),-lgcov) $(if $(WIN32),,-ldl)
+endif
+ifeq ($(TARGET_TYPE),dll)
+ ifdef WIN32
+ @echo ***
+ @echo Creating Windows dll: $@
+ $(CXX) -L$(TARGET_DIR_REL) $(if $(GCOVDIR),-L$(GCOVDIR)) \
+ -shared -o$(TARGET_FULLNAME_REL) $(OBJECTFILES_REL) \
+ $(foreach lib,$(LIBS) $(SHARED_LIBS), -l$(lib)) \
+ -Wl,-out-implib,$(@D)/$(basename $(@F)).a \
+ $(DLL_WIN_LINKER_OPTS)
+ else
+ @echo ***
+ @echo Creating Linux shared object: $@
+ $(CXX) -L$(TARGET_DIR_REL) \
+ -shared -o$(TARGET_FULLNAME_REL) $(OBJECTFILES_REL) \
+ $(foreach lib,$(LIBS) $(SHARED_LIBS), -l$(lib)) \
+ $(DLL_LIN_LINKER_OPTS)
+ endif
+endif
+
+do_nothing:
+
+#
+# The targets invoked by abld...
+#
+
+MAKMAKE : do_nothing
+FREEZE : do_nothing
+RESOURCE : do_nothing
+CLEANLIB : do_nothing
+FINAL : do_nothing
+
+SAVESPACE :
+ifeq ($(CFG_PATH),deb)
+ $(call remove,$(OBJECTFILES_DEB))
+endif
+ifeq ($(CFG_PATH),rel)
+ $(call remove,$(OBJECTFILES_REL))
+endif
+
+LIB : $(TARGET_LIB)
+
+BLD : $(TARGET_BLD)
+
+CLEAN :
+ $(call remove,$(foreach file,$(TARGET_LIB) $(TARGET_BLD),$(TO_ROOT)$(file)))
+ifeq ($(CFG_PATH),deb)
+ $(call remove,$(OBJECTFILES_DEB))
+endif
+ifeq ($(CFG_PATH),rel)
+ $(call remove,$(OBJECTFILES_REL))
+endif
+
+RELEASABLES :
+ @echo $(TARGET_LIB) $(TARGET_BLD)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/group/bld.inf Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,126 @@
+// Copyright (c) 2007-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:
+//
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_EXPORTS
+
+../extension/app-services/buildstubsis.meta /epoc32/tools/makefile_templates/app-services/buildstubsis.meta
+../extension/app-services/buildstubsis.mk /epoc32/tools/makefile_templates/app-services/buildstubsis.mk
+../extension/app-services/buildupgradesis.meta /epoc32/tools/makefile_templates/app-services/buildupgradesis.meta
+../extension/app-services/buildupgradesis.mk /epoc32/tools/makefile_templates/app-services/buildupgradesis.mk
+../extension/application-protocols/buildstubsis.meta /epoc32/tools/makefile_templates/application-protocols/buildstubsis.meta
+../extension/application-protocols/buildstubsis.mk /epoc32/tools/makefile_templates/application-protocols/buildstubsis.mk
+../extension/base/bootstrap.meta /epoc32/tools/makefile_templates/base/bootstrap.meta
+../extension/base/bootstrap.mk /epoc32/tools/makefile_templates/base/bootstrap.mk
+../extension/base/bootstrap.flm /epoc32/tools/makefile_templates/base/bootstrap.flm
+../extension/base/bootstrap.xml /epoc32/tools/makefile_templates/base/bootstrap.xml
+../extension/base/config.meta /epoc32/tools/makefile_templates/base/config.meta
+../extension/base/config.mk /epoc32/tools/makefile_templates/base/config.mk
+../extension/base/copy_default.meta /epoc32/tools/makefile_templates/base/copy_default.meta
+../extension/base/copy_default.mk /epoc32/tools/makefile_templates/base/copy_default.mk
+../extension/base/genexec.meta /epoc32/tools/makefile_templates/base/genexec.meta
+../extension/base/genexec.mk /epoc32/tools/makefile_templates/base/genexec.mk
+../extension/base/h2_genbootinc.meta /epoc32/tools/makefile_templates/base/h2_genbootinc.meta
+../extension/base/h2_genbootinc.mk /epoc32/tools/makefile_templates/base/h2_genbootinc.mk
+../extension/base/h2_restricted_coreldr.meta /epoc32/tools/makefile_templates/base/h2_restricted_coreldr.meta
+../extension/base/h2_restricted_coreldr.mk /epoc32/tools/makefile_templates/base/h2_restricted_coreldr.mk
+../extension/base/h4_genbootinc.meta /epoc32/tools/makefile_templates/base/h4_genbootinc.meta
+../extension/base/h4_genbootinc.mk /epoc32/tools/makefile_templates/base/h4_genbootinc.mk
+../extension/base/h4_restricted_coreldr.meta /epoc32/tools/makefile_templates/base/h4_restricted_coreldr.meta
+../extension/base/h4_restricted_coreldr.mk /epoc32/tools/makefile_templates/base/h4_restricted_coreldr.mk
+../extension/base/h4_restricted_on_coreldr.meta /epoc32/tools/makefile_templates/base/h4_restricted_on_coreldr.meta
+../extension/base/h4_restricted_on_coreldr.mk /epoc32/tools/makefile_templates/base/h4_restricted_on_coreldr.mk
+../extension/base/h4_restricted_on_miniboot.meta /epoc32/tools/makefile_templates/base/h4_restricted_on_miniboot.meta
+../extension/base/h4_restricted_on_miniboot.mk /epoc32/tools/makefile_templates/base/h4_restricted_on_miniboot.mk
+../extension/base/ne1_tb_restricted_coreldr.meta /epoc32/tools/makefile_templates/base/ne1_tb_restricted_coreldr.meta
+../extension/base/ne1_tb_restricted_coreldr.mk /epoc32/tools/makefile_templates/base/ne1_tb_restricted_coreldr.mk
+../extension/base/ne1_tb_genbootinc.meta /epoc32/tools/makefile_templates/base/ne1_tb_genbootinc.meta
+../extension/base/ne1_tb_genbootinc.mk /epoc32/tools/makefile_templates/base/ne1_tb_genbootinc.mk
+../extension/base/lab_restricted_miniboot.meta /epoc32/tools/makefile_templates/base/lab_restricted_miniboot.meta
+../extension/base/lab_restricted_miniboot.mk /epoc32/tools/makefile_templates/base/lab_restricted_miniboot.mk
+../extension/base/nand_fbr_offset.meta /epoc32/tools/makefile_templates/base/nand_fbr_offset.meta
+../extension/base/nand_fbr_offset.mk /epoc32/tools/makefile_templates/base/nand_fbr_offset.mk
+../extension/base/omap3_genbootinc.meta /epoc32/tools/makefile_templates/base/omap3_genbootinc.meta
+../extension/base/omap3_genbootinc.mk /epoc32/tools/makefile_templates/base/omap3_genbootinc.mk
+../extension/base/omap3_restricted_coreldr.meta /epoc32/tools/makefile_templates/base/omap3_restricted_coreldr.meta
+../extension/base/omap3_restricted_coreldr.mk /epoc32/tools/makefile_templates/base/omap3_restricted_coreldr.mk
+../extension/base/omap3_restricted_coreldr.flm /epoc32/tools/makefile_templates/base/omap3_restricted_coreldr.flm
+../extension/base/omap3_restricted_coreldr.xml /epoc32/tools/makefile_templates/base/omap3_restricted_coreldr.xml
+../extension/base/lab_restricted_miniboot.flm /epoc32/tools/makefile_templates/base/lab_restricted_miniboot.flm
+../extension/base/lab_restricted_miniboot.xml /epoc32/tools/makefile_templates/base/lab_restricted_miniboot.xml
+../extension/base/ne1_tb_restricted_coreldr.flm /epoc32/tools/makefile_templates/base/ne1_tb_restricted_coreldr.flm
+../extension/base/ne1_tb_restricted_coreldr.xml /epoc32/tools/makefile_templates/base/ne1_tb_restricted_coreldr.xml
+../extension/base/base_rvct_common.mk /epoc32/tools/makefile_templates/base/base_rvct_common.mk
+../extension/converged-comms/createcommdbs.meta /epoc32/tools/makefile_templates/converged-comms/createcommdbs.meta
+../extension/converged-comms/createcommdbs.mk /epoc32/tools/makefile_templates/converged-comms/createcommdbs.mk
+../extension/converged-comms/installdefaultcommdb.meta /epoc32/tools/makefile_templates/converged-comms/installdefaultcommdb.meta
+../extension/converged-comms/installdefaultcommdb.mk /epoc32/tools/makefile_templates/converged-comms/installdefaultcommdb.mk
+../extension/security/upsserver.meta /epoc32/tools/makefile_templates/security/upsserver.meta
+../extension/security/upsserver.mk /epoc32/tools/makefile_templates/security/upsserver.mk
+../extension/syslibs/conversiontable.meta /epoc32/tools/makefile_templates/syslibs/conversiontable.meta
+../extension/syslibs/conversiontable.mk /epoc32/tools/makefile_templates/syslibs/conversiontable.mk
+../extension/syslibs/fm_copyfile_to_winscw_zdrive.meta /epoc32/tools/makefile_templates/syslibs/fm_copyfile_to_winscw_zdrive.meta
+../extension/syslibs/fm_copyfile_to_winscw_zdrive.mk /epoc32/tools/makefile_templates/syslibs/fm_copyfile_to_winscw_zdrive.mk
+../extension/syslibs/generate_cpp.meta /epoc32/tools/makefile_templates/syslibs/generate_cpp.meta
+../extension/syslibs/generate_cpp.mk /epoc32/tools/makefile_templates/syslibs/generate_cpp.mk
+../extension/syslibs/generate_snm.meta /epoc32/tools/makefile_templates/syslibs/generate_snm.meta
+../extension/syslibs/generate_snm.mk /epoc32/tools/makefile_templates/syslibs/generate_snm.mk
+../extension/tools/features.meta /epoc32/tools/makefile_templates/tools/features.meta
+../extension/tools/features.mk /epoc32/tools/makefile_templates/tools/features.mk
+../extension/tools/compsupp.meta /epoc32/tools/makefile_templates/tools/compsupp.meta
+../extension/tools/compsupp.mk /epoc32/tools/makefile_templates/tools/compsupp.mk
+../extension/tools/x86tool.meta /epoc32/tools/makefile_templates/tools/x86tool.meta
+../extension/tools/x86tool.mk /epoc32/tools/makefile_templates/tools/x86tool.mk
+../shell/cmd.mk /epoc32/tools/shell/cmd.mk
+../shell/generic.mk /epoc32/tools/shell/generic.mk
+../shell/sh.mk /epoc32/tools/shell/sh.mk
+
+
+PRJ_TESTEXPORTS
+
+../extension/app-services/tzlocaltestserver.meta /epoc32/tools/makefile_templates/app-services/tzlocaltestserver.meta
+../extension/app-services/tzlocaltestserver.mk /epoc32/tools/makefile_templates/app-services/tzlocaltestserver.mk
+../extension/syslibs/test/bafl_copytestfiles.meta /epoc32/tools/makefile_templates/syslibs/test/bafl_copytestfiles.meta
+../extension/syslibs/test/bafl_copytestfiles.mk /epoc32/tools/makefile_templates/syslibs/test/bafl_copytestfiles.mk
+../extension/syslibs/test/bafl_resource_files.meta /epoc32/tools/makefile_templates/syslibs/test/bafl_resource_files.meta
+../extension/syslibs/test/bafl_resource_files.mk /epoc32/tools/makefile_templates/syslibs/test/bafl_resource_files.mk
+../extension/syslibs/test/centrep_copydatfile.meta /epoc32/tools/makefile_templates/syslibs/test/centrep_copydatfile.meta
+../extension/syslibs/test/centrep_copydatfile.mk /epoc32/tools/makefile_templates/syslibs/test/centrep_copydatfile.mk
+../extension/syslibs/test/centrep_copyincentrepsrv.meta /epoc32/tools/makefile_templates/syslibs/test/centrep_copyincentrepsrv.meta
+../extension/syslibs/test/centrep_copyincentrepsrv.mk /epoc32/tools/makefile_templates/syslibs/test/centrep_copyincentrepsrv.mk
+../extension/syslibs/test/centrep_copypctestfile.meta /epoc32/tools/makefile_templates/syslibs/test/centrep_copypctestfile.meta
+../extension/syslibs/test/centrep_copypctestfile.mk /epoc32/tools/makefile_templates/syslibs/test/centrep_copypctestfile.mk
+../extension/syslibs/test/centrep_copypctestfilev2.meta /epoc32/tools/makefile_templates/syslibs/test/centrep_copypctestfilev2.meta
+../extension/syslibs/test/centrep_copypctestfilev2.mk /epoc32/tools/makefile_templates/syslibs/test/centrep_copypctestfilev2.mk
+../extension/syslibs/test/charconv_testpostbuild.meta /epoc32/tools/makefile_templates/syslibs/test/charconv_testpostbuild.meta
+../extension/syslibs/test/charconv_testpostbuild.mk /epoc32/tools/makefile_templates/syslibs/test/charconv_testpostbuild.mk
+../extension/syslibs/test/charconv_tiso8859x_generate_cpp.meta /epoc32/tools/makefile_templates/syslibs/test/charconv_tiso8859x_generate_cpp.meta
+../extension/syslibs/test/charconv_tiso8859x_generate_cpp.mk /epoc32/tools/makefile_templates/syslibs/test/charconv_tiso8859x_generate_cpp.mk
+../extension/syslibs/test/charconv_tsnmdata.meta /epoc32/tools/makefile_templates/syslibs/test/charconv_tsnmdata.meta
+../extension/syslibs/test/charconv_tsnmdata.mk /epoc32/tools/makefile_templates/syslibs/test/charconv_tsnmdata.mk
+../extension/syslibs/test/ecom3_buildsis.meta /epoc32/tools/makefile_templates/syslibs/test/ecom3_buildsis.meta
+../extension/syslibs/test/ecom3_buildsis.mk /epoc32/tools/makefile_templates/syslibs/test/ecom3_buildsis.mk
+../extension/syslibs/test/ecom3_postbuild.meta /epoc32/tools/makefile_templates/syslibs/test/ecom3_postbuild.meta
+../extension/syslibs/test/ecom3_postbuild.mk /epoc32/tools/makefile_templates/syslibs/test/ecom3_postbuild.mk
+../extension/syslibs/test/ecom3_relocatetarget.meta /epoc32/tools/makefile_templates/syslibs/test/ecom3_relocatetarget.meta
+../extension/syslibs/test/ecom3_relocatetarget.mk /epoc32/tools/makefile_templates/syslibs/test/ecom3_relocatetarget.mk
+../extension/syslibs/test/featmgr_moveplugin.meta /epoc32/tools/makefile_templates/syslibs/test/featmgr_moveplugin.meta
+../extension/syslibs/test/featmgr_moveplugin.mk /epoc32/tools/makefile_templates/syslibs/test/featmgr_moveplugin.mk
+../extension/syslibs/test/sqlite3_securecopytestfiles.meta /epoc32/tools/makefile_templates/syslibs/test/sqlite3_securecopytestfiles.meta
+../extension/syslibs/test/sqlite3_securecopytestfiles.mk /epoc32/tools/makefile_templates/syslibs/test/sqlite3_securecopytestfiles.mk
+../extension/syslibs/word_template.meta /epoc32/tools/makefile_templates/syslibs/word_template.meta
+../extension/syslibs/word_template.mk /epoc32/tools/makefile_templates/syslibs/word_template.mk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/group/tools_buildsystem.mrp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,113 @@
+component tools_buildsystem
+
+ipr T
+
+source \sf\os\buildtools\toolsandutils\buildsystem
+
+binary \epoc32\tools\makefile_templates\app-services\buildstubsis.meta
+binary \epoc32\tools\makefile_templates\app-services\buildstubsis.mk
+binary \epoc32\tools\makefile_templates\app-services\buildupgradesis.meta
+binary \epoc32\tools\makefile_templates\app-services\buildupgradesis.mk
+binary \epoc32\tools\makefile_templates\app-services\tzlocaltestserver.meta
+binary \epoc32\tools\makefile_templates\app-services\tzlocaltestserver.mk
+binary \epoc32\tools\makefile_templates\application-protocols\buildstubsis.meta
+binary \epoc32\tools\makefile_templates\application-protocols\buildstubsis.mk
+binary \epoc32\tools\makefile_templates\base\bootstrap.meta
+binary \epoc32\tools\makefile_templates\base\bootstrap.mk
+binary \epoc32\tools\makefile_templates\base\bootstrap.xml
+binary \epoc32\tools\makefile_templates\base\bootstrap.flm
+binary \epoc32\tools\makefile_templates\base\config.meta
+binary \epoc32\tools\makefile_templates\base\config.mk
+binary \epoc32\tools\makefile_templates\base\copy_default.meta
+binary \epoc32\tools\makefile_templates\base\copy_default.mk
+binary \epoc32\tools\makefile_templates\base\genexec.meta
+binary \epoc32\tools\makefile_templates\base\genexec.mk
+binary \epoc32\tools\makefile_templates\base\base_rvct_common.mk
+binary \epoc32\tools\makefile_templates\base\h2_genbootinc.meta
+binary \epoc32\tools\makefile_templates\base\h2_genbootinc.mk
+binary \epoc32\tools\makefile_templates\base\h2_restricted_coreldr.meta
+binary \epoc32\tools\makefile_templates\base\h2_restricted_coreldr.mk
+binary \epoc32\tools\makefile_templates\base\h4_genbootinc.meta
+binary \epoc32\tools\makefile_templates\base\h4_genbootinc.mk
+binary \epoc32\tools\makefile_templates\base\h4_restricted_coreldr.meta
+binary \epoc32\tools\makefile_templates\base\h4_restricted_coreldr.mk
+binary \epoc32\tools\makefile_templates\base\h4_restricted_on_coreldr.meta
+binary \epoc32\tools\makefile_templates\base\h4_restricted_on_coreldr.mk
+binary \epoc32\tools\makefile_templates\base\h4_restricted_on_miniboot.meta
+binary \epoc32\tools\makefile_templates\base\h4_restricted_on_miniboot.mk
+binary \epoc32\tools\makefile_templates\base\lab_restricted_miniboot.meta
+binary \epoc32\tools\makefile_templates\base\lab_restricted_miniboot.mk
+binary \epoc32\tools\makefile_templates\base\lab_restricted_miniboot.xml
+binary \epoc32\tools\makefile_templates\base\lab_restricted_miniboot.flm
+binary \epoc32\tools\makefile_templates\base\nand_fbr_offset.meta
+binary \epoc32\tools\makefile_templates\base\nand_fbr_offset.mk
+binary \epoc32\tools\makefile_templates\base\ne1_tb_genbootinc.meta
+binary \epoc32\tools\makefile_templates\base\ne1_tb_genbootinc.mk
+binary \epoc32\tools\makefile_templates\base\ne1_tb_restricted_coreldr.meta
+binary \epoc32\tools\makefile_templates\base\ne1_tb_restricted_coreldr.mk
+binary \epoc32\tools\makefile_templates\base\ne1_tb_restricted_coreldr.xml
+binary \epoc32\tools\makefile_templates\base\ne1_tb_restricted_coreldr.flm
+binary \epoc32\tools\makefile_templates\base\omap3_genbootinc.meta
+binary \epoc32\tools\makefile_templates\base\omap3_genbootinc.mk
+binary \epoc32\tools\makefile_templates\base\omap3_restricted_coreldr.meta
+binary \epoc32\tools\makefile_templates\base\omap3_restricted_coreldr.mk
+binary \epoc32\tools\makefile_templates\base\omap3_restricted_coreldr.xml
+binary \epoc32\tools\makefile_templates\base\omap3_restricted_coreldr.flm
+binary \epoc32\tools\makefile_templates\converged-comms\createcommdbs.meta
+binary \epoc32\tools\makefile_templates\converged-comms\createcommdbs.mk
+binary \epoc32\tools\makefile_templates\converged-comms\installdefaultcommdb.meta
+binary \epoc32\tools\makefile_templates\converged-comms\installdefaultcommdb.mk
+binary \epoc32\tools\makefile_templates\security\upsserver.meta
+binary \epoc32\tools\makefile_templates\security\upsserver.mk
+binary \epoc32\tools\makefile_templates\syslibs\conversiontable.meta
+binary \epoc32\tools\makefile_templates\syslibs\conversiontable.mk
+binary \epoc32\tools\makefile_templates\syslibs\fm_copyfile_to_winscw_zdrive.meta
+binary \epoc32\tools\makefile_templates\syslibs\fm_copyfile_to_winscw_zdrive.mk
+binary \epoc32\tools\makefile_templates\syslibs\generate_cpp.meta
+binary \epoc32\tools\makefile_templates\syslibs\generate_cpp.mk
+binary \epoc32\tools\makefile_templates\syslibs\generate_snm.meta
+binary \epoc32\tools\makefile_templates\syslibs\generate_snm.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\bafl_copytestfiles.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\bafl_copytestfiles.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\bafl_resource_files.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\bafl_resource_files.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copydatfile.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copydatfile.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copyincentrepsrv.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copyincentrepsrv.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copypctestfile.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copypctestfile.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copypctestfilev2.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\centrep_copypctestfilev2.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\charconv_testpostbuild.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\charconv_testpostbuild.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\charconv_tiso8859x_generate_cpp.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\charconv_tiso8859x_generate_cpp.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\charconv_tsnmdata.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\charconv_tsnmdata.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\ecom3_buildsis.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\ecom3_buildsis.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\ecom3_postbuild.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\ecom3_postbuild.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\ecom3_relocatetarget.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\ecom3_relocatetarget.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\featmgr_moveplugin.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\featmgr_moveplugin.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\logeng_copytestfiles.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\logeng_copytestfiles.mk
+binary \epoc32\tools\makefile_templates\syslibs\test\sqlite3_securecopytestfiles.meta
+binary \epoc32\tools\makefile_templates\syslibs\test\sqlite3_securecopytestfiles.mk
+binary \epoc32\tools\makefile_templates\syslibs\word_template.meta
+binary \epoc32\tools\makefile_templates\syslibs\word_template.mk
+binary \epoc32\tools\makefile_templates\tools\compsupp.meta
+binary \epoc32\tools\makefile_templates\tools\compsupp.mk
+binary \epoc32\tools\makefile_templates\tools\features.meta
+binary \epoc32\tools\makefile_templates\tools\features.mk
+binary \epoc32\tools\makefile_templates\tools\x86tool.meta
+binary \epoc32\tools\makefile_templates\tools\x86tool.mk
+binary \epoc32\tools\shell\cmd.mk
+binary \epoc32\tools\shell\generic.mk
+binary \epoc32\tools\shell\sh.mk
+
+
+notes_source \component_defs\release.src
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/shell/cmd.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,136 @@
+# Copyright (c) 2005-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:
+#
+
+include $(EPOCROOT)epoc32/tools/shell/generic.mk
+
+# Host platform dependant variables
+/:=$(shell echo \)
+;:=;
+CP=copy
+RM=del
+RMDIR=rmdir
+MKDIR=mkdir
+ERASE=@erase /q 2>>nul
+
+
+# Some tools do not work with slash but only dollar slash.
+# That is actually a defect for them and should be fixed.
+# Then this macro should be abandoned.
+define slash2generic
+$(subst /,$/,$(1))
+endef
+
+# Call perl script to create directory.
+# Used in base/config.mk and many others
+define createdir
+perl $(EPOCROOT)epoc32/tools/emkdir.pl $(1)
+endef
+
+# Check if not exist directory then create it first.
+# Used in BASE/lubbock_miniboot
+define ifnotexistd
+if not exist $(1) md $(subst /,\,$(1))
+endef
+
+# This means there are something to add for SBSv2 here.
+# For abld, there is nothing.
+# Used in base/lubbock_miniboot and should be used in similar situation.
+define sbsadd
+
+endef
+
+# Add double quotes for abld target. No quote for SBSv2.
+# Used in base/lubbock_miniboot
+define abldquote
+"$(1)"
+endef
+
+# Used in Syslibs/conversiontable.mk
+define generated
+$(EPOCROOT)epoc32/build/$(1)
+endef
+
+# Used in syslibs/generate_cpp.mk
+define formatreleasables
+@echo $(1)
+endef
+
+# Used in BASE/config.mk
+define generatedcpp
+$(EPOCROOT)epoc32/build/generatedcpp/hal
+endef
+
+# Set path. Used in BASE/bootstrap.mk
+define epocbldabs
+$(1)$(2)
+endef
+
+# Call perl script ecopyfile.pl to copy.
+# Used in BASE/bootstrap.mk
+define ecopy
+perl $(EPOCROOT)epoc32/tools/ecopyfile.pl
+endef
+
+# Abld does not support pipe symbol | while SBSv2 does. So for Abld it is nothing.
+# Used in Base/bootstrap.mk.
+define pipe
+
+endef
+
+# Call perl script copyfeaturevariants.pl. Used in BASE/copy_default.mk.
+define cpfeature
+perl $(EPOCROOT)epoc32/tools/copyfeaturevariants.pl $(1) $(2)
+endef
+
+# Used in Syslibs/generate_cpp.mk at the bottom to deal with different
+# way of includeing TEM in Abld and SBSv2.
+define include
+$(EPOCROOT)epoc32/tools/makefile_templates/syslibs/generate_cpp.mk
+endef
+
+# Macro to change working directory. Used for TOOLS/stlport.mk
+# The path needs to be fixed before passing to cd command
+define chdir
+-cd $(subst /,\,$(1))
+endef
+
+# Macro to remove files. All paths need to be corrected before deleting.
+# Used in TOOLS/stlport.mk
+define remove
+-$(ERASE) $(subst /,\,$(1))
+endef
+
+# Macro to copy files. Needed for sbsv2 build
+# Used in PDS components in syslibs/*.mk
+define forcecopy
+$(CP) $(subst /,\,$(1)) $(subst /,\,$(2))
+endef
+
+# Macro to remove files. Needed for sbsv2 build
+# Used in PDS components in syslibs/*.mk
+define forceremove
+-$(ERASE) $(subst /,\,$(1))
+endef
+
+define tmpmacro
+$(call chdir,$(BUILD_DIR));configure.bat -c gcc;
+endef
+
+define settPath
+1
+endef
+
+# Configuration needs to be returned as upper case for abld
+CONFIGURATION:=REL
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/shell/generic.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,63 @@
+# Copyright (c) 2006-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:
+# Definitions common to all shells
+# *_PATH variables to support filename policy conformance in makefile templates
+# NOTE: These should all be replaced by calls to a function that lower-cases
+# the current setting of the original variable
+#
+#
+
+PLATFORM_PATH=$(PLATFORM)
+CFG_PATH=$(CFG)
+
+ifeq ($(PLATFORM_PATH),WINS)
+ PLATFORM_PATH=wins
+else
+ifeq ($(PLATFORM_PATH),WINSCW)
+ PLATFORM_PATH=winscw
+else
+ifeq ($(PLATFORM_PATH),ARMV5)
+ PLATFORM_PATH=armv5
+else
+ifeq ($(PLATFORM_PATH),ARMV7)
+ PLATFORM_PATH=armv7
+else
+ifeq ($(PLATFORM_PATH),TOOLS)
+ PLATFORM_PATH=tools
+else
+ifeq ($(PLATFORM_PATH),TOOLS2)
+ PLATFORM_PATH=tools2
+endif
+endif
+endif
+endif
+endif
+endif
+
+ifeq ($(CFG_PATH),UREL)
+ CFG_PATH=urel
+else
+ifeq ($(CFG_PATH),UDEB)
+ CFG_PATH=udeb
+else
+ifeq ($(CFG_PATH),DEB)
+ CFG_PATH=deb
+else
+ifeq ($(CFG_PATH),REL)
+ CFG_PATH=rel
+endif
+endif
+endif
+endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystem/shell/sh.mk Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,117 @@
+# Copyright (c) 2006-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:
+#
+
+include $(EPOCROOT)epoc32/tools/shell/generic.mk
+
+
+# Some tools do not work with slash but only dollar slash.
+# That is actually a defect for them and should be fixed.
+# Then this macro should be abandoned.
+define slash2generic
+$(1)
+endef
+
+# Use $(MKDIR) to create directory
+# Use in base/config.mk and many others
+define createdir
+$(MKDIR) -p $(1)
+endef
+
+# Check if not exist directory then create it first.
+# Use in BASE/lubbock_miniboot and many others
+define ifnotexistd
+if [ ! -d $(1) ]; then $(MKDIR) -p $(1); fi
+endef
+
+# This means there are something to add for SBSv2 here.
+# Used in base/lubbock_miniboot and should be used in similar situation.
+define sbsadd
+$(1)
+endef
+
+# Add double quotes for abld target. No quote for SBSv2.
+# Used in base/lubbock_miniboot
+define abldquote
+$(1)
+endef
+
+# Used in Syslibs/conversiontable.mk
+define generated
+$(EPOCROOT)epoc32/build/$(1)
+endef
+
+# Used in syslibs/generate_cpp.mk
+define formatreleasables
+$(if $(1),@echo $(word 1,$(1)))
+$(if $(1),$(call formatreleasables,$(wordlist 2,$(words $(1)),$(1))))
+endef
+
+# Used in BASE/config.mk
+define generatedcpp
+$(EPOCROOT)epoc32/build/generatedcpp/hal
+endef
+
+# Set path. Used in BASE/bootstrap.mk
+define epocbldabs
+$(EPOCBLD)
+endef
+
+# Copy. Used in BASE/bootstrap.mk
+define ecopy
+cp
+endef
+
+# Abld does not support pipe symbol | while SBSv2 does. So for Abld it is nothing.
+# Used in Base/bootstrap.mk.
+define pipe
+| $(1)
+endef
+
+# Used in BASE/copy_default.mk.
+define cpfeature
+$(CP) $? $@
+endef
+
+# Used in Syslibs/generate_cpp.mk at the bottom to deal with different
+# way of includeing TEM in Abld and SBSv2.
+define include
+$(TEMPLATE_EXTENSION_MAKEFILE)
+endef
+
+# Macro to change working directory. Used for TOOLS/stlport.mk
+# The path needs to be fixed before passing to cd command
+define chdir
+-cd $(1)
+endef
+
+# Macro to remove files. Used in TOOLS/stlport.mk
+define remove
+-rm -f $(1)
+endef
+
+# Macro to copy files. Needed for sbsv2 build
+# Used in PDS components in syslibs/*.mk
+define forcecopy
+$(CP) -f $(1) $(2) && chmod a+rwx $(2)
+endef
+
+# Macro to remove files. Needed for sbsv2 build
+# Used in PDS components in syslibs/*.mk
+define forceremove
+-$(ERASE) -f $(1)
+endef
+
+# Configuration needs to be returned as upper case for abld
+CONFIGURATION:=rel
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/BuildClient.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,88 @@
+# 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:
+# Script to Process builds commands sent from the Build Server via TCP/IP
+#
+#
+
+use strict;
+use FindBin; # for FindBin::Bin
+use Getopt::Long;
+
+# Add the directory contain this perl script into the path to find modules
+use lib $FindBin::Bin;
+
+use BuildClient;
+
+# Process the commandline
+my ($iDataSource, $iConnectWait, $iClientName, $iExitAfter, $iDebug) = ProcessCommandLine();
+
+# Create socket to server
+&BuildClient::Connect($iDataSource, $iConnectWait, $iClientName, $iExitAfter, $iDebug);
+
+# ProcessCommandLine
+#
+# Inputs
+#
+# Outputs
+# $iDataSource - Reference to array of Hostname:Port combinations to try in sequence
+# $iConnectWait (How often it polls for a build server)
+# $iClientName (Client name used to help identify the machine, Must be unique)
+# $iExitAfter - Number of succesful connections to exit after
+# $iDebug - Prints Command output to screen to help debug
+#
+# Description
+# This function processes the commandline
+
+sub ProcessCommandLine {
+ my ($iHelp, @iDataSource, $iConnectWait, $iDebug);
+ my ($iExitAfter) = -1; #Set default to never exit
+ GetOptions('h' => \$iHelp, 'd=s' => \@iDataSource, 'debug:s' => \$iDebug, 'w=i' => \$iConnectWait, 'c=s' => \$iClientName, 'e=i' => \$iExitAfter);
+
+ if (($iHelp) || (!defined @iDataSource) || (!defined $iConnectWait) || (!defined $iClientName))
+ {
+ &Usage();
+ } else {
+ foreach my $iMachine (@iDataSource)
+ {
+ &Usage() if ($iMachine !~ /^\S+:\d+/);
+ }
+ return(\@iDataSource, $iConnectWait, $iClientName, $iExitAfter, $iDebug);
+ }
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage {
+ print <<USAGE_EOF;
+
+ Usage: BuildClient.pl [options]
+
+USAGE_EOF
+print " Version: ".&BuildClient::GetClientVersion()."\n";
+print <<USAGE_EOF;
+
+ options:
+
+ -h help
+ -d Data Source - format Hostname:Port (e.g. Machine:1234) [Multiple allowed]
+ -w Seconds to wait between each connection attempt
+ -c Client name (Used to identify the machine in the logs, Must be unique)
+ -e Exit after specified number of successful connections [optional]
+ default to never exit
+USAGE_EOF
+ exit 1;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/BuildClient.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,417 @@
+# 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:
+#
+
+package BuildClient;
+
+use FindBin; # for FindBin::Bin
+use lib "$FindBin::Bin/lib/freezethaw"; # For FreezeThaw
+
+use strict;
+use Carp;
+use Msg;
+use FreezeThaw qw(freeze thaw);
+use Cwd 'chdir';
+use Compress::Zlib; # For compression library routines
+
+# Global Varibales
+my $gClientName;
+my ($gHiResTimer) = 0; #Flag - true (1) if HiRes Timer module available
+my ($gDebug) = 0;
+
+# Check if HiRes Timer is available
+if (eval "require Time::HiRes;") {
+ $gHiResTimer = 1;
+} else {
+ print "Cannot load HiResTimer Module\n";
+}
+
+
+# GetClientVersion
+#
+# Inputs
+#
+# Outputs
+# Client Version Number
+#
+# Description
+# This function returns the Client version number
+sub GetClientVersion
+{
+ return "1.3";
+}
+
+# rcvd_msg_from_server
+#
+# Inputs
+# $iConn (Instance of the Msg Module)
+# $msg (the recieved message from the server)
+# $err (any error message from the Msg Module)
+#
+# Outputs
+#
+# Description
+# This function processes the incoming message from the Build Server and acts upon them
+sub rcvd_msg_from_server {
+ my ($iConn, $msg, $err) = @_;
+
+ my ($iResults, $iChdir);
+
+ # if the message is empty or a "Bad file descriptor" error happens
+ # This usually means the the Build Server has closed the socket connection.
+ # The client is returned to trying to connect to a build server
+ if (($msg eq "") || ($err eq "Bad file descriptor"))
+ {
+ print "Server Disconnected\n";
+ return 0;
+ } elsif ($err ne "") {
+ print "Error is communication occured:$err\n";
+ return 0;
+ }
+
+ # Thaw the message, this decodes the text string sent from the server back into perl variables
+ my ($sub_name, $iID, $iStage, $iComp, $iCwd, $iCommandline) = thaw ($msg);
+
+ # The server has determined that this client is using a non-unique client name.
+ # The server has added a random number on to the client name to try and make it unique.
+ # The server send this new name back to the client, so the two are in sync.
+ if ($sub_name eq 'ChangeClientName')
+ {
+ print "ClientName changed to: $iID by the server\n";
+ $BuildClient::gClientName = $iID;
+ }
+
+ # The server sent and exit message to this client, so exit.
+ if ($sub_name eq 'Exit')
+ {
+ print "Server request the client to exit\n";
+ exit 0;
+ }
+
+ # If the command sent by the server is "SetEnv", call the SetEnv Function and respond to server when complete
+ if ($sub_name eq 'SetEnv')
+ {
+ &SetEnv($iID, $iStage);
+ # Prepare and send the "SetEnv Ready" message to the server with the client name
+ my $serialized_msg = freeze ("SetEnv Ready", $BuildClient::gClientName);
+ $iConn->transmit_immediately($serialized_msg);
+ } elsif ($sub_name eq 'Execute') {
+ # Process the "Execute" command
+ print "Executing ID ". ($iID+1) ." Stage $iStage\n";
+ # Add the client side per command start timestamp
+ &TimeStampStart(\$iResults);
+
+ eval {
+ no strict 'refs'; # Because we call the subroutine using
+ # a symbolic reference
+ # Change the working directory, first replacing the environment variables
+ $iCwd =~ s/%(\w+)%/$ENV{$1}/g;
+ $iCommandline =~ s/%(\w+)%/$ENV{$1}/g;
+ # If the changing of the working directory fails it will remain in the current directory
+ $iChdir = chdir "$iCwd";
+ # Don't execute the command if the changing of the working directory failed.
+ if ($iChdir)
+ {
+ # Log the directory change
+ print "Chdir $iCwd\n";
+ $iResults .= "Chdir $iCwd\n";
+ # Execute the "Execute" function, passing it the commandline to execute and collect the results
+ $iResults .= normalize_line_breaks(&{$sub_name} ($iCommandline));
+ } else {
+ $iResults .= "ERROR: Cannot change directory to $iCwd for $iComp\n";
+ }
+ # Add the client side per command end HiRes timestamp if available
+ &TimeStampEnd(\$iResults);
+ };
+
+ # Send an appropriate message back to the server, depending on error situation
+ if ($@ && $iChdir) { # Directory changed OK, but an error occurred subsequently
+ # Handle Generic errors
+ $msg = bless \$@, "RPC::Error\n";
+
+ # Freeze the perl variables into a text string to send to the server
+ $msg = freeze('Results', $BuildClient::gClientName, $iID, $iStage, $iComp, $iCwd, $iCommandline, Compress($msg));
+ } else { # Directory change failed OR no error at all.
+ # $iResults will contain the error string if changing working directories failed
+ # otherwise it will contain the output of the execution of the commandline
+ # Freeze the perl variables into a text string to send to the server
+ $msg = freeze('Results', $BuildClient::gClientName, $iID, $iStage, $iComp, $iCwd, $iCommandline, Compress($iResults));
+ }
+ # Send the message back to the server
+ $iConn->transmit_immediately($msg);
+
+ }
+}
+
+# normalize_line_breaks
+#
+# Inputs
+# $lines Text string which may consist of many lines
+#
+# Outputs
+# $lines Text string which may consist of many lines
+#
+# Description
+# This subroutine converts any Unix, Macintosh or other line breaks into the DOS/Windows CRLF sequence
+# Text in each line remains unchanged. Empty lines are discarded.
+sub normalize_line_breaks
+{
+ my $lines = '';
+ foreach my $line (split /\r|\n/, shift)
+ {
+ unless ($line) { next; } # Discard empty line
+ $lines .= "$line\n";
+ }
+ return $lines;
+}
+
+# Execute
+#
+# Inputs
+# @args
+#
+# Outputs
+# @results
+#
+# Description
+# This Executes the command in the args, must return and array
+# It combines STDERR into STDOUT
+sub Execute
+{
+ my (@iCommandline) = @_;
+
+ print "Executing '@iCommandline'\n";
+ if (! defined($BuildClient::gDebug))
+ {
+ return my $ireturn= `@iCommandline 2>&1`; # $ireturn is not used but ensures that a scalar is returned.
+ } else {
+ if ($BuildClient::gDebug ne "")
+ {
+ # Open log file for append, if cannot revert to STDOUT
+ open DEBUGLOG, ">>$BuildClient::gDebug" || $BuildClient::gDebug== "";
+ }
+ my $iResults;
+
+ print DEBUGLOG "Executing '@iCommandline'\n" if ($BuildClient::gDebug ne "");
+ open PIPE, "@iCommandline 2>&1 |";
+ while (<PIPE>)
+ {
+ if ($BuildClient::gDebug ne "")
+ {
+ print DEBUGLOG $_;
+ } else {
+ print $_;
+ }
+ $iResults .= $_;
+ }
+ close PIPE;
+ close DEBUGLOG if ($BuildClient::gDebug ne "");
+ return $iResults;
+ }
+}
+
+# SetEnv
+#
+# Inputs
+# @args
+#
+# Outputs
+#
+# Description
+# This function sets the local Environment.
+sub SetEnv
+{
+ my ($iKey, $iValue) = @_;
+
+ # Replace an environment Variable referenced using %Variable% with the contents of the Environment Variable
+ # This allows the use of one Environment Variable in another as long as it is already set
+ $iValue =~ s/%(\w+)%/$ENV{$1}/g;
+ print "Setting Environment Variable $iKey to $iValue\n";
+ $ENV{$iKey} = $iValue;
+}
+
+# Connect
+#
+# Inputs
+# $iDataSource - Reference to array of Hostname:Port of BuildServers to connect to)
+# $iConnectWait (How often it polls for a build server)
+# $iClientName (Client name used to help identify the machine, Must be unique)
+# $iDebug - Debug Option
+#
+# Outputs
+#
+# Description
+# This function connects to the BuildServer and reads commands to run
+
+sub Connect
+{
+ my ($iDataSource, $iConnectWait, $iClientName, $iExitAfter, $iDebug) = @_;
+
+ my ($iSuccessConnect);
+
+ # Set the Client name
+ $BuildClient::gClientName = $iClientName;
+ # Set Global Debug flag/filename
+ $BuildClient::gDebug = $iDebug;
+
+ # In continual loop try and connect to the datasource
+ while (($iExitAfter == -1) || ($iSuccessConnect < $iExitAfter))
+ {
+ # Cycle through the datasource list
+ my $iMachine = shift @$iDataSource;
+ push @$iDataSource, $iMachine;
+ print "Connecting to $iMachine\n";
+
+ # Process the datasource into hostname and port number
+ my ($iHostname,$iPort) = $iMachine =~ /^(\S+):(\d+)/;
+
+ # Create an instance of the message Module to handle the TCP/IP connection
+ my $iConn = Msg->associate($iPort, $iHostname, \&rcvd_msg_from_server);
+
+ # Check the status of the connection attempt
+ if ($iConn)
+ {
+ # Connection was succesful
+ print "Connection successful to $iMachine\n";
+ $iSuccessConnect++;
+ # Send a "Ready" command to the Server
+ my $serialized_msg = freeze ("Ready", $BuildClient::gClientName, &GetClientVersion);
+ print "Sending Ready\n";
+ $iConn->transmit_immediately($serialized_msg);
+ # Start the message processing loop with inital timeout of 300 seconds
+ Msg->result_iteration(300);
+ # Server disconnected, clean up by chdir to root
+ chdir "\\";
+ # Set the client name back to the name specified on the commandline just in case it has had it's name changed.
+ $BuildClient::gClientName = $iClientName;
+ } else {
+ # Connection Failed, wait specified time before continuing and trying another connection attempt
+ print "Could not connect to $iHostname:$iPort\n";
+ print "Trying another connection attempt in $iConnectWait seconds\n";
+ sleep $iConnectWait;
+ }
+ }
+}
+
+# TimeStampStart
+#
+# Inputs
+# $iData - Reference to variable to put the start time stamp
+#
+# Outputs
+#
+# Description
+# This places a timestamp in the logs
+sub TimeStampStart
+{
+ my $ref = shift;
+
+ # Add the client side per command start timestamp
+ $$ref = "++ Started at ".localtime()."\n";
+ # Add the client side per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ $$ref .= "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer unavailable statement
+ $$ref .= "+++ HiRes Time Unavailable\n";
+ }
+}
+
+# TimeStampEnd
+#
+# Inputs
+# $iData - Reference to variable to put the end time stamp
+#
+# Outputs
+#
+# Description
+# This places a timestamp in the logs
+sub TimeStampEnd
+{
+ my $ref = shift;
+
+ # Add the client side per command end HiRes timestamp if available
+ $$ref .= "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the client side per command end timestamp
+ $$ref .= "++ Finished at ".localtime()."\n";
+}
+
+# Subroutine for compressing data stream.
+# Input: message to be compressed.
+# Output: compressed message, ready for sending.
+sub Compress($)
+{
+ my $msg = shift; # Get the message.
+
+ # Initialise deflation stream
+ my $x;
+ eval {$x = deflateInit() or die "Error: Cannot create a deflation stream\n";};
+
+ if($@) # Deflation stream creationg has failed.
+ {
+ return Compress("Error: creation of deflation stream failed: $@\n");
+ }
+
+ # Compress the message
+ my ($output, $status);
+ my ($output2, $status2);
+
+ # First attempt to perform the deflation
+ eval { ($output, $status) = $x -> deflate($msg); };
+
+ if($@) # Deflation has failed.
+ {
+ $x = deflateInit();
+ ($output, $status) = $x -> deflate("ERROR: Compression failed: $@\n");
+ ($output2, $status2) = $x -> flush();
+
+ return $output.$output2;
+ }
+
+ # Now attempt to complete the compression
+ eval { ($output2, $status2) = $x -> flush(); };
+
+ if($@) # Deflation has failed.
+ {
+ $x = deflateInit();
+ ($output, $status) = $x -> deflate("ERROR: Compression failed: $@\n");
+ ($output2, $status2) = $x -> flush();
+
+ return $output.$output2;
+ }
+
+ if($status != Z_OK) # Deflation has failed.
+ {
+ $x = deflateInit();
+ ($output, $status) = $x -> deflate("ERROR: Compression failed: $@\n");
+ ($output2, $status2) = $x -> flush();
+
+ return $output.$output2;
+ }
+
+ # Attempt to complete the compressions
+ if($status2 != Z_OK)
+ {
+ $x = deflateInit();
+ ($output, $status) = $x -> deflate("ERROR: Compression failed: $@\n");
+ ($output2, $status2) = $x -> flush();
+ return $output.$output2;
+ }
+
+ # Return the compressed output.
+ return $output . $output2;
+}
+
+1;
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/BuildServer.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,125 @@
+# 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:
+# Script to send commands to 1 or more Build Clients to perform parallel builds
+#
+#
+
+use strict;
+use FindBin; # for FindBin::Bin
+use Getopt::Long;
+use File::Copy;
+
+# Add the directory contain this perl script into the path to find modules
+use lib $FindBin::Bin;
+
+use BuildServer;
+use ParseXML;
+
+# Turn on per command Buffering of STDOUT, so the log files are not so far behind what is actually happening
+$| = 1;
+
+# Process the commandline
+my ($iDataSource, $iPort, $iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections) = ProcessCommandLine();
+
+# Create socket to server
+&BuildServer::Start($iDataSource, $iPort, $iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections);
+
+
+# ProcessCommandLine
+#
+# Inputs
+#
+# Outputs
+# $iPort (Port to listen on for Build Clients)
+#
+# Description
+# This function processes the commandline
+
+sub ProcessCommandLine {
+ my ($iHelp, @iPort, $iDataSource, $iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections);
+ GetOptions('h' => \$iHelp, 'd=s' =>\$iDataSource, 'p=i' => \@iPort, 'l=s' => \$iLogFile, 'e=s' =>\$iEnvSource, 't=s' =>\$iConnectionTimeout, 'c=s' =>\$iSocketConnections);
+
+ if (($iHelp) || (scalar(@iPort) < 0) || (!defined $iDataSource) || (!defined $iLogFile))
+ {
+ Usage();
+ } elsif (! -e $iDataSource) {
+ die "Cannot open $iDataSource";
+ }
+ if ((defined $iEnvSource) && (! -e $iEnvSource))
+ {
+ die "Cannot open $iEnvSource";
+ }
+
+ &backupFile($iLogFile) if (-e $iLogFile);
+
+ return($iDataSource,\@iPort,$iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections);
+}
+
+# backupFile
+#
+# Inputs
+# $iFile - filename to backup
+#
+# Outputs
+#
+# Description
+# This function renames a file with the .baknn extension
+sub backupFile
+{
+ my ($iFile) = @_;
+
+ my ($iBak) = $iFile.".bak";
+ my ($i, $freefilename);
+ # Loop until you find a free file name by increamenting the number on the end of the .bak extension
+ while (!$freefilename)
+ {
+ if (-e $iBak.$i)
+ {
+ $i++;
+ } else {
+ $iBak .= $i;
+ $freefilename = 1;
+ }
+ }
+ print "WARNING: $iFile already exists, creating backup of orignal with new name of $iBak\n";
+ move($iFile,$iBak) or die "Could not backup $iFile to $iBak because of: $!\n";
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage {
+ print <<USAGE_EOF;
+
+ Usage: BuildServer.pl [options]
+
+USAGE_EOF
+print " Version: ".&BuildServer::GetServerVersion()."\n";
+print <<USAGE_EOF;
+
+ options:
+
+ -h help
+ -p Port number to listen on for Build Clients [Multiple allowed]
+ -t Time between connection attempts [Optional - default 0 seconds]
+ -c Number of connection attempts per port [Optional - default infinite]
+ -d Data Source (XML command file)
+ -l Log file for output from commands run on the Build Client
+ -e Use Environment of this data source (XML command file)
+ The Environment in the main data source takes precedence
+USAGE_EOF
+ exit 1;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/BuildServer.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,582 @@
+# 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:
+#
+
+package BuildServer;
+
+use strict;
+
+use FindBin; # for FindBin::Bin
+use lib "$FindBin::Bin/lib/freezethaw"; # For FreezeThaw
+
+# Other necessary modules. For "use Scanlog;" see dynamic code below.
+use Carp;
+use Msg;
+use ParseXML;
+use FreezeThaw qw(freeze thaw);
+use IO::File;
+use File::Basename;
+use File::Copy;
+use Compress::Zlib; # For decompression library routines
+
+
+# Globals
+my @gCommands; # Holds the parsed "Execute" data from the XML file.
+my @gSetEnv; # Holds the parsed "SetEnv" data from the XML file.
+my $gIDCount = 0; # The current Execute ID we're processing.
+my $gStage; # The current Stage we're in.
+my %gClientEnvNum; # Holds the current index into @gSetEnv for each client. Indexed by client name.
+my %gClientStatus; # Holds the status of each client. Indexed by client name.
+my %gClientHandles; # Holds the socket of each client. Indexed by client name
+my $gLogFileH; # The logfile.
+my $gLogStarted = 0; # Boolean to say if the logfile has been started.
+my $gRealTimeError = ""; # "" = No error, otherwise a string significant to AutoBuild's log parsing
+my $gScanlogAvailable = 0; # Boolean to say if scanlog is available.
+my $gExit = 0; # 0 = FALSE (Do not exit) # 1 = TRUE (Send Exit to all clients for next command)
+
+
+
+# Check if HiRes Timer is available
+my ($gHiResTimer) = 0; #Flag - true (1) if HiRes Timer module available
+if (eval "require Time::HiRes;") {
+ $gHiResTimer = 1;
+} else {
+ print "Cannot load HiResTimer Module\n";
+}
+
+
+# Check if Scanlog.pm is available.
+# In the Perforce order of things, scanlog.pm is in directory ".\scanlog" relative to BuildServer.pl
+# However, at build time, BuildServer.pl is in "\EPOC32\Tools\Build" while scanlog.pm is in "\EPOC32\Tools"
+# i.e. in the parent directory relative to BuildServer.pl
+# If Scanlog cannot be found in either place, we continue, but the Scanlog functionality will be skipped.
+if (eval {require scanlog::Scanlog;})
+ {
+ $gScanlogAvailable = 1;
+ }
+elsif (eval {use lib $FindBin::Bin.'/..'; require Scanlog;})
+ {
+ $gScanlogAvailable = 1;
+ }
+else
+ {
+ print "Cannot load Scanlog Module\n";
+ }
+
+# GetServerVersion
+#
+# Inputs
+#
+# Outputs
+# Server Version Number
+#
+# Description
+# This function returns the server version number
+sub GetServerVersion
+{
+ return "1.3";
+}
+
+# rcvd_msg_from_client
+#
+# Inputs
+# $iConn (Instance of the Msg Module)
+# $msg (the recieved message from the client)
+# $err (any error message from the Msg Module)
+#
+# Outputs
+#
+# Description
+# This function processes the incoming message from the BuildClient and acts upon them
+sub rcvd_msg_from_client {
+ my ($iConn, $msg, $err) = @_;
+
+ # If the message is empty or a "Bad file descriptor" error happens then it
+ # usually means the the BuildServer has closed the socket connection.
+ # The BuildClient will keep trying to connect to a BuildServer
+ if (($msg eq "") || ($err eq "Bad file descriptor"))
+ {
+ print "A client has probably Disconnected\n";
+ croak "ERROR: Cannot recover from Error: $err\n";
+ }
+
+ # Thaw the message, this decodes the text string sent from the client back into perl variables
+ my ($iCommand, $iClientName, $iID, $iStage, $iComp, $iCwd, $iCommandline, $args) = thaw ($msg);
+
+ # Handle a "Ready" command. A client wishes to connect.
+ if ( $iCommand eq "Ready")
+ {
+ # Check the Client Version. $iID holds the client version in the "Ready" message.
+ if ($iID ne &GetServerVersion)
+ {
+ die "ERROR: Client version \"$iID\" does not match Server version \"".&GetServerVersion."\", cannot continue\n";
+ }
+ # Handle the initial "Ready" Command from the client
+ # Check that the Client name is unique
+ if (defined $gClientHandles{$iClientName})
+ {
+ # The Client name is not unique, a client by this name has already connected
+ warn "WARNING: Multiple Clients using the same name\n";
+ warn "Adding random number to client name to try and make it unique\n";
+ warn "This will affect the preference order of the Clients\n";
+ # Generate a ramdom number to add to the client name.
+ my ($iRNum) = int(rand 10000000);
+ $iClientName .= $iRNum;
+ print "Changing ClientName to \"$iClientName\"\n";
+ # Send the new Client name to the client
+ my $iMsg = freeze("ChangeClientName", $iClientName);
+ $iConn->transmit_immediately($iMsg);
+ }
+
+ # Add the connection object to the store of connections
+ $gClientHandles{$iClientName} = $iConn;
+
+ # Write the header to the logfile on first connection only
+ if ( $gLogStarted == 0)
+ {
+ # The start of the log file only needs to be printed once
+ $gLogStarted = 1;
+ &PrintStageStart;
+ }
+
+ # Set Environment Variable counter to zero
+ # This client has not been sent any environment variables yet
+ $gClientEnvNum{$iClientName} = 0;
+ # Set the $iCommand variable so that we begin sending Environment Variables
+ $iCommand = "SetEnv Ready";
+ }
+
+ # Handle the "SetEnv Ready" command. The client is ready for a command or env var.
+ if ( $iCommand eq "SetEnv Ready")
+ {
+ # If there are any environment variables to be set, send the next one to the client to set it
+ if (defined $gSetEnv[$gClientEnvNum{$iClientName}])
+ {
+ &Send_SetEnv($iConn, $gClientEnvNum{$iClientName});
+ $gClientEnvNum{$iClientName}++;
+ } else {
+ # The client has gone through the connect process and has been sent all its environment variables
+ # Add this client to the list of client ready to process commands
+ AddReady($iClientName, $iConn);
+ }
+ }
+
+ # Handle the "Results" command. The client has finished a step and given us the results.
+ if ( $iCommand eq "Results")
+ {
+ $args = Decompress($args); # Decompress the results.
+
+ # If Scanlog has been found, check returned text for real time error string.
+ # If a client reports a real time error, set global flag. We can't just die here and
+ # now; instead we must wait for other "busy" clients to finish their current tasks.
+ if ($gScanlogAvailable)
+ {
+ if (Scanlog::CheckForRealTimeErrors($args))
+ {
+ # Command returned a RealTimeBuild error - abort this script,
+ # and propagate it up to our parent process
+ $gRealTimeError = "RealTimeBuild:";
+ }
+ elsif ($gCommands[$iID]{'ExitOnScanlogError'} =~ /y/i && Scanlog::CheckForErrors($args) )
+ {
+ # This is a critical step - flag a real time error,
+ # and don't process anything else in this script
+ $gRealTimeError = "Realtime error (ExitOnScanlogError)";
+ }
+ }
+
+ # Print the correct headers for an individual command to the log
+ print $gLogFileH "=== Stage=$gStage == $iComp\n";
+ print $gLogFileH "-- $iCommandline\n";
+ print $gLogFileH "--- $iClientName Executed ID ".($iID+1)."\n";
+ # Print the output of the command into the log
+ print $gLogFileH "$args";
+ # Flush the handle to try and make sure the logfile is up to date
+ $gLogFileH->flush;
+ # Add this client to the list of client ready to process commands
+ AddReady($iClientName, $iConn);
+ }
+}
+
+# Send_SetEnv
+#
+# Inputs
+# $iOrder - index into @gSetEnv
+#
+# Outputs
+# Sends frozen SetEnv message
+#
+# Description
+# This function is used to produce frozen SetEnv messages from the hash and then sends its
+sub Send_SetEnv
+{
+ my ($iConn, $iOrder) = @_;
+
+ my $iName = $gSetEnv[$iOrder]{'Name'};
+ my $iValue = $gSetEnv[$iOrder]{'Value'};
+
+ my $iMsg = freeze ('SetEnv', $iName, $iValue);
+
+ $iConn->transmit_immediately($iMsg);
+}
+
+
+# login_proc
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function can be used to process a login procedure
+# No login procedure is implemented
+sub login_proc {
+ # Unconditionally accept
+ \&rcvd_msg_from_client;
+}
+
+# Start
+#
+# Inputs
+# $iDataSource (XML Command file)
+# $iPort (Port number to listen on for Build Clients)
+# $iLogFile (Logfile to write output from Build Clients to)
+#
+# Outputs
+#
+# Description
+# This function starts the server
+
+sub Start
+{
+ my ($iDataSource, $iPort, $iLogFile, $iEnvSource, $iConnectionTimeout, $iSocketConnections) = @_;
+
+ my ($iHost) = '';
+
+ # Open the log file for writing, it will not overwrite logs
+ $gLogFileH = IO::File->new("> $iLogFile")
+ or croak "ERROR: Couldn't open \"$iLogFile\" for writing: $!\n";
+
+ # If $iEnvSource is defined the Environment needs to be processed from this file
+ if (defined $iEnvSource)
+ {
+ # Parse the XML data
+ my ($iCommands, $iSetEnv) = &ParseXML::ParseXMLData($iEnvSource);
+ push @gSetEnv, @$iSetEnv;
+ }
+
+ # Parse the XML data
+ my ($iCommands, $iSetEnv) = &ParseXML::ParseXMLData($iDataSource);
+ push @gCommands, @$iCommands;
+ push @gSetEnv, @$iSetEnv;
+
+ # Assuming there are commands to be executed, initialise the "current stage"
+ # variable with the stage of the first command
+ $gStage = $gCommands[$gIDCount]{'Stage'} if (scalar @gCommands);
+
+ # Create the TCP/IP listen socket
+ Msg->recent_agent($iPort, $iHost, \&login_proc, $iConnectionTimeout, $iSocketConnections);
+ print "BuildServer created. Waiting for BuildClients\n";
+ # Enter event loop to process incoming connections and messages
+ Msg->result_iteration();
+}
+
+
+# SendCommand
+#
+# Inputs
+# $iConn - the socket to use
+# $iID - the ID of the command
+#
+# Outputs
+# Command or file or file request sent via TCP connection
+#
+# Description
+# Sends the command or file or file request indexed by $iID to the client
+sub SendCommand
+{
+ my ($iConn, $iID) = @_;
+
+ my $msg;
+ my $iData;
+
+ $msg = freeze ($gCommands[$iID]{'Type'}, $iID, $gCommands[$iID]{'Stage'}, $gCommands[$iID]{'Component'}, $gCommands[$iID]{'Cwd'}, $gCommands[$iID]{'CommandLine'});
+
+
+ $iConn->transmit_immediately($msg);
+}
+
+
+# AddReady
+#
+# Inputs
+# $iClientName (Client name)
+# $iConn (Connection Object)
+#
+# Outputs
+#
+# Description
+# This function adds the client defined by the connection ($iConn) to the list of ready clients
+# It also sends new commands to clients if apropriate
+sub AddReady
+{
+ my ($iClientName, $iConn) = @_;
+
+ my @iClientsWaiting;
+
+ # Set the client status to the "Waiting" State
+ $gClientStatus{$iClientName} = "Waiting";
+
+ # If the next command is Exit set global Exit flag
+ if (defined $gCommands[$gIDCount])
+ {
+ $gExit = 1 if ($gCommands[$gIDCount]{'Type'} eq "Exit");
+ }
+
+ # Add the all "Waiting" clients to a list of waiting Clients
+ foreach my $iClient (keys %gClientStatus)
+ {
+ push @iClientsWaiting, $iClient if ($gClientStatus{$iClient} eq "Waiting");
+ }
+
+ # Are all the clients waiting?
+ if (scalar @iClientsWaiting == $iConn->AllAssociations)
+ {
+ # Everyone has finished. Everyone is waiting. One of 3 things has happened:
+ # - There has been a realtime error.
+ # - All commands have been run.
+ # - We have come to the end of the current stage.
+ # - There is only one client, and it has further commands in the current stage.
+
+ if ($gRealTimeError)
+ {
+ &PrintStageEnd;
+
+ print $gLogFileH "ERROR: $gRealTimeError BuildServer terminating\n";
+ close ($gLogFileH);
+ die "ERROR: $gRealTimeError BuildServer terminating\n";
+ }
+
+ # If all other clients waiting for a command and an exit pending
+ # Send Messages to all clients (not just current) to exit their procees
+ # No return is expected so exit the buildserver process
+ if ($gExit)
+ {
+ # Close up log nicely
+ &PrintStageEnd;
+ foreach my $key (keys %gClientHandles)
+ {
+ my $msg = freeze ("Exit");
+ $gClientHandles{$key}->transmit_immediately($msg);
+ }
+ exit 0;
+ }
+
+ if (!defined $gCommands[$gIDCount])
+ {
+ # All commands have been run. There are no more commands.
+ &PrintStageEnd;
+
+ print "No more stages\n";
+ close ($gLogFileH);
+ # Exit successfully
+ exit 0;
+ }
+
+ if ( !defined $gStage || # the last command had no stage set
+ $gStage eq '' || # the last command had no stage set
+ $gStage != $gCommands[$gIDCount]{'Stage'} # the last command's stage is different to the next command's stage
+ )
+ {
+ # We've successfully reached the end of a stage
+ &PrintStageEnd;
+
+ # Update the current stage variable to be the stage of the next command
+ $gStage = $gCommands[$gIDCount]{'Stage'};
+
+ &PrintStageStart;
+ }
+ }
+
+ # If the next command is the first in a stage then all clients are waiting.
+
+ # Below this point we are approaching the command sending section.
+ # Other clients could be working on previous commands at this point.
+
+ # If the next command can not be run in parallel with the previous command
+ # and another client is executing the previous command, then we should
+ # return and simply wait for the other client to finish.
+
+ # Don't issue anymore commands if there is an exit pending
+ return if ($gExit);
+
+ # Don't issue anymore commands if there has been a realtime error.
+ return if ($gRealTimeError);
+
+ # Sort the waiting clients alphabetically
+ @iClientsWaiting = sort(@iClientsWaiting);
+ # Extract the first client name
+ my $iClient = shift @iClientsWaiting;
+
+ # Check if there are commands and clients available
+ while (defined $gCommands[$gIDCount] and defined $iClient)
+ {
+ # Check if the next command's stage is different to the current stage.
+ # They will be identical if we are running the first command in a stage.
+ # They will also be identical if we are running a subsequent command in the same stage.
+ # So if they are different it means the next command is in a different stage.
+ # Therefore we want to return and wait until all other clients have finished before
+ # sending this command.
+ return if ($gStage ne $gCommands[$gIDCount]{'Stage'});
+
+ # Check to make sure a Exit command is not sent to 1 of multiple clients if Exit was not in it's own stage
+ return if ($gCommands[$gIDCount]{'Type'} eq "Exit");
+
+ # If at least one client is doing some work, and both the previous and next
+ # commands' stages are not set, just wait until the working client finishes.
+ # So we treat two steps with no stage name as though a stage change has occurred between them.
+ if ((!defined $gCommands[$gIDCount-1]{'Stage'} or '' eq $gCommands[$gIDCount-1]{'Stage'}) and
+ (!defined $gCommands[$gIDCount]{'Stage'} or '' eq $gCommands[$gIDCount]{'Stage'}) )
+ {
+ foreach my $status (values %gClientStatus)
+ {
+ return if ($status ne 'Waiting');
+ }
+ }
+
+ print "Sending Step ". ($gIDCount+1) ." to $iClient\n";
+
+ # Set client as "Busy" and then send the command
+ $gClientStatus{$iClient} = "Busy";
+ &SendCommand($gClientHandles{$iClient}, $gIDCount);
+ $gIDCount++;
+
+ # Extract the next client name
+ $iClient = shift @iClientsWaiting;
+ }
+}
+
+sub PrintStageStart
+{
+ # Output to log that the Stage has started
+ print $gLogFileH "===-------------------------------------------------\n";
+ print $gLogFileH "=== Stage=$gStage\n";
+ print $gLogFileH "===-------------------------------------------------\n";
+ print $gLogFileH "=== Stage=$gStage started ".localtime()."\n";
+
+ # Flush the handle to try and make sure the logfile is up to date
+ $gLogFileH->flush;
+}
+
+sub PrintStageEnd
+{
+ print "Stage End $gStage\n";
+
+ # Output to the log that the Stage has finished
+ print $gLogFileH "=== Stage=$gStage finished ".localtime()."\n";
+ # Flush the handle to try and make sure the logfile is up to date
+ $gLogFileH->flush;
+}
+
+# TimeStampStart
+#
+# Inputs
+# $iData - Reference to variable to put the start time stamp
+#
+# Outputs
+#
+# Description
+# This places a timestamp in the logs
+sub TimeStampStart
+{
+ my $ref = shift;
+
+ # Add the client side per command start timestamp
+ $$ref = "++ Started at ".localtime()."\n";
+ # Add the client side per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ $$ref .= "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer unavailable statement
+ $$ref .= "+++ HiRes Time Unavailable\n";
+ }
+}
+
+# TimeStampEnd
+#
+# Inputs
+# $iData - Reference to variable to put the end time stamp
+#
+# Outputs
+#
+# Description
+# This places a timestamp in the logs
+sub TimeStampEnd
+{
+ my $ref = shift;
+
+ # Add the client side per command end HiRes timestamp if available
+ $$ref .= "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the client side per command end timestamp
+ $$ref .= "++ Finished at ".localtime()."\n";
+}
+
+# Subroutine for decompressing data stream.
+# Input: message to be decompressed.
+# Output: decompressed message.
+# Note: here, when decompression is taking place, usually a complete message
+# is passed as the input parameter; in this case Z_STREAM_END is the
+# returned status. If an empty message is decompressed (e.g. because ""
+# was sent) Z_OK is returned.
+sub Decompress($)
+{
+ my $msg = shift; # Get the message.
+
+ # Initialise deflation stream
+ my ($x, $init_status);
+ eval { ($x, $init_status) = inflateInit() or die "Cannot create an inflation stream\n"; };
+
+ if($@) # Inflation initialisation has failed.
+ {
+ return "ERROR: Decompression initialisation failed: $@\nERROR: zlib error message: ", $x->msg(), "\n";
+ }
+
+ # Some other failure?
+ if($init_status != Z_OK and !defined($x))
+ {
+ return "ERROR: Decompression initialisation failed: $init_status\n";
+ }
+
+ # Decompress the message
+ my ($output, $status);
+ eval { ($output, $status) = $x->inflate(\$msg) or die "ERROR: Unable to decompress message"; };
+
+ if($@) # Failure of decompression
+ {
+ return "ERROR: unable to decompress: $@\n";
+ }
+
+ # Some other failure?
+ if($status != Z_STREAM_END and $status != Z_OK)
+ {
+ my $error = $x->msg();
+ return "ERROR: Decompression failed: $error\n";
+ }
+
+ # Return the decompressed output.
+ return $output;
+}
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/GenBuild.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,850 @@
+# 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:
+#
+
+package GenBuild;
+
+use strict;
+use Carp;
+use IO::File;
+
+# Global Variables
+
+my @components;
+my $iIDCount;
+my $iStageCount;
+my %arm_assplist;
+my $savespace="";
+my $keepgoing="";
+my $build_tools=0;
+my $build_cwtools=0;
+my $build_winc=0;
+my $build_thumb=0;
+my $build_armi=0;
+my $build_arm4=0;
+my $build_arm4t=0;
+my $build_armv5=0;
+my $build_arm3=0;
+my $epoc_only=0;
+my $build_winscw=0;
+my $build_wins=0;
+my $build_bootstrap;
+my $basename;
+my $iSourceDir;
+my $build_UREL=0;
+my $build_UDEB=0;
+my $build_urel_udeb="";
+my $build_test=0;
+
+my ($XMLFileH, $gLogFileH);
+
+my ($gHiResTimer) = 0; #Flag - true (1) if HiRes Timer module available
+
+# Check if HiRes Timer is available
+if (eval "require Time::HiRes;") {
+ $gHiResTimer = 1;
+} else {
+ print "Cannot load HiResTimer Module\n";
+}
+
+sub Start
+{
+ my ($iDataSource, $iDataOutput, $iLogFile, $iSourceDir, $iReallyClean, $iClean) = @_;
+
+ # Copied from genbuild.pl
+
+ # Check for EPOCROOT
+ # It's not used directly by GENBUILD, but this is a good early stage at which
+ # to discover that it hasn't been set...
+
+ my $epocroot = $ENV{EPOCROOT};
+ die "ERROR: Must set the EPOCROOT environment variable\n" if (!defined($epocroot));
+ $epocroot =~ s-/-\\-go; # for those working with UNIX shells
+ die "ERROR: EPOCROOT must not include a drive letter\n" if ($epocroot =~ /^.:/);
+ die "ERROR: EPOCROOT must be an absolute path without a drive letter\n" if ($epocroot !~ /^\\/);
+ die "ERROR: EPOCROOT must not be a UNC path\n" if ($epocroot =~ /^\\\\/);
+ die "ERROR: EPOCROOT must end with a backslash\n" if ($epocroot !~ /\\$/);
+ die "ERROR: EPOCROOT must specify an existing directory\n" if (!-d $epocroot);
+
+ # $iSourceDir must en in a \
+ # Add a \ if not present
+ if ($iSourceDir !~ /\\$/)
+ {
+ $iSourceDir .= "\\";
+ }
+
+ for(my $j = 0; $j < scalar(@$iDataSource); $j++)
+ {
+ $GenBuild::basename .= " " if ($j > 0);
+ my ($iFile) = @$iDataSource[$j] =~ m#.*([\\\/]|^)(.*?)\..*$#;
+ $GenBuild::basename .= @$iDataSource[$j];
+ }
+
+ #Set the global iSourceDir
+ $GenBuild::iSourceDir = $iSourceDir;
+
+ # Open Log file
+ $GenBuild::gLogFileH = IO::File->new("> $iLogFile")
+ or croak "Couldn't open $iLogFile for writing: $!\n";
+
+ print $GenBuild::gLogFileH "===-------------------------------------------------\n";
+ print $GenBuild::gLogFileH "=== Genxml\n";
+ print $GenBuild::gLogFileH "===-------------------------------------------------\n";
+ print $GenBuild::gLogFileH "=== Genxml started ".localtime()."\n";
+
+ for(my $j = 0; $j < scalar(@$iDataSource); $j++)
+ {
+ # Open DataSource
+ my ($iFile) = @$iDataSource[$j];
+ open FILE, "< $iFile" or die "Can't read $iFile\n";
+
+ print $GenBuild::gLogFileH "=== Genxml == $iFile\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Time Unavailable\n";
+ }
+
+ # Process the Txt file in the same manner as the old genbuild
+ # Note:
+ # Additional options 'udeb', 'urel' and 'test' were added in response
+ # to a specific request, but are not otherwise supported by Symbian.
+ while (<FILE>)
+ {
+ s/\s*#.*$//;
+ s/^\s*//;
+ my $line = lc $_;
+ if ($line =~ /^$/)
+ {
+ next;
+ }
+
+ if ($line =~ /<option (\w+)\s*(.*)>/)
+ {
+ my $option = $1;
+ my $optargs= $2;
+ if ($option =~ "savespace")
+ {
+ $GenBuild::savespace = "-savespace";
+ next;
+ }
+ if ($option =~ "keepgoing")
+ {
+ $GenBuild::keepgoing = "-keepgoing";
+ next;
+ }
+ if ($option =~ "tools")
+ {
+ $GenBuild::build_tools = 1;
+ next;
+ }
+ if ($option eq "cwtools")
+ {
+ $GenBuild::build_cwtools = 1;
+ next;
+ }
+ if ($option =~ "winc")
+ {
+ $GenBuild::build_winc = 1;
+ next;
+ }
+
+ # Do not build winc, wins or winscw
+ if ($option =~ "epoconly")
+ {
+ $GenBuild::build_winc = 0;
+ $GenBuild::epoc_only = 1;
+ next;
+ }
+ if ($option =~ "thumb")
+ {
+ $GenBuild::build_thumb = 1;
+ next;
+ }
+
+ # ARMI option
+ if ($option =~ "armi")
+ {
+ $GenBuild::build_armi = 1;
+ next;
+ }
+
+ # ARM4
+ if ($option eq "arm4")
+ {
+ $GenBuild::build_arm4 = 1;
+ next;
+ }
+
+ # ARM4T
+ if ($option eq "arm4t")
+ {
+ $GenBuild::build_arm4t = 1;
+ next;
+ }
+
+ # ARMv5
+ if ($option =~ "armv5")
+ {
+ $GenBuild::build_armv5 = 1;
+ next;
+ }
+
+ if ($option =~ "arm3")
+ {
+ $GenBuild::build_arm3 = 1;
+ next;
+ }
+
+ # Use Visual Studio
+ if ($option eq "wins")
+ {
+ $GenBuild::build_wins = 1;
+ next;
+ }
+
+ # Use CodeWarrior
+ if ($option eq "winscw")
+ {
+ $GenBuild::build_winscw = 1;
+ next;
+ }
+
+ if ($option eq "udeb")
+ {
+ $GenBuild::build_UDEB = 1;
+ next;
+ }
+
+ if ($option eq "urel")
+ {
+ $GenBuild::build_UREL = 1;
+ next;
+ }
+
+ if ($option eq "test")
+ {
+ $GenBuild::build_test = 1;
+ next;
+ }
+
+ if ($option =~ "arm_assp")
+ {
+ $GenBuild::arm_assplist{$optargs} = 1;
+ next;
+ }
+
+
+ print "Option $1 not yet implemented\n";
+ next;
+ }
+ if ($line =~ /^([^<]\S+)\s+(\S+)/)
+ {
+ if (!-e "$GenBuild::iSourceDir$2\\bld.inf")
+ {
+ print $GenBuild::gLogFileH "MISSING COMPONENT $1: can't find $GenBuild::iSourceDir$2\\bld.inf\n";
+ next;
+ }
+ }
+ if ($line =~ /<special bldfiles e32toolp group>/)
+ {
+ # Handle Special
+ $GenBuild::build_bootstrap = 1;
+ next;
+ }
+
+ push @GenBuild::components, $line;
+ }
+
+ close(FILE);
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+ }
+
+ print $GenBuild::gLogFileH "=== Genxml == Output\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Missing\n";
+ }
+
+ &PBuildLevels($iDataOutput);
+
+ # Generate additional ReallyClean and Clean XML files if required
+ &GenReallyClean($iReallyClean) if (defined $iReallyClean);
+ &GenClean($iClean) if (defined $iClean);
+
+ # Close file handles
+ close($GenBuild::gLogFileH);
+
+}
+
+# PBuildLevels
+#
+# Inputs
+# $iDataOutput - Filename for normal build xml
+#
+# Outputs
+#
+# Description
+# This function generates a xml file to run normal buildon all components
+sub PBuildLevels
+{
+ my ($iDataOutput) = @_;
+ # Print the XML file
+ $GenBuild::XMLFileH = IO::File->new("> $iDataOutput")
+ or croak "Couldn't open $iDataOutput for writing: $!\n";
+
+ $GenBuild::iIDCount = 1;
+ $GenBuild::iStageCount = 1;
+
+ my ($epocroot) = $ENV{'EPOCROOT'};
+
+ &PrintXMLHeader($GenBuild::XMLFileH);
+
+ if (($GenBuild::build_UREL) && (!$GenBuild::build_UDEB))
+ {
+ $GenBuild::build_urel_udeb = " UREL";
+ }
+ elsif ((!$GenBuild::build_UREL) && ($GenBuild::build_UDEB))
+ {
+ $GenBuild::build_urel_udeb = " UDEB";
+ }
+
+ if ($GenBuild::build_bootstrap)
+ {
+ # Do the BootStrapping
+ # Temporary workaround for non-common code between old setup and Beech
+ # Defaults to old setup
+ # This will be removed when final functionality is added
+ if ($ENV{'Platform'} eq 'beech')
+ {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{beech\\generic\\tools\\e32toolp\\group" CommandLine="setupprj.bat"/>\n};
+ } elsif ($ENV{'Platform'} eq 'cedar') {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{os\\buildtools\\sbsv1_os\\e32toolp\\group" CommandLine="setupprj.bat"/>\n};
+ } else {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{tools\\e32toolp\\group" CommandLine="setupprj.bat"/>\n};
+ }
+ $GenBuild::iIDCount++;
+ $GenBuild::iStageCount++;
+ # Temporary workaround for non-common code between old setup and Beech
+ # Defaults to old setup
+ # This will be removed when final functionality is added
+ if ($ENV{'Platform'} eq 'beech')
+ {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{beech\\generic\\tools\\e32toolp\\group" CommandLine="bld.bat rel"/>\n};
+ } elsif ($ENV{'Platform'} eq 'cedar') {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{os\\buildtools\\sbsv1_os\\e32toolp\\group" CommandLine="bld.bat rel"/>\n};
+ } else {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="BootStrap" Cwd="$GenBuild::iSourceDir}.qq{tools\\e32toolp\\group" CommandLine="bld.bat rel"/>\n};
+ }
+ $GenBuild::iIDCount++;
+ $GenBuild::iStageCount++;
+ }
+
+ &BuildLevels("0", "bldmake bldfiles $GenBuild::keepgoing");
+ $GenBuild::iStageCount++;
+ &BuildLevels("0", "abld export $GenBuild::keepgoing");
+ &BuildLevels("0", "abld test export $GenBuild::keepgoing") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+
+ if ($GenBuild::build_tools)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "tools");
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "tools");
+ &BuildLevels("1", "abld target $GenBuild::keepgoing $GenBuild::savespace", "tools", "rel");
+ &BuildLevels("0", "abld -what build", "tools", "rel");
+ &BuildLevels("0", "abld -check build", "tools", "rel");
+ $GenBuild::iStageCount++;
+ }
+
+ if ($GenBuild::build_cwtools)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "cwtools");
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "cwtools");
+ &BuildLevels("1", "abld target $GenBuild::keepgoing $GenBuild::savespace", "cwtools", "rel");
+ &BuildLevels("0", "abld -what build", "cwtools", "rel");
+ &BuildLevels("0", "abld -check build", "cwtools", "rel");
+ $GenBuild::iStageCount++;
+ }
+
+ if ($GenBuild::build_winc)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "winc");
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "winc");
+ &BuildLevels("1", "abld target $GenBuild::keepgoing $GenBuild::savespace", "winc");
+ &BuildLevels("0", "abld -what build", "winc");
+ &BuildLevels("0", "abld -check build", "winc");
+ $GenBuild::iStageCount++;
+
+ }
+
+ unless ($epoc_only)
+ {
+ # Emulator things, WINS, up to resources
+ if ($GenBuild::build_wins)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "wins");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "wins") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "wins$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "wins$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "wins");
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "wins") if ($GenBuild::build_test);
+ }
+
+ # Emulator things, WINSCW, up to resources
+ if ($GenBuild::build_winscw)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "winscw");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "winscw") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "winscw");
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "winscw") if ($GenBuild::build_test);
+ }
+ }
+ # Arm Stuff
+ if ($GenBuild::build_arm4)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_arm4t)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4t");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm4t") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_armv5)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "armv5");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm5") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_armi)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "armi");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "armi") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_thumb)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "thumb");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "thumb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ if ($GenBuild::build_arm3)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", "arm3");
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", "arm3") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("0", "abld makefile $GenBuild::keepgoing $GenBuild::savespace", $iAssp);
+ &BuildLevels("0", "abld test makefile $GenBuild::keepgoing $GenBuild::savespace", $iAssp) if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("1", "abld resource $GenBuild::keepgoing", "$iAssp$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test resource $GenBuild::keepgoing", "$iAssp$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ }
+
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "arm4") if ($GenBuild::build_arm4);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "arm4") if (($GenBuild::build_arm4) &&($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "arm4t") if ($GenBuild::build_arm4t);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "arm4t") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "armv5") if ($GenBuild::build_armv5);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "armv5") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "armi") if ($GenBuild::build_armi);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "armi") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "thumb") if ($GenBuild::build_thumb);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "thumb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", "arm3") if ($GenBuild::build_arm3);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", "arm3") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("1", "abld library $GenBuild::keepgoing", $iAssp);
+ &BuildLevels("1", "abld test library $GenBuild::keepgoing", $iAssp) if ($GenBuild::build_test);
+ }
+
+ # Build all targets
+ my @iTargets;
+ # Push the defaults on
+ push @iTargets, "wins$GenBuild::build_urel_udeb" if (($GenBuild::build_wins) && (!$GenBuild::epoc_only));
+ push @iTargets, "arm4$GenBuild::build_urel_udeb" if ($GenBuild::build_arm4);
+ push @iTargets, "arm4t$GenBuild::build_urel_udeb" if ($GenBuild::build_arm4t);
+ push @iTargets, "armv5$GenBuild::build_urel_udeb" if ($GenBuild::build_armv5);
+ push @iTargets, "armi$GenBuild::build_urel_udeb" if ($GenBuild::build_armi);
+ push @iTargets, "winscw$GenBuild::build_urel_udeb" if (($GenBuild::build_winscw) && (!$GenBuild::epoc_only));
+ push @iTargets, "thumb$GenBuild::build_urel_udeb" if ($GenBuild::build_thumb);
+ push @iTargets, "arm3$GenBuild::build_urel_udeb" if ($GenBuild::build_arm3);
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ push @iTargets, "$iAssp$GenBuild::build_urel_udeb";
+ }
+ &BuildTargets("0", "abld target $GenBuild::keepgoing $GenBuild::savespace", @iTargets);
+ &BuildTargets("0", "abld test target $GenBuild::keepgoing $GenBuild::savespace", @iTargets) if ($GenBuild::build_test);
+
+ unless ($epoc_only)
+ {
+ if ($GenBuild::build_wins)
+ {
+ # Final Part of WINS
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "wins","$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "wins","$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("0", "abld -what build", "wins","$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -what build", "wins","$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("0", "abld -check build", "wins","$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -check build", "wins","$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+
+ if ($GenBuild::build_winscw)
+ {
+ # Final Part of WINSCW
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ &BuildLevels("0", "abld -what build", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -what build", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ &BuildLevels("0", "abld -check build", "winscw$GenBuild::build_urel_udeb");
+ &BuildLevels("0", "abld test -check build", "winscw$GenBuild::build_urel_udeb") if ($GenBuild::build_test);
+ $GenBuild::iStageCount++;
+ }
+ }
+
+ # Other Final Parts
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("1", "abld final $GenBuild::keepgoing", $iAssp);
+ &BuildLevels("1", "abld test final $GenBuild::keepgoing", $iAssp) if ($GenBuild::build_test);
+ }
+
+ &BuildLevels("0", "abld -what build", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("0", "abld test -what build", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("0", "abld test -what build", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("0", "abld test -what build", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("0", "abld test -what build", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("0", "abld test -what build", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -what build", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("0", "abld test -what build", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("0", "abld -what build", $iAssp);
+ &BuildLevels("0", "abld test -what build", $iAssp) if ($GenBuild::build_test);
+ }
+ $GenBuild::iStageCount++;
+
+ &BuildLevels("0", "abld -check build", "arm4$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4);
+ &BuildLevels("0", "abld test -check build", "arm4$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "arm4t$GenBuild::build_urel_udeb") if ($GenBuild::build_arm4t);
+ &BuildLevels("0", "abld test -check build", "arm4t$GenBuild::build_urel_udeb") if (($GenBuild::build_arm4t) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "armv5$GenBuild::build_urel_udeb") if ($GenBuild::build_armv5);
+ &BuildLevels("0", "abld test -check build", "armv5$GenBuild::build_urel_udeb") if (($GenBuild::build_armv5) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "armi$GenBuild::build_urel_udeb") if ($GenBuild::build_armi);
+ &BuildLevels("0", "abld test -check build", "armi$GenBuild::build_urel_udeb") if (($GenBuild::build_armi) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "thumb$GenBuild::build_urel_udeb") if ($GenBuild::build_thumb);
+ &BuildLevels("0", "abld test -check build", "thumb$GenBuild::build_urel_udeb") if (($GenBuild::build_thumb) && ($GenBuild::build_test));
+ &BuildLevels("0", "abld -check build", "arm3$GenBuild::build_urel_udeb") if ($GenBuild::build_arm3);
+ &BuildLevels("0", "abld test -check build", "arm3$GenBuild::build_urel_udeb") if (($GenBuild::build_arm3) && ($GenBuild::build_test));
+
+ foreach my $iAssp (sort keys %GenBuild::arm_assplist)
+ {
+ &BuildLevels("0", "abld -check build", $iAssp);
+ &BuildLevels("0", "abld test -check build", $iAssp) if ($GenBuild::build_test);
+ }
+
+ # Print the XML Footer
+ print $GenBuild::XMLFileH qq{\t</Commands>\n</Product>};
+
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+
+ # Print Genxml log footer
+ print $GenBuild::gLogFileH "=== Genxml finished ".localtime()."\n";
+
+ # Close XML File
+ close($GenBuild::XMLFileH);
+}
+
+sub BuildLevels
+{
+ my ($iIncStage, $action, $arg1, $arg2, $arg3) = @_;
+
+ for(my $j = 0; $j < scalar(@GenBuild::components); $j++)
+ {
+ my $line = $GenBuild::components[$j];
+ my @MyList;
+ my $tempvar;
+
+ @MyList = split(/\s+/,$line);
+ $tempvar= lc $MyList[$#MyList];
+ $tempvar =~ s/\\group//;
+ push @MyList, $tempvar;
+
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="$MyList[2]" Cwd="$GenBuild::iSourceDir$MyList[1]" CommandLine="$action $arg1 $arg2 $arg3"/>\n};
+ $GenBuild::iIDCount++;
+
+ if ( $iIncStage )
+ {
+ $GenBuild::iStageCount++;
+ }
+ }
+
+}
+
+sub BuildTargets
+{
+ my ($iIncStage, $action, @iTargets) = @_;
+
+
+ for(my $j = 0; $j < scalar(@GenBuild::components); $j++)
+ {
+ my $line = $GenBuild::components[$j];
+ my @MyList;
+ my $tempvar;
+
+ @MyList = split(/\s+/,$line);
+ $tempvar= lc $MyList[$#MyList];
+ $tempvar =~ s/\\group//;
+ push @MyList, $tempvar;
+
+ # Process target list
+ foreach my $iTarget (@iTargets)
+ {
+ print $GenBuild::XMLFileH qq{\t\t<Execute ID="$GenBuild::iIDCount" Stage="$GenBuild::iStageCount" Component="$MyList[2]" Cwd="$GenBuild::iSourceDir$MyList[1]" CommandLine="$action $iTarget"/>\n};
+ $GenBuild::iIDCount++;
+ }
+ if ( $iIncStage )
+ {
+ $GenBuild::iStageCount++;
+ }
+ }
+ $GenBuild::iStageCount++ if (!$iIncStage);
+
+}
+
+# GenReallyClean
+#
+# Inputs
+# $iReallyClean - Filename for reallyclean xml
+#
+# Outputs
+#
+# Description
+# This function generates a xml file to run abld reallyclean on all components
+sub GenReallyClean
+{
+ my ($iReallyClean) = @_;
+
+ # Reset ID and Stage Counf for New XML File
+ $GenBuild::iIDCount = 1;
+ $GenBuild::iStageCount = 1;
+
+
+ # Add the section header
+ print $GenBuild::gLogFileH "=== Genxml == ReallyClean\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Missing\n";
+ }
+
+ # Open XML file
+ $GenBuild::XMLFileH = IO::File->new("> $iReallyClean")
+ or croak "Couldn't open $iReallyClean for writing: $!\n";
+
+ # Write Header
+ &PrintXMLHeader($GenBuild::XMLFileH);
+ # Generate XML file
+ &BuildLevels("0", "abld reallyclean");
+ # Write Footer and Close XML File
+ print $GenBuild::XMLFileH qq{\t</Commands>\n</Product>};
+ close($GenBuild::XMLFileH);
+
+
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+
+ # Print Genxml log footer
+ print $GenBuild::gLogFileH "=== Genxml finished ".localtime()."\n";
+}
+
+# GenClean
+#
+# Inputs
+# $iClean - Filename for reallyclean xml
+#
+# Outputs
+#
+# Description
+# This function generates a xml file to run abld reallyclean on all components
+sub GenClean
+{
+ my ($iClean) = @_;
+
+ # Reset ID and Stage Counf for New XML File
+ $GenBuild::iIDCount = 1;
+ $GenBuild::iStageCount = 1;
+
+ # Add the section header
+ print $GenBuild::gLogFileH "=== Genxml == Clean\n";
+
+ print $GenBuild::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenBuild::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenBuild::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenBuild::gLogFileH "+++ HiRes Missing\n";
+ }
+
+ # Open XML file
+ $GenBuild::XMLFileH = IO::File->new("> $iClean")
+ or croak "Couldn't open $iClean for writing: $!\n";
+
+ # Write Header
+ &PrintXMLHeader($GenBuild::XMLFileH);
+ # Generate XML file
+ &BuildLevels("0", "abld clean");
+
+ # Write Footer and Close XML File
+ print $GenBuild::XMLFileH qq{\t</Commands>\n</Product>};
+ close($GenBuild::XMLFileH);
+
+
+ # Add the per command end HiRes timestamp if available
+ print $GenBuild::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenBuild::gLogFileH "++ Finished at ".localtime()."\n";
+
+ # Print Genxml log footer
+ print $GenBuild::gLogFileH "=== Genxml finished ".localtime()."\n";
+}
+
+# PrintXMLHeader
+#
+# Inputs
+# $iFileHandle
+#
+# Outputs
+#
+# Description
+# This function print the common start of the XML File
+sub PrintXMLHeader
+{
+ my ($iFileHandle) = @_;
+
+ my ($epocroot) = $ENV{'EPOCROOT'};
+
+ # Print the XML Header
+ print $iFileHandle qq{<?xml version="1.0"?>\n};
+ print $iFileHandle <<DTD_EOF;
+<!DOCTYPE Build [
+ <!ELEMENT Product (Commands)>
+ <!ATTLIST Product name CDATA #REQUIRED>
+ <!ELEMENT Commands (Execute+ | SetEnv*)>
+ <!ELEMENT Execute EMPTY>
+ <!ATTLIST Execute ID CDATA #REQUIRED>
+ <!ATTLIST Execute Stage CDATA #REQUIRED>
+ <!ATTLIST Execute Component CDATA #REQUIRED>
+ <!ATTLIST Execute Cwd CDATA #REQUIRED>
+ <!ATTLIST Execute CommandLine CDATA #REQUIRED>
+ <!ELEMENT SetEnv EMPTY>
+ <!ATTLIST SetEnv Order ID #REQUIRED>
+ <!ATTLIST SetEnv Name CDATA #REQUIRED>
+ <!ATTLIST SetEnv Value CDATA #REQUIRED>
+]>
+DTD_EOF
+ print $iFileHandle qq{<Product Name="$GenBuild::basename">\n\t<Commands>\n};
+
+ #Set EPOCROOT
+ print $iFileHandle qq{\t\t<SetEnv Order="1" Name="EPOCROOT" Value="$epocroot"/>\n};
+
+ #Add Tools to the path using EPOCROOT
+ print $iFileHandle qq{\t\t<SetEnv Order="2" Name="PATH" Value="}.$epocroot.qq{epoc32\\gcc\\bin;}.$epocroot.qq{epoc32\\tools;%PATH%"/>\n};
+
+}
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/GenXml.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,2133 @@
+# 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:
+#
+
+package GenXml;
+
+ use strict;
+
+ use FindBin;
+ use lib "$FindBin::Bin/lib";
+ use XML::DOM;
+ use XML::DOM::ValParser;
+
+ # produces the "Use of uninitialized value in concatenation (.) or string" warning
+ use XML::XQL;
+ use XML::XQL::DOM;
+
+ # Variable to indicate the version of xml file used. It will be set by subroutine Parse_xml
+ my $iVer = 1;
+
+ # Used by debug prints
+ #my $count;
+
+my ($gHiResTimer) = 0; #Flag - true (1) if HiRes Timer module available
+my ($gLogFileH); # Log file handle
+my ($gEmbeddedLog) = 0; # Flag false (0) if logging must include scanlog headers etc
+my ($gValidateFailed) = 0; # Flag true (1) if the XML validation has failed
+my ($gValidate) = 0; # Flag true (1) if to do XML validation only
+
+ #assign STDERR to STDOUT so both are printed in the same file, without overwriting lines
+ open (STDERR, ">&STDOUT") or die("ERROR: Unable to redirect STDERR to STDOUT: $!");
+ select((select(STDOUT), $|=1)[0]);
+ select((select(STDERR), $|=1)[0]);
+
+
+# Check if HiRes Timer is available
+if (eval "require Time::HiRes;") {
+ $gHiResTimer = 1;
+} else {
+ print "Cannot load HiResTimer Module, install the Perl module Time-HiRes for more accurate timing data\n";
+}
+
+# Start
+#
+# Inputs
+# $iXMLSource - ref to array of XML filenames, to be merged into one
+# $iLogFile - name of logfile
+# $iSourceDir - root of the current source tree
+# $iEffectiveDir - root of source tree in which output files will be used
+# $iValidate - if true, validate the input and then stop
+#
+# $iFilter - (optional) filter the merged file against this value
+# $iMergedXml - (optional) create file of this name containing the merged XML
+# $iConfName - name of the configuration: needed by subsequent arguments
+# $iDataOutput - (optional) create file of this name containing the XML build commands
+# $iTextOutput - (optional) create file of this name containing the list of components
+# $iCBROutput - (optional) create file of this name containing the list of MRP files
+#
+# Description
+# This function merges multiple XML files into one document, then optionally outputs various
+# files.
+#
+sub Start
+{
+ my ($iXmlSource, $iDataOutput, $iLogFile, $iSourceDir, $iConfName, $iMergedXml, $iValidate, $iTextOutput, $iCBROutput, $iFilter, $iEffectiveDir) = @_;
+
+ # Set global validation Flag
+ $GenXml::gValidate = $iValidate;
+
+ my $doc;
+
+ if ($iLogFile)
+ {
+ # Open Log file
+ $GenXml::gLogFileH = IO::File->new("> $iLogFile")
+ or die "ERROR: RealTimeBuild: Couldn't open $iLogFile for writing: $!\n";
+ $gEmbeddedLog = 0; # Generate scanlog-compatible log format
+ } else {
+ $GenXml::gLogFileH = *STDOUT;
+ $gEmbeddedLog = 1; # Assume that we are embedded in a scanlog-format log file
+ }
+
+ if (!$gEmbeddedLog)
+ {
+ # Logfile headers
+ print $GenXml::gLogFileH "===-------------------------------------------------\n";
+ print $GenXml::gLogFileH "=== Genxml\n";
+ print $GenXml::gLogFileH "===-------------------------------------------------\n";
+ print $GenXml::gLogFileH "=== Genxml started ".localtime()."\n";
+ }
+
+ # $iSourceDir must end in a \
+ # Add a \ if not present
+ # And make sure they are in windows style
+ if ($iSourceDir !~ /\\$/)
+ {
+ $iSourceDir =~ s/\//\\/g;
+ $iSourceDir .= "\\";
+ }
+ if ($iEffectiveDir !~ /\\$/)
+ {
+ $iEffectiveDir =~ s/\//\\/g;
+ $iEffectiveDir .= "\\";
+ }
+
+ # Parse all the files into one DOM doc
+ $doc = &Parse_files($iXmlSource, \$iVer);
+ # ... XML::DOM::Document was created sucessfully ...
+
+ # Exit here if validating only
+ exit if ($GenXml::gValidate);
+
+ # Try normalising it
+ $doc->normalize;
+
+ # filter it, if desired
+ if ($iFilter && $iVer == 1) {
+ &logfileHeader("Filtering model against $iFilter");
+ &Filter_doc($doc, $iFilter);
+ &logfileFooter();
+ } elsif ($iFilter && $iVer == 2) {
+ &logfileHeader("Filtering model against $iFilter");
+ &Filter_doc2($doc, $iFilter);
+ &logfileFooter();
+ }
+
+
+ # Debug dump new doc to file
+ #~ $doc->printToFile("$iMergedXml") if ($iMergedXml);
+
+ #################write only non-empty lines################
+ if ($iMergedXml)
+ {
+ open(HANDLE, "+> $iMergedXml") or die "Error: Can't open $iMergedXml: $!";
+ my $MergedXMLString = $doc->toString;
+ my @lines = split(/\n/,$MergedXMLString);
+ my @tempLines = ();
+ foreach (@lines)
+ {
+ push @tempLines, $_ if $_ !~ /^[\s]*$/;
+ }
+
+ $MergedXMLString = join("\n",@tempLines);
+ seek(HANDLE,0,0);
+ print HANDLE $MergedXMLString;
+ truncate(HANDLE,tell(HANDLE));
+ close HANDLE;
+ }
+ #################################
+ if ($iConfName)
+ {
+ # Process the configuration to get the lists of units, tasks and options
+ &logfileHeader("Processing configuration $iConfName");
+ my ($topunits, $subunits, $options, $tasks) = &process_configuration($doc,$iConfName, $iVer);
+ my @topbldList = &compute_bldList($iSourceDir,$iEffectiveDir,$topunits, $iVer);
+
+ &logfileFooter();
+
+ if ($iTextOutput)
+ {
+ &logfileHeader("Generating text output $iTextOutput");
+
+ # Generate old-style text output
+ &write_component_list($doc, $iTextOutput, $iConfName, \@topbldList, $options, $tasks, $iEffectiveDir, $iVer);
+
+ &logfileFooter();
+ }
+
+ if ($iCBROutput)
+ {
+ &logfileHeader("Generating CBR component list $iCBROutput");
+
+ # Generate list of CBR components for "makecbr"
+ my @allunits;
+ #if ($iVer == 1) {
+ @allunits = (@$topunits, @$subunits);
+ #} else {
+ # @allunits = (@$topunits); # No subunits required for the new version of system_definition.xml
+ #}
+ my @fullbldList = &compute_bldList($iSourceDir,$iEffectiveDir,\@allunits, $iVer);
+
+ &write_CBR_list($iCBROutput, \@fullbldList);
+
+ &logfileFooter();
+ }
+
+ if ($iDataOutput)
+ {
+ &logfileHeader("Generating output XML $iDataOutput");
+
+ # Generate the output document by applying the tasks to the bldList
+
+ my $ID = 1; # Execute Element ID counter
+ my $Stage = 1; # Execute Element Stage counter
+
+ my ($outDoc, $docElem, $commands) = &start_output_doc($iConfName, $iVer);
+
+ process_prebuilt(\$outDoc, \$commands, \$ID, \$Stage, $topunits, 'N', $iVer);
+ foreach my $task (@{$tasks})
+ {
+ &process_task($task, $doc, \$outDoc, \$commands, \$ID, \$Stage, \@topbldList, $options, $iSourceDir, $iEffectiveDir, $iVer);
+ }
+ process_prebuilt(\$outDoc, \$commands, \$ID, \$Stage, $topunits, 'Y', $iVer);
+
+ $docElem->appendChild($commands);
+ $docElem->addText("\n");
+ #print $outDoc->toString;
+ $outDoc->printToFile($iDataOutput);
+ $outDoc->dispose;
+
+ &logfileFooter();
+ }
+ }
+
+ if (!$gEmbeddedLog)
+ {
+ # Print Genxml log footer
+ print $GenXml::gLogFileH "=== Genxml finished ".localtime()."\n";
+ }
+
+ # Close file handles
+ close($GenXml::gLogFileH);
+
+ $doc->dispose;
+
+}
+
+# Error Processing function for the XML Validation
+#
+# Throws an exception (with die) when an error is encountered, this
+# will stop the parsing process.
+# Don't die if a warning or info message is encountered, just print a message.
+sub my_fail
+{
+ my $code = shift;
+
+ if ($code < 200)
+ {
+ print $GenXml::gLogFileH "ERROR: ".XML::Checker::error_string ($code, @_);
+ # Set Flag so all the errors are reported before dieing
+ $GenXml::gValidateFailed = 1;
+ }
+
+ # Useful debug output
+ print $GenXml::gLogFileH XML::Checker::error_string ($code, @_) if ($GenXml::gValidate);
+}
+
+sub my_Unparsed_handler
+{
+ my ($Parser, $Entity, $Base, $Sysid, $Pubid, $Notation) = @_;
+ print $GenXml::gLogFileH "$Entity Unparsed";
+ die "ERROR: RealTimeBuild: Processing error\n";
+}
+
+# Parse_files
+#
+# Inputs
+# $iXMLSource - ref to array of filenames
+# $iVersion - Version of xml file (new or old) ?
+#
+# Outputs
+# $doc - XML DOM doc
+#
+# Description
+# This function merges multiple XML files into one document
+sub Parse_files
+{
+ my ($iXmlSource, $iVersion) = @_; # Version info passed for conditional processing of xml files
+ my (@docs);
+
+ # Load the XML document
+ my %expat_options = (KeepCDATA => 1,
+ Handlers => [ Unparsed => \&my_Unparsed_handler ]);
+
+ for (my $i = 0; $i < scalar(@$iXmlSource); $i++)
+ {
+ # Create header for parsing each file
+ &logfileHeader(@$iXmlSource[$i]);
+
+ my $parser = new XML::DOM::ValParser (%expat_options);
+ XML::DOM::ignoreReadOnly (1);
+ local $XML::Checker::FAIL = \&my_fail;
+
+ # Useful debug output
+ #print "Parsing ".@$iXmlSource[$i]."\n";
+
+ $docs[$i] = $parser->parsefile (@$iXmlSource[$i]);
+
+ # Create footer for parsing each file
+ &logfileFooter();
+ }
+
+ # Check to see if any of the XML files failed validation and die
+ die "ERROR: RealTimeBuild: Validation failed\n" if ($GenXml::gValidateFailed);
+
+# Set the appropriate version number
+ for (my $i = 0; $i < scalar(@docs); $i++)
+ { if((scalar(@docs))>1) {
+ if ($docs[$i]->getDocumentElement->getAttribute('schema') =~ /^2\./ &&
+ $docs[$i]->getDocumentElement->getTagName eq "SystemDefinition" &&
+ $docs[1]->getDocumentElement->getTagName eq "SystemBuild")
+ {
+ $$iVersion = 2;
+ last;
+ }
+ }
+ else
+ {
+ if ($docs[$i]->getDocumentElement->getAttribute('schema') =~ /^2\./ &&
+ $docs[$i]->getDocumentElement->getTagName eq "SystemDefinition")
+ {
+ $$iVersion = 2;
+ last;
+ }
+ }
+ }
+
+ if ($$iVersion == 1) { # Docs load now merge into $docs[0] if $iVersion is 1 (i.e. old version of xml file)
+ for (my $i = 1; $i < scalar(@docs); $i++) {
+ # Create header for merging each file
+ &logfileHeader("Merging in XML file ".@$iXmlSource[$i]);
+ &process_node(\($docs[0]->getElementsByTagName("SystemDefinition")),\($docs[$i]->getElementsByTagName("SystemDefinition")), \($docs[0]));
+
+ # Re-validate merged file
+ local $XML::Checker::FAIL = \&my_fail;
+ $docs[0]->check();
+
+ # Create footer for merging each file
+ &logfileFooter();
+ # Check to see if any of the XML files failed validation and die
+ die "ERROR: RealTimeBuild: Merged Validation failed\n" if ($GenXml::gValidateFailed);
+ }
+ } elsif ($$iVersion == 2) { # Docs load now merge into $docs[$#docs + 1] if $iVersion is 2 (i.e. new version of xml file)
+ for (my $i = 1; $i < scalar(@docs); $i++) {
+ # Create header for merging each file
+ &logfileHeader("Merging in XML file ".@$iXmlSource[$i]);
+ my $mergedDoc = &process_node2(\($docs[0]), \($docs[$i]));
+
+ # Re-validate merged file
+ local $XML::Checker::FAIL = \&my_fail;
+ $mergedDoc->check();
+
+ # Create footer for merging each file
+ &logfileFooter();
+ # Check to see if any of the XML files failed validation and die
+ die "ERROR: RealTimeBuild: Merged Validation failed\n" if ($GenXml::gValidateFailed);
+
+ $docs[0] = $mergedDoc;
+ }
+ }
+ return $docs[0];
+}
+
+# process_node
+#
+# Inputs
+# $node1 - ref to a node from the master
+# $node2 - ref to a node from the slave
+# $doc1 - ref to the doc of node1 so we can set the doc owner to the (not DOM spec) to get around WRONG_DOCUMENT_ERR restriction
+#
+# Outputs
+#
+# Description
+# This function processes a node in two DOM documents, if any children match then it calls itself to process
+# the children nodes further
+sub process_node
+{
+ my ($node1, $node2, $doc1) = @_;
+
+ # Some nodes need special processing e.g. SystemDefinition
+ # This is because there can only be a certain number of these nodes
+ # child node / element rules outlined below, this rules are applied to the children of the node in question
+ # Child Node / element tag Rule
+ # ------------------------ ----
+ # SystemDefinition Merge the name and revision/schema CDATA as there can be only one of this element
+ # systemModel Always processed further as there can only be 1 or 0 of these
+ # layer Same name process further otherwise append child
+ # logicalset Same name process further otherwise append child
+ # logicalsubset Same name process further otherwise append child
+ # module Same name process further otherwise append child
+ # component Same name process further otherwise append child
+ # unit Same unitID generate ERROR and not replace child, otherwise append child
+ # sub elements of unit No processing needed as these cannot be merged
+ # package Same name process further otherwise append child
+
+ # build Always processed further as there can only be 1 or 0 of these
+ # unitList Same name process further otherwise append child
+ # unitRef Same unit ignore, different unit append child
+ # targetList Same name generate ERROR and not replace child, otherwise append child
+ # target Same name generate ERROR and not replace child, otherwise append child
+ # option Same name generate ERROR and not replace child, otherwise append child
+ # configuration Same name generate ERROR and not replace child, otherwise append child
+ # sub elements of configuration No processing needed as these cannot be merged
+
+
+ # All other nodes Append child
+
+ # Useful debug stuff
+ #$GenXml::count++;
+ #print "enter $GenXml::count\n";
+
+ # Handle the special case for the first call to this function with the node containing the SystemDefinition
+ if (($$node1->getTagName eq "SystemDefinition") && ($$node2->getTagName eq "SystemDefinition"))
+ {
+ # Get the name attributes
+ my ($name1) = $$node1->getAttribute('name');
+ my ($name2) = $$node2->getAttribute('name');
+ # Combine the two and set the attribute into the merged file
+ $$node1->setAttribute('name',$name1." + ".$name2);
+
+ # Get the revision attributes
+ my ($revision1) = $$node1->getAttribute('revision');
+ my ($revision2) = $$node2->getAttribute('revision');
+ # Get the schema attributes
+ my ($schema1) = $$node1->getAttribute('schema');
+ my ($schema2) = $$node2->getAttribute('schema');
+ # If both schema attributes are defined, combine the two and set the attribute into the merged file
+ # Note that even if an attribute does not exist in the XML file, XML::DOM returns an empty string (not undef)
+ if (($schema1) and ($schema2))
+ { # Both files have "new DTD".
+ if (($revision1) or ($revision2))
+ {
+ print $GenXml::gLogFileH "ERROR: Cannot define both schema and revison attributes in same file. Merged file will probably not be usable.\n";
+ }
+ if ($schema1 eq $schema2)
+ { # Both files have same schema attribute. Assign it to merged file
+ $$node1->setAttribute('schema',$schema1);
+ }
+ else
+ { # Files have different schema attributes. Combine and assign it to merged file. Warn!!
+ print $GenXml::gLogFileH "WARNING: Source file schema attribute values differ ($schema1 vs $schema2). Merged file may not be usable.\n";
+ $$node1->setAttribute('schema',$schema1." + ".$schema2);
+ }
+ }
+ # If both revision attributes are defined, combine the two and set the attribute into the merged file
+ elsif (($revision1) and ($revision2))
+ { # Both files have "old DTD". Retain this code for compatibility
+ print $GenXml::gLogFileH "REMARK: Both source files have \"old style\" DTDs. See SystemDefinition \"revision\" attribute.\n";
+ $$node1->setAttribute('revision',$revision1." + ".$revision2);
+ }
+ else
+ { # Files have different DTDs. Use attribute found in first file. report as ERROR!!
+ print $GenXml::gLogFileH "ERROR: Source file schema/revison attributes conflict. Merged file will probably not be usable.\n";
+ if ($schema1)
+ { # First file had new DTD and had a schema attribute
+ $$node1->setAttribute('schema',$schema1);
+ }
+ elsif ($revision1)
+ { # First file had old DTD and had a revision attribute (not a schema)
+ $$node1->setAttribute('revision',$revision1);
+ }
+ }
+ }
+
+ # Get the children of the parent nodes
+
+ my $nodelist1 = $$node1->getChildNodes;
+ my $nodelist2 = $$node2->getChildNodes;
+
+ # Useful debug stuff
+ #print "has ".$nodelist2->getLength." children\n";
+
+ # Itterate throught the children of node2 check to see if they are present / rule match in node 1
+ my $ni = $nodelist2->getLength;
+ for (my $i = 0; $i < $ni; $i++)
+ {
+ # Useful debug stuff
+ #print "node $i ".$nodelist2->item($i)->getNodeTypeName."\n";
+ if ($nodelist2->item($i)->getNodeTypeName eq "ELEMENT_NODE")
+ {
+ # Handle rule match on ELEMENTS
+ my $tagname2 = $nodelist2->item($i)->getTagName;
+
+ # Useful debug stuff
+ # print "Tagname = $tagname\n";
+ if (($tagname2 eq "systemModel") || ($tagname2 eq "build") )
+ {
+ my $iBuildIndx;
+ # find the $node1 for this elements
+ my $nj = $nodelist1->getLength;
+ my $match = 0;
+ for (my $j = 0; $j < $nj; $j++)
+ {
+ if ($nodelist1->item($j)->getNodeTypeName eq "ELEMENT_NODE")
+ {
+ my $tagname1 = $nodelist1->item($j)->getTagName;
+ if ($tagname1 eq $tagname2)
+ {
+ # process further
+
+ # Useful debug stuff
+ #print "processing $tagname further\n";
+ &process_node(\($nodelist1->item($j)), \($nodelist2->item($i)), $doc1);
+ $match = 1;
+ }
+ else
+ {
+ if ($tagname1 eq 'build')
+ {
+ $iBuildIndx = $j;
+ }
+ if ((($tagname2 eq 'systemModel') and ($tagname1 ne 'systemModel')) or ((($tagname2 eq 'build') and ($tagname1 ne 'build'))))
+ {
+ next;
+ }
+ # no systemModel or build element found so append child
+ &append_child($node1, \($nodelist2->item($i)), $doc1)
+ }
+ }
+ }
+ unless ($match)
+ {
+ # no systemModel or build element found so append child
+ # In the special case of adding an instance of 'systemModel' we must specify that this goes before any instance of 'build'
+ my $iRefChildRef = ($tagname2 eq 'systemModel')? $nodelist1->item($iBuildIndx): undef;
+ &append_child($node1, \($nodelist2->item($i)), $doc1, $iRefChildRef);
+ }
+ } elsif (($tagname2 eq "layer") || ($tagname2 eq "logicalset") || ($tagname2 eq "logicalsubset") || ($tagname2 eq "module") || ($tagname2 eq "component") || ($tagname2 eq "package") || ($tagname2 eq "unitList"))
+ {
+ # Check the $node1 for elements with the same "name"
+ my $match; # Flag for matching element found
+ my $nj = $nodelist1->getLength;
+ for (my $j = 0; $j < $nj; $j++)
+ {
+ # Only look at element nodes in node1
+ if ($nodelist1->item($j)->getNodeTypeName eq "ELEMENT_NODE")
+ {
+ if ($nodelist2->item($i)->getAttribute('name') eq $nodelist1->item($j)->getAttribute('name'))
+ {
+ # Process further match found
+ $match = 1;
+
+ # Useful debug stuff
+ #print "processing j=$j $tagname2 further ".$nodelist2->item($i)->getAttribute('name')."\n";
+
+ &process_node(\($nodelist1->item($j)), \($nodelist2->item($i)), $doc1);
+ }
+ }
+ }
+ # If no match found Append child
+
+ # Useful debug stuff
+ #print "new $tagname2 added\n" if (!$match);
+
+ &append_child($node1, \($nodelist2->item($i)), $doc1) if (!$match);
+
+ } elsif (($tagname2 eq "unit") || ($tagname2 eq "targetList") || ($tagname2 eq "target") || ($tagname2 eq "option") || ($tagname2 eq "configuration")) {
+ # Check the $node1 for elements with the same ID attribute (Global check for ID clashes)
+ my $idAttrib;
+ if ($tagname2 eq "unit")
+ {
+ # Special case of the unit element as this has uses the attribute of unitID instead of name
+ $idAttrib = "unitID";
+ } else {
+ $idAttrib = "name";
+ }
+
+ my $ID = $nodelist2->item($i)->getAttribute($idAttrib);
+ # Search for the XML ID in $doc1
+ if( scalar(XML::XQL::solve ("//*[\@$idAttrib = '$ID']", $$doc1)))
+ {
+ print $GenXml::gLogFileH "REMARK: $ID already exists, not merging this $tagname2 element\n";
+ } else {
+ # unitID not found so append elememnt
+
+ # Useful debug stuff
+ # print "new $tagname2 added\n";
+
+ &append_child($node1, \($nodelist2->item($i)), $doc1);
+ }
+ } elsif ($tagname2 eq "unitRef") {
+ # Check the $node1 for elements with the same "name"
+ my $match; # Flag for matching element found
+ my $nj = $nodelist1->getLength;
+ for (my $j = 0; $j < $nj; $j++)
+ {
+ # Only look at element nodes in node1
+ if ($nodelist1->item($j)->getNodeTypeName eq "ELEMENT_NODE")
+ {
+ if ($nodelist2->item($i)->getAttribute('unit') eq $nodelist1->item($j)->getAttribute('unit'))
+ {
+ # Ignore the unitRef element as it is a duplicate
+ $match = 1;
+ print $GenXml::gLogFileH "WARNING: Duplicate unitRef ".$nodelist2->item($i)->getAttribute('unit')." not merging\n";
+ }
+ }
+ }
+ # No match found Append Child
+
+ # Useful debug stuff
+ # print "New unitRef\n" if (!$match);
+
+ &append_child($node1, \($nodelist2->item($i)), $doc1) if (!$match);
+
+ } else {
+ # Element not recognised so append child
+ &append_child($node1, \($nodelist2->item($i)), $doc1);
+ }
+ } else {
+ # Handle non element nodes (append child of node2 to node 1)
+ # At the moment adding in non element nodes adds a lot of whitespace
+ # TODO: correctly handle non element nodes
+ # This is not important at the moment as there are no important non element nodes for the merge
+ #&append_child($node1, \($nodelist2->item($i)), $doc1);
+ }
+ }
+
+ #print "return $GenXml::count\n";
+ #$GenXml::count--;
+}
+
+# append_child
+#
+# Inputs
+# $node1 - is already a ref of the node to append to
+# $node2 - ref of node from nodelist2 to append to $node1
+# $doc1 - ref to document to merge the node into (need for non DOM operation of changing owner of node)
+# $refnode - ref to node in fromt of which to insert node2 (If undef, append node2)
+#
+# Description
+# ???
+sub append_child
+{
+ my ($node1, $node2, $doc1, $refnode) = @_;
+
+ # Clone the node
+ my $clone = $$node2->cloneNode(1);
+ # Fix the owner of node
+ $clone->setOwnerDocument($$doc1);
+ # Append a line return for more tidy xml
+ $$node1->addText("\n");
+ # Append (or insert) the node
+ # Note: it seems that insertBefore($clone,undef) is identical to appendChild($clone)
+ $$node1->insertBefore($clone,$refnode);
+}
+
+# write_component_list
+#
+# Inputs
+# $doc - Reference to input document
+# $iTextOutput - Name of output file
+# $iConfName - Name of configuration being described
+# $bldList - Reference to the bldList array
+# $options - Reference to the options array
+# $tasks - Reference to the tasks array
+# $iEffectiveDir - Root of source tree in which file will be used
+# $iVersion - Version of xml file (new or old) ?
+#
+# Description:
+# Write out old-style "list of components" build description for the configuration
+#
+sub write_component_list
+ {
+ my ($doc, $iTextOutput, $iConfName, $bldList, $options, $tasks, $iEffectiveDir, $iVersion) = @_;
+
+ # process list of tasks to find build targets and bootstrap info
+ my %targets;
+ my $bootflag = 0;
+
+ foreach my $task (@$tasks)
+ {
+ # Read all the task
+ my @children = $task->getChildNodes;
+ foreach my $child (@children)
+ {
+ next if ($child->getNodeTypeName ne "ELEMENT_NODE");
+ if ($child->getTagName eq "specialInstructions")
+ {
+ # "setupprj" in the command is taken to mean "bootstrap E32ToolP"
+ $bootflag = 1 if ($child->getAttribute("command") =~ /setupprj/i);
+ next;
+ }
+ my $targetlist = $child->getAttributeNode("targetList");
+ if (defined $targetlist)
+ {
+ my @targetnames = &find_targetList_by_ID($doc, $targetlist->getValue);
+ foreach my $target (@targetnames)
+ {
+ $targets{$target}= 1;
+ }
+ }
+ }
+ }
+
+ # create output file
+ open TEXTFILE, "> $iTextOutput" or die "ERROR: RealTimeBuild: Couldn't open $iTextOutput for writing: $!\n";
+
+ print TEXTFILE <<HEADER_TXT;
+#
+# ****************************** IMPORTANT NOTE ************************************
+#
+# The configuration was specified as: $iConfName
+#
+# **********************************************************************************
+#
+
+HEADER_TXT
+
+ print TEXTFILE "# Optional variations in the generated scripts\n\n";
+
+ my $column2pos = 8;
+ foreach my $option (@$options) {
+ my $name = '<option ????>';
+ if ($option =~ /^-(.+)/) {$name = "<option $1>"}
+ my $len = length $name;
+ while ($len > $column2pos) { $column2pos += 8; }
+ printf TEXTFILE "%-*s\t# use abld %s\n", $column2pos, $name, $option;
+ }
+
+ $column2pos = 8;
+ foreach my $target (sort keys %targets) {
+ # abld targets are only one word
+ next if ($target =~ /\w+\s+\w+/);
+ my $name;
+ if ($target =~ /(misa|mint|mcot|mtemplate|meig)/i) {
+ $name = "<option arm_assp $target>";
+ } else {
+ $name = "<option $target>";
+ }
+ my $len = length $name;
+ while ($len > $column2pos) { $column2pos += 8; }
+ printf TEXTFILE "%-*s\t#\n", $column2pos, $name;
+ }
+
+ print TEXTFILE "\n";
+ print TEXTFILE "# List of components required \n";
+ print TEXTFILE "#\n# Name abld_directory\n";
+
+ if($bootflag) {
+ print TEXTFILE "#\n# Bootstrapping....\n\n";
+ print TEXTFILE "<special bldfiles E32Toolp group> # Special installation for E32ToolP\n\n";
+ print TEXTFILE "# Components:\n";
+ }
+ print TEXTFILE "#\n";
+
+
+ my $srcprefix = quotemeta($iEffectiveDir);
+
+ $column2pos = 8;
+ foreach my $component (@$bldList) {
+ my $bldinfdir = $component->[1];
+ next if ($bldinfdir eq ""); # skip MRP-only entries
+
+ $bldinfdir =~ s/^$srcprefix//o;
+ my $len = length $component->[0];
+ while ($len > $column2pos) { $column2pos += 8; }
+ printf TEXTFILE "%-*s\t%s\n", $column2pos, $component->[0], $bldinfdir;
+ }
+ close TEXTFILE
+}
+
+# write_CBR_list
+#
+# Inputs
+# $iCBROutput - Name of output file
+# $bldList - Reference to the bldList array
+#
+# Description:
+# Write out "list of CBR components" for the configuration
+#
+sub write_CBR_list
+ {
+ my ($iCBROutput, $bldList) = @_;
+
+ my @components = ();
+ foreach my $component (@$bldList)
+ {
+ my $mrp = $component->[2];
+ next if ($mrp eq ""); # skip entries without MRP files
+
+ push @components, sprintf("%s\t%s\n", $component->[0], $mrp);
+ }
+
+ # create output file
+ open TEXTFILE, "> $iCBROutput" or die "ERROR: RealTimeBuild: Couldn't open $iCBROutput for writing: $!\n";
+ print TEXTFILE sort @components;
+ close TEXTFILE
+ }
+
+# start_output_doc
+#
+# Inputs
+# $iConfName - Configuration name used
+# $iVersion - Version of xml file (new or old) ?
+#
+# Outputs
+# $outDoc - document
+# $docElem - root element
+# $commands - command node
+#
+# Description
+# This function produces the static parts of the output XML file
+sub start_output_doc
+{
+ my ($iConfName, $iVersion) = @_;
+
+ my ($outParser, $outDoc, $docElem, $commands);
+
+ # set the doctype based on which version of file is passed.
+ my $doctype;
+ if ($iVersion == 1) {
+ $doctype = "Build";
+ } elsif ($iVersion == 2) {
+ $doctype = "SystemBuild" ;
+ }
+
+ $outParser = new XML::DOM::Parser;
+
+ my $str = <<END;
+<?xml version="1.0"?>
+<!DOCTYPE $doctype [
+ <!ELEMENT Product (Commands)>
+ <!ATTLIST Product name CDATA #REQUIRED>
+ <!ELEMENT Commands (Execute+ | SetEnv*)>
+ <!ELEMENT Execute EMPTY>
+ <!ATTLIST Execute
+ ID CDATA #REQUIRED
+ Stage CDATA #REQUIRED
+ Component CDATA #REQUIRED
+ Cwd CDATA #REQUIRED
+ CommandLine CDATA #REQUIRED>
+ <!ELEMENT SetEnv EMPTY>
+ <!ATTLIST SetEnv
+ Order ID #REQUIRED
+ Name CDATA #REQUIRED
+ Value CDATA #REQUIRED>
+]>
+<Product>
+</Product>
+END
+
+ $outDoc = $outParser->parse($str);
+
+ # get the document element
+ $docElem = $outDoc->getDocumentElement;
+ $docElem->setAttribute('name', $iConfName);
+ # Add the Commands Node
+ $commands = $outDoc->createElement('Commands');
+ $commands->addText("\n");
+ # create the default SetEnv elements
+ my $SetEnv1 = $outDoc->createElement('SetEnv');
+ $SetEnv1->setAttribute('Order', '1');
+ $SetEnv1->setAttribute('Name', 'EPOCROOT');
+ $SetEnv1->setAttribute('Value', '\\');
+ $commands->appendChild($SetEnv1);
+ $commands->addText("\n");
+ my $SetEnv2 = $outDoc->createElement('SetEnv');
+ $SetEnv2->setAttribute('Order', '2');
+ $SetEnv2->setAttribute('Name', 'PATH');
+ $SetEnv2->setAttribute('Value', '\\epoc32\\gcc\\bin;\\epoc32\\tools;%PATH%');
+ $commands->appendChild($SetEnv2);
+ $commands->addText("\n");
+
+ return ($outDoc, $docElem, $commands);
+}
+
+# process_prebuilt
+#
+# Inputs
+# $outDoc - Reference to output document
+# $commands - Reference to the command node
+# $ID - Reference to theExecute ID counter
+# $Stage - Reference to the Execute Stage counter
+# $topunits - Reference to the list of unit, package & prebuilt elements
+# $late - Selects on the "late" attribute of prebuilt elements
+# $iVersion - Version of xml file (new or old) ?
+#
+# Outputs
+#
+# Description
+# Generates the "getrel" commands for prebuilt elements
+sub process_prebuilt
+{
+ my ($outDoc, $commands, $ID, $Stage, $topunits, $late, $iVersion) = @_;
+
+ my ($name, $version, $islate);
+ foreach my $unit (@$topunits)
+ {
+ my @prebuilt; # a list of all <prebuilt> or <unit prebuilt="...">
+ if ($iVersion == 1) {
+ if ($unit->getTagName eq "prebuilt")
+ {
+ push(@prebuilt, $unit);
+ }
+ } elsif ($iVersion == 2) {
+ my @subunits = $unit->getElementsByTagName("unit");
+ foreach my $subunit (@subunits)
+ {
+ if ($subunit->getAttribute("prebuilt"))
+ {
+ push(@prebuilt, $subunit);
+ }
+ }
+ }
+ foreach my $unit (@prebuilt)
+ {
+ $version = $unit->getAttribute("version");
+ $islate = $unit->getAttribute("late");
+ $name = $unit->getAttribute(($iVersion == 1) ? "name" : "prebuilt");
+
+ $islate = "N" if (!defined $islate || $islate eq "");
+
+ next if ($late ne $islate);
+ next if (!$late && $islate eq "Y");
+
+ # Create the element
+ my $task_elem = $$outDoc->createElement('Execute');
+ $task_elem->setAttribute('ID', $$ID);
+ $$ID++; # The ID must always be incremented
+ $task_elem->setAttribute('Stage', $$Stage);
+ $$Stage++; # getrel operations are serial
+
+ $task_elem->setAttribute('Component',$name);
+ $task_elem->setAttribute('Cwd','%EPOCROOT%');
+ $task_elem->setAttribute('CommandLine',"getrel $name $version");
+
+ $$commands->appendChild($task_elem);
+ $$commands->addText("\n");
+ }
+ }
+}
+
+# process_task
+#
+# Inputs
+# $task - task node
+# $doc - Reference to input document
+# $outDoc - Reference to output document
+# $commands - Reference to the command node
+# $ID - Reference to theExecute ID counter
+# $Stage - Reference to the Execute Stage counter
+# $bldList - Reference to the bldList array
+# $options - Reference to the options array
+# $iSourceDir - root of the current source tree
+# $iEffectiveDir - root from which the source tree will be used
+# $iVersion - Version of xml file (new or old) ?
+#
+# Outputs
+#
+# Description
+# This function processes the task nodes
+sub process_task
+{
+ my ($task, $doc, $outDoc, $commands, $ID, $Stage, $bldList, $options, $iSourceDir, $iEffectiveDir, $iVersion) = @_;
+
+ my @targets;
+ my @localBldList; # Used for task specific unit list overrides
+
+ # re-process the $iSourceDir & $iSourceDir based on version of xml file along with value for unitListRef and unitList
+ my ($unitListRef, $unitList);
+ if($iVersion == 1) {
+ $unitListRef = "unitListRef";
+ $unitList = "unitList";
+ } elsif ($iVersion == 2) {
+ $unitListRef = "listRef";
+ $unitList = "list";
+ }
+
+ # Read all the task
+ my @children = $task->getChildNodes;
+ foreach my $child (@children)
+ {
+ if ($child->getNodeTypeName eq "ELEMENT_NODE")
+ {
+ # Check for unitListRef for task unit list override
+ if ($child->getTagName eq $unitListRef)
+ {
+ #Processes the unitListRefs to build up a complete list of units which are IDREFs
+ my @localUnits= &find_unitList_by_ID($doc, $child->getAttribute($unitList), $iVersion);
+ push @localBldList, &compute_bldList($iSourceDir,$iEffectiveDir,\@localUnits, $iVersion);
+ # Overwrite Ref $bldList with new Ref to @localBldList
+ $bldList = \@localBldList;
+ }
+
+ if ($child->getTagName eq "specialInstructions")
+ {
+ #Processes the unitListRefs to build up a complete list of units which are IDREFs
+ my $task_elem = $$outDoc->createElement('Execute');
+ $task_elem->setAttribute('ID', $$ID);
+ $$ID++; # The ID must always be incremented
+ $task_elem->setAttribute('Stage', $$Stage);
+ $$Stage++; # All specialInstructions are done sequentially
+ $task_elem->setAttribute('Component', $child->getAttributeNode("name")->getValue);
+ my ($cwd) = $child->getAttributeNode("cwd")->getValue;
+ # Replace any Environment variables
+ my ($cwdtemp) = $cwd;
+ $cwdtemp =~ s/%(\w+)%/$ENV{$1}/g;
+ # If $cwd does not starts with a drive letter or absolute path then add the source Directory on the front
+ if (!(($cwdtemp =~ /^\w:[\\]/) || ($cwdtemp =~ /^\\/)))
+ {
+ $cwd = $iEffectiveDir . $cwd;
+ }
+ $task_elem->setAttribute('Cwd', $cwd);
+ $task_elem->setAttribute('CommandLine', $child->getAttributeNode("command")->getValue);
+ $$commands->appendChild($task_elem);
+ $$commands->addText("\n");
+ } elsif ($child->getTagName eq "buildLayer") {
+ # targetParallel & unitParallel are optional so check that they exist before trying to get the value.
+ my $unitP = $child->getAttribute("unitParallel");
+ my $targetP = $child->getAttribute("targetParallel") if ($child->getAttributeNode("targetParallel"));
+ my $abldCommand = $child->getAttribute("command");
+
+ # Build the list of targets, targets are optional
+ if ($child->getAttributeNode("targetList"))
+ {
+ @targets = &find_targetList_by_ID($doc, $child->getAttributeNode("targetList")->getValue);
+ } else {
+ # There are no targets associated with this buildlayer
+ $targetP = "NA"; # Not applicable
+ }
+
+ # Build the correct option string
+ my $optionStr = "";
+ foreach my $option (@$options)
+ {
+ # only add -savespace if the command abld target or abld build take this option
+ # don't add -keepgoing if -what or -check are part of the command
+ if ((($option =~ /\s*-savespace\s*/i) || ($option =~ /\s*-s\s*/i) ) && (($abldCommand =~ /^\s*abld\s+makefile/i) || ($abldCommand =~ /^\s*abld\s+target/i) || ($abldCommand =~ /^\s*abld\s+build/i)))
+ {
+ $optionStr .= " $option" ;
+ }
+ if (($option =~ /\s*-keepgoing\s*/i) || ($option =~ /\s*-k\s*/i) )
+ {
+ if (!(($abldCommand =~ /^\s*abld\s+\w*\s*\w*\s*-check\s*/i) || ($abldCommand =~ /^\s*abld\s+\w*\s*\w*\s*-c\s*/i) || ($abldCommand =~ /^\s*abld\s+\w*\s*\w*\s*-what\s*/i) || ($abldCommand =~ /^\s*abld\s+\w*\s*\w*\s*-w\s*/i)))
+ {
+ $optionStr .= " $option" ;
+ }
+ }
+ # This allows us to either build symbol files or not build symbols to save build time.
+ # only add -no_debug if the command abld makefile
+ if (($option =~ /\s*-no_debug\s*/i) && ($abldCommand =~ /^\s*abld\s+makefile/i))
+ {
+ $optionStr .= " $option" ;
+ }
+ }
+
+ # Remove the mrp-only entries from the bldList
+ my @bldInfList;
+ foreach my $array (@{$bldList})
+ {
+ push @bldInfList, $array if ($$array[1] ne "");
+ }
+
+ # Cover all the combinations of units and targets
+ my ($Ref1, $Ref2, $loop1, $loop2);
+
+ if ($targetP eq "N")
+ {
+ # Got to switch order of looping
+ $Ref2 = \@bldInfList;
+ $Ref1 = \@targets;
+ $loop2 = $unitP;
+ $loop1 = $targetP;
+ } else {
+ $Ref1 = \@bldInfList;
+ $Ref2 = \@targets;
+ $loop1 = $unitP;
+ $loop2 = $targetP;
+ }
+
+ for (my $i = 0; $i < scalar(@$Ref1); $i++)
+ {
+ if ($targetP ne "NA")
+ {
+ for (my $j = 0; $j < scalar(@$Ref2); $j++)
+ {
+ # Create the element
+ my $task_elem = $$outDoc->createElement('Execute');
+ $task_elem->setAttribute('ID', $$ID);
+ $$ID++; # The ID must always be incremented
+ $task_elem->setAttribute('Stage', $$Stage);
+
+ if ($targetP eq "N") {
+ # loops swapped but the order of unitP and targetP need to be swapped back
+ # unit (Component) name is the 0 element of the sub array, source location in element 1
+ $task_elem->setAttribute('Component',$$Ref2[$j][0]);
+ # Find the bldFile directory and set as Cwd
+ $task_elem->setAttribute('Cwd',$$Ref2[$j][1]);
+
+ $task_elem->setAttribute('CommandLine',$abldCommand.$optionStr." ".$$Ref1[$i]);
+ $$commands->appendChild($task_elem);
+ $$commands->addText("\n");
+ } else {
+ # unit (Component) name is the 0 element of the sub array, source location in element 1
+ $task_elem->setAttribute('Component',$$Ref1[$i][0]);
+ # Find the bldFile directory and set as Cwd
+ $task_elem->setAttribute('Cwd',$$Ref1[$i][1]);
+
+ $task_elem->setAttribute('CommandLine',$abldCommand.$optionStr." ".$$Ref2[$j]);
+ $$commands->appendChild($task_elem);
+ $$commands->addText("\n");
+ }
+ $$Stage++ if (($loop1 eq "N") && ($loop2 eq "N"));
+ }
+ $$Stage++ if (($loop1 eq "N") && ($loop2 eq "Y"));
+ } else {
+ # Create the element
+ my $task_elem = $$outDoc->createElement('Execute');
+ $task_elem->setAttribute('ID', $$ID);
+ $$ID++; # The ID must always be incremented
+ $task_elem->setAttribute('Stage', $$Stage);
+
+ # unit (Component) name is the 0 element of the sub array, source location in element 1
+ $task_elem->setAttribute('Component',$$Ref1[$i][0]);
+ # Find the bldFile directory and set as Cwd
+ $task_elem->setAttribute('Cwd',$$Ref1[$i][1]);
+
+ $task_elem->setAttribute('CommandLine',$abldCommand.$optionStr);
+ $$commands->appendChild($task_elem);
+ $$commands->addText("\n");
+
+ $$Stage++ if ($loop1 ne "Y");
+ }
+ }
+ # Add the * (stage++) for the combinations that don't get this done by the loops
+ $$Stage++ if ($loop1 eq "Y");
+ }
+ }
+ }
+}
+
+# delete_unmatched_units
+#
+# Inputs
+# $node - node in the system model
+# $deletedref - reference to hash of deleted unitIDs
+#
+# Outputs
+# Returns 1 if all significant children of the node have been removed
+#
+# Description
+# This function simplifies the XML by removing anything which wasn't marked as MATCHED.
+# It's called recursively so that it can "clean up" the structure if whole subtrees have
+# all of their significant content removed.
+sub delete_unmatched_units
+ {
+ my ($node, $deletedUnitsRef) = @_;
+ my @children = $node->getChildNodes;
+ return 0 if (scalar @children == 0);
+ my $now_empty = 1;
+ my $deleted_something = 0;
+ foreach my $child (@children)
+ {
+ if ($child->getNodeTypeName ne "ELEMENT_NODE")
+ {
+ # text and comments don't count
+ next;
+ }
+ my $tag = $child->getTagName;
+ my $deletedThis = 0;
+ if ((($tag eq "unit" || $tag eq "package" || $tag eq "prebuilt") && $iVer == 1) || (($tag eq "component" || $tag eq "unit") && $iVer == 2))
+ {
+ # only units,prebuilts & packages are tagged
+ if (!$child->getAttribute("MATCHED"))
+ {
+ if ($tag eq "unit")
+ {
+ my $unitID = $child->getAttribute("unitID");
+ $$deletedUnitsRef{$unitID} = 1;
+ }
+ if($tag eq "unit" && $iVer == 2)
+ {
+ my $version = $child->getAttribute("version");
+ printf $GenXml::gLogFileH "Simplification removed $tag %s %s\n", ($version eq '') ? 'from' : "v$version of" ,$node->getAttribute("name");
+ }
+ else
+ {
+ printf $GenXml::gLogFileH "Simplification removed $tag %s\n", $child->getAttribute("name");
+ }
+ $node->removeChild($child);
+ $deletedThis = 1;
+ $deleted_something = 1;
+ }
+ else
+ {
+ $child->removeAttribute("MATCHED");
+ $now_empty = 0; # something left in due to this child
+ }
+ }
+ # keep going to filter child units
+ if (!$deletedThis && $tag ne "unit" && $tag ne "package" && $tag ne "prebuilt")
+ {
+ if (delete_unmatched_units($child,$deletedUnitsRef) == 1)
+ {
+ # Child was empty and can be removed
+ $node->removeChild($child);
+ $deleted_something = 1;
+ }
+ else
+ {
+ $now_empty = 0; # something left in due to this child
+ }
+ }
+ }
+ return 0 unless ($deleted_something);
+ return $now_empty;
+ }
+
+
+# Filter_doc
+#
+# Inputs
+# $doc - Reference to input document
+# $iFilter - filter to apply
+#
+# Outputs
+#
+# Description
+# This function simplifies the XML by removing anything which fails to pass the filter.
+# The resulting doc is then useful for tools which don't understand the filter attributes.
+sub Filter_doc
+ {
+ my ($doc, $iFilter) = @_;
+
+ # the filtering will have to be
+ # - find the configurations which pass the filter (and delete the rest)
+ # - identify items which are kept by some configuration
+ # - remove the ones which aren't kept by any configuration.
+
+ # deal with the <configuration> items, checking their filters
+ my %unitLists;
+ my @nodes = $doc->getElementsByTagName ("configuration");
+ foreach my $node (@nodes)
+ {
+ my $configname = $node->getAttribute("name");
+ my @configspec = split /,/,$node->getAttribute("filter");
+ my $failed = check_filter($iFilter,\@configspec);
+ if ($failed ne "")
+ {
+ print $GenXml::gLogFileH "Simplification removed configuration $configname ($failed)\n";
+ $node->getParentNode->removeChild($node);
+ next;
+ }
+ # find all the units for this configuration and mark them as MATCHED
+ print $GenXml::gLogFileH "Analysing configuration $configname...\n";
+ my $units = get_configuration_units($doc, $node, 0, 0);
+ foreach my $unit (@$units)
+ {
+ $unit->setAttribute("MATCHED", 1);
+ }
+ # note all the unitLists referenced by this configuration
+ foreach my $unitListRef ($node->getElementsByTagName("unitListRef"))
+ {
+ my $unitList = $unitListRef->getAttribute("unitList");
+ $unitLists{$unitList} = 1;
+ }
+ }
+ # walk the model, removing the "MATCHED" attribute and deleting any which weren't marked
+ my %deletedUnits;
+ delete_unmatched_units($doc, \%deletedUnits);
+
+ # clean up the unitlists
+ my @unitLists = $doc->getElementsByTagName("unitList");
+ foreach my $unitList (@unitLists)
+ {
+ my $name = $unitList->getAttribute("name");
+ if (!defined $unitLists{$name})
+ {
+ print $GenXml::gLogFileH "Simplification removed unitList $name\n";
+ $unitList->getParentNode->removeChild($unitList);
+ next;
+ }
+ foreach my $unitRef ($unitList->getElementsByTagName("unitRef"))
+ {
+ my $id = $unitRef->getAttribute("unit");
+ if (defined $deletedUnits{$id})
+ {
+ $unitList->removeChild($unitRef); # reference to deleted unit
+ }
+ }
+ }
+
+ }
+
+# find_configuration
+#
+# Inputs
+# $doc - DOM document model
+# $iConfName - configuration name
+#
+# Outputs
+# $configuration - the node of the named configuration
+#
+# Description
+# This function locates and returns the named configuration node
+sub find_configuration
+{
+ my ($doc, $iConfName) = @_;
+
+ # Find the named configuration
+ my @nodes = $doc->getElementsByTagName ("configuration");
+ foreach my $node (@nodes)
+ {
+ my $name = $node->getAttributeNode ("name");
+ if ($name->getValue eq $iConfName)
+ {
+ return $node;
+ }
+ }
+
+ # If no configuration has been found the produce ERROR message
+ die "ERROR: RealTimeBuild: Named configuration $iConfName not found\n";
+}
+
+# process_configuration
+#
+# Inputs
+# $doc - DOM document model
+# $iConfName - name of the configuration
+# $iVersion - Version of xml file (new or old) ?
+#
+# Outputs
+# $topunits - reference to a list of units in the main configuration
+# $subunits - reference to a list of local units contained within subtasks
+# \@options - reference to a list of options which apply (curently global options)
+# \@tasks - reference to a list of the task nodes for the configuration
+#
+# Description
+# This function locates the named configuration and processes it into
+# a list of units, the build options which apply, and the task elements in
+# the configuration.
+sub process_configuration
+{
+ my ($doc, $iConfName, $iVersion) = @_;
+
+ my @options; # list of global options
+ my @units; # list of individual buildable items
+
+ # NB. getElementsByTagName in list context returns a list, so
+ # the following statement gets only the first element of the list
+ my ($build, @nodes);
+ if ($iVersion == 1) {
+ $build = $doc->getElementsByTagName("build");
+ } else {
+ $build = $doc->getElementsByTagName("SystemBuild");
+ }
+
+ @nodes = $build->[0]->getElementsByTagName("option");
+
+ # Read the global options (savespace and keepgoing)
+ foreach my $node (@nodes)
+ {
+ my $name = $node->getAttributeNode("abldOption");
+ my $enable = $node->getAttributeNode("enable")->getValue;
+ push @options, $name->getValue if ($enable =~ /Y/i);
+ }
+
+ # Find named configuration
+ my $configuration = find_configuration($doc, $iConfName);
+
+ # Get the list of tasks
+ my @tasks = $configuration->getElementsByTagName("task");
+
+ my ($topunits, $subunits);
+ # Get the filtered list of units
+ if ($iVersion == 1) {
+ $topunits = get_configuration_units($doc, $configuration, 1, 1);
+ $subunits = get_configuration_units($doc, $configuration, 1, 2);
+ } elsif ($iVersion == 2) {
+ $topunits = get_configuration_units2($doc, $configuration, 1, 1);
+
+ $subunits = get_configuration_units2($doc, $configuration, 1, 2);
+ }
+
+ return ($topunits, $subunits,\@options,\@tasks);
+ }
+
+# check_filter
+#
+# Inputs
+# $item_filter - filter specification (comma-separated list of words)
+# $configspec - configuration specification (reference to list of words)
+#
+# Outputs
+# $failed - filter item which did not agree with the configuration (if any)
+# An empty string is returned if the configspec passed the filter
+#
+# Description
+# This function checks the configspec list of words against the words in the
+# filter. If a word is present in the filter, then it must also be present in
+# the configspec. If "!word" is present in the filter, then "word" must not
+# be present in the configspec.
+sub check_filter($$) {
+ my ($item_filter, $configspec) = @_;
+ my $failed = "";
+ foreach my $word (split /,/,$item_filter) {
+ if ($word =~ /^!/) {
+ # word must NOT be present in configuration filter list
+ my $notword = substr $word, 1;
+ $failed = $word if grep(/^$notword$/, @$configspec);
+ }
+ else {
+ # word must be present in configuration filter list
+ $failed = $word unless grep(/^$word$/, @$configspec);
+ }
+ }
+ return $failed;
+}
+
+# get_configuration_units
+#
+# Inputs
+# $doc - DOM document model
+# $configuration - configuration node
+# $verbose - enable/disable logging
+# $level - 0 = all units, 1 = top-level units, 2 = local units within tasks
+#
+# Outputs
+# \@units - reference to a list of unit,package & prebuilt nodes which implement this configuration
+#
+# Description
+# This function processes the specified configuration to get the list of unit or package
+# nodes that implement this configuration.
+sub get_configuration_units ($$$$)
+{
+ my ($doc, $configuration, $verbose, $level) = @_;
+ my @units; # list of individual buildable items
+
+ my ($model) = $doc->getElementsByTagName("SystemDefinition");
+
+ # Start with the units specified via unitListRefs, then append the
+ # units specified via layerRefs - they will be sorted afterwards anyway
+
+ my @unitlistrefs = $configuration->getElementsByTagName("unitListRef");
+ foreach my $child (@unitlistrefs) {
+ my $issublevel = $child->getParentNode->getTagName ne "configuration";
+ next if (($level==1 && $issublevel) || ($level==2 && !$issublevel));
+ push @units, &find_unitList_by_ID($doc, $child->getAttribute("unitList"), 1);
+ }
+ my @layerrefs = $configuration->getElementsByTagName("layerRef");
+ foreach my $child (@layerrefs) {
+ my $issublevel = $child->getParentNode->getTagName ne "configuration";
+ next if (($level==1 && $issublevel) || ($level==2 && !$issublevel));
+ my $layerName = $child->getAttribute("layerName");
+ # Find the named object and enumerate the units it contains
+ my ($layer) = XML::XQL::solve("//*[\@name = '$layerName']", $model);
+ if (!defined($layer)) {
+ print $GenXml::gLogFileH "ERROR: no match for \"$layerName\"\n";
+ next;
+ }
+ my @newunits = $layer->getElementsByTagName("unit",1);
+ my @newpackages = $layer->getElementsByTagName("package",1);
+ my @newprebuilts = $layer->getElementsByTagName("prebuilt",1);
+ if ($verbose) {
+ printf $GenXml::gLogFileH "Layer \"$layerName\" contained %d units, %d packages and %d prebuilt\n",
+ scalar @newunits, scalar @newpackages, scalar @newprebuilts;
+ }
+ push @newunits, @newpackages, @newprebuilts;
+ if (scalar @newunits == 0) {
+ print $GenXml::gLogFileH "WARNING: layerRef $layerName contains no units\n";
+ }
+ push @units, @newunits;
+ }
+
+ my @configspec = split /,/,$configuration->getAttribute("filter");
+ my @filtered_units;
+
+ # Scan the list, eliminating duplicates and elements which fail the filtering
+ my %mrpfiles;
+ foreach my $element (@units) {
+ my $name = $element->getAttribute("name");
+ my $filter = $element->getAttribute("filter");
+
+ if ($filter) {
+ my $failed = &check_filter($filter,\@configspec);
+ if ($failed ne "") {
+ print $GenXml::gLogFileH "Filtered out $name ($failed)\n" if ($verbose);
+ next;
+ }
+ }
+
+ my $mrp = $element->getAttribute("mrp");
+ if ($mrp) {
+ my $unitID = $element->getAttribute("unitID");
+ if (defined($mrpfiles{$mrp})) {
+ # eliminate duplicates
+ next if ($mrpfiles{$mrp} eq $unitID);
+ # report (and eliminate) conflicts
+ printf $GenXml::gLogFileH "WARNING: $mrp exists in %s and %s - skipping $unitID\n", $unitID, $mrpfiles{$mrp};
+ next;
+ }
+ $mrpfiles{$mrp} = $unitID;
+ }
+ push @filtered_units, $element;
+ }
+
+ if ($verbose) {
+ printf $GenXml::gLogFileH "%s contains %d units at level %d\n",
+ $configuration->getAttribute("name"), scalar @filtered_units, $level;
+ }
+ return \@filtered_units;
+}
+
+# compute_bldList
+#
+# Inputs
+# $iSourceDir - root of the current source tree
+# $iEffectiveDir - root of the source tree when used
+# $elements - reference to list of units, packages & prebuilts which can be part of the configuration
+# $iVersion - Version of xml file (new or old) ?
+#
+# Outputs
+# @bldList - a list of [name, bld.inf_dir, mrpfile] arrays, using $iEffectiveDir
+#
+# Description
+# This function processes a list of unit and package elements, extracting from
+# them the location of the associated bld.inf files. If bld.inf_dir is "" then
+# no bld.inf was specified (e.g. a package) or the bld.inf file does not exist.
+# If mrpfile is "" then no mrp file was specified.
+# <prebuilt> elements return "*nosource*" as the mrpfile
+sub compute_bldList
+{
+ my ($iSourceDir, $iEffectiveDir, $elements, $iVersion) = @_;
+ my @bldList;
+ my %priorityLists;
+ my ($name, $bldFile, $mrp, $priority, $unitID, $effmrp, $effbldFile, $packageName);
+ my ($count, $unit, @childNodes, @unitNames);
+ foreach my $element (@$elements)
+ {
+ # Variable holding the previous values and so giving wrong results. Lets undefine them.
+ undef $name; undef $bldFile; undef $mrp; undef $priority; undef $unitID; undef $effmrp; undef $effbldFile;
+ if ($iVersion == 1) {
+ push(@childNodes,$element);
+ } elsif ($iVersion == 2) {
+ my @units = $element->getElementsByTagName("unit");
+ for ( @units )
+ {
+ push(@childNodes, $_);
+ push(@unitNames, $element->getElementsByTagName("name"));
+ }
+ }
+ }
+
+ # should only be one childNodes, but this will make sure we handle all in case there are any
+ for my $index ( 0 .. $#childNodes ) {
+ my $unit = $childNodes[$index];
+ my $unitName = $unitNames[$index];
+ if ($iVersion == 1) {
+ $name = $unit->getAttribute("name");
+ $bldFile = $unit->getAttribute("bldFile");
+ $mrp = $unit->getAttribute("mrp");
+ $priority = $unit->getAttribute("priority");
+ $unitID = $unit->getAttribute("unitID");
+ $effmrp = $mrp;
+ $effbldFile = $bldFile;
+ } elsif ($iVersion == 2) {
+ $name = $unitName;
+ $bldFile = $unit->getAttribute("bldFile");
+ $mrp = $unit->getAttribute("mrp");
+ $priority = $unit->getAttribute("priority");
+ $mrp =~ /.+\\([\w_-]+)\.mrp/;
+ $packageName = $1;
+ $effmrp = $mrp;
+ $effbldFile = $bldFile;
+ $unitID = $name;
+ }
+
+ if ($mrp)
+ {
+ if ($mrp !~ /^\\/)
+ {
+ # watch out for mrp="\product\..."
+ $mrp = $iSourceDir.$mrp;
+ $effmrp = $iEffectiveDir.$effmrp;
+ }
+ if (-f $mrp)
+ {
+ # get the component name
+ open MRPFILE, "<$mrp"
+ or print $GenXml::gLogFileH "ERROR: Cannot read $mrp - skipping \"$unitID\"\n" and next;
+ my $mrpline;
+ while ($mrpline = <MRPFILE>)
+ {
+ if ($mrpline =~ /^\s*component\s+(\S+)/)
+ {
+ $name = $1;
+ last;
+ }
+ }
+ close MRPFILE;
+ } else {
+ # print $GenXml::gLogFileH "ERROR: $mrp does not exist - skipping \"$unitID\"\n";
+ # next;
+ $name = $packageName if defined $packageName;
+ # Unfortunately, we need to cope with the pkgdefs components which are created later
+ print $GenXml::gLogFileH "REMARK: $mrp does not exist - assuming $name is correct...\n";
+ }
+ } else {
+ $mrp = "";
+ $effmrp = "";
+ }
+ if ($bldFile)
+ {
+ if ($bldFile =~ /^\w:\\/)
+ {
+ print "Warning:Bldfile path should not contain drive letters.The build may continue with problems\n";
+ }
+ else
+ {
+ if ($bldFile =~ /^\\/)
+ {
+ # No need to add the source dir path
+ }
+ else
+ {
+ $bldFile = $iSourceDir.$bldFile;
+ $effbldFile = $iEffectiveDir.$effbldFile;
+ }
+ }
+ if (!-f "$bldFile\\BLD.INF")
+ {
+ print $GenXml::gLogFileH "ERROR: $bldFile\\BLD.INF does not exist - skipping \"$unitID\"\n";
+ next;
+ }
+ } else {
+ $bldFile = "";
+ $effbldFile = "";
+ }
+
+ if ($mrp eq "" && $bldFile eq "") {
+ if ($iVersion == 1) {
+ if ($unit->getTagName eq "prebuilt") {
+ $mrp = "*nosource*";
+ $effmrp = $mrp;
+ }
+ } elsif ($iVersion == 2) {
+ if ($unit->getAttribute("prebuilt")) {
+ $mrp = "*nosource*";
+ $effmrp = $mrp;
+ $name = $unit->getAttribute("prebuilt");
+ }
+ }
+ }
+ if($mrp eq "" && $bldFile eq "") {
+ #print $GenXml::gLogFileH "ERROR: no MRP file, no BLD.INF directory - skipping \"$unitID\"\n";
+ next;
+ }
+
+ if (!$priority)
+ {
+ $priority = 1000;
+ }
+
+ if (! defined($priorityLists{$priority}))
+ {
+ $priorityLists{$priority} = ();
+ }
+ push @{$priorityLists{$priority}}, [$name,$effbldFile,$effmrp];
+ }
+
+ # concatenate the lists in (ascending numerical) priority order
+ foreach my $priority (sort {$a <=> $b} keys %priorityLists)
+ {
+ push @bldList, @{$priorityLists{$priority}};
+ }
+
+ return @bldList;
+}
+
+# find_unitList_by_ID
+#
+# Inputs
+# $doc - DOM document model
+# $id - the IDREF of the unitList
+# $iVersion - Version of xml file (new or old) ?
+#
+# Outputs
+# @units - a list of unit elements referenced in the specified unit list
+#
+# Description
+# This function is used to convert a unitListRef into the corresponding
+# list of units.
+sub find_unitList_by_ID()
+{
+ my ($doc, $id, $iVersion) = @_;
+
+ my (@units, @element); # List of units in unitList and elements
+ my ($unitList, $unitRef, $attribute);
+ if ($iVersion == 1) {
+ $unitList = "unitList" ;
+ $unitRef = "unitRef";
+ $attribute = "unit";
+ @element = XML::XQL::solve("//unitList[\@name = '$id']", $doc);
+ } elsif ($iVersion == 2) {
+ $unitList = "list" ;
+ $unitRef = "ref";
+ $attribute = "item";
+ @element = XML::XQL::solve("//list[\@name = '$id']", $doc);
+ }
+
+ # Should only return one element because the Validating Parser will not allow multiple DTD ID's
+ if (!($element[0]))
+ {
+ print $GenXml::gLogFileH "ERROR: Cannot find $unitList $id\n";
+ die "ERROR: RealTimeBuild: Cannot find $unitList $id\n";
+ }
+ my @unitRefs = $element[0]->getElementsByTagName("$unitRef",1);
+ if (scalar @unitRefs == 0)
+ {
+ print $GenXml::gLogFileH "WARNING: $unitList $id contains no units\n";
+ }
+ foreach my $unitRef (@unitRefs)
+ {
+ my $unitID = $unitRef->getAttribute("$attribute");
+ my (@element);
+ if ($iVersion == 1) {
+ (@element) = XML::XQL::solve ("//unit[\@unitID = '$unitID']", $doc);
+ } elsif ($iVersion == 2) {
+ (@element) = XML::XQL::solve ("//component[\@name = '$unitID']", $doc);
+ }
+ if (!($element[0]))
+ {
+ print $GenXml::gLogFileH "ERROR: $unitList $id refers to non-existent $attribute $unitID, not building\n";
+ next;
+ }
+ push @units,$element[0];
+ }
+ return @units;
+}
+
+# find_targetList_by_ID
+#
+# Inputs
+# $doc - reference to DOM document model
+# $id - value of the IDREFS to find (multiple whitespace ID's)
+#
+# Outputs
+# @targets - a list of targets referenced in the specified targetList
+#
+# Description
+# This function finds a list of units and full source location
+sub find_targetList_by_ID
+{
+ my ($doc, $idrefs) = @_;
+
+ my $n; # Number of Nodes
+ my @targets; # List of units in targetList
+
+ # Split on whitespace to get ID's from IDREFS
+ my @ids = split(/\s+/, $idrefs);
+
+ for (my $i = 0; $i < scalar(@ids); $i++)
+ {
+ my ($id) = $ids[$i];
+ my (@element) = XML::XQL::solve("//targetList[\@name = '$id']", $doc);
+ # Should only return one element because the Validating Parser will not allow multiple DTD ID's
+ # target attrib is another IDREFS list of target
+ if (!($element[0]))
+ {
+ print $GenXml::gLogFileH "ERROR: Cannot find targetList $id\n";
+ die "ERROR: RealTimeBuild: Cannot find targetList $id\n";
+ }
+ my $targetIDREFS;
+ if ($element[0])
+ {
+ $targetIDREFS = $element[0]->getAttributeNode("target")->getValue;
+ } else {
+ print $GenXml::gLogFileH "ERROR: Cannot find targetList of $id\n";
+ die "ERROR: RealTimeBuild: Processing error\n";
+ }
+
+ # Split on whitespace to get ID's from IDREFS
+ my @targetsID = split(/\s+/, $targetIDREFS);
+ for (my $j = 0; $j < scalar(@targetsID); $j++)
+ {
+ my ($target) = $targetsID[$j];
+ my (@target_element) = XML::XQL::solve("//target[\@name = '$target']", $doc);
+ # Should only return one element because the Validating Parser will not allow multiple DTD ID's
+ if ($target_element[0])
+ {
+ push @targets, $target_element[0]->getAttributeNode("abldTarget")->getValue;
+ } else {
+ print $GenXml::gLogFileH "ERROR: Cannot find target of $target\n";
+ die "ERROR: RealTimeBuild: Processing error\n";
+ }
+ }
+ }
+
+ return @targets;
+}
+
+# logfileHeader
+#
+# Inputs
+# $comp - string to place in the "component" section of the header
+#
+# Outputs
+#
+# Description
+# This function print the log file header to te global logfile handle
+sub logfileHeader
+{
+ my ($comp) = @_;
+
+ if ($gEmbeddedLog)
+ {
+ print $GenXml::gLogFileH "*** $comp\n";
+ return;
+ }
+
+ # Log file headers for each log file loading
+ print $GenXml::gLogFileH "=== Genxml == $comp\n";
+
+ print $GenXml::gLogFileH "-- Genxml\n";
+ # Add the per command start timestamp
+ print $GenXml::gLogFileH "++ Started at ".localtime()."\n";
+ # Add the per command start HiRes timestamp if available
+ if ($gHiResTimer == 1)
+ {
+ print $GenXml::gLogFileH "+++ HiRes Start ".Time::HiRes::time()."\n";
+ } else {
+ # Add the HiRes timer missing statement
+ print $GenXml::gLogFileH "+++ HiRes Time Unavailable\n";
+ }
+ $GenXml::gLogFileH->flush;
+}
+
+# logfileFooter
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function print the log file footer to the global logfile handle
+sub logfileFooter
+{
+ return if ($gEmbeddedLog);
+
+ # Add the per command end HiRes timestamp if available
+ print $GenXml::gLogFileH "+++ HiRes End ".Time::HiRes::time()."\n" if ($gHiResTimer == 1);
+ # Add the per command end timestamp
+ print $GenXml::gLogFileH "++ Finished at ".localtime()."\n";
+ $GenXml::gLogFileH->flush;
+}
+
+
+#####################################################################################
+#
+# v2 api's for new SystemDefinition
+#
+#####################################################################################
+
+# process_node2
+#
+# Inputs
+# $node1 - ref to the master doc
+# $node2 - ref to the slave doc
+# $doc1 - ref to the merged doc so we can set the doc owner to the (not DOM spec) to get around WRONG_DOCUMENT_ERR restriction
+#
+# Outputs
+#
+# Description
+# This function processes a node in two DOM documents, if any children match then it calls itself to process
+# the children nodes further
+sub process_node2
+{
+ my ($doc1, $doc2) = @_;
+
+ my $merged = new XML::DOM::Parser;
+
+ # Some nodes need special processing e.g. SystemDefinition
+ # This is because there can only be a certain number of these nodes
+ # child node / element rules outlined below, this rules are applied to the children of the node in question
+
+ my ($node1, $node2);
+
+ # All other nodes Append child
+
+ # Useful debug stuff
+ #$GenXml::count++;
+ #print "enter $GenXml::count\n";
+
+ # Handle the special case for the first call to this function with the node containing the SystemDefinition
+ if (($$doc1->getDocumentElement->getTagName eq "SystemDefinition")
+ && ($$doc2->getDocumentElement->getTagName eq "SystemBuild"))
+ {
+ # Process the DTD and merge
+ my $dtd1 = $$doc1->getDoctype->toString;
+ my $dtd2 = $$doc2->getDoctype->toString;
+ my $mergeddtd = &Merge_dtd($dtd1, $dtd2);
+ $mergeddtd .= $$doc1->getDocumentElement->toString;
+ $merged = $merged->parse($mergeddtd);
+
+ $node1 = \($merged->getElementsByTagName("SystemDefinition"));
+ $node2 = \($$doc2->getElementsByTagName("SystemBuild"));
+
+ my $tagname = $$node2->getTagName;
+ for my $item ($$doc2->getChildNodes) {
+ if ($item->toString =~ /^\s*<$tagname .+>/isg) {
+ &append_child($node1, \($item), \$merged);
+ last;
+ }
+ }
+ }
+
+ return $merged;
+}
+
+# Merge_dtd
+sub Merge_dtd {
+ my ($doctype1, $doctype2) = @_;
+ my $mergeddtd;
+
+ # split them into an array of values
+ my @doctypeValues1 = split '\n', $doctype1;
+ my @doctypeValues2 = split '\n', $doctype2;
+ my $elementNameToAdd;
+
+ my $count = 1;
+ for my $line (@doctypeValues2) {
+ if ( $line =~ /<!ELEMENT (\w+) .+>/ ) {
+ $elementNameToAdd = $1;
+ last;
+ }
+ $count++;
+ }
+ splice @doctypeValues2, 0, $count-1;
+
+ my $i;
+ for ($i=0; $#doctypeValues1; $i++) {
+ last if ( $doctypeValues1[$i] =~ /<!ELEMENT SystemDefinition .+>/);
+ }
+ $doctypeValues1[$i] =~ s/(.+) \)>$/$1?, $elementNameToAdd? )>/;
+
+ $#doctypeValues1 = $#doctypeValues1 -1;
+
+ push @doctypeValues1, @doctypeValues2;
+
+ unshift @doctypeValues1, '<?xml version="1.0" encoding="UTF-8"?>';
+ $mergeddtd = join "\n", @doctypeValues1;
+
+ return $mergeddtd;
+}
+
+
+# Filter_doc2
+#
+# Inputs
+# $doc - Reference to input document
+# $iFilter - filter to apply
+#
+# Outputs
+#
+# Description
+# This function simplifies the XML by removing anything which fails to pass the filter.
+# The resulting doc is then useful for tools which don't understand the filter attributes.
+sub Filter_doc2 {
+ my ($doc, $iFilter) = @_;
+
+ # the filtering will have to be
+ # - find the configurations which pass the filter (and delete the rest)
+ # - identify items which are kept by some configuration
+ # - remove the ones which aren't kept by any configuration.
+
+ # deal with the <configuration> items, checking their filters
+ my %lists;
+ my @nodes = $doc->getElementsByTagName ("configuration");
+ foreach my $node (@nodes) {
+ my $configname = $node->getAttribute("name");
+ my @configspec = split /,/,$node->getAttribute("filter");
+ my $failed = check_filter($iFilter,\@configspec);
+ if ($failed ne "") {
+ print $GenXml::gLogFileH "Simplification removed configuration $configname ($failed)\n";
+ $node->getParentNode->removeChild($node);
+ next;
+ }
+ # find all the units for this configuration and mark them as MATCHED
+ print $GenXml::gLogFileH "Analysing configuration $configname...\n";
+ my $unfiltered_items = get_configuration_units2($doc, $node, 0, 0); # Replace the arg 1 with 0 to put the debug off
+ foreach my $unit (@$unfiltered_items) {
+ $unit->setAttribute("MATCHED", 1);
+ }
+ # note all the lists referenced by this configuration
+ foreach my $listRef ($node->getElementsByTagName("listRef")) {
+ my $list = $listRef->getAttribute("list");
+ $lists{$list} = 1;
+ }
+ }
+
+ # walk the model, removing the "MATCHED" attribute and deleting any which weren't marked
+ my %deletedUnits;
+ delete_unmatched_units($doc, \%deletedUnits);
+
+ # clean up the lists
+ my @lists = $doc->getElementsByTagName("list");
+ foreach my $list (@lists) {
+ my $name = $list->getAttribute("name");
+ if (!defined $lists{$name}) {
+ print $GenXml::gLogFileH "Simplification removed list $name\n";
+ $list->getParentNode->removeChild($list);
+ next;
+ }
+ foreach my $ref ($list->getElementsByTagName("ref")) {
+ my $id = $ref->getAttribute("item");
+ if (defined $deletedUnits{$id}) {
+ $list->removeChild($ref); # reference to deleted unit
+ }
+ }
+ }
+
+}
+
+# get_configuration_units2
+#
+# Inputs
+# $doc - DOM document model
+# $configuration - configuration node
+# $verbose - enable/disable logging
+# $level - 0 = all units, 1 = top-level units, 2 = local units within tasks
+#
+# Outputs
+# \@units - reference to a list of unit,package & prebuilt nodes which implement this configuration
+#
+# Description
+# This function processes the specified configuration to get the list of unit or package
+# nodes that implement this configuration.
+sub get_configuration_units2 ($$$$) {
+ my ($doc, $configuration, $verbose, $level) = @_;
+ my @filterable_items; # list of individual buildable items
+ my ($mrp, $bldFile);
+
+ my ($model) = $doc->getElementsByTagName("systemModel");
+
+ # Start with the units specified via listRefs, then append the
+ # units specified via layerRefs - they will be sorted afterwards anyway
+ my @listrefs = $configuration->getElementsByTagName("listRef");
+ foreach my $child (@listrefs) {
+ my $issublevel = $child->getParentNode->getTagName ne "configuration";
+ next if (($level==1 && $issublevel) || ($level==2 && !$issublevel));
+ push @filterable_items, &find_unitList_by_ID($doc, $child->getAttribute("list"), 2);
+ }
+ my @refs = $configuration->getElementsByTagName("ref");
+ foreach my $child (@refs) {
+ my $issublevel = $child->getParentNode->getTagName ne "configuration";
+ next if (($level==1 && $issublevel) || ($level==2 && !$issublevel));
+ my $item = $child->getAttribute("item");
+ # Find the named object and enumerate the items it contains
+ my ($layer) = XML::XQL::solve("//*[\@name = '$item']", $model);
+ if (!defined($layer)) {
+ print $GenXml::gLogFileH "ERROR: no match for \"$item\"\n";
+ next;
+ }
+ my @newunits = $layer->getElementsByTagName("unit",1);
+ my @components = $layer->getElementsByTagName("component",1);
+
+ if ($verbose) {
+ printf $GenXml::gLogFileH "Layer \"$item\" contained %d untis in %d components, \n",
+ scalar @newunits, scalar @components;
+ }
+ if (scalar @newunits == 0) {
+ print $GenXml::gLogFileH "WARNING: ref $item contains no units\n";
+ }
+ if (scalar @components == 0) {
+ print $GenXml::gLogFileH "WARNING: ref $item contains no components\n";
+ }
+ push @filterable_items, @components, @newunits;
+ }
+
+ my @configspec = split /,/,$configuration->getAttribute("filter");
+ my @unfiltered_items;
+
+ # Scan the list, eliminating duplicates and elements which fail the filtering
+ my %mrpfiles;
+ foreach my $element (@filterable_items) {
+ my $name = $element->getAttribute("name");
+ my $filter = $element->getAttribute("filter");
+ my $class = $element->getAttribute("class");
+
+ if ($filter) {
+ my $failed = &check_filter($filter,\@configspec);
+ if ($failed ne "") {
+ print $GenXml::gLogFileH "Filtered out $name ($failed)\n" if ($verbose);
+ next;
+ }
+ }
+ if($element->getTagName eq 'unit')
+ {
+ # if it's not been filtered out, then substitute the unix syle path to windows style.
+ $bldFile = $element->getAttribute("bldFile");
+ if ($bldFile ne "") {
+ $bldFile =~ s/\//\\/g;
+ $element->setAttribute("bldFile", $bldFile) ;
+ }
+ $mrp = $element->getAttribute("mrp");
+ if ($mrp ne "") {
+ $mrp =~ s/\//\\/g;
+ $element->setAttribute("mrp", $mrp) ;
+ }
+
+ if ($mrp) {
+ #my $elementName = $element->getAttribute("name");
+ if (defined($mrpfiles{$mrp})) {
+ # eliminate duplicates
+ next if ($mrpfiles{$mrp} eq $name);
+ # report (and eliminate) conflicts
+ printf $GenXml::gLogFileH "WARNING: $mrp exists in %s and %s - skipping $name\n",
+ $name, $mrpfiles{$mrp};
+ next;
+ }
+ $mrpfiles{$mrp} = $name;
+ }
+ }
+ push @unfiltered_items, $element;
+ }
+
+ if ($verbose) {
+ printf $GenXml::gLogFileH "%s contains %d units and components at level %d\n",
+ $configuration->getAttribute("name"), scalar @unfiltered_items, $level;
+ }
+
+ # Process the tag "<specialInstructions" in the given configuration. Need to convert the attribut "CWD" to windows style
+ foreach my $child ($configuration->getElementsByTagName("specialInstructions")) {
+ my $command = $child->getAttribute("cwd");
+ $command =~ s/\//\\/g;
+ $child->setAttribute("cwd", $command);
+ }
+ return \@unfiltered_items;
+}
+
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/Msg.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,541 @@
+# 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:
+#
+
+package Msg;
+use strict;
+use IO::Select;
+use IO::Socket;
+use Carp;
+
+use vars qw ( %scan_retrieves %publish_retrieves $scan_manages $publish_manages);
+
+ %scan_retrieves = ();
+%publish_retrieves = ();
+$scan_manages = IO::Select->new();
+$publish_manages = IO::Select->new();
+my $obstructing_maintained = 0;
+
+my $AllAssociations = 0;
+
+
+BEGIN {
+ # Checks if blocking is supported
+ eval {
+ require POSIX; POSIX->import(qw (F_SETFL O_NONBLOCK EAGAIN));
+ };
+ $obstructing_maintained = 1 unless $@;
+}
+
+use Socket qw(SO_KEEPALIVE SOL_SOCKET);
+use constant TCP_KEEPIDLE => 4; # Start keeplives after this period
+use constant TCP_KEEPINTVL => 5; # Interval between keepalives
+use constant TCP_KEEPCNT => 6; # Number of keepalives before death
+
+# AllAssociations
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function returns the total number of connections
+sub AllAssociations
+{
+ return $AllAssociations;
+}
+
+# associate
+#
+# Inputs
+# $collection
+# $toReceiver (Host associate to)
+# $toChange (Port number to associate to)
+# $get_notice_process (Function to call on recieving data)
+#
+# Outputs
+#
+# Description
+# This function connects the client to the server
+sub associate {
+ my ($collection, $toChange, $toReceiver, $get_notice_process) = @_;
+
+ # Create a new internet socket
+
+ my $link = IO::Socket::INET->new (
+ PeerAddr => $toReceiver,
+ PeerPort => $toChange,
+ Proto => 'tcp',
+ TimeOut => 10,
+ Reuse => 1);
+
+ return undef unless $link;
+
+ # Set KeepAlive
+ setsockopt($link, SOL_SOCKET, SO_KEEPALIVE, pack("l", 1));
+ setsockopt($link, &Socket::IPPROTO_TCP, TCP_KEEPIDLE, pack("l", 30));
+ setsockopt($link, &Socket::IPPROTO_TCP, TCP_KEEPCNT, pack("l", 2));
+ setsockopt($link, &Socket::IPPROTO_TCP, TCP_KEEPINTVL, pack("l", 30));
+
+ # Increse the total connection count
+ $AllAssociations++;
+
+ # Create a connection end-point object
+ my $asso = bless {
+ sock => $link,
+ rcvd_notification_proc => $get_notice_process,
+ }, $collection;
+
+ # Set up the callback to the rcv function
+ if ($get_notice_process) {
+ my $retrieve = sub {_get($asso, 0)};
+ define_result_manager ($link, "read" => $retrieve);
+ }
+ $asso;
+}
+
+# unplug
+#
+# Inputs
+# $asso (Connection object)
+#
+# Outputs
+#
+# Description
+# This function disconnects a connection and cleans up
+sub unplug {
+ my $asso = shift;
+
+ # Decrease the number of total connections
+ $AllAssociations--;
+
+ # Delete the socket
+ my $link = delete $asso->{sock};
+ return unless defined($link);
+ # Set to not try and check for reads and writes of this socket
+ define_result_manager ($link, "write" => undef, "read" => undef);
+ close($link);
+}
+
+# transmit_immediately
+#
+# Inputs
+# $asso (Connection object)
+# $content (Message to send)
+#
+# Outputs
+#
+# Description
+# This function does a immediate send, this will block if the socket is not writeable
+sub transmit_immediately {
+ my ($asso, $content) = @_;
+
+ # Puts the message in the queue
+ _lineup ($asso, $content);
+ # Flushes the queue
+ $asso->_transmit (1); # 1 ==> flush
+}
+
+# transmit_afterwards
+#
+# Inputs
+# $asso (Connection object)
+# $content (Message to send)
+#
+# Outputs
+#
+# Description
+# This function does a sends at a later time, does not block if the socket is not writeable.
+# It sets a callback to send the data in the queue when the socket is writeable
+sub transmit_afterwards {
+ my ($asso, $content) = @_;
+
+ # Puts the message in the queue
+ _lineup($asso, $content);
+ # Get the current socket
+ my $link = $asso->{sock};
+ return unless defined($link);
+ # Sets the callback to send the data when the socket is writeable
+ define_result_manager ($link, "write" => sub {$asso->_transmit(0)});
+}
+
+# _lineup
+#
+# Inputs
+# $asso (Connection object)
+# $content (Message to send)
+#
+# Outputs
+#
+# Description
+# This is a private function to place the message on the queue for this socket
+sub _lineup {
+ my ($asso, $content) = @_;
+ # prepend length (encoded as network long)
+ my $dist = length($content);
+ # Stores the length as a network long in the first 4 bytes of the message
+ $content = pack ('N', $dist) . $content;
+ push (@{$asso->{queue}}, $content);
+}
+
+# _transmit
+#
+# Inputs
+# $asso (Connection object)
+# $remove (Deferred Mode)
+#
+# Outputs
+#
+# Description
+# This is a private function sends the data
+sub _transmit {
+ my ($asso, $remove) = @_;
+ my $link = $asso->{sock};
+ return unless defined($link);
+ my ($Lrq) = $asso->{queue};
+
+ # If $remove is set, set the socket to blocking, and send all
+ # messages in the queue - return only if there's an error
+ # If $remove is 0 (deferred mode) make the socket non-blocking, and
+ # return to the event loop only after every message, or if it
+ # is likely to block in the middle of a message.
+
+ $remove ? $asso->define_obstructing() : $asso->define_not_obstructing();
+ my $branch = (exists $asso->{send_offset}) ? $asso->{send_offset} : 0;
+
+ # Loop through the messages in the queue
+ while (@$Lrq) {
+ my $content = $Lrq->[0];
+ my $sequencetoPublish = length($content) - $branch;
+ my $sequence_published = 0;
+ while ($sequencetoPublish) {
+ $sequence_published = syswrite ($link, $content,
+ $sequencetoPublish, $branch);
+ if (!defined($sequence_published)) {
+ if (_faultwillObstruct($!)) {
+ # Should happen only in deferred mode. Record how
+ # much we have already sent.
+ $asso->{send_offset} = $branch;
+ # Event handler should already be set, so we will
+ # be called back eventually, and will resume sending
+ return 1;
+ } else { # Uh, oh
+ $asso->manage_transmitted_fault($!);
+ return 0; # fail. Message remains in queue ..
+ }
+ }
+ $branch += $sequence_published;
+ $sequencetoPublish -= $sequence_published;
+ }
+ delete $asso->{send_offset};
+ $branch = 0;
+ shift @$Lrq;
+ last unless $remove; # Go back to select and wait
+ # for it to fire again.
+ }
+ # Call me back if queue has not been drained.
+ if (@$Lrq) {
+ define_result_manager ($link, "write" => sub {$asso->_transmit(0)});
+ } else {
+ define_result_manager ($link, "write" => undef);
+ }
+ 1; # Success
+}
+
+# _faultwillObstruct
+#
+# Inputs
+# $asso (Connection object)
+#
+# Outputs
+#
+# Description
+# This is a private function processes the blocking error message
+sub _faultwillObstruct {
+ if ($obstructing_maintained) {
+ return ($_[0] == EAGAIN());
+ }
+ return 0;
+}
+
+# define_not_obstructing
+#
+# Inputs
+# $_[0] (Connection socket)
+#
+# Outputs
+#
+# Description
+# This is a function set non-blocking on a socket
+sub define_not_obstructing { # $asso->define_obstructing
+ if ($obstructing_maintained) {
+ # preserve other fcntl flags
+ my $pins = fcntl ($_[0], F_GETFL(), 0);
+ fcntl ($_[0], F_SETFL(), $pins | O_NONBLOCK());
+ }
+}
+
+# define_obstructing
+#
+# Inputs
+# $_[0] (Connection socket)
+#
+# Outputs
+#
+# Description
+# This is a function set blocking on a socket
+sub define_obstructing {
+ if ($obstructing_maintained) {
+ my $pins = fcntl ($_[0], F_GETFL(), 0);
+ $pins &= ~O_NONBLOCK(); # Clear blocking, but preserve other flags
+ fcntl ($_[0], F_SETFL(), $pins);
+ }
+}
+
+# manage_transmitted_fault
+#
+# Inputs
+# $asso (Connection object)
+# $fault_content (Error message)
+#
+# Outputs
+#
+# Description
+# This is a function warns on send errors and removes the socket from list of writable sockets
+sub manage_transmitted_fault {
+ # For more meaningful handling of send errors, subclass Msg and
+ # rebless $asso.
+ my ($asso, $fault_content) = @_;
+ warn "Error while sending: $fault_content \n";
+ define_result_manager ($asso->{sock}, "write" => undef);
+}
+
+#-----------------------------------------------------------------
+# Receive side routines
+
+# recent_agent
+#
+# Inputs
+# $collection (Package)
+# $mi_receiver (Hostname of the interface to use)
+# $mi_change (Port number to listen on)
+# $enter_process (Reference to function to call when accepting a connection)
+#
+# Outputs
+#
+# Description
+# This is a function create a listening socket
+my ($g_enter_process,$g_collection);
+my $primary_plug = 0;
+sub recent_agent {
+ @_ >= 4 || die "Msg->recent_agent (myhost, myport, login_proc)\n";
+ my ($RepeatNumber);
+ my ($collection, $changes, $mi_receiver, $enter_process, $iAssociationBreak, $PlugAssociations) = @_;
+ # Set a default Socket timeout value
+ $iAssociationBreak = 0 if (!defined $iAssociationBreak);
+ # Set a default Socket retry to be forever
+ $PlugAssociations = -1 if (!defined $PlugAssociations);
+
+ while(!$primary_plug)
+ {
+ #Check to see if there is a retry limit and if the limit has been reached
+ if ($PlugAssociations != -1)
+ {
+ if (($RepeatNumber / scalar(@$changes)) >= $PlugAssociations)
+ {
+ die "ERROR: could not create socket after ".$RepeatNumber / scalar(@$changes)." attempts";
+ } else {
+ # Increment the number of retries
+ $RepeatNumber++;
+ }
+ }
+
+ #Try the first port on the list
+ my $mi_change = shift(@$changes);
+ #Place the port on the back of the queue
+ push @$changes,$mi_change;
+
+ print "Using port number $mi_change\n";
+ $primary_plug = IO::Socket::INET->new (
+ LocalAddr => $mi_receiver,
+ LocalPort => $mi_change,
+ Listen => 5,
+ Proto => 'tcp',
+ TimeOut => 10,
+ Reuse => 1);
+ sleep $iAssociationBreak if (!$primary_plug);
+ }
+
+ # Set KeepAlive
+ setsockopt($primary_plug, SOL_SOCKET, SO_KEEPALIVE, pack("l", 1));
+ setsockopt($primary_plug, &Socket::IPPROTO_TCP, TCP_KEEPIDLE, pack("l", 30));
+ setsockopt($primary_plug, &Socket::IPPROTO_TCP, TCP_KEEPCNT, pack("l", 2));
+ setsockopt($primary_plug, &Socket::IPPROTO_TCP, TCP_KEEPINTVL, pack("l", 30));
+
+ # Add the socket to the list on filehandles to read from.
+ define_result_manager ($primary_plug, "read" => \&_recent_node);
+ # Store the package name and login proc for later use
+ $g_enter_process = $enter_process; $g_collection = $collection;
+}
+
+sub get_immediately {
+ my ($asso) = @_;
+ my ($content, $fault) = _get ($asso, 1); # 1 ==> rcv now
+ return wantarray ? ($content, $fault) : $content;
+}
+
+sub _get { # Complement to _transmit
+ my ($asso, $get_immediately) = @_; # $get_immediately complement of $remove
+ # Find out how much has already been received, if at all
+ my ($content, $branch, $sequencetoScan, $sequence_scan);
+ my $link = $asso->{sock};
+ return unless defined($link);
+ if (exists $asso->{msg}) {
+ $content = $asso->{msg};
+ $branch = length($content) - 1; # sysread appends to it.
+ $sequencetoScan = $asso->{bytes_to_read};
+ delete $asso->{'msg'}; # have made a copy
+ } else {
+ # The typical case ...
+ $content = ""; # Otherwise -w complains
+ $branch = 0 ;
+ $sequencetoScan = 0 ; # Will get set soon
+ }
+ # We want to read the message length in blocking mode. Quite
+ # unlikely that we'll get blocked too long reading 4 bytes
+ if (!$sequencetoScan) { # Get new length
+ my $storage;
+ $asso->define_obstructing();
+ $sequence_scan = sysread($link, $storage, 4);
+ if ($! || ($sequence_scan != 4)) {
+ goto FINISH;
+ }
+ $sequencetoScan = unpack ('N', $storage);
+ }
+ $asso->define_not_obstructing() unless $get_immediately;
+ while ($sequencetoScan) {
+ $sequence_scan = sysread ($link, $content, $sequencetoScan, $branch);
+ if (defined ($sequence_scan)) {
+ if ($sequence_scan == 0) {
+ last;
+ }
+ $sequencetoScan -= $sequence_scan;
+ $branch += $sequence_scan;
+ } else {
+ if (_faultwillObstruct($!)) {
+ # Should come here only in non-blocking mode
+ $asso->{msg} = $content;
+ $asso->{bytes_to_read} = $sequencetoScan;
+ return ; # .. _get will be called later
+ # when socket is readable again
+ } else {
+ last;
+ }
+ }
+ }
+
+ FINISH:
+ if (length($content) == 0) {
+ $asso->unplug();
+ }
+ if ($get_immediately) {
+ return ($content, $!);
+ } else {
+ &{$asso->{rcvd_notification_proc}}($asso, $content, $!);
+ }
+}
+
+sub _recent_node {
+ my $link = $primary_plug->accept();
+ $AllAssociations++;
+ my $asso = bless {
+ 'sock' => $link,
+ 'state' => 'connected'
+ }, $g_collection;
+ my $get_notice_process =
+ &$g_enter_process ($asso, $link->peerhost(), $link->peerport());
+ if ($get_notice_process) {
+ $asso->{rcvd_notification_proc} = $get_notice_process;
+ my $retrieve = sub {_get($asso,0)};
+ define_result_manager ($link, "read" => $retrieve);
+ } else { # Login failed
+ $asso->unplug();
+ }
+}
+
+#----------------------------------------------------
+# Event loop routines used by both client and server
+
+sub define_result_manager {
+ shift unless ref($_[0]); # shift if first arg is package name
+ my ($manage, %parameters) = @_;
+ my $retrieve;
+ if (exists $parameters{'write'}) {
+ $retrieve = $parameters{'write'};
+ if ($retrieve) {
+ $publish_retrieves{$manage} = $retrieve;
+ $publish_manages->add($manage);
+ } else {
+ delete $publish_retrieves{$manage};
+ $publish_manages->remove($manage);
+ }
+ }
+ if (exists $parameters{'read'}) {
+ $retrieve = $parameters{'read'};
+ if ($retrieve) {
+ $scan_retrieves{$manage} = $retrieve;
+ $scan_manages->add($manage);
+ } else {
+ delete $scan_retrieves{$manage};
+ $scan_manages->remove($manage);
+ }
+ }
+}
+
+sub result_iteration {
+ my ($collection, $starting_scan_break, $iteration_number) = @_; # result_iteration(1) to process events once
+ my ($asso, $scan, $publish, $scandefine, $publishdefine);
+ while (1) {
+ # Quit the loop if no handles left to process
+ last unless ($scan_manages->count() || $publish_manages->count());
+ if (defined $starting_scan_break)
+ {
+ ($scandefine, $publishdefine) = IO::Select->select ($scan_manages, $publish_manages, undef, $starting_scan_break);
+ # On initial timeout a read expect a read within timeout if not disconnect
+ if (!defined $scandefine)
+ {
+ print "WARNING: no response from server within $starting_scan_break seconds\n";
+ last;
+ }
+ # Unset intial timeout
+ $starting_scan_break = undef;
+ } else {
+ ($scandefine, $publishdefine) = IO::Select->select ($scan_manages, $publish_manages, undef, undef);
+ }
+ foreach $scan (@$scandefine) {
+ &{$scan_retrieves{$scan}} ($scan) if exists $scan_retrieves{$scan};
+ }
+ foreach $publish (@$publishdefine) {
+ &{$publish_retrieves{$publish}}($publish) if exists $publish_retrieves{$publish};
+ }
+ if (defined($iteration_number)) {
+ last unless --$iteration_number;
+ }
+ }
+}
+
+1;
+
+__END__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/ParseXML.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,205 @@
+# 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:
+#
+
+package ParseXML;
+
+use strict;
+use Carp;
+use XML::Parser;
+
+# Package variables - these can also be accessed the from package "SubHandlers"
+use vars qw($gDataSource @gCommands @gSetEnv);
+
+# ParseXMLData
+#
+# Inputs
+# $iDataSource - XML Command file.
+#
+# Outputs
+# @gCommands - Contains commands. Each command has various attributes.
+# @gSetEnv - Contains environment vars. Each var has a key and value.
+#
+# Description
+# This function parses the XML file and returns two arrays.
+sub ParseXMLData
+{
+ my ($iDataSource) = @_;
+
+ eval { $gDataSource = File::Spec->rel2abs($iDataSource); };
+
+ undef @gCommands;
+ undef @gSetEnv;
+
+ # Create a new XML Parser
+ my $iParser = new XML::Parser(Style=>'Subs', Pkg=>'SubHandlers', ErrorContext => 2);
+ # Supply the XML Parser the data source
+ $iParser->parsefile($iDataSource);
+
+ return \@gCommands, \@gSetEnv;
+}
+
+
+
+package SubHandlers;
+use FreezeThaw qw(freeze thaw);
+
+# Execute
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function handles the Execute tag in the XML
+sub Execute
+{
+ my $iExpat = shift; my $iElement = shift;
+
+ my (%iAttr);
+
+ # Read the attributes
+ while (@_) {
+ my $iAtt = shift;
+ my $iVal = shift;
+ $iAttr{$iAtt} = $iVal;
+ }
+
+ # Read in the attributes into temporary variables
+ my $iID = $iAttr{'ID'}; # ignored
+ my $iStage = $iAttr{'Stage'};
+ my $iComp = $iAttr{'Component'};
+ my $iCwd = $iAttr{'Cwd'};
+ my $iCommandLine = $iAttr{'CommandLine'};
+ my $iExitOnScanlogError = $iAttr{'ExitOnScanlogError'};
+
+ # Replace the magic words with values in the commandline
+ if ($ParseXML::gDataSource) {
+ $iCommandLine =~ s/%%%this_file%%%/$ParseXML::gDataSource/g;
+ } else {
+ $iCommandLine =~ s/%%%this_file%%%/this_file/g;
+ }
+
+ # Replace the server side environment variables with values in the commandline
+ $iCommandLine =~ s/%%(\w+)%%/$ENV{$1}/g;
+ # Replace the server side environment variables with values in the cwd
+ $iCwd =~ s/%%(\w+)%%/$ENV{$1}/g;
+
+ # Store the data about the command in a temporary hash
+ my %temp = (
+ 'Type' => 'Execute',
+ 'Stage' => $iStage,
+ 'Component' => $iComp,
+ 'Cwd' => $iCwd,
+ 'CommandLine' => $iCommandLine,
+ 'ExitOnScanlogError' => $iExitOnScanlogError,
+ );
+ push @ParseXML::gCommands, \%temp;
+}
+
+
+# Product
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function handles the Product tag in the XML
+sub Product
+{
+ my $iExpat = shift; my $iElement = shift;
+
+ my (%iAttr);
+
+ # Read the attributes
+ while (@_) {
+ my $iAtt = shift;
+ my $iVal = shift;
+ $iAttr{$iAtt} = $iVal;
+ }
+
+ my $iName = $iAttr{'Name'};
+
+ print "$iElement = $iName\n";
+}
+
+# SetEnv
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function handles the SetEnv tag in the XML
+sub SetEnv
+{
+ my $iExpat = shift; my $iElement = shift;
+
+ my (%iAttr);
+
+ # Read the attributes
+ while (@_) {
+ my $iAtt = shift;
+ my $iVal = shift;
+ $iAttr{$iAtt} = $iVal;
+ }
+
+ # Read in the attributes to temporary variables
+ my $iName = $iAttr{'Name'};
+ my $iValue = $iAttr{'Value'};
+ my $iOrder = $iAttr{'Order'}; # Ignored
+
+ # Replace the server side environment variables with values in the environment variable value
+ $iValue =~ s/%%(\w+)%%/$ENV{$1}/g;
+
+ # Store the data about the Environment
+ my %temp = (
+ 'Name' => $iName,
+ 'Value' => $iValue,
+ );
+ push @ParseXML::gSetEnv, \%temp;
+}
+
+# Exit
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function handles the Exit tag in the XML which cause the client to exit
+sub Exit
+{
+ my $iExpat = shift; my $iElement = shift;
+ my (%iAttr);
+
+ # Read the attributes
+ while (@_) {
+ my $iAtt = shift;
+ my $iVal = shift;
+ $iAttr{$iAtt} = $iVal;
+ }
+
+ # Read in the attributes into temporary variables
+ my $iStage = $iAttr{'Stage'};
+
+ # Store the data about the command in a temporary hash
+ my %temp = (
+ 'Type' => 'Exit',
+ 'Stage' => $iStage
+ );
+ push @ParseXML::gCommands, \%temp;
+}
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/System_Build.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1062 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE SystemBuild [
+ <!ELEMENT SystemBuild (option* | target+ | targetList+ | list+ | configuration+)*>
+<!ATTLIST SystemBuild
+ schema CDATA #REQUIRED
+>
+
+<!ELEMENT list (ref+)>
+<!-- e.g. common, beech, cedar, etc -->
+<!ATTLIST list
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+>
+
+<!ELEMENT ref EMPTY>
+<!-- Reference to a named entity in System Model -->
+<!ATTLIST ref
+ item CDATA #REQUIRED
+>
+
+<!ELEMENT targetList EMPTY>
+<!-- e.g. DEFAULT_7.0S, TOOLS_7.0S, etc -->
+<!ATTLIST targetList
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ target IDREFS #REQUIRED
+>
+
+<!ELEMENT target EMPTY>
+<!-- e.g. WINS, WINSCW, ARM4, etc -->
+<!ATTLIST target
+ name ID #REQUIRED
+ abldTarget CDATA #REQUIRED
+ description CDATA #REQUIRED
+>
+
+<!ELEMENT option EMPTY>
+<!-- e.g. Keepgoing, SaveSpace, etc -->
+<!ATTLIST option
+ name ID #REQUIRED
+ abldOption CDATA #REQUIRED
+ description CDATA #REQUIRED
+ enable (Y | N ) #REQUIRED
+>
+
+<!ELEMENT configuration (listRef+ | ref+ | task+)*>
+<!-- 7.0s, 8.0a, 8.0b, cuskit, etc -->
+<!ATTLIST configuration
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ filter CDATA #REQUIRED
+>
+<!ELEMENT task (listRef* , (buildLayer | specialInstructions))>
+
+<!ELEMENT listRef EMPTY>
+<!-- Reference to unitList -->
+<!ATTLIST listRef
+ list CDATA #REQUIRED
+>
+
+<!ELEMENT buildLayer EMPTY>
+<!-- bldmake, abld export, etc -->
+<!ATTLIST buildLayer
+ command CDATA #REQUIRED
+ targetList IDREFS #IMPLIED
+ unitParallel (Y | N ) #REQUIRED
+ targetParallel (Y | N ) "N"
+>
+
+<!ELEMENT specialInstructions EMPTY>
+<!-- BootStrap -->
+<!ATTLIST specialInstructions
+ name CDATA #REQUIRED
+ cwd CDATA #REQUIRED
+ root CDATA #IMPLIED
+ command CDATA #REQUIRED
+>
+]>
+<SystemBuild schema="1.0.0">
+ <option name="KEEPGOING" abldOption="-keepgoing" description="Causes make to keepgoing on errors" enable="Y"/>
+ <option name="SAVESPACE" abldOption="-savespace" description="Causes the removal of intermediate files" enable="Y"/>
+ <option name="NO_DEBUG" abldOption="-no_debug" description="Causes the toolchain not to generate debug tables" enable="N"/>
+ <target name="WINS" abldTarget="wins" description="MSVC Compiler"/>
+ <target name="WINS_REL" abldTarget="wins urel" description="MSVC Compiler"/>
+ <target name="WINS_DEB" abldTarget="wins udeb" description="MSVC Compiler"/>
+ <target name="WINSCW" abldTarget="winscw" description="CodeWarrior Compiler"/>
+ <target name="WINSCW_REL" abldTarget="winscw urel" description="CodeWarrior Compiler"/>
+ <target name="WINSCW_DEB" abldTarget="winscw udeb" description="CodeWarrior Compiler"/>
+ <target name="TOOLS" abldTarget="tools" description="MSVC Compiler for Tools"/>
+ <target name="TOOLS_REL" abldTarget="tools rel" description="MSVC Compiler for Tools Release mode only"/>
+ <target name="TOOLS2" abldTarget="tools2" description="MinGW GCC Compiler for Tools"/>
+ <target name="TOOLS2_REL" abldTarget="tools2 rel" description="MinGW GCC Compiler for Tools Release mode only"/>
+ <target name="ARMV5" abldTarget="armv5" description="RVCT Compiler"/>
+ <target name="ARMV5_REL" abldTarget="armv5 urel" description="RVCT Compiler"/>
+ <target name="ARMV5_DEB" abldTarget="armv5 udeb" description="RVCT Compiler"/>
+ <target name="ARMV7" abldTarget="armv7" description="RVCT Compiler"/>
+ <target name="ARMV7_REL" abldTarget="armv7 urel" description="RVCT Compiler"/>
+ <target name="ARMV7_DEB" abldTarget="armv7 udeb" description="RVCT Compiler"/>
+ <target name="ARMV5SMP" abldTarget="armv5smp" description="RVCT Compiler for SMP"/>
+ <target name="ARMV5SMP_REL" abldTarget="armv5smp urel" description="RVCT Compiler for SMP"/>
+ <target name="ARMV5SMP_DEB" abldTarget="armv5smp udeb" description="RVCT Compiler for SMP"/>
+
+ <!-- Aditional Targets -->
+ <target name="CWTOOLS" abldTarget="cwtools" description="CodeWarrior Compiler for Tools"/> <!-- Not supported -->
+ <target name="CWTOOLS_REL" abldTarget="cwtools rel" description="CodeWarrior Compiler for Tools Release mode only"/> <!-- Not supported -->
+ <target name="GCCXML" abldTarget="gccxml" description="GCCXML for Code comparision tools"/>
+ <target name="GCCXML_REL" abldTarget="gccxml urel" description="GCCXML for Code comparision tools release mode only"/>
+
+ <targetList name="default_9.0" description="Main Targets for 9.0" target="WINSCW ARMV5"/>
+ <targetList name="default_9.0_rel" description="Main Targets for 9.0_rel" target="WINSCW_REL ARMV5_REL"/>
+ <targetList name="default_9.0_deb" description="Main Targets for 9.0_deb" target="WINSCW_DEB ARMV5_DEB"/>
+ <targetList name="tools" description="tools Targets" target="TOOLS"/>
+ <targetList name="tools_rel" description="tools Release Targets" target="TOOLS_REL"/>
+ <targetList name="tools2" description="tools Targets" target="TOOLS2"/>
+ <targetList name="tools2_rel" description="tools Release Targets" target="TOOLS2_REL"/>
+ <targetList name="gccxml" description="tools Targets" target="GCCXML"/>
+ <targetList name="gccxml_rel" description="tools Release Targets" target="GCCXML_REL"/>
+ <targetList name="armv5smp" description="Separate ARMV5 SMP target" target="ARMV5SMP"/>
+ <targetList name="armv5smp_rel" description="Separate ARMV5 SMP release target" target="ARMV5SMP_REL"/>
+ <targetList name="armv5smp_deb" description="Separate ARMV5 SMP debug target" target="ARMV5SMP_DEB"/>
+ <targetList name="default_9.0_armv7" description="Main targets and ARMV7 target" target="WINSCW ARMV5 ARMV7"/>
+ <targetList name="default_9.0_rel_armv7" description="Main targets and ARMV7 release target" target="WINSCW_REL ARMV5_REL ARMV7_REL"/>
+ <targetList name="default_9.0_deb_armv7" description="Main targets and ARMV7 debug target" target="WINSCW_DEB ARMV5_DEB ARMV7_DEB"/>
+
+
+ <list name="SYSTEMTEST_LIST" description="System Test Code">
+ <ref item="n:integtestltsy"/>
+ <ref item="n:systemtestos"/>
+ </list>
+ <list name="SYSTEMTEST_LIST_INTEGTESTSMP" description="System Test Code">
+ <ref item="n:integtestsmp"/>
+ </list>
+
+ <!-- 9.5 configuration -->
+
+ <configuration name="Custkit_9.5" description="9.5 Custkit build" filter="9.5,custkit">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="cedar/generic/tools/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="cedar/generic/tools/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_9.5" description="9.5 GT build" filter="9.5,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="cedar/generic/tools/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="cedar/generic/tools/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_9.5_ARMV5SMP" description="9.5 ARMV5SMP build" filter="9.5,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="armv5smp" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+ <configuration name="TV_9.5" description="9.5 Techview build" filter="9.5,techview">
+ <ref item="techview"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="SystemTest_9.5" description="9.5 System Test build" filter="9.5,systemtest">
+ <ref item="techview"/>
+ <task><specialInstructions name="Copy Systemtest Configuration" cwd="common/generic/SystemTest/Symbian/Group" command="copy 9.5\configuration.cfg %CleanSourceDir%\common\generic\SystemTest\Symbian\Group\"/></task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ </configuration>
+
+ <configuration name="GCCXML_9.5" description="9.5 GCCXML build" filter="9.5,gt,techview">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="gccxml" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="gccxml" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+
+ <!-- 9.6 configuration -->
+
+ <configuration name="Custkit_9.6" description="9.6 Custkit build" filter="9.6,custkit">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="cedar/generic/tools/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="cedar/generic/tools/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_9.6_ARMV5SMP" description="9.6 ARMV5SMP build" filter="9.6,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="armv5smp" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_9.6" description="9.6 GT build" filter="9.6,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="cedar/generic/tools/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="cedar/generic/tools/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="TV_9.6" description="9.6 Techview build" filter="9.6,techview">
+ <ref item="techview"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="SystemTest_9.6" description="9.6 System Test build" filter="9.6,systemtest">
+ <task><specialInstructions name="Copy Systemtest Configuration" cwd="common/generic/SystemTest/Symbian/Group" command="copy 9.6\configuration.cfg %CleanSourceDir%\common\generic\SystemTest\Symbian\Group\"/></task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ </configuration>
+
+ <configuration name="GCCXML_9.6" description="9.6 GCCXML build" filter="9.6,gt,techview">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="gccxml" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="gccxml" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+
+ <!-- tb92 configuration -->
+
+ <configuration name="Custkit_tb92" description="tb92 Custkit build" filter="tb92,custkit">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="cedar/generic/tools/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="cedar/generic/tools/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_tb92" description="tb92 GT build" filter="tb92,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="cedar/generic/tools/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="cedar/generic/tools/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_tb92_ARMV5SMP" description="tb92 ARMV5SMP build" filter="tb92,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="armv5smp" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+ <configuration name="TV_tb92" description="tb92 Techview build" filter="tb92,techview">
+ <ref item="techview"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="SystemTest_tb92" description="tb92 System Test build" filter="tb92,systemtest">
+ <ref item="techview"/>
+ <task><specialInstructions name="Copy Systemtest Configuration" cwd="common/generic/SystemTest/Symbian/Group" command="copy tb92\configuration.cfg %CleanSourceDir%\common\generic\SystemTest\Symbian\Group\"/></task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ </configuration>
+
+ <configuration name="GCCXML_tb92" description="tb92 GCCXML build" filter="tb92,gt,techview">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="gccxml" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="gccxml" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <!-- tb92sf configuration -->
+
+ <configuration name="Custkit_tb92sf" description="tb92sf Custkit build" filter="tb92sf,custkit">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_tb92sf" description="tb92sf GT build" filter="tb92sf,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_tb92sf_ARMV5SMP" description="tb92sf ARMV5SMP build" filter="tb92sf,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="armv5smp" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+ <configuration name="TV_tb92sf" description="tb92sf Techview build" filter="tb92sf,techview">
+ <ref item="techview"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="SystemTest_tb92sf" description="tb92sf System Test build" filter="tb92sf,systemtest">
+ <ref item="techview"/>
+ <task><specialInstructions name="Copy Systemtest Configuration" cwd="app/techview/sysvalidation/systemtestos/Group" command="copy tb92sf\configuration.cfg %CleanSourceDir%\app\techview\sysvalidation\systemtestos\Group\"/></task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ </configuration>
+
+ <configuration name="GCCXML_tb92sf" description="tb92sf GCCXML build" filter="tb92sf,gt,techview">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="gccxml" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="gccxml" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+<!-- tb101sf configuration -->
+
+ <configuration name="Custkit_tb101sf" description="tb101sf Custkit build" filter="tb101sf,custkit">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_tb101sf" description="tb101sf GT build" filter="tb101sf,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_tb101sf_ARMV5SMP" description="tb101sf ARMV5SMP build" filter="tb101sf,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="armv5smp" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+ <configuration name="TV_tb101sf" description="tb101sf Techview build" filter="tb101sf,techview">
+ <ref item="techview"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="SystemTest_tb101sf" description="tb101sf System Test build" filter="tb101sf,systemtest">
+ <ref item="techview"/>
+ <task><specialInstructions name="Copy Systemtest Configuration" cwd="app/techview/sysvalidation/systemtestos/Group" command="copy tb101sf\configuration.cfg %CleanSourceDir%\app\techview\sysvalidation\systemtestos\Group\"/></task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ </configuration>
+
+ <configuration name="GCCXML_tb101sf" description="tb101sf GCCXML build" filter="tb101sf,gt,techview">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="gccxml" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="gccxml" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+
+<!-- Future configuration -->
+
+ <configuration name="Custkit_Future" description="Future Custkit build" filter="Future,custkit">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_Future" description="Future GT build" filter="Future,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><specialInstructions name="BootStrap1" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="setupprj.bat secure"/></task>
+ <task><specialInstructions name="BootStrap2" cwd="os/buildtools/sbsv1_os/e32toolp/group" command="bld.bat rel"/></task>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="tools" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld final" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld makefile" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld library" targetList="tools2" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld target" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="tools2_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="GT_Future_ARMV5SMP" description="Future ARMV5SMP build" filter="Future,gt">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="armv5smp" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="armv5smp" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="armv5smp_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="armv5smp" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+ <configuration name="TV_Future" description="Future Techview build" filter="Future,techview">
+ <ref item="techview"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="default_9.0" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="default_9.0" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="default_9.0_deb" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="default_9.0" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+
+ <configuration name="SystemTest_Future" description="Future System Test build" filter="Future,systemtest">
+ <ref item="techview"/>
+ <task><specialInstructions name="Copy Systemtest Configuration" cwd="app/techview/sysvalidation/systemtestos/Group" command="copy future\configuration.cfg %CleanSourceDir%\app\techview\sysvalidation\systemtestos\Group\"/></task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="bldmake bldfiles" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld export" unitParallel="Y"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld export -what" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld export -check" unitParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld test build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld test -what build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ <task>
+ <listRef list="SYSTEMTEST_LIST_INTEGTESTSMP"/>
+ <buildLayer command="abld test -check build" targetList="default_9.0" unitParallel="N" targetParallel="N"/>
+ </task>
+ </configuration>
+
+ <configuration name="GCCXML_Future" description="Future GCCXML build" filter="Future,gt,techview">
+ <ref item="os"/>
+ <ref item="mw"/>
+ <ref item="app"/>
+ <task><buildLayer command="bldmake bldfiles" unitParallel="Y"/></task>
+ <task><buildLayer command="abld makefile" targetList="gccxml" unitParallel="Y" targetParallel="N"/></task>
+ <task><buildLayer command="abld resource" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld library" targetList="gccxml" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld final" targetList="gccxml_rel" unitParallel="N" targetParallel="N"/></task>
+ <task><buildLayer command="abld -what export" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -what target" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ <task><buildLayer command="abld help" unitParallel="Y"/></task>
+ <task><buildLayer command="abld -check build" targetList="gccxml_rel" unitParallel="Y" targetParallel="Y"/></task>
+ </configuration>
+</SystemBuild>
Binary file deprecated/buildtools/buildsystemtools/docs/Build_Client_Server_Protocol_Specification_v0.2.doc has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/docs/scanlog.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,127 @@
+SCANLOG.PL
+17/02/2003
+
+1. Introduction
+
+scanlog.pl is a utility for summarising a build log. It reports the time
+taken for each phase of the build, and the numbers of fatal errors and warnings.
+For each component, the numbers of warnings and errors are accumulated across
+all phases and reported by component.
+
+
+2. Log file format
+
+scanlog expects the logfiles to have a particular structure for identifying
+the phases and components. It will tolerate log files which don't fully conform
+to this structure, but the reporting will have less detail.
+
+The expected structure is:
+
+===-------------------------------------------------
+=== <command for the phase>
+===-------------------------------------------------
+=== <phase> started Fri Feb 7 12:47:28 2003.
+=== <phase> == <component1>
+... build output
+=== <phase> == <component2>
+... build output
+=== <phase> == <componentN>
+... build output
+=== <phase> finished Fri Feb 7 13:13:41 2003.
+
+<phase> should be a single word without spaces, for example "target".
+The timestamps are optional and not processed by the current version of scanlog,
+though they are being processed by other tools.
+
+For this example, scanlog would summarise this part of the log as
+
+<command for the phase> 00:26:13 0 0
+
+assuming that there are no errors or warnings detected.
+
+
+3. Errors and Warnings
+
+Scanlog uses a set of regular expressions to identify lines in the log file
+which are usually associated with errors or warnings, for example:
+
+ /make(\[\d+\])?: \*\*\* / -- e.g. make[2]: ***
+
+which is the way that GNU make reports a failure.
+
+This rather simple approach can overstate the number of errors, particularly
+given the nested makefile approach used by the Symbian build tools. It is
+counting the symptoms of a failure rather than necessarily identifying the
+root cause.
+
+Errors are warnings are summarised according to the build phase (described above)
+and also accumulated across build phases and reported by component. If scanlog
+is invoked with the additional -V argument, the lines counted as warnings and
+errors are reported for each component, to aid problem diagnosis.
+
+
+4. Things not built...
+
+Scanlog also looks for lines which begin with "MISSING: ", which are normally
+produced by the output of "abld -check build". The missing files are listed and
+marked with the component which reported them, serving as an additional view of
+what has actually failed if fatal errors are reported.
+
+
+5. List of patterns
+
+Scanlog originally just looked for errors and warnings arising from the structure
+of the Symbian build, but has increasingly gained patterns to detect output from
+specific tools such as the ARM RealView compiler. This contributes to the "over
+counting" of errors, but provides more useful "scanlog -V" output.
+
+Scanlog uses these patterns to identify errors:
+
+ /^MISSING COMPONENT (.*):.* find (.*)$/
+ /(ABLD|BLDMAKE) ERROR:/
+ /FATAL ERROR\(S\):/
+ /fatal error U1073: .* make '(.*)'/
+ /fatal error U1077/
+ /warning U4010/
+ /make(\[\d+\])?: \*\*\* /
+ /make(\[\d+\])?: .* not remade /
+ /"(.*)", line (\d+): (Error: +(.\d+.*?):.*)$/
+ /error: ((Internal fault):.*)$/
+ /Exception: STATUS_ACCESS_VIOLATION/
+ /target .*? given more than once in the same rule/
+ /^ERROR: /
+
+The "warning U4010" pattern catches lines such as
+
+ NMAKE : warning U4010: 'FINALCOPYFXCM' : build failed; /K specified, continuing ...
+
+which would arise from the use of nmake /k in situations which would otherwise
+be fatal errors.
+
+
+Scanlog uses these patterns to identify warnings:
+
+ /Warning: Unmatched/i
+ /^BLDMAKE WARNING:/
+ /WARNING\(S\)/
+ /^WARNING: /
+ /\(\d+\) : warning C/
+ /LINK : warning/
+ /:\d+: warning:/
+ /"(.*)", line (\d+): (Warning: +(.\d+.*?):.*)$/
+ /^MAKEDEF WARNING:/
+ /ERROR: bad relocation:/
+ /mwldsym\d+.exe: warning:/
+ /^(\d+) warning/
+ /mwld.exe:/
+ /^Command line warning/
+ /Usage Warning:/
+
+The "ERROR: bad relocation" pattern catches messages from petran which are actually
+just warnings, for example:
+
+ ERROR: bad relocation: [00004f60] = 00000f68
+
+Petran follows a heuristic in these cases, and to date there has never been a
+runtime error attributed to this warning.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/exclude.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,87 @@
+# This file contains the list of components which are built internally at Symbian but cannot be built as part of a licensee build
+
+# -------------------- Removed components:
+
+# The following components have been removed from the build configuration because they depend on source code
+# which Symbian may not distribute freely. If a licensee has this source code, they may wish to restore these
+# components to the build configuration.
+
+
+# Source code is entirely Category B (not Symbian's, or not licensed for redistribution by Symbian)
+MSComp NETWORKING\MSComp\GROUP
+STACCOMP NETWORKING\STACCOMP\GROUP
+STATAPI TESTDRIVER\DEVICE\STATAPI\GROUP
+WAPSTACK WAP-STACK\WAPSTACK\GROUP
+Gprsbtt telephony\gprsbtt\group
+
+# Source code is almost entirely Category B
+STAT_DESKTOP os\buildtools\toolsandutils\statdesktop\group
+
+# Depends on ARM's proprietary Neon250 PCI VGA card driver
+INTEGRATORAP BASE\INTEGRATORAP
+
+# Removed because it's very large and only contains freely distributable things like java, perl, zip, etc.
+REDISTRIBUTION TOOLS\REDISTRIBUTION
+
+# Documentation - to be built separately if licensee modifications warrant it
+DOC_SOURCE DEVELOPERLIBRARY\DOC_SOURCE
+SECURITYSUPPLEMENT DEVELOPERLIBRARY\SECURITYSUPPLEMENT\DOC_SOURCE
+CTSDOC CTS\CTSDOC
+
+# -------------------- End of removed components
+
+# -------------------- Components built internally only:
+
+# SDK Engineering Tools
+RUNPERL TOOLS\SDK_ENG\RUNPERL\GROUP
+BUILD-TOOLS TOOLS\SDK_ENG\BUILD-TOOLS\GROUP
+JAVALIBRARY TOOLS\SDK_ENG\JAVALIBRARY\GROUP
+ASSERTION TOOLS\SDK_ENG\ASSERTION\GROUP
+DFRDOBJECT TOOLS\SDK_ENG\DFRDOBJECT\GROUP
+ENUM TOOLS\SDK_ENG\ENUM\GROUP
+LOGGER TOOLS\SDK_ENG\LOGGER\GROUP
+FILESYS TOOLS\SDK_ENG\FILESYS\GROUP
+ENVVAR TOOLS\SDK_ENG\ENVVAR\GROUP
+INSTALLUTILS TOOLS\SDK_ENG\INSTALLUTILS\GROUP
+MNEMONICFIX TOOLS\SDK_ENG\MNEMONICFIX\GROUP
+PATHBROWSER TOOLS\SDK_ENG\PATHBROWSER\GROUP
+SHELLEXEC TOOLS\SDK_ENG\SHELLEXEC\GROUP
+SWINGWORKER TOOLS\SDK_ENG\SWINGWORKER\GROUP
+TESTCASERUNNER TOOLS\SDK_ENG\TESTCASERUNNER\GROUP
+TOOLBARPANEL TOOLS\SDK_ENG\TOOLBARPANEL\GROUP
+JAVAHELP TOOLS\SDK_ENG\JAVAHELP\GROUP
+JCOMPS_I18N TOOLS\SDK_ENG\JCOMPS_I18N\GROUP
+LANGCONFIG TOOLS\SDK_ENG\LANGCONFIG\GROUP
+MBMCODEC TOOLS\SDK_ENG\MBMCODEC\GROUP
+SDKINFO TOOLS\SDK_ENG\SDKINFO\GROUP
+JADE TOOLS\SDK_ENG\JADE\GROUP
+APPBUILD TOOLS\SDK_ENG\APPBUILD\GROUP
+AIFAPP TOOLS\SDK_ENG\AIFAPP\GROUP
+AIFBUILDER TOOLS\SDK_ENG\AIFBUILDER\GROUP
+CSHLPCMP_GUI TOOLS\SDK_ENG\CSHLPCMP_GUI\GROUP
+MEAD TOOLS\SDK_ENG\MEAD\GROUP
+MENUBUILDER TOOLS\SDK_ENG\MENUBUILDER\GROUP
+SISAR TOOLS\SDK_ENG\SISAR\GROUP
+SDKPKG-MANAGER TOOLS\SDK_ENG\SDKPKG-MANAGER\GROUP
+SDKPKG-TOOLS TOOLS\SDK_ENG\SDKPKG-TOOLS\GROUP
+EMULATOR_LAUNCHER TOOLS\SDK_ENG\EMULATOR_LAUNCHER\GROUP
+PKGMGRGUI TOOLS\SDK_ENG\PKGMGRGUI\GROUP
+LAUNCH TOOLS\SDK_ENG\LAUNCH\GROUP
+TOOLS_STUBS TOOLS\SDK_ENG\TOOLS_STUBS\GROUP
+AIFBUILDERENGINEPLUGIN TOOLS\SDK_ENG\AIFBUILDERENGINEPLUGIN\GROUP
+RCOMPPLUGIN TOOLS\SDK_ENG\RCOMPPLUGIN\GROUP
+DOCPLUGINTOOL TOOLS\SDK_ENG\DOCPLUGINTOOL\GROUP
+CWPLUGINS TOOLS\SDK_ENG\CWPLUGINS\GROUP
+BSPBUILDER TOOLS\BSPBUILDER\GROUP
+
+#Devkit tools
+#note KitSetupApp has been moved from the CustKtis section to the Dev Kit section
+# as they look after it
+KitSetupApp TOOLS\DevKits\KitSetupApp\group
+
+#CustKit tools
+#note these components must be built after the Devkit components
+kit_builder TOOLS\Custkits\kitbuilder\group
+ProductInstaller TOOLS\Custkits\ProductInstaller\group
+
+# -------------------- End of Components built internally only:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/genbuild/genbuild.bat Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,28 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@echo off
+
+
+perl -w -S genbuild.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/genbuild/genbuild.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,675 @@
+# 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:
+# Given a baseline list of components, generate scripts to do the build
+#
+#
+
+use strict;
+
+if (@ARGV<1 || ! -e $ARGV[0])
+ {
+#........1.........2.........3.........4.........5.........6.........7.....
+ print <<USAGE_EOF;
+
+Usage:
+ genbuild complist1 [complist2 ...] -- generate build scripts
+
+Given a list of components, generate the scripts necessary to
+build them all using the automated build system. The scripts
+will be named after the component list, so
+
+ genbuild \\batch\\build\\somename.txt
+
+will generate the following scripts:
+
+ somename_bldfiles.cmd - run "bldmake bldfiles" on every component
+ somename_export.cmd - run "abld export" on every component
+ somename_makefile.cmd - run "abld makefile" on every component
+ somename_library.cmd - run "abld library" on every component
+ somename_resource.cmd - run "abld resource" on every component
+ somename_target.cmd - run "abld target" on every component
+ somename_final.cmd - run "abld final" on every component
+ somename_check.cmd - run "abld -check build" on every component
+ somename_what.cmd - run "abld -what build" on every component
+ somename_clean.cmd - run "abld clean" on every component
+ somename_reallyclean.cmd - run "abld reallyclean" on every component
+
+ somename_build.cmd - use appropriate combination of above scripts
+ somename_pbuild.cmd - alternative build script for multi-machine builds
+
+The somename_build.cmd script is controlled by options specified in the
+list of components, and calls the other scripts in the correct sequence.
+
+USAGE_EOF
+ exit 1;
+ }
+
+# Check for EPOCROOT
+# It's not used directly by GENBUILD, but this is a good early stage at which
+# to discover that it hasn't been set...
+
+my $epocroot = $ENV{EPOCROOT};
+die "ERROR: Must set the EPOCROOT environment variable\n" if (!defined($epocroot));
+$epocroot =~ s-/-\\-go; # for those working with UNIX shells
+die "ERROR: EPOCROOT must not include a drive letter\n" if ($epocroot =~ /^.:/);
+die "ERROR: EPOCROOT must be an absolute path without a drive letter\n" if ($epocroot !~ /^\\/);
+die "ERROR: EPOCROOT must not be a UNC path\n" if ($epocroot =~ /^\\\\/);
+die "ERROR: EPOCROOT must end with a backslash\n" if ($epocroot !~ /\\$/);
+die "ERROR: EPOCROOT must specify an existing directory\n" if (!-d $epocroot);
+
+my $basename = $ARGV[0];
+if ($basename =~ /^.*\\([^\\]+)$/)
+ {
+ $basename = $1; # lose the leading path, if any
+ }
+if ($basename =~ /^([^.]+)\..*$/)
+ {
+ $basename = $1; # lose the trailing extensions, if any
+ }
+
+
+my @components;
+my %arm_assplist;
+my $savespace="";
+my $keepgoing="";
+my $build_tools=0;
+my $build_cwtools=0;
+my $build_winc=0;
+my $build_wins=0;
+my $build_arm4=0;
+my $build_armi=0;
+my $build_thumb=0;
+my $build_arm3=0;
+my $build_armv5=0;
+my $epoc_only=0;
+my $build_winscw=0;
+my $backwards_compatible_defaults = 1;
+
+# Read from all supplied argument files, not just the first
+# Supplied options apply to all components listed.
+
+while (<>)
+ {
+ s/\s*#.*$//;
+ s/^\s*//;
+ my $line = lc $_;
+ if ($line =~ /^$/)
+ {
+ next;
+ }
+
+ if ($line =~ /<option (\w+)\s*(.*)>/)
+ {
+ my $option = $1;
+ my $optargs= $2;
+ if ($option eq "savespace")
+ {
+ $savespace = "-savespace";
+ next;
+ }
+ if ($option eq "keepgoing")
+ {
+ $keepgoing = "-keepgoing";
+ next;
+ }
+ if ($option eq "tools")
+ {
+ $build_tools = 1;
+ next;
+ }
+ if ($option eq "cwtools")
+ {
+ $build_cwtools = 1;
+ next;
+ }
+ if ($option eq "winc")
+ {
+ $build_winc = 1;
+ next;
+ }
+ if ($option eq "wins")
+ {
+ $build_wins = 1;
+ $backwards_compatible_defaults = 0; # explicit <option wins>
+ next;
+ }
+ if ($option eq "epoconly")
+ {
+ $build_winc = 0;
+ $epoc_only = 1;
+ next;
+ }
+ if ($option eq "arm4")
+ {
+ $build_arm4 = 1;
+ $backwards_compatible_defaults = 0; # explicit <option arm4>
+ next;
+ }
+ if ($option eq "armi")
+ {
+ $build_armi = 1;
+ $backwards_compatible_defaults = 0; # explicit <option armi>
+ next;
+ }
+ if ($option eq "thumb")
+ {
+ $build_thumb = 1;
+ next;
+ }
+ if ($option eq "arm3")
+ {
+ $build_arm3 = 1;
+ next;
+ }
+ if ($option eq "armv5")
+ {
+ $build_armv5 = 1;
+ $backwards_compatible_defaults = 0; # explicit <option armv5>
+ next;
+ }
+
+ if ($option eq "winscw")
+ {
+ $build_winscw = 1;
+ next;
+ }
+
+ if ($option eq "arm_assp")
+ {
+ $arm_assplist{$optargs} = 1;
+ next;
+ }
+
+
+ print "Option $1 not yet implemented\n";
+ next;
+ }
+ if ($line =~ /^([^<]\S+)\s+(\S+)/)
+ {
+ if (!-e "$2\\bld.inf")
+ {
+ print STDERR "MISSING COMPONENT $1: can't find $2\\bld.inf\n";
+ next;
+ }
+ }
+
+ push @components, $line;
+ }
+
+if ($backwards_compatible_defaults)
+ {
+ # Older versions automatically built these targets, without <option xxx>
+ $build_wins = 1;
+ $build_arm4 = 1;
+ $build_armi = 1;
+ }
+
+my %specials = (
+ "bldfiles e32toolp" =>
+ "cd tools\\e32toolp\\group\n".
+ "call setupprj\n".
+ "call bld rel\n"
+ );
+
+print_batch("bldfiles", "cd %2\n", "call bldmake bldfiles $keepgoing");
+print_batch("export", "cd %2\n", "call abld export $keepgoing");
+print_batch("makefile", "cd %2\n", "call abld makefile $keepgoing %arg1% %arg2% %arg3%");
+print_batch("library", "cd %2\n", "call abld library $keepgoing %arg1% %arg2% %arg3%");
+print_batch("resource", "cd %2\n", "call abld resource $keepgoing %arg1% %arg2% %arg3%");
+print_batch("target", "cd %2\n", "call abld target $keepgoing $savespace %arg1% %arg2% %arg3%");
+print_batch("final", "cd %2\n", "call abld final $keepgoing %arg1% %arg2% %arg3%");
+print_batch("clean", "cd %2\n", "call abld clean $keepgoing %arg1% %arg2% %arg3%");
+print_batch("reallyclean", "cd %2\n", "call abld reallyclean $keepgoing %arg1% %arg2% %arg3%");
+print_batch("check", "cd %2\n", "call abld -check build %arg1% %arg2% %arg3%");
+print_batch("what", "cd %2\n", "call abld -what build %arg1% %arg2% %arg3%");
+
+print_control("build");
+print_pcontrol("pbuild");
+
+#--------------------------------------------------------------------
+
+sub print_batch
+ {
+ my ($label, @actions) = @_;
+
+ my $scriptbase = $basename."_".$label;
+ open FILE, ">$scriptbase.cmd" or die "can't create $scriptbase.cmd";
+ print FILE <<HEAD_EOF;
+\@echo off
+setlocal
+echo ===-------------------------------------------------
+echo === $scriptbase %1 %2 %3
+echo ===-------------------------------------------------
+perl -e "\$time=localtime; print '=== ',$label,' started ', \$time"
+echo .
+set arg1=%1
+set arg2=%2
+set arg3=%3
+goto :doit
+
+:$label
+echo === $label == %3
+perl -e "print '===+ ',time"
+echo .
+setlocal
+
+@actions
+
+endlocal
+goto :EOF
+
+:doit
+
+HEAD_EOF
+
+ my $line;
+ foreach $line (@components)
+ {
+ if ($line =~ /<special (\w+)\s+(\w+)(.*)>/)
+ {
+ if ($1 eq $label)
+ {
+ print FILE "REM special $1 $2\n";
+ print FILE "echo === $label == $2\n";
+ print FILE "setlocal\n\n";
+ print FILE $specials{"$1 $2"};
+ print FILE "\nendlocal\n\n";
+ }
+ next;
+ }
+#--------------------------------------------------------------------
+ my @MyList;
+ my $tempvar;
+
+ @MyList = split(/\s+/,$line);
+ $tempvar= lc $MyList[$#MyList];
+ $tempvar =~ s/\\group//;
+ push @MyList, $tempvar;
+ print FILE "call :$label\t$MyList[0]\t$MyList[1]\t$MyList[2]\n";
+#--------------------------------------------------------------------
+ }
+
+ print FILE <<TAIL_EOF;
+
+perl -e "\$time=localtime; print '=== ',$label,' finished ', \$time"
+echo .
+perl -e "print '===+ ',time"
+echo .
+
+TAIL_EOF
+
+ close FILE;
+ print "Created $scriptbase.cmd\n";
+ }
+
+
+#--------------------------------------------------------------------
+# Overall build
+
+sub print_control
+ {
+ my ($label) = @_;
+
+ my $scriptbase = $basename."_".$label;
+ open FILE, ">$scriptbase.cmd" or die "can't create $scriptbase.cmd";
+
+ print FILE <<HEAD_EOF;
+\@echo off
+setlocal
+perl -e "\$time=localtime; print '=== ',$scriptbase,' started ', \$time"
+echo .
+
+HEAD_EOF
+
+ #--------------------------------------------------------
+ # Generic stuff first
+
+ print FILE "call ${basename}_bldfiles\n";
+ print FILE "call ${basename}_export\n";
+ print FILE "\n";
+
+ #--------------------------------------------------------
+ # TOOLS, if any
+
+ if ($build_tools)
+ {
+ print FILE "call ${basename}_makefile tools\n";
+ print FILE "call ${basename}_library tools\n";
+ print FILE "call ${basename}_target tools rel\n";
+ print FILE "call ${basename}_what tools rel\n";
+ print FILE "call ${basename}_check tools rel\n\n";
+ }
+
+ #--------------------------------------------------------
+ # CWTOOLS, if any
+
+ if ($build_cwtools)
+ {
+ print FILE "call ${basename}_makefile cwtools\n";
+ print FILE "call ${basename}_library cwtools\n";
+ print FILE "call ${basename}_target cwtools rel\n";
+ print FILE "call ${basename}_what cwtools rel\n";
+ print FILE "call ${basename}_check cwtools rel\n\n";
+ }
+
+ #--------------------------------------------------------
+ # Emulator things, WINS and WINC
+
+ unless ($epoc_only)
+ {
+ if ($build_winc)
+ {
+ print FILE "call ${basename}_makefile winc\n";
+ # No resource step for WINC
+ print FILE "call ${basename}_library winc\n";
+ print FILE "call ${basename}_target winc\n";
+ print FILE "call ${basename}_what winc\n";
+ print FILE "call ${basename}_check winc\n";
+ print FILE "\n";
+ }
+
+ if ($build_wins)
+ {
+ print FILE "call ${basename}_makefile wins\n";
+ print FILE "call ${basename}_resource wins\n";
+ print FILE "call ${basename}_library wins\n";
+ print FILE "call ${basename}_target wins\n";
+ print FILE "\n";
+ }
+
+ if ($build_winscw)
+ {
+ print FILE "call ${basename}_makefile winscw\n";
+ print FILE "call ${basename}_resource winscw\n";
+ print FILE "call ${basename}_library winscw\n";
+ print FILE "call ${basename}_target winscw\n";
+ print FILE "\n";
+ }
+
+ if ($build_wins)
+ {
+ print FILE "call ${basename}_final wins\n";
+ print FILE "call ${basename}_what wins\n";
+ print FILE "call ${basename}_check wins\n";
+ print FILE "\n";
+ }
+
+ if ($build_winscw)
+ {
+ print FILE "call ${basename}_final winscw\n";
+ print FILE "call ${basename}_what winscw\n";
+ print FILE "call ${basename}_check winscw\n";
+ print FILE "\n";
+ }
+ }
+
+ #--------------------------------------------------------
+ # ARM things
+
+ # Generic build(s) first, followed by the ASSPs (if any)
+ #
+
+ my $name;
+ my $stage;
+ my @armthings = ();
+ if ($build_arm4)
+ {
+ push @armthings, "arm4";
+ }
+ if ($build_armi)
+ {
+ push @armthings, "armi";
+ }
+ if ($build_thumb)
+ {
+ push @armthings, "thumb";
+ }
+ if ($build_arm3)
+ {
+ push @armthings, "arm3";
+ }
+ if ($build_armv5)
+ {
+ push @armthings, "armv5";
+ }
+ push @armthings, (sort keys %arm_assplist);
+
+ foreach $stage ("makefile", "resource", "library", "target", "final", "what", "check")
+ {
+ foreach $name (@armthings)
+ {
+ printf FILE "call ${basename}_%-8s $name\n", $stage;
+ }
+ print FILE "\n";
+ }
+
+ print FILE <<TAIL_EOF;
+
+perl -e "\$time=localtime; print '=== ',$scriptbase,' finished ', \$time"
+echo .
+
+TAIL_EOF
+
+ close FILE;
+ print "Created $scriptbase.cmd\n";
+ }
+
+
+#--------------------------------------------------------------------
+# Overall build, subdivided for multi-machine building
+
+sub print_pcontrol
+ {
+ my ($label) = @_;
+
+ my $scriptbase = $basename."_".$label;
+ open FILE, ">$scriptbase.cmd" or die "can't create $scriptbase.cmd";
+
+ print FILE <<HEAD_EOF;
+\@echo off
+setlocal
+perl -e "\$time=localtime; print '=== ',$scriptbase,' started ', \$time"
+echo .
+
+goto build_%1
+
+HEAD_EOF
+
+ #========================================================
+ # Getting Ready
+ #
+ # Building tools, include files, makefiles, resources
+ # and libraries
+ #
+
+ print FILE ":build_libs\n";
+ print FILE "\n";
+
+ #--------------------------------------------------------
+ # Generic stuff first
+
+ print FILE "call ${basename}_bldfiles\n";
+ print FILE "call ${basename}_export\n";
+ print FILE "\n";
+
+ #--------------------------------------------------------
+ # TOOLS, if any
+
+ if ($build_tools)
+ {
+ print FILE "call ${basename}_makefile tools\n";
+ print FILE "call ${basename}_library tools\n";
+ print FILE "call ${basename}_target tools rel\n";
+ print FILE "call ${basename}_what tools rel\n";
+ print FILE "call ${basename}_check tools rel\n\n";
+ }
+
+ #--------------------------------------------------------
+ # CWTOOLS, if any
+
+ if ($build_cwtools)
+ {
+ print FILE "call ${basename}_makefile cwtools\n";
+ print FILE "call ${basename}_library cwtools\n";
+ print FILE "call ${basename}_target cwtools rel\n";
+ print FILE "call ${basename}_what cwtools rel\n";
+ print FILE "call ${basename}_check cwtools rel\n\n";
+ }
+
+ #--------------------------------------------------------
+ # Emulator things, WINS and WINC, up to resources
+
+ if ($build_winc)
+ {
+ print FILE "call ${basename}_makefile winc\n";
+ print FILE "call ${basename}_library winc\n";
+ print FILE "call ${basename}_target winc\n";
+ print FILE "call ${basename}_what winc\n";
+ print FILE "call ${basename}_check winc\n";
+ print FILE "\n";
+ }
+
+ if ($build_wins)
+ {
+ print FILE "call ${basename}_makefile wins\n";
+ print FILE "call ${basename}_resource wins\n";
+ print FILE "call ${basename}_library wins\n";
+ print FILE "\n";
+ }
+
+ #--------------------------------------------------------
+ # ARM things
+
+ # Generic build(s) first, followed by the ASSPs (if any)
+ #
+
+ my $name;
+ my $stage;
+ my @epocthings = ();
+ if ($build_arm4)
+ {
+ push @epocthings, "arm4";
+ }
+ if ($build_armi)
+ {
+ push @epocthings, "armi";
+ }
+ if ($build_thumb)
+ {
+ push @epocthings, "thumb";
+ }
+
+ if ($build_arm3)
+ {
+ push @epocthings, "arm3";
+ }
+ if ($build_armv5)
+ {
+ push @epocthings, "armv5";
+ }
+
+ push @epocthings, (sort keys %arm_assplist);
+
+ # For all EPOC things...
+
+ foreach $stage ("makefile", "resource", "library")
+ {
+ foreach $name (@epocthings)
+ {
+ printf FILE "call ${basename}_%-8s $name\n", $stage;
+ }
+ if ($build_winscw)
+ {
+ printf FILE "call ${basename}_%-8s winscw\n", $stage;
+ }
+ print FILE "\n";
+ }
+
+ print FILE "goto :EOF\n";
+ print FILE "\n";
+
+ #========================================================
+ # Completing the Emulator
+ #
+
+ print FILE ":build_wins\n";
+ print FILE "\n";
+
+ print FILE "call ${basename}_bldfiles\n";
+ print FILE "call ${basename}_target wins\n";
+ print FILE "goto :EOF\n";
+ print FILE "\n";
+
+ print FILE ":build_wins_final\n";
+ print FILE "\n";
+
+ print FILE "call ${basename}_final wins\n";
+ print FILE "call ${basename}_what wins\n";
+ print FILE "call ${basename}_check wins\n";
+ print FILE "goto :EOF\n";
+ print FILE "\n";
+
+ #========================================================
+ if ($build_winscw){
+ # Completing the Emulator using CodeWarrior
+ #
+
+ print FILE ":build_winscw\n";
+ print FILE "\n";
+
+ print FILE "call ${basename}_bldfiles\n";
+ print FILE "call ${basename}_target winscw\n";
+ print FILE "goto :EOF\n";
+ print FILE "\n";
+
+ print FILE ":build_winscw_final\n";
+ print FILE "\n";
+
+
+ print FILE "call ${basename}_final winscw\n";
+ print FILE "call ${basename}_what winscw\n";
+ print FILE "call ${basename}_check winscw\n";
+ print FILE "goto :EOF\n";
+ print FILE "\n";
+ }
+ #========================================================
+ # Completing the ARM targets
+ #
+
+ foreach $name (@epocthings)
+ {
+ print FILE ":build_$name\n";
+ print FILE "\n";
+
+ print FILE "call ${basename}_bldfiles\n";
+ foreach $stage ("target", "final", "what", "check")
+ {
+ printf FILE "call ${basename}_%-8s $name\n", $stage;
+ }
+ print FILE "goto :EOF\n";
+ print FILE "\n";
+ }
+
+ print FILE <<TAIL_EOF;
+
+perl -e "\$time=localtime; print '=== ',$scriptbase,' finished ', \$time"
+echo .
+
+TAIL_EOF
+
+ close FILE;
+ print "Created $scriptbase.cmd\n";
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/genxml.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,238 @@
+# 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:
+# Script to Generate the XML command file from the xml files
+#
+#
+
+use strict;
+use FindBin; # for FindBin::Bin
+use Getopt::Long;
+use File::Copy;
+
+use lib $FindBin::Bin;
+use lib "$FindBin::Bin/lib";
+
+# Process the commandline
+my ($iDataSource, $iDataOutput, $iLogFile, $iSourceDir, $iReallyClean,
+ $iClean, $iXmlSource, $iConfName, $iMergedXml, $iValidate,
+ $iTextOutput, $iCBROutput, $iFilter, $iEffectiveDir) = ProcessCommandLine();
+
+if (scalar(@$iXmlSource))
+{
+ use GenXml;
+ &GenXml::Start($iXmlSource, $iDataOutput, $iLogFile, $iSourceDir,
+ $iConfName, $iMergedXml, $iValidate, $iTextOutput, $iCBROutput, $iFilter, $iEffectiveDir);
+} else {
+ use GenBuild;
+ # Start the generation of the XML
+ print "Warning old .txt file input is being used\n";
+ &GenBuild::Start($iDataSource, $iDataOutput, $iLogFile, $iSourceDir, $iReallyClean, $iClean);
+}
+
+
+# ProcessCommandLine
+#
+# Inputs
+#
+# Outputs
+# @iDataSource array of multiple (txt file(s) to process)
+# $iDataOutput (XML file to generate)
+# $iLogFile (Log file to put processing errors)
+# $iSourceDir (Location of Source)
+# $iReallyClean (script to run the "abld reallyclean" command)
+# $iClean (script to run the "abld clean" command)
+# @iXmlSource array of multiple (XML file(s) to process)
+# $iConfName (Name of configuration to generate)
+# $iMergedXml - Hidden option to save the output of the merging xml process for debug use
+# $iValidate (Just validate the input)
+# $iText (txt file to generate)
+# $iFilter (filter to apply before generating merged XML file)
+# $iEffectiveDir (location at which source will be used)
+#
+# Description
+# This function processes the commandline
+
+sub ProcessCommandLine {
+ my ($iHelp, $iPort, @iDataSource, $iLogFile, $iSourceDir, $iReallyClean, $iClean,
+ @iXmlSource, $iConfName, $iMergedXml, $iValidate, $iTextOutput, $iCBROutput,
+ $iFilter, $iEffectiveDir);
+ GetOptions(
+ 'h' => \$iHelp,
+ 'd=s@' =>\@iDataSource,
+ 'o=s' => \$iDataOutput,
+ 'l=s' => \$iLogFile,
+ 's=s' => \$iSourceDir,
+ 'e=s' => \$iEffectiveDir,
+ 'r=s' => \$iReallyClean,
+ 'c=s' => \$iClean, # or $iCBROutput in XML input mode
+ 'x=s@' =>\@iXmlSource,
+ 'n=s' => \$iConfName,
+ 'm=s' => \$iMergedXml,
+ 'v' =>\$iValidate,
+ 't=s' => \$iTextOutput,
+ 'f=s' => \$iFilter);
+
+ Usage() if ($iHelp);
+
+ Usage("Must specify the root of the source tree with -s") if (!defined $iSourceDir);
+ Usage("Must specify at least one input file") if ((!@iDataSource) && (!@iXmlSource));
+ Usage("$iSourceDir is not a directory") if (!-d $iSourceDir);
+
+ if (scalar @iXmlSource)
+ {
+ # Validation of options for XML input
+
+ Usage("Can't mix -d and -x") if (scalar @iDataSource);
+
+ $iCBROutput = $iClean; # deal with ambiguity in -c option
+ $iClean = "";
+
+ if ((!defined $iMergedXml) && (!defined $iDataOutput)
+ && (!defined $iTextOutput) && (!defined $iCBROutput))
+ {
+ Usage("Must specify at least one output file") if (!defined $iValidate);
+ }
+ else
+ {
+ Usage("Can't specify output files with -v") if (defined $iValidate);
+ }
+ if (defined $iDataOutput || defined $iTextOutput)
+ {
+ Usage("Must specify configuration for XML or list output") if (!defined $iConfName);
+ }
+ Usage("Can't specify reallyclean files with -x") if (defined $iReallyClean);
+
+ $iEffectiveDir = $iSourceDir if (!defined $iEffectiveDir);
+ }
+ else
+ {
+ # Validation of options for component list input
+
+ Usage("Must specify a logfile with -l") if (!defined $iLogFile);
+ Usage("Can't request validation on non-XML input") if (defined $iValidate);
+ Usage("Can't specify merged or text output with -d") if (defined $iTextOutput || defined $iMergedXml);
+ Usage ("Can't specify a filter for non-XML input") if (defined $iFilter);
+ Usage ("Can't specify a configuration for non-XML input") if (defined $iConfName);
+ }
+
+ foreach my $iFile (@iDataSource)
+ {
+ if (! -e $iFile)
+ {
+ die "Cannot open $iFile";
+ }
+ }
+
+ foreach my $iFile (@iXmlSource)
+ {
+ if (! -e $iFile)
+ {
+ die "Cannot open $iFile";
+ }
+ }
+
+ # Backup existing files
+
+ &backupFile($iLogFile);
+ &backupFile($iDataOutput);
+ &backupFile($iMergedXml);
+ &backupFile($iTextOutput);
+ &backupFile($iCBROutput);
+ &backupFile($iReallyClean);
+ &backupFile($iClean);
+
+ return(\@iDataSource, $iDataOutput, $iLogFile, $iSourceDir, $iReallyClean, $iClean, \@iXmlSource, $iConfName, $iMergedXml, $iValidate, $iTextOutput, $iCBROutput, $iFilter, $iEffectiveDir);
+}
+
+# backupFile
+#
+# Inputs
+# $iFile - filename to backup
+#
+# Outputs
+#
+# Description
+# This function renames a file with the .baknn extension, if necessary
+sub backupFile
+{
+ my ($iFile) = @_;
+
+ return if (!$iFile || !-e $iFile);
+
+ my ($iBak) = $iFile.".bak";
+ my ($i, $freefilename);
+ # Loop until you find a free file name by increamenting the number on the end of the .bak extension
+ while (!$freefilename)
+ {
+ if (-e $iBak.$i)
+ {
+ $i++;
+ } else {
+ $iBak .= $i;
+ $freefilename = 1;
+ }
+ }
+ print "WARNING: $iFile already exists, creating backup of original with new name of $iBak\n";
+ move($iFile,$iBak) or die "Could not backup $iFile to $iBak because of: $!\n";
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage {
+ my ($reason) = @_;
+
+ print "ERROR: $reason\n" if ($reason);
+ print <<USAGE_EOF;
+
+ Usage: Genxml.pl [options]
+
+ options for XML input mode:
+
+ -h help
+ -s Source Directory
+ -x XML Data Source (XML file) [Multiple -x options allowed]
+ -f filter to apply to data source before main processing [optional]
+ -m Output merged & filtered XML file [optional]
+ -n Configuration name to use
+ -l Logfile [optional]
+ -o Output XML file [optional]
+ -e Effective source directory [optional]
+ -t Output TXT file corresponding to XML file [optional]
+ -c Output list of CBR components [optional]
+ -v Validate XML files only, Stop after merging and validating.
+ Turns on extra INFO messages for Validation [optional]
+
+ options for backward compatibility mode:
+
+ -h help
+ -l Logfile
+ -s Source Directory
+ -d Data Source (txt file) [Multiple -d options allowed]
+ -o Output XML file
+ -r Filename for ReallyClean xml file [optional]
+ -c Filename for Clean xml file [optional]
+
+ Description:
+ This program generates an XML file that is used by the Build
+ Client-Server System. It expands the summarised configuration
+ information stored in the input files to a detailed command by command
+ instruction set for the Build System to use. This enabled the
+ specified configuration to be built by the build system.
+
+USAGE_EOF
+ exit 1;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/group/bld.inf Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,114 @@
+// 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:
+//
+
+PRJ_PLATFORMS
+TOOLS
+
+PRJ_EXPORTS
+
+// Export the log processing tools
+..\scanlog\scanlog.pl \epoc32\tools\scanlog.pl
+..\scanlog\Scanlog.pm \epoc32\tools\Scanlog.pm
+..\scanlog\htmlscanlog.pl \epoc32\tools\htmlscanlog.pl
+..\scanlog\complog.pl \epoc32\tools\complog.pl
+..\scanlog\compare_summary.pl \epoc32\tools\compare_summary.pl
+
+
+// Export the old build system
+..\genbuild\genbuild.pl \epoc32\tools\genbuild.pl
+..\genbuild\genbuild.bat \epoc32\tools\genbuild.bat
+
+
+// Export Build tools
+..\genxml.pl \epoc32\tools\build\genxml.pl
+..\GenXml.pm \epoc32\tools\build\GenXml.pm
+..\GenBuild.pm \epoc32\tools\build\GenBuild.pm
+..\BuildClient.pl \epoc32\tools\build\BuildClient.pl
+..\BuildClient.pm \epoc32\tools\build\BuildClient.pm
+..\BuildServer.pl \epoc32\tools\build\BuildServer.pl
+..\BuildServer.pm \epoc32\tools\build\BuildServer.pm
+..\Msg.pm \epoc32\tools\build\Msg.pm
+..\ParseXML.pm \epoc32\tools\build\ParseXML.pm
+
+
+
+// Export the build tools supporting libraries
+..\lib\gpl.licence.txt \epoc32\tools\build\lib\gpl.licence.txt
+..\lib\Date\Manip.pm \epoc32\tools\build\lib\Date\Manip.pm
+..\lib\Date\Manip.pod \epoc32\tools\build\lib\Date\Manip.pod
+..\lib\freezethaw\FreezeThaw.pm \epoc32\tools\build\lib\freezethaw\FreezeThaw.pm
+..\lib\Parse\Yapp.pm \epoc32\tools\build\lib\Parse\Yapp.pm
+..\lib\Parse\Yapp\Driver.pm \epoc32\tools\build\lib\Parse\Yapp\Driver.pm
+..\lib\Parse\Yapp\Grammar.pm \epoc32\tools\build\lib\Parse\Yapp\Grammar.pm
+..\lib\Parse\Yapp\Lalr.pm \epoc32\tools\build\lib\Parse\Yapp\Lalr.pm
+..\lib\Parse\Yapp\Options.pm \epoc32\tools\build\lib\Parse\Yapp\Options.pm
+..\lib\Parse\Yapp\Output.pm \epoc32\tools\build\lib\Parse\Yapp\Output.pm
+..\lib\Parse\Yapp\Parse.pm \epoc32\tools\build\lib\Parse\Yapp\Parse.pm
+..\lib\XML\Checker.pm \epoc32\tools\build\lib\XML\Checker.pm
+..\lib\XML\DOM.pm \epoc32\tools\build\lib\XML\DOM.pm
+..\lib\XML\Parser.pod \epoc32\tools\build\lib\XML\Parser.pod
+..\lib\XML\perllocal.pod \epoc32\tools\build\lib\XML\perllocal.pod
+..\lib\XML\RegExp.pm \epoc32\tools\build\lib\XML\RegExp.pm
+..\lib\XML\UM.pm \epoc32\tools\build\lib\XML\UM.pm
+..\lib\XML\XQL.pm \epoc32\tools\build\lib\XML\XQL.pm
+..\lib\XML\Checker\DOM.pm \epoc32\tools\build\lib\XML\Checker\DOM.pm
+..\lib\XML\Checker\Parser.pm \epoc32\tools\build\lib\XML\Checker\Parser.pm
+..\lib\XML\DOM\AttDef.pod \epoc32\tools\build\lib\XML\DOM\AttDef.pod
+..\lib\XML\DOM\AttlistDecl.pod \epoc32\tools\build\lib\XML\DOM\AttlistDecl.pod
+..\lib\XML\DOM\Attr.pod \epoc32\tools\build\lib\XML\DOM\Attr.pod
+..\lib\XML\DOM\CDATASection.pod \epoc32\tools\build\lib\XML\DOM\CDATASection.pod
+..\lib\XML\DOM\CharacterData.pod \epoc32\tools\build\lib\XML\DOM\CharacterData.pod
+..\lib\XML\DOM\Comment.pod \epoc32\tools\build\lib\XML\DOM\Comment.pod
+..\lib\XML\DOM\Document.pod \epoc32\tools\build\lib\XML\DOM\Document.pod
+..\lib\XML\DOM\DocumentFragment.pod \epoc32\tools\build\lib\XML\DOM\DocumentFragment.pod
+..\lib\XML\DOM\DocumentType.pod \epoc32\tools\build\lib\XML\DOM\DocumentType.pod
+..\lib\XML\DOM\DOMException.pm \epoc32\tools\build\lib\XML\DOM\DOMException.pm
+..\lib\XML\DOM\DOMImplementation.pod \epoc32\tools\build\lib\XML\DOM\DOMImplementation.pod
+..\lib\XML\DOM\Element.pod \epoc32\tools\build\lib\XML\DOM\Element.pod
+..\lib\XML\DOM\ElementDecl.pod \epoc32\tools\build\lib\XML\DOM\ElementDecl.pod
+..\lib\XML\DOM\Entity.pod \epoc32\tools\build\lib\XML\DOM\Entity.pod
+..\lib\XML\DOM\EntityReference.pod \epoc32\tools\build\lib\XML\DOM\EntityReference.pod
+..\lib\XML\DOM\NamedNodeMap.pm \epoc32\tools\build\lib\XML\DOM\NamedNodeMap.pm
+..\lib\XML\DOM\NamedNodeMap.pod \epoc32\tools\build\lib\XML\DOM\NamedNodeMap.pod
+..\lib\XML\DOM\Node.pod \epoc32\tools\build\lib\XML\DOM\Node.pod
+..\lib\XML\DOM\NodeList.pm \epoc32\tools\build\lib\XML\DOM\NodeList.pm
+..\lib\XML\DOM\NodeList.pod \epoc32\tools\build\lib\XML\DOM\NodeList.pod
+..\lib\XML\DOM\Notation.pod \epoc32\tools\build\lib\XML\DOM\Notation.pod
+..\lib\XML\DOM\Parser.pod \epoc32\tools\build\lib\XML\DOM\Parser.pod
+..\lib\XML\DOM\PerlSAX.pm \epoc32\tools\build\lib\XML\DOM\PerlSAX.pm
+..\lib\XML\DOM\ProcessingInstruction.pod \epoc32\tools\build\lib\XML\DOM\ProcessingInstruction.pod
+..\lib\XML\DOM\Text.pod \epoc32\tools\build\lib\XML\DOM\Text.pod
+..\lib\XML\DOM\ValParser.pm \epoc32\tools\build\lib\XML\DOM\ValParser.pm
+..\lib\XML\DOM\XMLDecl.pod \epoc32\tools\build\lib\XML\DOM\XMLDecl.pod
+..\lib\XML\Filter\DetectWS.pm \epoc32\tools\build\lib\XML\Filter\DetectWS.pm
+..\lib\XML\Filter\Reindent.pm \epoc32\tools\build\lib\XML\Filter\Reindent.pm
+..\lib\XML\Filter\SAXT.pm \epoc32\tools\build\lib\XML\Filter\SAXT.pm
+..\lib\XML\Handler\BuildDOM.pm \epoc32\tools\build\lib\XML\Handler\BuildDOM.pm
+..\lib\XML\Handler\CanonXMLWriter.pm \epoc32\tools\build\lib\XML\Handler\CanonXMLWriter.pm
+..\lib\XML\Handler\Composer.pm \epoc32\tools\build\lib\XML\Handler\Composer.pm
+..\lib\XML\Handler\PrintEvents.pm \epoc32\tools\build\lib\XML\Handler\PrintEvents.pm
+..\lib\XML\Handler\Sample.pm \epoc32\tools\build\lib\XML\Handler\Sample.pm
+..\lib\XML\Handler\Subs.pm \epoc32\tools\build\lib\XML\Handler\Subs.pm
+..\lib\XML\Handler\XMLWriter.pm \epoc32\tools\build\lib\XML\Handler\XMLWriter.pm
+..\lib\XML\Parser\Expat.pod \epoc32\tools\build\lib\XML\Parser\Expat.pod
+..\lib\XML\XQL\Date.pm \epoc32\tools\build\lib\XML\XQL\Date.pm
+..\lib\XML\XQL\Debug.pm \epoc32\tools\build\lib\XML\XQL\Debug.pm
+..\lib\XML\XQL\DirXQL.pm \epoc32\tools\build\lib\XML\XQL\DirXQL.pm
+..\lib\XML\XQL\DOM.pm \epoc32\tools\build\lib\XML\XQL\DOM.pm
+..\lib\XML\XQL\Parser.pm \epoc32\tools\build\lib\XML\XQL\Parser.pm
+..\lib\XML\XQL\Plus.pm \epoc32\tools\build\lib\XML\XQL\Plus.pm
+..\lib\XML\XQL\Query.pod \epoc32\tools\build\lib\XML\XQL\Query.pod
+..\lib\XML\XQL\Strict.pm \epoc32\tools\build\lib\XML\XQL\Strict.pm
+..\lib\XML\XQL\Tutorial.pod \epoc32\tools\build\lib\XML\XQL\Tutorial.pod
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/group/tools_build.history.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="BUILDSYSTEMTOOLS">
+ <purpose>
+ </purpose>
+
+ <defect number="PDEF117063" title="scanlog module name is not case consistent" revision="004">
+ Renamed scanlog.pm to Scanlog.pm. Updated PRJ_EXPORTS for Scanlog.pm.
+ </defect>
+
+ <defect number="DEF120924" title="Exports fail on Linux due to wrong filename / directory case" revision="003">
+ Exports fail on Linux due to wrong filename / directory case
+ </defect>
+
+ <minorchange revision="002">
+ Removed graphics_graphicssurfaces unit, which is an obsolete prototype implementation. The "Graphics Surfaces" component remains in the model, and will eventually contain the production implementation of this feature.
+ </minorchange>
+
+ <minorchange revision="001">
+ Enable additional components in the v9.5 configuration. The extra components are in the graphics subsystem, associated with PREQ1004 (egl, eglheader, openvg, openvgheaders) and PREQ1007 (graphicssurfaces).
+ </minorchange>
+</relnotes>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/group/tools_build.mrp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 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:
+#
+
+component tools_build
+#UmaA: Custkit build tools...
+
+source \sf\os\buildtools\bldsystemtools\buildsystemtools\
+exports \sf\os\buildtools\bldsystemtools\buildsystemtools\group
+
+-export_file \sf\os\buildtools\bldsystemtools\buildsystemtools\docs\scanlog.txt \epoc32\EngDoc\tools\build\scanlog.txt
+notes_source \component_defs\release.src
+
+
+ipr T
+ipr G \sf\os\buildtools\bldsystemtools\buildsystemtools\lib
+ipr O \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\date
+ipr O \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\freezethaw
+ipr O \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\parse
+ipr O \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\src
+ipr O \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\xml
+ipr G \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\xml\checker
+ipr G \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\xml\Handler
+ipr G \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\xml\Parser
+ipr G \sf\os\buildtools\bldsystemtools\buildsystemtools\lib\xml\XQL
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Date/Manip.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,7362 @@
+package Date::Manip;
+# Copyright (c) 1995-2003 Sullivan Beck. All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+###########################################################################
+###########################################################################
+
+use vars qw($OS %Lang %Holiday %Events %Curr %Cnf %Zone $VERSION @ISA @EXPORT);
+
+# Determine the type of OS...
+$OS="Unix";
+$OS="Windows" if ((defined $^O and
+ $^O =~ /MSWin32/i ||
+ $^O =~ /Windows_95/i ||
+ $^O =~ /Windows_NT/i) ||
+ (defined $ENV{OS} and
+ $ENV{OS} =~ /MSWin32/i ||
+ $ENV{OS} =~ /Windows_95/i ||
+ $ENV{OS} =~ /Windows_NT/i));
+$OS="Netware" if (defined $^O and
+ $^O =~ /NetWare/i);
+$OS="Mac" if ((defined $^O and
+ $^O =~ /MacOS/i) ||
+ (defined $ENV{OS} and
+ $ENV{OS} =~ /MacOS/i));
+$OS="MPE" if (defined $^O and
+ $^O =~ /MPE/i);
+$OS="OS2" if (defined $^O and
+ $^O =~ /os2/i);
+$OS="VMS" if (defined $^O and
+ $^O =~ /VMS/i);
+
+# Determine if we're doing taint checking
+$Date::Manip::NoTaint = eval { local $^W; unlink "$^X$^T"; 1 };
+
+###########################################################################
+# CUSTOMIZATION
+###########################################################################
+#
+# See the section of the POD documentation section CUSTOMIZING DATE::MANIP
+# below for a complete description of each of these variables.
+
+
+# Location of a the global config file. Tilde (~) expansions are allowed.
+# This should be set in Date_Init arguments.
+$Cnf{"GlobalCnf"}="";
+$Cnf{"IgnoreGlobalCnf"}="";
+
+# Name of a personal config file and the path to search for it. Tilde (~)
+# expansions are allowed. This should be set in Date_Init arguments or in
+# the global config file.
+
+@Date::Manip::DatePath=();
+if ($OS eq "Windows") {
+ $Cnf{"PathSep"} = ";";
+ $Cnf{"PersonalCnf"} = "Manip.cnf";
+ $Cnf{"PersonalCnfPath"} = ".";
+
+} elsif ($OS eq "Netware") {
+ $Cnf{"PathSep"} = ";";
+ $Cnf{"PersonalCnf"} = "Manip.cnf";
+ $Cnf{"PersonalCnfPath"} = ".";
+
+} elsif ($OS eq "MPE") {
+ $Cnf{"PathSep"} = ":";
+ $Cnf{"PersonalCnf"} = "Manip.cnf";
+ $Cnf{"PersonalCnfPath"} = ".";
+
+} elsif ($OS eq "OS2") {
+ $Cnf{"PathSep"} = ":";
+ $Cnf{"PersonalCnf"} = "Manip.cnf";
+ $Cnf{"PersonalCnfPath"} = ".";
+
+} elsif ($OS eq "Mac") {
+ $Cnf{"PathSep"} = ":";
+ $Cnf{"PersonalCnf"} = "Manip.cnf";
+ $Cnf{"PersonalCnfPath"} = ".";
+
+} elsif ($OS eq "VMS") {
+ # VMS doesn't like files starting with "."
+ $Cnf{"PathSep"} = "\n";
+ $Cnf{"PersonalCnf"} = "Manip.cnf";
+ $Cnf{"PersonalCnfPath"} = ".\n~";
+
+} else {
+ # Unix
+ $Cnf{"PathSep"} = ":";
+ $Cnf{"PersonalCnf"} = ".DateManip.cnf";
+ $Cnf{"PersonalCnfPath"} = ".:~";
+ @Date::Manip::DatePath=qw(/bin /usr/bin /usr/local/bin);
+}
+
+### Date::Manip variables set in the global or personal config file
+
+# Which language to use when parsing dates.
+$Cnf{"Language"}="English";
+
+# 12/10 = Dec 10 (US) or Oct 12 (anything else)
+$Cnf{"DateFormat"}="US";
+
+# Local timezone
+$Cnf{"TZ"}="";
+
+# Timezone to work in (""=local, "IGNORE", or a timezone)
+$Cnf{"ConvTZ"}="";
+
+# Date::Manip internal format (0=YYYYMMDDHH:MN:SS, 1=YYYYHHMMDDHHMNSS)
+$Cnf{"Internal"}=0;
+
+# First day of the week (1=monday, 7=sunday). ISO 8601 says monday.
+$Cnf{"FirstDay"}=1;
+
+# First and last day of the work week (1=monday, 7=sunday)
+$Cnf{"WorkWeekBeg"}=1;
+$Cnf{"WorkWeekEnd"}=5;
+
+# If non-nil, a work day is treated as 24 hours long (WorkDayBeg/WorkDayEnd
+# ignored)
+$Cnf{"WorkDay24Hr"}=0;
+
+# Start and end time of the work day (any time format allowed, seconds
+# ignored)
+$Cnf{"WorkDayBeg"}="08:00";
+$Cnf{"WorkDayEnd"}="17:00";
+
+# If "today" is a holiday, we look either to "tomorrow" or "yesterday" for
+# the nearest business day. By default, we'll always look "tomorrow"
+# first.
+$Cnf{"TomorrowFirst"}=1;
+
+# Erase the old holidays
+$Cnf{"EraseHolidays"}="";
+
+# Set this to non-zero to be produce completely backwards compatible deltas
+$Cnf{"DeltaSigns"}=0;
+
+# If this is 0, use the ISO 8601 standard that Jan 4 is in week 1. If 1,
+# make week 1 contain Jan 1.
+$Cnf{"Jan1Week1"}=0;
+
+# 2 digit years fall into the 100 year period given by [ CURR-N,
+# CURR+(99-N) ] where N is 0-99. Default behavior is 89, but other useful
+# numbers might be 0 (forced to be this year or later) and 99 (forced to be
+# this year or earlier). It can also be set to "c" (current century) or
+# "cNN" (i.e. c18 forces the year to bet 1800-1899). Also accepts the
+# form cNNNN to give the 100 year period NNNN to NNNN+99.
+$Cnf{"YYtoYYYY"}=89;
+
+# Set this to 1 if you want a long-running script to always update the
+# timezone. This will slow Date::Manip down. Read the POD documentation.
+$Cnf{"UpdateCurrTZ"}=0;
+
+# Use an international character set.
+$Cnf{"IntCharSet"}=0;
+
+# Use this to force the current date to be set to this:
+$Cnf{"ForceDate"}="";
+
+###########################################################################
+
+require 5.000;
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(
+ DateManipVersion
+ Date_Init
+ ParseDateString
+ ParseDate
+ ParseRecur
+ Date_Cmp
+ DateCalc
+ ParseDateDelta
+ UnixDate
+ Delta_Format
+ Date_GetPrev
+ Date_GetNext
+ Date_SetTime
+ Date_SetDateField
+ Date_IsHoliday
+ Events_List
+
+ Date_DaysInMonth
+ Date_DayOfWeek
+ Date_SecsSince1970
+ Date_SecsSince1970GMT
+ Date_DaysSince1BC
+ Date_DayOfYear
+ Date_DaysInYear
+ Date_WeekOfYear
+ Date_LeapYear
+ Date_DaySuffix
+ Date_ConvTZ
+ Date_TimeZone
+ Date_IsWorkDay
+ Date_NextWorkDay
+ Date_PrevWorkDay
+ Date_NearestWorkDay
+ Date_NthDayOfYear
+);
+use strict;
+use integer;
+use Carp;
+
+use IO::File;
+
+$VERSION="5.42";
+
+########################################################################
+########################################################################
+
+$Curr{"InitLang"} = 1; # Whether a language is being init'ed
+$Curr{"InitDone"} = 0; # Whether Init_Date has been called
+$Curr{"InitFilesRead"} = 0;
+$Curr{"ResetWorkDay"} = 1;
+$Curr{"Debug"} = "";
+$Curr{"DebugVal"} = "";
+
+$Holiday{"year"} = 0;
+$Holiday{"dates"} = {};
+$Holiday{"desc"} = {};
+
+$Events{"raw"} = [];
+$Events{"parsed"} = 0;
+$Events{"dates"} = [];
+$Events{"recur"} = [];
+
+########################################################################
+########################################################################
+# THESE ARE THE MAIN ROUTINES
+########################################################################
+########################################################################
+
+# Get rid of a problem with old versions of perl
+no strict "vars";
+# This sorts from longest to shortest element
+sub sortByLength {
+ return (length $b <=> length $a);
+}
+use strict "vars";
+
+sub DateManipVersion {
+ print "DEBUG: DateManipVersion\n" if ($Curr{"Debug"} =~ /trace/);
+ return $VERSION;
+}
+
+sub Date_Init {
+ print "DEBUG: Date_Init\n" if ($Curr{"Debug"} =~ /trace/);
+ $Curr{"Debug"}="";
+
+ my(@args)=@_;
+ $Curr{"InitDone"}=1;
+ local($_)=();
+ my($internal,$firstday)=();
+ my($var,$val,$file,@tmp)=();
+
+ # InitFilesRead = 0 : no conf files read yet
+ # 1 : global read, no personal read
+ # 2 : personal read
+
+ $Cnf{"EraseHolidays"}=0;
+ foreach (@args) {
+ s/\s*$//;
+ s/^\s*//;
+ /^(\S+) \s* = \s* (.+)$/x;
+ ($var,$val)=($1,$2);
+ if ($var =~ /^GlobalCnf$/i) {
+ $Cnf{"GlobalCnf"}=$val;
+ if ($val) {
+ $Curr{"InitFilesRead"}=0;
+ &EraseHolidays();
+ }
+ } elsif ($var =~ /^PathSep$/i) {
+ $Cnf{"PathSep"}=$val;
+ } elsif ($var =~ /^PersonalCnf$/i) {
+ $Cnf{"PersonalCnf"}=$val;
+ $Curr{"InitFilesRead"}=1 if ($Curr{"InitFilesRead"}==2);
+ } elsif ($var =~ /^PersonalCnfPath$/i) {
+ $Cnf{"PersonalCnfPath"}=$val;
+ $Curr{"InitFilesRead"}=1 if ($Curr{"InitFilesRead"}==2);
+ } elsif ($var =~ /^IgnoreGlobalCnf$/i) {
+ $Curr{"InitFilesRead"}=1 if ($Curr{"InitFilesRead"}==0);
+ $Cnf{"IgnoreGlobalCnf"}=1;
+ } elsif ($var =~ /^EraseHolidays$/i) {
+ &EraseHolidays();
+ } else {
+ push(@tmp,$_);
+ }
+ }
+ @args=@tmp;
+
+ # Read global config file
+ if ($Curr{"InitFilesRead"}<1 && ! $Cnf{"IgnoreGlobalCnf"}) {
+ $Curr{"InitFilesRead"}=1;
+
+ if ($Cnf{"GlobalCnf"}) {
+ $file=&ExpandTilde($Cnf{"GlobalCnf"});
+ &Date_InitFile($file) if ($file);
+ }
+ }
+
+ # Read personal config file
+ if ($Curr{"InitFilesRead"}<2) {
+ $Curr{"InitFilesRead"}=2;
+
+ if ($Cnf{"PersonalCnf"} and $Cnf{"PersonalCnfPath"}) {
+ $file=&SearchPath($Cnf{"PersonalCnf"},$Cnf{"PersonalCnfPath"},"r");
+ &Date_InitFile($file) if ($file);
+ }
+ }
+
+ foreach (@args) {
+ s/\s*$//;
+ s/^\s*//;
+ /^(\S+) \s* = \s* (.*)$/x;
+ ($var,$val)=($1,$2);
+ $val="" if (! defined $val);
+ &Date_SetConfigVariable($var,$val);
+ }
+
+ confess "ERROR: Unknown FirstDay in Date::Manip.\n"
+ if (! &IsInt($Cnf{"FirstDay"},1,7));
+ confess "ERROR: Unknown WorkWeekBeg in Date::Manip.\n"
+ if (! &IsInt($Cnf{"WorkWeekBeg"},1,7));
+ confess "ERROR: Unknown WorkWeekEnd in Date::Manip.\n"
+ if (! &IsInt($Cnf{"WorkWeekEnd"},1,7));
+ confess "ERROR: Invalid WorkWeek in Date::Manip.\n"
+ if ($Cnf{"WorkWeekEnd"} <= $Cnf{"WorkWeekBeg"});
+
+ my(%lang,
+ $tmp,%tmp,$tmp2,@tmp2,
+ $i,$j,@tmp3,
+ $zonesrfc,@zones)=();
+
+ my($L)=$Cnf{"Language"};
+
+ if ($Curr{"InitLang"}) {
+ $Curr{"InitLang"}=0;
+
+ if ($L eq "English") {
+ &Date_Init_English(\%lang);
+
+ } elsif ($L eq "French") {
+ &Date_Init_French(\%lang);
+
+ } elsif ($L eq "Swedish") {
+ &Date_Init_Swedish(\%lang);
+
+ } elsif ($L eq "German") {
+ &Date_Init_German(\%lang);
+
+ } elsif ($L eq "Polish") {
+ &Date_Init_Polish(\%lang);
+
+ } elsif ($L eq "Dutch" ||
+ $L eq "Nederlands") {
+ &Date_Init_Dutch(\%lang);
+
+ } elsif ($L eq "Spanish") {
+ &Date_Init_Spanish(\%lang);
+
+ } elsif ($L eq "Portuguese") {
+ &Date_Init_Portuguese(\%lang);
+
+ } elsif ($L eq "Romanian") {
+ &Date_Init_Romanian(\%lang);
+
+ } elsif ($L eq "Italian") {
+ &Date_Init_Italian(\%lang);
+
+ } elsif ($L eq "Russian") {
+ &Date_Init_Russian(\%lang);
+
+ } elsif ($L eq "Turkish") {
+ &Date_Init_Turkish(\%lang);
+
+ } elsif ($L eq "Danish") {
+ &Date_Init_Danish(\%lang);
+
+ } else {
+ confess "ERROR: Unknown language in Date::Manip.\n";
+ }
+
+ # variables for months
+ # Month = "(jan|january|feb|february ... )"
+ # MonL = [ "Jan","Feb",... ]
+ # MonthL = [ "January","February", ... ]
+ # MonthH = { "january"=>1, "jan"=>1, ... }
+
+ $Lang{$L}{"MonthH"}={};
+ $Lang{$L}{"MonthL"}=[];
+ $Lang{$L}{"MonL"}=[];
+ &Date_InitLists([$lang{"month_name"},
+ $lang{"month_abb"}],
+ \$Lang{$L}{"Month"},"lc,sort,back",
+ [$Lang{$L}{"MonthL"},
+ $Lang{$L}{"MonL"}],
+ [$Lang{$L}{"MonthH"},1]);
+
+ # variables for day of week
+ # Week = "(mon|monday|tue|tuesday ... )"
+ # WL = [ "M","T",... ]
+ # WkL = [ "Mon","Tue",... ]
+ # WeekL = [ "Monday","Tudesday",... ]
+ # WeekH = { "monday"=>1,"mon"=>1,"m"=>1,... }
+
+ $Lang{$L}{"WeekH"}={};
+ $Lang{$L}{"WeekL"}=[];
+ $Lang{$L}{"WkL"}=[];
+ $Lang{$L}{"WL"}=[];
+ &Date_InitLists([$lang{"day_name"},
+ $lang{"day_abb"}],
+ \$Lang{$L}{"Week"},"lc,sort,back",
+ [$Lang{$L}{"WeekL"},
+ $Lang{$L}{"WkL"}],
+ [$Lang{$L}{"WeekH"},1]);
+ &Date_InitLists([$lang{"day_char"}],
+ "","lc",
+ [$Lang{$L}{"WL"}],
+ [\%tmp,1]);
+ %{ $Lang{$L}{"WeekH"} } =
+ (%{ $Lang{$L}{"WeekH"} },%tmp);
+
+ # variables for last
+ # Last = "(last)"
+ # LastL = [ "last" ]
+ # Each = "(each)"
+ # EachL = [ "each" ]
+ # variables for day of month
+ # DoM = "(1st|first ... 31st)"
+ # DoML = [ "1st","2nd",... "31st" ]
+ # DoMH = { "1st"=>1,"first"=>1, ... "31st"=>31 }
+ # variables for week of month
+ # WoM = "(1st|first| ... 5th|last)"
+ # WoMH = { "1st"=>1, ... "5th"=>5,"last"=>-1 }
+
+ $Lang{$L}{"LastL"}=$lang{"last"};
+ &Date_InitStrings($lang{"last"},
+ \$Lang{$L}{"Last"},"lc,sort");
+
+ $Lang{$L}{"EachL"}=$lang{"each"};
+ &Date_InitStrings($lang{"each"},
+ \$Lang{$L}{"Each"},"lc,sort");
+
+ $Lang{$L}{"DoMH"}={};
+ $Lang{$L}{"DoML"}=[];
+ &Date_InitLists([$lang{"num_suff"},
+ $lang{"num_word"}],
+ \$Lang{$L}{"DoM"},"lc,sort,back,escape",
+ [$Lang{$L}{"DoML"},
+ \@tmp],
+ [$Lang{$L}{"DoMH"},1]);
+
+ @tmp=();
+ foreach $tmp (keys %{ $Lang{$L}{"DoMH"} }) {
+ $tmp2=$Lang{$L}{"DoMH"}{$tmp};
+ if ($tmp2<6) {
+ $Lang{$L}{"WoMH"}{$tmp} = $tmp2;
+ push(@tmp,$tmp);
+ }
+ }
+ foreach $tmp (@{ $Lang{$L}{"LastL"} }) {
+ $Lang{$L}{"WoMH"}{$tmp} = -1;
+ push(@tmp,$tmp);
+ }
+ &Date_InitStrings(\@tmp,\$Lang{$L}{"WoM"},
+ "lc,sort,back,escape");
+
+ # variables for AM or PM
+ # AM = "(am)"
+ # PM = "(pm)"
+ # AmPm = "(am|pm)"
+ # AMstr = "AM"
+ # PMstr = "PM"
+
+ &Date_InitStrings($lang{"am"},\$Lang{$L}{"AM"},"lc,sort,escape");
+ &Date_InitStrings($lang{"pm"},\$Lang{$L}{"PM"},"lc,sort,escape");
+ &Date_InitStrings([ @{$lang{"am"}},@{$lang{"pm"}} ],\$Lang{$L}{"AmPm"},
+ "lc,back,sort,escape");
+ $Lang{$L}{"AMstr"}=$lang{"am"}[0];
+ $Lang{$L}{"PMstr"}=$lang{"pm"}[0];
+
+ # variables for expressions used in parsing deltas
+ # Yabb = "(?:y|yr|year|years)"
+ # Mabb = similar for months
+ # Wabb = similar for weeks
+ # Dabb = similar for days
+ # Habb = similar for hours
+ # MNabb = similar for minutes
+ # Sabb = similar for seconds
+ # Repl = { "abb"=>"replacement" }
+ # Whenever an abbreviation could potentially refer to two different
+ # strings (M standing for Minutes or Months), the abbreviation must
+ # be listed in Repl instead of in the appropriate Xabb values. This
+ # only applies to abbreviations which are substrings of other values
+ # (so there is no confusion between Mn and Month).
+
+ &Date_InitStrings($lang{"years"} ,\$Lang{$L}{"Yabb"}, "lc,sort");
+ &Date_InitStrings($lang{"months"} ,\$Lang{$L}{"Mabb"}, "lc,sort");
+ &Date_InitStrings($lang{"weeks"} ,\$Lang{$L}{"Wabb"}, "lc,sort");
+ &Date_InitStrings($lang{"days"} ,\$Lang{$L}{"Dabb"}, "lc,sort");
+ &Date_InitStrings($lang{"hours"} ,\$Lang{$L}{"Habb"}, "lc,sort");
+ &Date_InitStrings($lang{"minutes"},\$Lang{$L}{"MNabb"},"lc,sort");
+ &Date_InitStrings($lang{"seconds"},\$Lang{$L}{"Sabb"}, "lc,sort");
+ $Lang{$L}{"Repl"}={};
+ &Date_InitHash($lang{"replace"},undef,"lc",$Lang{$L}{"Repl"});
+
+ # variables for special dates that are offsets from now
+ # Now = "(now|today)"
+ # Offset = "(yesterday|tomorrow)"
+ # OffsetH = { "yesterday"=>"-0:0:0:1:0:0:0",... ]
+ # Times = "(noon|midnight)"
+ # TimesH = { "noon"=>"12:00:00","midnight"=>"00:00:00" }
+ # SepHM = hour/minute separator
+ # SepMS = minute/second separator
+ # SepSS = second/fraction separator
+
+ $Lang{$L}{"TimesH"}={};
+ &Date_InitHash($lang{"times"},
+ \$Lang{$L}{"Times"},"lc,sort,back",
+ $Lang{$L}{"TimesH"});
+ &Date_InitStrings($lang{"now"},\$Lang{$L}{"Now"},"lc,sort");
+ $Lang{$L}{"OffsetH"}={};
+ &Date_InitHash($lang{"offset"},
+ \$Lang{$L}{"Offset"},"lc,sort,back",
+ $Lang{$L}{"OffsetH"});
+ $Lang{$L}{"SepHM"}=$lang{"sephm"};
+ $Lang{$L}{"SepMS"}=$lang{"sepms"};
+ $Lang{$L}{"SepSS"}=$lang{"sepss"};
+
+ # variables for time zones
+ # zones = regular expression with all zone names (EST)
+ # n2o = a hash of all parsable zone names with their offsets
+ # tzones = reguar expression with all tzdata timezones (US/Eastern)
+ # tz2z = hash of all tzdata timezones to full timezone (EST#EDT)
+
+ $zonesrfc=
+ "idlw -1200 ". # International Date Line West
+ "nt -1100 ". # Nome
+ "hst -1000 ". # Hawaii Standard
+ "cat -1000 ". # Central Alaska
+ "ahst -1000 ". # Alaska-Hawaii Standard
+ "akst -0900 ". # Alaska Standard
+ "yst -0900 ". # Yukon Standard
+ "hdt -0900 ". # Hawaii Daylight
+ "akdt -0800 ". # Alaska Daylight
+ "ydt -0800 ". # Yukon Daylight
+ "pst -0800 ". # Pacific Standard
+ "pdt -0700 ". # Pacific Daylight
+ "mst -0700 ". # Mountain Standard
+ "mdt -0600 ". # Mountain Daylight
+ "cst -0600 ". # Central Standard
+ "cdt -0500 ". # Central Daylight
+ "est -0500 ". # Eastern Standard
+ "act -0500 ". # Brazil, Acre
+ "sat -0400 ". # Chile
+ "bot -0400 ". # Bolivia
+ "amt -0400 ". # Brazil, Amazon
+ "acst -0400 ". # Brazil, Acre Daylight
+ "edt -0400 ". # Eastern Daylight
+ "ast -0400 ". # Atlantic Standard
+ #"nst -0330 ". # Newfoundland Standard nst=North Sumatra +0630
+ "nft -0330 ". # Newfoundland
+ #"gst -0300 ". # Greenland Standard gst=Guam Standard +1000
+ #"bst -0300 ". # Brazil Standard bst=British Summer +0100
+ "brt -0300 ". # Brazil Standard (official time)
+ "brst -0300 ". # Brazil Standard
+ "adt -0300 ". # Atlantic Daylight
+ "art -0300 ". # Argentina
+ "amst -0300 ". # Brazil, Amazon Daylight
+ "ndt -0230 ". # Newfoundland Daylight
+ "brst -0200 ". # Brazil Daylight (official time)
+ "fnt -0200 ". # Brazil, Fernando de Noronha
+ "at -0200 ". # Azores
+ "wat -0100 ". # West Africa
+ "fnst -0100 ". # Brazil, Fernando de Noronha Daylight
+ "gmt +0000 ". # Greenwich Mean
+ "ut +0000 ". # Universal
+ "utc +0000 ". # Universal (Coordinated)
+ "wet +0000 ". # Western European
+ "cet +0100 ". # Central European
+ "fwt +0100 ". # French Winter
+ "met +0100 ". # Middle European
+ "mez +0100 ". # Middle European
+ "mewt +0100 ". # Middle European Winter
+ "swt +0100 ". # Swedish Winter
+ "bst +0100 ". # British Summer bst=Brazil standard -0300
+ "gb +0100 ". # GMT with daylight savings
+ "west +0000 ". # Western European Daylight
+ "eet +0200 ". # Eastern Europe, USSR Zone 1
+ "cest +0200 ". # Central European Summer
+ "fst +0200 ". # French Summer
+ "ist +0200 ". # Israel standard
+ "mest +0200 ". # Middle European Summer
+ "mesz +0200 ". # Middle European Summer
+ "metdst +0200 ". # An alias for mest used by HP-UX
+ "sast +0200 ". # South African Standard
+ "sst +0200 ". # Swedish Summer sst=South Sumatra +0700
+ "bt +0300 ". # Baghdad, USSR Zone 2
+ "eest +0300 ". # Eastern Europe Summer
+ "eetedt +0300 ". # Eastern Europe, USSR Zone 1
+ "idt +0300 ". # Israel Daylight
+ "msk +0300 ". # Moscow
+ "eat +0300 ". # East Africa
+ "it +0330 ". # Iran
+ "zp4 +0400 ". # USSR Zone 3
+ "msd +0400 ". # Moscow Daylight
+ "zp5 +0500 ". # USSR Zone 4
+ "ist +0530 ". # Indian Standard
+ "zp6 +0600 ". # USSR Zone 5
+ "novst +0600 ". # Novosibirsk time zone, Russia
+ "nst +0630 ". # North Sumatra nst=Newfoundland Std -0330
+ #"sst +0700 ". # South Sumatra, USSR Zone 6 sst=Swedish Summer +0200
+ "javt +0700 ". # Java
+ "hkt +0800 ". # Hong Kong
+ "sgt +0800 ". # Singapore
+ "cct +0800 ". # China Coast, USSR Zone 7
+ "awst +0800 ". # Australian Western Standard
+ "wst +0800 ". # West Australian Standard
+ "pht +0800 ". # Asia Manila
+ "kst +0900 ". # Republic of Korea
+ "jst +0900 ". # Japan Standard, USSR Zone 8
+ "rok +0900 ". # Republic of Korea
+ "acst +0930 ". # Australian Central Standard
+ "cast +0930 ". # Central Australian Standard
+ "aest +1000 ". # Australian Eastern Standard
+ "east +1000 ". # Eastern Australian Standard
+ "gst +1000 ". # Guam Standard, USSR Zone 9 gst=Greenland Std -0300
+ "acdt +1030 ". # Australian Central Daylight
+ "cadt +1030 ". # Central Australian Daylight
+ "aedt +1100 ". # Australian Eastern Daylight
+ "eadt +1100 ". # Eastern Australian Daylight
+ "idle +1200 ". # International Date Line East
+ "nzst +1200 ". # New Zealand Standard
+ "nzt +1200 ". # New Zealand
+ "nzdt +1300 ". # New Zealand Daylight
+ "z +0000 ".
+ "a +0100 b +0200 c +0300 d +0400 e +0500 f +0600 g +0700 h +0800 ".
+ "i +0900 k +1000 l +1100 m +1200 ".
+ "n -0100 o -0200 p -0300 q -0400 r -0500 s -0600 t -0700 u -0800 ".
+ "v -0900 w -1000 x -1100 y -1200";
+
+ $Zone{"n2o"} = {};
+ ($Zone{"zones"},%{ $Zone{"n2o"} })=
+ &Date_Regexp($zonesrfc,"sort,lc,under,back",
+ "keys");
+
+ $tmp=
+ "US/Pacific PST8PDT ".
+ "US/Mountain MST7MDT ".
+ "US/Central CST6CDT ".
+ "US/Eastern EST5EDT ".
+ "Canada/Pacific PST8PDT ".
+ "Canada/Mountain MST7MDT ".
+ "Canada/Central CST6CDT ".
+ "Canada/Eastern EST5EDT";
+
+ $Zone{"tz2z"} = {};
+ ($Zone{"tzones"},%{ $Zone{"tz2z"} })=
+ &Date_Regexp($tmp,"lc,under,back","keys");
+ $Cnf{"TZ"}=&Date_TimeZone;
+
+ # misc. variables
+ # At = "(?:at)"
+ # Of = "(?:in|of)"
+ # On = "(?:on)"
+ # Future = "(?:in)"
+ # Later = "(?:later)"
+ # Past = "(?:ago)"
+ # Next = "(?:next)"
+ # Prev = "(?:last|previous)"
+
+ &Date_InitStrings($lang{"at"}, \$Lang{$L}{"At"}, "lc,sort");
+ &Date_InitStrings($lang{"on"}, \$Lang{$L}{"On"}, "lc,sort");
+ &Date_InitStrings($lang{"future"},\$Lang{$L}{"Future"}, "lc,sort");
+ &Date_InitStrings($lang{"later"}, \$Lang{$L}{"Later"}, "lc,sort");
+ &Date_InitStrings($lang{"past"}, \$Lang{$L}{"Past"}, "lc,sort");
+ &Date_InitStrings($lang{"next"}, \$Lang{$L}{"Next"}, "lc,sort");
+ &Date_InitStrings($lang{"prev"}, \$Lang{$L}{"Prev"}, "lc,sort");
+ &Date_InitStrings($lang{"of"}, \$Lang{$L}{"Of"}, "lc,sort");
+
+ # calc mode variables
+ # Approx = "(?:approximately)"
+ # Exact = "(?:exactly)"
+ # Business = "(?:business)"
+
+ &Date_InitStrings($lang{"exact"}, \$Lang{$L}{"Exact"}, "lc,sort");
+ &Date_InitStrings($lang{"approx"}, \$Lang{$L}{"Approx"}, "lc,sort");
+ &Date_InitStrings($lang{"business"},\$Lang{$L}{"Business"},"lc,sort");
+
+ ############### END OF LANGUAGE INITIALIZATION
+ }
+
+ if ($Curr{"ResetWorkDay"}) {
+ my($h1,$m1,$h2,$m2)=();
+ if ($Cnf{"WorkDay24Hr"}) {
+ ($Curr{"WDBh"},$Curr{"WDBm"})=(0,0);
+ ($Curr{"WDEh"},$Curr{"WDEm"})=(24,0);
+ $Curr{"WDlen"}=24*60;
+ $Cnf{"WorkDayBeg"}="00:00";
+ $Cnf{"WorkDayEnd"}="23:59";
+
+ } else {
+ confess "ERROR: Invalid WorkDayBeg in Date::Manip.\n"
+ if (! (($h1,$m1)=&CheckTime($Cnf{"WorkDayBeg"})));
+ $Cnf{"WorkDayBeg"}="$h1:$m1";
+ confess "ERROR: Invalid WorkDayEnd in Date::Manip.\n"
+ if (! (($h2,$m2)=&CheckTime($Cnf{"WorkDayEnd"})));
+ $Cnf{"WorkDayEnd"}="$h2:$m2";
+
+ ($Curr{"WDBh"},$Curr{"WDBm"})=($h1,$m1);
+ ($Curr{"WDEh"},$Curr{"WDEm"})=($h2,$m2);
+
+ # Work day length = h1:m1 or 0:len (len minutes)
+ $h1=$h2-$h1;
+ $m1=$m2-$m1;
+ if ($m1<0) {
+ $h1--;
+ $m1+=60;
+ }
+ $Curr{"WDlen"}=$h1*60+$m1;
+ }
+ $Curr{"ResetWorkDay"}=0;
+ }
+
+ # current time
+ my($s,$mn,$h,$d,$m,$y,$wday,$yday,$isdst,$ampm,$wk)=();
+ if ($Cnf{"ForceDate"}=~
+ /^(\d{4})-(\d{2})-(\d{2})-(\d{2}):(\d{2}):(\d{2})$/) {
+ ($y,$m,$d,$h,$mn,$s)=($1,$2,$3,$4,$5,$6);
+ } else {
+ ($s,$mn,$h,$d,$m,$y,$wday,$yday,$isdst)=localtime(time);
+ $y+=1900;
+ $m++;
+ }
+ &Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk);
+ $Curr{"Y"}=$y;
+ $Curr{"M"}=$m;
+ $Curr{"D"}=$d;
+ $Curr{"H"}=$h;
+ $Curr{"Mn"}=$mn;
+ $Curr{"S"}=$s;
+ $Curr{"AmPm"}=$ampm;
+ $Curr{"Now"}=&Date_Join($y,$m,$d,$h,$mn,$s);
+
+ $Curr{"Debug"}=$Curr{"DebugVal"};
+
+ # If we're in array context, let's return a list of config variables
+ # that could be passed to Date_Init to get the same state as we're
+ # currently in.
+ if (wantarray) {
+ # Some special variables that have to be in a specific order
+ my(@special)=qw(IgnoreGlobalCnf GlobalCnf PersonalCnf PersonalCnfPath);
+ my(%tmp)=map { $_,1 } @special;
+ my(@tmp,$key,$val);
+ foreach $key (@special) {
+ $val=$Cnf{$key};
+ push(@tmp,"$key=$val");
+ }
+ foreach $key (keys %Cnf) {
+ next if (exists $tmp{$key});
+ $val=$Cnf{$key};
+ push(@tmp,"$key=$val");
+ }
+ return @tmp;
+ }
+ return ();
+}
+
+sub ParseDateString {
+ print "DEBUG: ParseDateString\n" if ($Curr{"Debug"} =~ /trace/);
+ local($_)=@_;
+ return "" if (! $_);
+
+ my($y,$m,$d,$h,$mn,$s,$i,$wofm,$dofw,$wk,$tmp,$z,$num,$err,$iso,$ampm)=();
+ my($date,$z2,$delta,$from,$falsefrom,$to,$which,$midnight)=();
+
+ # We only need to reinitialize if we have to determine what NOW is.
+ &Date_Init() if (! $Curr{"InitDone"} or $Cnf{"UpdateCurrTZ"});
+
+ my($L)=$Cnf{"Language"};
+ my($type)=$Cnf{"DateFormat"};
+
+ # Mode is set in DateCalc. ParseDate only overrides it if the string
+ # contains a mode.
+ if ($Lang{$L}{"Exact"} &&
+ s/$Lang{$L}{"Exact"}//) {
+ $Curr{"Mode"}=0;
+ } elsif ($Lang{$L}{"Approx"} &&
+ s/$Lang{$L}{"Approx"}//) {
+ $Curr{"Mode"}=1;
+ } elsif ($Lang{$L}{"Business"} &&
+ s/$Lang{$L}{"Business"}//) {
+ $Curr{"Mode"}=2;
+ } elsif (! exists $Curr{"Mode"}) {
+ $Curr{"Mode"}=0;
+ }
+
+ # Unfortunately, some deltas can be parsed as dates. An example is
+ # 1 second == 1 2nd == 1 2
+ # But, some dates can be parsed as deltas. The most important being:
+ # 1998010101:00:00
+ # We'll check to see if a "date" can be parsed as a delta. If so, we'll
+ # assume that it is a delta (since they are much simpler, it is much
+ # less likely that we'll mistake a delta for a date than vice versa)
+ # unless it is an ISO-8601 date.
+ #
+ # This is important because we are using DateCalc to test whether a
+ # string is a date or a delta. Dates are tested first, so we need to
+ # be able to pass a delta into this routine and have it correctly NOT
+ # interpreted as a date.
+ #
+ # We will insist that the string contain something other than digits and
+ # colons so that the following will get correctly interpreted as a date
+ # rather than a delta:
+ # 12:30
+ # 19980101
+
+ $delta="";
+ $delta=&ParseDateDelta($_) if (/[^:0-9]/);
+
+ # Put parse in a simple loop for an easy exit.
+ PARSE: {
+ my(@tmp)=&Date_Split($_);
+ if (@tmp) {
+ ($y,$m,$d,$h,$mn,$s)=@tmp;
+ last PARSE;
+ }
+
+ # Fundamental regular expressions
+
+ my($month)=$Lang{$L}{"Month"}; # (jan|january|...)
+ my(%month)=%{ $Lang{$L}{"MonthH"} }; # { jan=>1, ... }
+ my($week)=$Lang{$L}{"Week"}; # (mon|monday|...)
+ my(%week)=%{ $Lang{$L}{"WeekH"} }; # { mon=>1, monday=>1, ... }
+ my($wom)=$Lang{$L}{"WoM"}; # (1st|...|fifth|last)
+ my(%wom)=%{ $Lang{$L}{"WoMH"} }; # { 1st=>1,... fifth=>5,last=>-1 }
+ my($dom)=$Lang{$L}{"DoM"}; # (1st|first|...31st)
+ my(%dom)=%{ $Lang{$L}{"DoMH"} }; # { 1st=>1, first=>1, ... }
+ my($ampmexp)=$Lang{$L}{"AmPm"}; # (am|pm)
+ my($timeexp)=$Lang{$L}{"Times"}; # (noon|midnight)
+ my($now)=$Lang{$L}{"Now"}; # (now|today)
+ my($offset)=$Lang{$L}{"Offset"}; # (yesterday|tomorrow)
+ my($zone)=$Zone{"zones"} . '(?:\s+|$)'; # (edt|est|...)\s+
+ my($day)='\s*'.$Lang{$L}{"Dabb"}; # \s*(?:d|day|days)
+ my($mabb)='\s*'.$Lang{$L}{"Mabb"}; # \s*(?:mon|month|months)
+ my($wkabb)='\s*'.$Lang{$L}{"Wabb"}; # \s*(?:w|wk|week|weeks)
+ my($next)='\s*'.$Lang{$L}{"Next"}; # \s*(?:next)
+ my($prev)='\s*'.$Lang{$L}{"Prev"}; # \s*(?:last|previous)
+ my($past)='\s*'.$Lang{$L}{"Past"}; # \s*(?:ago)
+ my($future)='\s*'.$Lang{$L}{"Future"}; # \s*(?:in)
+ my($later)='\s*'.$Lang{$L}{"Later"}; # \s*(?:later)
+ my($at)=$Lang{$L}{"At"}; # (?:at)
+ my($of)='\s*'.$Lang{$L}{"Of"}; # \s*(?:in|of)
+ my($on)='(?:\s*'.$Lang{$L}{"On"}.'\s*|\s+)';
+ # \s*(?:on)\s* or \s+
+ my($last)='\s*'.$Lang{$L}{"Last"}; # \s*(?:last)
+ my($hm)=$Lang{$L}{"SepHM"}; # :
+ my($ms)=$Lang{$L}{"SepMS"}; # :
+ my($ss)=$Lang{$L}{"SepSS"}; # .
+
+ # Other regular expressions
+
+ my($D4)='(\d{4})'; # 4 digits (yr)
+ my($YY)='(\d{4}|\d{2})'; # 2 or 4 digits (yr)
+ my($DD)='(\d{2})'; # 2 digits (mon/day/hr/min/sec)
+ my($D) ='(\d{1,2})'; # 1 or 2 digit (mon/day/hr)
+ my($FS)="(?:$ss\\d+)?"; # fractional secs
+ my($sep)='[\/.-]'; # non-ISO8601 m/d/yy separators
+ # absolute time zone +0700 (GMT)
+ my($hzone)='(?:[0-1][0-9]|2[0-3])'; # 00 - 23
+ my($mzone)='(?:[0-5][0-9])'; # 00 - 59
+ my($zone2)='(?:\s*([+-](?:'."$hzone$mzone|$hzone:$mzone|$hzone))".
+ # +0700 +07:00 -07
+ '(?:\s*\([^)]+\))?)'; # (GMT)
+
+ # A regular expression for the time EXCEPT for the hour part
+ my($mnsec)="$hm$DD(?:$ms$DD$FS)?(?:\\s*$ampmexp)?";
+
+ # A special regular expression for /YYYY:HH:MN:SS used by Apache
+ my($apachetime)='(/\d{4}):' . "$DD$hm$DD$ms$DD";
+
+ my($time)="";
+ $ampm="";
+ $date="";
+
+ # Substitute all special time expressions.
+ if (/(^|[^a-z])$timeexp($|[^a-z])/i) {
+ $tmp=$2;
+ $tmp=$Lang{$L}{"TimesH"}{lc($tmp)};
+ s/(^|[^a-z])$timeexp($|[^a-z])/$1 $tmp $3/i;
+ }
+
+ # Remove some punctuation
+ s/[,]/ /g;
+
+ # Make sure that ...7EST works (i.e. a timezone immediately following
+ # a digit.
+ s/(\d)$zone(\s+|$|[0-9])/$1 $2$3/i;
+ $zone = '\s+'.$zone;
+
+ # Remove the time
+ $iso=1;
+ $midnight=0;
+ $from="24${hm}00(?:${ms}00)?";
+ $falsefrom="${hm}24${ms}00"; # Don't trap XX:24:00
+ $to="00${hm}00${ms}00";
+ $midnight=1 if (!/$falsefrom/ && s/$from/$to/);
+
+ $h=$mn=$s=0;
+ if (/$D$mnsec/i || /$ampmexp/i) {
+ $iso=0;
+ $tmp=0;
+ $tmp=1 if (/$mnsec$zone2?\s*$/i); # or /$mnsec$zone/ ??
+ $tmp=0 if (/$ampmexp/i);
+ if (s/$apachetime$zone()/$1 /i ||
+ s/$apachetime$zone2?/$1 /i ||
+ s/(^|[^a-z])$at\s*$D$mnsec$zone()/$1 /i ||
+ s/(^|[^a-z])$at\s*$D$mnsec$zone2?/$1 /i ||
+ s/(^|[^0-9])(\d)$mnsec$zone()/$1 /i ||
+ s/(^|[^0-9])(\d)$mnsec$zone2?/$1 /i ||
+ (s/(t)$D$mnsec$zone()/$1 /i and (($iso=-$tmp) || 1)) ||
+ (s/(t)$D$mnsec$zone2?/$1 /i and (($iso=-$tmp) || 1)) ||
+ (s/()$DD$mnsec$zone()/ /i and (($iso=$tmp) || 1)) ||
+ (s/()$DD$mnsec$zone2?/ /i and (($iso=$tmp) || 1)) ||
+ s/(^|$at\s*|\s+)$D()()\s*$ampmexp$zone()/ /i ||
+ s/(^|$at\s*|\s+)$D()()\s*$ampmexp$zone2?/ /i ||
+ 0
+ ) {
+ ($h,$mn,$s,$ampm,$z,$z2)=($2,$3,$4,$5,$6,$7);
+ if (defined ($z)) {
+ if ($z =~ /^[+-]\d{2}:\d{2}$/) {
+ $z=~ s/://;
+ } elsif ($z =~ /^[+-]\d{2}$/) {
+ $z .= "00";
+ }
+ }
+ $time=1;
+ &Date_TimeCheck(\$h,\$mn,\$s,\$ampm);
+ $y=$m=$d="";
+ # We're going to be calling TimeCheck again below (when we check the
+ # final date), so get rid of $ampm so that we don't have an error
+ # due to "15:30:00 PM". It'll get reset below.
+ $ampm="";
+ if (/^\s*$/) {
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ last PARSE;
+ }
+ }
+ }
+ $time=0 if ($time ne "1");
+ s/\s+$//;
+ s/^\s+//;
+
+ # dateTtime ISO 8601 formats
+ my($orig)=$_;
+ s/t$//i if ($iso<0);
+
+ # Parse ISO 8601 dates now (which may still have a zone stuck to it).
+ if ( ($iso && /^([0-9-]+(?:W[0-9-]+)?)$zone?$/i) ||
+ ($iso && /^([0-9-]+(?:W[0-9-]+)?)$zone2?$/i) ||
+ ($iso && /^([0-9-]+(?:T[0-9-]+)?)$zone?$/i) ||
+ ($iso && /^([0-9-]+(?:T[0-9-]+)?)$zone2?$/i) ||
+ 0) {
+
+ # ISO 8601 dates
+ ($_,$z,$z2) = ($1,$2);
+ s,-, ,g; # Change all ISO8601 seps to spaces
+ s/^\s+//;
+ s/\s+$//;
+
+ if (/^$D4\s*$DD\s*$DD\s*t?$DD(?:$DD(?:$DD(\d*))?)?$/i ||
+ /^$DD\s+$DD\s*$DD\s*t?$DD(?:$DD(?:$DD(\d*))?)?$/i ||
+ 0
+ ) {
+ # ISO 8601 Dates with times
+ # YYYYMMDDHHMNSSFFFF...
+ # YYYYMMDDHHMNSS
+ # YYYYMMDDHHMN
+ # YYYYMMDDHH
+ # YY MMDDHHMNSSFFFF...
+ # YY MMDDHHMNSS
+ # YY MMDDHHMN
+ # YY MMDDHH
+ ($y,$m,$d,$h,$mn,$s,$tmp)=($1,$2,$3,$4,$5,$6,$7);
+ if ($h==24 && (! defined $mn || $mn==0) && (! defined $s || $s==0)) {
+ $h=0;
+ $midnight=1;
+ }
+ $z = "" if (! defined $h);
+ return "" if ($time && defined $h);
+ last PARSE;
+
+ } elsif (/^$D4(?:\s*$DD(?:\s*$DD)?)?$/ ||
+ /^$DD(?:\s+$DD(?:\s*$DD)?)?$/) {
+ # ISO 8601 Dates
+ # YYYYMMDD
+ # YYYYMM
+ # YYYY
+ # YY MMDD
+ # YY MM
+ # YY
+ ($y,$m,$d)=($1,$2,$3);
+ last PARSE;
+
+ } elsif (/^$YY\s+$D\s+$D/) {
+ # YY-M-D
+ ($y,$m,$d)=($1,$2,$3);
+ last PARSE;
+
+ } elsif (/^$YY\s*W$DD\s*(\d)?$/i) {
+ # YY-W##-D
+ ($y,$wofm,$dofw)=($1,$2,$3);
+ ($y,$m,$d)=&Date_NthWeekOfYear($y,$wofm,$dofw);
+ last PARSE;
+
+ } elsif (/^$D4\s*(\d{3})$/ ||
+ /^$DD\s*(\d{3})$/) {
+ # YYDOY
+ ($y,$which)=($1,$2);
+ ($y,$m,$d)=&Date_NthDayOfYear($y,$which);
+ last PARSE;
+
+ } elsif ($iso<0) {
+ # We confused something like 1999/August12:00:00
+ # with a dateTtime format
+ $_=$orig;
+
+ } else {
+ return "";
+ }
+ }
+
+ # All deltas that are not ISO-8601 dates are NOT dates.
+ return "" if ($Curr{"InCalc"} && $delta);
+ if ($delta) {
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ return &DateCalc_DateDelta($Curr{"Now"},$delta);
+ }
+
+ # Check for some special types of dates (next, prev)
+ foreach $from (keys %{ $Lang{$L}{"Repl"} }) {
+ $to=$Lang{$L}{"Repl"}{$from};
+ s/(^|[^a-z])$from($|[^a-z])/$1$to$2/i;
+ }
+ if (/$wom/i || /$future/i || /$later/i || /$past/i ||
+ /$next/i || /$prev/i || /^$week$/i || /$wkabb/i) {
+ $tmp=0;
+
+ if (/^$wom\s*$week$of\s*$month\s*$YY?$/i) {
+ # last friday in October 95
+ ($wofm,$dofw,$m,$y)=($1,$2,$3,$4);
+ # fix $m, $y
+ return "" if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
+ $dofw=$week{lc($dofw)};
+ $wofm=$wom{lc($wofm)};
+ # Get the first day of the month
+ $date=&Date_Join($y,$m,1,$h,$mn,$s);
+ if ($wofm==-1) {
+ $date=&DateCalc_DateDelta($date,"+0:1:0:0:0:0:0",\$err,0);
+ $date=&Date_GetPrev($date,$dofw,0);
+ } else {
+ for ($i=0; $i<$wofm; $i++) {
+ if ($i==0) {
+ $date=&Date_GetNext($date,$dofw,1);
+ } else {
+ $date=&Date_GetNext($date,$dofw,0);
+ }
+ }
+ }
+ last PARSE;
+
+ } elsif (/^$last$day$of\s*$month(?:$of?\s*$YY)?/i) {
+ # last day in month
+ ($m,$y)=($1,$2);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $y=&Date_FixYear($y) if (! defined $y or length($y)<4);
+ $m=$month{lc($m)};
+ $d=&Date_DaysInMonth($m,$y);
+ last PARSE;
+
+ } elsif (/^$week$/i) {
+ # friday
+ ($dofw)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&Date_GetPrev($Curr{"Now"},$Cnf{"FirstDay"},1);
+ $date=&Date_GetNext($date,$dofw,1,$h,$mn,$s);
+ last PARSE;
+
+ } elsif (/^$next\s*$week$/i) {
+ # next friday
+ ($dofw)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&Date_GetNext($Curr{"Now"},$dofw,0,$h,$mn,$s);
+ last PARSE;
+
+ } elsif (/^$prev\s*$week$/i) {
+ # last friday
+ ($dofw)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&Date_GetPrev($Curr{"Now"},$dofw,0,$h,$mn,$s);
+ last PARSE;
+
+ } elsif (/^$next$wkabb$/i) {
+ # next week
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"+0:0:1:0:0:0:0",\$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+ } elsif (/^$prev$wkabb$/i) {
+ # last week
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"-0:0:1:0:0:0:0",\$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+
+ } elsif (/^$next$mabb$/i) {
+ # next month
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"+0:1:0:0:0:0:0",\$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+ } elsif (/^$prev$mabb$/i) {
+ # last month
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"-0:1:0:0:0:0:0",\$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+
+ } elsif (/^$future\s*(\d+)$day$/i ||
+ /^(\d+)$day$later$/i) {
+ # in 2 days
+ # 2 days later
+ ($num)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"+0:0:0:$num:0:0:0",
+ \$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+ } elsif (/^(\d+)$day$past$/i) {
+ # 2 days ago
+ ($num)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"-0:0:0:$num:0:0:0",
+ \$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+
+ } elsif (/^$future\s*(\d+)$wkabb$/i ||
+ /^(\d+)$wkabb$later$/i) {
+ # in 2 weeks
+ # 2 weeks later
+ ($num)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"+0:0:$num:0:0:0:0",
+ \$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+ } elsif (/^(\d+)$wkabb$past$/i) {
+ # 2 weeks ago
+ ($num)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"-0:0:$num:0:0:0:0",
+ \$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+
+ } elsif (/^$future\s*(\d+)$mabb$/i ||
+ /^(\d+)$mabb$later$/i) {
+ # in 2 months
+ # 2 months later
+ ($num)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"+0:$num:0:0:0:0:0",
+ \$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+ } elsif (/^(\d+)$mabb$past$/i) {
+ # 2 months ago
+ ($num)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"-0:$num:0:0:0:0:0",
+ \$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+
+ } elsif (/^$week$future\s*(\d+)$wkabb$/i ||
+ /^$week\s*(\d+)$wkabb$later$/i) {
+ # friday in 2 weeks
+ # friday 2 weeks later
+ ($dofw,$num)=($1,$2);
+ $tmp="+";
+ } elsif (/^$week\s*(\d+)$wkabb$past$/i) {
+ # friday 2 weeks ago
+ ($dofw,$num)=($1,$2);
+ $tmp="-";
+ } elsif (/^$future\s*(\d+)$wkabb$on$week$/i ||
+ /^(\d+)$wkabb$later$on$week$/i) {
+ # in 2 weeks on friday
+ # 2 weeks later on friday
+ ($num,$dofw)=($1,$2);
+ $tmp="+"
+ } elsif (/^(\d+)$wkabb$past$on$week$/i) {
+ # 2 weeks ago on friday
+ ($num,$dofw)=($1,$2);
+ $tmp="-";
+ } elsif (/^$week\s*$wkabb$/i) {
+ # monday week (British date: in 1 week on monday)
+ $dofw=$1;
+ $num=1;
+ $tmp="+";
+ } elsif (/^$now\s*$wkabb$/i) {
+ # today week (British date: 1 week from today)
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},"+0:0:1:0:0:0:0",\$err,0);
+ $date=&Date_SetTime($date,$h,$mn,$s) if (defined $h);
+ last PARSE;
+ } elsif (/^$offset\s*$wkabb$/i) {
+ # tomorrow week (British date: 1 week from tomorrow)
+ ($offset)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $offset=$Lang{$L}{"OffsetH"}{lc($offset)};
+ $date=&DateCalc_DateDelta($Curr{"Now"},$offset,\$err,0);
+ $date=&DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0);
+ if ($time) {
+ return ""
+ if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
+ $date=&Date_SetTime($date,$h,$mn,$s);
+ }
+ last PARSE;
+ }
+
+ if ($tmp) {
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=&DateCalc_DateDelta($Curr{"Now"},
+ $tmp . "0:0:$num:0:0:0:0",\$err,0);
+ $date=&Date_GetPrev($date,$Cnf{"FirstDay"},1);
+ $date=&Date_GetNext($date,$dofw,1,$h,$mn,$s);
+ last PARSE;
+ }
+ }
+
+ # Change (2nd, second) to 2
+ $tmp=0;
+ if (/(^|[^a-z0-9])$dom($|[^a-z0-9])/i) {
+ if (/^\s*$dom\s*$/) {
+ ($d)=($1);
+ $d=$dom{lc($d)};
+ $m=$Curr{"M"};
+ last PARSE;
+ }
+ my $from = $2;
+ my $to = $dom{ lc($from) };
+ s/(^|[^a-z])$from($|[^a-z])/$1 $to $2/i;
+ s/^\s+//;
+ s/\s+$//;
+ }
+
+ # Another set of special dates (Nth week)
+ if (/^$D\s*$week(?:$of?\s*$YY)?$/i) {
+ # 22nd sunday in 1996
+ ($which,$dofw,$y)=($1,$2,$3);
+ $y=$Curr{"Y"} if (! $y);
+ $y--; # previous year
+ $tmp=&Date_GetNext("$y-12-31",$dofw,0);
+ if ($which>1) {
+ $tmp=&DateCalc_DateDelta($tmp,"+0:0:".($which-1).":0:0:0:0",\$err,0);
+ }
+ ($y,$m,$d)=(&Date_Split($tmp, 1))[0..2];
+ last PARSE;
+ } elsif (/^$week$wkabb\s*$D(?:$of?\s*$YY)?$/i ||
+ /^$week\s*$D$wkabb(?:$of?\s*$YY)?$/i) {
+ # sunday week 22 in 1996
+ # sunday 22nd week in 1996
+ ($dofw,$which,$y)=($1,$2,$3);
+ ($y,$m,$d)=&Date_NthWeekOfYear($y,$which,$dofw);
+ last PARSE;
+ }
+
+ # Get rid of day of week
+ if (/(^|[^a-z])$week($|[^a-z])/i) {
+ $wk=$2;
+ (s/(^|[^a-z])$week,/$1 /i) ||
+ s/(^|[^a-z])$week($|[^a-z])/$1 $3/i;
+ s/^\s+//;
+ s/\s+$//;
+ }
+
+ {
+ # So that we can handle negative epoch times, let's convert
+ # things like "epoch -" to "epochNEGATIVE " before we strip out
+ # the $sep chars, which include '-'.
+ s,epoch\s*-,epochNEGATIVE ,g;
+
+ # Non-ISO8601 dates
+ s,\s*$sep\s*, ,g; # change all non-ISO8601 seps to spaces
+ s,^\s*,,; # remove leading/trailing space
+ s,\s*$,,;
+
+ if (/^$D\s+$D(?:\s+$YY)?$/) {
+ # MM DD YY (DD MM YY non-US)
+ ($m,$d,$y)=($1,$2,$3);
+ ($m,$d)=($d,$m) if ($type ne "US");
+ last PARSE;
+
+ } elsif (/^$D4\s*$D\s*$D$/) {
+ # YYYY MM DD
+ ($y,$m,$d)=($1,$2,$3);
+ last PARSE;
+
+ } elsif (s/(^|[^a-z])$month($|[^a-z])/$1 $3/i) {
+ ($m)=($2);
+
+ if (/^\s*$D(?:\s+$YY)?\s*$/) {
+ # mmm DD YY
+ # DD mmm YY
+ # DD YY mmm
+ ($d,$y)=($1,$2);
+ last PARSE;
+
+ } elsif (/^\s*$D$D4\s*$/) {
+ # mmm DD YYYY
+ # DD mmm YYYY
+ # DD YYYY mmm
+ ($d,$y)=($1,$2);
+ last PARSE;
+
+ } elsif (/^\s*$D4\s*$D\s*$/) {
+ # mmm YYYY DD
+ # YYYY mmm DD
+ # YYYY DD mmm
+ ($y,$d)=($1,$2);
+ last PARSE;
+
+ } elsif (/^\s*$D4\s*$/) {
+ # mmm YYYY
+ # YYYY mmm
+ ($y,$d)=($1,1);
+ last PARSE;
+
+ } else {
+ return "";
+ }
+
+ } elsif (/^epochNEGATIVE (\d+)$/) {
+ $s=$1;
+ $date=&DateCalc("1970-01-01 00:00 GMT","-0:0:$s");
+ } elsif (/^epoch\s*(\d+)$/i) {
+ $s=$1;
+ $date=&DateCalc("1970-01-01 00:00 GMT","+0:0:$s");
+
+ } elsif (/^$now$/i) {
+ # now, today
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $date=$Curr{"Now"};
+ if ($time) {
+ return ""
+ if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
+ $date=&Date_SetTime($date,$h,$mn,$s);
+ }
+ last PARSE;
+
+ } elsif (/^$offset$/i) {
+ # yesterday, tomorrow
+ ($offset)=($1);
+ &Date_Init() if (! $Cnf{"UpdateCurrTZ"});
+ $offset=$Lang{$L}{"OffsetH"}{lc($offset)};
+ $date=&DateCalc_DateDelta($Curr{"Now"},$offset,\$err,0);
+ if ($time) {
+ return ""
+ if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
+ $date=&Date_SetTime($date,$h,$mn,$s);
+ }
+ last PARSE;
+
+ } else {
+ return "";
+ }
+ }
+ }
+
+ if (! $date) {
+ return "" if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
+ $date=&Date_Join($y,$m,$d,$h,$mn,$s);
+ }
+ $date=&Date_ConvTZ($date,$z);
+ if ($midnight) {
+ $date=&DateCalc_DateDelta($date,"+0:0:0:1:0:0:0");
+ }
+ return $date;
+}
+
+sub ParseDate {
+ print "DEBUG: ParseDate\n" if ($Curr{"Debug"} =~ /trace/);
+ &Date_Init() if (! $Curr{"InitDone"});
+ my($args,@args,@a,$ref,$date)=();
+ @a=@_;
+
+ # @a : is the list of args to ParseDate. Currently, only one argument
+ # is allowed and it must be a scalar (or a reference to a scalar)
+ # or a reference to an array.
+
+ if ($#a!=0) {
+ print "ERROR: Invalid number of arguments to ParseDate.\n";
+ return "";
+ }
+ $args=$a[0];
+ $ref=ref $args;
+ if (! $ref) {
+ return $args if (&Date_Split($args));
+ @args=($args);
+ } elsif ($ref eq "ARRAY") {
+ @args=@$args;
+ } elsif ($ref eq "SCALAR") {
+ return $$args if (&Date_Split($$args));
+ @args=($$args);
+ } else {
+ print "ERROR: Invalid arguments to ParseDate.\n";
+ return "";
+ }
+ @a=@args;
+
+ # @args : a list containing all the arguments (dereferenced if appropriate)
+ # @a : a list containing all the arguments currently being examined
+ # $ref : nil, "SCALAR", or "ARRAY" depending on whether a scalar, a
+ # reference to a scalar, or a reference to an array was passed in
+ # $args : the scalar or refererence passed in
+
+ PARSE: while($#a>=0) {
+ $date=join(" ",@a);
+ $date=&ParseDateString($date);
+ last if ($date);
+ pop(@a);
+ } # PARSE
+
+ splice(@args,0,$#a + 1);
+ @$args= @args if (defined $ref and $ref eq "ARRAY");
+ $date;
+}
+
+sub Date_Cmp {
+ my($D1,$D2)=@_;
+ my($date1)=&ParseDateString($D1);
+ my($date2)=&ParseDateString($D2);
+ return $date1 cmp $date2;
+}
+
+# **NOTE**
+# The calc routines all call parse routines, so it is never necessary to
+# call Date_Init in the calc routines.
+sub DateCalc {
+ print "DEBUG: DateCalc\n" if ($Curr{"Debug"} =~ /trace/);
+ my($D1,$D2,@arg)=@_;
+ my($ref,$err,$errref,$mode)=();
+
+ $errref=shift(@arg);
+ $ref=0;
+ if (defined $errref) {
+ if (ref $errref) {
+ $mode=shift(@arg);
+ $ref=1;
+ } else {
+ $mode=$errref;
+ $errref="";
+ }
+ }
+
+ my(@date,@delta,$ret,$tmp,$old)=();
+
+ if (defined $mode and $mode>=0 and $mode<=3) {
+ $Curr{"Mode"}=$mode;
+ } else {
+ $Curr{"Mode"}=0;
+ }
+
+ $old=$Curr{"InCalc"};
+ $Curr{"InCalc"}=1;
+
+ if ($tmp=&ParseDateString($D1)) {
+ # If we've already parsed the date, we don't want to do it a second
+ # time (so we don't convert timezones twice).
+ if (&Date_Split($D1)) {
+ push(@date,$D1);
+ } else {
+ push(@date,$tmp);
+ }
+ } elsif ($tmp=&ParseDateDelta($D1)) {
+ push(@delta,$tmp);
+ } else {
+ $$errref=1 if ($ref);
+ return;
+ }
+
+ if ($tmp=&ParseDateString($D2)) {
+ if (&Date_Split($D2)) {
+ push(@date,$D2);
+ } else {
+ push(@date,$tmp);
+ }
+ } elsif ($tmp=&ParseDateDelta($D2)) {
+ push(@delta,$tmp);
+ } else {
+ $$errref=2 if ($ref);
+ return;
+ }
+ $mode=$Curr{"Mode"};
+ $Curr{"InCalc"}=$old;
+
+ if ($#date==1) {
+ $ret=&DateCalc_DateDate(@date,$mode);
+ } elsif ($#date==0) {
+ $ret=&DateCalc_DateDelta(@date,@delta,\$err,$mode);
+ $$errref=$err if ($ref);
+ } else {
+ $ret=&DateCalc_DeltaDelta(@delta,$mode);
+ }
+ $ret;
+}
+
+sub ParseDateDelta {
+ print "DEBUG: ParseDateDelta\n" if ($Curr{"Debug"} =~ /trace/);
+ my($args,@args,@a,$ref)=();
+ local($_)=();
+ @a=@_;
+
+ # @a : is the list of args to ParseDateDelta. Currently, only one argument
+ # is allowed and it must be a scalar (or a reference to a scalar)
+ # or a reference to an array.
+
+ if ($#a!=0) {
+ print "ERROR: Invalid number of arguments to ParseDateDelta.\n";
+ return "";
+ }
+ $args=$a[0];
+ $ref=ref $args;
+ if (! $ref) {
+ @args=($args);
+ } elsif ($ref eq "ARRAY") {
+ @args=@$args;
+ } elsif ($ref eq "SCALAR") {
+ @args=($$args);
+ } else {
+ print "ERROR: Invalid arguments to ParseDateDelta.\n";
+ return "";
+ }
+ @a=@args;
+
+ # @args : a list containing all the arguments (dereferenced if appropriate)
+ # @a : a list containing all the arguments currently being examined
+ # $ref : nil, "SCALAR", or "ARRAY" depending on whether a scalar, a
+ # reference to a scalar, or a reference to an array was passed in
+ # $args : the scalar or refererence passed in
+
+ my(@colon,@delta,$delta,$dir,$colon,$sign,$val)=();
+ my($len,$tmp,$tmp2,$tmpl)=();
+ my($from,$to)=();
+ my($workweek)=$Cnf{"WorkWeekEnd"}-$Cnf{"WorkWeekBeg"}+1;
+
+ &Date_Init() if (! $Curr{"InitDone"});
+ # A sign can be a sequence of zero or more + and - signs, this
+ # allows for deltas like '+ -2 days'.
+ my($signexp)='((?:[+-]\s*)*)';
+ my($numexp)='(\d+)';
+ my($exp1)="(?: \\s* $signexp \\s* $numexp \\s*)";
+ my($yexp,$mexp,$wexp,$dexp,$hexp,$mnexp,$sexp,$i)=();
+ $yexp=$mexp=$wexp=$dexp=$hexp=$mnexp=$sexp="()()";
+ $yexp ="(?: $exp1 ". $Lang{$Cnf{"Language"}}{"Yabb"} .")?";
+ $mexp ="(?: $exp1 ". $Lang{$Cnf{"Language"}}{"Mabb"} .")?";
+ $wexp ="(?: $exp1 ". $Lang{$Cnf{"Language"}}{"Wabb"} .")?";
+ $dexp ="(?: $exp1 ". $Lang{$Cnf{"Language"}}{"Dabb"} .")?";
+ $hexp ="(?: $exp1 ". $Lang{$Cnf{"Language"}}{"Habb"} .")?";
+ $mnexp="(?: $exp1 ". $Lang{$Cnf{"Language"}}{"MNabb"}.")?";
+ $sexp ="(?: $exp1 ". $Lang{$Cnf{"Language"}}{"Sabb"} ."?)?";
+ my($future)=$Lang{$Cnf{"Language"}}{"Future"};
+ my($later)=$Lang{$Cnf{"Language"}}{"Later"};
+ my($past)=$Lang{$Cnf{"Language"}}{"Past"};
+
+ $delta="";
+ PARSE: while (@a) {
+ $_ = join(" ", grep {defined;} @a);
+ s/\s+$//;
+ last if ($_ eq "");
+
+ # Mode is set in DateCalc. ParseDateDelta only overrides it if the
+ # string contains a mode.
+ if ($Lang{$Cnf{"Language"}}{"Exact"} &&
+ s/$Lang{$Cnf{"Language"}}{"Exact"}//) {
+ $Curr{"Mode"}=0;
+ } elsif ($Lang{$Cnf{"Language"}}{"Approx"} &&
+ s/$Lang{$Cnf{"Language"}}{"Approx"}//) {
+ $Curr{"Mode"}=1;
+ } elsif ($Lang{$Cnf{"Language"}}{"Business"} &&
+ s/$Lang{$Cnf{"Language"}}{"Business"}//) {
+ $Curr{"Mode"}=2;
+ } elsif (! exists $Curr{"Mode"}) {
+ $Curr{"Mode"}=0;
+ }
+ $workweek=7 if ($Curr{"Mode"} != 2);
+
+ foreach $from (keys %{ $Lang{$Cnf{"Language"}}{"Repl"} }) {
+ $to=$Lang{$Cnf{"Language"}}{"Repl"}{$from};
+ s/(^|[^a-z])$from($|[^a-z])/$1$to$2/i;
+ }
+
+ # in or ago
+ #
+ # We need to make sure that $later, $future, and $past don't contain each
+ # other... Romanian pointed this out where $past is "in urma" and $future
+ # is "in". When they do, we have to take this into account.
+ # $len length of best match (greatest wins)
+ # $tmp string after best match
+ # $dir direction (prior, after) of best match
+ #
+ # $tmp2 string before/after current match
+ # $tmpl length of current match
+
+ $len=0;
+ $tmp=$_;
+ $dir=1;
+
+ $tmp2=$_;
+ if ($tmp2 =~ s/(^|[^a-z])($future)($|[^a-z])/$1 $3/i) {
+ $tmpl=length($2);
+ if ($tmpl>$len) {
+ $tmp=$tmp2;
+ $dir=1;
+ $len=$tmpl;
+ }
+ }
+
+ $tmp2=$_;
+ if ($tmp2 =~ s/(^|[^a-z])($later)($|[^a-z])/$1 $3/i) {
+ $tmpl=length($2);
+ if ($tmpl>$len) {
+ $tmp=$tmp2;
+ $dir=1;
+ $len=$tmpl;
+ }
+ }
+
+ $tmp2=$_;
+ if ($tmp2 =~ s/(^|[^a-z])($past)($|[^a-z])/$1 $3/i) {
+ $tmpl=length($2);
+ if ($tmpl>$len) {
+ $tmp=$tmp2;
+ $dir=-1;
+ $len=$tmpl;
+ }
+ }
+
+ $_ = $tmp;
+ s/\s*$//;
+
+ # the colon part of the delta
+ $colon="";
+ if (s/($signexp?$numexp?(:($signexp?$numexp)?){1,6})$//) {
+ $colon=$1;
+ s/\s+$//;
+ }
+ @colon=split(/:/,$colon);
+
+ # the non-colon part of the delta
+ $sign="+";
+ @delta=();
+ $i=6;
+ foreach $exp1 ($yexp,$mexp,$wexp,$dexp,$hexp,$mnexp,$sexp) {
+ last if ($#colon>=$i--);
+ $val=0;
+ if (s/^$exp1//ix) {
+ $val=$2 if ($2);
+ $sign=$1 if ($1);
+ }
+
+ # Collapse a sign like '+ -' into a single character like '-',
+ # by counting the occurrences of '-'.
+ #
+ $sign =~ s/\s+//g;
+ $sign =~ tr/+//d;
+ my $count = ($sign =~ tr/-//d);
+ die "bad characters in sign: $sign" if length $sign;
+ $sign = $count % 2 ? '-' : '+';
+
+ push(@delta,"$sign$val");
+ }
+ if (! /^\s*$/) {
+ pop(@a);
+ next PARSE;
+ }
+
+ # make sure that the colon part has a sign
+ for ($i=0; $i<=$#colon; $i++) {
+ $val=0;
+ if ($colon[$i] =~ /^$signexp$numexp?/) {
+ $val=$2 if ($2);
+ $sign=$1 if ($1);
+ }
+ $colon[$i] = "$sign$val";
+ }
+
+ # combine the two
+ push(@delta,@colon);
+ if ($dir<0) {
+ for ($i=0; $i<=$#delta; $i++) {
+ $delta[$i] =~ tr/-+/+-/;
+ }
+ }
+
+ # form the delta and shift off the valid part
+ $delta=join(":",@delta);
+ splice(@args,0,$#a+1);
+ @$args=@args if (defined $ref and $ref eq "ARRAY");
+ last PARSE;
+ }
+
+ $delta=&Delta_Normalize($delta,$Curr{"Mode"});
+ return $delta;
+}
+
+sub UnixDate {
+ print "DEBUG: UnixDate\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,@format)=@_;
+ local($_)=();
+ my($format,%f,$out,@out,$c,$date1,$date2,$tmp)=();
+ my($scalar)=();
+ $date=&ParseDateString($date);
+ return if (! $date);
+
+ my($y,$m,$d,$h,$mn,$s)=($f{"Y"},$f{"m"},$f{"d"},$f{"H"},$f{"M"},$f{"S"})=
+ &Date_Split($date, 1);
+ $f{"y"}=substr $f{"Y"},2;
+ &Date_Init() if (! $Curr{"InitDone"});
+
+ if (! wantarray) {
+ $format=join(" ",@format);
+ @format=($format);
+ $scalar=1;
+ }
+
+ # month, week
+ $_=$m;
+ s/^0//;
+ $f{"b"}=$f{"h"}=$Lang{$Cnf{"Language"}}{"MonL"}[$_-1];
+ $f{"B"}=$Lang{$Cnf{"Language"}}{"MonthL"}[$_-1];
+ $_=$m;
+ s/^0/ /;
+ $f{"f"}=$_;
+ $f{"U"}=&Date_WeekOfYear($m,$d,$y,7);
+ $f{"W"}=&Date_WeekOfYear($m,$d,$y,1);
+
+ # check week 52,53 and 0
+ $f{"G"}=$f{"L"}=$y;
+ if ($f{"W"}>=52 || $f{"U"}>=52) {
+ my($dd,$mm,$yy)=($d,$m,$y);
+ $dd+=7;
+ if ($dd>31) {
+ $dd-=31;
+ $mm=1;
+ $yy++;
+ if (&Date_WeekOfYear($mm,$dd,$yy,1)==2) {
+ $f{"G"}=$yy;
+ $f{"W"}=1;
+ }
+ if (&Date_WeekOfYear($mm,$dd,$yy,7)==2) {
+ $f{"L"}=$yy;
+ $f{"U"}=1;
+ }
+ }
+ }
+ if ($f{"W"}==0) {
+ my($dd,$mm,$yy)=($d,$m,$y);
+ $dd-=7;
+ $dd+=31 if ($dd<1);
+ $yy--;
+ $mm=12;
+ $f{"G"}=$yy;
+ $f{"W"}=&Date_WeekOfYear($mm,$dd,$yy,1)+1;
+ }
+ if ($f{"U"}==0) {
+ my($dd,$mm,$yy)=($d,$m,$y);
+ $dd-=7;
+ $dd+=31 if ($dd<1);
+ $yy--;
+ $mm=12;
+ $f{"L"}=$yy;
+ $f{"U"}=&Date_WeekOfYear($mm,$dd,$yy,7)+1;
+ }
+
+ $f{"U"}="0".$f{"U"} if (length $f{"U"} < 2);
+ $f{"W"}="0".$f{"W"} if (length $f{"W"} < 2);
+
+ # day
+ $f{"j"}=&Date_DayOfYear($m,$d,$y);
+ $f{"j"} = "0" . $f{"j"} while (length($f{"j"})<3);
+ $_=$d;
+ s/^0/ /;
+ $f{"e"}=$_;
+ $f{"w"}=&Date_DayOfWeek($m,$d,$y);
+ $f{"v"}=$Lang{$Cnf{"Language"}}{"WL"}[$f{"w"}-1];
+ $f{"v"}=" ".$f{"v"} if (length $f{"v"} < 2);
+ $f{"a"}=$Lang{$Cnf{"Language"}}{"WkL"}[$f{"w"}-1];
+ $f{"A"}=$Lang{$Cnf{"Language"}}{"WeekL"}[$f{"w"}-1];
+ $f{"E"}=&Date_DaySuffix($f{"e"});
+
+ # hour
+ $_=$h;
+ s/^0/ /;
+ $f{"k"}=$_;
+ $f{"i"}=$f{"k"}+1;
+ $f{"i"}=$f{"k"};
+ $f{"i"}=12 if ($f{"k"}==0);
+ $f{"i"}=$f{"k"}-12 if ($f{"k"}>12);
+ $f{"i"}=$f{"i"}-12 if ($f{"i"}>12);
+ $f{"i"}=" ".$f{"i"} if (length($f{"i"})<2);
+ $f{"I"}=$f{"i"};
+ $f{"I"}=~ s/^ /0/;
+ $f{"p"}=$Lang{$Cnf{"Language"}}{"AMstr"};
+ $f{"p"}=$Lang{$Cnf{"Language"}}{"PMstr"} if ($f{"k"}>11);
+
+ # minute, second, timezone
+ $f{"o"}=&Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
+ $f{"s"}=&Date_SecsSince1970GMT($m,$d,$y,$h,$mn,$s);
+ $f{"Z"}=($Cnf{"ConvTZ"} eq "IGNORE" or $Cnf{"ConvTZ"} eq "") ?
+ $Cnf{"TZ"} : $Cnf{"ConvTZ"};
+ $f{"z"}=($f{"Z"}=~/^[+-]\d{4}/) ? $f{"Z"} : ($Zone{"n2o"}{lc $f{"Z"}} || "");
+
+ # date, time
+ $f{"c"}=qq|$f{"a"} $f{"b"} $f{"e"} $h:$mn:$s $y|;
+ $f{"C"}=$f{"u"}=
+ qq|$f{"a"} $f{"b"} $f{"e"} $h:$mn:$s $f{"z"} $y|;
+ $f{"g"}=qq|$f{"a"}, $d $f{"b"} $y $h:$mn:$s $f{"z"}|;
+ $f{"D"}=$f{"x"}=qq|$m/$d/$f{"y"}|;
+ $f{"r"}=qq|$f{"I"}:$mn:$s $f{"p"}|;
+ $f{"R"}=qq|$h:$mn|;
+ $f{"T"}=$f{"X"}=qq|$h:$mn:$s|;
+ $f{"V"}=qq|$m$d$h$mn$f{"y"}|;
+ $f{"Q"}="$y$m$d";
+ $f{"q"}=qq|$y$m$d$h$mn$s|;
+ $f{"P"}=qq|$y$m$d$h:$mn:$s|;
+ $f{"F"}=qq|$f{"A"}, $f{"B"} $f{"e"}, $f{"Y"}|;
+ if ($f{"W"}==0) {
+ $y--;
+ $tmp=&Date_WeekOfYear(12,31,$y,1);
+ $tmp="0$tmp" if (length($tmp) < 2);
+ $f{"J"}=qq|$y-W$tmp-$f{"w"}|;
+ } else {
+ $f{"J"}=qq|$f{"G"}-W$f{"W"}-$f{"w"}|;
+ }
+ $f{"K"}=qq|$y-$f{"j"}|;
+ # %l is a special case. Since it requires the use of the calculator
+ # which requires this routine, an infinite recursion results. To get
+ # around this, %l is NOT determined every time this is called so the
+ # recursion breaks.
+
+ # other formats
+ $f{"n"}="\n";
+ $f{"t"}="\t";
+ $f{"%"}="%";
+ $f{"+"}="+";
+
+ foreach $format (@format) {
+ $format=reverse($format);
+ $out="";
+ while ($format ne "") {
+ $c=chop($format);
+ if ($c eq "%") {
+ $c=chop($format);
+ if ($c eq "l") {
+ &Date_Init();
+ $date1=&DateCalc_DateDelta($Curr{"Now"},"-0:6:0:0:0:0:0");
+ $date2=&DateCalc_DateDelta($Curr{"Now"},"+0:6:0:0:0:0:0");
+ if (&Date_Cmp($date,$date1)>=0 && &Date_Cmp($date,$date2)<=0) {
+ $f{"l"}=qq|$f{"b"} $f{"e"} $h:$mn|;
+ } else {
+ $f{"l"}=qq|$f{"b"} $f{"e"} $f{"Y"}|;
+ }
+ $out .= $f{"$c"};
+ } elsif (exists $f{"$c"}) {
+ $out .= $f{"$c"};
+ } else {
+ $out .= $c;
+ }
+ } else {
+ $out .= $c;
+ }
+ }
+ push(@out,$out);
+ }
+ if ($scalar) {
+ return $out[0];
+ } else {
+ return (@out);
+ }
+}
+
+# Can't be in "use integer" because we're doing decimal arithmatic
+no integer;
+sub Delta_Format {
+ print "DEBUG: Delta_Format\n" if ($Curr{"Debug"} =~ /trace/);
+ my($delta,$dec,@format)=@_;
+ $delta=&ParseDateDelta($delta);
+ return "" if (! $delta);
+ my(@out,%f,$out,$c1,$c2,$scalar,$format)=();
+ local($_)=$delta;
+ my($y,$M,$w,$d,$h,$m,$s)=&Delta_Split($delta);
+ # Get rid of positive signs.
+ ($y,$M,$w,$d,$h,$m,$s)=map { 1*$_; }($y,$M,$w,$d,$h,$m,$s);
+
+ if (defined $dec && $dec>0) {
+ $dec="%." . ($dec*1) . "f";
+ } else {
+ $dec="%f";
+ }
+
+ if (! wantarray) {
+ $format=join(" ",@format);
+ @format=($format);
+ $scalar=1;
+ }
+
+ # Length of each unit in seconds
+ my($sl,$ml,$hl,$dl,$wl,$yl)=();
+ $sl = 1;
+ $ml = $sl*60;
+ $hl = $ml*60;
+ $dl = $hl*24;
+ $wl = $dl*7;
+ $yl = $dl*365.25;
+
+ # The decimal amount of each unit contained in all smaller units
+ my($yd,$Md,$sd,$md,$hd,$dd,$wd)=();
+ if ($M) {
+ $yd = $M/12;
+ $Md = 0;
+ } else {
+ $yd = ($w*$wl + $d*$dl + $h*$hl + $m*$ml + $s*$sl)/$yl;
+ $Md = 0;
+ }
+
+ $wd = ($d*$dl + $h*$hl + $m*$ml + $s*$sl)/$wl;
+ $dd = ($h*$hl + $m*$ml + $s*$sl)/$dl;
+ $hd = ($m*$ml + $s*$sl)/$hl;
+ $md = ($s*$sl)/$ml;
+ $sd = 0;
+
+ # The amount of each unit contained in higher units.
+ my($yh,$Mh,$sh,$mh,$hh,$dh,$wh)=();
+ $yh = 0;
+
+ if ($M) {
+ $Mh = ($yh+$y)*12;
+ $wh = 0;
+ $dh = ($wh+$w)*7;
+ } else {
+ $Mh = 0;
+ $wh = ($yh+$y)*365.25/7;
+ $dh = ($yh+$y)*365.25 + $w*7;
+ }
+
+ $hh = ($dh+$d)*24;
+ $mh = ($hh+$h)*60;
+ $sh = ($mh+$m)*60;
+
+ # Set up the formats
+
+ $f{"yv"} = $y;
+ $f{"Mv"} = $M;
+ $f{"wv"} = $w;
+ $f{"dv"} = $d;
+ $f{"hv"} = $h;
+ $f{"mv"} = $m;
+ $f{"sv"} = $s;
+
+ $f{"yh"} = $y+$yh;
+ $f{"Mh"} = $M+$Mh;
+ $f{"wh"} = $w+$wh;
+ $f{"dh"} = $d+$dh;
+ $f{"hh"} = $h+$hh;
+ $f{"mh"} = $m+$mh;
+ $f{"sh"} = $s+$sh;
+
+ $f{"yd"} = sprintf($dec,$y+$yd);
+ $f{"Md"} = sprintf($dec,$M+$Md);
+ $f{"wd"} = sprintf($dec,$w+$wd);
+ $f{"dd"} = sprintf($dec,$d+$dd);
+ $f{"hd"} = sprintf($dec,$h+$hd);
+ $f{"md"} = sprintf($dec,$m+$md);
+ $f{"sd"} = sprintf($dec,$s+$sd);
+
+ $f{"yt"} = sprintf($dec,$yh+$y+$yd);
+ $f{"Mt"} = sprintf($dec,$Mh+$M+$Md);
+ $f{"wt"} = sprintf($dec,$wh+$w+$wd);
+ $f{"dt"} = sprintf($dec,$dh+$d+$dd);
+ $f{"ht"} = sprintf($dec,$hh+$h+$hd);
+ $f{"mt"} = sprintf($dec,$mh+$m+$md);
+ $f{"st"} = sprintf($dec,$sh+$s+$sd);
+
+ $f{"%"} = "%";
+
+ foreach $format (@format) {
+ $format=reverse($format);
+ $out="";
+ PARSE: while ($format) {
+ $c1=chop($format);
+ if ($c1 eq "%") {
+ $c1=chop($format);
+ if (exists($f{$c1})) {
+ $out .= $f{$c1};
+ next PARSE;
+ }
+ $c2=chop($format);
+ if (exists($f{"$c1$c2"})) {
+ $out .= $f{"$c1$c2"};
+ next PARSE;
+ }
+ $out .= $c1;
+ $format .= $c2;
+ } else {
+ $out .= $c1;
+ }
+ }
+ push(@out,$out);
+ }
+ if ($scalar) {
+ return $out[0];
+ } else {
+ return (@out);
+ }
+}
+use integer;
+
+sub ParseRecur {
+ print "DEBUG: ParseRecur\n" if ($Curr{"Debug"} =~ /trace/);
+ &Date_Init() if (! $Curr{"InitDone"});
+
+ my($recur,$dateb,$date0,$date1,$flag)=@_;
+ local($_)=$recur;
+
+ my($recur_0,$recur_1,@recur0,@recur1)=();
+ my(@tmp,$tmp,$each,$num,$y,$m,$d,$w,$h,$mn,$s,$delta,$y0,$y1,$yb)=();
+ my($yy,$n,$dd,@d,@tmp2,$date,@date,@w,@tmp3,@m,@y,$tmp2,$d2,@flags)=();
+
+ # $date0, $date1, $dateb, $flag : passed in (these are always the final say
+ # in determining whether a date matches a
+ # recurrence IF they are present.
+ # $date_b, $date_0, $date_1 : if a value can be determined from the
+ # $flag_t recurrence, they are stored here.
+ #
+ # If values can be determined from the recurrence AND are passed in, the
+ # following are used:
+ # max($date0,$date_0) i.e. the later of the two dates
+ # min($date1,$date_1) i.e. the earlier of the two dates
+ #
+ # The base date that is used is the first one defined from
+ # $dateb $date_b
+ # The base date is only used if necessary (as determined by the recur).
+ # For example, "every other friday" requires a base date, but "2nd
+ # friday of every month" doesn't.
+
+ my($date_b,$date_0,$date_1,$flag_t);
+
+ #
+ # Check the arguments passed in.
+ #
+
+ $date0="" if (! defined $date0);
+ $date1="" if (! defined $date1);
+ $dateb="" if (! defined $dateb);
+ $flag ="" if (! defined $flag);
+
+ if ($dateb) {
+ $dateb=&ParseDateString($dateb);
+ return "" if (! $dateb);
+ }
+ if ($date0) {
+ $date0=&ParseDateString($date0);
+ return "" if (! $date0);
+ }
+ if ($date1) {
+ $date1=&ParseDateString($date1);
+ return "" if (! $date1);
+ }
+
+ #
+ # Parse the recur. $date_b, $date_0, and $date_e are values obtained
+ # from the recur.
+ #
+
+ @tmp=&Recur_Split($_);
+
+ if (@tmp) {
+ ($recur_0,$recur_1,$flag_t,$date_b,$date_0,$date_1)=@tmp;
+ $recur_0 = "" if (! defined $recur_0);
+ $recur_1 = "" if (! defined $recur_1);
+ $flag_t = "" if (! defined $flag_t);
+ $date_b = "" if (! defined $date_b);
+ $date_0 = "" if (! defined $date_0);
+ $date_1 = "" if (! defined $date_1);
+
+ @recur0 = split(/:/,$recur_0);
+ @recur1 = split(/:/,$recur_1);
+ return "" if ($#recur0 + $#recur1 + 2 != 7);
+
+ if ($date_b) {
+ $date_b=&ParseDateString($date_b);
+ return "" if (! $date_b);
+ }
+ if ($date_0) {
+ $date_0=&ParseDateString($date_0);
+ return "" if (! $date_0);
+ }
+ if ($date_1) {
+ $date_1=&ParseDateString($date_1);
+ return "" if (! $date_1);
+ }
+
+ } else {
+
+ my($mmm)='\s*'.$Lang{$Cnf{"Language"}}{"Month"}; # \s*(jan|january|...)
+ my(%mmm)=%{ $Lang{$Cnf{"Language"}}{"MonthH"} }; # { jan=>1, ... }
+ my($wkexp)='\s*'.$Lang{$Cnf{"Language"}}{"Week"}; # \s*(mon|monday|...)
+ my(%week)=%{ $Lang{$Cnf{"Language"}}{"WeekH"} }; # { monday=>1, ... }
+ my($day)='\s*'.$Lang{$Cnf{"Language"}}{"Dabb"}; # \s*(?:d|day|days)
+ my($month)='\s*'.$Lang{$Cnf{"Language"}}{"Mabb"}; # \s*(?:mon|month|months)
+ my($week)='\s*'.$Lang{$Cnf{"Language"}}{"Wabb"}; # \s*(?:w|wk|week|weeks)
+ my($daysexp)=$Lang{$Cnf{"Language"}}{"DoM"}; # (1st|first|...31st)
+ my(%dayshash)=%{ $Lang{$Cnf{"Language"}}{"DoMH"} };
+ # { 1st=>1,first=>1,...}
+ my($of)='\s*'.$Lang{$Cnf{"Language"}}{"Of"}; # \s*(?:in|of)
+ my($lastexp)=$Lang{$Cnf{"Language"}}{"Last"}; # (?:last)
+ my($each)=$Lang{$Cnf{"Language"}}{"Each"}; # (?:each|every)
+
+ my($D)='\s*(\d+)';
+ my($Y)='\s*(\d{4}|\d{2})';
+
+ # Change 1st to 1
+ if (/(^|[^a-z])$daysexp($|[^a-z])/i) {
+ $tmp=lc($2);
+ $tmp=$dayshash{"$tmp"};
+ s/(^|[^a-z])$daysexp($|[^a-z])/$1 $tmp $3/i;
+ }
+ s/\s*$//;
+
+ # Get rid of "each"
+ if (/(^|[^a-z])$each($|[^a-z])/i) {
+ s/(^|[^a-z])$each($|[^a-z])/$1 $2/i;
+ $each=1;
+ } else {
+ $each=0;
+ }
+
+ if ($each) {
+
+ if (/^$D?$day(?:$of$mmm?$Y)?$/i ||
+ /^$D?$day(?:$of$mmm())?$/i) {
+ # every [2nd] day in [june] 1997
+ # every [2nd] day [in june]
+ ($num,$m,$y)=($1,$2,$3);
+ $num=1 if (! defined $num);
+ $m="" if (! defined $m);
+ $y="" if (! defined $y);
+
+ $y=$Curr{"Y"} if (! $y);
+ if ($m) {
+ $m=$mmm{lc($m)};
+ $date_0=&Date_Join($y,$m,1,0,0,0);
+ $date_1=&DateCalc_DateDelta($date_0,"+0:1:0:0:0:0:0",0);
+ } else {
+ $date_0=&Date_Join($y, 1,1,0,0,0);
+ $date_1=&Date_Join($y+1,1,1,0,0,0);
+ }
+ $date_b=&DateCalc($date_0,"-0:0:0:1:0:0:0",0);
+ @recur0=(0,0,0,$num,0,0,0);
+ @recur1=();
+
+ } elsif (/^$D$day?$of$month(?:$of?$Y)?$/) {
+ # 2nd [day] of every month [in 1997]
+ ($num,$y)=($1,$2);
+ $y=$Curr{"Y"} if (! $y);
+
+ $date_0=&Date_Join($y, 1,1,0,0,0);
+ $date_1=&Date_Join($y+1,1,1,0,0,0);
+ $date_b=$date_0;
+
+ @recur0=(0,1,0);
+ @recur1=($num,0,0,0);
+
+ } elsif (/^$D$wkexp$of$month(?:$of?$Y)?$/ ||
+ /^($lastexp)$wkexp$of$month(?:$of?$Y)?$/) {
+ # 2nd tuesday of every month [in 1997]
+ # last tuesday of every month [in 1997]
+ ($num,$d,$y)=($1,$2,$3);
+ $y=$Curr{"Y"} if (! $y);
+ $d=$week{lc($d)};
+ $num=-1 if ($num !~ /^$D$/);
+
+ $date_0=&Date_Join($y,1,1,0,0,0);
+ $date_1=&Date_Join($y+1,1,1,0,0,0);
+ $date_b=$date_0;
+
+ @recur0=(0,1);
+ @recur1=($num,$d,0,0,0);
+
+ } elsif (/^$D?$wkexp(?:$of$mmm?$Y)?$/i ||
+ /^$D?$wkexp(?:$of$mmm())?$/i) {
+ # every tuesday in june 1997
+ # every 2nd tuesday in june 1997
+ ($num,$d,$m,$y)=($1,$2,$3,$4);
+ $y=$Curr{"Y"} if (! $y);
+ $num=1 if (! defined $num);
+ $m="" if (! defined $m);
+ $d=$week{lc($d)};
+
+ if ($m) {
+ $m=$mmm{lc($m)};
+ $date_0=&Date_Join($y,$m,1,0,0,0);
+ $date_1=&DateCalc_DateDelta($date_0,"+0:1:0:0:0:0:0",0);
+ } else {
+ $date_0=&Date_Join($y,1,1,0,0,0);
+ $date_1=&Date_Join($y+1,1,1,0,0,0);
+ }
+ $date_b=&DateCalc($date_0,"-0:0:0:1:0:0:0",0);
+
+ @recur0=(0,0,$num);
+ @recur1=($d,0,0,0);
+
+ } else {
+ return "";
+ }
+
+ $date_0="" if ($date0);
+ $date_1="" if ($date1);
+ } else {
+ return "";
+ }
+ }
+
+ #
+ # Override with any values passed in
+ #
+
+ if ($date0 && $date_0) {
+ $date0=( &Date_Cmp($date0,$date_0) > 1 ? $date0 : $date_0);
+ } elsif ($date_0) {
+ $date0 = $date_0;
+ }
+
+ if ($date1 && $date_1) {
+ $date1=( &Date_Cmp($date1,$date_1) > 1 ? $date_1 : $date1);
+ } elsif ($date_1) {
+ $date1 = $date_1;
+ }
+
+ $dateb=$date_b if (! $dateb);
+
+ if ($flag =~ s/^\+//) {
+ if ($flag_t) {
+ $flag="$flag_t,$flag";
+ }
+ }
+ $flag =$flag_t if (! $flag && $flag_t);
+
+ if (! wantarray) {
+ $tmp = join(":",@recur0);
+ $tmp .= "*" . join(":",@recur1) if (@recur1);
+ $tmp .= "*$flag*$dateb*$date0*$date1";
+ return $tmp;
+ }
+ if (@recur0) {
+ return () if (! $date0 || ! $date1); # dateb is NOT required in all case
+ }
+
+ #
+ # Some flags affect parsing.
+ #
+
+ @flags = split(/,/,$flag);
+ my($MDn) = 0;
+ my($MWn) = 7;
+ my($f);
+ foreach $f (@flags) {
+ if ($f =~ /^MW([1-7])$/i) {
+ $MWn=$1;
+ $MDn=0;
+
+ } elsif ($f =~ /^MD([1-7])$/i) {
+ $MDn=$1;
+ $MWn=0;
+
+ } elsif ($f =~ /^EASTER$/i) {
+ ($y,$m,$w,$d,$h,$mn,$s)=(@recur0,@recur1);
+ # We want something that will return Jan 1 for the given years.
+ if ($#recur0==-1) {
+ @recur1=($y,1,0,1,$h,$mn,$s);
+ } elsif ($#recur0<=3) {
+ @recur0=($y,0,0,0);
+ @recur1=($h,$mn,$s);
+ } elsif ($#recur0==4) {
+ @recur0=($y,0,0,0,0);
+ @recur1=($mn,$s);
+ } elsif ($#recur0==5) {
+ @recur0=($y,0,0,0,0,0);
+ @recur1=($s);
+ } else {
+ @recur0=($y,0,0,0,0,0,0);
+ }
+ }
+ }
+
+ #
+ # Determine the dates referenced by the recur. Also, fix the base date
+ # as necessary for the recurrences which require it.
+ #
+
+ ($y,$m,$w,$d,$h,$mn,$s)=(@recur0,@recur1);
+ @y=@m=@w=@d=();
+ my(@time)=($h,$mn,$s);
+
+ RECUR: while (1) {
+
+ if ($#recur0==-1) {
+ # * Y-M-W-D-H-MN-S
+ if ($y eq "0") {
+ push(@recur0,0);
+ shift(@recur1);
+
+ } else {
+ @y=&ReturnList($y);
+ foreach $y (@y) {
+ $y=&Date_FixYear($y) if (length($y)==2);
+ return () if (length($y)!=4 || ! &IsInt($y));
+ }
+ @y=sort { $a<=>$b } @y;
+
+ $date0=&ParseDate("0000-01-01") if (! $date0);
+ $date1=&ParseDate("9999-12-31 23:59:59") if (! $date1);
+
+ if ($m eq "0" and $w eq "0") {
+ # * Y-0-0-0-H-MN-S
+ # * Y-0-0-DOY-H-MN-S
+ if ($d eq "0") {
+ @d=(1);
+ } else {
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,366));
+ }
+ @d=sort { $a<=>$b } (@d);
+ }
+
+ @date=();
+ foreach $yy (@y) {
+ foreach $d (@d) {
+ ($y,$m,$dd)=&Date_NthDayOfYear($yy,$d);
+ push(@date, &Date_Join($y,$m,$dd,0,0,0));
+ }
+ }
+ last RECUR;
+
+ } elsif ($w eq "0") {
+ # * Y-M-0-0-H-MN-S
+ # * Y-M-0-DOM-H-MN-S
+
+ @m=&ReturnList($m);
+ return () if (! @m);
+ foreach $m (@m) {
+ return () if (! &IsInt($m,1,12));
+ }
+ @m=sort { $a<=>$b } (@m);
+
+ if ($d eq "0") {
+ @d=(1);
+ } else {
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,31));
+ }
+ @d=sort { $a<=>$b } (@d);
+ }
+
+ @date=();
+ foreach $y (@y) {
+ foreach $m (@m) {
+ foreach $d (@d) {
+ $date=&Date_Join($y,$m,$d,0,0,0);
+ push(@date,$date) if ($d<29 || &Date_Split($date));
+ }
+ }
+ }
+ last RECUR;
+
+ } elsif ($m eq "0") {
+ # * Y-0-WOY-DOW-H-MN-S
+ # * Y-0-WOY-0-H-MN-S
+ @w=&ReturnList($w);
+ return () if (! @w);
+ foreach $w (@w) {
+ return () if (! &IsInt($w,1,53));
+ }
+
+ if ($d eq "0") {
+ @d=($Cnf{"FirstDay"});
+ } else {
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,7));
+ }
+ @d=sort { $a<=>$b } (@d);
+ }
+
+ @date=();
+ foreach $y (@y) {
+ foreach $w (@w) {
+ $w="0$w" if (length($w)==1);
+ foreach $d (@d) {
+ $date=&ParseDateString("$y-W$w-$d");
+ push(@date,$date);
+ }
+ }
+ }
+ last RECUR;
+
+ } else {
+ # * Y-M-WOM-DOW-H-MN-S
+ # * Y-M-WOM-0-H-MN-S
+
+ @m=&ReturnList($m);
+ return () if (! @m);
+ foreach $m (@m) {
+ return () if (! &IsInt($m,1,12));
+ }
+ @m=sort { $a<=>$b } (@m);
+
+ @w=&ReturnList($w);
+
+ if ($d eq "0") {
+ @d=();
+ } else {
+ @d=&ReturnList($d);
+ }
+
+ @date=&Date_Recur_WoM(\@y,\@m,\@w,\@d,$MWn,$MDn);
+ last RECUR;
+ }
+ }
+ }
+
+ if ($#recur0==0) {
+ # Y * M-W-D-H-MN-S
+ $n=$y;
+ $n=1 if ($n==0);
+
+ @m=&ReturnList($m);
+ return () if (! @m);
+ foreach $m (@m) {
+ return () if (! &IsInt($m,1,12));
+ }
+ @m=sort { $a<=>$b } (@m);
+
+ if ($m eq "0") {
+ # Y * 0-W-D-H-MN-S (equiv to Y-0 * W-D-H-MN-S)
+ push(@recur0,0);
+ shift(@recur1);
+
+ } elsif ($w eq "0") {
+ # Y * M-0-DOM-H-MN-S
+ return () if (! $dateb);
+ $d=1 if ($d eq "0");
+
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,31));
+ }
+ @d=sort { $a<=>$b } (@d);
+
+ # We need to find years that are a multiple of $n from $y(base)
+ ($y0)=( &Date_Split($date0, 1) )[0];
+ ($y1)=( &Date_Split($date1, 1) )[0];
+ ($yb)=( &Date_Split($dateb, 1) )[0];
+ @date=();
+ for ($yy=$y0; $yy<=$y1; $yy++) {
+ if (($yy-$yb)%$n == 0) {
+ foreach $m (@m) {
+ foreach $d (@d) {
+ $date=&Date_Join($yy,$m,$d,0,0,0);
+ push(@date,$date) if ($d<29 || &Date_Split($date));
+ }
+ }
+ }
+ }
+ last RECUR;
+
+ } else {
+ # Y * M-WOM-DOW-H-MN-S
+ # Y * M-WOM-0-H-MN-S
+ return () if (! $dateb);
+ @m=&ReturnList($m);
+ @w=&ReturnList($w);
+ if ($d eq "0") {
+ @d=();
+ } else {
+ @d=&ReturnList($d);
+ }
+
+ ($y0)=( &Date_Split($date0, 1) )[0];
+ ($y1)=( &Date_Split($date1, 1) )[0];
+ ($yb)=( &Date_Split($dateb, 1) )[0];
+ @y=();
+ for ($yy=$y0; $yy<=$y1; $yy++) {
+ if (($yy-$yb)%$n == 0) {
+ push(@y,$yy);
+ }
+ }
+
+ @date=&Date_Recur_WoM(\@y,\@m,\@w,\@d,$MWn,$MDn);
+ last RECUR;
+ }
+ }
+
+ if ($#recur0==1) {
+ # Y-M * W-D-H-MN-S
+
+ if ($w eq "0") {
+ # Y-M * 0-D-H-MN-S (equiv to Y-M-0 * D-H-MN-S)
+ push(@recur0,0);
+ shift(@recur1);
+
+ } elsif ($m==0) {
+ # Y-0 * WOY-0-H-MN-S
+ # Y-0 * WOY-DOW-H-MN-S
+ return () if (! $dateb);
+ $n=$y;
+ $n=1 if ($n==0);
+
+ @w=&ReturnList($w);
+ return () if (! @w);
+ foreach $w (@w) {
+ return () if (! &IsInt($w,1,53));
+ }
+
+ if ($d eq "0") {
+ @d=($Cnf{"FirstDay"});
+ } else {
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,7));
+ }
+ @d=sort { $a<=>$b } (@d);
+ }
+
+ # We need to find years that are a multiple of $n from $y(base)
+ ($y0)=( &Date_Split($date0, 1) )[0];
+ ($y1)=( &Date_Split($date1, 1) )[0];
+ ($yb)=( &Date_Split($dateb, 1) )[0];
+ @date=();
+ for ($yy=$y0; $yy<=$y1; $yy++) {
+ if (($yy-$yb)%$n == 0) {
+ foreach $w (@w) {
+ $w="0$w" if (length($w)==1);
+ foreach $tmp (@d) {
+ $date=&ParseDateString("$yy-W$w-$tmp");
+ push(@date,$date);
+ }
+ }
+ }
+ }
+ last RECUR;
+
+ } else {
+ # Y-M * WOM-0-H-MN-S
+ # Y-M * WOM-DOW-H-MN-S
+ return () if (! $dateb);
+ @tmp=(@recur0);
+ push(@tmp,0) while ($#tmp<6);
+ $delta=join(":",@tmp);
+ @tmp=&Date_Recur($date0,$date1,$dateb,$delta);
+
+ @w=&ReturnList($w);
+ @m=();
+ if ($d eq "0") {
+ @d=();
+ } else {
+ @d=&ReturnList($d);
+ }
+
+ @date=&Date_Recur_WoM(\@tmp,\@m,\@w,\@d,$MWn,$MDn);
+ last RECUR;
+ }
+ }
+
+ if ($#recur0==2) {
+ # Y-M-W * D-H-MN-S
+
+ if ($d eq "0") {
+ # Y-M-W * 0-H-MN-S
+ return () if (! $dateb);
+ $y=1 if ($y==0 && $m==0 && $w==0);
+ $delta="$y:$m:$w:0:0:0:0";
+ @date=&Date_Recur($date0,$date1,$dateb,$delta);
+ last RECUR;
+
+ } elsif ($m==0 && $w==0) {
+ # Y-0-0 * DOY-H-MN-S
+ $y=1 if ($y==0);
+ $n=$y;
+ return () if (! $dateb && $y!=1);
+
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,366));
+ }
+ @d=sort { $a<=>$b } (@d);
+
+ # We need to find years that are a multiple of $n from $y(base)
+ ($y0)=( &Date_Split($date0, 1) )[0];
+ ($y1)=( &Date_Split($date1, 1) )[0];
+ ($yb)=( &Date_Split($dateb, 1) )[0];
+ @date=();
+ for ($yy=$y0; $yy<=$y1; $yy++) {
+ if (($yy-$yb)%$n == 0) {
+ foreach $d (@d) {
+ ($y,$m,$dd)=&Date_NthDayOfYear($yy,$d);
+ push(@date, &Date_Join($y,$m,$dd,0,0,0));
+ }
+ }
+ }
+ last RECUR;
+
+ } elsif ($w>0) {
+ # Y-M-W * DOW-H-MN-S
+ return () if (! $dateb);
+ @tmp=(@recur0);
+ push(@tmp,0) while ($#tmp<6);
+ $delta=join(":",@tmp);
+
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,7));
+ }
+
+ # Find out what DofW the basedate is.
+ @tmp2=&Date_Split($dateb, 1);
+ $tmp=&Date_DayOfWeek($tmp2[1],$tmp2[2],$tmp2[0]);
+
+ @date=();
+ foreach $d (@d) {
+ $date_b=$dateb;
+ # Move basedate to DOW
+ if ($d != $tmp) {
+ if (($tmp>=$Cnf{"FirstDay"} && $d<$Cnf{"FirstDay"}) ||
+ ($tmp>=$Cnf{"FirstDay"} && $d>$tmp) ||
+ ($tmp<$d && $d<$Cnf{"FirstDay"})) {
+ $date_b=&Date_GetNext($date_b,$d);
+ } else {
+ $date_b=&Date_GetPrev($date_b,$d);
+ }
+ }
+ push(@date,&Date_Recur($date0,$date1,$date_b,$delta));
+ }
+ @date=sort(@date);
+ last RECUR;
+
+ } elsif ($m>0) {
+ # Y-M-0 * DOM-H-MN-S
+ return () if (! $dateb);
+ @tmp=(@recur0);
+ push(@tmp,0) while ($#tmp<6);
+ $delta=join(":",@tmp);
+
+ @d=&ReturnList($d);
+ return () if (! @d);
+ foreach $d (@d) {
+ return () if (! &IsInt($d,-31,31) || $d==0);
+ }
+ @d=sort { $a<=>$b } (@d);
+
+ @tmp2=&Date_Recur($date0,$date1,$dateb,$delta);
+ @date=();
+ foreach $date (@tmp2) {
+ ($y,$m)=( &Date_Split($date, 1) )[0..1];
+ $tmp2=&Date_DaysInMonth($m,$y);
+ foreach $d (@d) {
+ $d2=$d;
+ $d2=$tmp2+1+$d if ($d<0);
+ push(@date,&Date_Join($y,$m,$d2,0,0,0)) if ($d2<=$tmp2);
+ }
+ }
+ @date=sort (@date);
+ last RECUR;
+
+ } else {
+ return ();
+ }
+ }
+
+ if ($#recur0>2) {
+ # Y-M-W-D * H-MN-S
+ # Y-M-W-D-H * MN-S
+ # Y-M-W-D-H-MN * S
+ # Y-M-W-D-H-S
+ return () if (! $dateb);
+ @tmp=(@recur0);
+ push(@tmp,0) while ($#tmp<6);
+ $delta=join(":",@tmp);
+ return () if ($delta !~ /[1-9]/); # return if "0:0:0:0:0:0:0"
+ @date=&Date_Recur($date0,$date1,$dateb,$delta);
+ if (@recur1) {
+ unshift(@recur1,-1) while ($#recur1<2);
+ @time=@recur1;
+ } else {
+ shift(@date);
+ pop(@date);
+ @time=();
+ }
+ }
+
+ last RECUR;
+ }
+ @date=&Date_RecurSetTime($date0,$date1,\@date,@time) if (@time);
+
+ #
+ # We've got a list of dates. Operate on them with the flags.
+ #
+
+ my($sign,$forw,$today,$df,$db,$work,$i);
+ if (@flags) {
+ FLAG: foreach $f (@flags) {
+ $f = uc($f);
+
+ if ($f =~ /^(P|N)(D|T)([1-7])$/) {
+ @tmp=($1,$2,$3);
+ $forw =($tmp[0] eq "P" ? 0 : 1);
+ $today=($tmp[1] eq "D" ? 0 : 1);
+ $d=$tmp[2];
+ @tmp=();
+ foreach $date (@date) {
+ if ($forw) {
+ push(@tmp, &Date_GetNext($date,$d,$today));
+ } else {
+ push(@tmp, &Date_GetPrev($date,$d,$today));
+ }
+ }
+ @date=@tmp;
+ next FLAG;
+ }
+
+ # We want to go forward exact amounts of time instead of
+ # business mode calculations so that we don't change the time
+ # (which may have been set in the recur).
+ if ($f =~ /^(F|B)(D|W)(\d+)$/) {
+ @tmp=($1,$2,$3);
+ $sign="+";
+ $sign="-" if ($tmp[0] eq "B");
+ $work=0;
+ $work=1 if ($tmp[1] eq "W");
+ $n=$tmp[2];
+ @tmp=();
+ foreach $date (@date) {
+ for ($i=1; $i<=$n; $i++) {
+ while (1) {
+ $date=&DateCalc($date,"${sign}0:0:0:1:0:0:0");
+ last if (! $work || &Date_IsWorkDay($date,0));
+ }
+ }
+ push(@tmp,$date);
+ }
+ @date=@tmp;
+ next FLAG;
+ }
+
+ if ($f =~ /^CW(N|P|D)$/ || $f =~ /^(N|P|D)W(D)$/) {
+ $tmp=$1;
+ my $noalt = $2 ? 1 : 0;
+ if ($tmp eq "N" || ($tmp eq "D" && $Cnf{"TomorrowFirst"})) {
+ $forw=1;
+ } else {
+ $forw=0;
+ }
+
+ @tmp=();
+ DATE: foreach $date (@date) {
+ $df=$db=$date;
+ if (&Date_IsWorkDay($date)) {
+ push(@tmp,$date);
+ next DATE;
+ }
+ while (1) {
+ if ($forw) {
+ $d=$df=&DateCalc($df,"+0:0:0:1:0:0:0");
+ } else {
+ $d=$db=&DateCalc($db,"-0:0:0:1:0:0:0");
+ }
+ if (&Date_IsWorkDay($d)) {
+ push(@tmp,$d);
+ next DATE;
+ }
+ $forw=1-$forw if (! $noalt);
+ }
+ }
+ @date=@tmp;
+ next FLAG;
+ }
+
+ if ($f eq "EASTER") {
+ @tmp=();
+ foreach $date (@date) {
+ ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
+ ($m,$d)=&Date_Easter($y);
+ $date=&Date_Join($y,$m,$d,$h,$mn,$s);
+ next if (&Date_Cmp($date,$date0)<0 ||
+ &Date_Cmp($date,$date1)>0);
+ push(@tmp,$date);
+ }
+ @date=@tmp;
+ }
+ }
+ @date = sort(@date);
+ }
+ @date;
+}
+
+sub Date_GetPrev {
+ print "DEBUG: Date_GetPrev\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$dow,$today,$hr,$min,$sec)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ my($y,$m,$d,$h,$mn,$s,$err,$curr_dow,%dow,$num,$delta,$th,$tm,$ts,
+ $adjust,$curr)=();
+ $hr="00" if (defined $hr && $hr eq "0");
+ $min="00" if (defined $min && $min eq "0");
+ $sec="00" if (defined $sec && $sec eq "0");
+
+ if (! &Date_Split($date)) {
+ $date=&ParseDateString($date);
+ return "" if (! $date);
+ }
+ $curr=$date;
+ ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
+
+ if ($dow) {
+ $curr_dow=&Date_DayOfWeek($m,$d,$y);
+ %dow=%{ $Lang{$Cnf{"Language"}}{"WeekH"} };
+ if (&IsInt($dow)) {
+ return "" if ($dow<1 || $dow>7);
+ } else {
+ return "" if (! exists $dow{lc($dow)});
+ $dow=$dow{lc($dow)};
+ }
+ if ($dow == $curr_dow) {
+ $date=&DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0) if (! $today);
+ $adjust=1 if ($today==2);
+ } else {
+ $dow -= 7 if ($dow>$curr_dow); # make sure previous day is less
+ $num = $curr_dow - $dow;
+ $date=&DateCalc_DateDelta($date,"-0:0:0:$num:0:0:0",\$err,0);
+ }
+ $date=&Date_SetTime($date,$hr,$min,$sec) if (defined $hr);
+ $date=&DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0)
+ if ($adjust && &Date_Cmp($date,$curr)>0);
+
+ } else {
+ ($h,$mn,$s)=( &Date_Split($date, 1) )[3..5];
+ ($th,$tm,$ts)=&Date_ParseTime($hr,$min,$sec);
+ if ($hr) {
+ ($hr,$min,$sec)=($th,$tm,$ts);
+ $delta="-0:0:0:1:0:0:0";
+ } elsif ($min) {
+ ($hr,$min,$sec)=($h,$tm,$ts);
+ $delta="-0:0:0:0:1:0:0";
+ } elsif ($sec) {
+ ($hr,$min,$sec)=($h,$mn,$ts);
+ $delta="-0:0:0:0:0:1:0";
+ } else {
+ confess "ERROR: invalid arguments in Date_GetPrev.\n";
+ }
+
+ $d=&Date_SetTime($date,$hr,$min,$sec);
+ if ($today) {
+ $d=&DateCalc_DateDelta($d,$delta,\$err,0) if (&Date_Cmp($d,$date)>0);
+ } else {
+ $d=&DateCalc_DateDelta($d,$delta,\$err,0) if (&Date_Cmp($d,$date)>=0);
+ }
+ $date=$d;
+ }
+ return $date;
+}
+
+sub Date_GetNext {
+ print "DEBUG: Date_GetNext\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$dow,$today,$hr,$min,$sec)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ my($y,$m,$d,$h,$mn,$s,$err,$curr_dow,%dow,$num,$delta,$th,$tm,$ts,
+ $adjust,$curr)=();
+ $hr="00" if (defined $hr && $hr eq "0");
+ $min="00" if (defined $min && $min eq "0");
+ $sec="00" if (defined $sec && $sec eq "0");
+
+ if (! &Date_Split($date)) {
+ $date=&ParseDateString($date);
+ return "" if (! $date);
+ }
+ $curr=$date;
+ ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
+
+ if ($dow) {
+ $curr_dow=&Date_DayOfWeek($m,$d,$y);
+ %dow=%{ $Lang{$Cnf{"Language"}}{"WeekH"} };
+ if (&IsInt($dow)) {
+ return "" if ($dow<1 || $dow>7);
+ } else {
+ return "" if (! exists $dow{lc($dow)});
+ $dow=$dow{lc($dow)};
+ }
+ if ($dow == $curr_dow) {
+ $date=&DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0) if (! $today);
+ $adjust=1 if ($today==2);
+ } else {
+ $curr_dow -= 7 if ($curr_dow>$dow); # make sure next date is greater
+ $num = $dow - $curr_dow;
+ $date=&DateCalc_DateDelta($date,"+0:0:0:$num:0:0:0",\$err,0);
+ }
+ $date=&Date_SetTime($date,$hr,$min,$sec) if (defined $hr);
+ $date=&DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0)
+ if ($adjust && &Date_Cmp($date,$curr)<0);
+
+ } else {
+ ($h,$mn,$s)=( &Date_Split($date, 1) )[3..5];
+ ($th,$tm,$ts)=&Date_ParseTime($hr,$min,$sec);
+ if ($hr) {
+ ($hr,$min,$sec)=($th,$tm,$ts);
+ $delta="+0:0:0:1:0:0:0";
+ } elsif ($min) {
+ ($hr,$min,$sec)=($h,$tm,$ts);
+ $delta="+0:0:0:0:1:0:0";
+ } elsif ($sec) {
+ ($hr,$min,$sec)=($h,$mn,$ts);
+ $delta="+0:0:0:0:0:1:0";
+ } else {
+ confess "ERROR: invalid arguments in Date_GetNext.\n";
+ }
+
+ $d=&Date_SetTime($date,$hr,$min,$sec);
+ if ($today) {
+ $d=&DateCalc_DateDelta($d,$delta,\$err,0) if (&Date_Cmp($d,$date)<0);
+ } else {
+ $d=&DateCalc_DateDelta($d,$delta,\$err,0) if (&Date_Cmp($d,$date)<1);
+ }
+ $date=$d;
+ }
+
+ return $date;
+}
+
+sub Date_IsHoliday {
+ print "DEBUG: Date_IsHoliday\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ $date=&ParseDateString($date);
+ return undef if (! $date);
+ $date=&Date_SetTime($date,0,0,0);
+ my($y)=(&Date_Split($date, 1))[0];
+ &Date_UpdateHolidays($y) if (! exists $Holiday{"dates"}{$y});
+ return undef if (! exists $Holiday{"dates"}{$y}{$date});
+ my($name)=$Holiday{"dates"}{$y}{$date};
+ return "" if (! $name);
+ $name;
+}
+
+sub Events_List {
+ print "DEBUG: Events_List\n" if ($Curr{"Debug"} =~ /trace/);
+ my(@args)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ &Events_ParseRaw();
+
+ my($tmp,$date0,$date1,$flag);
+ $date0=&ParseDateString($args[0]);
+ warn "Invalid date $args[0]", return undef if (! $date0);
+
+ if ($#args == 0) {
+ return &Events_Calc($date0);
+ }
+
+ if ($args[1]) {
+ $date1=&ParseDateString($args[1]);
+ warn "Invalid date $args[1]\n", return undef if (! $date1);
+ if (&Date_Cmp($date0,$date1)>0) {
+ $tmp=$date1;
+ $date1=$date0;
+ $date0=$tmp;
+ }
+ } else {
+ $date0=&Date_SetTime($date0,"00:00:00");
+ $date1=&DateCalc_DateDelta($date0,"+0:0:0:1:0:0:0");
+ }
+
+ $tmp=&Events_Calc($date0,$date1);
+
+ $flag=$args[2];
+ return $tmp if (! $flag);
+
+ my(@tmp,%ret,$delta)=();
+ @tmp=@$tmp;
+ push(@tmp,$date1);
+
+ if ($flag==1) {
+ while ($#tmp>0) {
+ ($date0,$tmp)=splice(@tmp,0,2);
+ $date1=$tmp[0];
+ $delta=&DateCalc_DateDate($date0,$date1);
+ foreach $flag (@$tmp) {
+ if (exists $ret{$flag}) {
+ $ret{$flag}=&DateCalc_DeltaDelta($ret{$flag},$delta);
+ } else {
+ $ret{$flag}=$delta;
+ }
+ }
+ }
+ return \%ret;
+
+ } elsif ($flag==2) {
+ while ($#tmp>0) {
+ ($date0,$tmp)=splice(@tmp,0,2);
+ $date1=$tmp[0];
+ $delta=&DateCalc_DateDate($date0,$date1);
+ $flag=join("+",sort @$tmp);
+ next if (! $flag);
+ if (exists $ret{$flag}) {
+ $ret{$flag}=&DateCalc_DeltaDelta($ret{$flag},$delta);
+ } else {
+ $ret{$flag}=$delta;
+ }
+ }
+ return \%ret;
+ }
+
+ warn "Invalid flag $flag\n";
+ return undef;
+}
+
+###
+# NOTE: The following routines may be called in the routines below with very
+# little time penalty.
+###
+sub Date_SetTime {
+ print "DEBUG: Date_SetTime\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$h,$mn,$s)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ my($y,$m,$d)=();
+
+ if (! &Date_Split($date)) {
+ $date=&ParseDateString($date);
+ return "" if (! $date);
+ }
+
+ ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
+ ($h,$mn,$s)=&Date_ParseTime($h,$mn,$s);
+
+ my($ampm,$wk);
+ return "" if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
+ &Date_Join($y,$m,$d,$h,$mn,$s);
+}
+
+sub Date_SetDateField {
+ print "DEBUG: Date_SetDateField\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$field,$val,$nocheck)=@_;
+ my($y,$m,$d,$h,$mn,$s)=();
+ $nocheck=0 if (! defined $nocheck);
+
+ ($y,$m,$d,$h,$mn,$s)=&Date_Split($date);
+
+ if (! $y) {
+ $date=&ParseDateString($date);
+ return "" if (! $date);
+ ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
+ }
+
+ if (lc($field) eq "y") {
+ $y=$val;
+ } elsif (lc($field) eq "m") {
+ $m=$val;
+ } elsif (lc($field) eq "d") {
+ $d=$val;
+ } elsif (lc($field) eq "h") {
+ $h=$val;
+ } elsif (lc($field) eq "mn") {
+ $mn=$val;
+ } elsif (lc($field) eq "s") {
+ $s=$val;
+ } else {
+ confess "ERROR: Date_SetDateField: invalid field: $field\n";
+ }
+
+ $date=&Date_Join($y,$m,$d,$h,$mn,$s);
+ return $date if ($nocheck || &Date_Split($date));
+ return "";
+}
+
+########################################################################
+# OTHER SUBROUTINES
+########################################################################
+# NOTE: These routines should not call any of the routines above as
+# there will be a severe time penalty (and the possibility of
+# infinite recursion). The last couple routines above are
+# exceptions.
+# NOTE: Date_Init is a special case. It should be called (conditionally)
+# in every routine that uses any variable from the Date::Manip
+# namespace.
+########################################################################
+
+sub Date_DaysInMonth {
+ print "DEBUG: Date_DaysInMonth\n" if ($Curr{"Debug"} =~ /trace/);
+ my($m,$y)=@_;
+ $y=&Date_FixYear($y) if (length($y)!=4);
+ my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
+ $d_in_m[2]=29 if (&Date_LeapYear($y));
+ return $d_in_m[$m];
+}
+
+sub Date_DayOfWeek {
+ print "DEBUG: Date_DayOfWeek\n" if ($Curr{"Debug"} =~ /trace/);
+ my($m,$d,$y)=@_;
+ $y=&Date_FixYear($y) if (length($y)!=4);
+ my($dayofweek,$dec31)=();
+
+ $dec31=5; # Dec 31, 1BC was Friday
+ $dayofweek=(&Date_DaysSince1BC($m,$d,$y)+$dec31) % 7;
+ $dayofweek=7 if ($dayofweek==0);
+ return $dayofweek;
+}
+
+# Can't be in "use integer" because the numbers are too big.
+no integer;
+sub Date_SecsSince1970 {
+ print "DEBUG: Date_SecsSince1970\n" if ($Curr{"Debug"} =~ /trace/);
+ my($m,$d,$y,$h,$mn,$s)=@_;
+ $y=&Date_FixYear($y) if (length($y)!=4);
+ my($sec_now,$sec_70)=();
+ $sec_now=(&Date_DaysSince1BC($m,$d,$y)-1)*24*3600 + $h*3600 + $mn*60 + $s;
+# $sec_70 =(&Date_DaysSince1BC(1,1,1970)-1)*24*3600;
+ $sec_70 =62167219200;
+ return ($sec_now-$sec_70);
+}
+
+sub Date_SecsSince1970GMT {
+ print "DEBUG: Date_SecsSince1970GMT\n" if ($Curr{"Debug"} =~ /trace/);
+ my($m,$d,$y,$h,$mn,$s)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ $y=&Date_FixYear($y) if (length($y)!=4);
+
+ my($sec)=&Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
+ return $sec if ($Cnf{"ConvTZ"} eq "IGNORE");
+
+ my($tz)=$Cnf{"ConvTZ"};
+ $tz=$Cnf{"TZ"} if (! $tz);
+ $tz=$Zone{"n2o"}{lc($tz)} if ($tz !~ /^[+-]\d{4}$/);
+
+ my($tzs)=1;
+ $tzs=-1 if ($tz<0);
+ $tz=~/.(..)(..)/;
+ my($tzh,$tzm)=($1,$2);
+ $sec - $tzs*($tzh*3600+$tzm*60);
+}
+use integer;
+
+sub Date_DaysSince1BC {
+ print "DEBUG: Date_DaysSince1BC\n" if ($Curr{"Debug"} =~ /trace/);
+ my($m,$d,$y)=@_;
+ $y=&Date_FixYear($y) if (length($y)!=4);
+ my($Ny,$N4,$N100,$N400,$dayofyear,$days)=();
+ my($cc,$yy)=();
+
+ $y=~ /(\d{2})(\d{2})/;
+ ($cc,$yy)=($1,$2);
+
+ # Number of full years since Dec 31, 1BC (counting the year 0000).
+ $Ny=$y;
+
+ # Number of full 4th years (incl. 0000) since Dec 31, 1BC
+ $N4=($Ny-1)/4 + 1;
+ $N4=0 if ($y==0);
+
+ # Number of full 100th years (incl. 0000)
+ $N100=$cc + 1;
+ $N100-- if ($yy==0);
+ $N100=0 if ($y==0);
+
+ # Number of full 400th years (incl. 0000)
+ $N400=($N100-1)/4 + 1;
+ $N400=0 if ($y==0);
+
+ $dayofyear=&Date_DayOfYear($m,$d,$y);
+ $days= $Ny*365 + $N4 - $N100 + $N400 + $dayofyear;
+
+ return $days;
+}
+
+sub Date_DayOfYear {
+ print "DEBUG: Date_DayOfYear\n" if ($Curr{"Debug"} =~ /trace/);
+ my($m,$d,$y)=@_;
+ $y=&Date_FixYear($y) if (length($y)!=4);
+ # DinM = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
+ my(@days) = ( 0, 31, 59, 90,120,151,181,212,243,273,304,334,365);
+ my($ly)=0;
+ $ly=1 if ($m>2 && &Date_LeapYear($y));
+ return ($days[$m-1]+$d+$ly);
+}
+
+sub Date_DaysInYear {
+ print "DEBUG: Date_DaysInYear\n" if ($Curr{"Debug"} =~ /trace/);
+ my($y)=@_;
+ $y=&Date_FixYear($y) if (length($y)!=4);
+ return 366 if (&Date_LeapYear($y));
+ return 365;
+}
+
+sub Date_WeekOfYear {
+ print "DEBUG: Date_WeekOfYear\n" if ($Curr{"Debug"} =~ /trace/);
+ my($m,$d,$y,$f)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ $y=&Date_FixYear($y) if (length($y)!=4);
+
+ my($day,$dow,$doy)=();
+ $doy=&Date_DayOfYear($m,$d,$y);
+
+ # The current DayOfYear and DayOfWeek
+ if ($Cnf{"Jan1Week1"}) {
+ $day=1;
+ } else {
+ $day=4;
+ }
+ $dow=&Date_DayOfWeek(1,$day,$y);
+
+ # Move back to the first day of week 1.
+ $f-=7 if ($f>$dow);
+ $day-= ($dow-$f);
+
+ return 0 if ($day>$doy); # Day is in last week of previous year
+ return (($doy-$day)/7 + 1);
+}
+
+sub Date_LeapYear {
+ print "DEBUG: Date_LeapYear\n" if ($Curr{"Debug"} =~ /trace/);
+ my($y)=@_;
+ $y=&Date_FixYear($y) if (length($y)!=4);
+ return 0 unless $y % 4 == 0;
+ return 1 unless $y % 100 == 0;
+ return 0 unless $y % 400 == 0;
+ return 1;
+}
+
+sub Date_DaySuffix {
+ print "DEBUG: Date_DaySuffix\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ return $Lang{$Cnf{"Language"}}{"DoML"}[$d-1];
+}
+
+sub Date_ConvTZ {
+ print "DEBUG: Date_ConvTZ\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$from,$to)=@_;
+ if (not Date_Split($date)) {
+ croak "date passed in ('$date') is not a Date::Manip object";
+ }
+
+ &Date_Init() if (! $Curr{"InitDone"});
+ my($gmt)=();
+
+ if (! $from) {
+
+ if (! $to) {
+ # TZ -> ConvTZ
+ return $date if ($Cnf{"ConvTZ"} eq "IGNORE" or ! $Cnf{"ConvTZ"});
+ $from=$Cnf{"TZ"};
+ $to=$Cnf{"ConvTZ"};
+
+ } else {
+ # ConvTZ,TZ -> $to
+ $from=$Cnf{"ConvTZ"};
+ $from=$Cnf{"TZ"} if (! $from);
+ }
+
+ } else {
+
+ if (! $to) {
+ # $from -> ConvTZ,TZ
+ return $date if ($Cnf{"ConvTZ"} eq "IGNORE");
+ $to=$Cnf{"ConvTZ"};
+ $to=$Cnf{"TZ"} if (! $to);
+
+ } else {
+ # $from -> $to
+ }
+ }
+
+ $to=$Zone{"n2o"}{lc($to)}
+ if (exists $Zone{"n2o"}{lc($to)});
+ $from=$Zone{"n2o"}{lc($from)}
+ if (exists $Zone{"n2o"}{lc($from)});
+ $gmt=$Zone{"n2o"}{"gmt"};
+
+ return $date if ($from !~ /^[+-]\d{4}$/ or $to !~ /^[+-]\d{4}$/);
+ return $date if ($from eq $to);
+
+ my($s1,$h1,$m1,$s2,$h2,$m2,$d,$h,$m,$sign,$delta,$err,$yr,$mon,$sec)=();
+ # We're going to try to do the calculation without calling DateCalc.
+ ($yr,$mon,$d,$h,$m,$sec)=&Date_Split($date, 1);
+
+ # Convert $date from $from to GMT
+ $from=~/([+-])(\d{2})(\d{2})/;
+ ($s1,$h1,$m1)=($1,$2,$3);
+ $s1= ($s1 eq "-" ? "+" : "-"); # switch sign
+ $sign=$s1 . "1"; # + or - 1
+
+ # and from GMT to $to
+ $to=~/([+-])(\d{2})(\d{2})/;
+ ($s2,$h2,$m2)=($1,$2,$3);
+
+ if ($s1 eq $s2) {
+ # Both the same sign
+ $m+= $sign*($m1+$m2);
+ $h+= $sign*($h1+$h2);
+ } else {
+ $sign=($s2 eq "-" ? +1 : -1) if ($h1<$h2 || ($h1==$h2 && $m1<$m2));
+ $m+= $sign*($m1-$m2);
+ $h+= $sign*($h1-$h2);
+ }
+
+ if ($m>59) {
+ $h+= $m/60;
+ $m-= ($m/60)*60;
+ } elsif ($m<0) {
+ $h+= ($m/60 - 1);
+ $m-= ($m/60 - 1)*60;
+ }
+
+ if ($h>23) {
+ $delta=$h/24;
+ $h -= $delta*24;
+ if (($d + $delta) > 28) {
+ $date=&Date_Join($yr,$mon,$d,$h,$m,$sec);
+ return &DateCalc_DateDelta($date,"+0:0:0:$delta:0:0:0",\$err,0);
+ }
+ $d+= $delta;
+ } elsif ($h<0) {
+ $delta=-$h/24 + 1;
+ $h += $delta*24;
+ if (($d - $delta) < 1) {
+ $date=&Date_Join($yr,$mon,$d,$h,$m,$sec);
+ return &DateCalc_DateDelta($date,"-0:0:0:$delta:0:0:0",\$err,0);
+ }
+ $d-= $delta;
+ }
+ return &Date_Join($yr,$mon,$d,$h,$m,$sec);
+}
+
+sub Date_TimeZone {
+ print "DEBUG: Date_TimeZone\n" if ($Curr{"Debug"} =~ /trace/);
+ my($null,$tz,@tz,$std,$dst,$time,$isdst,$tmp,$in)=();
+ &Date_Init() if (! $Curr{"InitDone"});
+
+ # Get timezones from all of the relevant places
+
+ push(@tz,$Cnf{"TZ"}) if (defined $Cnf{"TZ"}); # TZ config var
+ push(@tz,$ENV{"TZ"}) if (defined $ENV{"TZ"}); # TZ environ var
+ push(@tz,$ENV{'SYS$TIMEZONE_RULE'})
+ if defined $ENV{'SYS$TIMEZONE_RULE'}; # VMS TZ environ var
+ push(@tz,$ENV{'SYS$TIMEZONE_NAME'})
+ if defined $ENV{'SYS$TIMEZONE_NAME'}; # VMS TZ name environ var
+ push(@tz,$ENV{'UCX$TZ'})
+ if defined $ENV{'UCX$TZ'}; # VMS TZ environ var
+ push(@tz,$ENV{'TCPIP$TZ'})
+ if defined $ENV{'TCPIP$TZ'}; # VMS TZ environ var
+
+ # The `date` command... if we're doing taint checking, we need to
+ # always call it with a full path... otherwise, use the user's path.
+ #
+ # Microsoft operating systems don't have a date command built in. Try
+ # to trap all the various ways of knowing we are on one of these systems.
+ #
+ # We'll try `date +%Z` first, and if that fails, we'll take just the
+ # `date` program and assume the output is of the format:
+ # Thu Aug 31 14:57:46 EDT 2000
+
+ unless (($^X =~ /perl\.exe$/i) or
+ ($OS eq "Windows") or
+ ($OS eq "Netware") or
+ ($OS eq "VMS")) {
+ if ($Date::Manip::NoTaint) {
+ if ($OS eq "VMS") {
+ $tz=$ENV{'SYS$TIMEZONE_NAME'};
+ if (! $tz) {
+ $tz=$ENV{'MULTINET_TIMEZONE'};
+ if (! $tz) {
+ $tz=$ENV{'SYS$TIMEZONE_DIFFERENTIAL'}/3600.; # e.g. '-4' for EDT
+ }
+ }
+ } else {
+ $tz=`date +%Z 2> /dev/null`;
+ chomp($tz);
+ if (! $tz) {
+ $tz=`date 2> /dev/null`;
+ chomp($tz);
+ $tz=(split(/\s+/,$tz))[4];
+ }
+ }
+ push(@tz,$tz);
+ } else {
+ # We need to satisfy taint checking, but also look in all the
+ # directories in @DatePath.
+ #
+ local $ENV{PATH} = join(':', @Date::Manip::DatePath);
+ local $ENV{BASH_ENV} = '';
+ $tz=`date +%Z 2> /dev/null`;
+ chomp($tz);
+ if (! $tz) {
+ $tz=`date 2> /dev/null`;
+ chomp($tz);
+ $tz=(split(/\s+/,$tz))[4];
+ }
+ push(@tz,$tz);
+ }
+ }
+
+ push(@tz,$main::TZ) if (defined $main::TZ); # $main::TZ
+
+ if (-s "/etc/TIMEZONE") { # /etc/TIMEZONE
+ $in=new IO::File;
+ $in->open("/etc/TIMEZONE","r");
+ while (! eof($in)) {
+ $tmp=<$in>;
+ if ($tmp =~ /^TZ\s*=\s*(.*?)\s*$/) {
+ push(@tz,$1);
+ last;
+ }
+ }
+ $in->close;
+ }
+
+ if (-s "/etc/timezone") { # /etc/timezone
+ $in=new IO::File;
+ $in->open("/etc/timezone","r");
+ while (! eof($in)) {
+ $tmp=<$in>;
+ next if ($tmp =~ /^\s*\043/);
+ chomp($tmp);
+ if ($tmp =~ /^\s*(.*?)\s*$/) {
+ push(@tz,$1);
+ last;
+ }
+ }
+ $in->close;
+ }
+
+ # Now parse each one to find the first valid one.
+ foreach $tz (@tz) {
+ $tz =~ s/\s*$//;
+ $tz =~ s/^\s*//;
+ next if (! $tz);
+
+ return uc($tz)
+ if (defined $Zone{"n2o"}{lc($tz)});
+
+ if ($tz =~ /^[+-]\d{4}$/) {
+ return $tz;
+ } elsif ($tz =~ /^([+-]\d{2})(?::(\d{2}))?$/) {
+ my($h,$m)=($1,$2);
+ $m="00" if (! $m);
+ return "$h$m";
+ }
+
+ # Handle US/Eastern format
+ if ($tz =~ /^$Zone{"tzones"}$/i) {
+ $tmp=lc $1;
+ $tz=$Zone{"tz2z"}{$tmp};
+ }
+
+ # Handle STD#DST# format (and STD-#DST-# formats)
+ if ($tz =~ /^([a-z]+)-?\d([a-z]+)-?\d?$/i) {
+ ($std,$dst)=($1,$2);
+ next if (! defined $Zone{"n2o"}{lc($std)} or
+ ! defined $Zone{"n2o"}{lc($dst)});
+ $time = time();
+ ($null,$null,$null,$null,$null,$null,$null,$null,$isdst) =
+ localtime($time);
+ return uc($dst) if ($isdst);
+ return uc($std);
+ }
+ }
+
+ confess "ERROR: Date::Manip unable to determine TimeZone.\n";
+}
+
+# Returns 1 if $date is a work day. If $time is non-zero, the time is
+# also checked to see if it falls within work hours. Returns "" if
+# an invalid date is passed in.
+sub Date_IsWorkDay {
+ print "DEBUG: Date_IsWorkDay\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$time)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ $date=&ParseDateString($date);
+ return "" if (! $date);
+ my($d)=$date;
+ $d=&Date_SetTime($date,$Cnf{"WorkDayBeg"}) if (! $time);
+
+ my($y,$mon,$day,$tmp,$h,$m,$dow)=();
+ ($y,$mon,$day,$h,$m,$tmp)=&Date_Split($d, 1);
+ $dow=&Date_DayOfWeek($mon,$day,$y);
+
+ return 0 if ($dow<$Cnf{"WorkWeekBeg"} or
+ $dow>$Cnf{"WorkWeekEnd"} or
+ "$h:$m" lt $Cnf{"WorkDayBeg"} or
+ "$h:$m" gt $Cnf{"WorkDayEnd"});
+
+ if (! exists $Holiday{"dates"}{$y}) {
+ # There will be recursion problems if we ever end up here twice.
+ $Holiday{"dates"}{$y}={};
+ &Date_UpdateHolidays($y)
+ }
+ $d=&Date_SetTime($date,"00:00:00");
+ return 0 if (exists $Holiday{"dates"}{$y}{$d});
+ 1;
+}
+
+# Finds the day $off work days from now. If $time is passed in, we must
+# also take into account the time of day.
+#
+# If $time is not passed in, day 0 is today (if today is a workday) or the
+# next work day if it isn't. In any case, the time of day is unaffected.
+#
+# If $time is passed in, day 0 is now (if now is part of a workday) or the
+# start of the very next work day.
+sub Date_NextWorkDay {
+ print "DEBUG: Date_NextWorkDay\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$off,$time)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ $date=&ParseDateString($date);
+ my($err)=();
+
+ if (! &Date_IsWorkDay($date,$time)) {
+ if ($time) {
+ while (1) {
+ $date=&Date_GetNext($date,undef,0,$Cnf{"WorkDayBeg"});
+ last if (&Date_IsWorkDay($date,$time));
+ }
+ } else {
+ while (1) {
+ $date=&DateCalc_DateDelta($date,"+0:0:0:1:0:0:0",\$err,0);
+ last if (&Date_IsWorkDay($date,$time));
+ }
+ }
+ }
+
+ while ($off>0) {
+ while (1) {
+ $date=&DateCalc_DateDelta($date,"+0:0:0:1:0:0:0",\$err,0);
+ last if (&Date_IsWorkDay($date,$time));
+ }
+ $off--;
+ }
+
+ return $date;
+}
+
+# Finds the day $off work days before now. If $time is passed in, we must
+# also take into account the time of day.
+#
+# If $time is not passed in, day 0 is today (if today is a workday) or the
+# previous work day if it isn't. In any case, the time of day is unaffected.
+#
+# If $time is passed in, day 0 is now (if now is part of a workday) or the
+# end of the previous work period. Note that since the end of a work day
+# will automatically be turned into the start of the next one, this time
+# may actually be treated as AFTER the current time.
+sub Date_PrevWorkDay {
+ print "DEBUG: Date_PrevWorkDay\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$off,$time)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ $date=&ParseDateString($date);
+ my($err)=();
+
+ if (! &Date_IsWorkDay($date,$time)) {
+ if ($time) {
+ while (1) {
+ $date=&Date_GetPrev($date,undef,0,$Cnf{"WorkDayEnd"});
+ last if (&Date_IsWorkDay($date,$time));
+ }
+ while (1) {
+ $date=&Date_GetNext($date,undef,0,$Cnf{"WorkDayBeg"});
+ last if (&Date_IsWorkDay($date,$time));
+ }
+ } else {
+ while (1) {
+ $date=&DateCalc_DateDelta($date,"-0:0:0:1:0:0:0",\$err,0);
+ last if (&Date_IsWorkDay($date,$time));
+ }
+ }
+ }
+
+ while ($off>0) {
+ while (1) {
+ $date=&DateCalc_DateDelta($date,"-0:0:0:1:0:0:0",\$err,0);
+ last if (&Date_IsWorkDay($date,$time));
+ }
+ $off--;
+ }
+
+ return $date;
+}
+
+# This finds the nearest workday to $date. If $date is a workday, it
+# is returned.
+sub Date_NearestWorkDay {
+ print "DEBUG: Date_NearestWorkDay\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date,$tomorrow)=@_;
+ &Date_Init() if (! $Curr{"InitDone"});
+ $date=&ParseDateString($date);
+ my($a,$b,$dela,$delb,$err)=();
+ $tomorrow=$Cnf{"TomorrowFirst"} if (! defined $tomorrow);
+
+ return $date if (&Date_IsWorkDay($date));
+
+ # Find the nearest one.
+ if ($tomorrow) {
+ $dela="+0:0:0:1:0:0:0";
+ $delb="-0:0:0:1:0:0:0";
+ } else {
+ $dela="-0:0:0:1:0:0:0";
+ $delb="+0:0:0:1:0:0:0";
+ }
+ $a=$b=$date;
+
+ while (1) {
+ $a=&DateCalc_DateDelta($a,$dela,\$err);
+ return $a if (&Date_IsWorkDay($a));
+ $b=&DateCalc_DateDelta($b,$delb,\$err);
+ return $b if (&Date_IsWorkDay($b));
+ }
+}
+
+# &Date_NthDayOfYear($y,$n);
+# Returns a list of (YYYY,MM,DD,HH,MM,SS) for the Nth day of the year.
+sub Date_NthDayOfYear {
+ no integer;
+ print "DEBUG: Date_NthDayOfYear\n" if ($Curr{"Debug"} =~ /trace/);
+ my($y,$n)=@_;
+ $y=$Curr{"Y"} if (! $y);
+ $n=1 if (! defined $n or $n eq "");
+ $n+=0; # to turn 023 into 23
+ $y=&Date_FixYear($y) if (length($y)<4);
+ my $leap=&Date_LeapYear($y);
+ return () if ($n<1);
+ return () if ($n >= ($leap ? 367 : 366));
+
+ my(@d_in_m)=(31,28,31,30,31,30,31,31,30,31,30,31);
+ $d_in_m[1]=29 if ($leap);
+
+ # Calculate the hours, minutes, and seconds into the day.
+ my $remain=($n - int($n))*24;
+ my $h=int($remain);
+ $remain=($remain - $h)*60;
+ my $mn=int($remain);
+ $remain=($remain - $mn)*60;
+ my $s=$remain;
+
+ # Calculate the month and the day.
+ my($m,$d)=(0,0);
+ $n=int($n);
+ while ($n>0) {
+ $m++;
+ if ($n<=$d_in_m[0]) {
+ $d=int($n);
+ $n=0;
+ } else {
+ $n-= $d_in_m[0];
+ shift(@d_in_m);
+ }
+ }
+
+ ($y,$m,$d,$h,$mn,$s);
+}
+
+########################################################################
+# NOT FOR EXPORT
+########################################################################
+
+# This is used in Date_Init to fill in a hash based on international
+# data. It takes a list of keys and values and returns both a hash
+# with these values and a regular expression of keys.
+#
+# IN:
+# $data = [ key1 val1 key2 val2 ... ]
+# $opts = lc : lowercase the keys in the regexp
+# sort : sort (by length) the keys in the regexp
+# back : create a regexp with a back reference
+# escape : escape all strings in the regexp
+#
+# OUT:
+# $regexp = '(?:key1|key2|...)'
+# $hash = { key1=>val1 key2=>val2 ... }
+
+sub Date_InitHash {
+ print "DEBUG: Date_InitHash\n" if ($Curr{"Debug"} =~ /trace/);
+ my($data,$regexp,$opts,$hash)=@_;
+ my(@data)=@$data;
+ my($key,$val,@list)=();
+
+ # Parse the options
+ my($lc,$sort,$back,$escape)=(0,0,0,0);
+ $lc=1 if ($opts =~ /lc/i);
+ $sort=1 if ($opts =~ /sort/i);
+ $back=1 if ($opts =~ /back/i);
+ $escape=1 if ($opts =~ /escape/i);
+
+ # Create the hash
+ while (@data) {
+ ($key,$val,@data)=@data;
+ $key=lc($key) if ($lc);
+ $$hash{$key}=$val;
+ }
+
+ # Create the regular expression
+ if ($regexp) {
+ @list=keys(%$hash);
+ @list=sort sortByLength(@list) if ($sort);
+ if ($escape) {
+ foreach $val (@list) {
+ $val="\Q$val\E";
+ }
+ }
+ if ($back) {
+ $$regexp="(" . join("|",@list) . ")";
+ } else {
+ $$regexp="(?:" . join("|",@list) . ")";
+ }
+ }
+}
+
+# This is used in Date_Init to fill in regular expressions, lists, and
+# hashes based on international data. It takes a list of lists which have
+# to be stored as regular expressions (to find any element in the list),
+# lists, and hashes (indicating the location in the lists).
+#
+# IN:
+# $data = [ [ [ valA1 valA2 ... ][ valA1' valA2' ... ] ... ]
+# [ [ valB1 valB2 ... ][ valB1' valB2' ... ] ... ]
+# ...
+# [ [ valZ1 valZ2 ... ] [valZ1' valZ1' ... ] ... ] ]
+# $lists = [ \@listA \@listB ... \@listZ ]
+# $opts = lc : lowercase the values in the regexp
+# sort : sort (by length) the values in the regexp
+# back : create a regexp with a back reference
+# escape : escape all strings in the regexp
+# $hash = [ \%hash, TYPE ]
+# TYPE 0 : $hash{ valBn=>n-1 }
+# TYPE 1 : $hash{ valBn=>n }
+#
+# OUT:
+# $regexp = '(?:valA1|valA2|...|valB1|...)'
+# $lists = [ [ valA1 valA2 ... ] # only the 1st list (or
+# [ valB1 valB2 ... ] ... ] # 2nd for int. characters)
+# $hash
+
+sub Date_InitLists {
+ print "DEBUG: Date_InitLists\n" if ($Curr{"Debug"} =~ /trace/);
+ my($data,$regexp,$opts,$lists,$hash)=@_;
+ my(@data)=@$data;
+ my(@lists)=@$lists;
+ my($i,@ele,$ele,@list,$j,$tmp)=();
+
+ # Parse the options
+ my($lc,$sort,$back,$escape)=(0,0,0,0);
+ $lc=1 if ($opts =~ /lc/i);
+ $sort=1 if ($opts =~ /sort/i);
+ $back=1 if ($opts =~ /back/i);
+ $escape=1 if ($opts =~ /escape/i);
+
+ # Set each of the lists
+ if (@lists) {
+ confess "ERROR: Date_InitLists: lists must be 1 per data\n"
+ if ($#lists != $#data);
+ for ($i=0; $i<=$#data; $i++) {
+ @ele=@{ $data[$i] };
+ if ($Cnf{"IntCharSet"} && $#ele>0) {
+ @{ $lists[$i] } = @{ $ele[1] };
+ } else {
+ @{ $lists[$i] } = @{ $ele[0] };
+ }
+ }
+ }
+
+ # Create the hash
+ my($hashtype,$hashsave,%hash)=();
+ if (@$hash) {
+ ($hash,$hashtype)=@$hash;
+ $hashsave=1;
+ } else {
+ $hashtype=0;
+ $hashsave=0;
+ }
+ for ($i=0; $i<=$#data; $i++) {
+ @ele=@{ $data[$i] };
+ foreach $ele (@ele) {
+ @list = @{ $ele };
+ for ($j=0; $j<=$#list; $j++) {
+ $tmp=$list[$j];
+ next if (! $tmp);
+ $tmp=lc($tmp) if ($lc);
+ $hash{$tmp}= $j+$hashtype;
+ }
+ }
+ }
+ %$hash = %hash if ($hashsave);
+
+ # Create the regular expression
+ if ($regexp) {
+ @list=keys(%hash);
+ @list=sort sortByLength(@list) if ($sort);
+ if ($escape) {
+ foreach $ele (@list) {
+ $ele="\Q$ele\E";
+ }
+ }
+ if ($back) {
+ $$regexp="(" . join("|",@list) . ")";
+ } else {
+ $$regexp="(?:" . join("|",@list) . ")";
+ }
+ }
+}
+
+# This is used in Date_Init to fill in regular expressions and lists based
+# on international data. This takes a list of strings and returns a regular
+# expression (to find any one of them).
+#
+# IN:
+# $data = [ string1 string2 ... ]
+# $opts = lc : lowercase the values in the regexp
+# sort : sort (by length) the values in the regexp
+# back : create a regexp with a back reference
+# escape : escape all strings in the regexp
+#
+# OUT:
+# $regexp = '(string1|string2|...)'
+
+sub Date_InitStrings {
+ print "DEBUG: Date_InitStrings\n" if ($Curr{"Debug"} =~ /trace/);
+ my($data,$regexp,$opts)=@_;
+ my(@list)=@{ $data };
+
+ # Parse the options
+ my($lc,$sort,$back,$escape)=(0,0,0,0);
+ $lc=1 if ($opts =~ /lc/i);
+ $sort=1 if ($opts =~ /sort/i);
+ $back=1 if ($opts =~ /back/i);
+ $escape=1 if ($opts =~ /escape/i);
+
+ # Create the regular expression
+ my($ele)=();
+ @list=sort sortByLength(@list) if ($sort);
+ if ($escape) {
+ foreach $ele (@list) {
+ $ele="\Q$ele\E";
+ }
+ }
+ if ($back) {
+ $$regexp="(" . join("|",@list) . ")";
+ } else {
+ $$regexp="(?:" . join("|",@list) . ")";
+ }
+ $$regexp=lc($$regexp) if ($lc);
+}
+
+# items is passed in (either as a space separated string, or a reference to
+# a list) and a regular expression which matches any one of the items is
+# prepared. The regular expression will be of one of the forms:
+# "(a|b)" @list not empty, back option included
+# "(?:a|b)" @list not empty
+# "()" @list empty, back option included
+# "" @list empty
+# $options is a string which contains any of the following strings:
+# back : the regular expression has a backreference
+# opt : the regular expression is optional and a "?" is appended in
+# the first two forms
+# optws : the regular expression is optional and may be replaced by
+# whitespace
+# optWs : the regular expression is optional, but if not present, must
+# be replaced by whitespace
+# sort : the items in the list are sorted by length (longest first)
+# lc : the string is lowercased
+# under : any underscores are converted to spaces
+# pre : it may be preceded by whitespace
+# Pre : it must be preceded by whitespace
+# PRE : it must be preceded by whitespace or the start
+# post : it may be followed by whitespace
+# Post : it must be followed by whitespace
+# POST : it must be followed by whitespace or the end
+# Spaces due to pre/post options will not be included in the back reference.
+#
+# If $array is included, then the elements will also be returned as a list.
+# $array is a string which may contain any of the following:
+# keys : treat the list as a hash and only the keys go into the regexp
+# key0 : treat the list as the values of a hash with keys 0 .. N-1
+# key1 : treat the list as the values of a hash with keys 1 .. N
+# val0 : treat the list as the keys of a hash with values 0 .. N-1
+# val1 : treat the list as the keys of a hash with values 1 .. N
+
+# &Date_InitLists([$lang{"month_name"},$lang{"month_abb"}],
+# [\$Month,"lc,sort,back"],
+# [\@Month,\@Mon],
+# [\%Month,1]);
+
+# This is used in Date_Init to prepare regular expressions. A list of
+# items is passed in (either as a space separated string, or a reference to
+# a list) and a regular expression which matches any one of the items is
+# prepared. The regular expression will be of one of the forms:
+# "(a|b)" @list not empty, back option included
+# "(?:a|b)" @list not empty
+# "()" @list empty, back option included
+# "" @list empty
+# $options is a string which contains any of the following strings:
+# back : the regular expression has a backreference
+# opt : the regular expression is optional and a "?" is appended in
+# the first two forms
+# optws : the regular expression is optional and may be replaced by
+# whitespace
+# optWs : the regular expression is optional, but if not present, must
+# be replaced by whitespace
+# sort : the items in the list are sorted by length (longest first)
+# lc : the string is lowercased
+# under : any underscores are converted to spaces
+# pre : it may be preceded by whitespace
+# Pre : it must be preceded by whitespace
+# PRE : it must be preceded by whitespace or the start
+# post : it may be followed by whitespace
+# Post : it must be followed by whitespace
+# POST : it must be followed by whitespace or the end
+# Spaces due to pre/post options will not be included in the back reference.
+#
+# If $array is included, then the elements will also be returned as a list.
+# $array is a string which may contain any of the following:
+# keys : treat the list as a hash and only the keys go into the regexp
+# key0 : treat the list as the values of a hash with keys 0 .. N-1
+# key1 : treat the list as the values of a hash with keys 1 .. N
+# val0 : treat the list as the keys of a hash with values 0 .. N-1
+# val1 : treat the list as the keys of a hash with values 1 .. N
+sub Date_Regexp {
+ print "DEBUG: Date_Regexp\n" if ($Curr{"Debug"} =~ /trace/);
+ my($list,$options,$array)=@_;
+ my(@list,$ret,%hash,$i)=();
+ local($_)=();
+ $options="" if (! defined $options);
+ $array="" if (! defined $array);
+
+ my($sort,$lc,$under)=(0,0,0);
+ $sort =1 if ($options =~ /sort/i);
+ $lc =1 if ($options =~ /lc/i);
+ $under=1 if ($options =~ /under/i);
+ my($back,$opt,$pre,$post,$ws)=("?:","","","","");
+ $back ="" if ($options =~ /back/i);
+ $opt ="?" if ($options =~ /opt/i);
+ $pre ='\s*' if ($options =~ /pre/);
+ $pre ='\s+' if ($options =~ /Pre/);
+ $pre ='(?:\s+|^)' if ($options =~ /PRE/);
+ $post ='\s*' if ($options =~ /post/);
+ $post ='\s+' if ($options =~ /Post/);
+ $post ='(?:$|\s+)' if ($options =~ /POST/);
+ $ws ='\s*' if ($options =~ /optws/);
+ $ws ='\s+' if ($options =~ /optws/);
+
+ my($hash,$keys,$key0,$key1,$val0,$val1)=(0,0,0,0,0,0);
+ $keys =1 if ($array =~ /keys/i);
+ $key0 =1 if ($array =~ /key0/i);
+ $key1 =1 if ($array =~ /key1/i);
+ $val0 =1 if ($array =~ /val0/i);
+ $val1 =1 if ($array =~ /val1/i);
+ $hash =1 if ($keys or $key0 or $key1 or $val0 or $val1);
+
+ my($ref)=ref $list;
+ if (! $ref) {
+ $list =~ s/\s*$//;
+ $list =~ s/^\s*//;
+ $list =~ s/\s+/&&&/g;
+ } elsif ($ref eq "ARRAY") {
+ $list = join("&&&",@$list);
+ } else {
+ confess "ERROR: Date_Regexp.\n";
+ }
+
+ if (! $list) {
+ if ($back eq "") {
+ return "()";
+ } else {
+ return "";
+ }
+ }
+
+ $list=lc($list) if ($lc);
+ $list=~ s/_/ /g if ($under);
+ @list=split(/&&&/,$list);
+ if ($keys) {
+ %hash=@list;
+ @list=keys %hash;
+ } elsif ($key0 or $key1 or $val0 or $val1) {
+ $i=0;
+ $i=1 if ($key1 or $val1);
+ if ($key0 or $key1) {
+ %hash= map { $_,$i++ } @list;
+ } else {
+ %hash= map { $i++,$_ } @list;
+ }
+ }
+ @list=sort sortByLength(@list) if ($sort);
+
+ $ret="($back" . join("|",@list) . ")";
+ $ret="(?:$pre$ret$post)" if ($pre or $post);
+ $ret.=$opt;
+ $ret="(?:$ret|$ws)" if ($ws);
+
+ if ($array and $hash) {
+ return ($ret,%hash);
+ } elsif ($array) {
+ return ($ret,@list);
+ } else {
+ return $ret;
+ }
+}
+
+# This will produce a delta with the correct number of signs. At most two
+# signs will be in it normally (one before the year, and one in front of
+# the day), but if appropriate, signs will be in front of all elements.
+# Also, as many of the signs will be equivalent as possible.
+sub Delta_Normalize {
+ print "DEBUG: Delta_Normalize\n" if ($Curr{"Debug"} =~ /trace/);
+ my($delta,$mode)=@_;
+ return "" if (! $delta);
+ return "+0:+0:+0:+0:+0:+0:+0"
+ if ($delta =~ /^([+-]?0+:){6}[+-]?0+$/ and $Cnf{"DeltaSigns"});
+ return "+0:0:0:0:0:0:0" if ($delta =~ /^([+-]?0+:){6}[+-]?0+$/);
+
+ my($tmp,$sign1,$sign2,$len)=();
+
+ # Calculate the length of the day in minutes
+ $len=24*60;
+ $len=$Curr{"WDlen"} if ($mode==2 || $mode==3);
+
+ # We have to get the sign of every component explicitely so that a "-0"
+ # or "+0" doesn't get lost by treating it numerically (i.e. "-0:0:2" must
+ # be a negative delta).
+
+ my($y,$mon,$w,$d,$h,$m,$s)=&Delta_Split($delta);
+
+ # We need to make sure that the signs of all parts of a delta are the
+ # same. The easiest way to do this is to convert all of the large
+ # components to the smallest ones, then convert the smaller components
+ # back to the larger ones.
+
+ # Do the year/month part
+
+ $mon += $y*12; # convert y to m
+ $sign1="+";
+ if ($mon<0) {
+ $mon *= -1;
+ $sign1="-";
+ }
+
+ $y = $mon/12; # convert m to y
+ $mon -= $y*12;
+
+ $y=0 if ($y eq "-0"); # get around silly -0 problem
+ $mon=0 if ($mon eq "-0");
+
+ # Do the wk/day/hour/min/sec part
+
+ {
+ # Unfortunately, $s is overflowing for dates more than ~70 years
+ # apart.
+ no integer;
+
+ if ($mode==3 || $mode==2) {
+ $s += $d*$len*60 + $h*3600 + $m*60; # convert d/h/m to s
+ } else {
+ $s += ($d+7*$w)*$len*60 + $h*3600 + $m*60; # convert w/d/h/m to s
+ }
+ $sign2="+";
+ if ($s<0) {
+ $s*=-1;
+ $sign2="-";
+ }
+
+ $m = int($s/60); # convert s to m
+ $s -= $m*60;
+ $d = int($m/$len); # convert m to d
+ $m -= $d*$len;
+
+ # The rest should be fine.
+ }
+ $h = $m/60; # convert m to h
+ $m -= $h*60;
+ if ($mode == 3 || $mode == 2) {
+ $w = $w*1; # get around +0 problem
+ } else {
+ $w = $d/7; # convert d to w
+ $d -= $w*7;
+ }
+
+ $w=0 if ($w eq "-0"); # get around silly -0 problem
+ $d=0 if ($d eq "-0");
+ $h=0 if ($h eq "-0");
+ $m=0 if ($m eq "-0");
+ $s=0 if ($s eq "-0");
+
+ # Only include two signs if necessary
+ $sign1=$sign2 if ($y==0 and $mon==0);
+ $sign2=$sign1 if ($w==0 and $d==0 and $h==0 and $m==0 and $s==0);
+ $sign2="" if ($sign1 eq $sign2 and ! $Cnf{"DeltaSigns"});
+
+ if ($Cnf{"DeltaSigns"}) {
+ return "$sign1$y:$sign1$mon:$sign2$w:$sign2$d:$sign2$h:$sign2$m:$sign2$s";
+ } else {
+ return "$sign1$y:$mon:$sign2$w:$d:$h:$m:$s";
+ }
+}
+
+# This checks a delta to make sure it is valid. If it is, it splits
+# it and returns the elements with a sign on each. The 2nd argument
+# specifies the default sign. Blank elements are set to 0. If the
+# third element is non-nil, exactly 7 elements must be included.
+sub Delta_Split {
+ print "DEBUG: Delta_Split\n" if ($Curr{"Debug"} =~ /trace/);
+ my($delta,$sign,$exact)=@_;
+ my(@delta)=split(/:/,$delta);
+ return () if ($exact and $#delta != 6);
+ my($i)=();
+ $sign="+" if (! defined $sign);
+ for ($i=0; $i<=$#delta; $i++) {
+ $delta[$i]="0" if (! $delta[$i]);
+ return () if ($delta[$i] !~ /^[+-]?\d+$/);
+ $sign = ($delta[$i] =~ s/^([+-])// ? $1 : $sign);
+ $delta[$i] = $sign.$delta[$i];
+ }
+ @delta;
+}
+
+# Reads up to 3 arguments. $h may contain the time in any international
+# format. Any empty elements are set to 0.
+sub Date_ParseTime {
+ print "DEBUG: Date_ParseTime\n" if ($Curr{"Debug"} =~ /trace/);
+ my($h,$m,$s)=@_;
+ my($t)=&CheckTime("one");
+
+ if (defined $h and $h =~ /$t/) {
+ $h=$1;
+ $m=$2;
+ $s=$3 if (defined $3);
+ }
+ $h="00" if (! defined $h);
+ $m="00" if (! defined $m);
+ $s="00" if (! defined $s);
+
+ ($h,$m,$s);
+}
+
+# Forms a date with the 6 elements passed in (all of which must be defined).
+# No check as to validity is made.
+sub Date_Join {
+ print "DEBUG: Date_Join\n" if ($Curr{"Debug"} =~ /trace/);
+ foreach (0 .. $#_) {
+ croak "undefined arg $_ to Date_Join()" if not defined $_[$_];
+ }
+ my($y,$m,$d,$h,$mn,$s)=@_;
+ my($ym,$md,$dh,$hmn,$mns)=();
+
+ if ($Cnf{"Internal"} == 0) {
+ $ym=$md=$dh="";
+ $hmn=$mns=":";
+
+ } elsif ($Cnf{"Internal"} == 1) {
+ $ym=$md=$dh=$hmn=$mns="";
+
+ } elsif ($Cnf{"Internal"} == 2) {
+ $ym=$md="-";
+ $dh=" ";
+ $hmn=$mns=":";
+
+ } else {
+ confess "ERROR: Invalid internal format in Date_Join.\n";
+ }
+ $m="0$m" if (length($m)==1);
+ $d="0$d" if (length($d)==1);
+ $h="0$h" if (length($h)==1);
+ $mn="0$mn" if (length($mn)==1);
+ $s="0$s" if (length($s)==1);
+ "$y$ym$m$md$d$dh$h$hmn$mn$mns$s";
+}
+
+# This checks a time. If it is valid, it splits it and returns 3 elements.
+# If "one" or "two" is passed in, a regexp with 1/2 or 2 digit hours is
+# returned.
+sub CheckTime {
+ print "DEBUG: CheckTime\n" if ($Curr{"Debug"} =~ /trace/);
+ my($time)=@_;
+ my($h)='(?:0?[0-9]|1[0-9]|2[0-3])';
+ my($h2)='(?:0[0-9]|1[0-9]|2[0-3])';
+ my($m)='[0-5][0-9]';
+ my($s)=$m;
+ my($hm)="(?:". $Lang{$Cnf{"Language"}}{"SepHM"} ."|:)";
+ my($ms)="(?:". $Lang{$Cnf{"Language"}}{"SepMS"} ."|:)";
+ my($ss)=$Lang{$Cnf{"Language"}}{"SepSS"};
+ my($t)="^($h)$hm($m)(?:$ms($s)(?:$ss\\d+)?)?\$";
+ if ($time eq "one") {
+ return $t;
+ } elsif ($time eq "two") {
+ $t="^($h2)$hm($m)(?:$ms($s)(?:$ss\\d+)?)?\$";
+ return $t;
+ }
+
+ if ($time =~ /$t/i) {
+ ($h,$m,$s)=($1,$2,$3);
+ $h="0$h" if (length($h)<2);
+ $m="0$m" if (length($m)<2);
+ $s="00" if (! defined $s);
+ return ($h,$m,$s);
+ } else {
+ return ();
+ }
+}
+
+# This checks a recurrence. If it is valid, it splits it and returns the
+# elements. Otherwise, it returns an empty list.
+# ($recur0,$recur1,$flags,$dateb,$date0,$date1)=&Recur_Split($recur);
+sub Recur_Split {
+ print "DEBUG: Recur_Split\n" if ($Curr{"Debug"} =~ /trace/);
+ my($recur)=@_;
+ my(@ret,@tmp);
+
+ my($R) = '(\*?(?:[-,0-9]+[:\*]){6}[-,0-9]+)';
+ my($F) = '(?:\*([^*]*))';
+ my($DB,$D0,$D1);
+ $DB=$D0=$D1=$F;
+
+ if ($recur =~ /^$R$F?$DB?$D0?$D1?$/) {
+ @ret=($1,$2,$3,$4,$5);
+ @tmp=split(/\*/,shift(@ret));
+ return () if ($#tmp>1);
+ return (@tmp,"",@ret) if ($#tmp==0);
+ return (@tmp,@ret);
+ }
+ return ();
+}
+
+# This checks a date. If it is valid, it splits it and returns the elements.
+# If no date is passed in, it returns a regular expression for the date.
+#
+# The optional second argument says 'I really expect this to be a
+# valid Date::Manip object, please throw an exception if it is
+# not'. Otherwise, errors are signalled by returning ().
+#
+sub Date_Split {
+ print "DEBUG: Date_Split\n" if ($Curr{"Debug"} =~ /trace/);
+ my($date, $definitely_valid)=@_;
+ $definitely_valid = 0 if not defined $definitely_valid;
+ my($ym,$md,$dh,$hmn,$mns)=();
+ my($y)='(\d{4})';
+ my($m)='(0[1-9]|1[0-2])';
+ my($d)='(0[1-9]|[1-2][0-9]|3[0-1])';
+ my($h)='([0-1][0-9]|2[0-3])';
+ my($mn)='([0-5][0-9])';
+ my($s)=$mn;
+
+ if ($Cnf{"Internal"} == 0) {
+ $ym=$md=$dh="";
+ $hmn=$mns=":";
+
+ } elsif ($Cnf{"Internal"} == 1) {
+ $ym=$md=$dh=$hmn=$mns="";
+
+ } elsif ($Cnf{"Internal"} == 2) {
+ $ym=$md="-";
+ $dh=" ";
+ $hmn=$mns=":";
+
+ } else {
+ confess "ERROR: Invalid internal format in Date_Split.\n";
+ }
+
+ my($t)="^$y$ym$m$md$d$dh$h$hmn$mn$mns$s\$";
+
+ if (not defined $date or $date eq '') {
+ if ($definitely_valid) {
+ die "bad date '$date'";
+ } else {
+ return $t;
+ }
+ }
+
+ if ($date =~ /$t/) {
+ ($y,$m,$d,$h,$mn,$s)=($1,$2,$3,$4,$5,$6);
+ my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
+ $d_in_m[2]=29 if (&Date_LeapYear($y));
+ if ($d>$d_in_m[$m]) {
+ my $msg = "invalid date $date: day $d of month $m, but only $d_in_m[$m] days in that month";
+ if ($definitely_valid) {
+ die $msg;
+ }
+ else {
+ warn $msg;
+ return ();
+ }
+ }
+ return ($y,$m,$d,$h,$mn,$s);
+ }
+
+ if ($definitely_valid) {
+ die "invalid date $date: doesn't match regexp $t";
+ }
+ return ();
+}
+
+# This returns the date easter occurs on for a given year as ($month,$day).
+# This is from the Calendar FAQ.
+sub Date_Easter {
+ my($y)=@_;
+ $y=&Date_FixYear($y) if (length($y)==2);
+
+ my($c) = $y/100;
+ my($g) = $y % 19;
+ my($k) = ($c-17)/25;
+ my($i) = ($c - $c/4 - ($c-$k)/3 + 19*$g + 15) % 30;
+ $i = $i - ($i/28)*(1 - ($i/28)*(29/($i+1))*((21-$g)/11));
+ my($j) = ($y + $y/4 + $i + 2 - $c + $c/4) % 7;
+ my($l) = $i-$j;
+ my($m) = 3 + ($l+40)/44;
+ my($d) = $l + 28 - 31*($m/4);
+ return ($m,$d);
+}
+
+# This takes a list of years, months, WeekOfMonth's, and optionally
+# DayOfWeek's, and returns a list of dates. Optionally, a list of dates
+# can be passed in as the 1st argument (with the 2nd argument the null list)
+# and the year/month of these will be used.
+#
+# If $FDn is non-zero, the first week of the month contains the first
+# occurence of this day (1=Monday). If $FIn is non-zero, the first week of
+# the month contains the date (i.e. $FIn'th day of the month).
+sub Date_Recur_WoM {
+ my($y,$m,$w,$d,$FDn,$FIn)=@_;
+ my(@y)=@$y;
+ my(@m)=@$m;
+ my(@w)=@$w;
+ my(@d)=@$d;
+ my($date0,$date1,@tmp,@date,$d0,$d1,@tmp2)=();
+
+ if (@m) {
+ @tmp=();
+ foreach $y (@y) {
+ return () if (length($y)==1 || length($y)==3 || ! &IsInt($y,0,9999));
+ $y=&Date_FixYear($y) if (length($y)==2);
+ push(@tmp,$y);
+ }
+ @y=sort { $a<=>$b } (@tmp);
+
+ return () if (! @m);
+ foreach $m (@m) {
+ return () if (! &IsInt($m,1,12));
+ }
+ @m=sort { $a<=>$b } (@m);
+
+ @tmp=@tmp2=();
+ foreach $y (@y) {
+ foreach $m (@m) {
+ push(@tmp,$y);
+ push(@tmp2,$m);
+ }
+ }
+
+ @y=@tmp;
+ @m=@tmp2;
+
+ } else {
+ foreach $d0 (@y) {
+ @tmp=&Date_Split($d0);
+ return () if (! @tmp);
+ push(@tmp2,$tmp[0]);
+ push(@m,$tmp[1]);
+ }
+ @y=@tmp2;
+ }
+
+ return () if (! @w);
+ foreach $w (@w) {
+ return () if ($w==0 || ! &IsInt($w,-5,5));
+ }
+
+ if (@d) {
+ foreach $d (@d) {
+ return () if (! &IsInt($d,1,7));
+ }
+ @d=sort { $a<=>$b } (@d);
+ }
+
+ @date=();
+ foreach $y (@y) {
+ $m=shift(@m);
+
+ # Find 1st day of this month and next month
+ $date0=&Date_Join($y,$m,1,0,0,0);
+ $date1=&DateCalc($date0,"+0:1:0:0:0:0:0");
+
+ if (@d) {
+ foreach $d (@d) {
+ # Find 1st occurence of DOW (in both months)
+ $d0=&Date_GetNext($date0,$d,1);
+ $d1=&Date_GetNext($date1,$d,1);
+
+ @tmp=();
+ while (&Date_Cmp($d0,$d1)<0) {
+ push(@tmp,$d0);
+ $d0=&DateCalc($d0,"+0:0:1:0:0:0:0");
+ }
+
+ @tmp2=();
+ foreach $w (@w) {
+ if ($w>0) {
+ push(@tmp2,$tmp[$w-1]);
+ } else {
+ push(@tmp2,$tmp[$#tmp+1+$w]);
+ }
+ }
+ @tmp2=sort(@tmp2);
+ push(@date,@tmp2);
+ }
+
+ } else {
+ # Find 1st day of 1st week
+ if ($FDn != 0) {
+ $date0=&Date_GetNext($date0,$FDn,1);
+ } else {
+ $date0=&Date_Join($y,$m,$FIn,0,0,0);
+ }
+ $date0=&Date_GetPrev($date0,$Cnf{"FirstDay"},1);
+
+ # Find 1st day of 1st week of next month
+ if ($FDn != 0) {
+ $date1=&Date_GetNext($date1,$FDn,1);
+ } else {
+ $date1=&DateCalc($date1,"+0:0:0:".($FIn-1).":0:0:0") if ($FIn>1);
+ }
+ $date1=&Date_GetPrev($date1,$Cnf{"FirstDay"},1);
+
+ @tmp=();
+ while (&Date_Cmp($date0,$date1)<0) {
+ push(@tmp,$date0);
+ $date0=&DateCalc($date0,"+0:0:1:0:0:0:0");
+ }
+
+ @tmp2=();
+ foreach $w (@w) {
+ if ($w>0) {
+ push(@tmp2,$tmp[$w-1]);
+ } else {
+ push(@tmp2,$tmp[$#tmp+1+$w]);
+ }
+ }
+ @tmp2=sort(@tmp2);
+ push(@date,@tmp2);
+ }
+ }
+
+ @date;
+}
+
+# This returns a sorted list of dates formed by adding/subtracting
+# $delta to $dateb in the range $date0<=$d<$dateb. The first date int
+# the list is actually the first date<$date0 and the last date in the
+# list is the first date>=$date1 (because sometimes the set part will
+# move the date back into the range).
+sub Date_Recur {
+ my($date0,$date1,$dateb,$delta)=@_;
+ my(@ret,$d)=();
+
+ while (&Date_Cmp($dateb,$date0)<0) {
+ $dateb=&DateCalc_DateDelta($dateb,$delta);
+ }
+ while (&Date_Cmp($dateb,$date1)>=0) {
+ $dateb=&DateCalc_DateDelta($dateb,"-$delta");
+ }
+
+ # Add the dates $date0..$dateb
+ $d=$dateb;
+ while (&Date_Cmp($d,$date0)>=0) {
+ unshift(@ret,$d);
+ $d=&DateCalc_DateDelta($d,"-$delta");
+ }
+ # Add the first date earler than the range
+ unshift(@ret,$d);
+
+ # Add the dates $dateb..$date1
+ $d=&DateCalc_DateDelta($dateb,$delta);
+ while (&Date_Cmp($d,$date1)<0) {
+ push(@ret,$d);
+ $d=&DateCalc_DateDelta($d,$delta);
+ }
+ # Add the first date later than the range
+ push(@ret,$d);
+
+ @ret;
+}
+
+# This sets the values in each date of a recurrence.
+#
+# $h,$m,$s can each be values or lists "1-2,4". If any are equal to "-1",
+# they are not set (and none of the larger elements are set).
+sub Date_RecurSetTime {
+ my($date0,$date1,$dates,$h,$m,$s)=@_;
+ my(@dates)=@$dates;
+ my(@h,@m,@s,$date,@tmp)=();
+
+ $m="-1" if ($s eq "-1");
+ $h="-1" if ($m eq "-1");
+
+ if ($h ne "-1") {
+ @h=&ReturnList($h);
+ return () if ! (@h);
+ @h=sort { $a<=>$b } (@h);
+
+ @tmp=();
+ foreach $date (@dates) {
+ foreach $h (@h) {
+ push(@tmp,&Date_SetDateField($date,"h",$h,1));
+ }
+ }
+ @dates=@tmp;
+ }
+
+ if ($m ne "-1") {
+ @m=&ReturnList($m);
+ return () if ! (@m);
+ @m=sort { $a<=>$b } (@m);
+
+ @tmp=();
+ foreach $date (@dates) {
+ foreach $m (@m) {
+ push(@tmp,&Date_SetDateField($date,"mn",$m,1));
+ }
+ }
+ @dates=@tmp;
+ }
+
+ if ($s ne "-1") {
+ @s=&ReturnList($s);
+ return () if ! (@s);
+ @s=sort { $a<=>$b } (@s);
+
+ @tmp=();
+ foreach $date (@dates) {
+ foreach $s (@s) {
+ push(@tmp,&Date_SetDateField($date,"s",$s,1));
+ }
+ }
+ @dates=@tmp;
+ }
+
+ @tmp=();
+ foreach $date (@dates) {
+ push(@tmp,$date) if (&Date_Cmp($date,$date0)>=0 &&
+ &Date_Cmp($date,$date1)<0 &&
+ &Date_Split($date));
+ }
+
+ @tmp;
+}
+
+sub DateCalc_DateDate {
+ print "DEBUG: DateCalc_DateDate\n" if ($Curr{"Debug"} =~ /trace/);
+ my($D1,$D2,$mode)=@_;
+ my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
+ $mode=0 if (! defined $mode);
+
+ # Exact mode
+ if ($mode==0) {
+ my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($D1, 1);
+ my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($D2, 1);
+ my($i,@delta,$d,$delta,$y)=();
+
+ # form the delta for hour/min/sec
+ $delta[4]=$h2-$h1;
+ $delta[5]=$mn2-$mn1;
+ $delta[6]=$s2-$s1;
+
+ # form the delta for yr/mon/day
+ $delta[0]=$delta[1]=0;
+ $d=0;
+ if ($y2>$y1) {
+ $d=&Date_DaysInYear($y1) - &Date_DayOfYear($m1,$d1,$y1);
+ $d+=&Date_DayOfYear($m2,$d2,$y2);
+ for ($y=$y1+1; $y<$y2; $y++) {
+ $d+= &Date_DaysInYear($y);
+ }
+ } elsif ($y2<$y1) {
+ $d=&Date_DaysInYear($y2) - &Date_DayOfYear($m2,$d2,$y2);
+ $d+=&Date_DayOfYear($m1,$d1,$y1);
+ for ($y=$y2+1; $y<$y1; $y++) {
+ $d+= &Date_DaysInYear($y);
+ }
+ $d *= -1;
+ } else {
+ $d=&Date_DayOfYear($m2,$d2,$y2) - &Date_DayOfYear($m1,$d1,$y1);
+ }
+ $delta[2]=0;
+ $delta[3]=$d;
+
+ for ($i=0; $i<7; $i++) {
+ $delta[$i]="+".$delta[$i] if ($delta[$i]>=0);
+ }
+
+ $delta=join(":",@delta);
+ $delta=&Delta_Normalize($delta,0);
+ return $delta;
+ }
+
+ my($date1,$date2)=($D1,$D2);
+ my($tmp,$sign,$err,@tmp)=();
+
+ # make sure both are work days
+ if ($mode==2 || $mode==3) {
+ $date1=&Date_NextWorkDay($date1,0,1);
+ $date2=&Date_NextWorkDay($date2,0,1);
+ }
+
+ # make sure date1 comes before date2
+ if (&Date_Cmp($date1,$date2)>0) {
+ $sign="-";
+ $tmp=$date1;
+ $date1=$date2;
+ $date2=$tmp;
+ } else {
+ $sign="+";
+ }
+ if (&Date_Cmp($date1,$date2)==0) {
+ return "+0:+0:+0:+0:+0:+0:+0" if ($Cnf{"DeltaSigns"});
+ return "+0:0:0:0:0:0:0";
+ }
+
+ my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($date1, 1);
+ my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($date2, 1);
+ my($dy,$dm,$dw,$dd,$dh,$dmn,$ds,$ddd)=(0,0,0,0,0,0,0,0);
+
+ if ($mode != 3) {
+
+ # Do years
+ $dy=$y2-$y1;
+ $dm=0;
+ if ($dy>0) {
+ $tmp=&DateCalc_DateDelta($date1,"+$dy:0:0:0:0:0:0",\$err,0);
+ if (&Date_Cmp($tmp,$date2)>0) {
+ $dy--;
+ $tmp=$date1;
+ $tmp=&DateCalc_DateDelta($date1,"+$dy:0:0:0:0:0:0",\$err,0)
+ if ($dy>0);
+ $dm=12;
+ }
+ $date1=$tmp;
+ }
+
+ # Do months
+ $dm+=$m2-$m1;
+ if ($dm>0) {
+ $tmp=&DateCalc_DateDelta($date1,"+0:$dm:0:0:0:0:0",\$err,0);
+ if (&Date_Cmp($tmp,$date2)>0) {
+ $dm--;
+ $tmp=$date1;
+ $tmp=&DateCalc_DateDelta($date1,"+0:$dm:0:0:0:0:0",\$err,0)
+ if ($dm>0);
+ }
+ $date1=$tmp;
+ }
+
+ # At this point, check to see that we're on a business day again so that
+ # Aug 3 (Monday) -> Sep 3 (Sunday) -> Sep 4 (Monday) = 1 month
+ if ($mode==2) {
+ if (! &Date_IsWorkDay($date1,0)) {
+ $date1=&Date_NextWorkDay($date1,0,1);
+ }
+ }
+ }
+
+ # Do days
+ if ($mode==2 || $mode==3) {
+ $dd=0;
+ while (1) {
+ $tmp=&Date_NextWorkDay($date1,1,1);
+ if (&Date_Cmp($tmp,$date2)<=0) {
+ $dd++;
+ $date1=$tmp;
+ } else {
+ last;
+ }
+ }
+
+ } else {
+ ($y1,$m1,$d1)=( &Date_Split($date1, 1) )[0..2];
+ $dd=0;
+ # If we're jumping across months, set $d1 to the first of the next month
+ # (or possibly the 0th of next month which is equivalent to the last day
+ # of this month)
+ if ($m1!=$m2) {
+ $d_in_m[2]=29 if (&Date_LeapYear($y1));
+ $dd=$d_in_m[$m1]-$d1+1;
+ $d1=1;
+ $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$dd:0:0:0",\$err,0);
+ if (&Date_Cmp($tmp,$date2)>0) {
+ $dd--;
+ $d1--;
+ $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$dd:0:0:0",\$err,0);
+ }
+ $date1=$tmp;
+ }
+
+ $ddd=0;
+ if ($d1<$d2) {
+ $ddd=$d2-$d1;
+ $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$ddd:0:0:0",\$err,0);
+ if (&Date_Cmp($tmp,$date2)>0) {
+ $ddd--;
+ $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$ddd:0:0:0",\$err,0);
+ }
+ $date1=$tmp;
+ }
+ $dd+=$ddd;
+ }
+
+ # in business mode, make sure h1 comes before h2 (if not find delta between
+ # now and end of day and move to start of next business day)
+ $d1=( &Date_Split($date1, 1) )[2];
+ $dh=$dmn=$ds=0;
+ if ($mode==2 || $mode==3 and $d1 != $d2) {
+ $tmp=&Date_SetTime($date1,$Cnf{"WorkDayEnd"});
+ $tmp=&DateCalc_DateDelta($tmp,"+0:0:0:0:0:1:0")
+ if ($Cnf{"WorkDay24Hr"});
+ $tmp=&DateCalc_DateDate($date1,$tmp,0);
+ ($tmp,$tmp,$tmp,$tmp,$dh,$dmn,$ds)=&Delta_Split($tmp);
+ $date1=&Date_NextWorkDay($date1,1,0);
+ $date1=&Date_SetTime($date1,$Cnf{"WorkDayBeg"});
+ $d1=( &Date_Split($date1, 1) )[2];
+ confess "ERROR: DateCalc DateDate Business.\n" if ($d1 != $d2);
+ }
+
+ # Hours, minutes, seconds
+ $tmp=&DateCalc_DateDate($date1,$date2,0);
+ @tmp=&Delta_Split($tmp);
+ $dh += $tmp[4];
+ $dmn += $tmp[5];
+ $ds += $tmp[6];
+
+ $tmp="$sign$dy:$dm:0:$dd:$dh:$dmn:$ds";
+ &Delta_Normalize($tmp,$mode);
+}
+
+sub DateCalc_DeltaDelta {
+ print "DEBUG: DateCalc_DeltaDelta\n" if ($Curr{"Debug"} =~ /trace/);
+ my($D1,$D2,$mode)=@_;
+ my(@delta1,@delta2,$i,$delta,@delta)=();
+ $mode=0 if (! defined $mode);
+
+ @delta1=&Delta_Split($D1);
+ @delta2=&Delta_Split($D2);
+ for ($i=0; $i<7; $i++) {
+ $delta[$i]=$delta1[$i]+$delta2[$i];
+ $delta[$i]="+".$delta[$i] if ($delta[$i]>=0);
+ }
+
+ $delta=join(":",@delta);
+ $delta=&Delta_Normalize($delta,$mode);
+ return $delta;
+}
+
+sub DateCalc_DateDelta {
+ print "DEBUG: DateCalc_DateDelta\n" if ($Curr{"Debug"} =~ /trace/);
+ my($D1,$D2,$errref,$mode)=@_;
+ my($date)=();
+ my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
+ my($h1,$m1,$h2,$m2,$len,$hh,$mm)=();
+ $mode=0 if (! defined $mode);
+
+ if ($mode==2 || $mode==3) {
+ $h1=$Curr{"WDBh"};
+ $m1=$Curr{"WDBm"};
+ $h2=$Curr{"WDEh"};
+ $m2=$Curr{"WDEm"};
+ $hh=$h2-$h1;
+ $mm=$m2-$m1;
+ if ($mm<0) {
+ $hh--;
+ $mm+=60;
+ }
+ }
+
+ # Date, delta
+ my($y,$m,$d,$h,$mn,$s)=&Date_Split($D1, 1);
+ my($dy,$dm,$dw,$dd,$dh,$dmn,$ds)=&Delta_Split($D2);
+
+ # do the month/year part
+ $y+=$dy;
+ while (length($y)<4) {
+ $y = "0$y";
+ }
+ &ModuloAddition(-12,$dm,\$m,\$y); # -12 means 1-12 instead of 0-11
+ $d_in_m[2]=29 if (&Date_LeapYear($y));
+
+ # if we have gone past the last day of a month, move the date back to
+ # the last day of the month
+ if ($d>$d_in_m[$m]) {
+ $d=$d_in_m[$m];
+ }
+
+ # do the week part
+ if ($mode==0 || $mode==1) {
+ $dd += $dw*7;
+ } else {
+ $date=&DateCalc_DateDelta(&Date_Join($y,$m,$d,$h,$mn,$s),
+ "+0:0:$dw:0:0:0:0",0);
+ ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
+ }
+
+ # in business mode, set the day to a work day at this point so the h/mn/s
+ # stuff will work out
+ if ($mode==2 || $mode==3) {
+ $d=$d_in_m[$m] if ($d>$d_in_m[$m]);
+ $date=&Date_NextWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),0,1);
+ ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
+ }
+
+ # seconds, minutes, hours
+ &ModuloAddition(60,$ds,\$s,\$mn);
+ if ($mode==2 || $mode==3) {
+ while (1) {
+ &ModuloAddition(60,$dmn,\$mn,\$h);
+ $h+= $dh;
+
+ if ($h>$h2 or $h==$h2 && $mn>$m2) {
+ $dh=$h-$h2;
+ $dmn=$mn-$m2;
+ $h=$h1;
+ $mn=$m1;
+ $dd++;
+
+ } elsif ($h<$h1 or $h==$h1 && $mn<$m1) {
+ $dh=$h-$h1;
+ $dmn=$m1-$mn;
+ $h=$h2;
+ $mn=$m2;
+ $dd--;
+
+ } elsif ($h==$h2 && $mn==$m2) {
+ $dd++;
+ $dh=-$hh;
+ $dmn=-$mm;
+
+ } else {
+ last;
+ }
+ }
+
+ } else {
+ &ModuloAddition(60,$dmn,\$mn,\$h);
+ &ModuloAddition(24,$dh,\$h,\$d);
+ }
+
+ # If we have just gone past the last day of the month, we need to make
+ # up for this:
+ if ($d>$d_in_m[$m]) {
+ $dd+= $d-$d_in_m[$m];
+ $d=$d_in_m[$m];
+ }
+
+ # days
+ if ($mode==2 || $mode==3) {
+ if ($dd>=0) {
+ $date=&Date_NextWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),$dd,1);
+ } else {
+ $date=&Date_PrevWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),-$dd,1);
+ }
+ ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
+
+ } else {
+ $d_in_m[2]=29 if (&Date_LeapYear($y));
+ $d=$d_in_m[$m] if ($d>$d_in_m[$m]);
+ $d += $dd;
+ while ($d<1) {
+ $m--;
+ if ($m==0) {
+ $m=12;
+ $y--;
+ if (&Date_LeapYear($y)) {
+ $d_in_m[2]=29;
+ } else {
+ $d_in_m[2]=28;
+ }
+ }
+ $d += $d_in_m[$m];
+ }
+ while ($d>$d_in_m[$m]) {
+ $d -= $d_in_m[$m];
+ $m++;
+ if ($m==13) {
+ $m=1;
+ $y++;
+ if (&Date_LeapYear($y)) {
+ $d_in_m[2]=29;
+ } else {
+ $d_in_m[2]=28;
+ }
+ }
+ }
+ }
+
+ if ($y<0 or $y>9999) {
+ $$errref=3;
+ return;
+ }
+ &Date_Join($y,$m,$d,$h,$mn,$s);
+}
+
+sub Date_UpdateHolidays {
+ print "DEBUG: Date_UpdateHolidays\n" if ($Curr{"Debug"} =~ /trace/);
+ my($year)=@_;
+ $Holiday{"year"}=$year;
+ $Holiday{"dates"}{$year}={};
+
+ my($date,$delta,$err)=();
+ my($key,@tmp,$tmp);
+
+ foreach $key (keys %{ $Holiday{"desc"} }) {
+ @tmp=&Recur_Split($key);
+ if (@tmp) {
+ $tmp=&ParseDateString("${year}010100:00:00");
+ ($date)=&ParseRecur($key,$tmp,$tmp,($year+1)."-01-01");
+ next if (! $date);
+
+ } elsif ($key =~ /^(.*)([+-].*)$/) {
+ # Date +/- Delta
+ ($date,$delta)=($1,$2);
+ $tmp=&ParseDateString("$date $year");
+ if ($tmp) {
+ $date=$tmp;
+ } else {
+ $date=&ParseDateString($date);
+ next if ($date !~ /^$year/);
+ }
+ $date=&DateCalc($date,$delta,\$err,0);
+
+ } else {
+ # Date
+ $date=$key;
+ $tmp=&ParseDateString("$date $year");
+ if ($tmp) {
+ $date=$tmp;
+ } else {
+ $date=&ParseDateString($date);
+ next if ($date !~ /^$year/);
+ }
+ }
+ $Holiday{"dates"}{$year}{$date}=$Holiday{"desc"}{$key};
+ }
+}
+
+# This sets a Date::Manip config variable.
+sub Date_SetConfigVariable {
+ print "DEBUG: Date_SetConfigVariable\n" if ($Curr{"Debug"} =~ /trace/);
+ my($var,$val)=@_;
+
+ # These are most appropriate for command line options instead of in files.
+ $Cnf{"PathSep"}=$val, return if ($var =~ /^PathSep$/i);
+ $Cnf{"PersonalCnf"}=$val, return if ($var =~ /^PersonalCnf$/i);
+ $Cnf{"PersonalCnfPath"}=$val, return if ($var =~ /^PersonalCnfPath$/i);
+ &EraseHolidays(), return if ($var =~ /^EraseHolidays$/i);
+ $Cnf{"IgnoreGlobalCnf"}=1, return if ($var =~ /^IgnoreGlobalCnf$/i);
+ $Cnf{"GlobalCnf"}=$val, return if ($var =~ /^GlobalCnf$/i);
+
+ $Curr{"InitLang"}=1,
+ $Cnf{"Language"}=$val, return if ($var =~ /^Language$/i);
+ $Cnf{"DateFormat"}=$val, return if ($var =~ /^DateFormat$/i);
+ $Cnf{"TZ"}=$val, return if ($var =~ /^TZ$/i);
+ $Cnf{"ConvTZ"}=$val, return if ($var =~ /^ConvTZ$/i);
+ $Cnf{"Internal"}=$val, return if ($var =~ /^Internal$/i);
+ $Cnf{"FirstDay"}=$val, return if ($var =~ /^FirstDay$/i);
+ $Cnf{"WorkWeekBeg"}=$val, return if ($var =~ /^WorkWeekBeg$/i);
+ $Cnf{"WorkWeekEnd"}=$val, return if ($var =~ /^WorkWeekEnd$/i);
+ $Cnf{"WorkDayBeg"}=$val,
+ $Curr{"ResetWorkDay"}=1, return if ($var =~ /^WorkDayBeg$/i);
+ $Cnf{"WorkDayEnd"}=$val,
+ $Curr{"ResetWorkDay"}=1, return if ($var =~ /^WorkDayEnd$/i);
+ $Cnf{"WorkDay24Hr"}=$val,
+ $Curr{"ResetWorkDay"}=1, return if ($var =~ /^WorkDay24Hr$/i);
+ $Cnf{"DeltaSigns"}=$val, return if ($var =~ /^DeltaSigns$/i);
+ $Cnf{"Jan1Week1"}=$val, return if ($var =~ /^Jan1Week1$/i);
+ $Cnf{"YYtoYYYY"}=$val, return if ($var =~ /^YYtoYYYY$/i);
+ $Cnf{"UpdateCurrTZ"}=$val, return if ($var =~ /^UpdateCurrTZ$/i);
+ $Cnf{"IntCharSet"}=$val, return if ($var =~ /^IntCharSet$/i);
+ $Curr{"DebugVal"}=$val, return if ($var =~ /^Debug$/i);
+ $Cnf{"TomorrowFirst"}=$val, return if ($var =~ /^TomorrowFirst$/i);
+ $Cnf{"ForceDate"}=$val, return if ($var =~ /^ForceDate$/i);
+
+ confess "ERROR: Unknown configuration variable $var in Date::Manip.\n";
+}
+
+sub EraseHolidays {
+ print "DEBUG: EraseHolidays\n" if ($Curr{"Debug"} =~ /trace/);
+
+ $Cnf{"EraseHolidays"}=0;
+ delete $Holiday{"list"};
+ $Holiday{"list"}={};
+ delete $Holiday{"desc"};
+ $Holiday{"desc"}={};
+ $Holiday{"dates"}={};
+}
+
+# This returns a pointer to a list of times and events in the format
+# [ date, [ events ], date, [ events ], ... ]
+# where each list of events are events that are in effect at the date
+# immediately preceding the list.
+#
+# This takes either one date or two dates as arguments.
+sub Events_Calc {
+ print "DEBUG: Events_Calc\n" if ($Curr{"Debug"} =~ /trace/);
+
+ my($date0,$date1)=@_;
+
+ my($tmp);
+ $date0=&ParseDateString($date0);
+ return undef if (! $date0);
+ if ($date1) {
+ $date1=&ParseDateString($date1);
+ if (&Date_Cmp($date0,$date1)>0) {
+ $tmp=$date1;
+ $date1=$date0;
+ $date0=$tmp;
+ }
+ } else {
+ $date1=&DateCalc_DateDelta($date0,"+0:0:0:0:0:0:1");
+ }
+
+ #
+ # [ d0,d1,del,name ] => [ d0, d1+del )
+ # [ d0,0,del,name ] => [ d0, d0+del )
+ #
+ my(%ret,$d0,$d1,$del,$name,$c0,$c1);
+ my(@tmp)=@{ $Events{"dates"} };
+ DATE: while (@tmp) {
+ ($d0,$d1,$del,$name)=splice(@tmp,0,4);
+ $d0=&ParseDateString($d0);
+ $d1=&ParseDateString($d1) if ($d1);
+ $del=&ParseDateDelta($del) if ($del);
+ if ($d1) {
+ if ($del) {
+ $d1=&DateCalc_DateDelta($d1,$del);
+ }
+ } else {
+ $d1=&DateCalc_DateDelta($d0,$del);
+ }
+ if (&Date_Cmp($d0,$d1)>0) {
+ $tmp=$d1;
+ $d1=$d0;
+ $d0=$tmp;
+ }
+ # [ date0,date1 )
+ # [ d0,d1 ) OR [ d0,d1 )
+ next DATE if (&Date_Cmp($d1,$date0)<=0 ||
+ &Date_Cmp($d0,$date1)>=0);
+ # [ date0,date1 )
+ # [ d0,d1 )
+ # [ d0, d1 )
+ if (&Date_Cmp($d0,$date0)<=0) {
+ push @{ $ret{$date0} },$name;
+ push @{ $ret{$d1} },"!$name" if (&Date_Cmp($d1,$date1)<0);
+ next DATE;
+ }
+ # [ date0,date1 )
+ # [ d0,d1 )
+ if (&Date_Cmp($d1,$date1)>=0) {
+ push @{ $ret{$d0} },$name;
+ next DATE;
+ }
+ # [ date0,date1 )
+ # [ d0,d1 )
+ push @{ $ret{$d0} },$name;
+ push @{ $ret{$d1} },"!$name";
+ }
+
+ #
+ # [ recur,delta0,delta1,name ] => [ {date-delta0},{date+delta1} )
+ #
+ my($rec,$del0,$del1,@d);
+ @tmp=@{ $Events{"recur"} };
+ RECUR: while (@tmp) {
+ ($rec,$del0,$del1,$name)=splice(@tmp,0,4);
+ @d=();
+
+ }
+
+ # Sort them AND take into account the "!$name" entries.
+ my(%tmp,$date,@tmp2,@ret);
+ @d=sort { &Date_Cmp($a,$b) } keys %ret;
+ foreach $date (@d) {
+ @tmp=@{ $ret{$date} };
+ @tmp2=();
+ foreach $tmp (@tmp) {
+ push(@tmp2,$tmp), next if ($tmp =~ /^!/);
+ $tmp{$tmp}=1;
+ }
+ foreach $tmp (@tmp2) {
+ $tmp =~ s/^!//;
+ delete $tmp{$tmp};
+ }
+ push(@ret,$date,[ keys %tmp ]);
+ }
+
+ return \@ret;
+}
+
+# This parses the raw events list
+sub Events_ParseRaw {
+ print "DEBUG: Events_ParseRaw\n" if ($Curr{"Debug"} =~ /trace/);
+
+ # Only need to be parsed once
+ my($force)=@_;
+ $Events{"parsed"}=0 if ($force);
+ return if ($Events{"parsed"});
+ $Events{"parsed"}=1;
+
+ my(@events)=@{ $Events{"raw"} };
+ my($event,$name,@event,$date0,$date1,$tmp,$delta,$recur0,$recur1,@recur,$r,
+ $recur);
+ EVENT: while (@events) {
+ ($event,$name)=splice(@events,0,2);
+ @event=split(/\s*;\s*/,$event);
+
+ if ($#event == 0) {
+
+ if ($date0=&ParseDateString($event[0])) {
+ #
+ # date = event
+ #
+ $tmp=&ParseDateString("$event[0] 00:00:00");
+ if ($tmp && $tmp eq $date0) {
+ $delta="+0:0:0:1:0:0:0";
+ } else {
+ $delta="+0:0:0:0:1:0:0";
+ }
+ push @{ $Events{"dates"} },($date0,0,$delta,$name);
+
+ } elsif ($recur=&ParseRecur($event[0])) {
+ #
+ # recur = event
+ #
+ ($recur0,$recur1)=&Recur_Split($recur);
+ if ($recur0) {
+ if ($recur1) {
+ $r="$recur0:$recur1";
+ } else {
+ $r=$recur0;
+ }
+ } else {
+ $r=$recur1;
+ }
+ (@recur)=split(/:/,$r);
+ if (pop(@recur)==0 && pop(@recur)==0 && pop(@recur)==0) {
+ $delta="+0:0:0:1:0:0:0";
+ } else {
+ $delta="+0:0:0:0:1:0:0";
+ }
+ push @{ $Events{"recur"} },($recur,0,$delta,$name);
+
+ } else {
+ # ??? = event
+ warn "WARNING: illegal event ignored [ @event ]\n";
+ next EVENT;
+ }
+
+ } elsif ($#event == 1) {
+
+ if ($date0=&ParseDateString($event[0])) {
+
+ if ($date1=&ParseDateString($event[1])) {
+ #
+ # date ; date = event
+ #
+ $tmp=&ParseDateString("$event[1] 00:00:00");
+ if ($tmp && $tmp eq $date1) {
+ $date1=&DateCalc_DateDelta($date1,"+0:0:0:1:0:0:0");
+ }
+ push @{ $Events{"dates"} },($date0,$date1,0,$name);
+
+ } elsif ($delta=&ParseDateDelta($event[1])) {
+ #
+ # date ; delta = event
+ #
+ push @{ $Events{"dates"} },($date0,0,$delta,$name);
+
+ } else {
+ # date ; ??? = event
+ warn "WARNING: illegal event ignored [ @event ]\n";
+ next EVENT;
+ }
+
+ } elsif ($recur=&ParseRecur($event[0])) {
+
+ if ($delta=&ParseDateDelta($event[1])) {
+ #
+ # recur ; delta = event
+ #
+ push @{ $Events{"recur"} },($recur,0,$delta,$name);
+
+ } else {
+ # recur ; ??? = event
+ warn "WARNING: illegal event ignored [ @event ]\n";
+ next EVENT;
+ }
+
+ } else {
+ # ??? ; ??? = event
+ warn "WARNING: illegal event ignored [ @event ]\n";
+ next EVENT;
+ }
+
+ } else {
+ # date ; delta0 ; delta1 = event
+ # recur ; delta0 ; delta1 = event
+ # ??? ; ??? ; ??? ... = event
+ warn "WARNING: illegal event ignored [ @event ]\n";
+ next EVENT;
+ }
+ }
+}
+
+# This reads an init file.
+sub Date_InitFile {
+ print "DEBUG: Date_InitFile\n" if ($Curr{"Debug"} =~ /trace/);
+ my($file)=@_;
+ my($in)=new IO::File;
+ local($_)=();
+ my($section)="vars";
+ my($var,$val,$recur,$name)=();
+
+ $in->open($file) || return;
+ while(defined ($_=<$in>)) {
+ chomp;
+ s/^\s+//;
+ s/\s+$//;
+ next if (! $_ or /^\#/);
+
+ if (/^\*holiday/i) {
+ $section="holiday";
+ &EraseHolidays() if ($section =~ /holiday/i && $Cnf{"EraseHolidays"});
+ next;
+ } elsif (/^\*events/i) {
+ $section="events";
+ next;
+ }
+
+ if ($section =~ /var/i) {
+ confess "ERROR: invalid Date::Manip config file line.\n $_\n"
+ if (! /(.*\S)\s*=\s*(.*)$/);
+ ($var,$val)=($1,$2);
+ &Date_SetConfigVariable($var,$val);
+
+ } elsif ($section =~ /holiday/i) {
+ confess "ERROR: invalid Date::Manip config file line.\n $_\n"
+ if (! /(.*\S)\s*=\s*(.*)$/);
+ ($recur,$name)=($1,$2);
+ $name="" if (! defined $name);
+ $Holiday{"desc"}{$recur}=$name;
+
+ } elsif ($section =~ /events/i) {
+ confess "ERROR: invalid Date::Manip config file line.\n $_\n"
+ if (! /(.*\S)\s*=\s*(.*)$/);
+ ($val,$var)=($1,$2);
+ push @{ $Events{"raw"} },($val,$var);
+
+ } else {
+ # A section not currently used by Date::Manip (but may be
+ # used by some extension to it).
+ next;
+ }
+ }
+ close($in);
+}
+
+# $flag=&Date_TimeCheck(\$h,\$mn,\$s,\$ampm);
+# Returns 1 if any of the fields are bad. All fields are optional, and
+# all possible checks are done on the data. If a field is not passed in,
+# it is set to default values. If data is missing, appropriate defaults
+# are supplied.
+sub Date_TimeCheck {
+ print "DEBUG: Date_TimeCheck\n" if ($Curr{"Debug"} =~ /trace/);
+ my($h,$mn,$s,$ampm)=@_;
+ my($tmp1,$tmp2,$tmp3)=();
+
+ $$h="" if (! defined $$h);
+ $$mn="" if (! defined $$mn);
+ $$s="" if (! defined $$s);
+ $$ampm="" if (! defined $$ampm);
+ $$ampm=uc($$ampm) if ($$ampm);
+
+ # Check hour
+ $tmp1=$Lang{$Cnf{"Language"}}{"AmPm"};
+ $tmp2="";
+ if ($$ampm =~ /^$tmp1$/i) {
+ $tmp3=$Lang{$Cnf{"Language"}}{"AM"};
+ $tmp2="AM" if ($$ampm =~ /^$tmp3$/i);
+ $tmp3=$Lang{$Cnf{"Language"}}{"PM"};
+ $tmp2="PM" if ($$ampm =~ /^$tmp3$/i);
+ } elsif ($$ampm) {
+ return 1;
+ }
+ if ($tmp2 eq "AM" || $tmp2 eq "PM") {
+ $$h="0$$h" if (length($$h)==1);
+ return 1 if ($$h<1 || $$h>12);
+ $$h="00" if ($tmp2 eq "AM" and $$h==12);
+ $$h += 12 if ($tmp2 eq "PM" and $$h!=12);
+ } else {
+ $$h="00" if ($$h eq "");
+ $$h="0$$h" if (length($$h)==1);
+ return 1 if (! &IsInt($$h,0,23));
+ $tmp2="AM" if ($$h<12);
+ $tmp2="PM" if ($$h>=12);
+ }
+ $$ampm=$Lang{$Cnf{"Language"}}{"AMstr"};
+ $$ampm=$Lang{$Cnf{"Language"}}{"PMstr"} if ($tmp2 eq "PM");
+
+ # Check minutes
+ $$mn="00" if ($$mn eq "");
+ $$mn="0$$mn" if (length($$mn)==1);
+ return 1 if (! &IsInt($$mn,0,59));
+
+ # Check seconds
+ $$s="00" if ($$s eq "");
+ $$s="0$$s" if (length($$s)==1);
+ return 1 if (! &IsInt($$s,0,59));
+
+ return 0;
+}
+
+# $flag=&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk);
+# Returns 1 if any of the fields are bad. All fields are optional, and
+# all possible checks are done on the data. If a field is not passed in,
+# it is set to default values. If data is missing, appropriate defaults
+# are supplied.
+#
+# If the flag UpdateHolidays is set, the year is set to
+# CurrHolidayYear.
+sub Date_DateCheck {
+ print "DEBUG: Date_DateCheck\n" if ($Curr{"Debug"} =~ /trace/);
+ my($y,$m,$d,$h,$mn,$s,$ampm,$wk)=@_;
+ my($tmp1,$tmp2,$tmp3)=();
+
+ my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
+ my($curr_y)=$Curr{"Y"};
+ my($curr_m)=$Curr{"M"};
+ my($curr_d)=$Curr{"D"};
+ $$m=1, $$d=1 if (defined $$y and ! defined $$m and ! defined $$d);
+ $$y="" if (! defined $$y);
+ $$m="" if (! defined $$m);
+ $$d="" if (! defined $$d);
+ $$wk="" if (! defined $$wk);
+ $$d=$curr_d if ($$y eq "" and $$m eq "" and $$d eq "");
+
+ # Check year.
+ $$y=$curr_y if ($$y eq "");
+ $$y=&Date_FixYear($$y) if (length($$y)<4);
+ return 1 if (! &IsInt($$y,0,9999));
+ $d_in_m[2]=29 if (&Date_LeapYear($$y));
+
+ # Check month
+ $$m=$curr_m if ($$m eq "");
+ $$m=$Lang{$Cnf{"Language"}}{"MonthH"}{lc($$m)}
+ if (exists $Lang{$Cnf{"Language"}}{"MonthH"}{lc($$m)});
+ $$m="0$$m" if (length($$m)==1);
+ return 1 if (! &IsInt($$m,1,12));
+
+ # Check day
+ $$d="01" if ($$d eq "");
+ $$d="0$$d" if (length($$d)==1);
+ return 1 if (! &IsInt($$d,1,$d_in_m[$$m]));
+ if ($$wk) {
+ $tmp1=&Date_DayOfWeek($$m,$$d,$$y);
+ $tmp2=$Lang{$Cnf{"Language"}}{"WeekH"}{lc($$wk)}
+ if (exists $Lang{$Cnf{"Language"}}{"WeekH"}{lc($$wk)});
+ return 1 if ($tmp1 != $tmp2);
+ }
+
+ return &Date_TimeCheck($h,$mn,$s,$ampm);
+}
+
+# Takes a year in 2 digit form and returns it in 4 digit form
+sub Date_FixYear {
+ print "DEBUG: Date_FixYear\n" if ($Curr{"Debug"} =~ /trace/);
+ my($y)=@_;
+ my($curr_y)=$Curr{"Y"};
+ $y=$curr_y if (! defined $y or ! $y);
+ return $y if (length($y)==4);
+ confess "ERROR: Invalid year ($y)\n" if (length($y)!=2);
+ my($y1,$y2)=();
+
+ if (lc($Cnf{"YYtoYYYY"}) eq "c") {
+ $y1=substring($y,0,2);
+ $y="$y1$y";
+
+ } elsif ($Cnf{"YYtoYYYY"} =~ /^c(\d{2})$/i) {
+ $y1=$1;
+ $y="$y1$y";
+
+ } elsif ($Cnf{"YYtoYYYY"} =~ /^c(\d{2})(\d{2})$/i) {
+ $y1="$1$2";
+ $y ="$1$y";
+ $y += 100 if ($y<$y1);
+
+ } else {
+ $y1=$curr_y-$Cnf{"YYtoYYYY"};
+ $y2=$y1+99;
+ $y="19$y";
+ while ($y<$y1) {
+ $y+=100;
+ }
+ while ($y>$y2) {
+ $y-=100;
+ }
+ }
+ $y;
+}
+
+# &Date_NthWeekOfYear($y,$n);
+# Returns a list of (YYYY,MM,DD) for the 1st day of the Nth week of the
+# year.
+# &Date_NthWeekOfYear($y,$n,$dow,$flag);
+# Returns a list of (YYYY,MM,DD) for the Nth DoW of the year. If flag
+# is nil, the first DoW of the year may actually be in the previous
+# year (since the 1st week may include days from the previous year).
+# If flag is non-nil, the 1st DoW of the year refers to the 1st one
+# actually in the year
+sub Date_NthWeekOfYear {
+ print "DEBUG: Date_NthWeekOfYear\n" if ($Curr{"Debug"} =~ /trace/);
+ my($y,$n,$dow,$flag)=@_;
+ my($m,$d,$err,$tmp,$date,%dow)=();
+ $y=$Curr{"Y"} if (! defined $y or ! $y);
+ $n=1 if (! defined $n or $n eq "");
+ return () if ($n<0 || $n>53);
+ if (defined $dow) {
+ $dow=lc($dow);
+ %dow=%{ $Lang{$Cnf{"Language"}}{"WeekH"} };
+ $dow=$dow{$dow} if (exists $dow{$dow});
+ return () if ($dow<1 || $dow>7);
+ $flag="" if (! defined $flag);
+ } else {
+ $dow="";
+ $flag="";
+ }
+
+ $y=&Date_FixYear($y) if (length($y)<4);
+ if ($Cnf{"Jan1Week1"}) {
+ $date=&Date_Join($y,1,1,0,0,0);
+ } else {
+ $date=&Date_Join($y,1,4,0,0,0);
+ }
+ $date=&Date_GetPrev($date,$Cnf{"FirstDay"},1);
+ $date=&Date_GetNext($date,$dow,1) if ($dow ne "");
+
+ if ($flag) {
+ ($tmp)=&Date_Split($date, 1);
+ $n++ if ($tmp != $y);
+ }
+
+ if ($n>1) {
+ $date=&DateCalc_DateDelta($date,"+0:0:". ($n-1) . ":0:0:0:0",\$err,0);
+ } elsif ($n==0) {
+ $date=&DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0);
+ }
+ ($y,$m,$d)=&Date_Split($date, 1);
+ ($y,$m,$d);
+}
+
+########################################################################
+# LANGUAGE INITIALIZATION
+########################################################################
+
+# 8-bit international characters can be gotten by "\xXX". I don't know
+# how to get 16-bit characters. I've got to read up on perllocale.
+sub Char_8Bit {
+ my($hash)=@_;
+
+ # grave `
+ # A` 00c0 a` 00e0
+ # E` 00c8 e` 00e8
+ # I` 00cc i` 00ec
+ # O` 00d2 o` 00f2
+ # U` 00d9 u` 00f9
+ # W` 1e80 w` 1e81
+ # Y` 1ef2 y` 1ef3
+
+ $$hash{"A`"} = "\xc0"; # LATIN CAPITAL LETTER A WITH GRAVE
+ $$hash{"E`"} = "\xc8"; # LATIN CAPITAL LETTER E WITH GRAVE
+ $$hash{"I`"} = "\xcc"; # LATIN CAPITAL LETTER I WITH GRAVE
+ $$hash{"O`"} = "\xd2"; # LATIN CAPITAL LETTER O WITH GRAVE
+ $$hash{"U`"} = "\xd9"; # LATIN CAPITAL LETTER U WITH GRAVE
+ $$hash{"a`"} = "\xe0"; # LATIN SMALL LETTER A WITH GRAVE
+ $$hash{"e`"} = "\xe8"; # LATIN SMALL LETTER E WITH GRAVE
+ $$hash{"i`"} = "\xec"; # LATIN SMALL LETTER I WITH GRAVE
+ $$hash{"o`"} = "\xf2"; # LATIN SMALL LETTER O WITH GRAVE
+ $$hash{"u`"} = "\xf9"; # LATIN SMALL LETTER U WITH GRAVE
+
+ # acute '
+ # A' 00c1 a' 00e1
+ # C' 0106 c' 0107
+ # E' 00c9 e' 00e9
+ # I' 00cd i' 00ed
+ # L' 0139 l' 013a
+ # N' 0143 n' 0144
+ # O' 00d3 o' 00f3
+ # R' 0154 r' 0155
+ # S' 015a s' 015b
+ # U' 00da u' 00fa
+ # W' 1e82 w' 1e83
+ # Y' 00dd y' 00fd
+ # Z' 0179 z' 017a
+
+ $$hash{"A'"} = "\xc1"; # LATIN CAPITAL LETTER A WITH ACUTE
+ $$hash{"E'"} = "\xc9"; # LATIN CAPITAL LETTER E WITH ACUTE
+ $$hash{"I'"} = "\xcd"; # LATIN CAPITAL LETTER I WITH ACUTE
+ $$hash{"O'"} = "\xd3"; # LATIN CAPITAL LETTER O WITH ACUTE
+ $$hash{"U'"} = "\xda"; # LATIN CAPITAL LETTER U WITH ACUTE
+ $$hash{"Y'"} = "\xdd"; # LATIN CAPITAL LETTER Y WITH ACUTE
+ $$hash{"a'"} = "\xe1"; # LATIN SMALL LETTER A WITH ACUTE
+ $$hash{"e'"} = "\xe9"; # LATIN SMALL LETTER E WITH ACUTE
+ $$hash{"i'"} = "\xed"; # LATIN SMALL LETTER I WITH ACUTE
+ $$hash{"o'"} = "\xf3"; # LATIN SMALL LETTER O WITH ACUTE
+ $$hash{"u'"} = "\xfa"; # LATIN SMALL LETTER U WITH ACUTE
+ $$hash{"y'"} = "\xfd"; # LATIN SMALL LETTER Y WITH ACUTE
+
+ # double acute " "
+ # O" 0150 o" 0151
+ # U" 0170 u" 0171
+
+ # circumflex ^
+ # A^ 00c2 a^ 00e2
+ # C^ 0108 c^ 0109
+ # E^ 00ca e^ 00ea
+ # G^ 011c g^ 011d
+ # H^ 0124 h^ 0125
+ # I^ 00ce i^ 00ee
+ # J^ 0134 j^ 0135
+ # O^ 00d4 o^ 00f4
+ # S^ 015c s^ 015d
+ # U^ 00db u^ 00fb
+ # W^ 0174 w^ 0175
+ # Y^ 0176 y^ 0177
+
+ $$hash{"A^"} = "\xc2"; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ $$hash{"E^"} = "\xca"; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ $$hash{"I^"} = "\xce"; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ $$hash{"O^"} = "\xd4"; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ $$hash{"U^"} = "\xdb"; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ $$hash{"a^"} = "\xe2"; # LATIN SMALL LETTER A WITH CIRCUMFLEX
+ $$hash{"e^"} = "\xea"; # LATIN SMALL LETTER E WITH CIRCUMFLEX
+ $$hash{"i^"} = "\xee"; # LATIN SMALL LETTER I WITH CIRCUMFLEX
+ $$hash{"o^"} = "\xf4"; # LATIN SMALL LETTER O WITH CIRCUMFLEX
+ $$hash{"u^"} = "\xfb"; # LATIN SMALL LETTER U WITH CIRCUMFLEX
+
+ # tilde ~
+ # A~ 00c3 a~ 00e3
+ # I~ 0128 i~ 0129
+ # N~ 00d1 n~ 00f1
+ # O~ 00d5 o~ 00f5
+ # U~ 0168 u~ 0169
+
+ $$hash{"A~"} = "\xc3"; # LATIN CAPITAL LETTER A WITH TILDE
+ $$hash{"N~"} = "\xd1"; # LATIN CAPITAL LETTER N WITH TILDE
+ $$hash{"O~"} = "\xd5"; # LATIN CAPITAL LETTER O WITH TILDE
+ $$hash{"a~"} = "\xe3"; # LATIN SMALL LETTER A WITH TILDE
+ $$hash{"n~"} = "\xf1"; # LATIN SMALL LETTER N WITH TILDE
+ $$hash{"o~"} = "\xf5"; # LATIN SMALL LETTER O WITH TILDE
+
+ # macron -
+ # A- 0100 a- 0101
+ # E- 0112 e- 0113
+ # I- 012a i- 012b
+ # O- 014c o- 014d
+ # U- 016a u- 016b
+
+ # breve ( [half circle up]
+ # A( 0102 a( 0103
+ # G( 011e g( 011f
+ # U( 016c u( 016d
+
+ # dot .
+ # C. 010a c. 010b
+ # E. 0116 e. 0117
+ # G. 0120 g. 0121
+ # I. 0130
+ # Z. 017b z. 017c
+
+ # diaeresis : [side by side dots]
+ # A: 00c4 a: 00e4
+ # E: 00cb e: 00eb
+ # I: 00cf i: 00ef
+ # O: 00d6 o: 00f6
+ # U: 00dc u: 00fc
+ # W: 1e84 w: 1e85
+ # Y: 0178 y: 00ff
+
+ $$hash{"A:"} = "\xc4"; # LATIN CAPITAL LETTER A WITH DIAERESIS
+ $$hash{"E:"} = "\xcb"; # LATIN CAPITAL LETTER E WITH DIAERESIS
+ $$hash{"I:"} = "\xcf"; # LATIN CAPITAL LETTER I WITH DIAERESIS
+ $$hash{"O:"} = "\xd6"; # LATIN CAPITAL LETTER O WITH DIAERESIS
+ $$hash{"U:"} = "\xdc"; # LATIN CAPITAL LETTER U WITH DIAERESIS
+ $$hash{"a:"} = "\xe4"; # LATIN SMALL LETTER A WITH DIAERESIS
+ $$hash{"e:"} = "\xeb"; # LATIN SMALL LETTER E WITH DIAERESIS
+ $$hash{"i:"} = "\xef"; # LATIN SMALL LETTER I WITH DIAERESIS
+ $$hash{"o:"} = "\xf6"; # LATIN SMALL LETTER O WITH DIAERESIS
+ $$hash{"u:"} = "\xfc"; # LATIN SMALL LETTER U WITH DIAERESIS
+ $$hash{"y:"} = "\xff"; # LATIN SMALL LETTER Y WITH DIAERESIS
+
+ # ring o
+ # U0 016e u0 016f
+
+ # cedilla , [squiggle down and left below the letter]
+ # ,C 00c7 ,c 00e7
+ # ,G 0122 ,g 0123
+ # ,K 0136 ,k 0137
+ # ,L 013b ,l 013c
+ # ,N 0145 ,n 0146
+ # ,R 0156 ,r 0157
+ # ,S 015e ,s 015f
+ # ,T 0162 ,t 0163
+
+ $$hash{",C"} = "\xc7"; # LATIN CAPITAL LETTER C WITH CEDILLA
+ $$hash{",c"} = "\xe7"; # LATIN SMALL LETTER C WITH CEDILLA
+
+ # ogonek ; [squiggle down and right below the letter]
+ # A; 0104 a; 0105
+ # E; 0118 e; 0119
+ # I; 012e i; 012f
+ # U; 0172 u; 0173
+
+ # caron < [little v on top]
+ # A< 01cd a< 01ce
+ # C< 010c c< 010d
+ # D< 010e d< 010f
+ # E< 011a e< 011b
+ # L< 013d l< 013e
+ # N< 0147 n< 0148
+ # R< 0158 r< 0159
+ # S< 0160 s< 0161
+ # T< 0164 t< 0165
+ # Z< 017d z< 017e
+
+
+ # Other characters
+
+ # First character is below, 2nd character is above
+ $$hash{"||"} = "\xa6"; # BROKEN BAR
+ $$hash{" :"} = "\xa8"; # DIAERESIS
+ $$hash{"-a"} = "\xaa"; # FEMININE ORDINAL INDICATOR
+ #$$hash{" -"}= "\xaf"; # MACRON (narrow bar)
+ $$hash{" -"} = "\xad"; # HYPHEN (wide bar)
+ $$hash{" o"} = "\xb0"; # DEGREE SIGN
+ $$hash{"-+"} = "\xb1"; # PLUS\342\200\220MINUS SIGN
+ $$hash{" 1"} = "\xb9"; # SUPERSCRIPT ONE
+ $$hash{" 2"} = "\xb2"; # SUPERSCRIPT TWO
+ $$hash{" 3"} = "\xb3"; # SUPERSCRIPT THREE
+ $$hash{" '"} = "\xb4"; # ACUTE ACCENT
+ $$hash{"-o"} = "\xba"; # MASCULINE ORDINAL INDICATOR
+ $$hash{" ."} = "\xb7"; # MIDDLE DOT
+ $$hash{", "} = "\xb8"; # CEDILLA
+ $$hash{"Ao"} = "\xc5"; # LATIN CAPITAL LETTER A WITH RING ABOVE
+ $$hash{"ao"} = "\xe5"; # LATIN SMALL LETTER A WITH RING ABOVE
+ $$hash{"ox"} = "\xf0"; # LATIN SMALL LETTER ETH
+
+ # upside down characters
+
+ $$hash{"ud!"} = "\xa1"; # INVERTED EXCLAMATION MARK
+ $$hash{"ud?"} = "\xbf"; # INVERTED QUESTION MARK
+
+ # overlay characters
+
+ $$hash{"X o"} = "\xa4"; # CURRENCY SIGN
+ $$hash{"Y ="} = "\xa5"; # YEN SIGN
+ $$hash{"S o"} = "\xa7"; # SECTION SIGN
+ $$hash{"O c"} = "\xa9"; # COPYRIGHT SIGN Copyright
+ $$hash{"O R"} = "\xae"; # REGISTERED SIGN
+ $$hash{"D -"} = "\xd0"; # LATIN CAPITAL LETTER ETH
+ $$hash{"O /"} = "\xd8"; # LATIN CAPITAL LETTER O WITH STROKE
+ $$hash{"o /"} = "\xf8"; # LATIN SMALL LETTER O WITH STROKE
+
+ # special names
+
+ $$hash{"1/4"} = "\xbc"; # VULGAR FRACTION ONE QUARTER
+ $$hash{"1/2"} = "\xbd"; # VULGAR FRACTION ONE HALF
+ $$hash{"3/4"} = "\xbe"; # VULGAR FRACTION THREE QUARTERS
+ $$hash{"<<"} = "\xab"; # LEFT POINTING DOUBLE ANGLE QUOTATION MARK
+ $$hash{">>"} = "\xbb"; # RIGHT POINTING DOUBLE ANGLE QUOTATION MARK
+ $$hash{"cent"}= "\xa2"; # CENT SIGN
+ $$hash{"lb"} = "\xa3"; # POUND SIGN
+ $$hash{"mu"} = "\xb5"; # MICRO SIGN
+ $$hash{"beta"}= "\xdf"; # LATIN SMALL LETTER SHARP S
+ $$hash{"para"}= "\xb6"; # PILCROW SIGN
+ $$hash{"-|"} = "\xac"; # NOT SIGN
+ $$hash{"AE"} = "\xc6"; # LATIN CAPITAL LETTER AE
+ $$hash{"ae"} = "\xe6"; # LATIN SMALL LETTER AE
+ $$hash{"x"} = "\xd7"; # MULTIPLICATION SIGN
+ $$hash{"P"} = "\xde"; # LATIN CAPITAL LETTER THORN
+ $$hash{"/"} = "\xf7"; # DIVISION SIGN
+ $$hash{"p"} = "\xfe"; # LATIN SMALL LETTER THORN
+}
+
+# $hashref = &Date_Init_LANGUAGE;
+# This returns a hash containing all of the initialization for a
+# specific language. The hash elements are:
+#
+# @ month_name full month names January February ...
+# @ month_abb month abbreviations Jan Feb ...
+# @ day_name day names Monday Tuesday ...
+# @ day_abb day abbreviations Mon Tue ...
+# @ day_char day character abbrevs M T ...
+# @ am AM notations
+# @ pm PM notations
+#
+# @ num_suff number with suffix 1st 2nd ...
+# @ num_word numbers spelled out first second ...
+#
+# $ now words which mean now now today ...
+# $ last words which mean last last final ...
+# $ each words which mean each each every ...
+# $ of of (as in a member of) in of ...
+# ex. 4th day OF June
+# $ at at 4:00 at
+# $ on on Sunday on
+# $ future in the future in
+# $ past in the past ago
+# $ next next item next
+# $ prev previous item last previous
+# $ later 2 hours later
+#
+# % offset a hash of special dates { tomorrow->0:0:0:1:0:0:0 }
+# % times a hash of times { noon->12:00:00 ... }
+#
+# $ years words for year y yr year ...
+# $ months words for month
+# $ weeks words for week
+# $ days words for day
+# $ hours words for hour
+# $ minutes words for minute
+# $ seconds words for second
+# % replace
+# The replace element is quite important, but a bit tricky. In
+# English (and probably other languages), one of the abbreviations
+# for the word month that would be nice is "m". The problem is that
+# "m" matches the "m" in "minute" which causes the string to be
+# improperly matched in some cases. Hence, the list of abbreviations
+# for month is given as:
+# "mon month months"
+# In order to allow you to enter "m", replacements can be done.
+# $replace is a list of pairs of words which are matched and replaced
+# AS ENTIRE WORDS. Having $replace equal to "m"->"month" means that
+# the entire word "m" will be replaced with "month". This allows the
+# desired abbreviation to be used. Make sure that replace contains
+# an even number of words (i.e. all must be pairs). Any time a
+# desired abbreviation matches the start of any other, it has to go
+# here.
+#
+# $ exact exact mode exactly
+# $ approx approximate mode approximately
+# $ business business mode business
+#
+# r sephm hour/minute separator (?::)
+# r sepms minute/second separator (?::)
+# r sepss second/fraction separator (?:[.:])
+#
+# Elements marked with an asterix (@) are returned as a set of lists.
+# Each list contains the strings for each element. The first set is used
+# when the 7-bit ASCII (US) character set is wanted. The 2nd set is used
+# when an international character set is available. Both of the 1st two
+# sets should be complete (but the 2nd list can be left empty to force the
+# first set to be used always). The 3rd set and later can be partial sets
+# if desired.
+#
+# Elements marked with a dollar ($) are returned as a simple list of words.
+#
+# Elements marked with a percent (%) are returned as a hash list.
+#
+# Elements marked with (r) are regular expression elements which must not
+# create a back reference.
+#
+# ***NOTE*** Every hash element (unless otherwise noted) MUST be defined in
+# every language.
+
+sub Date_Init_English {
+ print "DEBUG: Date_Init_English\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+
+ $$d{"month_name"}=
+ [["January","February","March","April","May","June",
+ "July","August","September","October","November","December"]];
+
+ $$d{"month_abb"}=
+ [["Jan","Feb","Mar","Apr","May","Jun",
+ "Jul","Aug","Sep","Oct","Nov","Dec"],
+ [],
+ ["","","","","","","","","Sept"]];
+
+ $$d{"day_name"}=
+ [["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]];
+ $$d{"day_abb"}=
+ [["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
+ ["", "Tues","", "Thur","", "", ""]];
+ $$d{"day_char"}=
+ [["M","T","W","Th","F","Sa","S"]];
+
+ $$d{"num_suff"}=
+ [["1st","2nd","3rd","4th","5th","6th","7th","8th","9th","10th",
+ "11th","12th","13th","14th","15th","16th","17th","18th","19th","20th",
+ "21st","22nd","23rd","24th","25th","26th","27th","28th","29th","30th",
+ "31st"]];
+ $$d{"num_word"}=
+ [["first","second","third","fourth","fifth","sixth","seventh","eighth",
+ "ninth","tenth","eleventh","twelfth","thirteenth","fourteenth",
+ "fifteenth","sixteenth","seventeenth","eighteenth","nineteenth",
+ "twentieth","twenty-first","twenty-second","twenty-third",
+ "twenty-fourth","twenty-fifth","twenty-sixth","twenty-seventh",
+ "twenty-eighth","twenty-ninth","thirtieth","thirty-first"]];
+
+ $$d{"now"} =["today","now"];
+ $$d{"last"} =["last","final"];
+ $$d{"each"} =["each","every"];
+ $$d{"of"} =["in","of"];
+ $$d{"at"} =["at"];
+ $$d{"on"} =["on"];
+ $$d{"future"} =["in"];
+ $$d{"past"} =["ago"];
+ $$d{"next"} =["next"];
+ $$d{"prev"} =["previous","last"];
+ $$d{"later"} =["later"];
+
+ $$d{"exact"} =["exactly"];
+ $$d{"approx"} =["approximately"];
+ $$d{"business"}=["business"];
+
+ $$d{"offset"} =["yesterday","-0:0:0:1:0:0:0","tomorrow","+0:0:0:1:0:0:0"];
+ $$d{"times"} =["noon","12:00:00","midnight","00:00:00"];
+
+ $$d{"years"} =["y","yr","year","yrs","years"];
+ $$d{"months"} =["mon","month","months"];
+ $$d{"weeks"} =["w","wk","wks","week","weeks"];
+ $$d{"days"} =["d","day","days"];
+ $$d{"hours"} =["h","hr","hrs","hour","hours"];
+ $$d{"minutes"} =["mn","min","minute","minutes"];
+ $$d{"seconds"} =["s","sec","second","seconds"];
+ $$d{"replace"} =["m","month"];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = ["AM","A.M."];
+ $$d{"pm"} = ["PM","P.M."];
+}
+
+sub Date_Init_Italian {
+ print "DEBUG: Date_Init_Italian\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+ my($i)=$h{"i'"};
+
+ $$d{"month_name"}=
+ [[qw(Gennaio Febbraio Marzo Aprile Maggio Giugno
+ Luglio Agosto Settembre Ottobre Novembre Dicembre)]];
+
+ $$d{"month_abb"}=
+ [[qw(Gen Feb Mar Apr Mag Giu Lug Ago Set Ott Nov Dic)]];
+
+ $$d{"day_name"}=
+ [[qw(Lunedi Martedi Mercoledi Giovedi Venerdi Sabato Domenica)],
+ [qw(Luned${i} Marted${i} Mercoled${i} Gioved${i} Venerd${i})]];
+ $$d{"day_abb"}=
+ [[qw(Lun Mar Mer Gio Ven Sab Dom)]];
+ $$d{"day_char"}=
+ [[qw(L Ma Me G V S D)]];
+
+ $$d{"num_suff"}=
+ [[qw(1mo 2do 3zo 4to 5to 6to 7mo 8vo 9no 10mo 11mo 12mo 13mo 14mo 15mo
+ 16mo 17mo 18mo 19mo 20mo 21mo 22mo 23mo 24mo 25mo 26mo 27mo 28mo
+ 29mo 3mo 31mo)]];
+ $$d{"num_word"}=
+ [[qw(primo secondo terzo quarto quinto sesto settimo ottavo nono decimo
+ undicesimo dodicesimo tredicesimo quattordicesimo quindicesimo
+ sedicesimo diciassettesimo diciottesimo diciannovesimo ventesimo
+ ventunesimo ventiduesimo ventitreesimo ventiquattresimo
+ venticinquesimo ventiseiesimo ventisettesimo ventottesimo
+ ventinovesimo trentesimo trentunesimo)]];
+
+ $$d{"now"} =[qw(adesso oggi)];
+ $$d{"last"} =[qw(ultimo)];
+ $$d{"each"} =[qw(ogni)];
+ $$d{"of"} =[qw(della del)];
+ $$d{"at"} =[qw(alle)];
+ $$d{"on"} =[qw(di)];
+ $$d{"future"} =[qw(fra)];
+ $$d{"past"} =[qw(fa)];
+ $$d{"next"} =[qw(prossimo)];
+ $$d{"prev"} =[qw(ultimo)];
+ $$d{"later"} =[qw(dopo)];
+
+ $$d{"exact"} =[qw(esattamente)];
+ $$d{"approx"} =[qw(circa)];
+ $$d{"business"}=[qw(lavorativi lavorativo)];
+
+ $$d{"offset"} =[qw(ieri -0:0:0:1:0:0:0 domani +0:0:0:1:0:0:0)];
+ $$d{"times"} =[qw(mezzogiorno 12:00:00 mezzanotte 00:00:00)];
+
+ $$d{"years"} =[qw(anni anno a)];
+ $$d{"months"} =[qw(mesi mese mes)];
+ $$d{"weeks"} =[qw(settimane settimana sett)];
+ $$d{"days"} =[qw(giorni giorno g)];
+ $$d{"hours"} =[qw(ore ora h)];
+ $$d{"minutes"} =[qw(minuti minuto min)];
+ $$d{"seconds"} =[qw(secondi secondo sec)];
+ $$d{"replace"} =[qw(s sec m mes)];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = [qw(AM)];
+ $$d{"pm"} = [qw(PM)];
+}
+
+sub Date_Init_French {
+ print "DEBUG: Date_Init_French\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+ my($e)=$h{"e'"};
+ my($u)=$h{"u^"};
+ my($a)=$h{"a'"};
+
+ $$d{"month_name"}=
+ [["janvier","fevrier","mars","avril","mai","juin",
+ "juillet","aout","septembre","octobre","novembre","decembre"],
+ ["janvier","f${e}vrier","mars","avril","mai","juin",
+ "juillet","ao${u}t","septembre","octobre","novembre","d${e}cembre"]];
+ $$d{"month_abb"}=
+ [["jan","fev","mar","avr","mai","juin",
+ "juil","aout","sept","oct","nov","dec"],
+ ["jan","f${e}v","mar","avr","mai","juin",
+ "juil","ao${u}t","sept","oct","nov","d${e}c"]];
+
+ $$d{"day_name"}=
+ [["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"]];
+ $$d{"day_abb"}=
+ [["lun","mar","mer","jeu","ven","sam","dim"]];
+ $$d{"day_char"}=
+ [["l","ma","me","j","v","s","d"]];
+
+ $$d{"num_suff"}=
+ [["1er","2e","3e","4e","5e","6e","7e","8e","9e","10e",
+ "11e","12e","13e","14e","15e","16e","17e","18e","19e","20e",
+ "21e","22e","23e","24e","25e","26e","27e","28e","29e","30e",
+ "31e"]];
+ $$d{"num_word"}=
+ [["premier","deux","trois","quatre","cinq","six","sept","huit","neuf",
+ "dix","onze","douze","treize","quatorze","quinze","seize","dix-sept",
+ "dix-huit","dix-neuf","vingt","vingt et un","vingt-deux","vingt-trois",
+ "vingt-quatre","vingt-cinq","vingt-six","vingt-sept","vingt-huit",
+ "vingt-neuf","trente","trente et un"],
+ ["1re"]];
+
+ $$d{"now"} =["aujourd'hui","maintenant"];
+ $$d{"last"} =["dernier"];
+ $$d{"each"} =["chaque","tous les","toutes les"];
+ $$d{"of"} =["en","de"];
+ $$d{"at"} =["a","${a}0"];
+ $$d{"on"} =["sur"];
+ $$d{"future"} =["en"];
+ $$d{"past"} =["il y a"];
+ $$d{"next"} =["suivant"];
+ $$d{"prev"} =["precedent","pr${e}c${e}dent"];
+ $$d{"later"} =["plus tard"];
+
+ $$d{"exact"} =["exactement"];
+ $$d{"approx"} =["approximativement"];
+ $$d{"business"}=["professionel"];
+
+ $$d{"offset"} =["hier","-0:0:0:1:0:0:0","demain","+0:0:0:1:0:0:0"];
+ $$d{"times"} =["midi","12:00:00","minuit","00:00:00"];
+
+ $$d{"years"} =["an","annee","ans","annees","ann${e}e","ann${e}es"];
+ $$d{"months"} =["mois"];
+ $$d{"weeks"} =["sem","semaine"];
+ $$d{"days"} =["j","jour","jours"];
+ $$d{"hours"} =["h","heure","heures"];
+ $$d{"minutes"} =["mn","min","minute","minutes"];
+ $$d{"seconds"} =["s","sec","seconde","secondes"];
+ $$d{"replace"} =["m","mois"];
+
+ $$d{"sephm"} ='[h:]';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:,]';
+
+ $$d{"am"} = ["du matin"];
+ $$d{"pm"} = ["du soir"];
+}
+
+sub Date_Init_Romanian {
+ print "DEBUG: Date_Init_Romanian\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+ my($p)=$h{"p"};
+ my($i)=$h{"i^"};
+ my($a)=$h{"a~"};
+ my($o)=$h{"-o"};
+
+ $$d{"month_name"}=
+ [["ianuarie","februarie","martie","aprilie","mai","iunie",
+ "iulie","august","septembrie","octombrie","noiembrie","decembrie"]];
+ $$d{"month_abb"}=
+ [["ian","febr","mart","apr","mai","iun",
+ "iul","aug","sept","oct","nov","dec"],
+ ["","feb"]];
+
+ $$d{"day_name"}=
+ [["luni","marti","miercuri","joi","vineri","simbata","duminica"],
+ ["luni","mar${p}i","miercuri","joi","vineri","s${i}mb${a}t${a}",
+ "duminic${a}"]];
+ $$d{"day_abb"}=
+ [["lun","mar","mie","joi","vin","sim","dum"],
+ ["lun","mar","mie","joi","vin","s${i}m","dum"]];
+ $$d{"day_char"}=
+ [["L","Ma","Mi","J","V","S","D"]];
+
+ $$d{"num_suff"}=
+ [["prima","a doua","a 3-a","a 4-a","a 5-a","a 6-a","a 7-a","a 8-a",
+ "a 9-a","a 10-a","a 11-a","a 12-a","a 13-a","a 14-a","a 15-a",
+ "a 16-a","a 17-a","a 18-a","a 19-a","a 20-a","a 21-a","a 22-a",
+ "a 23-a","a 24-a","a 25-a","a 26-a","a 27-a","a 28-a","a 29-a",
+ "a 30-a","a 31-a"]];
+
+ $$d{"num_word"}=
+ [["prima","a doua","a treia","a patra","a cincea","a sasea","a saptea",
+ "a opta","a noua","a zecea","a unsprezecea","a doisprezecea",
+ "a treisprezecea","a patrusprezecea","a cincisprezecea","a saiprezecea",
+ "a saptesprezecea","a optsprezecea","a nouasprezecea","a douazecea",
+ "a douazecisiuna","a douazecisidoua","a douazecisitreia",
+ "a douazecisipatra","a douazecisicincea","a douazecisisasea",
+ "a douazecisisaptea","a douazecisiopta","a douazecisinoua","a treizecea",
+ "a treizecisiuna"],
+ ["prima","a doua","a treia","a patra","a cincea","a ${o}asea",
+ "a ${o}aptea","a opta","a noua","a zecea","a unsprezecea",
+ "a doisprezecea","a treisprezecea","a patrusprezecea","a cincisprezecea",
+ "a ${o}aiprezecea","a ${o}aptesprezecea","a optsprezecea",
+ "a nou${a}sprezecea","a dou${a}zecea","a dou${a}zeci${o}iuna",
+ "a dou${a}zeci${o}idoua","a dou${a}zeci${o}itreia",
+ "a dou${a}zeci${o}ipatra","a dou${a}zeci${o}icincea",
+ "a dou${a}zeci${o}i${o}asea","a dou${a}zeci${o}i${o}aptea",
+ "a dou${a}zeci${o}iopta","a dou${a}zeci${o}inoua","a treizecea",
+ "a treizeci${o}iuna"],
+ ["intii", "doi", "trei", "patru", "cinci", "sase", "sapte",
+ "opt","noua","zece","unsprezece","doisprezece",
+ "treisprezece","patrusprezece","cincisprezece","saiprezece",
+ "saptesprezece","optsprezece","nouasprezece","douazeci",
+ "douazecisiunu","douazecisidoi","douazecisitrei",
+ "douazecisipatru","douazecisicinci","douazecisisase","douazecisisapte",
+ "douazecisiopt","douazecisinoua","treizeci","treizecisiunu"],
+ ["${i}nt${i}i", "doi", "trei", "patru", "cinci", "${o}ase", "${o}apte",
+ "opt","nou${a}","zece","unsprezece","doisprezece",
+ "treisprezece","patrusprezece","cincisprezece","${o}aiprezece",
+ "${o}aptesprezece","optsprezece","nou${a}sprezece","dou${a}zeci",
+ "dou${a}zeci${o}iunu","dou${a}zeci${o}idoi","dou${a}zeci${o}itrei",
+ "dou${a}zecisipatru","dou${a}zeci${o}icinci","dou${a}zeci${o}i${o}ase",
+ "dou${a}zeci${o}i${o}apte","dou${a}zeci${o}iopt",
+ "dou${a}zeci${o}inou${a}","treizeci","treizeci${o}iunu"]];
+
+ $$d{"now"} =["acum","azi","astazi","ast${a}zi"];
+ $$d{"last"} =["ultima"];
+ $$d{"each"} =["fiecare"];
+ $$d{"of"} =["din","in","n"];
+ $$d{"at"} =["la"];
+ $$d{"on"} =["on"];
+ $$d{"future"} =["in","${i}n"];
+ $$d{"past"} =["in urma", "${i}n urm${a}"];
+ $$d{"next"} =["urmatoarea","urm${a}toarea"];
+ $$d{"prev"} =["precedenta","ultima"];
+ $$d{"later"} =["mai tirziu", "mai t${i}rziu"];
+
+ $$d{"exact"} =["exact"];
+ $$d{"approx"} =["aproximativ"];
+ $$d{"business"}=["de lucru","lucratoare","lucr${a}toare"];
+
+ $$d{"offset"} =["ieri","-0:0:0:1:0:0:0",
+ "alaltaieri", "-0:0:0:2:0:0:0",
+ "alalt${a}ieri","-0:0:0:2:0:0:0",
+ "miine","+0:0:0:1:0:0:0",
+ "m${i}ine","+0:0:0:1:0:0:0",
+ "poimiine","+0:0:0:2:0:0:0",
+ "poim${i}ine","+0:0:0:2:0:0:0"];
+ $$d{"times"} =["amiaza","12:00:00",
+ "amiaz${a}","12:00:00",
+ "miezul noptii","00:00:00",
+ "miezul nop${p}ii","00:00:00"];
+
+ $$d{"years"} =["ani","an","a"];
+ $$d{"months"} =["luni","luna","lun${a}","l"];
+ $$d{"weeks"} =["saptamini","s${a}pt${a}m${i}ni","saptamina",
+ "s${a}pt${a}m${i}na","sapt","s${a}pt"];
+ $$d{"days"} =["zile","zi","z"];
+ $$d{"hours"} =["ore", "ora", "or${a}", "h"];
+ $$d{"minutes"} =["minute","min","m"];
+ $$d{"seconds"} =["secunde","sec",];
+ $$d{"replace"} =["s","secunde"];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:,]';
+
+ $$d{"am"} = ["AM","A.M."];
+ $$d{"pm"} = ["PM","P.M."];
+}
+
+sub Date_Init_Swedish {
+ print "DEBUG: Date_Init_Swedish\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+ my($ao)=$h{"ao"};
+ my($o) =$h{"o:"};
+ my($a) =$h{"a:"};
+
+ $$d{"month_name"}=
+ [["Januari","Februari","Mars","April","Maj","Juni",
+ "Juli","Augusti","September","Oktober","November","December"]];
+ $$d{"month_abb"}=
+ [["Jan","Feb","Mar","Apr","Maj","Jun",
+ "Jul","Aug","Sep","Okt","Nov","Dec"]];
+
+ $$d{"day_name"}=
+ [["Mandag","Tisdag","Onsdag","Torsdag","Fredag","Lordag","Sondag"],
+ ["M${ao}ndag","Tisdag","Onsdag","Torsdag","Fredag","L${o}rdag",
+ "S${o}ndag"]];
+ $$d{"day_abb"}=
+ [["Man","Tis","Ons","Tor","Fre","Lor","Son"],
+ ["M${ao}n","Tis","Ons","Tor","Fre","L${o}r","S${o}n"]];
+ $$d{"day_char"}=
+ [["M","Ti","O","To","F","L","S"]];
+
+ $$d{"num_suff"}=
+ [["1:a","2:a","3:e","4:e","5:e","6:e","7:e","8:e","9:e","10:e",
+ "11:e","12:e","13:e","14:e","15:e","16:e","17:e","18:e","19:e","20:e",
+ "21:a","22:a","23:e","24:e","25:e","26:e","27:e","28:e","29:e","30:e",
+ "31:a"]];
+ $$d{"num_word"}=
+ [["forsta","andra","tredje","fjarde","femte","sjatte","sjunde",
+ "attonde","nionde","tionde","elfte","tolfte","trettonde","fjortonde",
+ "femtonde","sextonde","sjuttonde","artonde","nittonde","tjugonde",
+ "tjugoforsta","tjugoandra","tjugotredje","tjugofjarde","tjugofemte",
+ "tjugosjatte","tjugosjunde","tjugoattonde","tjugonionde",
+ "trettionde","trettioforsta"],
+ ["f${o}rsta","andra","tredje","fj${a}rde","femte","sj${a}tte","sjunde",
+ "${ao}ttonde","nionde","tionde","elfte","tolfte","trettonde","fjortonde",
+ "femtonde","sextonde","sjuttonde","artonde","nittonde","tjugonde",
+ "tjugof${o}rsta","tjugoandra","tjugotredje","tjugofj${a}rde","tjugofemte",
+ "tjugosj${a}tte","tjugosjunde","tjugo${ao}ttonde","tjugonionde",
+ "trettionde","trettiof${o}rsta"]];
+
+ $$d{"now"} =["idag","nu"];
+ $$d{"last"} =["forra","f${o}rra","senaste"];
+ $$d{"each"} =["varje"];
+ $$d{"of"} =["om"];
+ $$d{"at"} =["kl","kl.","klockan"];
+ $$d{"on"} =["pa","p${ao}"];
+ $$d{"future"} =["om"];
+ $$d{"past"} =["sedan"];
+ $$d{"next"} =["nasta","n${a}sta"];
+ $$d{"prev"} =["forra","f${o}rra"];
+ $$d{"later"} =["senare"];
+
+ $$d{"exact"} =["exakt"];
+ $$d{"approx"} =["ungefar","ungef${a}r"];
+ $$d{"business"}=["arbetsdag","arbetsdagar"];
+
+ $$d{"offset"} =["ig${ao}r","-0:0:0:1:0:0:0","igar","-0:0:0:1:0:0:0",
+ "imorgon","+0:0:0:1:0:0:0"];
+ $$d{"times"} =["mitt pa dagen","12:00:00","mitt p${ao} dagen","12:00:00",
+ "midnatt","00:00:00"];
+
+ $$d{"years"} =["ar","${ao}r"];
+ $$d{"months"} =["man","manad","manader","m${ao}n","m${ao}nad","m${ao}nader"];
+ $$d{"weeks"} =["v","vecka","veckor"];
+ $$d{"days"} =["d","dag","dagar"];
+ $$d{"hours"} =["t","tim","timme","timmar"];
+ $$d{"minutes"} =["min","minut","minuter"];
+ $$d{"seconds"} =["s","sek","sekund","sekunder"];
+ $$d{"replace"} =["m","minut"];
+
+ $$d{"sephm"} ='[.:]';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = ["FM"];
+ $$d{"pm"} = ["EM"];
+}
+
+sub Date_Init_German {
+ print "DEBUG: Date_Init_German\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+ my($a)=$h{"a:"};
+ my($u)=$h{"u:"};
+ my($o)=$h{"o:"};
+ my($b)=$h{"beta"};
+
+ $$d{"month_name"}=
+ [["Januar","Februar","Maerz","April","Mai","Juni",
+ "Juli","August","September","Oktober","November","Dezember"],
+ ["J${a}nner","Februar","M${a}rz","April","Mai","Juni",
+ "Juli","August","September","Oktober","November","Dezember"]];
+ $$d{"month_abb"}=
+ [["Jan","Feb","Mar","Apr","Mai","Jun",
+ "Jul","Aug","Sep","Okt","Nov","Dez"],
+ ["J${a}n","Feb","M${a}r","Apr","Mai","Jun",
+ "Jul","Aug","Sep","Okt","Nov","Dez"]];
+
+ $$d{"day_name"}=
+ [["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag",
+ "Sonntag"]];
+ $$d{"day_abb"}=
+ [["Mon","Die","Mit","Don","Fre","Sam","Son"]];
+ $$d{"day_char"}=
+ [["M","Di","Mi","Do","F","Sa","So"]];
+
+ $$d{"num_suff"}=
+ [["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."]];
+ $$d{"num_word"}=
+ [
+ ["erste","zweite","dritte","vierte","funfte","sechste","siebente",
+ "achte","neunte","zehnte","elfte","zwolfte","dreizehnte","vierzehnte",
+ "funfzehnte","sechzehnte","siebzehnte","achtzehnte","neunzehnte",
+ "zwanzigste","einundzwanzigste","zweiundzwanzigste","dreiundzwanzigste",
+ "vierundzwanzigste","funfundzwanzigste","sechundzwanzigste",
+ "siebundzwanzigste","achtundzwanzigste","neunundzwanzigste",
+ "dreibigste","einunddreibigste"],
+ ["erste","zweite","dritte","vierte","f${u}nfte","sechste","siebente",
+ "achte","neunte","zehnte","elfte","zw${o}lfte","dreizehnte",
+ "vierzehnte","f${u}nfzehnte","sechzehnte","siebzehnte","achtzehnte",
+ "neunzehnte","zwanzigste","einundzwanzigste","zweiundzwanzigste",
+ "dreiundzwanzigste","vierundzwanzigste","f${u}nfundzwanzigste",
+ "sechundzwanzigste","siebundzwanzigste","achtundzwanzigste",
+ "neunundzwanzigste","drei${b}igste","einunddrei${b}igste"],
+ ["erster"]];
+
+ $$d{"now"} =["heute","jetzt"];
+ $$d{"last"} =["letzte","letzten"];
+ $$d{"each"} =["jeden"];
+ $$d{"of"} =["der","im","des"];
+ $$d{"at"} =["um"];
+ $$d{"on"} =["am"];
+ $$d{"future"} =["in"];
+ $$d{"past"} =["vor"];
+ $$d{"next"} =["nachste","n${a}chste","nachsten","n${a}chsten"];
+ $$d{"prev"} =["vorherigen","vorherige","letzte","letzten"];
+ $$d{"later"} =["spater","sp${a}ter"];
+
+ $$d{"exact"} =["genau"];
+ $$d{"approx"} =["ungefahr","ungef${a}hr"];
+ $$d{"business"}=["Arbeitstag"];
+
+ $$d{"offset"} =["gestern","-0:0:0:1:0:0:0","morgen","+0:0:0:1:0:0:0"];
+ $$d{"times"} =["mittag","12:00:00","mitternacht","00:00:00"];
+
+ $$d{"years"} =["j","Jahr","Jahre"];
+ $$d{"months"} =["Monat","Monate"];
+ $$d{"weeks"} =["w","Woche","Wochen"];
+ $$d{"days"} =["t","Tag","Tage"];
+ $$d{"hours"} =["h","std","Stunde","Stunden"];
+ $$d{"minutes"} =["min","Minute","Minuten"];
+ $$d{"seconds"} =["s","sek","Sekunde","Sekunden"];
+ $$d{"replace"} =["m","Monat"];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} ='[: ]';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = ["FM"];
+ $$d{"pm"} = ["EM"];
+}
+
+sub Date_Init_Dutch {
+ print "DEBUG: Date_Init_Dutch\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+
+ $$d{"month_name"}=
+ [["januari","februari","maart","april","mei","juni","juli","augustus",
+ "september","october","november","december"],
+ ["","","","","","","","","","oktober"]];
+
+ $$d{"month_abb"}=
+ [["jan","feb","maa","apr","mei","jun","jul",
+ "aug","sep","oct","nov","dec"],
+ ["","","mrt","","","","","","","okt"]];
+ $$d{"day_name"}=
+ [["maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag",
+ "zondag"]];
+ $$d{"day_abb"}=
+ [["ma","di","wo","do","vr","zat","zon"],
+ ["","","","","","za","zo"]];
+ $$d{"day_char"}=
+ [["M","D","W","D","V","Za","Zo"]];
+
+ $$d{"num_suff"}=
+ [["1ste","2de","3de","4de","5de","6de","7de","8ste","9de","10de",
+ "11de","12de","13de","14de","15de","16de","17de","18de","19de","20ste",
+ "21ste","22ste","23ste","24ste","25ste","26ste","27ste","28ste","29ste",
+ "30ste","31ste"]];
+ $$d{"num_word"}=
+ [["eerste","tweede","derde","vierde","vijfde","zesde","zevende","achtste",
+ "negende","tiende","elfde","twaalfde",
+ map {"${_}tiende";} qw (der veer vijf zes zeven acht negen),
+ "twintigste",
+ map {"${_}entwintigste";} qw (een twee drie vier vijf zes zeven acht
+ negen),
+ "dertigste","eenendertigste"],
+ ["","","","","","","","","","","","","","","","","","","","",
+ map {"${_}-en-twintigste";} qw (een twee drie vier vijf zes zeven acht
+ negen),
+ "dertigste","een-en-dertigste"],
+ ["een","twee","drie","vier","vijf","zes","zeven","acht","negen","tien",
+ "elf","twaalf",
+ map {"${_}tien"} qw (der veer vijf zes zeven acht negen),
+ "twintig",
+ map {"${_}entwintig"} qw (een twee drie vier vijf zes zeven acht negen),
+ "dertig","eenendertig"],
+ ["","","","","","","","","","","","","","","","","","","","",
+ map {"${_}-en-twintig"} qw (een twee drie vier vijf zes zeven acht
+ negen),
+ "dertig","een-en-dertig"]];
+
+ $$d{"now"} =["nu","nou","vandaag"];
+ $$d{"last"} =["laatste"];
+ $$d{"each"} =["elke","elk"];
+ $$d{"of"} =["in","van"];
+ $$d{"at"} =["om"];
+ $$d{"on"} =["op"];
+ $$d{"future"} =["over"];
+ $$d{"past"} =["geleden","vroeger","eerder"];
+ $$d{"next"} =["volgende","volgend"];
+ $$d{"prev"} =["voorgaande","voorgaand"];
+ $$d{"later"} =["later"];
+
+ $$d{"exact"} =["exact","precies","nauwkeurig"];
+ $$d{"approx"} =["ongeveer","ong",'ong\.',"circa","ca",'ca\.'];
+ $$d{"business"}=["werk","zakelijke","zakelijk"];
+
+ $$d{"offset"} =["morgen","+0:0:0:1:0:0:0","overmorgen","+0:0:0:2:0:0:0",
+ "gisteren","-0:0:0:1:0:0:0","eergisteren","-0::00:2:0:0:0"];
+ $$d{"times"} =["noen","12:00:00","middernacht","00:00:00"];
+
+ $$d{"years"} =["jaar","jaren","ja","j"];
+ $$d{"months"} =["maand","maanden","mnd"];
+ $$d{"weeks"} =["week","weken","w"];
+ $$d{"days"} =["dag","dagen","d"];
+ $$d{"hours"} =["uur","uren","u","h"];
+ $$d{"minutes"} =["minuut","minuten","min"];
+ $$d{"seconds"} =["seconde","seconden","sec","s"];
+ $$d{"replace"} =["m","minuten"];
+
+ $$d{"sephm"} ='[:.uh]';
+ $$d{"sepms"} ='[:.m]';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = ["am","a.m.","vm","v.m.","voormiddag","'s_ochtends",
+ "ochtend","'s_nachts","nacht"];
+ $$d{"pm"} = ["pm","p.m.","nm","n.m.","namiddag","'s_middags","middag",
+ "'s_avonds","avond"];
+}
+
+sub Date_Init_Polish {
+ print "DEBUG: Date_Init_Polish\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+
+ $$d{"month_name"}=
+ [["stycznia","luty","marca","kwietnia","maja","czerwca",
+ "lipca","sierpnia","wrzesnia","pazdziernika","listopada","grudnia"],
+ ["stycznia","luty","marca","kwietnia","maja","czerwca","lipca",
+ "sierpnia","wrze\x9cnia","pa\x9fdziernika","listopada","grudnia"]];
+ $$d{"month_abb"}=
+ [["sty.","lut.","mar.","kwi.","maj","cze.",
+ "lip.","sie.","wrz.","paz.","lis.","gru."],
+ ["sty.","lut.","mar.","kwi.","maj","cze.",
+ "lip.","sie.","wrz.","pa\x9f.","lis.","gru."]];
+
+ $$d{"day_name"}=
+ [["poniedzialek","wtorek","sroda","czwartek","piatek","sobota",
+ "niedziela"],
+ ["poniedzia\x81\xb3ek","wtorek","\x9croda","czwartek","pi\x81\xb9tek",
+ "sobota","niedziela"]];
+ $$d{"day_abb"}=
+ [["po.","wt.","sr.","cz.","pi.","so.","ni."],
+ ["po.","wt.","\x9cr.","cz.","pi.","so.","ni."]];
+ $$d{"day_char"}=
+ [["p","w","e","c","p","s","n"],
+ ["p","w","\x9c.","c","p","s","n"]];
+
+ $$d{"num_suff"}=
+ [["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."]];
+ $$d{"num_word"}=
+ [["pierwszego","drugiego","trzeczego","czwartego","piatego","szostego",
+ "siodmego","osmego","dziewiatego","dziesiatego",
+ "jedenastego","dwunastego","trzynastego","czternastego","pietnastego",
+ "szestnastego","siedemnastego","osiemnastego","dziewietnastego",
+ "dwudziestego",
+ "dwudziestego pierwszego","dwudziestego drugiego",
+ "dwudziestego trzeczego","dwudziestego czwartego",
+ "dwudziestego piatego","dwudziestego szostego",
+ "dwudziestego siodmego","dwudziestego osmego",
+ "dwudziestego dziewiatego","trzydziestego","trzydziestego pierwszego"],
+ ["pierwszego","drugiego","trzeczego","czwartego","pi\x81\xb9tego",
+ "sz\x81\xf3stego","si\x81\xf3dmego","\x81\xf3smego","dziewi\x81\xb9tego",
+ "dziesi\x81\xb9tego","jedenastego","dwunastego","trzynastego",
+ "czternastego","pi\x81\xeatnastego","szestnastego","siedemnastego",
+ "osiemnastego","dziewietnastego","dwudziestego",
+ "dwudziestego pierwszego","dwudziestego drugiego",
+ "dwudziestego trzeczego","dwudziestego czwartego",
+ "dwudziestego pi\x81\xb9tego","dwudziestego sz\x81\xf3stego",
+ "dwudziestego si\x81\xf3dmego","dwudziestego \x81\xf3smego",
+ "dwudziestego dziewi\x81\xb9tego","trzydziestego",
+ "trzydziestego pierwszego"]];
+
+ $$d{"now"} =["dzisaj","teraz"];
+ $$d{"last"} =["ostatni","ostatna"];
+ $$d{"each"} =["kazdy","ka\x81\xbfdy", "kazdym","ka\x81\xbfdym"];
+ $$d{"of"} =["w","z"];
+ $$d{"at"} =["o","u"];
+ $$d{"on"} =["na"];
+ $$d{"future"} =["za"];
+ $$d{"past"} =["temu"];
+ $$d{"next"} =["nastepny","nast\x81\xeapny","nastepnym","nast\x81\xeapnym",
+ "przyszly","przysz\x81\xb3y","przyszlym",
+ "przysz\x81\xb3ym"];
+ $$d{"prev"} =["zeszly","zesz\x81\xb3y","zeszlym","zesz\x81\xb3ym"];
+ $$d{"later"} =["later"];
+
+ $$d{"exact"} =["doklandnie","dok\x81\xb3andnie"];
+ $$d{"approx"} =["w przyblizeniu","w przybli\x81\xbfeniu","mniej wiecej",
+ "mniej wi\x81\xeacej","okolo","oko\x81\xb3o"];
+ $$d{"business"}=["sluzbowy","s\x81\xb3u\x81\xbfbowy","sluzbowym",
+ "s\x81\xb3u\x81\xbfbowym"];
+
+ $$d{"times"} =["po\x81\xb3udnie","12:00:00",
+ "p\x81\xf3\x81\xb3noc","00:00:00",
+ "poludnie","12:00:00","polnoc","00:00:00"];
+ $$d{"offset"} =["wczoraj","-0:0:1:0:0:0","jutro","+0:0:1:0:0:0"];
+
+ $$d{"years"} =["rok","lat","lata","latach"];
+ $$d{"months"} =["m.","miesiac","miesi\x81\xb9c","miesiecy",
+ "miesi\x81\xeacy","miesiacu","miesi\x81\xb9cu"];
+ $$d{"weeks"} =["ty.","tydzien","tydzie\x81\xf1","tygodniu"];
+ $$d{"days"} =["d.","dzien","dzie\x81\xf1","dni"];
+ $$d{"hours"} =["g.","godzina","godziny","godzinie"];
+ $$d{"minutes"} =["mn.","min.","minut","minuty"];
+ $$d{"seconds"} =["s.","sekund","sekundy"];
+ $$d{"replace"} =["m.","miesiac"];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = ["AM","A.M."];
+ $$d{"pm"} = ["PM","P.M."];
+}
+
+sub Date_Init_Spanish {
+ print "DEBUG: Date_Init_Spanish\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+
+ $$d{"month_name"}=
+ [["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
+ "Septiembre","Octubre","Noviembre","Diciembre"]];
+
+ $$d{"month_abb"}=
+ [["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct",
+ "Nov","Dic"]];
+
+ $$d{"day_name"}=
+ [["Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo"]];
+ $$d{"day_abb"}=
+ [["Lun","Mar","Mie","Jue","Vie","Sab","Dom"]];
+ $$d{"day_char"}=
+ [["L","Ma","Mi","J","V","S","D"]];
+
+ $$d{"num_suff"}=
+ [["1o","2o","3o","4o","5o","6o","7o","8o","9o","10o",
+ "11o","12o","13o","14o","15o","16o","17o","18o","19o","20o",
+ "21o","22o","23o","24o","25o","26o","27o","28o","29o","30o","31o"],
+ ["1a","2a","3a","4a","5a","6a","7a","8a","9a","10a",
+ "11a","12a","13a","14a","15a","16a","17a","18a","19a","20a",
+ "21a","22a","23a","24a","25a","26a","27a","28a","29a","30a","31a"]];
+ $$d{"num_word"}=
+ [["Primero","Segundo","Tercero","Cuarto","Quinto","Sexto","Septimo",
+ "Octavo","Noveno","Decimo","Decimo Primero","Decimo Segundo",
+ "Decimo Tercero","Decimo Cuarto","Decimo Quinto","Decimo Sexto",
+ "Decimo Septimo","Decimo Octavo","Decimo Noveno","Vigesimo",
+ "Vigesimo Primero","Vigesimo Segundo","Vigesimo Tercero",
+ "Vigesimo Cuarto","Vigesimo Quinto","Vigesimo Sexto",
+ "Vigesimo Septimo","Vigesimo Octavo","Vigesimo Noveno","Trigesimo",
+ "Trigesimo Primero"],
+ ["Primera","Segunda","Tercera","Cuarta","Quinta","Sexta","Septima",
+ "Octava","Novena","Decima","Decimo Primera","Decimo Segunda",
+ "Decimo Tercera","Decimo Cuarta","Decimo Quinta","Decimo Sexta",
+ "Decimo Septima","Decimo Octava","Decimo Novena","Vigesima",
+ "Vigesimo Primera","Vigesimo Segunda","Vigesimo Tercera",
+ "Vigesimo Cuarta","Vigesimo Quinta","Vigesimo Sexta",
+ "Vigesimo Septima","Vigesimo Octava","Vigesimo Novena","Trigesima",
+ "Trigesimo Primera"]];
+
+ $$d{"now"} =["Hoy","Ahora"];
+ $$d{"last"} =["ultimo"];
+ $$d{"each"} =["cada"];
+ $$d{"of"} =["en","de"];
+ $$d{"at"} =["a"];
+ $$d{"on"} =["el"];
+ $$d{"future"} =["en"];
+ $$d{"past"} =["hace"];
+ $$d{"next"} =["siguiente"];
+ $$d{"prev"} =["anterior"];
+ $$d{"later"} =["later"];
+
+ $$d{"exact"} =["exactamente"];
+ $$d{"approx"} =["aproximadamente"];
+ $$d{"business"}=["laborales"];
+
+ $$d{"offset"} =["ayer","-0:0:0:1:0:0:0","manana","+0:0:0:1:0:0:0"];
+ $$d{"times"} =["mediodia","12:00:00","medianoche","00:00:00"];
+
+ $$d{"years"} =["a","ano","ano","anos","anos"];
+ $$d{"months"} =["m","mes","mes","meses"];
+ $$d{"weeks"} =["sem","semana","semana","semanas"];
+ $$d{"days"} =["d","dia","dias"];
+ $$d{"hours"} =["hr","hrs","hora","horas"];
+ $$d{"minutes"} =["min","min","minuto","minutos"];
+ $$d{"seconds"} =["s","seg","segundo","segundos"];
+ $$d{"replace"} =["m","mes"];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = ["AM","A.M."];
+ $$d{"pm"} = ["PM","P.M."];
+}
+
+sub Date_Init_Portuguese {
+ print "DEBUG: Date_Init_Portuguese\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+ my($o) = $h{"-o"};
+ my($c) = $h{",c"};
+ my($a) = $h{"a'"};
+ my($e) = $h{"e'"};
+ my($u) = $h{"u'"};
+ my($o2)= $h{"o'"};
+ my($a2)= $h{"a`"};
+ my($a3)= $h{"a~"};
+ my($e2)= $h{"e^"};
+
+ $$d{"month_name"}=
+ [["Janeiro","Fevereiro","Marco","Abril","Maio","Junho",
+ "Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],
+ ["Janeiro","Fevereiro","Mar${c}o","Abril","Maio","Junho",
+ "Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"]];
+
+ $$d{"month_abb"}=
+ [["Jan","Fev","Mar","Abr","Mai","Jun",
+ "Jul","Ago","Set","Out","Nov","Dez"]];
+
+ $$d{"day_name"}=
+ [["Segunda","Terca","Quarta","Quinta","Sexta","Sabado","Domingo"],
+ ["Segunda","Ter${c}a","Quarta","Quinta","Sexta","S${a}bado","Domingo"]];
+ $$d{"day_abb"}=
+ [["Seg","Ter","Qua","Qui","Sex","Sab","Dom"],
+ ["Seg","Ter","Qua","Qui","Sex","S${a}b","Dom"]];
+ $$d{"day_char"}=
+ [["Sg","T","Qa","Qi","Sx","Sb","D"]];
+
+ $$d{"num_suff"}=
+ [["1${o}","2${o}","3${o}","4${o}","5${o}","6${o}","7${o}","8${o}",
+ "9${o}","10${o}","11${o}","12${o}","13${o}","14${o}","15${o}",
+ "16${o}","17${o}","18${o}","19${o}","20${o}","21${o}","22${o}",
+ "23${o}","24${o}","25${o}","26${o}","27${o}","28${o}","29${o}",
+ "30${o}","31${o}"]];
+ $$d{"num_word"}=
+ [["primeiro","segundo","terceiro","quarto","quinto","sexto","setimo",
+ "oitavo","nono","decimo","decimo primeiro","decimo segundo",
+ "decimo terceiro","decimo quarto","decimo quinto","decimo sexto",
+ "decimo setimo","decimo oitavo","decimo nono","vigesimo",
+ "vigesimo primeiro","vigesimo segundo","vigesimo terceiro",
+ "vigesimo quarto","vigesimo quinto","vigesimo sexto","vigesimo setimo",
+ "vigesimo oitavo","vigesimo nono","trigesimo","trigesimo primeiro"],
+ ["primeiro","segundo","terceiro","quarto","quinto","sexto","s${e}timo",
+ "oitavo","nono","d${e}cimo","d${e}cimo primeiro","d${e}cimo segundo",
+ "d${e}cimo terceiro","d${e}cimo quarto","d${e}cimo quinto",
+ "d${e}cimo sexto","d${e}cimo s${e}timo","d${e}cimo oitavo",
+ "d${e}cimo nono","vig${e}simo","vig${e}simo primeiro",
+ "vig${e}simo segundo","vig${e}simo terceiro","vig${e}simo quarto",
+ "vig${e}simo quinto","vig${e}simo sexto","vig${e}simo s${e}timo",
+ "vig${e}simo oitavo","vig${e}simo nono","trig${e}simo",
+ "trig${e}simo primeiro"]];
+
+ $$d{"now"} =["agora","hoje"];
+ $$d{"last"} =["${u}ltimo","ultimo"];
+ $$d{"each"} =["cada"];
+ $$d{"of"} =["da","do"];
+ $$d{"at"} =["as","${a2}s"];
+ $$d{"on"} =["na","no"];
+ $$d{"future"} =["em"];
+ $$d{"past"} =["a","${a2}"];
+ $$d{"next"} =["proxima","proximo","pr${o2}xima","pr${o2}ximo"];
+ $$d{"prev"} =["ultima","ultimo","${u}ltima","${u}ltimo"];
+ $$d{"later"} =["passadas","passados"];
+
+ $$d{"exact"} =["exactamente"];
+ $$d{"approx"} =["aproximadamente"];
+ $$d{"business"}=["util","uteis"];
+
+ $$d{"offset"} =["ontem","-0:0:0:1:0:0:0",
+ "amanha","+0:0:0:1:0:0:0","amanh${a3}","+0:0:0:1:0:0:0"];
+ $$d{"times"} =["meio-dia","12:00:00","meia-noite","00:00:00"];
+
+ $$d{"years"} =["anos","ano","ans","an","a"];
+ $$d{"months"} =["meses","m${e2}s","mes","m"];
+ $$d{"weeks"} =["semanas","semana","sem","sems","s"];
+ $$d{"days"} =["dias","dia","d"];
+ $$d{"hours"} =["horas","hora","hr","hrs"];
+ $$d{"minutes"} =["minutos","minuto","min","mn"];
+ $$d{"seconds"} =["segundos","segundo","seg","sg"];
+ $$d{"replace"} =["m","mes","s","sems"];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[,]';
+
+ $$d{"am"} = ["AM","A.M."];
+ $$d{"pm"} = ["PM","P.M."];
+}
+
+sub Date_Init_Russian {
+ print "DEBUG: Date_Init_Russian\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+ my(%h)=();
+ &Char_8Bit(\%h);
+ my($a) =$h{"a:"};
+
+ $$d{"month_name"}=
+ [
+ ["\xd1\xce\xd7\xc1\xd2\xd1","\xc6\xc5\xd7\xd2\xc1\xcc\xd1",
+ "\xcd\xc1\xd2\xd4\xc1","\xc1\xd0\xd2\xc5\xcc\xd1","\xcd\xc1\xd1",
+ "\xc9\xc0\xce\xd1",
+ "\xc9\xc0\xcc\xd1","\xc1\xd7\xc7\xd5\xd3\xd4\xc1",
+ "\xd3\xc5\xce\xd4\xd1\xc2\xd2\xd1","\xcf\xcb\xd4\xd1\xc2\xd2\xd1",
+ "\xce\xcf\xd1\xc2\xd2\xd1","\xc4\xc5\xcb\xc1\xc2\xd2\xd1"],
+ ["\xd1\xce\xd7\xc1\xd2\xd8","\xc6\xc5\xd7\xd2\xc1\xcc\xd8",
+ "\xcd\xc1\xd2\xd4","\xc1\xd0\xd2\xc5\xcc\xd8","\xcd\xc1\xca",
+ "\xc9\xc0\xce\xd8",
+ "\xc9\xc0\xcc\xd8","\xc1\xd7\xc7\xd5\xd3\xd4",
+ "\xd3\xc5\xce\xd4\xd1\xc2\xd2\xd8","\xcf\xcb\xd4\xd1\xc2\xd2\xd8",
+ "\xce\xcf\xd1\xc2\xd2\xd8","\xc4\xc5\xcb\xc1\xc2\xd2\xd8"]
+ ];
+
+ $$d{"month_abb"}=
+ [["\xd1\xce\xd7","\xc6\xc5\xd7","\xcd\xd2\xd4","\xc1\xd0\xd2",
+ "\xcd\xc1\xca","\xc9\xc0\xce",
+ "\xc9\xc0\xcc","\xc1\xd7\xc7","\xd3\xce\xd4","\xcf\xcb\xd4",
+ "\xce\xcf\xd1\xc2","\xc4\xc5\xcb"],
+ ["","\xc6\xd7\xd2","","","\xcd\xc1\xd1","",
+ "","","\xd3\xc5\xce","\xcf\xcb\xd4","\xce\xcf\xd1",""]];
+
+ $$d{"day_name"}=
+ [["\xd0\xcf\xce\xc5\xc4\xc5\xcc\xd8\xce\xc9\xcb",
+ "\xd7\xd4\xcf\xd2\xce\xc9\xcb","\xd3\xd2\xc5\xc4\xc1",
+ "\xde\xc5\xd4\xd7\xc5\xd2\xc7","\xd0\xd1\xd4\xce\xc9\xc3\xc1",
+ "\xd3\xd5\xc2\xc2\xcf\xd4\xc1",
+ "\xd7\xcf\xd3\xcb\xd2\xc5\xd3\xc5\xce\xd8\xc5"]];
+ $$d{"day_abb"}=
+ [["\xd0\xce\xc4","\xd7\xd4\xd2","\xd3\xd2\xc4","\xde\xd4\xd7",
+ "\xd0\xd4\xce","\xd3\xd5\xc2","\xd7\xd3\xcb"],
+ ["\xd0\xcf\xce","\xd7\xd4\xcf","\xd3\xd2e","\xde\xc5\xd4",
+ "\xd0\xd1\xd4","\xd3\xd5\xc2","\xd7\xcf\xd3\xcb"]];
+ $$d{"day_char"}=
+ [["\xd0\xce","\xd7\xd4","\xd3\xd2","\xde\xd4","\xd0\xd4","\xd3\xc2",
+ "\xd7\xd3"]];
+
+ $$d{"num_suff"}=
+ [["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 "]];
+ $$d{"num_word"}=
+ [["\xd0\xc5\xd2\xd7\xd9\xca","\xd7\xd4\xcf\xd2\xcf\xca",
+ "\xd4\xd2\xc5\xd4\xc9\xca","\xde\xc5\xd4\xd7\xc5\xd2\xd4\xd9\xca",
+ "\xd0\xd1\xd4\xd9\xca","\xdb\xc5\xd3\xd4\xcf\xca",
+ "\xd3\xc5\xc4\xd8\xcd\xcf\xca","\xd7\xcf\xd3\xd8\xcd\xcf\xca",
+ "\xc4\xc5\xd7\xd1\xd4\xd9\xca","\xc4\xc5\xd3\xd1\xd4\xd9\xca",
+ "\xcf\xc4\xc9\xce\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xc4\xd7\xc5\xce\xc1\xc4\xde\xc1\xd4\xd9\xca",
+ "\xd4\xd2\xc5\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xde\xc5\xd4\xd9\xd2\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xd0\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xdb\xc5\xd3\xd4\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xd7\xcf\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xc4\xc5\xd7\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xd9\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xd4\xcf\xd2\xcf\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd4\xd2\xc5\xd4\xc9\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xde\xc5\xd4\xd7\xc5\xd2\xd4\xd9\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xd1\xd4\xd9\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xdb\xc5\xd3\xd4\xcf\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd3\xc5\xc4\xd8\xcd\xcf\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xcf\xd3\xd8\xcd\xcf\xca",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xc4\xc5\xd7\xd1\xd4\xd9\xca",
+ "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd9\xca",
+ "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xd9\xca"],
+
+ ["\xd0\xc5\xd2\xd7\xcf\xc5","\xd7\xd4\xcf\xd2\xcf\xc5",
+ "\xd4\xd2\xc5\xd4\xd8\xc5","\xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc5",
+ "\xd0\xd1\xd4\xcf\xc5","\xdb\xc5\xd3\xd4\xcf\xc5",
+ "\xd3\xc5\xc4\xd8\xcd\xcf\xc5","\xd7\xcf\xd3\xd8\xcd\xcf\xc5",
+ "\xc4\xc5\xd7\xd1\xd4\xcf\xc5","\xc4\xc5\xd3\xd1\xd4\xcf\xc5",
+ "\xcf\xc4\xc9\xce\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xc4\xd7\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xd4\xd2\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xde\xc5\xd4\xd9\xd2\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xd0\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xdb\xc5\xd3\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xd7\xcf\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xc4\xc5\xd7\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xd4\xcf\xd2\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd4\xd2\xc5\xd4\xd8\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xd1\xd4\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xdb\xc5\xd3\xd4\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd3\xc5\xc4\xd8\xcd\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xcf\xd3\xd8\xcd\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xc4\xc5\xd7\xd1\xd4\xcf\xc5",
+ "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xcf\xc5",
+ "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc5"],
+
+ ["\xd0\xc5\xd2\xd7\xcf\xc7\xcf","\xd7\xd4\xcf\xd2\xcf\xc7\xcf",
+ "\xd4\xd2\xc5\xd4\xd8\xc5\xc7\xcf",
+ "\xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc7\xcf","\xd0\xd1\xd4\xcf\xc7\xcf",
+ "\xdb\xc5\xd3\xd4\xcf\xc7\xcf","\xd3\xc5\xc4\xd8\xcd\xcf\xc7\xcf",
+ "\xd7\xcf\xd3\xd8\xcd\xcf\xc7\xcf",
+ "\xc4\xc5\xd7\xd1\xd4\xcf\xc7\xcf","\xc4\xc5\xd3\xd1\xd4\xcf\xc7\xcf",
+ "\xcf\xc4\xc9\xce\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xc4\xd7\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xd4\xd2\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xde\xc5\xd4\xd9\xd2\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xd0\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xdb\xc5\xd3\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xd7\xcf\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xc4\xc5\xd7\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xd4\xcf\xd2\xcf\xc5",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd4\xd2\xc5\xd4\xd8\xc5\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xd1\xd4\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xdb\xc5\xd3\xd4\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd3\xc5\xc4\xd8\xcd\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xcf\xd3\xd8\xcd\xcf\xc7\xcf",
+ "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xc4\xc5\xd7\xd1\xd4\xcf\xc7\xcf",
+ "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+ "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc7\xcf"]];
+
+ $$d{"now"} =["\xd3\xc5\xc7\xcf\xc4\xce\xd1","\xd3\xc5\xca\xde\xc1\xd3"];
+ $$d{"last"} =["\xd0\xcf\xd3\xcc\xc5\xc4\xce\xc9\xca"];
+ $$d{"each"} =["\xcb\xc1\xd6\xc4\xd9\xca"];
+ $$d{"of"} =[" "];
+ $$d{"at"} =["\xd7"];
+ $$d{"on"} =["\xd7"];
+ $$d{"future"} =["\xd7\xd0\xc5\xd2\xc5\xc4 \xce\xc1"];
+ $$d{"past"} =["\xce\xc1\xda\xc1\xc4 \xce\xc1 "];
+ $$d{"next"} =["\xd3\xcc\xc5\xc4\xd5\xc0\xdd\xc9\xca"];
+ $$d{"prev"} =["\xd0\xd2\xc5\xc4\xd9\xc4\xd5\xdd\xc9\xca"];
+ $$d{"later"} =["\xd0\xcf\xda\xd6\xc5"];
+
+ $$d{"exact"} =["\xd4\xcf\xde\xce\xcf"];
+ $$d{"approx"} =["\xd0\xd2\xc9\xcd\xc5\xd2\xce\xcf"];
+ $$d{"business"}=["\xd2\xc1\xc2\xcf\xde\xc9\xc8"];
+
+ $$d{"offset"} =["\xd0\xcf\xda\xc1\xd7\xde\xc5\xd2\xc1","-0:0:0:2:0:0:0",
+ "\xd7\xde\xc5\xd2\xc1","-0:0:0:1:0:0:0",
+ "\xda\xc1\xd7\xd4\xd2\xc1","+0:0:0:1:0:0:0",
+ "\xd0\xcf\xd3\xcc\xc5\xda\xc1\xd7\xd4\xd2\xc1",
+ "+0:0:0:2:0:0:0"];
+ $$d{"times"} =["\xd0\xcf\xcc\xc4\xc5\xce\xd8","12:00:00",
+ "\xd0\xcf\xcc\xce\xcf\xde\xd8","00:00:00"];
+
+ $$d{"years"} =["\xc7","\xc7\xc4","\xc7\xcf\xc4","\xcc\xc5\xd4",
+ "\xcc\xc5\xd4","\xc7\xcf\xc4\xc1"];
+ $$d{"months"} =["\xcd\xc5\xd3","\xcd\xc5\xd3\xd1\xc3",
+ "\xcd\xc5\xd3\xd1\xc3\xc5\xd7"];
+ $$d{"weeks"} =["\xce\xc5\xc4\xc5\xcc\xd1","\xce\xc5\xc4\xc5\xcc\xd8",
+ "\xce\xc5\xc4\xc5\xcc\xc9","\xce\xc5\xc4\xc5\xcc\xc0"];
+ $$d{"days"} =["\xc4","\xc4\xc5\xce\xd8","\xc4\xce\xc5\xca",
+ "\xc4\xce\xd1"];
+ $$d{"hours"} =["\xde","\xde.","\xde\xd3","\xde\xd3\xd7","\xde\xc1\xd3",
+ "\xde\xc1\xd3\xcf\xd7","\xde\xc1\xd3\xc1"];
+ $$d{"minutes"} =["\xcd\xce","\xcd\xc9\xce","\xcd\xc9\xce\xd5\xd4\xc1",
+ "\xcd\xc9\xce\xd5\xd4"];
+ $$d{"seconds"} =["\xd3","\xd3\xc5\xcb","\xd3\xc5\xcb\xd5\xce\xc4\xc1",
+ "\xd3\xc5\xcb\xd5\xce\xc4"];
+ $$d{"replace"} =[];
+
+ $$d{"sephm"} ="[:\xde]";
+ $$d{"sepms"} ="[:\xcd]";
+ $$d{"sepss"} ="[:.\xd3]";
+
+ $$d{"am"} = ["\xc4\xd0","${a}\xf0","${a}.\xf0.","\xce\xcf\xde\xc9",
+ "\xd5\xd4\xd2\xc1",
+ "\xc4\xcf \xd0\xcf\xcc\xd5\xc4\xce\xd1"];
+ $$d{"pm"} = ["\xd0\xd0","\xf0\xf0","\xf0.\xf0.","\xc4\xce\xd1",
+ "\xd7\xc5\xde\xc5\xd2\xc1",
+ "\xd0\xcf\xd3\xcc\xc5 \xd0\xcf\xcc\xd5\xc4\xce\xd1",
+ "\xd0\xcf \xd0\xcf\xcc\xd5\xc4\xce\xc0"];
+}
+
+sub Date_Init_Turkish {
+ print "DEBUG: Date_Init_Turkish\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+
+ $$d{"month_name"}=
+ [
+ ["ocak","subat","mart","nisan","mayis","haziran",
+ "temmuz","agustos","eylul","ekim","kasim","aralik"],
+ ["ocak","\xfeubat","mart","nisan","may\xfds","haziran",
+ "temmuz","a\xf0ustos","eyl\xfcl","ekim","kas\xfdm","aral\xfdk"]
+ ];
+
+ $$d{"month_abb"}=
+ [
+ ["oca","sub","mar","nis","may","haz",
+ "tem","agu","eyl","eki","kas","ara"],
+ ["oca","\xfeub","mar","nis","may","haz",
+ "tem","a\xf0u","eyl","eki","kas","ara"]
+ ];
+
+ $$d{"day_name"}=
+ [
+ ["pazartesi","sali","carsamba","persembe","cuma","cumartesi","pazar"],
+ ["pazartesi","sal\xfd","\xe7ar\xfeamba","per\xfeembe","cuma",
+ "cumartesi","pazar"],
+ ];
+
+ $$d{"day_abb"}=
+ [
+ ["pzt","sal","car","per","cum","cts","paz"],
+ ["pzt","sal","\xe7ar","per","cum","cts","paz"],
+ ];
+
+ $$d{"day_char"}=
+ [["Pt","S","Cr","Pr","C","Ct","P"],
+ ["Pt","S","\xc7","Pr","C","Ct","P"]];
+
+ $$d{"num_suff"}=
+ [[ "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."]];
+
+ $$d{"num_word"}=
+ [
+ ["birinci","ikinci","ucuncu","dorduncu",
+ "besinci","altinci","yedinci","sekizinci",
+ "dokuzuncu","onuncu","onbirinci","onikinci",
+ "onucuncu","ondordoncu",
+ "onbesinci","onaltinci","onyedinci","onsekizinci",
+ "ondokuzuncu","yirminci","yirmibirinci","yirmikinci",
+ "yirmiucuncu","yirmidorduncu",
+ "yirmibesinci","yirmialtinci","yirmiyedinci","yirmisekizinci",
+ "yirmidokuzuncu","otuzuncu","otuzbirinci"],
+ ["birinci","ikinci","\xfc\xe7\xfcnc\xfc","d\xf6rd\xfcnc\xfc",
+ "be\xfeinci","alt\xfdnc\xfd","yedinci","sekizinci",
+ "dokuzuncu","onuncu","onbirinci","onikinci",
+ "on\xfc\xe7\xfcnc\xfc","ond\xf6rd\xfcnc\xfc",
+ "onbe\xfeinci","onalt\xfdnc\xfd","onyedinci","onsekizinci",
+ "ondokuzuncu","yirminci","yirmibirinci","yirmikinci",
+ "yirmi\xfc\xe7\xfcnc\xfc","yirmid\xf6rd\xfcnc\xfc",
+ "yirmibe\xfeinci","yirmialt\xfdnc\xfd","yirmiyedinci","yirmisekizinci",
+ "yirmidokuzuncu","otuzuncu","otuzbirinci"]
+ ];
+
+ $$d{"now"} =["\xfeimdi", "simdi", "bugun","bug\xfcn"];
+ $$d{"last"} =["son", "sonuncu"];
+ $$d{"each"} =["her"];
+ $$d{"of"} =["of"];
+ $$d{"at"} =["saat"];
+ $$d{"on"} =["on"];
+ $$d{"future"} =["gelecek"];
+ $$d{"past"} =["ge\xe7mi\xfe", "gecmis","gecen", "ge\xe7en"];
+ $$d{"next"} =["gelecek","sonraki"];
+ $$d{"prev"} =["onceki","\xf6nceki"];
+ $$d{"later"} =["sonra"];
+
+ $$d{"exact"} =["tam"];
+ $$d{"approx"} =["yakla\xfe\xfdk", "yaklasik"];
+ $$d{"business"}=["i\xfe","\xe7al\xfd\xfema","is", "calisma"];
+
+ $$d{"offset"} =["d\xfcn","-0:0:0:1:0:0:0",
+ "dun", "-0:0:0:1:0:0:0",
+ "yar\xfdn","+0:0:0:1:0:0:0",
+ "yarin","+0:0:0:1:0:0:0"];
+
+ $$d{"times"} =["\xf6\xf0len","12:00:00",
+ "oglen","12:00:00",
+ "yarim","12:300:00",
+ "yar\xfdm","12:30:00",
+ "gece yar\xfds\xfd","00:00:00",
+ "gece yarisi","00:00:00"];
+
+ $$d{"years"} =["yil","y"];
+ $$d{"months"} =["ay","a"];
+ $$d{"weeks"} =["hafta", "h"];
+ $$d{"days"} =["gun","g"];
+ $$d{"hours"} =["saat"];
+ $$d{"minutes"} =["dakika","dak","d"];
+ $$d{"seconds"} =["saniye","sn",];
+ $$d{"replace"} =["s","saat"];
+
+ $$d{"sephm"} =':';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:,]';
+
+ $$d{"am"} = ["\xf6gleden \xf6nce","ogleden once"];
+ $$d{"pm"} = ["\xf6\xf0leden sonra","ogleden sonra"];
+}
+
+sub Date_Init_Danish {
+ print "DEBUG: Date_Init_Danish\n" if ($Curr{"Debug"} =~ /trace/);
+ my($d)=@_;
+
+ $$d{"month_name"}=
+ [["Januar","Februar","Marts","April","Maj","Juni",
+ "Juli","August","September","Oktober","November","December"]];
+ $$d{"month_abb"}=
+ [["Jan","Feb","Mar","Apr","Maj","Jun",
+ "Jul","Aug","Sep","Okt","Nov","Dec"]];
+
+ $$d{"day_name"}=
+ [["Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lordag","Sondag"],
+ ["Mandag","Tirsdag","Onsdag","Torsdag","Fredag","L\xf8rdag","S\xf8ndag"]];
+
+ $$d{"day_abb"}=
+ [["Man","Tis","Ons","Tor","Fre","Lor","Son"],
+ ["Man","Tis","Ons","Tor","Fre","L\xf8r","S\xf8n"]];
+ $$d{"day_char"}=
+ [["M","Ti","O","To","F","L","S"]];
+
+ $$d{"num_suff"}=
+ [["1:e","2:e","3:e","4:e","5:e","6:e","7:e","8:e","9:e","10:e",
+ "11:e","12:e","13:e","14:e","15:e","16:e","17:e","18:e","19:e","20:e",
+ "21:e","22:e","23:e","24:e","25:e","26:e","27:e","28:e","29:e","30:e",
+ "31:e"]];
+ $$d{"num_word"}=
+ [["forste","anden","tredie","fjerde","femte","sjette","syvende",
+ "ottende","niende","tiende","elfte","tolvte","trettende","fjortende",
+ "femtende","sekstende","syttende","attende","nittende","tyvende",
+ "enogtyvende","toogtyvende","treogtyvende","fireogtyvende","femogtyvende",
+ "seksogtyvende","syvogtyvende","otteogtyvende","niogtyvende",
+ "tredivte","enogtredivte"],
+ ["f\xf8rste","anden","tredie","fjerde","femte","sjette","syvende",
+ "ottende","niende","tiende","elfte","tolvte","trettende","fjortende",
+ "femtende","sekstende","syttende","attende","nittende","tyvende",
+ "enogtyvende","toogtyvende","treogtyvende","fireogtyvende","femogtyvende",
+ "seksogtyvende","syvogtyvende","otteogtyvende","niogtyvende",
+ "tredivte","enogtredivte"]];
+
+ $$d{"now"} =["idag","nu"];
+ $$d{"last"} =["forrige","sidste","nyeste"];
+ $$d{"each"} =["hver"];
+ $$d{"of"} =["om"];
+ $$d{"at"} =["kl","kl.","klokken"];
+ $$d{"on"} =["pa","p\xe5"];
+ $$d{"future"} =["om"];
+ $$d{"past"} =["siden"];
+ $$d{"next"} =["nasta","n\xe6ste"];
+ $$d{"prev"} =["forrige"];
+ $$d{"later"} =["senere"];
+
+ $$d{"exact"} =["pracist","pr\xe6cist"];
+ $$d{"approx"} =["circa"];
+ $$d{"business"}=["arbejdsdag","arbejdsdage"];
+
+ $$d{"offset"} =["ig\xe5r","-0:0:0:1:0:0:0","igar","-0:0:0:1:0:0:0",
+ "imorgen","+0:0:0:1:0:0:0"];
+ $$d{"times"} =["midt pa dagen","12:00:00","midt p\xe5 dagen","12:00:00",
+ "midnat","00:00:00"];
+
+ $$d{"years"} =["ar","\xe5r"];
+ $$d{"months"} =["man","maned","maneder","m\xe5n","m\xe5ned","m\xe5neder"];
+ $$d{"weeks"} =["u","uge","uger"];
+ $$d{"days"} =["d","dag","dage"];
+ $$d{"hours"} =["t","tim","time","timer"];
+ $$d{"minutes"} =["min","minut","minutter"];
+ $$d{"seconds"} =["s","sek","sekund","sekunder"];
+ $$d{"replace"} =["m","minut"];
+
+ $$d{"sephm"} ='[.:]';
+ $$d{"sepms"} =':';
+ $$d{"sepss"} ='[.:]';
+
+ $$d{"am"} = ["FM"];
+ $$d{"pm"} = ["EM"];
+}
+
+########################################################################
+# FROM MY PERSONAL LIBRARIES
+########################################################################
+
+no integer;
+
+# &ModuloAddition($N,$add,\$val,\$rem);
+# This calculates $val=$val+$add and forces $val to be in a certain range.
+# This is useful for adding numbers for which only a certain range is
+# allowed (for example, minutes can be between 0 and 59 or months can be
+# between 1 and 12). The absolute value of $N determines the range and
+# the sign of $N determines whether the range is 0 to N-1 (if N>0) or
+# 1 to N (N<0). The remainder (as modulo N) is added to $rem.
+# Example:
+# To add 2 hours together (with the excess returned in days) use:
+# &ModuloAddition(60,$s1,\$s,\$day);
+sub ModuloAddition {
+ my($N,$add,$val,$rem)=@_;
+ return if ($N==0);
+ $$val+=$add;
+ if ($N<0) {
+ # 1 to N
+ $N = -$N;
+ if ($$val>$N) {
+ $$rem+= int(($$val-1)/$N);
+ $$val = ($$val-1)%$N +1;
+ } elsif ($$val<1) {
+ $$rem-= int(-$$val/$N)+1;
+ $$val = $N-(-$$val % $N);
+ }
+
+ } else {
+ # 0 to N-1
+ if ($$val>($N-1)) {
+ $$rem+= int($$val/$N);
+ $$val = $$val%$N;
+ } elsif ($$val<0) {
+ $$rem-= int(-($$val+1)/$N)+1;
+ $$val = ($N-1)-(-($$val+1)%$N);
+ }
+ }
+}
+
+# $Flag=&IsInt($String [,$low, $high]);
+# Returns 1 if $String is a valid integer, 0 otherwise. If $low is
+# entered, $String must be >= $low. If $high is entered, $String must
+# be <= $high. It is valid to check only one of the bounds.
+sub IsInt {
+ my($N,$low,$high)=@_;
+ return 0 if (! defined $N or
+ $N !~ /^\s*[-+]?\d+\s*$/ or
+ defined $low && $N<$low or
+ defined $high && $N>$high);
+ return 1;
+}
+
+# $Pos=&SinLindex(\@List,$Str [,$offset [,$CaseInsensitive]]);
+# Searches for an exact string in a list.
+#
+# This is similar to RinLindex except that it searches for elements
+# which are exactly equal to $Str (possibly case insensitive).
+sub SinLindex {
+ my($listref,$Str,$offset,$Insensitive)=@_;
+ my($i,$len,$tmp)=();
+ $len=$#$listref;
+ return -2 if ($len<0 or ! $Str);
+ return -1 if (&Index_First(\$offset,$len));
+ $Str=uc($Str) if ($Insensitive);
+ for ($i=$offset; $i<=$len; $i++) {
+ $tmp=$$listref[$i];
+ $tmp=uc($tmp) if ($Insensitive);
+ return $i if ($tmp eq $Str);
+ }
+ return -1;
+}
+
+sub Index_First {
+ my($offsetref,$max)=@_;
+ $$offsetref=0 if (! $$offsetref);
+ if ($$offsetref < 0) {
+ $$offsetref += $max + 1;
+ $$offsetref=0 if ($$offsetref < 0);
+ }
+ return -1 if ($$offsetref > $max);
+ return 0;
+}
+
+# $File=&CleanFile($file);
+# This cleans up a path to remove the following things:
+# double slash /a//b -> /a/b
+# trailing dot /a/. -> /a
+# leading dot ./a -> a
+# trailing slash a/ -> a
+sub CleanFile {
+ my($file)=@_;
+ $file =~ s/\s*$//;
+ $file =~ s/^\s*//;
+ $file =~ s|//+|/|g; # multiple slash
+ $file =~ s|/\.$|/|; # trailing /. (leaves trailing slash)
+ $file =~ s|^\./|| # leading ./
+ if ($file ne "./");
+ $file =~ s|/$|| # trailing slash
+ if ($file ne "/");
+ return $file;
+}
+
+# $File=&ExpandTilde($file);
+# This checks to see if a "~" appears as the first character in a path.
+# If it does, the "~" expansion is interpreted (if possible) and the full
+# path is returned. If a "~" expansion is used but cannot be
+# interpreted, an empty string is returned.
+#
+# This is Windows/Mac friendly.
+# This is efficient.
+sub ExpandTilde {
+ my($file)=shift;
+ my($user,$home)=();
+ # ~aaa/bbb= ~ aaa /bbb
+ if ($file =~ s|^~([^/]*)||) {
+ $user=$1;
+ # Single user operating systems (Mac, MSWindows) don't have the getpwnam
+ # and getpwuid routines defined. Try to catch various different ways
+ # of knowing we are on one of these systems:
+ return "" if ($OS eq "Windows" or
+ $OS eq "Mac" or
+ $OS eq "Netware" or
+ $OS eq "MPE");
+ $user="" if (! defined $user);
+
+ if ($user) {
+ $home= (getpwnam($user))[7];
+ } else {
+ $home= (getpwuid($<))[7];
+ }
+ $home = VMS::Filespec::unixpath($home) if ($OS eq "VMS");
+ return "" if (! $home);
+ $file="$home/$file";
+ }
+ $file;
+}
+
+# $File=&FullFilePath($file);
+# Returns the full or relative path to $file (expanding "~" if necessary).
+# Returns an empty string if a "~" expansion cannot be interpreted. The
+# path does not need to exist. CleanFile is called.
+sub FullFilePath {
+ my($file)=shift;
+ my($rootpat) = '^/'; #default pattern to match absolute path
+ $rootpat = '^(\\|/|([A-Za-z]:[\\/]))' if ($OS eq 'Windows');
+ $file=&ExpandTilde($file);
+ return "" if (! $file);
+ return &CleanFile($file);
+}
+
+# $Flag=&CheckFilePath($file [,$mode]);
+# Checks to see if $file exists, to see what type it is, and whether
+# the script can access it. If it exists and has the correct mode, 1
+# is returned.
+#
+# $mode is a string which may contain any of the valid file test operator
+# characters except t, M, A, C. The appropriate test is run for each
+# character. For example, if $mode is "re" the -r and -e tests are both
+# run.
+#
+# An empty string is returned if the file doesn't exist. A 0 is returned
+# if the file exists but any test fails.
+#
+# All characters in $mode which do not correspond to valid tests are
+# ignored.
+sub CheckFilePath {
+ my($file,$mode)=@_;
+ my($test)=();
+ $file=&FullFilePath($file);
+ $mode = "" if (! defined $mode);
+
+ # Run tests
+ return 0 if (! defined $file or ! $file);
+ return 0 if (( ! -e $file) or
+ ($mode =~ /r/ && ! -r $file) or
+ ($mode =~ /w/ && ! -w $file) or
+ ($mode =~ /x/ && ! -x $file) or
+ ($mode =~ /R/ && ! -R $file) or
+ ($mode =~ /W/ && ! -W $file) or
+ ($mode =~ /X/ && ! -X $file) or
+ ($mode =~ /o/ && ! -o $file) or
+ ($mode =~ /O/ && ! -O $file) or
+ ($mode =~ /z/ && ! -z $file) or
+ ($mode =~ /s/ && ! -s $file) or
+ ($mode =~ /f/ && ! -f $file) or
+ ($mode =~ /d/ && ! -d $file) or
+ ($mode =~ /l/ && ! -l $file) or
+ ($mode =~ /s/ && ! -s $file) or
+ ($mode =~ /p/ && ! -p $file) or
+ ($mode =~ /b/ && ! -b $file) or
+ ($mode =~ /c/ && ! -c $file) or
+ ($mode =~ /u/ && ! -u $file) or
+ ($mode =~ /g/ && ! -g $file) or
+ ($mode =~ /k/ && ! -k $file) or
+ ($mode =~ /T/ && ! -T $file) or
+ ($mode =~ /B/ && ! -B $file));
+ return 1;
+}
+#&&
+
+# $Path=&FixPath($path [,$full] [,$mode] [,$error]);
+# Makes sure that every directory in $path (a colon separated list of
+# directories) appears as a full path or relative path. All "~"
+# expansions are removed. All trailing slashes are removed also. If
+# $full is non-nil, relative paths are expanded to full paths as well.
+#
+# If $mode is given, it may be either "e", "r", or "w". In this case,
+# additional checking is done to each directory. If $mode is "e", it
+# need ony exist to pass the check. If $mode is "r", it must have have
+# read and execute permission. If $mode is "w", it must have read,
+# write, and execute permission.
+#
+# The value of $error determines what happens if the directory does not
+# pass the test. If it is non-nil, if any directory does not pass the
+# test, the subroutine returns the empty string. Otherwise, it is simply
+# removed from $path.
+#
+# The corrected path is returned.
+sub FixPath {
+ my($path,$full,$mode,$err)=@_;
+ local($_)="";
+ my(@dir)=split(/$Cnf{"PathSep"}/,$path);
+ $full=0 if (! defined $full);
+ $mode="" if (! defined $mode);
+ $err=0 if (! defined $err);
+ $path="";
+ if ($mode eq "e") {
+ $mode="de";
+ } elsif ($mode eq "r") {
+ $mode="derx";
+ } elsif ($mode eq "w") {
+ $mode="derwx";
+ }
+
+ foreach (@dir) {
+
+ # Expand path
+ if ($full) {
+ $_=&FullFilePath($_);
+ } else {
+ $_=&ExpandTilde($_);
+ }
+ if (! $_) {
+ return "" if ($err);
+ next;
+ }
+
+ # Check mode
+ if (! $mode or &CheckFilePath($_,$mode)) {
+ $path .= $Cnf{"PathSep"} . $_;
+ } else {
+ return "" if ($err);
+ }
+ }
+ $path =~ s/^$Cnf{"PathSep"}//;
+ return $path;
+}
+#&&
+
+# $File=&SearchPath($file,$path [,$mode] [,@suffixes]);
+# Searches through directories in $path for a file named $file. The
+# full path is returned if one is found, or an empty string otherwise.
+# The file may exist with one of the @suffixes. The mode is checked
+# similar to &CheckFilePath.
+#
+# The first full path that matches the name and mode is returned. If none
+# is found, an empty string is returned.
+sub SearchPath {
+ my($file,$path,$mode,@suff)=@_;
+ my($f,$s,$d,@dir,$fs)=();
+ $path=&FixPath($path,1,"r");
+ @dir=split(/$Cnf{"PathSep"}/,$path);
+ foreach $d (@dir) {
+ $f="$d/$file";
+ $f=~ s|//|/|g;
+ return $f if (&CheckFilePath($f,$mode));
+ foreach $s (@suff) {
+ $fs="$f.$s";
+ return $fs if (&CheckFilePath($fs,$mode));
+ }
+ }
+ return "";
+}
+
+# @list=&ReturnList($str);
+# This takes a string which should be a comma separated list of integers
+# or ranges (5-7). It returns a sorted list of all integers referred to
+# by the string, or () if there is an invalid element.
+#
+# Negative integers are also handled. "-2--1" is equivalent to "-2,-1".
+sub ReturnList {
+ my($str)=@_;
+ my(@ret,@str,$from,$to,$tmp)=();
+ @str=split(/,/,$str);
+ foreach $str (@str) {
+ if ($str =~ /^[-+]?\d+$/) {
+ push(@ret,$str);
+ } elsif ($str =~ /^([-+]?\d+)-([-+]?\d+)$/) {
+ ($from,$to)=($1,$2);
+ if ($from>$to) {
+ $tmp=$from;
+ $from=$to;
+ $to=$tmp;
+ }
+ push(@ret,$from..$to);
+ } else {
+ return ();
+ }
+ }
+ @ret;
+}
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Date/Manip.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,2755 @@
+# Copyright (c) 1995-2003 Sullivan Beck. All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+=head1 NAME
+
+Date::Manip - date manipulation routines
+
+=head1 SYNOPSIS
+
+ use Date::Manip;
+
+ $date = ParseDate(\@args);
+ $date = ParseDate($string);
+ $date = ParseDate(\$string);
+
+ @date = UnixDate($date,@format);
+ $date = UnixDate($date,@format);
+
+ $delta = ParseDateDelta(\@args);
+ $delta = ParseDateDelta($string);
+ $delta = ParseDateDelta(\$string);
+
+ @str = Delta_Format($delta,$dec,@format);
+ $str = Delta_Format($delta,$dec,@format);
+
+ $recur = ParseRecur($string,$base,$date0,$date1,$flags);
+ @dates = ParseRecur($string,$base,$date0,$date1,$flags);
+
+ $flag = Date_Cmp($date1,$date2);
+
+ $d = DateCalc($d1,$d2 [,$errref] [,$del]);
+
+ $date = Date_SetTime($date,$hr,$min,$sec);
+ $date = Date_SetTime($date,$time);
+
+ $date = Date_SetDateField($date,$field,$val [,$nocheck]);
+
+ $date = Date_GetPrev($date,$dow,$today,$hr,$min,$sec);
+ $date = Date_GetPrev($date,$dow,$today,$time);
+
+ $date = Date_GetNext($date,$dow,$today,$hr,$min,$sec);
+ $date = Date_GetNext($date,$dow,$today,$time);
+
+ $version = DateManipVersion;
+
+ $flag = Date_IsWorkDay($date [,$flag]);
+
+ $date = Date_NextWorkDay($date,$off [,$time]);
+ $date = Date_PrevWorkDay($date,$off [,$time]);
+
+ $name = Date_IsHoliday($date);
+
+ $listref = Events_List($date);
+ $listref = Events_List($date0,$date1);
+
+ &Date_Init();
+ &Date_Init("VAR=VAL","VAR=VAL",...);
+ @list = Date_Init();
+ @list = Date_Init("VAR=VAL","VAR=VAL",...);
+
+The above routines all check to make sure that Date_Init is called. If it
+hasn't been, they will call it automatically. As a result, there is usually
+no need to call Date_Init explicitely unless you want to change some of the
+config variables (described below).
+
+The following routines are used by the above routines (though they can also
+be called directly). $y may be entered as either a 2 or 4 digit year (it
+will be converted to a 4 digit year based on the variable YYtoYYYY
+described below). Month and day should be numeric in all cases. Most (if
+not all) of the information below can be gotten from UnixDate which is
+really the way I intended it to be gotten, but there are reasons to use
+these (these are significantly faster).
+
+***NOTE*** Unlike the routines listed above, the following routines do NOT
+explicitely call Date_Init. You must make sure that Date_Init has been
+called, either by you explicitely, or by one of the above routines before you
+use these routines.
+
+ $day = Date_DayOfWeek($m,$d,$y);
+ $secs = Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
+ $secs = Date_SecsSince1970GMT($m,$d,$y,$h,$mn,$s);
+ $days = Date_DaysSince1BC($m,$d,$y);
+ $day = Date_DayOfYear($m,$d,$y);
+ $days = Date_DaysInYear($y);
+ $wkno = Date_WeekOfYear($m,$d,$y,$first);
+ $flag = Date_LeapYear($y);
+ $day = Date_DaySuffix($d);
+ $tz = Date_TimeZone();
+ ($y,$m,$d,$h,$mn,$s) = Date_NthDayOfYear($y,$n);
+
+=head1 DESCRIPTION
+
+This is a set of routines designed to make any common date/time
+manipulation easy to do. Operations such as comparing two times,
+calculating a time a given amount of time from another, or parsing
+international times are all easily done. From the very beginning, the main
+focus of Date::Manip has been to be able to do ANY desired date/time
+operation easily, not necessarily quickly. Also, it is definitely oriented
+towards the type of operations we (as people) tend to think of rather than
+those operations used routinely by computers. There are other modules that
+can do a subset of the operations available in Date::Manip much quicker
+than those presented here, so be sure to read the section SHOULD I USE
+DATE::MANIP below before deciding which of the Date and Time modules from
+CPAN is for you.
+
+Date::Manip deals with time as it is presented the Gregorian calendar (the
+one currently in use). The Julian calendar defined leap years as every 4th
+year. The Gregorian calendar improved this by making every 100th year NOT
+a leap year, unless it was also the 400th year. The Gregorian calendar has
+been extrapolated back to the year 0000 AD and forward to the year 9999 AD.
+Note that in historical context, the Julian calendar was in use until 1582
+when the Gregorian calendar was adopted by the Catholic church. Protestant
+countries did not accept it until later; Germany and Netherlands in 1698,
+British Empire in 1752, Russia in 1918. Note that the Gregorian calendar
+is itself imperfect and at some point will need to be corrected. No attempt
+is made to correct for that, and my great great great grandchildren will be
+long dead before this even occurs, so it's not an immediate concern. Yes,
+this is the same type of attitute that caused the great Y2K problem... but
+I have an excuse: I don't know what the correction will be, so I can't
+possible implement it. Nobody doubted that the year after 1999 would be
+known as 2000 :-).
+
+Date::Manip is therefore not equipped to truly deal with historical dates,
+but should be able to perform (virtually) any operation dealing with a
+modern time and date.
+
+Date::Manip has (or will have) functionality to work with several fundamental
+types of data.
+
+=over 4
+
+=item DATE
+
+Although the word date is used extensively here, it is actually somewhat
+misleading. Date::Manip works with the full date AND time (year, month,
+day, hour, minute, second and weeks when appropriate). It doesn't work
+with fractional seconds. Timezones are also supported to some extent.
+
+NOTE: Much better support for timezones (including Daylight Savings Time)
+is planned for the future.
+
+=item DELTA
+
+This refers to a duration or elapsed time. One thing to note is that, as
+used in this module, a delta refers only to the amount of time elapsed. It
+includes no information about a starting or ending time.
+
+=item RECURRENCE
+
+A recurrence is simply a notation for defining when a recurring event
+occurs. For example, if an event occurs every other Friday or every
+4 hours, this can be defined as a recurrence. With a recurrence and a
+starting and ending date, you can get a list of dates in that period when
+a recurring event occurs.
+
+=item GRAIN
+
+The granularity of a time basically refers to how accurate you wish to
+treat a date. For example, if you want to compare two dates to see if
+they are identical at a granularity of days, then they only have to occur
+on the same day. At a granularity of an hour, they have to occur within
+an hour of each other, etc.
+
+NOTE: Support for this will be added in the future.
+
+=item HOLIDAYS and EVENTS
+
+These are basically a named time. Holidays are used in business mode
+calculations. Events allow things like calendar and scheduling
+applications to be designed much more easily.
+
+=back
+
+Among other things, Date::Manip allow you to:
+
+1. Enter a date and be able to choose any format convenient
+
+2. Compare two dates, entered in widely different formats
+ to determine which is earlier
+
+3. Extract any information you want from ANY date using a
+ format string similar to the Unix date command
+
+4. Determine the amount of time between two dates
+
+5. Add a time offset to a date to get a second date (i.e.
+ determine the date 132 days ago or 2 years and 3 months
+ after Jan 2, 1992)
+
+6. Work with dates with dates using international formats
+ (foreign month names, 12/10/95 referring to October
+ rather than December, etc.).
+
+7. To find a list of dates where a recurring event happens.
+
+Each of these tasks is trivial (one or two lines at most) with this package.
+
+=head1 EXAMPLES
+
+In the documentation below, US formats are used, but in most (if not all)
+cases, a non-English equivalent will work equally well.
+
+1. Parsing a date from any convenient format
+
+ $date = ParseDate("today");
+ $date = ParseDate("1st thursday in June 1992");
+ $date = ParseDate("05/10/93");
+ $date = ParseDate("12:30 Dec 12th 1880");
+ $date = ParseDate("8:00pm december tenth");
+ if (! $date) {
+ # Error in the date
+ }
+
+2. Compare two dates
+
+ $date1 = ParseDate($string1);
+ $date2 = ParseDate($string2);
+ $flag = Date_Cmp($date1,$date2);
+ if ($flag<0) {
+ # date1 is earlier
+ } elsif ($flag==0) {
+ # the two dates are identical
+ } else {
+ # date2 is earlier
+ }
+
+3. Extract information from a date.
+
+ print &UnixDate("today","It is now %T on %b %e, %Y.");
+ => "It is now 13:24:08 on Feb 3, 1996."
+
+4. The amount of time between two dates.
+
+ $date1 = ParseDate($string1);
+ $date2 = ParseDate($string2);
+ $delta = DateCalc($date1,$date2,\$err);
+ => 0:0:WK:DD:HH:MM:SS the weeks, days, hours, minutes,
+ and seconds between the two
+ $delta = DateCalc($date1,$date2,\$err,1);
+ => YY:MM:WK:DD:HH:MM:SS the years, months, etc. between
+ the two
+
+ Read the documentation below for an explanation of the
+ difference.
+
+5. To determine a date a given offset from another.
+
+ $date = DateCalc("today","+ 3hours 12minutes 6 seconds",\$err);
+ $date = DateCalc("12 hours ago","12:30 6Jan90",\$err);
+
+ It even works with business days:
+
+ $date = DateCalc("today","+ 3 business days",\$err);
+
+6. To work with dates in another language.
+
+ &Date_Init("Language=French","DateFormat=non-US");
+ $date = ParseDate("1er decembre 1990");
+
+7. To find a list of dates where a recurring event happens
+ (including quite complex ones).
+
+ # To find the 2nd tuesday of every month
+ @date = ParseRecur("0:1*2:2:0:0:0",$base,$start,$stop);
+
+ # To find the Monday after easter in 1997-1999.
+ @date = ParseRecur("*1997-1999:0:0:0:0:0:0*EASTER,ND1");
+
+NOTE: Some date forms do not work as well in languages other than English,
+but this is not because Date::Manip is incapable of doing so (almost nothing
+in this module is language dependent). It is simply that I do not have the
+correct translation available for some words. If there is a date form that
+works in English but does not work in a language you need, let me know and
+if you can provide me the translation, I will fix Date::Manip.
+
+=head1 SHOULD I USE DATE::MANIP
+
+If you look in CPAN, you'll find that there are a number of Date and Time
+packages. Is Date::Manip the one you should be using? In my opinion, the
+answer is no most of the time. This sounds odd coming from the author of
+the software, but read on.
+
+Date::Manip is written entirely in perl. It's the most powerful of the
+date modules. It's also the biggest and slowest.
+
+Since Date::Manip is written entirely in perl, and depends on no other
+module not in a standard perl distribution, Date::Manip has no dependancies
+to meet. Other modules have dependancies on a C compiler or other perl
+modules. Since it is fairly easy to satisfy these dependancies for
+anyone who is reasonably familiar with perl modules, this is not a
+huge advantage that Date::Manip has.
+
+On the other hand, simpler perl modules tend to be faster than Date::Manip,
+and modules written in C are significantly faster than their perl
+counterparts (at least if they're done right). The TimeDate and
+Time-modules modules are written in perl, but are much simpler (and
+hence, faster) than Date::Manip. The Date::Calc module is written in C
+and is a good module for doing many date calculations much faster than
+Date::Manip. Between these three, most of your common date operations
+can be done.
+
+Date::Manip is certainly the most powerful of the Date modules. To the
+best of my knowledge, it will do everything that any other date module will
+do (not just the ones I listed above), and there are a number of features
+that Date::Manip has that none of the other modules have. Date::Manip is
+the "Swiss Army Knife" of Date modules. I'm trying to build a library
+which can do _EVERY_ conceivable date/time manipulation that you'll run
+into in everyday life.
+
+Although I am working on making Date::Manip faster, it will never be as
+fast as other modules. And before anyone asks, Date::Manip will never
+be translated to C (at least by me). I write C because I have to. I
+write perl because I like to. Date::Manip is something I do because it
+interests me, not something I'm paid for.
+
+Date::Manip is also big. The last time I looked, it's one of the largest
+CPAN modules there is. If you ignore modules like Tk, LWP, etc. which are
+actually packages of modules, it may be the largest. It's true that
+Date::Manip will do almost every date operation you could imagine... but
+you rarely need all that power. I'm working on reducing the footprint of
+Date::Manip, but even at it's slimmest, it'll outweigh the other modules by
+a good bit.
+
+If you are going to be using the module in cases where performance is an
+important factor (started up in a CGI program being run by your web server
+5,000 times a second), you should check out one of the other Date or Time
+modules in CPAN. If you're only doing fairly simple date operations
+(parsing common date formats, finding the difference between two dates,
+etc.), the other modules will almost certainly suffice. If you're doing
+one operation very repetitively (parsing 10,000 dates from a database), you
+are probably better off writing your own functions (perhaps bypassing all
+date modules entirely) designed specifically for your needs.
+
+On the other hand, if you want one solution for all your date needs, don't
+need peak speed, or are trying to do more exotic date operations,
+Date::Manip is for you. Operations on things like business dates, foreign
+language dates, holidays and other recurring events, etc. are available
+more-or-less exclusively in Date::Manip.
+
+=head1 ROUTINES
+
+=over 4
+
+=item ParseDate
+
+ $date = ParseDate(\@args);
+ $date = ParseDate($string);
+ $date = ParseDate(\$string);
+
+This takes an array or a string containing a date and parses it. When the
+date is included as an array (for example, the arguments to a program) the
+array should contain a valid date in the first one or more elements
+(elements after a valid date are ignored). Elements containing a valid
+date are shifted from the array. The largest possible number of elements
+which can be correctly interpreted as a valid date are always used. If a
+string is entered rather than an array, that string is tested for a valid
+date. The string is unmodified, even if passed in by reference.
+
+The real work is done in the ParseDateString routine.
+
+The ParseDate routine is primarily used to handle command line arguments.
+If you have a command where you want to enter a date as a command line
+argument, you can use Date::Manip to make something like the following
+work:
+
+ mycommand -date Dec 10 1997 -arg -arg2
+
+No more reading man pages to find out what date format is required in a
+man page.
+
+Historical note: this is originally why the Date::Manip routines were
+written (though long before they were released as the Date::Manip module).
+I was using a bunch of programs (primarily batch queue managers) where
+dates and times were entered as command line options and I was getting
+highly annoyed at the many different (but not compatible) ways that they
+had to be entered. Date::Manip originally consisted of basically 1 routine
+which I could pass "@ARGV" to and have it remove a date from the beginning.
+
+=item ParseDateString
+
+ $date = ParseDateString($string);
+
+This routine is called by ParseDate, but it may also be called directly
+to save some time (a negligable amount).
+
+NOTE: One of the most frequently asked questions that I have gotten
+is how to parse seconds since the epoch. ParseDateString cannot simply
+parse a number as the seconds since the epoch (it conflicts with some
+ISO-8601 date formats). There are two ways to get this information.
+First, you can do the following:
+
+ $secs = ... # seconds since Jan 1, 1970 00:00:00 GMT
+ $date = &DateCalc("Jan 1, 1970 00:00:00 GMT",$secs);
+
+Second, you can call it directly as:
+
+ $date = &ParseDateString("epoch $secs");
+
+To go backwards, just use the "%s" format of UnixDate:
+
+ $secs = &UnixDate($date,"%s");
+
+A full date actually includes 2 parts: date and time. A time must include
+hours and minutes and can optionally include seconds, fractional seconds,
+an am/pm type string, and a timezone. For example:
+
+ [at] HH:MN [Zone]
+ [at] HH:MN [am] [Zone]
+ [at] HH:MN:SS [am] [Zone]
+ [at] HH:MN:SS.SSSS [am] [Zone]
+ [at] HH am [Zone]
+
+Hours can be written using 1 or 2 digits, but the single digit form may
+only be used when no ambiguity is introduced (i.e. when it is not
+immediately preceded by a digit).
+
+A time is usually entered in 24 hour mode, but 12 hour mode can be used
+as well if AM/PM are entered (AM can be entered as AM or A.M. or other
+variations depending on the language).
+
+Fractional seconds are also supported in parsing but the fractional part is
+discarded (with NO rounding ocurring).
+
+Timezones always appear immediately after the time. A number of different
+forms are supported (see the section TIMEZONEs below).
+
+Incidentally, the time is removed from the date before the date is parsed,
+so the time may appear before or after the date, or between any two parts
+of the date.
+
+Valid date formats include the ISO 8601 formats:
+
+ YYYYMMDDHHMNSSF...
+ YYYYMMDDHHMNSS
+ YYYYMMDDHHMN
+ YYYYMMDDHH
+ YY-MMDDHHMNSSF...
+ YY-MMDDHHMNSS
+ YY-MMDDHHMN
+ YY-MMDDHH
+ YYYYMMDD
+ YYYYMM
+ YYYY
+ YY-MMDD
+ YY-MM
+ YY
+ YYYYwWWD ex. 1965-W02-2
+ YYwWWD
+ YYYYDOY ex. 1965-045
+ YYDOY
+
+In the above list, YYYY and YY signify 4 or 2 digit years, MM, DD, HH, MN, SS
+refer to two digit month, day, hour, minute, and second respectively. F...
+refers to fractional seconds (any number of digits) which will be ignored.
+The last 4 formats can be explained by example: 1965-w02-2 refers to Tuesday
+(day 2) of the 2nd week of 1965. 1965-045 refers to the 45th day of 1965.
+
+In all cases, parts of the date may be separated by dashes "-". If this is
+done, 1 or 2 digit forms of MM, DD, etc. may be used. All dashes are
+optional except for those given in the table above (which MUST be included
+for that format to be correctly parsed). So 19980820, 1998-0820,
+1998-08-20, 1998-8-20, and 199808-20 are all equivalent, but that date may
+NOT be written as 980820 (it must be written as 98-0820).
+
+NOTE: Even though not allowed in the standard, the timezone for an ISO-8601
+date is flexible and may be any of the timezones understood by Date::Manip.
+
+Additional date formats are available which may or may not be common including:
+
+ MM/DD **
+ MM/DD/YY **
+ MM/DD/YYYY **
+
+ mmmDD DDmmm mmmYYYY/DD mmmYYYY
+ mmmDD/YY DDmmmYY DD/YYmmm YYYYmmmDD YYYYmmm
+ mmmDDYYYY DDmmmYYYY DDYYYYmmm YYYY/DDmmm
+
+Where mmm refers to the name of a month. All parts of the date can be
+separated by valid separators (space, "/", or "."). The separator "-" may
+be used as long as it doesn't conflict with an ISO 8601 format, but this
+is discouraged since it is easy to overlook conflicts. For example, the
+format MM/DD/YY is just fine, but MM-DD-YY does not work since it conflicts
+with YY-MM-DD. To be safe, if "-" is used as a separator in a non-ISO
+format, they should be turned into "/" before calling the Date::Manip
+routines. As with ISO 8601 formats, all separators are optional except for
+those given as a "/" in the list above.
+
+** Note that with these formats, Americans tend to write month first, but
+many other countries tend to write day first. The latter behavior can be
+obtained by setting the config variable DateFormat to something other than
+"US" (see CUSTOMIZING DATE::MANIP below).
+
+Date separators are treated very flexibly (they are converted to spaces),
+so the following dates are all equivalent:
+
+ 12/10/1965
+ 12-10 / 1965
+ 12 // 10 -. 1965
+
+In some cases, this may actually be TOO flexible, but no attempt is made to
+trap this.
+
+Years can be entered as 2 or 4 digits, days and months as 1 or 2 digits.
+Both days and months must include 2 digits whenever they are immediately
+adjacent to another numeric part of the date or time. Date separators
+are required if single digit forms of DD or MM are used. If separators
+are not used, the date will either be unparsable or will get parsed
+incorrectly.
+
+Miscellaneous other allowed formats are:
+ which dofw in mmm in YY "first sunday in june 1996 at 14:00" **
+ dofw week num YY "sunday week 22 1995" **
+ which dofw YY "22nd sunday at noon" **
+ dofw which week YY "sunday 22nd week in 1996" **
+ next/last dofw "next friday at noon"
+ next/last week/month "next month"
+ in num days/weeks/months "in 3 weeks at 12:00"
+ num days/weeks/months later "3 weeks later"
+ num days/weeks/months ago "3 weeks ago"
+ dofw in num week "Friday in 2 weeks"
+ in num weeks dofw "in 2 weeks on friday"
+ dofw num week ago "Friday 2 weeks ago"
+ num week ago dofw "2 weeks ago friday"
+ last day in mmm in YY "last day of October"
+ dofw "Friday" (Friday of current week)
+ Nth "12th", "1st" (day of current month)
+ epoch SECS seconds since the epoch (negative values
+ are supported)
+
+** Note that the formats "sunday week 22" and "22nd sunday" give very
+different bahaviors. "sunday week 22" returns the sunday of the 22nd week
+of the year based on how week 1 is defined. ISO 8601 defines week one to
+contain Jan 4, so "sunday week 1" might be the first or second sunday of
+the current year, or the last sunday of the previous year. "22nd sunday"
+gives the actual 22nd time sunday occurs in a given year, regardless of the
+definition of a week.
+
+Note that certain words such as "in", "at", "of", etc. which commonly appear
+in a date or time are ignored. Also, the year is always optional.
+
+In addition, the following strings are recognized:
+ today (exactly now OR today at a given time if a time is specified)
+ now (synonym for today)
+ yesterday (exactly 24 hours ago unless a time is specified)
+ tomorrow (exactly 24 hours from now unless a time is specifed)
+ noon (12:00:00)
+ midnight (00:00:00)
+Other languages have similar (and in some cases additional) strings.
+
+Some things to note:
+
+All strings are case insensitive. "December" and "DEceMBer" both work.
+
+When a part of the date is not given, defaults are used: year defaults
+to current year; hours, minutes, seconds to 00.
+
+The year may be entered as 2 or 4 digits. If entered as 2 digits, it will
+be converted to a 4 digit year. There are several ways to do this based on
+the value of the YYtoYYYY variable (described below). The default behavior
+it to force the 2 digit year to be in the 100 year period CurrYear-89 to
+CurrYear+10. So in 1996, the range is [1907 to 2006], and the 2 digit year
+05 would refer to 2005 but 07 would refer to 1907. See CUSTOMIZING
+DATE::MANIP below for information on YYtoYYYY for other methods.
+
+Dates are always checked to make sure they are valid.
+
+In all of the formats, the day of week ("Friday") can be entered anywhere
+in the date and it will be checked for accuracy. In other words,
+ "Tue Jul 16 1996 13:17:00"
+will work but
+ "Jul 16 1996 Wednesday 13:17:00"
+will not (because Jul 16, 1996 is Tuesday, not Wednesday). Note that
+depending on where the weekday comes, it may give unexpected results when
+used in array context (with ParseDate). For example, the date
+("Jun","25","Sun","1990") would return June 25 of the current year since
+Jun 25, 1990 is not Sunday.
+
+The times "12:00 am", "12:00 pm", and "midnight" are not well defined. For
+good or bad, I use the following convention in Date::Manip:
+ midnight = 12:00am = 00:00:00
+ noon = 12:00pm = 12:00:00
+and the day goes from 00:00:00 to 23:59:59. In other words, midnight is the
+beginning of a day rather than the end of one. The time 24:00:00 is also
+allowed (though it is automatically transformed to 00:00:00 of the following
+day).
+
+The format of the date returned is YYYYMMDDHH:MM:SS. The advantage of this
+time format is that two times can be compared using simple string comparisons
+to find out which is later. Also, it is readily understood by a human.
+Alternate forms can be used if that is more convenient. See Date_Init below
+and the config variable Internal.
+
+NOTE: The format for the date is going to change at some point in the future
+to YYYYMMDDHH:MN:SS+HHMN*FLAGS. In order to maintain compatibility, you
+should use UnixDate to extract information from a date, and Date_Cmp to compare
+two dates. The simple string comparison will only work for dates in the same
+timezone.
+
+=item UnixDate
+
+ @date = UnixDate($date,@format);
+ $date = UnixDate($date,@format);
+
+This takes a date and a list of strings containing formats roughly
+identical to the format strings used by the UNIX date(1) command. Each
+format is parsed and an array of strings corresponding to each format is
+returned.
+
+$date may be any string that can be parsed by ParseDateString.
+
+The format options are:
+
+ Year
+ %y year - 00 to 99
+ %Y year - 0001 to 9999
+ %G year - 0001 to 9999 (see below)
+ %L year - 0001 to 9999 (see below)
+ Month, Week
+ %m month of year - 01 to 12
+ %f month of year - " 1" to "12"
+ %b,%h month abbreviation - Jan to Dec
+ %B month name - January to December
+ %U week of year, Sunday
+ as first day of week - 01 to 53
+ %W week of year, Monday
+ as first day of week - 01 to 53
+ Day
+ %j day of the year - 001 to 366
+ %d day of month - 01 to 31
+
+ %e day of month - " 1" to "31"
+ %v weekday abbreviation - " S"," M"," T"," W","Th"," F","Sa"
+ %a weekday abbreviation - Sun to Sat
+ %A weekday name - Sunday to Saturday
+ %w day of week - 1 (Monday) to 7 (Sunday)
+ %E day of month with suffix - 1st, 2nd, 3rd...
+ Hour
+ %H hour - 00 to 23
+ %k hour - " 0" to "23"
+ %i hour - " 1" to "12"
+ %I hour - 01 to 12
+ %p AM or PM
+ Minute, Second, Timezone
+ %M minute - 00 to 59
+ %S second - 00 to 59
+ %s seconds from 1/1/1970 GMT- negative if before 1/1/1970
+ %o seconds from Jan 1, 1970
+ in the current time zone
+ %Z timezone - "EDT"
+ %z timezone as GMT offset - "+0100"
+ Date, Time
+ %c %a %b %e %H:%M:%S %Y - Fri Apr 28 17:23:15 1995
+ %C,%u %a %b %e %H:%M:%S %z %Y - Fri Apr 28 17:25:57 EDT 1995
+ %g %a, %d %b %Y %H:%M:%S %z - Fri, 28 Apr 1995 17:23:15 EDT
+ %D,%x %m/%d/%y - 04/28/95
+ %l date in ls(1) format
+ %b %e $H:$M - Apr 28 17:23 (if within 6 months)
+ %b %e %Y - Apr 28 1993 (otherwise)
+ %r %I:%M:%S %p - 05:39:55 PM
+ %R %H:%M - 17:40
+ %T,%X %H:%M:%S - 17:40:58
+ %V %m%d%H%M%y - 0428174095
+ %Q %Y%m%d - 19961025
+ %q %Y%m%d%H%M%S - 19961025174058
+ %P %Y%m%d%H%M%S - 1996102517:40:58
+ %F %A, %B %e, %Y - Sunday, January 1, 1996
+ %J %G-W%W-%w - 1997-W02-2
+ %K %Y-%j - 1997-045
+ Other formats
+ %n insert a newline character
+ %t insert a tab character
+ %% insert a `%' character
+ %+ insert a `+' character
+ The following formats are currently unused but may be used in the future:
+ NO 1234567890 !@#$^&*()_|-=\`[];',./~{}:<>?
+ They currently insert the character following the %, but may (and probably
+ will) change in the future as new formats are added.
+
+If a lone percent is the final character in a format, it is ignored.
+
+Note that the ls format (%l) applies to date within the past OR future 6
+months!
+
+The %U, %W, %L, and %G formats are used to support the ISO-8601 format:
+YYYY-wWW-D. In this format, a date is written as a year, the week of
+the year, and the day of the week. Technically, the week may be considered
+to start on any day of the week, but Sunday and Monday are the two most
+common choices, so both are supported.
+
+The %U and %W formats return a week-of-year number from 01 to 53, and
+%L and %G return a 4-digit year corresponding to the week. Most of the
+time, the %L and %G formats returns the same value as the %Y format,
+but there is a problem with days occuring in the first or last week of
+the year.
+
+The ISO-8601 representation of Jan 1, 1993 written in the YYYY-wWWW-D
+format is actually 1992-W53-5. In other words, Jan 1 is treates as being
+in the last week of the preceding year. Depending on the year, days in
+the first week of a year may belong to the previous year, and days in the
+final week of a year may belong to the next year.
+
+The %L and %U formats contains the year and week-of-year values treating
+weeks as starting on Sunday. The %G and %W formats are the year and
+week-of-year values treating weeks as starting on Monday.
+
+%J returns the full ISO-8601 format (%G-W%W-%w).
+
+The formats used in this routine were originally based on date.pl (version
+3.2) by Terry McGonigal, as well as a couple taken from different versions
+of the Solaris date(1) command. Also, several have been added which are
+unique to Date::Manip.
+
+=item ParseDateDelta
+
+ $delta = ParseDateDelta(\@args);
+ $delta = ParseDateDelta($string);
+ $delta = ParseDateDelta(\$string);
+
+This takes an array and shifts a valid delta date (an amount of time)
+from the array. Recognized deltas are of the form:
+ +Yy +Mm +Ww +Dd +Hh +MNmn +Ss
+ examples:
+ +4 hours +3mn -2second
+ + 4 hr 3 minutes -2
+ 4 hour + 3 min -2 s
+ +Y:+M:+W:+D:+H:+MN:+S
+ examples:
+ 0:0:0:0:4:3:-2
+ +4:3:-2
+ mixed format
+ examples:
+ 4 hour 3:-2
+
+A field in the format +Yy is a sign, a number, and a string specifying
+the type of field. The sign is "+", "-", or absent (defaults to the
+next larger element). The valid strings specifying the field type
+are:
+ y: y, yr, year, years
+ m: m, mon, month, months
+ w: w, wk, ws, wks, week, weeks
+ d: d, day, days
+ h: h, hr, hour, hours
+ mn: mn, min, minute, minutes
+ s: s, sec, second, seconds
+
+Also, the "s" string may be omitted. The sign, number, and string may
+all be separated from each other by any number of whitespaces.
+
+In the date, all fields must be given in the order: Y M W D H MN S. Any
+number of them may be omitted provided the rest remain in the correct
+order. In the 2nd (colon) format, from 2 to 7 of the fields may be given.
+For example +D:+H:+MN:+S may be given to specify only four of the fields.
+In any case, both the MN and S field may be present. No spaces may be
+present in the colon format.
+
+Deltas may also be given as a combination of the two formats. For example,
+the following is valid: +Yy +D:+H:+MN:+S. Again, all fields must be given
+in the correct order.
+
+The word "in" may be given (prepended in English) to the delta ("in 5 years")
+and the word "ago" may be given (appended in English) ("6 months ago"). The
+"in" is completely ignored. The "ago" has the affect of reversing all signs
+that appear in front of the components of the delta. I.e. "-12 yr 6 mon ago"
+is identical to "+12yr +6mon" (don't forget that there is an implied minus
+sign in front of the 6 because when no sign is explicitly given, it carries
+the previously entered sign).
+
+One thing is worth noting. The year/month and day/hour/min/sec parts are
+returned in a "normalized" form. That is, the signs are adjusted so as to
+be all positive or all negative. For example, "+ 2 day - 2hour" does not
+return "0:0:0:2:-2:0:0". It returns "+0:0:0:1:22:0:0" (1 day 22 hours
+which is equivalent). I find (and I think most others agree) that this is
+a more useful form.
+
+Since the year/month and day/hour/min/sec parts must be normalized
+separately there is the possibility that the sign of the two parts will be
+different. So, the delta "+ 2years -10 months - 2 days + 2 hours" produces
+the delta "+1:2:-0:1:22:0:0".
+
+It is possible to include a sign for all elements that is output. See the
+configuration variable DeltaSigns below.
+
+NOTE: The internal format of the delta changed in version 5.30 from
+Y:M:D:H:MN:S to Y:M:W:D:H:MN:S . Also, it is going to change again at some
+point in the future to Y:M:W:D:H:MN:S*FLAGS . Use the routine Delta_Format
+to extract information rather than parsing it yourself.
+
+=item Delta_Format
+
+ @str = Delta_Format($delta,$dec,@format);
+ $str = Delta_Format($delta,$dec,@format);
+
+This is similar to the UnixDate routine except that it extracts information
+from a delta. Unlike the UnixDate routine, most of the formats are 2
+characters instead of 1.
+
+Formats currently understood are:
+
+ %Xv : the value of the field named X
+ %Xd : the value of the field X, and all smaller fields, expressed in
+ units of X
+ %Xh : the value of field X, and all larger fields, expressed in units
+ of X
+ %Xt : the value of all fields expressed in units of X
+
+ X is one of y,M,w,d,h,m,s (case sensitive).
+
+ %% : returns a "%"
+
+NOTE: Delta_Format only understands "exact" relationships, so for any delta
+that has a month component, there can be no mixing of the Y/M and
+W/D/H/MN/S segments. In other words, the delta 1:6:1:1:1:1:1 has a month
+component, so asking for the total number of years (using the %yd format)
+will return 1.5 (which is what 1 year 6 months is). For deltas which have
+NO month component, the relationship between years and days is known
+(365.25 is used) and all formats work as expected (except that formats with
+X equal to "M" are not allowed).
+
+So, the format "%hd" means the values of H, MN, and S expressed in hours.
+So for the delta "0:0:0:0:2:30:0", this format returns 2.5. Similarly, the
+format "%yd" means the value (in years) of both the Y and M fields, or,
+if the month component is 0, it uses Y, W, D, H, MN, S.
+
+The format "%hh" returns the value of W, D, and H expressed in hours if
+the month component is non-zero, or Y, W, D, H if the month component is 0.
+
+If $dec is non-zero, the %Xd and %Xt values are formatted to contain $dec
+decimal places.
+
+=item ParseRecur
+
+ $recur = ParseRecur($string [,$base,$date0,$date1,$flags]);
+ @dates = ParseRecur($string [,$base,$date0,$date1,$flags]);
+
+A recurrence refers to a recurring event. A fully specified recurrence
+requires (in most cases) 4 items: a recur description (describing the
+frequency of the event), a base date (a date when the event occurred and
+which other occurrences are based on), and a start and end date. There may
+be one or more flags included which modify the behavior of the recur
+description. The fully specified recurrence is written as:
+
+ recur*flags*base*date0*date1
+
+Here, base, date0, and date1 are any strings (which must not contain any
+asterixes) which can be parsed by ParseDate. flags is a comma separated
+list of flags (described below), and recur is a string describing a
+recurring event.
+
+If called in scalar context, it returns a string containing a fully
+specified recurrence (or as much of it as can be determined with
+unspecified fields left blank). In list context, it returns a list of all
+dates referred to by a recurrence if enough information is given in the
+recurrence. All dates returned are in the range:
+
+ date0 <= date < date1
+
+The argument $string can contain any of the parts of a full recurrence.
+For example:
+
+ recur
+ recur*flags
+ recur**base*date0*date1
+
+The only part which is required is the recur description. Any values
+contained in $string are overridden or modified by values passed in as
+parameters to ParseRecur.
+
+A recur description is a string of the format Y:M:W:D:H:MN:S . Exactly one
+of the colons may optionally be replaced by an asterisk, or an asterisk may
+be prepended to the string.
+
+Any value "N" to the left of the asterisk refers to the "Nth" one. Any
+value to the right of the asterisk refers to a value as it appears on a
+calendar/clock. Values to the right can be listed a single values, ranges
+(2 numbers separated by a dash "-"), or a comma separated list of values
+or ranges. In a few cases, negative values are appropriate.
+
+This is best illustrated by example.
+
+ 0:0:2:1:0:0:0 every 2 weeks and 1 day
+ 0:0:0:0:5:30:0 every 5 hours and 30 minutes
+ 0:0:0:2*12:30:0 every 2 days at 12:30 (each day)
+ 3*1:0:2:12:0:0 every 3 years on Jan 2 at noon
+ 0:1*0:2:12,14:0:0 2nd of every month at 12:00 and 14:00
+ 1:0:0*45:0:0:0 45th day of every year
+ 0:1*4:2:0:0:0 4th tuesday (day 2) of every month
+ 0:1*-1:2:0:0:0 last tuesday of every month
+ 0:1:0*-2:0:0:0 2nd to last day of every month
+ 0:0:3*2:0:0:0 every 3rd tuesday (every 3 weeks on 2nd day of week)
+ 1:0*12:2:0:0:0 tuesday of the 12th week of each year
+ *1990-1995:12:0:1:0:0:0
+ Dec 1 in 1990 through 1995
+
+ 0:1*2:0:0:0:0 the start of the 2nd week of every month (see Note 2)
+ 1*1:2:0:0:0:0 the start of the 2nd week in January each year (Note 2)
+
+I realize that this looks a bit cryptic, but after a discussion on the
+CALENDAR mailing list, it looked like there was no concise, flexible
+notation for handling recurring events. ISO 8601 notations were very bulky
+and lacked the flexibility I wanted. As a result, I developed this
+notation (based on crontab formats, but with much more flexibility) which
+fits in well with this module, and which is able to express every type of
+recurring event I could think of.
+
+NOTE: If a recurrence has a date0 and date1 in it AND a date0 and date1
+are passed in to the function, both sets of criteria apply. If flags are
+passed in, they override any flags in the recurrence UNLESS the flags
+passed in start with a plus (+) character in which case they are appended
+to the flags in the recurrence.
+
+NOTE: There is no way to express the following with a single recurrence:
+
+ every day at 12:30 and 1:00
+
+You have to use two recurrences to do this.
+
+NOTE: A recurrence specifying the week of a month is NOT clearly defined
+in common usage. What is the 1st week in a month? The behavior (with
+respect to this module) is well defined (using the FDn and FIn flags
+below), but in common usage, this is so ambiguous that this form should
+probably never be used. It is included here solely for the sake of
+completeness.
+
+NOTE: Depending on whether M and W are 0 or nonzero, D means different
+things. This is given in the following table.
+
+ M W D (when right of an asterisk) refers to
+ - - -------------------------------------------
+ 0 0 day of year (1-366)
+ M 0 day of month (1-31)
+ 0 W day of week (1-7), W refers to the week of year
+ M W the Wth (1-5 or -1 to -5) occurrence of Dth (1-7) day of week in month
+
+NOTE: Base dates are only used with some types of recurrences. For example,
+
+ 0:0:3*2:0:0:0 every 3rd tuesday
+
+requires a base date. If a base date is specified which doesn't match the
+criteria (for example, if a base date falling on Monday were passed in with
+this recurrence), the base date is moved forward to the first relevant date.
+
+Other dates do not require a base date. For example:
+
+ 0:0*3:2:0:0:0 third tuesday of every month
+
+A recurrence written in the above format does NOT provide default values
+for base, date0, or date1. They must be specified in order to get a list
+of dates.
+
+A base date is not used entirely. It is only used to provide the parts
+necessary for the left part of a recurrence. For example, the recurrence:
+
+ 1:3*0:4:0:0:0 every 1 year, 3 months on the 4th day of the month
+
+would only use the year and month of the base date.
+
+
+There are a small handful of English strings which can be parsed in place
+of a numerical recur description. These include:
+
+ every 2nd day [in 1997]
+ every 2nd day in June [1997]
+ 2nd day of every month [in 1997]
+ 2nd tuesday of every month [in 1997]
+ last tuesday of every month [in 1997]
+ every tuesday [in 1997]
+ every 2nd tuesday [in 1997]
+ every 2nd tuesday in June [1997]
+
+Each of these set base, date0, and date1 to a default value (the current
+year with Jan 1 being the base date is the default if the year and month
+are missing).
+
+The following flags (case insensitive) are understood:
+
+ MWn : n is 1-7. The first week of the month is the week
+ which contains the first occurrence of day n (1=Monday).
+ MW2 means that the first week contains the first Tuesday
+ of the month.
+ MDn : n is 1-7. The first week of the month contains the
+ actual date (1st through 7th). MD4 means that the first
+ week of the month contains the 4th of that month.
+
+ PDn : n is 1-7. Means the previous day n not counting today
+ PTn : n is 1-7. Means the previous day n counting today
+ NDn : n is 1-7. Means the next day n not counting today
+ NTn : n is 1-7. Means the next day n counting today
+
+ FDn : n is any number. Means step forward n days.
+ BDn : n is any number. Means step backward n days.
+ FWn : n is any number. Means step forward n workdays.
+ BWn : n is any number. Means step backward n workdays.
+
+ CWD : the closest work day (using the TomorrowFirst config variable).
+ CWN : the closest work day (looking forward first).
+ CWP : the closest work day (looking backward first).
+
+ NWD : next work day counting today
+ PWD : previous work day counting today
+ DWD : next/previous work day (TomorrowFirst config) counting today
+
+ EASTER: select easter for this year (the M, W, D fields are ignored
+ in the recur).
+
+NOTE: only one of MWn and MDn can be set. If both are set, only the
+last one is used. The default is MW7 (i.e. the first week contains
+the first Sunday).
+
+CWD, CWN, and CWP will usually return the same value, but if you are
+starting at the middle day of a 3-day weekend (for example), it will return
+either the first work day of the following week, or the last work day of
+the previous week depending on whether it looks forward or backward first.
+
+All flags are applied AFTER the recurrence dates are calculated, and they
+may move a date outside of the date0 to date1 range. No check is made for
+this.
+
+The workday flags do not act exactly the same as a business mode calculation.
+For example, a date that is Saturday with a FW1 steps forward to the first
+workday (i.e. Monday).
+
+=item Date_Cmp
+
+ $flag = Date_Cmp($date1,$date2);
+
+This takes two dates and compares them. Almost all dates can be compared
+using the perl "cmp" command. The only time this will not work is when
+comparing dates in different timezones. This routine will take that into
+account.
+
+NOTE: This routine currently does little more than use "cmp", but once
+the internal format for storing dates is in place (where timezone information
+is kept as part of the date), this routine will become more important. You
+should use this routine in prepartation for that version.
+
+=item DateCalc
+
+ $d = DateCalc($d1,$d2 [,\$err] [,$mode]);
+
+This takes two dates, deltas, or one of each and performs the appropriate
+calculation with them. Dates must be a string that can be parsed by
+&ParseDateString. Deltas must be a string that can be parsed by
+&ParseDateDelta. Two deltas add together to form a third delta. A date
+and a delta returns a 2nd date. Two dates return a delta (the difference
+between the two dates).
+
+Note that in many cases, it is somewhat ambiguous what the delta actually
+refers to. Although it is ALWAYS known how many months in a year, hours in
+a day, etc., it is NOT known how many days form a month. As a result, the
+part of the delta containing month/year and the part with sec/min/hr/day
+must be treated separately. For example, "Mar 31, 12:00:00" plus a delta
+of 1month 2days would yield "May 2 12:00:00". The year/month is first
+handled while keeping the same date. Mar 31 plus one month is Apr 31 (but
+since Apr only has 30 days, it becomes Apr 30). Apr 30 + 2 days is May 2.
+As a result, in the case where two dates are entered, the resulting delta
+can take on two different forms. By default ($mode=0), an absolutely
+correct delta (ignoring daylight savings time) is returned in days, hours,
+minutes, and seconds.
+
+If $mode is 1, the math is done using an approximate mode where a delta is
+returned using years and months as well. The year and month part is
+calculated first followed by the rest. For example, the two dates "Mar 12
+1995" and "Apr 13 1995" would have an exact delta of "31 days" but in the
+approximate mode, it would be returned as "1 month 1 day". Also, "Mar 31"
+and "Apr 30" would have deltas of "30 days" or "1 month" (since Apr 31
+doesn't exist, it drops down to Apr 30). Approximate mode is a more human
+way of looking at things (you'd say 1 month and 2 days more often then 33
+days), but it is less meaningful in terms of absolute time. In approximate
+mode $d1 and $d2 must be dates. If either or both is a delta, the
+calculation is done in exact mode.
+
+If $mode is 2, a business mode is used. That is, the calculation is done
+using business days, ignoring holidays, weekends, etc. In order to
+correctly use this mode, a config file must exist which contains the
+section defining holidays (see documentation on the config file below).
+The config file can also define the work week and the hours of the work
+day, so it is possible to have different config files for different
+businesses.
+
+For example, if a config file defines the workday as 08:00 to 18:00, a
+work week consisting of Mon-Sat, and the standard (American) holidays, then
+from Tuesday at 12:00 to the following Monday at 14:00 is 5 days and 2
+hours. If the "end" of the day is reached in a calculation, it
+automatically switches to the next day. So, Tuesday at 12:00 plus 6 hours
+is Wednesday at 08:00 (provided Wed is not a holiday). Also, a date that
+is not during a workday automatically becomes the start of the next
+workday. So, Sunday 12:00 and Monday at 03:00 both automatically becomes
+Monday at 08:00 (provided Monday is not a holiday). In business mode, any
+combination of date and delta may be entered, but a delta should not
+contain a year or month field (weeks are fine though).
+
+See below for some additional comments about business mode calculations.
+
+Note that a business week is treated the same as an exact week (i.e. from
+Tuesday to Tuesday, regardless of holidays). Because this means that the
+relationship between days and weeks is NOT unambiguous, when a delta is
+produced from two dates, it will be in terms of d/h/mn/s (i.e. no week
+field).
+
+If $mode is 3 (which only applies when two dates are passed in), an exact
+business mode is used. In this case, it returns a delta as an exact number
+of business days/hours/etc. between the two. Weeks, months, and years are
+ignored.
+
+Any other non-nil value of $mode is treated as $mode=1 (approximate mode).
+
+The mode can be automatically set in the dates/deltas passed by including a
+key word somewhere in it. For example, in English, if the word
+"approximately" is found in either of the date/delta arguments, approximate
+mode is forced. Likewise, if the word "business" or "exactly" appears,
+business/exact mode is forced (and $mode is ignored). So, the two
+following are equivalent:
+
+ $date = DateCalc("today","+ 2 business days",\$err);
+ $date = DateCalc("today","+ 2 days",\$err,2);
+
+Note that if the keyword method is used instead of passing in $mode, it is
+important that the keyword actually appear in the argument passed in to
+DateCalc. The following will NOT work:
+
+ $delta = ParseDateDelta("+ 2 business days");
+ $today = ParseDate("today");
+ $date = DateCalc($today,$delta,\$err);
+
+because the mode keyword is removed from a date/delta by the parse routines,
+and the mode is reset each time a parse routine is called. Since DateCalc
+parses both of its arguments, whatever mode was previously set is ignored.
+
+If \$err is passed in, it is set to:
+ 1 is returned if $d1 is not a delta or date
+ 2 is returned if $d2 is not a delta or date
+ 3 is returned if the date is outside the years 1000 to 9999
+This argument is optional, but if included, it must come before $mode.
+
+Nothing is returned if an error occurs.
+
+When a delta is returned, the signs such that it is strictly positive or
+strictly negative ("1 day - 2 hours" would never be returned for example).
+The only time when this cannot be enforced is when two deltas with a
+year/month component are entered. In this case, only the signs on the
+day/hour/min/sec part are standardized.
+
+=item Date_SetTime
+
+ $date = Date_SetTime($date,$hr,$min,$sec);
+ $date = Date_SetTime($date,$time);
+
+This takes a date (any string that may be parsed by ParseDateString) and
+sets the time in that date. For example, one way to get the time for 7:30
+tomorrow would be to use the lines:
+
+ $date = ParseDate("tomorrow");
+ $date = Date_SetTime($date,"7:30");
+
+Note that in this routine (as well as the other routines below which use
+a time argument), no real parsing is done on the times. As a result,
+
+ $date = Date_SetTime($date,"13:30");
+
+works, but
+
+ $date = Date_SetTime($date,"1:30 PM");
+
+doesn't.
+
+=item Date_SetDateField
+
+ $date = Date_SetDateField($date,$field,$val [,$nocheck]);
+
+This takes a date and sets one of it's fields to a new value. $field is
+any of the strings "y", "m", "d", "h", "mn", "s" (case insensitive) and
+$val is the new value.
+
+If $nocheck is non-zero, no check is made as to the validity of the date.
+
+=item Date_GetPrev
+
+ $date = Date_GetPrev($date,$dow, $curr [,$hr,$min,$sec]);
+ $date = Date_GetPrev($date,$dow, $curr [,$time]);
+ $date = Date_GetPrev($date,undef,$curr,$hr,$min,$sec);
+ $date = Date_GetPrev($date,undef,$curr,$time);
+
+This takes a date (any string that may be parsed by ParseDateString) and finds
+the previous occurrence of either a day of the week, or a certain time of day.
+
+If $dow is defined, the previous occurrence of the day of week is returned.
+$dow may either be a string (such as "Fri" or "Friday") or a number
+(between 1 and 7). The date of the previous $dow is returned.
+
+If $date falls on the day of week given by $dow, the date returned depends
+on $curr. If $curr is 0, the date returned is a week before $date. If
+$curr is 1, the date returned is the same as $date. If $curr is 2, the date
+returned (including the time information) is required to be before $date.
+
+If a time is passed in (either as separate hours, minutes, seconds or as a
+time in HH:MM:SS or HH:MM format), the time on this date is set to it. The
+following examples should illustrate the use of Date_GetPrev:
+
+ date dow curr time returns
+ Fri Nov 22 18:15:00 Thu any 12:30 Thu Nov 21 12:30:00
+ Fri Nov 22 18:15:00 Fri 0 12:30 Fri Nov 15 12:30:00
+ Fri Nov 22 18:15:00 Fri 1/2 12:30 Fri Nov 22 12:30:00
+
+ Fri Nov 22 18:15:00 Fri 1 18:30 Fri Nov 22 18:30:00
+ Fri Nov 22 18:15:00 Fri 2 18:30 Fri Nov 15 18:30:00
+
+If $dow is undefined, then a time must be entered, and the date returned is
+the previous occurrence of this time. If $curr is non-zero, the current
+time is returned if it matches the criteria passed in. In other words, the
+time returned is the last time that a digital clock (in 24 hour mode) would
+have displayed the time you passed in. If you define hours, minutes and
+seconds default to 0 and you might jump back as much as an entire day. If
+hours are undefined, you are looking for the last time the minutes/seconds
+appeared on the digital clock, so at most, the time will jump back one hour.
+
+ date curr hr min sec returns
+ Nov 22 18:15:00 0/1 18 undef undef Nov 22 18:00:00
+ Nov 22 18:15:00 0/1 18 30 0 Nov 21 18:30:00
+ Nov 22 18:15:00 0 18 15 undef Nov 21 18:15:00
+ Nov 22 18:15:00 1 18 15 undef Nov 22 18:15:00
+ Nov 22 18:15:00 0 undef 15 undef Nov 22 17:15:00
+ Nov 22 18:15:00 1 undef 15 undef Nov 22 18:15:00
+
+=item Date_GetNext
+
+ $date = Date_GetNext($date,$dow, $curr [,$hr,$min,$sec]);
+ $date = Date_GetNext($date,$dow, $curr [,$time]);
+ $date = Date_GetNext($date,undef,$curr,$hr,$min,$sec);
+ $date = Date_GetNext($date,undef,$curr,$time);
+
+Similar to Date_GetPrev.
+
+=item Date_IsHoliday
+
+ $name = Date_IsHoliday($date);
+
+This returns undef if $date is not a holiday, or a string containing the
+name of the holiday otherwise. An empty string is returned for an unnamed
+holiday.
+
+=item Events_List
+
+ $ref = Events_List($date);
+ $ref = Events_List($date ,0 [,$flag]);
+ $ref = Events_List($date0,$date1 [,$flag]);
+
+This returns a list of events. Events are defined in the Events section
+of the config file (discussed below).
+
+In the first form (a single argument), $date is any string containing a
+date. A list of events active at that precise time will be returned.
+The format is similar to when $flag=0, except only a single time will
+be returned.
+
+In all other cases, a range of times will be used. If the 2nd argument
+evaluates to 0, the range of times will be the 24 hour period from
+midnight to midnight containing $date. Otherwise, the range is given
+by the two dates.
+
+The value of $flag determines the format of the information that is
+returned.
+
+With $flag=0, the events are returned as a reference to a list of the form:
+
+ [ date, [ list_of_events ], date, [ list_of_events ], ... ]
+
+For example, if the following events are defined (using the syntax
+discussed below in the description of the Event section of the config
+file):
+
+ 2000-01-01 ; 2000-03-21 = Winter
+ 2000-03-22 ; 2000-06-21 = Spring
+ 2000-02-01 = Event1
+ 2000-05-01 = Event2
+ 2000-04-01-12:00:00 = Event3
+
+might result in the following output:
+
+ &Events_List("2000-04-01")
+ => [ 2000040100:00:00, [ Spring ] ]
+
+ &Events_List("2000-04-01 12:30");
+ => [ 2000040112:30:00, [ Spring, Event3 ] ]
+
+ &Events_List("2000-04-01",0);
+ => [ 2000040100:00:00, [ Spring ],
+ 2000040112:00:00, [ Spring, Event3 ],
+ 2000040113:00:00, [ Spring ] ]
+
+ &Events_List("2000-03-15","2000-04-10");
+ => [ 2000031500:00:00, [ Winter ],
+ 2000032200:00:00, [ Spring ]
+ 2000040112:00:00, [ Spring, Event3 ]
+ 2000040113:00:00, [ Spring ] ]
+
+Much more complicated events can be defined using recurrences.
+
+When $flag is non-zero, the format of the output is changed. If $flag
+is 1, then a tally of the amount of time given to each event is returned.
+Time for which two or more events apply is counted for both.
+
+ &Events_List("2000-03-15","2000-04-10",1);
+ => { Winter => +0:0:1:0:0:0:0,
+ Spring => +0:0:2:5:0:0:0,
+ Event3 => +0:0:0:0:1:0:0 }
+
+When $flag is 2, a more complex tally with no event counted twice is
+returned.
+
+ &Events_List("2000-03-15","2000-04-10",2);
+ => { Winter => +0:0:1:0:0:0:0,
+ Spring => +0:0:2:4:23:0:0,
+ Event3+Spring => +0:0:0:0:1:0:0 }
+
+The hash contains one element for each combination of events.
+
+=item Date_DayOfWeek
+
+ $day = Date_DayOfWeek($m,$d,$y);
+
+Returns the day of the week (1 for Monday, 7 for Sunday).
+
+All arguments must be numeric.
+
+=item Date_SecsSince1970
+
+ $secs = Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
+
+Returns the number of seconds since Jan 1, 1970 00:00 (negative if date is
+earlier).
+
+All arguments must be numeric.
+
+=item Date_SecsSince1970GMT
+
+ $secs = Date_SecsSince1970GMT($m,$d,$y,$h,$mn,$s);
+
+Returns the number of seconds since Jan 1, 1970 00:00 GMT (negative if date
+is earlier). If CurrTZ is "IGNORE", the number will be identical to
+Date_SecsSince1970 (i.e. the date given will be treated as being in GMT).
+
+All arguments must be numeric.
+
+=item Date_DaysSince1BC
+
+ $days = Date_DaysSince1BC($m,$d,$y);
+
+Returns the number of days since Dec 31, 1BC. This includes the year 0000.
+
+All arguments must be numeric.
+
+=item Date_DayOfYear
+
+ $day = Date_DayOfYear($m,$d,$y);
+
+Returns the day of the year (001 to 366)
+
+All arguments must be numeric.
+
+=item Date_NthDayOfYear
+
+ ($y,$m,$d,$h,$mn,$s) = Date_NthDayOfYear($y,$n);
+
+Returns the year, month, day, hour, minutes, and decimal seconds given
+a floating point day of the year.
+
+All arguments must be numeric. $n must be greater than or equal to 1
+and less than 366 on non-leap years and 367 on leap years.
+
+NOTE: When $n is a decimal number, the results are non-intuitive perhaps.
+Day 1 is Jan 01 00:00. Day 2 is Jan 02 00:00. Intuitively, you
+might think of day 1.5 as being 1.5 days after Jan 01 00:00, but this
+would mean that Day 1.5 was Jan 02 12:00 (which is later than Day 2).
+The best way to think of this function is a timeline starting at 1 and
+ending at 366 (in a non-leap year). In terms of a delta, think of $n
+as the number of days after Dec 31 00:00 of the previous year.
+
+=item Date_DaysInYear
+
+ $days = Date_DaysInYear($y);
+
+Returns the number of days in the year (365 or 366)
+
+=item Date_DaysInMonth
+
+ $days = Date_DaysInMonth($m,$y);
+
+Returns the number of days in the month.
+
+=item Date_WeekOfYear
+
+ $wkno = Date_WeekOfYear($m,$d,$y,$first);
+
+Figure out week number. $first is the first day of the week which is
+usually 1 (Monday) or 7 (Sunday), but could be any number between 1 and 7
+in practice.
+
+All arguments must be numeric.
+
+NOTE: This routine should only be called in rare cases. Use UnixDate with
+the %W, %U, %J, %L formats instead. This routine returns a week between 0
+and 53 which must then be "fixed" to get into the ISO-8601 weeks from 1 to
+53. A date which returns a week of 0 actually belongs to the last week of
+the previous year. A date which returns a week of 53 may belong to the
+first week of the next year.
+
+=item Date_LeapYear
+
+ $flag = Date_LeapYear($y);
+
+Returns 1 if the argument is a leap year
+Written by David Muir Sharnoff <muir@idiom.com>
+
+=item Date_DaySuffix
+
+ $day = Date_DaySuffix($d);
+
+Add `st', `nd', `rd', `th' to a date (ie 1st, 22nd, 29th). Works for
+international dates.
+
+=item Date_TimeZone
+
+ $tz = Date_TimeZone;
+
+This determines and returns the local timezone. If it is unable to determine
+the local timezone, the following error occurs:
+
+ ERROR: Date::Manip unable to determine TimeZone.
+
+See The TIMEZONES section below for more information.
+
+=item Date_ConvTZ
+
+ $date = Date_ConvTZ($date);
+ $date = Date_ConvTZ($date,$from);
+ $date = Date_ConvTZ($date,"",$to);
+ $date = Date_ConvTZ($date,$from,$to);
+
+This converts a date (which MUST be in the format returned by ParseDate)
+from one timezone to another.
+
+If it is called with no arguments, the date is converted from the local
+timezone to the timezone specified by the config variable ConvTZ (see
+documentation on ConvTZ below). If ConvTZ is set to "IGNORE", no
+conversion is done.
+
+If called with $from but no $to, the timezone is converted from the
+timezone in $from to ConvTZ (of TZ if ConvTZ is not set). Again, no
+conversion is done if ConvTZ is set to "IGNORE".
+
+If called with $to but no $from, $from defaults to ConvTZ (if set) or the
+local timezone otherwise. Although this does not seem immediately obvious,
+it actually makes sense. By default, all dates that are parsed are
+converted to ConvTZ, so most of the dates being worked with will be stored
+in that timezone.
+
+If Date_ConvTZ is called with both $from and $to, the date is converted
+from the timezone $from to $to.
+
+NOTE: As in all other cases, the $date returned from Date_ConvTZ has no
+timezone information included as part of it, so calling UnixDate with the
+"%z" format will return the timezone that Date::Manip is working in
+(usually the local timezone).
+
+Example: To convert 2/2/96 noon PST to CST (regardless of what timezone
+you are in, do the following:
+
+ $date = ParseDate("2/2/96 noon");
+ $date = Date_ConvTZ($date,"PST","CST");
+
+Both timezones MUST be in one of the formats listed below in the section
+TIMEZONES.
+
+=item Date_Init
+
+ &Date_Init();
+ &Date_Init("VAR=VAL","VAR=VAL",...);
+ @list = Date_Init();
+ @list = Date_Init("VAR=VAL","VAR=VAL",...);
+
+Normally, it is not necessary to explicitly call Date_Init. The first
+time any of the other routines are called, Date_Init will be called to set
+everything up. If for some reason you want to change the configuration of
+Date::Manip, you can pass the appropriate string or strings into Date_Init
+to reinitialize things.
+
+The strings to pass in are of the form "VAR=VAL". Any number may be
+included and they can come in any order. VAR may be any configuration
+variable. A list of all configuration variables is given in the section
+CUSTOMIZING DATE::MANIP below. VAL is any allowed value for that variable.
+For example, to switch from English to French and use non-US format (so
+that 12/10 is Oct 12), do the following:
+
+ &Date_Init("Language=French","DateFormat=non-US");
+
+If Date_Init is called in list context, it will return a list of all
+config variables and their values suitable for passing in to Date_Init
+to return Date::Manip to the current state. The only possible problem is
+that by default, holidays will not be erased, so you may need to prepend
+the "EraseHolidays=1" element to the list.
+
+=item Date_IsWorkDay
+
+ $flag = Date_IsWorkDay($date [,$flag]);
+
+This returns 1 if $date is a work day. If $flag is non-zero, the time is
+checked to see if it falls within work hours. It returns an empty string
+if $date is not valid.
+
+=item Date_NextWorkDay
+
+ $date = Date_NextWorkDay($date,$off [,$time]);
+
+Finds the day $off work days from now. If $time is passed in, we must also
+take into account the time of day.
+
+If $time is not passed in, day 0 is today (if today is a workday) or the
+next work day if it isn't. In any case, the time of day is unaffected.
+
+If $time is passed in, day 0 is now (if now is part of a workday) or the
+start of the very next work day.
+
+=item Date_PrevWorkDay
+
+ $date = Date_PrevWorkDay($date,$off [,$time]);
+
+Similar to Date_NextWorkDay.
+
+=item Date_NearestWorkDay
+
+ $date = Date_NearestWorkDay($date [,$tomorrowfirst]);
+
+This looks for the work day nearest to $date. If $date is a work day, it
+is returned. Otherwise, it will look forward or backwards in time 1 day
+at a time until a work day is found. If $tomorrowfirst is non-zero (or if
+it is omitted and the config variable TomorrowFirst is non-zero), we look
+to the future first. Otherwise, we look in the past first. In other words,
+in a normal week, if $date is Wednesday, $date is returned. If $date is
+Saturday, Friday is returned. If $date is Sunday, Monday is returned. If
+Wednesday is a holiday, Thursday is returned if $tomorrowfirst is non-nil
+or Tuesday otherwise.
+
+=item DateManipVersion
+
+ $version = DateManipVersion;
+
+Returns the version of Date::Manip.
+
+=back
+
+=head1 TIMEZONES
+
+The following timezone names are currently understood (and can be used in
+parsing dates). These are zones defined in RFC 822.
+
+ Universal: GMT, UT
+ US zones : EST, EDT, CST, CDT, MST, MDT, PST, PDT
+ Military : A to Z (except J)
+ Other : +HHMM or -HHMM
+ ISO 8601 : +HH:MM, +HH, -HH:MM, -HH
+
+In addition, the following timezone abbreviations are also accepted. In a
+few cases, the same abbreviation is used for two different timezones (for
+example, NST stands for Newfoundland Standard -0330 and North Sumatra +0630).
+In these cases, only 1 of the two is available. The one preceded by a "#"
+sign is NOT available but is documented here for completeness. This list of
+zones comes in part from the Time::Zone module by Graham Barr, David Muir
+Sharnoff, and Paul Foley (with several additions by myself).
+
+ IDLW -1200 International Date Line West
+ NT -1100 Nome
+ HST -1000 Hawaii Standard
+ CAT -1000 Central Alaska
+ AHST -1000 Alaska-Hawaii Standard
+ AKST -0900 Alaska Standard
+ YST -0900 Yukon Standard
+ HDT -0900 Hawaii Daylight
+ AKDT -0800 Alaska Daylight
+ YDT -0800 Yukon Daylight
+ PST -0800 Pacific Standard
+ PDT -0700 Pacific Daylight
+ MST -0700 Mountain Standard
+ MDT -0600 Mountain Daylight
+ CST -0600 Central Standard
+ CDT -0500 Central Daylight
+ EST -0500 Eastern Standard
+ ACT -0500 Brazil, Acre
+ SAT -0400 Chile
+ BOT -0400 Bolivia
+ EDT -0400 Eastern Daylight
+ AST -0400 Atlantic Standard
+ AMT -0400 Brazil, Amazon
+ ACST -0400 Brazil, Acre Daylight
+ #NST -0330 Newfoundland Standard nst=North Sumatra +0630
+ NFT -0330 Newfoundland
+ #GST -0300 Greenland Standard gst=Guam Standard +1000
+ #BST -0300 Brazil Standard bst=British Summer +0100
+ BRST -0300 Brazil Standard
+ BRT -0300 Brazil Standard
+ AMST -0300 Brazil, Amazon Daylight
+ ADT -0300 Atlantic Daylight
+ ART -0300 Argentina
+ NDT -0230 Newfoundland Daylight
+ AT -0200 Azores
+ BRST -0200 Brazil Daylight (official time)
+ FNT -0200 Brazil, Fernando de Noronha
+ WAT -0100 West Africa
+ FNST -0100 Brazil, Fernando de Noronha Daylight
+ GMT +0000 Greenwich Mean
+ UT +0000 Universal (Coordinated)
+ UTC +0000 Universal (Coordinated)
+ WET +0000 Western European
+ CET +0100 Central European
+ FWT +0100 French Winter
+ MET +0100 Middle European
+ MEZ +0100 Middle European
+ MEWT +0100 Middle European Winter
+ SWT +0100 Swedish Winter
+ BST +0100 British Summer bst=Brazil standard -0300
+ GB +0100 GMT with daylight savings
+ WEST +0000 Western European Daylight
+ CEST +0200 Central European Summer
+ EET +0200 Eastern Europe, USSR Zone 1
+ FST +0200 French Summer
+ MEST +0200 Middle European Summer
+ MESZ +0200 Middle European Summer
+ METDST +0200 An alias for MEST used by HP-UX
+ SAST +0200 South African Standard
+ SST +0200 Swedish Summer sst=South Sumatra +0700
+ EEST +0300 Eastern Europe Summer
+ BT +0300 Baghdad, USSR Zone 2
+ MSK +0300 Moscow
+ EAT +0300 East Africa
+ IT +0330 Iran
+ ZP4 +0400 USSR Zone 3
+ MSD +0300 Moscow Daylight
+ ZP5 +0500 USSR Zone 4
+ IST +0530 Indian Standard
+ ZP6 +0600 USSR Zone 5
+ NOVST +0600 Novosibirsk time zone, Russia
+ NST +0630 North Sumatra nst=Newfoundland Std -0330
+ #SST +0700 South Sumatra, USSR Zone 6 sst=Swedish Summer +0200
+ JAVT +0700 Java
+ CCT +0800 China Coast, USSR Zone 7
+ AWST +0800 Australian Western Standard
+ WST +0800 West Australian Standard
+ PHT +0800 Asia Manila
+ JST +0900 Japan Standard, USSR Zone 8
+ ROK +0900 Republic of Korea
+ ACST +0930 Australian Central Standard
+ CAST +0930 Central Australian Standard
+ AEST +1000 Australian Eastern Standard
+ EAST +1000 Eastern Australian Standard
+ GST +1000 Guam Standard, USSR Zone 9 gst=Greenland Std -0300
+ ACDT +1030 Australian Central Daylight
+ CADT +1030 Central Australian Daylight
+ AEDT +1100 Australian Eastern Daylight
+ EADT +1100 Eastern Australian Daylight
+ IDLE +1200 International Date Line East
+ NZST +1200 New Zealand Standard
+ NZT +1200 New Zealand
+ NZDT +1300 New Zealand Daylight
+
+Others can be added in the future upon request.
+
+Date::Manip must be able to determine the timezone the user is in. It does
+this by looking in the following places:
+
+ $Date::Manip::TZ (set with Date_Init or in Manip.pm)
+ $ENV{TZ}
+ the unix `date` command (if available)
+ $main::TZ
+ /etc/TIMEZONE
+ /etc/timezone
+
+At least one of these should contain a timezone in one of the supported
+forms. If none do by default, the TZ variable must be set with Date_Init.
+
+The timezone may be in the STD#DST format (in which case both abbreviations
+must be in the table above) or any of the formats described above. The
+STD#DST format is NOT available when parsing a date however. The following
+forms are also available and are treated similar to the STD#DST forms:
+
+ US/Pacific
+ US/Mountain
+ US/Central
+ US/Eastern
+ Canada/Pacific
+ Canada/Mountain
+ Canada/Central
+ Canada/Eastern
+
+=head1 BUSINESS MODE
+
+Anyone using business mode is going to notice a few quirks about it which
+should be explained. When I designed business mode, I had in mind what UPS
+tells me when they say 2 day delivery, or what the local business which
+promises 1 business day turnaround really means.
+
+If you do a business day calculation (with the workday set to 9:00-5:00),
+you will get the following:
+
+ Saturday at noon + 1 business day = Tuesday at 9:00
+ Saturday at noon - 1 business day = Friday at 9:00
+
+What does this mean?
+
+We have a business that works 9-5 and they have a drop box so I can drop
+things off over the weekend and they promise 1 business day turnaround. If
+I drop something off Friday night, Saturday, or Sunday, it doesn't matter.
+They're going to get started on it Monday morning. It'll be 1 business day
+to finish the job, so the earliest I can expect it to be done is around
+17:00 Monday or 9:00 Tuesday morning. Unfortunately, there is some
+ambiguity as to what day 17:00 really falls on, similar to the ambiguity
+that occurs when you ask what day midnight falls on. Although it's not the
+only answer, Date::Manip treats midnight as the beginning of a day rather
+than the end of one. In the same way, 17:00 is equivalent to 9:00 the next
+day and any time the date calculations encounter 17:00, it automatically
+switch to 9:00 the next day. Although this introduces some quirks, I think
+this is justified. You just have to treat 17:00/9:00 as being ambiguous
+(in the same way you treat midnight as being ambiguous).
+
+Equivalently, if I want a job to be finished on Saturday (despite the fact
+that I cannot pick it up since the business is closed), I have to drop it
+off no later than Friday at 9:00. That gives them a full business day to
+finish it off. Of course, I could just as easily drop it off at 17:00
+Thursday, or any time between then and 9:00 Friday. Again, it's a matter
+of treating 9:00 as ambiguous.
+
+So, in case the business date calculations ever produce results that you
+find confusing, I believe the solution is to write a wrapper which,
+whenever it sees a date with the time of exactly 9:00, it treats it
+specially (depending on what you want.
+
+So Saturday + 1 business day = Tuesday at 9:00 (which means anything
+from Monday 17:00 to Tuesday 9:00), but Monday at 9:01 + 1 business
+day = Tuesday at 9:01 which is exact.
+
+If this is not exactly what you have in mind, don't use the DateCalc
+routine. You can probably get whatever behavior you want using the
+routines Date_IsWorkDay, Date_NextWorkDay, and Date_PrevWorkDay described
+above.
+
+=head1 CUSTOMIZING DATE::MANIP
+
+There are a number of variables which can be used to customize the way
+Date::Manip behaves. There are also several ways to set these variables.
+
+At the top of the Manip.pm file, there is a section which contains all
+customization variables. These provide the default values.
+
+These can be overridden in a global config file if one is present (this
+file is optional). If the GlobalCnf variable is set in the Manip.pm file,
+it contains the full path to a config file. If the file exists, it's
+values will override those set in the Manip.pm file. A sample config file
+is included with the Date::Manip distribution. Modify it as appropriate
+and copy it to some appropriate directory and set the GlobalCnf variable in
+the Manip.pm file.
+
+Each user can have a personal config file which is of the same form as the
+global config file. The variables PersonalCnf and PersonalCnfPath set the
+name and search path for the personal config file. This file is also
+optional. If present, it overrides any values set in the global file.
+
+NOTE: if you use business mode calculations, you must have a config file
+(either global or personal) since this is the only place where you can
+define holidays.
+
+Finally, any variables passed in through Date_Init override all other
+values.
+
+A config file can be composed of several sections. The first section sets
+configuration variables. Lines in this section are of the form:
+
+ VARIABLE = VALUE
+
+For example, to make the default language French, include the line:
+
+ Language = French
+
+Only variables described below may be used. Blank lines and lines beginning
+with a pound sign (#) are ignored. All spaces are optional and strings are
+case insensitive.
+
+A line which starts with an asterisk (*) designates a new section. For
+example, the HOLIDAY section starts with a line:
+
+ *Holiday
+
+The various sections are defined below.
+
+=head1 DATE::MANIP VARIABLES
+
+All Date::Manip variables which can be used are described in the following
+section.
+
+=over 4
+
+=item IgnoreGlobalCnf
+
+If this variable is used (any value is ignored), the global config file
+is not read. It must be present in the initial call to Date_Init or the
+global config file will be read.
+
+=item EraseHolidays
+
+If this variable is used (any value is ignored), the current list of
+defined holidays is erased. A new set will be set the next time a
+config file is read in. This can be set in either the global config file
+or as a Date_Init argument (in which case holidays can be read in from
+both the global and personal config files) or in the personal config file
+(in which case, only holidays in the personal config file are counted).
+
+=item PathSep
+
+This is a regular expression used to separate multiple paths. For example,
+on Unix, it defaults to a colon (:) so that multiple paths can be written
+PATH1:PATH2 . For Win32 platforms, it defaults to a semicolon (;) so that
+paths such as "c:\;d:\" will work.
+
+=item GlobalCnf
+
+This variable can be passed into Date_Init to point to a global
+configuration file. The value must be the complete path to a config file.
+
+By default, no global config file is read. Any time a global config file
+is read, the holidays are erased.
+
+Paths may have a tilde (~) expansion on platforms where this is supported
+(currently Unix and VMS).
+
+=item PersonalCnf
+
+This variable can be passed into Date_Init or set in a global config file
+to set the name of the personal configuration file.
+
+The default name for the config file is .DateManip.cnf on all Unix
+platforms and Manip.cnf on all non-Unix platforms (because some of them
+insist on 8.3 character filenames :-).
+
+=item PersonalCnfPath
+
+This is a list of paths separated by the separator specified by the PathSep
+variable. These paths are each checked for the PersonalCnf config file.
+
+Paths may have a tilde (~) expansion on platforms where this is supported
+(currently Unix and VMS).
+
+=item Language
+
+Date::Manip can be used to parse dates in many different languages.
+Currently, it is configured to read the following languages (the version
+in which they added is included for historical interest):
+
+ English (default)
+ French (5.02)
+ Swedish (5.05)
+ German (5.31)
+ Dutch (5.32) aka Nederlands
+ Polish (5.32)
+ Spanish (5.33)
+ Portuguese (5.34)
+ Romanian (5.35)
+ Italian (5.35)
+ Russian (5.41)
+ Turkish (5.41)
+ Danish (5.41)
+
+Others can be added easily. Language is set to the language used to parse
+dates. If you are interested in providing a translation for a new
+language, email me (see the AUTHOR section below) and I'll send you a list
+of things that I need.
+
+=item DateFormat
+
+Different countries look at the date 12/10 as Dec 10 or Oct 12. In the
+United States, the first is most common, but this certainly doesn't hold
+true for other countries. Setting DateFormat to "US" forces the first
+behavior (Dec 10). Setting DateFormat to anything else forces the second
+behavior (Oct 12).
+
+=item TZ
+
+If set, this defines the local timezone. See the TIMEZONES section above
+for information on it's format.
+
+=item ConvTZ
+
+All date comparisons and calculations must be done in a single time zone in
+order for them to work correctly. So, when a date is parsed, it should be
+converted to a specific timezone. This allows dates to easily be compared
+and manipulated as if they are all in a single timezone.
+
+The ConvTZ variable determines which timezone should be used to store dates
+in. If it is left blank, all dates are converted to the local timezone
+(see the TZ variable above). If it is set to one of the timezones listed
+above, all dates are converted to this timezone. Finally, if it is set to
+the string "IGNORE", all timezone information is ignored as the dates are
+read in (in this case, the two dates "1/1/96 12:00 GMT" and "1/1/96 12:00
+EST" would be treated as identical).
+
+=item Internal
+
+When a date is parsed using ParseDate, that date is stored in an internal
+format which is understood by the Date::Manip routines UnixDate and
+DateCalc. Originally, the format used to store the date internally was:
+
+ YYYYMMDDHH:MN:SS
+
+It has been suggested that I remove the colons (:) to shorten this to:
+
+ YYYYMMDDHHMNSS
+
+The main advantage of this is that some databases are colon delimited which
+makes storing a date from Date::Manip tedious.
+
+In order to maintain backwards compatibility, the Internal variable was
+introduced. Set it to 0 (to use the old format) or 1 (to use the new
+format).
+
+=item FirstDay
+
+It is sometimes necessary to know what day of week is regarded as first.
+By default, this is set to Monday, but many countries and people will
+prefer Sunday (and in a few cases, a different day may be desired). Set
+the FirstDay variable to be the first day of the week (1=Monday, 7=Sunday)
+Monday should be chosen to to comply with ISO 8601.
+
+=item WorkWeekBeg, WorkWeekEnd
+
+The first and last days of the work week. By default, Monday and Friday.
+WorkWeekBeg must come before WorkWeekEnd numerically. The days are
+numbered from 1 (Monday) to 7 (Sunday).
+
+There is no way to handle an odd work week of Thu to Mon for example or 10
+days on, 4 days off.
+
+=item WorkDay24Hr
+
+If this is non-nil, a work day is treated as being 24 hours long. The
+WorkDayBeg and WorkDayEnd variables are ignored in this case.
+
+=item WorkDayBeg, WorkDayEnd
+
+The times when the work day starts and ends. WorkDayBeg must come before
+WorkDayEnd (i.e. there is no way to handle the night shift where the work
+day starts one day and ends another). Also, the workday MUST be more than
+one hour long (of course, if this isn't the case, let me know... I want a
+job there!).
+
+The time in both can be in any valid time format (including international
+formats), but seconds will be ignored.
+
+=item TomorrowFirst
+
+Periodically, if a day is not a business day, we need to find the nearest
+business day to it. By default, we'll look to "tomorrow" first, but if this
+variable is set to 0, we'll look to "yesterday" first. This is only used in
+the Date_NearestWorkDay and is easily overridden (see documentation for that
+function).
+
+=item DeltaSigns
+
+Prior to Date::Manip version 5.07, a negative delta would put negative
+signs in front of every component (i.e. "0:0:-1:-3:0:-4"). By default,
+5.07 changes this behavior to print only 1 or two signs in front of the
+year and day elements (even if these elements might be zero) and the sign
+for year/month and day/hour/minute/second are the same. Setting this
+variable to non-zero forces deltas to be stored with a sign in front of
+every element (including elements equal to 0).
+
+=item Jan1Week1
+
+ISO 8601 states that the first week of the year is the one which contains
+Jan 4 (i.e. it is the first week in which most of the days in that week
+fall in that year). This means that the first 3 days of the year may
+be treated as belonging to the last week of the previous year. If this
+is set to non-nil, the ISO 8601 standard will be ignored and the first
+week of the year contains Jan 1.
+
+=item YYtoYYYY
+
+By default, a 2 digit year is treated as falling in the 100 year period of
+CURR-89 to CURR+10. YYtoYYYY may be set to any integer N to force a 2
+digit year into the period CURR-N to CURR+(99-N). A value of 0 forces
+the year to be the current year or later. A value of 99 forces the year
+to be the current year or earlier. Since I do no checking on the value of
+YYtoYYYY, you can actually have it any positive or negative value to force
+it into any century you want.
+
+YYtoYYYY can also be set to "C" to force it into the current century, or
+to "C##" to force it into a specific century. So, no (1998), "C" forces
+2 digit years to be 1900-1999 and "C18" would force it to be 1800-1899.
+
+It can also be set to the form "C####" to force it into a specific 100
+year period. C1950 refers to 1950-2049.
+
+=item UpdateCurrTZ
+
+If a script is running over a long period of time, the timezone may change
+during the course of running it (i.e. when daylight savings time starts or
+ends). As a result, parsing dates may start putting them in the wrong time
+zone. Since a lot of overhead can be saved if we don't have to check the
+current timezone every time a date is parsed, by default checking is turned
+off. Setting this to non-nil will force timezone checking to be done every
+time a date is parsed... but this will result in a considerable performance
+penalty.
+
+A better solution would be to restart the process on the two days per year
+where the timezone switch occurs.
+
+=item IntCharSet
+
+If set to 0, use the US character set (7-bit ASCII) to return strings such
+as the month name. If set to 1, use the appropriate international character
+set. For example, If you want your French representation of Decemeber to
+have the accent over the first "e", you'll want to set this to 1.
+
+=item ForceDate
+
+This variable can be set to a date in the format: YYYY-MM-DD-HH:MN:SS
+to force the current date to be interpreted as this date. Since the current
+date is used in parsing, this string will not be parsed and MUST be in the
+format given above.
+
+=back
+
+=head1 HOLIDAY SECTION
+
+The holiday section of the config file is used to define holidays. Each
+line is of the form:
+
+ DATE = HOLIDAY
+
+HOLIDAY is the name of the holiday (or it can be blank in which case the
+day will still be treated as a holiday... for example the day after
+Thanksgiving or Christmas is often a work holiday though neither are
+named).
+
+DATE is a string which can be parsed to give a valid date in any year. It
+can be of the form
+
+ Date
+ Date + Delta
+ Date - Delta
+ Recur
+
+A valid holiday section would be:
+
+ *Holiday
+
+ 1/1 = New Year's Day
+ third Monday in Feb = Presidents' Day
+ fourth Thu in Nov = Thanksgiving
+
+ # The Friday after Thanksgiving is an unnamed holiday most places
+ fourth Thu in Nov + 1 day =
+
+ 1*0:0:0:0:0:0*EASTER = Easter
+ 1*11:0:11:0:0:0*CWD = Veteran's Day (observed)
+ 1*0:0:0:0:0:0*EASTER,PD5 = Good Friday
+
+In a Date + Delta or Date - Delta string, you can use business mode by
+including the appropriate string (see documentation on DateCalc) in the
+Date or Delta. So (in English), the first workday before Christmas could
+be defined as:
+
+ 12/25 - 1 business day =
+
+The date's may optionally contain the year. For example, the dates
+
+ 1/1
+ 1/1/1999
+
+refers to Jan 1 in any year or in only 1999 respectively. For dates that
+refer to any year, the date must be written such that by simply appending
+the year (separated by spaces) it can be correctly interpreted. This
+will work for everything except ISO 8601 dates, so ISO 8601 dates may
+not be used in this case.
+
+In cases where you are interested in business type calculations, you'll
+want to define most holidays using recurrences, since they can define
+when a holiday is celebrated in the financial world. For example,
+Christmas chould be defined as:
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+
+NOTE: It was pointed out to me that using a similar type recurrence to
+define New Years does not work. The recurrence:
+
+ 1*12:0:31:0:0:0*FW1
+
+fails (worse, it goes into an infinite loop). The problem is that each
+holiday definition is applied to a specific year and it expects to find
+the holiday for that year. When this recurrence is applied to the year
+1995, it returns the holiday for 1996 and fails.
+
+Use the recurrence:
+
+ 1*1:0:1:0:0:0*NWD
+
+instead.
+
+If you wanted to define both Christmas and Boxing days (Boxing is the
+day after Christmas, and is celebrated in some parts of the world), you
+could do it in one of the following ways:
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 1*12:0:25:0:0:0*FW1 = Boxing
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 01*12:0:24:0:0:0*FW1 = Boxing
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 1*12:0:25:0:0:0*FW1,a = Boxing
+
+The following examples will NOT work:
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 1*12:0:24:0:0:0*FW2 = Boxing
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 1*12:0:24:0:0:0*FW1 = Boxing
+
+The reasoning behind all this is as follows:
+
+Holidays go into affect the minute they are parsed. So, in the case of:
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 1*12:0:24:0:0:0*FW2 = Boxing
+
+the minute the first line is parsed, Christmas is defined as a holiday.
+The second line then steps forward 2 work days (skipping Christmas since
+that's no longer a work day) and define the work day two days after
+Christmas, NOT the day after Christmas.
+
+An good alternative would appear to be:
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 1*12:0:24:0:0:0*FW1 = Boxing
+
+This unfortunately fails because the recurrences are currently stored in a
+hash. Since these two recurrences are identical, they fail (the first one
+is overwritten by the second and in essense, Christmas is never defined).
+
+To fix this, make them unique with either a fake flag (which is ignored):
+
+ 1*12:0:24:0:0:0*FW1,a = Boxing
+
+or adding an innocuous 0 somewhere:
+
+ 01*12:0:24:0:0:0*FW1 = Boxing
+
+The other good alternative would be to make two completely different
+recurrences such as:
+
+ 1*12:0:24:0:0:0*FW1 = Christmas
+ 1*12:0:25:0:0:0*FW1 = Boxing
+
+At times, you may want to switch back and forth between two holiday files.
+This can be done by calling the following:
+
+ &Date_Init("EraseHolidays=1","PersonalCnf=FILE1");
+ ...
+ &Date_Init("EraseHolidays=1","PersonalCnf=FILE2");
+ ...
+
+=head1 EVENTS SECTION
+
+The Events section of the config file is similar to the Holiday section.
+It is used to name certain days or times, but there are a few important
+differences:
+
+=over 4
+
+=item Events can be assigned to any time and duration
+
+All holidays are exactly 1 day long. They are assigned to a period
+of time from midnight to midnight.
+
+Events can be based at any time of the day, and may be of any duration.
+
+=item Events don't affect business mode calculations
+
+Unlike holidays, events are completely ignored when doing business
+mode calculations.
+
+=back
+
+Whereas holidays were added with business mode math in mind, events
+were added with calendar and scheduling applications in mind.
+
+Every line in the events section is of the form:
+
+ EVENT = NAME
+
+where NAME is the name of the event, and EVENT defines when it occurs
+and it's duration. An EVENT can be defined in the following ways:
+
+ Date
+ Date*
+ Recur [NYI]
+ Recur* [NYI]
+
+ Date ; Date
+ Date ; Delta
+ Recur ; Delta [NYI]
+
+ Date ; Delta ; Delta [NYI]
+ Recur ; Delta ; Delta [NYI]
+
+Here, Date* refers to a string containing a Date with NO TIME fields
+(Jan 12, 1/1/2000, 2010-01-01) while Date does contain time fields.
+Similarily, Recur* stands for a recurrence with the time fields all
+equal to 0) while Recur stands for a recurrence with at least one
+non-zero time field.
+
+Both Date* and Recur* refer to an event very similar to a holiday which
+goes from midnight to midnight.
+
+Date and Recur refer to events which occur at the time given and with
+a duration of 1 hour.
+
+Events given by "Date ; Date", "Date ; Delta", and "Recur ; Delta"
+contain both the starting date and either ending date or duration.
+
+Events given as three elements "Date ; Delta ; Delta" or "Recur ; Delta ;
+Delta" take a date and add both deltas to it to give the starting and
+ending time of the event. The order and sign of the deltas is
+unimportant (and both can be the same sign to give a range of times
+which does not contain the base date).
+
+Items marked with [NYI] are not yet implemented but will be by the
+time this is released.
+
+=head1 BACKWARDS INCOMPATIBILITIES
+
+For the most part, Date::Manip has remained backward compatible at every
+release. There have been a few minor incompatibilities introduced at
+various stages. Major differences are marked with bullets.
+
+=over 4
+
+=item VERSION 5.41
+
+=item Changed path separator for VMS
+
+Since ":" is used in some VMS paths, it should not have been used as
+the path separator. It has been changed to a newline ("\n") character.
+
+=item Delta_Format behavior changed
+
+The entire delta is exact if no month component is present (previously,
+no year or month component could be present).
+
+=item VERSION 5.38
+
+=item Removed Date_DaysSince999
+
+The Date_DaysSince999 function (deprecated in 5.35) has been removed.
+
+=item VERSION 5.35
+
+=over 4
+
+=item Deprected Date_DaysSince999
+
+In fixing support for the years 0000-0999, I rewrote Date_DaysSince999 to
+be Date_DaysSince1BC. The Date_DaysSince999 function will be removed.
+
+=item * Added PathSep variable
+
+In order to better support Win32 platforms, I added the PathSep config
+variable. This will allow the use of paths such as "c:\date" on Win32
+platforms. Old config files on Win32 platforms (which were not working
+correctly in many cases) may not work if they contain path information to
+the personal config file.
+
+=back
+
+=item VERSION 5.34
+
+=over 4
+
+=item * All Date::Manip variables are no longer accessible
+
+Previously, Date::Manip variables were declared using a full package name.
+Now, they are declared with the my() function. This means that internal
+variables are no longer accessible outside of the module.
+
+=item Week interpretation in business mode deltas
+
+A business mode delta containing a week value used to be treated as 7 days.
+A much more likely interpretation of a week is Monday to Monday, regardless
+of holidays, so this is now the behavior.
+
+=item %z UnixDate format
+
+The %z UnixDate format used to return the Timezone abbreviation. It now
+returns it as a GMT offset (i.e. -0500). %Z still returns the Timezone
+abbreviation.
+
+=item Formats "22nd sunday" returns the intuitive value
+
+The date "22nd sunday" used to return the Sunday of the 22nd week of the
+year (which could be the 21st, 22nd, or 23rd Sunday of the year depending
+on how weeks were defined). Now, it returns the 22nd Sunday of the year
+regardless.
+
+=item Separator in DD/YYmmm and mmmDD/YY formats no longer optional
+
+Previously, the date "Dec1065" would return Dec 10, 1965. After adding
+the YYYYmmm and mmmYYYY formats, this was no longer possible. The separator
+between DD and YY is no longer optional, so
+
+ Dec1065 returns December 1, 1065
+ Dec10/65 returns December 10, 1965
+
+=item * Date_Cmp added
+
+This is not a backwards incompatibility... but is added to help prepare for
+a future incompatibility. In one of the next versions of Date::Manip, the
+internal format of the date will change to include timezone information.
+All date comparisons should be made using Date_Cmp (which currently does
+nothing more than call the perl "cmp" command, but which will important
+when comparing dates that include the timezone).
+
+=back
+
+=item VERSION 5.32
+
+=over 4
+
+=item Date_Init arguments
+
+The old style Date_Init arguments that were deprecated in version 5.07
+have been removed.
+
+=item * DateManip.cnf change
+
+Changed .DateManip.cnf to Manip.cnf (to get rid of problems on OS's
+that insist on 8.3 filenames) for all non-Unix platforms (Wintel, VMS,
+Mac). For all Unix platforms, it's still .DateManip.cnf . It will only
+look in the user's home directory on VMS and Unix.
+
+=back
+
+=item VERSION 5.30
+
+=over 4
+
+=item * Delta format changed
+
+A week field has been added to the internal format of the delta. It now
+reads "Y:M:W:D:H:MN:S" instead of "Y:M:D:H:MN:S".
+
+=back
+
+=item VERSION 5.21
+
+=over 4
+
+=item Long running processes may give incorrect timezone
+
+A process that runs during a timezone change (Daylight Saving Time
+specifically) may report the wrong timezone. See the UpdateCurrTZ variable
+for more information.
+
+=item UnixDate "%J", "%W", and "%U" formats fixed
+
+The %J, %W, and %U will no longer report a week 0 or a week 53 if it should
+really be week 1 of the following year. They now report the correct week
+number according to ISO 8601.
+
+=back
+
+=item VERSION 5.20
+
+=over 4
+
+=item * ParseDate formats removed (ISO 8601 compatibility)
+
+Full support for ISO 8601 formats was added. As a result, some formats
+which previously worked may no longer be parsed since they conflict with an
+ISO 8601 format. These include MM-DD-YY (conflicts with YY-MM-DD) and
+YYMMDD (conflicts with YYYYMM). MM/DD/YY still works, so the first form
+can be kept easily by changing "-" to "/". YYMMDD can be changed to
+YY-MM-DD before being parsed. Whenever parsing dates using dashes as
+separators, they will be treated as ISO 8601 dates. You can get around
+this by converting all dashes to slashes.
+
+=item * Week day numbering
+
+The day numbering was changed from 0-6 (sun-sat) to 1-7 (mon-sun) to be
+ISO 8601 compatible. Weeks start on Monday (though this can be overridden
+using the FirstDay config variable) and the 1st week of the year contains
+Jan 4 (though it can be forced to contain Jan 1 with the Jan1Week1 config
+variable).
+
+=back
+
+=item VERSION 5.07
+
+=over 4
+
+=item UnixDate "%s" format
+
+Used to return the number of seconds since 1/1/1970 in the current
+timezone. It now returns the number of seconds since 1/1/1970 GMT.
+The "%o" format was added which returns what "%s" previously did.
+
+=item Internal format of delta
+
+The format for the deltas returned by ParseDateDelta changed. Previously,
+each element of a delta had a sign attached to it (+1:+2:+3:+4:+5:+6). The
+new format removes all unnecessary signs by default (+1:2:3:4:5:6). Also,
+because of the way deltas are normalized (see documentation on
+ParseDateDelta), at most two signs are included. For backwards
+compatibility, the config variable DeltaSigns was added. If set to 1, all
+deltas include all 6 signs.
+
+=item Date_Init arguments
+
+The format of the Date_Init calling arguments changed. The
+old method
+
+ &Date_Init($language,$format,$tz,$convtz);
+
+is still supported , but this support will likely disappear in the future.
+Use the new calling format instead:
+
+ &Date_Init("var=val","var=val",...);
+
+NOTE: The old format is no longer supported as of version 5.32 .
+
+=back
+
+=back
+
+=head1 KNOWN PROBLEMS
+
+The following are not bugs in Date::Manip, but they may give some people
+problems.
+
+=over 4
+
+=item Unable to determine TimeZone
+
+Perhaps the most common problem occurs when you get the error:
+
+ Error: Date::Manip unable to determine TimeZone.
+
+Date::Manip tries hard to determine the local timezone, but on some
+machines, it cannot do this (especially non-unix systems). To fix this,
+just set the TZ variable, either at the top of the Manip.pm file,, in the
+DateManip.cnf file, or in a call to Date_Init. I suggest using the form
+"EST5EDT" so you don't have to change it every 6 months when going to or
+from daylight savings time.
+
+Windows NT does not seem to set the TimeZone by default. From the
+Perl-Win32-Users mailing list:
+
+ > How do I get the TimeZone on my NT?
+ >
+ > $time_zone = $ENV{'TZ'};
+ >
+ You have to set the variable before, WinNT doesn't set it by
+ default. Open the properties of "My Computer" and set a SYSTEM
+ variable TZ to your timezone. Jenda@Krynicky.cz
+
+This might help out some NT users.
+
+A minor (false) assumption that some users might make is that since
+Date::Manip passed all of it's tests at install time, this should not occur
+and are surprised when it does.
+
+Some of the tests are timezone dependent. Since the tests all include
+input and expected output, I needed to know in advance what timezone they
+would be run in. So, the tests all explicitly set the timezone using the
+TZ configuration variable passed into Date_Init. Since this overrides any
+other method of determining the timezone, Date::Manip uses this and doesn't
+have to look elsewhere for the timezone.
+
+When running outside the tests, Date::Manip has to rely on it's other
+methods for determining the timezone.
+
+=item Complaining about getpwnam/getpwuid
+
+Another problem is when running on Micro$oft OS'es. I have added many
+tests to catch them, but they still slip through occasionally. If any ever
+complain about getpwnam/getpwuid, simply add one of the lines:
+
+ $ENV{OS} = Windows_NT
+ $ENV{OS} = Windows_95
+
+to your script before
+
+ use Date::Manip
+
+=item Date::Manip is slow
+
+The reasons for this are covered in the SHOULD I USE DATE::MANIP section
+above.
+
+Some things that will definitely help:
+
+Version 5.21 does run noticeably faster than earlier versions due to
+rethinking some of the initialization, so at the very least, make sure you
+are running this version or later.
+
+ISO-8601 dates are parsed first and fastest. Use them whenever possible.
+
+Avoid parsing dates that are referenced against the current time (in 2
+days, today at noon, etc.). These take a lot longer to parse.
+
+ Example: parsing 1065 dates with version 5.11 took 48.6 seconds, 36.2
+ seconds with version 5.21, and parsing 1065 ISO-8601 dates with version
+ 5.21 took 29.1 seconds (these were run on a slow, overloaded computer with
+ little memory... but the ratios should be reliable on a faster computer).
+
+Business date calculations are extremely slow. You should consider
+alternatives if possible (i.e. doing the calculation in exact mode and then
+multiplying by 5/7). There will be an approximate business mode in one of
+the next versions which will be much faster (though less accurate) which
+will do something like this. Whenever possible, use this mode. And who
+needs a business date more accurate than "6 to 8 weeks" anyway huh :-)
+
+Never call Date_Init more than once. Unless you're doing something very
+strange, there should never be a reason to anyway.
+
+=item Sorting Problems
+
+If you use Date::Manip to sort a number of dates, you must call Date_Init
+either explicitly, or by way of some other Date::Manip routine before it
+is used in the sort. For example, the following code fails:
+
+ use Date::Manip;
+ # &Date_Init;
+ sub sortDate {
+ my($date1, $date2);
+ $date1 = &ParseDate($a);
+ $date2 = &ParseDate($b);
+ return (&Date_Cmp($date1,$date2));
+ }
+ @dates = ("Fri 16 Aug 96",
+ "Mon 19 Aug 96",
+ "Thu 15 Aug 96");
+ @i=sort sortDate @dates;
+
+but if you uncomment the Date_Init line, it works. The reason for this is
+that the first time you call Date_Init, it initializes a number of items
+used by Date::Manip. Some of these have to be sorted (regular expressions
+sorted by length to ensure the longest match). It turns out that perl
+has a bug in it which does not allow a sort within a sort. At some point,
+this should be fixed, but for now, the best thing to do is to call Date_Init
+explicitly. The bug exists in all versions up to 5.005 (I haven't
+tested 5.6.0 yet).
+
+NOTE: This is an EXTREMELY inefficient way to sort data. Instead, you
+should parse the dates with ParseDate, sort them using a normal string
+comparison, and then convert them back to the format desired using
+UnixDate.
+
+=item RCS Control
+
+If you try to put Date::Manip under RCS control, you are going to have
+problems. Apparently, RCS replaces strings of the form "$Date...$" with
+the current date. This form occurs all over in Date::Manip. To prevent the
+RCS keyword expansion, checkout files using "co -ko". Since very few people
+will ever have a desire to do this (and I don't use RCS), I have not worried
+about it.
+
+=back
+
+=head1 KNOWN BUGS
+
+=over 4
+
+=item Daylight Savings Times
+
+Date::Manip does not handle daylight savings time, though it does handle
+timezones to a certain extent. Converting from EST to PST works fine.
+Going from EST to PDT is unreliable.
+
+The following examples are run in the winter of the US East coast (i.e.
+in the EST timezone).
+
+ print UnixDate(ParseDate("6/1/97 noon"),"%u"),"\n";
+ => Sun Jun 1 12:00:00 EST 1997
+
+June 1 EST does not exist. June 1st is during EDT. It should print:
+
+ => Sun Jun 1 00:00:00 EDT 1997
+
+Even explicitly adding the timezone doesn't fix things (if anything, it
+makes them worse):
+
+ print UnixDate(ParseDate("6/1/97 noon EDT"),"%u"),"\n";
+ => Sun Jun 1 11:00:00 EST 1997
+
+Date::Manip converts everything to the current timezone (EST in this case).
+
+Related problems occur when trying to do date calculations over a timezone
+change. These calculations may be off by an hour.
+
+Also, if you are running a script which uses Date::Manip over a period of
+time which starts in one time zone and ends in another (i.e. it switches
+form Daylight Savings Time to Standard Time or vice versa), many things may
+be wrong (especially elapsed time).
+
+I hope to fix these problems in a future release so that it would convert
+everything to the current zones (EST or EDT).
+
+=back
+
+=head1 BUGS AND QUESTIONS
+
+If you find a bug in Date::Manip, please send it directly to me (see the
+AUTHOR section below) rather than posting it to one of the newsgroups.
+Although I try to keep up with the comp.lang.perl.* groups, all too often I
+miss news (flaky news server, articles expiring before I caught them, 1200
+articles to wade through and I missed one that I was interested in, etc.).
+
+When filing a bug report, please include the following information:
+
+ o The version of Date::Manip you are using. You can get this by using
+ the script:
+
+ use Date::Manip;
+ print &DateManipVersion(),"\n";
+
+ o The output from "perl -V"
+
+If you have a problem using Date::Manip that perhaps isn't a bug (can't
+figure out the syntax, etc.), you're in the right place. Go right back to
+the top of this man page and start reading. If this still doesn't answer
+your question, mail me (again, please mail me rather than post to the
+newsgroup).
+
+=head1 YEAR 2000
+
+In hindsight, the fact that I've only been asked once (so far) if Date::Manip
+is year 2000 compliant surprises me a bit. Still, as 2000 approaches and
+this buzzword starts flying around more and more frantically, other's might
+follow suit, so this section answers the question.
+
+Is Date::Manip year 2000 compliant?
+
+This question is largely meaningless. Date::Manip is basically just a
+parser. You give it a date and it'll manipulate it. Date::Manip does
+store the date internally as a 4 digit year, and performs all operations
+using this internal representation, so I will state that Date::Manip is
+CAPABLE of writing Y2K compliant code.
+
+But Date::Manip is simply a library. If you use it correctly, your code
+can be Y2K compliant. If you don't, your code may not be Y2K compliant.
+
+The bottom line is this:
+
+ Date::Manip is a library that is capable of being used to write Y2K
+ compliant code. It may also be used to write non-Y2K compliant code.
+
+ If your code is NOT Y2K compliant, it is NOT due to any deficiency in
+ Date::Manip. Rather, it is due to poor programming on the part of the
+ person using Date::Manip.
+
+For an excellent treatment of the Y2K problem, see the article by Tom
+Christiansen at:
+
+ http://language.perl.com/news/y2k.html
+
+A slightly better question is "Is Perl year 2000 compliant"? This is
+covered in the perl FAQ (section 4) and in the article by Tom Crhistiansen.
+
+The best question is "For what dates is Date::Manip useful?" It definitely
+can't handle BC dates, or dates past Dec 31, 9999. So Date::Manip works
+during the years 1000 to 9999.
+
+In practical terms however, Date::Manip deals with the Gregorian calendar,
+and is therefore useful in the period that that calendar has been, or will
+be, in effect. The Gregorian calendar was first adopted by the Catholic
+church in 1582, but some countries were still using the Julian calendar as
+late as the early part of the 20th century. Also, at some point (probably
+no earlier than the year 3000 and possibly much later), the Gregorian
+system is going to have to be modified slightly since the current system of
+leap years is off by a few seconds a year. So... in practical terms,
+Date::Manip is _probably_ useful from 1900 to 3000.
+
+One other note is that Date::Manip will NOT handle 3 digit years. So, if
+you store the year as an offset from 1900 (which is 2 digits now, but will
+become 3 digits in 2000), these will NOT be parsable by Date::Manip.
+
+=head1 VERSION NUMBERS
+
+A note about version numbers.
+
+Prior to version 5.00, Date::Manip was distributed as a perl4 library.
+There were no numbering conventions in place, so I used a simple
+MAJOR.MINOR numbering scheme.
+
+With version 5.00, I switched to a perl5 module and at that time switched
+to the perl5 numbering convention of a major version followed by a 2 digit
+minor version.
+
+As of 5.41/5.42, all versions released to CPAN will be even numbered. Odd
+numbered will be development versions available from my web site. For
+example, after 5.40 was released, I started making changes, and called
+the development version 5.41. When released to CPAN, it was called 5.42.
+I may add a third digit to development versions (i.e. 5.41.9) to keep
+track of important changes in the development version.
+
+=head1 ACKNOWLEDGMENTS
+
+There are many people who have contributed to Date::Manip over the years
+that I'd like to thank. The most important contributions have come in the
+form of suggestions and bug reports by users. I have tried to include the
+name of every person who first suggested each improvement or first reported
+each bug. These are included in the HISTORY file in the Date::Manip
+distribution in the order the changes are made. The list is simply too
+long to appear here, but I appreciate their help.
+
+A number of people have made suggestions or reported bugs which are not
+mentioned in the HISTORY file. These include suggestions which have not
+been implemented and people who have made a suggestion or bug report which
+has already been suggested/reported by someone else. For those who's
+suggestions have not yet been implemented, they will be added to the
+HISTORY file when (if) their suggestions are implemented. For everyone
+else, thank you too. I'd much rather have a suggestion made twice than not
+at all.
+
+Thanks to Alan Cezar and Greg Schiedler for paying me to implement the
+Events_List routine. They gave me the idea, and were then willing to pay
+me for my time to get it implemented quickly.
+
+I'd also like a couple of authors. Date::Manip has recently been getting
+some really good press in a couple of books. Since no one's paying me to
+write Date::Manip, seeing my module get a good review in a book written by
+someone else really makes my day. My thanks to Nate Padwardhan and Clay
+Irving (Programming with Perl Modules -- part of the O'Reilly Perl Resource
+Kit); and Tom Christiansen and Nathan Torkington (The Perl Cookbook).
+Also, thanks to any other authors who've written about Date::Manip who's
+books I haven't seen.
+
+=head1 AUTHOR
+
+Sullivan Beck (sbeck@cpan.org)
+
+You can always get the newest beta version of Date::Manip (which may fix
+problems in the current CPAN version... and may add others) from my home
+page:
+
+http://www.cise.ufl.edu/~sbeck/
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Parse/Yapp.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,512 @@
+#
+# Module Parse::Yapp.pm.
+#
+# Copyright (c) 1998-2001, Francois Desarmenien, all right reserved.
+#
+# See the Copyright section at the end of the Parse/Yapp.pm pod section
+# for usage and distribution rights.
+#
+#
+package Parse::Yapp;
+
+use strict;
+use vars qw($VERSION @ISA);
+@ISA = qw(Parse::Yapp::Output);
+
+use Parse::Yapp::Output;
+
+# $VERSION is in Parse/Yapp/Driver.pm
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Parse::Yapp - Perl extension for generating and using LALR parsers.
+
+=head1 SYNOPSIS
+
+ yapp -m MyParser grammar_file.yp
+
+ ...
+
+ use MyParser;
+
+ $parser=new MyParser();
+ $value=$parser->YYParse(yylex => \&lexer_sub, yyerror => \&error_sub);
+
+ $nberr=$parser->YYNberr();
+
+ $parser->YYData->{DATA}= [ 'Anything', 'You Want' ];
+
+ $data=$parser->YYData->{DATA}[0];
+
+=head1 DESCRIPTION
+
+Parse::Yapp (Yet Another Perl Parser compiler) is a collection of modules
+that let you generate and use yacc like thread safe (reentrant) parsers with
+perl object oriented interface.
+
+The script yapp is a front-end to the Parse::Yapp module and let you
+easily create a Perl OO parser from an input grammar file.
+
+=head2 The Grammar file
+
+=over 4
+
+=item C<Comments>
+
+Through all your files, comments are either Perl style, introduced by I<#>
+up to the end of line, or C style, enclosed between I</*> and I<*/>.
+
+
+=item C<Tokens and string literals>
+
+
+Through all the grammar files, two kind of symbols may appear:
+I<Non-terminal> symbols, called also I<left-hand-side> symbols,
+which are the names of your rules, and I<Terminal> symbols, called
+also I<Tokens>.
+
+Tokens are the symbols your lexer function will feed your parser with
+(see below). They are of two flavours: symbolic tokens and string
+literals.
+
+Non-terminals and symbolic tokens share the same identifier syntax:
+
+ [A-Za-z][A-Za-z0-9_]*
+
+String literals are enclosed in single quotes and can contain almost
+anything. They will be output to your parser file double-quoted, making
+any special character as such. '"', '$' and '@' will be automatically
+quoted with '\', making their writing more natural. On the other hand,
+if you need a single quote inside your literal, just quote it with '\'.
+
+You cannot have a literal I<'error'> in your grammar as it would
+confuse the driver with the I<error> token. Use a symbolic token instead.
+In case you inadvertently use it, this will produce a warning telling you
+you should have written it I<error> and will treat it as if it were the
+I<error> token, which is certainly NOT what you meant.
+
+
+=item C<Grammar file syntax>
+
+It is very close to yacc syntax (in fact, I<Parse::Yapp> should compile
+a clean I<yacc> grammar without any modification, whereas the opposite
+is not true).
+
+This file is divided in three sections, separated by C<%%>:
+
+ header section
+ %%
+ rules section
+ %%
+ footer section
+
+=over 4
+
+=item B<The Header Section> section may optionally contain:
+
+=item *
+
+One or more code blocks enclosed inside C<%{> and C<%}> just like in
+yacc. They may contain any valid Perl code and will be copied verbatim
+at the very beginning of the parser module. They are not as useful as
+they are in yacc, but you can use them, for example, for global variable
+declarations, though you will notice later that such global variables can
+be avoided to make a reentrant parser module.
+
+=item *
+
+Precedence declarations, introduced by C<%left>, C<%right> and C<%nonassoc>
+specifying associativity, followed by the list of tokens or litterals
+having the same precedence and associativity.
+The precedence beeing the latter declared will be having the highest level.
+(see the yacc or bison manuals for a full explanation of how they work,
+as they are implemented exactly the same way in Parse::Yapp)
+
+=item *
+
+C<%start> followed by a rule's left hand side, declaring this rule to
+be the starting rule of your grammar. The default, when C<%start> is not
+used, is the first rule in your grammar section.
+
+=item *
+
+C<%token> followed by a list of symbols, forcing them to be recognized
+as tokens, generating a syntax error if used in the left hand side of
+a rule declaration.
+Note that in Parse::Yapp, you I<don't> need to declare tokens as in yacc: any
+symbol not appearing as a left hand side of a rule is considered to be
+a token.
+Other yacc declarations or constructs such as C<%type> and C<%union> are
+parsed but (almost) ignored.
+
+=item *
+
+C<%expect> followed by a number, suppress warnings about number of Shift/Reduce
+conflicts when both numbers match, a la bison.
+
+
+=item B<The Rule Section> contains your grammar rules:
+
+A rule is made of a left-hand-side symbol, followed by a C<':'> and one
+or more right-hand-sides separated by C<'|'> and terminated by a C<';'>:
+
+ exp: exp '+' exp
+ | exp '-' exp
+ ;
+
+A right hand side may be empty:
+
+ input: #empty
+ | input line
+ ;
+
+(if you have more than one empty rhs, Parse::Yapp will issue a warning,
+as this is usually a mistake, and you will certainly have a reduce/reduce
+conflict)
+
+
+A rhs may be followed by an optional C<%prec> directive, followed
+by a token, giving the rule an explicit precedence (see yacc manuals
+for its precise meaning) and optionnal semantic action code block (see
+below).
+
+ exp: '-' exp %prec NEG { -$_[1] }
+ | exp '+' exp { $_[1] + $_[3] }
+ | NUM
+ ;
+
+Note that in Parse::Yapp, a lhs I<cannot> appear more than once as
+a rule name (This differs from yacc).
+
+
+=item C<The footer section>
+
+may contain any valid Perl code and will be appended at the very end
+of your parser module. Here you can write your lexer, error report
+subs and anything relevant to you parser.
+
+=item C<Semantic actions>
+
+Semantic actions are run every time a I<reduction> occurs in the
+parsing flow and they must return a semantic value.
+
+They are (usually, but see below C<In rule actions>) written at
+the very end of the rhs, enclosed with C<{ }>, and are copied verbatim
+to your parser file, inside of the rules table.
+
+Be aware that matching braces in Perl is much more difficult than
+in C: inside strings they don't need to match. While in C it is
+very easy to detect the beginning of a string construct, or a
+single character, it is much more difficult in Perl, as there
+are so many ways of writing such literals. So there is no check
+for that today. If you need a brace in a double-quoted string, just
+quote it (C<\{> or C<\}>). For single-quoted strings, you will need
+to make a comment matching it I<in th right order>.
+Sorry for the inconvenience.
+
+ {
+ "{ My string block }".
+ "\{ My other string block \}".
+ qq/ My unmatched brace \} /.
+ # Force the match: {
+ q/ for my closing brace } /
+ q/ My opening brace { /
+ # must be closed: }
+ }
+
+All of these constructs should work.
+
+
+In Parse::Yapp, semantic actions are called like normal Perl sub calls,
+with their arguments passed in C<@_>, and their semantic value are
+their return values.
+
+$_[1] to $_[n] are the parameters just as $1 to $n in yacc, while
+$_[0] is the parser object itself.
+
+Having $_[0] beeing the parser object itself allows you to call
+parser methods. Thats how the yacc macros are implemented:
+
+ yyerrok is done by calling $_[0]->YYErrok
+ YYERROR is done by calling $_[0]->YYError
+ YYACCEPT is done by calling $_[0]->YYAccept
+ YYABORT is done by calling $_[0]->YYAbort
+
+All those methods explicitly return I<undef>, for convenience.
+
+ YYRECOVERING is done by calling $_[0]->YYRecovering
+
+Four useful methods in error recovery sub
+
+ $_[0]->YYCurtok
+ $_[0]->YYCurval
+ $_[0]->YYExpect
+ $_[0]->YYLexer
+
+return respectivly the current input token that made the parse fail,
+its semantic value (both can be used to modify their values too, but
+I<know what you are doing> ! See I<Error reporting routine> section for
+an example), a list which contains the tokens the parser expected when
+the failure occured and a reference to the lexer routine.
+
+Note that if C<$_[0]-E<gt>YYCurtok> is declared as a C<%nonassoc> token,
+it can be included in C<$_[0]-E<gt>YYExpect> list whenever the input
+try to use it in an associative way. This is not a bug: the token
+IS expected to report an error if encountered.
+
+To detect such a thing in your error reporting sub, the following
+example should do the trick:
+
+ grep { $_[0]->YYCurtok eq $_ } $_[0]->YYExpect
+ and do {
+ #Non-associative token used in an associative expression
+ };
+
+Accessing semantics values on the left of your reducing rule is done
+through the method
+
+ $_[0]->YYSemval( index )
+
+where index is an integer. Its value being I<1 .. n> returns the same values
+than I<$_[1] .. $_[n]>, but I<-n .. 0> returns values on the left of the rule
+beeing reduced (It is related to I<$-n .. $0 .. $n> in yacc, but you
+cannot use I<$_[0]> or I<$_[-n]> constructs in Parse::Yapp for obvious reasons)
+
+
+There is also a provision for a user data area in the parser object,
+accessed by the method:
+
+ $_[0]->YYData
+
+which returns a reference to an anonymous hash, which let you have
+all of your parsing data held inside the object (see the Calc.yp
+or ParseYapp.yp files in the distribution for some examples).
+That's how you can make you parser module reentrant: all of your
+module states and variables are held inside the parser object.
+
+Note: unfortunatly, method calls in Perl have a lot of overhead,
+ and when YYData is used, it may be called a huge number
+ of times. If your are not a *real* purist and efficiency
+ is your concern, you may access directly the user-space
+ in the object: $parser->{USER} wich is a reference to an
+ anonymous hash array, and then benchmark.
+
+If no action is specified for a rule, the equivalant of a default
+action is run, which returns the first parameter:
+
+ { $_[1] }
+
+=item C<In rule actions>
+
+It is also possible to embed semantic actions inside of a rule:
+
+ typedef: TYPE { $type = $_[1] } identlist { ... } ;
+
+When the Parse::Yapp's parser encounter such an embedded action, it modifies
+the grammar as if you wrote (although @x-1 is not a legal lhs value):
+
+ @x-1: /* empty */ { $type = $_[1] };
+ typedef: TYPE @x-1 identlist { ... } ;
+
+where I<x> is a sequential number incremented for each "in rule" action,
+and I<-1> represents the "dot position" in the rule where the action arises.
+
+In such actions, you can use I<$_[1]..$_[n]> variables, which are the
+semantic values on the left of your action.
+
+Be aware that the way Parse::Yapp modifies your grammar because of
+I<in rule actions> can produce, in some cases, spurious conflicts
+that wouldn't happen otherwise.
+
+=item C<Generating the Parser Module>
+
+Now that you grammar file is written, you can use yapp on it
+to generate your parser module:
+
+ yapp -v Calc.yp
+
+will create two files F<Calc.pm>, your parser module, and F<Calc.output>
+a verbose output of your parser rules, conflicts, warnings, states
+and summary.
+
+What your are missing now is a lexer routine.
+
+=item C<The Lexer sub>
+
+is called each time the parser need to read the next token.
+
+It is called with only one argument that is the parser object itself,
+so you can access its methods, specially the
+
+ $_[0]->YYData
+
+data area.
+
+It is its duty to return the next token and value to the parser.
+They C<must> be returned as a list of two variables, the first one
+is the token known by the parser (symbolic or literal), the second
+one beeing anything you want (usualy the content of the token, or the
+literal value) from a simple scalar value to any complex reference,
+as the parsing driver never use it but to call semantic actions:
+
+ ( 'NUMBER', $num )
+or
+ ( '>=', '>=' )
+or
+ ( 'ARRAY', [ @values ] )
+
+When the lexer reach the end of input, it must return the C<''>
+empty token with an undef value:
+
+ ( '', undef )
+
+Note that your lexer should I<never> return C<'error'> as token
+value: for the driver, this is the error token used for error
+recovery and would lead to odd reactions.
+
+Now that you have your lexer written, maybe you will need to output
+meaningful error messages, instead of the default which is to print
+'Parse error.' on STDERR.
+
+So you will need an Error reporting sub.
+
+item C<Error reporting routine>
+
+If you want one, write it knowing that it is passed as parameter
+the parser object. So you can share information whith the lexer
+routine quite easily.
+
+You can also use the C<$_[0]-E<gt>YYErrok> method in it, which will
+resume parsing as if no error occured. Of course, since the invalid
+token is still invalid, you're supposed to fix the problem by
+yourself.
+
+The method C<$_[0]-E<gt>YYLexer> may help you, as it returns a reference
+to the lexer routine, and can be called as
+
+ ($tok,$val)=&{$_[0]->Lexer}
+
+to get the next token and semantic value from the input stream. To
+make them current for the parser, use:
+
+ ($_[0]->YYCurtok, $_[0]->YYCurval) = ($tok, $val)
+
+and know what you're doing...
+
+=item C<Parsing>
+
+Now you've got everything to do the parsing.
+
+First, use the parser module:
+
+ use Calc;
+
+Then create the parser object:
+
+ $parser=new Calc;
+
+Now, call the YYParse method, telling it where to find the lexer
+and error report subs:
+
+ $result=$parser->YYParse(yylex => \&Lexer,
+ yyerror => \&ErrorReport);
+
+(assuming Lexer and ErrorReport subs have been written in your current
+package)
+
+The order in which parameters appear is unimportant.
+
+Et voila.
+
+The YYParse method will do the parse, then return the last semantic
+value returned, or undef if error recovery cannot recover.
+
+If you need to be sure the parse has been successful (in case your
+last returned semantic value I<is> undef) make a call to:
+
+ $parser->YYNberr()
+
+which returns the total number of time the error reporting sub has been called.
+
+=item C<Error Recovery>
+
+in Parse::Yapp is implemented the same way it is in yacc.
+
+=item C<Debugging Parser>
+
+To debug your parser, you can call the YYParse method with a debug parameter:
+
+ $parser->YYParse( ... , yydebug => value, ... )
+
+where value is a bitfield, each bit representing a specific debug output:
+
+ Bit Value Outputs
+ 0x01 Token reading (useful for Lexer debugging)
+ 0x02 States information
+ 0x04 Driver actions (shifts, reduces, accept...)
+ 0x08 Parse Stack dump
+ 0x10 Error Recovery tracing
+
+To have a full debugging ouput, use
+
+ debug => 0x1F
+
+Debugging output is sent to STDERR, and be aware that it can produce
+C<huge> outputs.
+
+=item C<Standalone Parsers>
+
+By default, the parser modules generated will need the Parse::Yapp
+module installed on the system to run. They use the Parse::Yapp::Driver
+which can be safely shared between parsers in the same script.
+
+In the case you'd prefer to have a standalone module generated, use
+the C<-s> switch with yapp: this will automagically copy the driver
+code into your module so you can use/distribute it without the need
+of the Parse::Yapp module, making it really a C<Standalone Parser>.
+
+If you do so, please remember to include Parse::Yapp's copyright notice
+in your main module copyright, so others can know about Parse::Yapp module.
+
+=item C<Source file line numbers>
+
+by default will be included in the generated parser module, which will help
+to find the guilty line in your source file in case of a syntax error.
+You can disable this feature by compiling your grammar with yapp using
+the C<-n> switch.
+
+=back
+
+=head1 BUGS AND SUGGESTIONS
+
+If you find bugs, think of anything that could improve Parse::Yapp
+or have any questions related to it, feel free to contact the author.
+
+=head1 AUTHOR
+
+Francois Desarmenien <francois@fdesar.net>
+
+=head1 SEE ALSO
+
+yapp(1) perl(1) yacc(1) bison(1).
+
+=head1 COPYRIGHT
+
+The Parse::Yapp module and its related modules and shell scripts are copyright
+(c) 1998-2001 Francois Desarmenien, France. All rights reserved.
+
+You may use and distribute them under the terms of either
+the GNU General Public License or the Artistic License,
+as specified in the Perl README file.
+
+If you use the "standalone parser" option so people don't need to install
+Parse::Yapp on their systems in order to run you software, this copyright
+noticed should be included in your software copyright too, and the copyright
+notice in the embedded driver should be left untouched.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Parse/Yapp/Driver.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,471 @@
+#
+# Module Parse::Yapp::Driver
+#
+# This module is part of the Parse::Yapp package available on your
+# nearest CPAN
+#
+# Any use of this module in a standalone parser make the included
+# text under the same copyright as the Parse::Yapp module itself.
+#
+# This notice should remain unchanged.
+#
+# (c) Copyright 1998-2001 Francois Desarmenien, all rights reserved.
+# (see the pod text in Parse::Yapp module for use and distribution rights)
+#
+
+package Parse::Yapp::Driver;
+
+require 5.004;
+
+use strict;
+
+use vars qw ( $VERSION $COMPATIBLE $FILENAME );
+
+$VERSION = '1.05';
+$COMPATIBLE = '0.07';
+$FILENAME=__FILE__;
+
+use Carp;
+
+#Known parameters, all starting with YY (leading YY will be discarded)
+my(%params)=(YYLEX => 'CODE', 'YYERROR' => 'CODE', YYVERSION => '',
+ YYRULES => 'ARRAY', YYSTATES => 'ARRAY', YYDEBUG => '');
+#Mandatory parameters
+my(@params)=('LEX','RULES','STATES');
+
+sub new {
+ my($class)=shift;
+ my($errst,$nberr,$token,$value,$check,$dotpos);
+ my($self)={ ERROR => \&_Error,
+ ERRST => \$errst,
+ NBERR => \$nberr,
+ TOKEN => \$token,
+ VALUE => \$value,
+ DOTPOS => \$dotpos,
+ STACK => [],
+ DEBUG => 0,
+ CHECK => \$check };
+
+ _CheckParams( [], \%params, \@_, $self );
+
+ exists($$self{VERSION})
+ and $$self{VERSION} < $COMPATIBLE
+ and croak "Yapp driver version $VERSION ".
+ "incompatible with version $$self{VERSION}:\n".
+ "Please recompile parser module.";
+
+ ref($class)
+ and $class=ref($class);
+
+ bless($self,$class);
+}
+
+sub YYParse {
+ my($self)=shift;
+ my($retval);
+
+ _CheckParams( \@params, \%params, \@_, $self );
+
+ if($$self{DEBUG}) {
+ _DBLoad();
+ $retval = eval '$self->_DBParse()';#Do not create stab entry on compile
+ $@ and die $@;
+ }
+ else {
+ $retval = $self->_Parse();
+ }
+ $retval
+}
+
+sub YYData {
+ my($self)=shift;
+
+ exists($$self{USER})
+ or $$self{USER}={};
+
+ $$self{USER};
+
+}
+
+sub YYErrok {
+ my($self)=shift;
+
+ ${$$self{ERRST}}=0;
+ undef;
+}
+
+sub YYNberr {
+ my($self)=shift;
+
+ ${$$self{NBERR}};
+}
+
+sub YYRecovering {
+ my($self)=shift;
+
+ ${$$self{ERRST}} != 0;
+}
+
+sub YYAbort {
+ my($self)=shift;
+
+ ${$$self{CHECK}}='ABORT';
+ undef;
+}
+
+sub YYAccept {
+ my($self)=shift;
+
+ ${$$self{CHECK}}='ACCEPT';
+ undef;
+}
+
+sub YYError {
+ my($self)=shift;
+
+ ${$$self{CHECK}}='ERROR';
+ undef;
+}
+
+sub YYSemval {
+ my($self)=shift;
+ my($index)= $_[0] - ${$$self{DOTPOS}} - 1;
+
+ $index < 0
+ and -$index <= @{$$self{STACK}}
+ and return $$self{STACK}[$index][1];
+
+ undef; #Invalid index
+}
+
+sub YYCurtok {
+ my($self)=shift;
+
+ @_
+ and ${$$self{TOKEN}}=$_[0];
+ ${$$self{TOKEN}};
+}
+
+sub YYCurval {
+ my($self)=shift;
+
+ @_
+ and ${$$self{VALUE}}=$_[0];
+ ${$$self{VALUE}};
+}
+
+sub YYExpect {
+ my($self)=shift;
+
+ keys %{$self->{STATES}[$self->{STACK}[-1][0]]{ACTIONS}}
+}
+
+sub YYLexer {
+ my($self)=shift;
+
+ $$self{LEX};
+}
+
+
+#################
+# Private stuff #
+#################
+
+
+sub _CheckParams {
+ my($mandatory,$checklist,$inarray,$outhash)=@_;
+ my($prm,$value);
+ my($prmlst)={};
+
+ while(($prm,$value)=splice(@$inarray,0,2)) {
+ $prm=uc($prm);
+ exists($$checklist{$prm})
+ or croak("Unknow parameter '$prm'");
+ ref($value) eq $$checklist{$prm}
+ or croak("Invalid value for parameter '$prm'");
+ $prm=unpack('@2A*',$prm);
+ $$outhash{$prm}=$value;
+ }
+ for (@$mandatory) {
+ exists($$outhash{$_})
+ or croak("Missing mandatory parameter '".lc($_)."'");
+ }
+}
+
+sub _Error {
+ print "Parse error.\n";
+}
+
+sub _DBLoad {
+ {
+ no strict 'refs';
+
+ exists(${__PACKAGE__.'::'}{_DBParse})#Already loaded ?
+ and return;
+ }
+ my($fname)=__FILE__;
+ my(@drv);
+ open(DRV,"<$fname") or die "Report this as a BUG: Cannot open $fname";
+ while(<DRV>) {
+ /^\s*sub\s+_Parse\s*{\s*$/ .. /^\s*}\s*#\s*_Parse\s*$/
+ and do {
+ s/^#DBG>//;
+ push(@drv,$_);
+ }
+ }
+ close(DRV);
+
+ $drv[0]=~s/_P/_DBP/;
+ eval join('',@drv);
+}
+
+#Note that for loading debugging version of the driver,
+#this file will be parsed from 'sub _Parse' up to '}#_Parse' inclusive.
+#So, DO NOT remove comment at end of sub !!!
+sub _Parse {
+ my($self)=shift;
+
+ my($rules,$states,$lex,$error)
+ = @$self{ 'RULES', 'STATES', 'LEX', 'ERROR' };
+ my($errstatus,$nberror,$token,$value,$stack,$check,$dotpos)
+ = @$self{ 'ERRST', 'NBERR', 'TOKEN', 'VALUE', 'STACK', 'CHECK', 'DOTPOS' };
+
+#DBG> my($debug)=$$self{DEBUG};
+#DBG> my($dbgerror)=0;
+
+#DBG> my($ShowCurToken) = sub {
+#DBG> my($tok)='>';
+#DBG> for (split('',$$token)) {
+#DBG> $tok.= (ord($_) < 32 or ord($_) > 126)
+#DBG> ? sprintf('<%02X>',ord($_))
+#DBG> : $_;
+#DBG> }
+#DBG> $tok.='<';
+#DBG> };
+
+ $$errstatus=0;
+ $$nberror=0;
+ ($$token,$$value)=(undef,undef);
+ @$stack=( [ 0, undef ] );
+ $$check='';
+
+ while(1) {
+ my($actions,$act,$stateno);
+
+ $stateno=$$stack[-1][0];
+ $actions=$$states[$stateno];
+
+#DBG> print STDERR ('-' x 40),"\n";
+#DBG> $debug & 0x2
+#DBG> and print STDERR "In state $stateno:\n";
+#DBG> $debug & 0x08
+#DBG> and print STDERR "Stack:[".
+#DBG> join(',',map { $$_[0] } @$stack).
+#DBG> "]\n";
+
+
+ if (exists($$actions{ACTIONS})) {
+
+ defined($$token)
+ or do {
+ ($$token,$$value)=&$lex($self);
+#DBG> $debug & 0x01
+#DBG> and print STDERR "Need token. Got ".&$ShowCurToken."\n";
+ };
+
+ $act= exists($$actions{ACTIONS}{$$token})
+ ? $$actions{ACTIONS}{$$token}
+ : exists($$actions{DEFAULT})
+ ? $$actions{DEFAULT}
+ : undef;
+ }
+ else {
+ $act=$$actions{DEFAULT};
+#DBG> $debug & 0x01
+#DBG> and print STDERR "Don't need token.\n";
+ }
+
+ defined($act)
+ and do {
+
+ $act > 0
+ and do { #shift
+
+#DBG> $debug & 0x04
+#DBG> and print STDERR "Shift and go to state $act.\n";
+
+ $$errstatus
+ and do {
+ --$$errstatus;
+
+#DBG> $debug & 0x10
+#DBG> and $dbgerror
+#DBG> and $$errstatus == 0
+#DBG> and do {
+#DBG> print STDERR "**End of Error recovery.\n";
+#DBG> $dbgerror=0;
+#DBG> };
+ };
+
+
+ push(@$stack,[ $act, $$value ]);
+
+ $$token ne '' #Don't eat the eof
+ and $$token=$$value=undef;
+ next;
+ };
+
+ #reduce
+ my($lhs,$len,$code,@sempar,$semval);
+ ($lhs,$len,$code)=@{$$rules[-$act]};
+
+#DBG> $debug & 0x04
+#DBG> and $act
+#DBG> and print STDERR "Reduce using rule ".-$act." ($lhs,$len): ";
+
+ $act
+ or $self->YYAccept();
+
+ $$dotpos=$len;
+
+ unpack('A1',$lhs) eq '@' #In line rule
+ and do {
+ $lhs =~ /^\@[0-9]+\-([0-9]+)$/
+ or die "In line rule name '$lhs' ill formed: ".
+ "report it as a BUG.\n";
+ $$dotpos = $1;
+ };
+
+ @sempar = $$dotpos
+ ? map { $$_[1] } @$stack[ -$$dotpos .. -1 ]
+ : ();
+
+ $semval = $code ? &$code( $self, @sempar )
+ : @sempar ? $sempar[0] : undef;
+
+ splice(@$stack,-$len,$len);
+
+ $$check eq 'ACCEPT'
+ and do {
+
+#DBG> $debug & 0x04
+#DBG> and print STDERR "Accept.\n";
+
+ return($semval);
+ };
+
+ $$check eq 'ABORT'
+ and do {
+
+#DBG> $debug & 0x04
+#DBG> and print STDERR "Abort.\n";
+
+ return(undef);
+
+ };
+
+#DBG> $debug & 0x04
+#DBG> and print STDERR "Back to state $$stack[-1][0], then ";
+
+ $$check eq 'ERROR'
+ or do {
+#DBG> $debug & 0x04
+#DBG> and print STDERR
+#DBG> "go to state $$states[$$stack[-1][0]]{GOTOS}{$lhs}.\n";
+
+#DBG> $debug & 0x10
+#DBG> and $dbgerror
+#DBG> and $$errstatus == 0
+#DBG> and do {
+#DBG> print STDERR "**End of Error recovery.\n";
+#DBG> $dbgerror=0;
+#DBG> };
+
+ push(@$stack,
+ [ $$states[$$stack[-1][0]]{GOTOS}{$lhs}, $semval ]);
+ $$check='';
+ next;
+ };
+
+#DBG> $debug & 0x04
+#DBG> and print STDERR "Forced Error recovery.\n";
+
+ $$check='';
+
+ };
+
+ #Error
+ $$errstatus
+ or do {
+
+ $$errstatus = 1;
+ &$error($self);
+ $$errstatus # if 0, then YYErrok has been called
+ or next; # so continue parsing
+
+#DBG> $debug & 0x10
+#DBG> and do {
+#DBG> print STDERR "**Entering Error recovery.\n";
+#DBG> ++$dbgerror;
+#DBG> };
+
+ ++$$nberror;
+
+ };
+
+ $$errstatus == 3 #The next token is not valid: discard it
+ and do {
+ $$token eq '' # End of input: no hope
+ and do {
+#DBG> $debug & 0x10
+#DBG> and print STDERR "**At eof: aborting.\n";
+ return(undef);
+ };
+
+#DBG> $debug & 0x10
+#DBG> and print STDERR "**Dicard invalid token ".&$ShowCurToken.".\n";
+
+ $$token=$$value=undef;
+ };
+
+ $$errstatus=3;
+
+ while( @$stack
+ and ( not exists($$states[$$stack[-1][0]]{ACTIONS})
+ or not exists($$states[$$stack[-1][0]]{ACTIONS}{error})
+ or $$states[$$stack[-1][0]]{ACTIONS}{error} <= 0)) {
+
+#DBG> $debug & 0x10
+#DBG> and print STDERR "**Pop state $$stack[-1][0].\n";
+
+ pop(@$stack);
+ }
+
+ @$stack
+ or do {
+
+#DBG> $debug & 0x10
+#DBG> and print STDERR "**No state left on stack: aborting.\n";
+
+ return(undef);
+ };
+
+ #shift the error token
+
+#DBG> $debug & 0x10
+#DBG> and print STDERR "**Shift \$error token and go to state ".
+#DBG> $$states[$$stack[-1][0]]{ACTIONS}{error}.
+#DBG> ".\n";
+
+ push(@$stack, [ $$states[$$stack[-1][0]]{ACTIONS}{error}, undef ]);
+
+ }
+
+ #never reached
+ croak("Error in driver logic. Please, report it as a BUG");
+
+}#_Parse
+#DO NOT remove comment
+
+1;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Parse/Yapp/Grammar.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,381 @@
+#
+# Module Parse::Yapp::Grammar
+#
+# (c) Copyright 1998-2001 Francois Desarmenien, all rights reserved.
+# (see the pod text in Parse::Yapp module for use and distribution rights)
+#
+package Parse::Yapp::Grammar;
+@ISA=qw( Parse::Yapp::Options );
+
+require 5.004;
+
+use Carp;
+use strict;
+use Parse::Yapp::Options;
+use Parse::Yapp::Parse;
+
+###############
+# Constructor #
+###############
+sub new {
+ my($class)=shift;
+ my($values);
+
+ my($self)=$class->SUPER::new(@_);
+
+ my($parser)=new Parse::Yapp::Parse;
+
+ defined($self->Option('input'))
+ or croak "No input grammar";
+
+ $values = $parser->Parse($self->Option('input'));
+
+ undef($parser);
+
+ $$self{GRAMMAR}=_ReduceGrammar($values);
+
+ ref($class)
+ and $class=ref($class);
+
+ bless($self, $class);
+}
+
+###########
+# Methods #
+###########
+##########################
+# Method To View Grammar #
+##########################
+sub ShowRules {
+ my($self)=shift;
+ my($rules)=$$self{GRAMMAR}{RULES};
+ my($ruleno)=-1;
+ my($text);
+
+ for (@$rules) {
+ my($lhs,$rhs)=@$_;
+
+ $text.=++$ruleno.":\t".$lhs." -> ";
+ if(@$rhs) {
+ $text.=join(' ',map { $_ eq chr(0) ? '$end' : $_ } @$rhs);
+ }
+ else {
+ $text.="/* empty */";
+ }
+ $text.="\n";
+ }
+ $text;
+}
+
+###########################
+# Method To View Warnings #
+###########################
+sub Warnings {
+ my($self)=shift;
+ my($text);
+ my($grammar)=$$self{GRAMMAR};
+
+ exists($$grammar{UUTERM})
+ and do {
+ $text="Unused terminals:\n\n";
+ for (@{$$grammar{UUTERM}}) {
+ $text.="\t$$_[0], declared line $$_[1]\n";
+ }
+ $text.="\n";
+ };
+ exists($$grammar{UUNTERM})
+ and do {
+ $text.="Useless non-terminals:\n\n";
+ for (@{$$grammar{UUNTERM}}) {
+ $text.="\t$$_[0], declared line $$_[1]\n";
+ }
+ $text.="\n";
+ };
+ exists($$grammar{UURULES})
+ and do {
+ $text.="Useless rules:\n\n";
+ for (@{$$grammar{UURULES}}) {
+ $text.="\t$$_[0] -> ".join(' ',@{$$_[1]})."\n";
+ }
+ $text.="\n";
+ };
+ $text;
+}
+
+######################################
+# Method to get summary about parser #
+######################################
+sub Summary {
+ my($self)=shift;
+ my($text);
+
+ $text ="Number of rules : ".
+ scalar(@{$$self{GRAMMAR}{RULES}})."\n";
+ $text.="Number of terminals : ".
+ scalar(keys(%{$$self{GRAMMAR}{TERM}}))."\n";
+ $text.="Number of non-terminals : ".
+ scalar(keys(%{$$self{GRAMMAR}{NTERM}}))."\n";
+ $text;
+}
+
+###############################
+# Method to Ouput rules table #
+###############################
+sub RulesTable {
+ my($self)=shift;
+ my($inputfile)=$self->Option('inputfile');
+ my($linenums)=$self->Option('linenumbers');
+ my($rules)=$$self{GRAMMAR}{RULES};
+ my($ruleno);
+ my($text);
+
+ defined($inputfile)
+ or $inputfile = 'unkown';
+
+ $text="[\n\t";
+
+ $text.=join(",\n\t",
+ map {
+ my($lhs,$rhs,$code)=@$_[0,1,3];
+ my($len)=scalar(@$rhs);
+ my($text);
+
+ $text.="[#Rule ".$ruleno++."\n\t\t '$lhs', $len,";
+ if($code) {
+ $text.= "\nsub".
+ ( $linenums
+ ? qq(\n#line $$code[1] "$inputfile"\n)
+ : " ").
+ "{$$code[0]}";
+ }
+ else {
+ $text.=' undef';
+ }
+ $text.="\n\t]";
+
+ $text;
+ } @$rules);
+
+ $text.="\n]";
+
+ $text;
+}
+
+################################
+# Methods to get HEAD and TAIL #
+################################
+sub Head {
+ my($self)=shift;
+ my($inputfile)=$self->Option('inputfile');
+ my($linenums)=$self->Option('linenumbers');
+ my($text);
+
+ $$self{GRAMMAR}{HEAD}[0]
+ or return '';
+
+ defined($inputfile)
+ or $inputfile = 'unkown';
+
+ for (@{$$self{GRAMMAR}{HEAD}}) {
+ $linenums
+ and $text.=qq(#line $$_[1] "$inputfile"\n);
+ $text.=$$_[0];
+ }
+ $text
+}
+
+sub Tail {
+ my($self)=shift;
+ my($inputfile)=$self->Option('inputfile');
+ my($linenums)=$self->Option('linenumbers');
+ my($text);
+
+ $$self{GRAMMAR}{TAIL}[0]
+ or return '';
+
+ defined($inputfile)
+ or $inputfile = 'unkown';
+
+ $linenums
+ and $text=qq(#line $$self{GRAMMAR}{TAIL}[1] "$inputfile"\n);
+ $text.=$$self{GRAMMAR}{TAIL}[0];
+
+ $text
+}
+
+
+#################
+# Private Stuff #
+#################
+
+sub _UsefulRules {
+ my($rules,$nterm) = @_;
+ my($ufrules,$ufnterm);
+ my($done);
+
+ $ufrules=pack('b'.@$rules);
+ $ufnterm={};
+
+ vec($ufrules,0,1)=1; #start rules IS always useful
+
+ RULE:
+ for (1..$#$rules) { # Ignore start rule
+ for my $sym (@{$$rules[$_][1]}) {
+ exists($$nterm{$sym})
+ and next RULE;
+ }
+ vec($ufrules,$_,1)=1;
+ ++$$ufnterm{$$rules[$_][0]};
+ }
+
+ do {
+ $done=1;
+
+ RULE:
+ for (grep { vec($ufrules,$_,1) == 0 } 1..$#$rules) {
+ for my $sym (@{$$rules[$_][1]}) {
+ exists($$nterm{$sym})
+ and not exists($$ufnterm{$sym})
+ and next RULE;
+ }
+ vec($ufrules,$_,1)=1;
+ exists($$ufnterm{$$rules[$_][0]})
+ or do {
+ $done=0;
+ ++$$ufnterm{$$rules[$_][0]};
+ };
+ }
+
+ }until($done);
+
+ ($ufrules,$ufnterm)
+
+}#_UsefulRules
+
+sub _Reachable {
+ my($rules,$nterm,$term,$ufrules,$ufnterm)=@_;
+ my($reachable);
+ my(@fifo)=( 0 );
+
+ $reachable={ '$start' => 1 }; #$start is always reachable
+
+ while(@fifo) {
+ my($ruleno)=shift(@fifo);
+
+ for my $sym (@{$$rules[$ruleno][1]}) {
+
+ exists($$term{$sym})
+ and do {
+ ++$$reachable{$sym};
+ next;
+ };
+
+ ( not exists($$ufnterm{$sym})
+ or exists($$reachable{$sym}) )
+ and next;
+
+ ++$$reachable{$sym};
+ push(@fifo, grep { vec($ufrules,$_,1) } @{$$nterm{$sym}});
+ }
+ }
+
+ $reachable
+
+}#_Reachable
+
+sub _SetNullable {
+ my($rules,$term,$nullable) = @_;
+ my(@nrules);
+ my($done);
+
+ RULE:
+ for (@$rules) {
+ my($lhs,$rhs)=@$_;
+
+ exists($$nullable{$lhs})
+ and next;
+
+ for (@$rhs) {
+ exists($$term{$_})
+ and next RULE;
+ }
+ push(@nrules,[$lhs,$rhs]);
+ }
+
+ do {
+ $done=1;
+
+ RULE:
+ for (@nrules) {
+ my($lhs,$rhs)=@$_;
+
+ exists($$nullable{$lhs})
+ and next;
+
+ for (@$rhs) {
+ exists($$nullable{$_})
+ or next RULE;
+ }
+ $done=0;
+ ++$$nullable{$lhs};
+ }
+
+ }until($done);
+}
+
+sub _ReduceGrammar {
+ my($values)=@_;
+ my($ufrules,$ufnterm,$reachable);
+ my($grammar)={ HEAD => $values->{HEAD},
+ TAIL => $values->{TAIL},
+ EXPECT => $values->{EXPECT} };
+ my($rules,$nterm,$term) = @$values {'RULES', 'NTERM', 'TERM'};
+
+ ($ufrules,$ufnterm) = _UsefulRules($rules,$nterm);
+
+ exists($$ufnterm{$values->{START}})
+ or die "*Fatal* Start symbol $values->{START} derives nothing, at eof\n";
+
+ $reachable = _Reachable($rules,$nterm,$term,$ufrules,$ufnterm);
+
+ $$grammar{TERM}{chr(0)}=undef;
+ for my $sym (keys %$term) {
+ ( exists($$reachable{$sym})
+ or exists($values->{PREC}{$sym}) )
+ and do {
+ $$grammar{TERM}{$sym}
+ = defined($$term{$sym}[0]) ? $$term{$sym} : undef;
+ next;
+ };
+ push(@{$$grammar{UUTERM}},[ $sym, $values->{SYMS}{$sym} ]);
+ }
+
+ $$grammar{NTERM}{'$start'}=[];
+ for my $sym (keys %$nterm) {
+ exists($$reachable{$sym})
+ and do {
+ exists($values->{NULL}{$sym})
+ and ++$$grammar{NULLABLE}{$sym};
+ $$grammar{NTERM}{$sym}=[];
+ next;
+ };
+ push(@{$$grammar{UUNTERM}},[ $sym, $values->{SYMS}{$sym} ]);
+ }
+
+ for my $ruleno (0..$#$rules) {
+ vec($ufrules,$ruleno,1)
+ and exists($$grammar{NTERM}{$$rules[$ruleno][0]})
+ and do {
+ push(@{$$grammar{RULES}},$$rules[$ruleno]);
+ push(@{$$grammar{NTERM}{$$rules[$ruleno][0]}},$#{$$grammar{RULES}});
+ next;
+ };
+ push(@{$$grammar{UURULES}},[ @{$$rules[$ruleno]}[0,1] ]);
+ }
+
+ _SetNullable(@$grammar{'RULES', 'TERM', 'NULLABLE'});
+
+ $grammar;
+}#_ReduceGrammar
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Parse/Yapp/Lalr.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,939 @@
+#
+# Module Parse::Yapp::Lalr
+#
+# (c) Copyright 1998-2001 Francois Desarmenien, all rights reserved.
+# (see the pod text in Parse::Yapp module for use and distribution rights)
+#
+package Parse::Yapp::Lalr;
+@ISA=qw( Parse::Yapp::Grammar );
+
+require 5.004;
+
+use Parse::Yapp::Grammar;
+
+=for nobody
+
+Parse::Yapp::Compile Object Structure:
+--------------------------------------
+{
+ GRAMMAR => Parse::Yapp::Grammar,
+ STATES => [ { CORE => [ items... ],
+ ACTIONS => { term => action }
+ GOTOS => { nterm => stateno }
+ }... ]
+ CONFLICTS=>{ SOLVED => { stateno => [ ruleno, token, solved ] },
+ FORCED => { TOTAL => [ nbsr, nbrr ],
+ DETAIL => { stateno => { TOTAL => [ nbsr, nbrr ] }
+ LIST => [ ruleno, token ]
+ }
+ }
+ }
+}
+
+'items' are of form: [ ruleno, dotpos ]
+'term' in ACTIONS is '' means default action
+'action' may be:
+ undef: explicit error (nonassociativity)
+ 0 : accept
+ >0 : shift and go to state 'action'
+ <0 : reduce using rule -'action'
+'solved' may have values of:
+ 'shift' if solved as Shift
+ 'reduce' if solved as Reduce
+ 'error' if solved by discarding both Shift and Reduce (nonassoc)
+
+SOLVED is a set of states containing Solved conflicts
+FORCED are forced conflict resolutions
+
+nbsr and nbrr are number of shift/reduce and reduce/reduce conflicts
+
+TOTAL is the total number of SR/RR conflicts for the parser
+
+DETAIL is the detail of conflicts for each state
+TOTAL is the total number of SR/RR conflicts for a state
+LIST is the list of discarded reductions (for display purpose only)
+
+
+=cut
+
+use strict;
+
+use Carp;
+
+###############
+# Constructor #
+###############
+sub new {
+ my($class)=shift;
+
+ ref($class)
+ and $class=ref($class);
+
+ my($self)=$class->SUPER::new(@_);
+ $self->_Compile();
+ bless($self,$class);
+}
+###########
+# Methods #
+###########
+
+###########################
+# Method To View Warnings #
+###########################
+sub Warnings {
+ my($self)=shift;
+ my($text);
+ my($nbsr,$nbrr)=@{$$self{CONFLICTS}{FORCED}{TOTAL}};
+
+ $text=$self->SUPER::Warnings();
+
+ $nbsr != $$self{GRAMMAR}{EXPECT}
+ and $text.="$nbsr shift/reduce conflict".($nbsr > 1 ? "s" : "");
+
+ $nbrr
+ and do {
+ $nbsr
+ and $text.=" and ";
+ $text.="$nbrr reduce/reduce conflict".($nbrr > 1 ? "s" : "");
+ };
+
+ ( $nbsr != $$self{GRAMMAR}{EXPECT}
+ or $nbrr)
+ and $text.="\n";
+
+ $text;
+}
+#############################
+# Method To View DFA States #
+#############################
+sub ShowDfa {
+ my($self)=shift;
+ my($text);
+ my($grammar,$states)=($$self{GRAMMAR}, $$self{STATES});
+
+ for my $stateno (0..$#$states) {
+ my(@shifts,@reduces,@errors,$default);
+
+ $text.="State $stateno:\n\n";
+
+ #Dump Kernel Items
+ for (sort { $$a[0] <=> $$b[0]
+ or $$a[1] <=> $$b[1] } @{$$states[$stateno]{'CORE'}}) {
+ my($ruleno,$pos)=@$_;
+ my($lhs,$rhs)=@{$$grammar{RULES}[$ruleno]}[0,1];
+ my(@rhscopy)=@$rhs;
+
+ $ruleno
+ or $rhscopy[-1] = '$end';
+
+ splice(@rhscopy,$pos,0,'.');
+ $text.= "\t$lhs -> ".join(' ',@rhscopy)."\t(Rule $ruleno)\n";
+ }
+
+ #Prepare Actions
+ for (keys(%{$$states[$stateno]{ACTIONS}})) {
+ my($term,$action)=($_,$$states[$stateno]{ACTIONS}{$_});
+
+ $term eq chr(0)
+ and $term = '$end';
+
+ not defined($action)
+ and do {
+ push(@errors,$term);
+ next;
+ };
+
+ $action > 0
+ and do {
+ push(@shifts,[ $term, $action ]);
+ next;
+ };
+
+ $action = -$action;
+
+ $term
+ or do {
+ $default= [ '$default', $action ];
+ next;
+ };
+
+ push(@reduces,[ $term, $action ]);
+ }
+
+ #Dump shifts
+ @shifts
+ and do {
+ $text.="\n";
+ for (sort { $$a[0] cmp $$b[0] } @shifts) {
+ my($term,$shift)=@$_;
+
+ $text.="\t$term\tshift, and go to state $shift\n";
+ }
+ };
+
+ #Dump errors
+ @errors
+ and do {
+ $text.="\n";
+ for my $term (sort { $a cmp $b } @errors) {
+ $text.="\t$term\terror (nonassociative)\n";
+ }
+ };
+
+ #Prepare reduces
+ exists($$self{CONFLICTS}{FORCED}{DETAIL}{$stateno})
+ and push(@reduces,@{$$self{CONFLICTS}{FORCED}{DETAIL}{$stateno}{LIST}});
+
+ @reduces=sort { $$a[0] cmp $$b[0] or $$a[1] <=> $$b[1] } @reduces;
+
+ defined($default)
+ and push(@reduces,$default);
+
+ #Dump reduces
+ @reduces
+ and do {
+ $text.="\n";
+ for (@reduces) {
+ my($term,$ruleno)=@$_;
+ my($discard);
+
+ $ruleno < 0
+ and do {
+ ++$discard;
+ $ruleno = -$ruleno;
+ };
+
+ $text.= "\t$term\t".($discard ? "[" : "");
+ if($ruleno) {
+ $text.= "reduce using rule $ruleno ".
+ "($$grammar{RULES}[$ruleno][0])";
+ }
+ else {
+ $text.='accept';
+ }
+ $text.=($discard ? "]" : "")."\n";
+ }
+ };
+
+ #Dump gotos
+ exists($$states[$stateno]{GOTOS})
+ and do {
+ $text.= "\n";
+ for (keys(%{$$states[$stateno]{GOTOS}})) {
+ $text.= "\t$_\tgo to state $$states[$stateno]{GOTOS}{$_}\n";
+ }
+ };
+
+ $text.="\n";
+ }
+ $text;
+}
+
+######################################
+# Method to get summary about parser #
+######################################
+sub Summary {
+ my($self)=shift;
+ my($text);
+
+ $text=$self->SUPER::Summary();
+ $text.="Number of states : ".
+ scalar(@{$$self{STATES}})."\n";
+ $text;
+}
+
+#######################################
+# Method To Get Infos about conflicts #
+#######################################
+sub Conflicts {
+ my($self)=shift;
+ my($states)=$$self{STATES};
+ my($conflicts)=$$self{CONFLICTS};
+ my($text);
+
+ for my $stateno ( sort { $a <=> $b } keys(%{$$conflicts{SOLVED}})) {
+
+ for (@{$$conflicts{SOLVED}{$stateno}}) {
+ my($ruleno,$token,$how)=@$_;
+
+ $token eq chr(0)
+ and $token = '$end';
+
+ $text.="Conflict in state $stateno between rule ".
+ "$ruleno and token $token resolved as $how.\n";
+ }
+ };
+
+ for my $stateno ( sort { $a <=> $b } keys(%{$$conflicts{FORCED}{DETAIL}})) {
+ my($nbsr,$nbrr)=@{$$conflicts{FORCED}{DETAIL}{$stateno}{TOTAL}};
+
+ $text.="State $stateno contains ";
+
+ $nbsr
+ and $text.="$nbsr shift/reduce conflict".
+ ($nbsr > 1 ? "s" : "");
+
+ $nbrr
+ and do {
+ $nbsr
+ and $text.=" and ";
+
+ $text.="$nbrr reduce/reduce conflict".
+ ($nbrr > 1 ? "s" : "");
+ };
+ $text.="\n";
+ };
+
+ $text;
+}
+
+#################################
+# Method to dump parsing tables #
+#################################
+sub DfaTable {
+ my($self)=shift;
+ my($states)=$$self{STATES};
+ my($stateno);
+ my($text);
+
+ $text="[\n\t{";
+
+ $text.=join("\n\t},\n\t{",
+ map {
+ my($state)=$_;
+ my($text);
+
+ $text="#State ".$stateno++."\n\t\t";
+
+ ( not exists($$state{ACTIONS}{''})
+ or keys(%{$$state{ACTIONS}}) > 1)
+ and do {
+
+ $text.="ACTIONS => {\n\t\t\t";
+
+ $text.=join(",\n\t\t\t",
+ map {
+ my($term,$action)=($_,$$state{ACTIONS}{$_});
+ my($text);
+
+ if(substr($term,0,1) eq "'") {
+ $term=~s/([\@\$\"])/\\$1/g;
+ $term=~s/^'|'$/"/g;
+ }
+ else {
+ $term= $term eq chr(0)
+ ? "''"
+ : "'$term'";
+ }
+
+ if(defined($action)) {
+ $action=int($action);
+ }
+ else {
+ $action='undef';
+ }
+
+ "$term => $action";
+
+ } grep { $_ } keys(%{$$state{ACTIONS}}));
+
+ $text.="\n\t\t}";
+ };
+
+ exists($$state{ACTIONS}{''})
+ and do {
+ keys(%{$$state{ACTIONS}}) > 1
+ and $text.=",\n\t\t";
+
+ $text.="DEFAULT => $$state{ACTIONS}{''}";
+ };
+
+ exists($$state{GOTOS})
+ and do {
+ $text.=",\n\t\tGOTOS => {\n\t\t\t";
+ $text.=join(",\n\t\t\t",
+ map {
+ my($nterm,$stateno)=($_,$$state{GOTOS}{$_});
+ my($text);
+
+ "'$nterm' => $stateno";
+
+ } keys(%{$$state{GOTOS}}));
+ $text.="\n\t\t}";
+ };
+
+ $text;
+
+ }@$states);
+
+ $text.="\n\t}\n]";
+
+ $text;
+
+}
+
+
+####################################
+# Method to build Dfa from Grammar #
+####################################
+sub _Compile {
+ my($self)=shift;
+ my($grammar,$states);
+
+ $grammar=$self->{GRAMMAR};
+
+ $states = _LR0($grammar);
+
+ $self->{CONFLICTS} = _LALR($grammar,$states);
+
+ $self->{STATES}=$states;
+}
+
+#########################
+# LR0 States Generation #
+#########################
+#
+###########################
+# General digraph routine #
+###########################
+sub _Digraph {
+ my($rel,$F)=@_;
+ my(%N,@S);
+ my($infinity)=(~(1<<31));
+ my($Traverse);
+
+ $Traverse = sub {
+ my($x,$d)=@_;
+ my($y);
+
+ push(@S,$x);
+ $N{$x}=$d;
+
+ exists($$rel{$x})
+ and do {
+ for $y (keys(%{$$rel{$x}})) {
+ exists($N{$y})
+ or &$Traverse($y,$d+1);
+
+ $N{$y} < $N{$x}
+ and $N{$x} = $N{$y};
+
+ $$F{$x}|=$$F{$y};
+ }
+ };
+
+ $N{$x} == $d
+ and do {
+ for(;;) {
+ $y=pop(@S);
+ $N{$y}=$infinity;
+ $y eq $x
+ and last;
+ $$F{$y}=$$F{$x};
+ }
+ };
+ };
+
+ for (keys(%$rel)) {
+ exists($N{$_})
+ or &$Traverse($_,1);
+ }
+}
+#######################
+# Generate LR0 states #
+#######################
+=for nobody
+Formula used for closures:
+
+ CLOSE(A) = DCLOSE(A) u U (CLOSE(B) | A close B)
+
+where:
+
+ DCLOSE(A) = { [ A -> alpha ] in P }
+
+ A close B iff [ A -> B gamma ] in P
+
+=cut
+sub _SetClosures {
+ my($grammar)=@_;
+ my($rel,$closures);
+
+ for my $symbol (keys(%{$$grammar{NTERM}})) {
+ $closures->{$symbol}=pack('b'.@{$$grammar{RULES}});
+
+ for my $ruleno (@{$$grammar{NTERM}{$symbol}}) {
+ my($rhs)=$$grammar{RULES}[$ruleno][1];
+
+ vec($closures->{$symbol},$ruleno,1)=1;
+
+ @$rhs > 0
+ and exists($$grammar{NTERM}{$$rhs[0]})
+ and ++$rel->{$symbol}{$$rhs[0]};
+ }
+ }
+ _Digraph($rel,$closures);
+
+ $closures
+}
+
+sub _Closures {
+ my($grammar,$core,$closures)=@_;
+ my($ruleset)=pack('b'.@{$$grammar{RULES}});
+
+ for (@$core) {
+ my($ruleno,$pos)=@$_;
+ my($rhs)=$$grammar{RULES}[$ruleno][1];
+
+ $pos < @$rhs
+ and exists($closures->{$$rhs[$pos]})
+ and $ruleset|=$closures->{$$rhs[$pos]};
+ }
+ [ @$core, map { [ $_, 0 ] }
+ grep { vec($ruleset,$_,1) }
+ 0..$#{$$grammar{RULES}} ];
+}
+
+sub _Transitions {
+ my($grammar,$cores,$closures,$states,$stateno)=@_;
+ my($core)=$$states[$stateno]{'CORE'};
+ my(%transitions);
+
+ for (@{_Closures($grammar,$core,$closures)}) {
+ my($ruleno,$pos)=@$_;
+ my($rhs)=$$grammar{RULES}[$ruleno][1];
+
+ $pos == @$rhs
+ and do {
+ push(@{$$states[$stateno]{ACTIONS}{''}},$ruleno);
+ next;
+ };
+ push(@{$transitions{$$rhs[$pos]}},[ $ruleno, $pos+1 ]);
+ }
+
+ for (keys(%transitions)) {
+ my($symbol,$core)=($_,$transitions{$_});
+ my($corekey)=join(',',map { join('.',@$_) }
+ sort { $$a[0] <=> $$b[0]
+ or $$a[1] <=> $$b[1] }
+ @$core);
+ my($tostateno);
+
+ exists($cores->{$corekey})
+ or do {
+ push(@$states,{ 'CORE' => $core });
+ $cores->{$corekey}=$#$states;
+ };
+
+ $tostateno=$cores->{$corekey};
+ push(@{$$states[$tostateno]{FROM}},$stateno);
+
+ exists($$grammar{TERM}{$_})
+ and do {
+ $$states[$stateno]{ACTIONS}{$_} = [ $tostateno ];
+ next;
+ };
+ $$states[$stateno]{GOTOS}{$_} = $tostateno;
+ }
+}
+
+sub _LR0 {
+ my($grammar)=@_;
+ my($states) = [];
+ my($stateno);
+ my($closures); #$closures={ nterm => ruleset,... }
+ my($cores)={}; # { "itemlist" => stateno, ... }
+ # where "itemlist" has the form:
+ # "ruleno.pos,ruleno.pos" ordered by ruleno,pos
+
+ $closures = _SetClosures($grammar);
+ push(@$states,{ 'CORE' => [ [ 0, 0 ] ] });
+ for($stateno=0;$stateno<@$states;++$stateno) {
+ _Transitions($grammar,$cores,$closures,$states,$stateno);
+ }
+
+ $states
+}
+
+#########################################################
+# Add Lookahead tokens where needed to make LALR states #
+#########################################################
+=for nobody
+ Compute First sets for non-terminal using the following formula:
+
+ FIRST(A) = { a in T u { epsilon } | A l a }
+ u
+ U { FIRST(B) | B in V and A l B }
+
+ where:
+
+ A l x iff [ A -> X1 X2 .. Xn x alpha ] in P and Xi =>* epsilon, 1 <= i <= n
+=cut
+sub _SetFirst {
+ my($grammar,$termlst,$terminx)=@_;
+ my($rel,$first)=( {}, {} );
+
+ for my $symbol (keys(%{$$grammar{NTERM}})) {
+ $first->{$symbol}=pack('b'.@$termlst);
+
+ RULE:
+ for my $ruleno (@{$$grammar{NTERM}{$symbol}}) {
+ my($rhs)=$$grammar{RULES}[$ruleno][1];
+
+ for (@$rhs) {
+ exists($terminx->{$_})
+ and do {
+ vec($first->{$symbol},$terminx->{$_},1)=1;
+ next RULE;
+ };
+ ++$rel->{$symbol}{$_};
+ exists($$grammar{NULLABLE}{$_})
+ or next RULE;
+ }
+ vec($first->{$symbol},0,1)=1;
+ }
+ }
+ _Digraph($rel,$first);
+
+ $first
+}
+
+sub _Preds {
+ my($states,$stateno,$len)=@_;
+ my($queue, $preds);
+
+ $len
+ or return [ $stateno ];
+
+ $queue=[ [ $stateno, $len ] ];
+ while(@$queue) {
+ my($pred) = shift(@$queue);
+ my($stateno, $len) = @$pred;
+
+ $len == 1
+ and do {
+ push(@$preds,@{$states->[$stateno]{FROM}});
+ next;
+ };
+
+ push(@$queue, map { [ $_, $len - 1 ] }
+ @{$states->[$stateno]{FROM}});
+ }
+
+ # Pass @$preds through a hash to ensure unicity
+ [ keys( %{ +{ map { ($_,1) } @$preds } } ) ];
+}
+
+sub _FirstSfx {
+ my($grammar,$firstset,$termlst,$terminx,$ruleno,$pos,$key)=@_;
+ my($first)=pack('b'.@$termlst);
+ my($rhs)=$$grammar{RULES}[$ruleno][1];
+
+ for (;$pos < @$rhs;++$pos) {
+ exists($terminx->{$$rhs[$pos]})
+ and do {
+ vec($first,$terminx->{$$rhs[$pos]},1)=1;
+ return($first);
+ };
+ $first|=$firstset->{$$rhs[$pos]};
+
+ vec($first,0,1)
+ and vec($first,0,1)=0;
+
+ exists($$grammar{NULLABLE}{$$rhs[$pos]})
+ or return($first);
+
+ }
+ vec($first,0,1)=1;
+ $first;
+}
+
+=for noboby
+ Compute Follow sets using following formula:
+
+ FOLLOW(p,A) = READ(p,A)
+ u
+ U { FOLLOW(q,B) | (p,A) include (q,B)
+
+ where:
+
+ READ(p,A) = U { FIRST(beta) | [ A -> alpha A . beta ] in KERNEL(GOTO(p,A))
+ } - { epsilon }
+
+ (p,a) include (q,B) iff [ B -> alpha A . beta ] in KERNEL(GOTO(p,A),
+ epsilon in FIRST(beta) and
+ q in PRED(p,alpha)
+=cut
+sub _ComputeFollows {
+ my($grammar,$states,$termlst)=@_;
+ my($firstset,$terminx);
+ my($inconsistent, $rel, $follows, $sfx)= ( {}, {}, {}, {} );
+
+ %$terminx= map { ($termlst->[$_],$_) } 0..$#$termlst;
+
+ $firstset=_SetFirst($grammar,$termlst,$terminx);
+
+ for my $stateno (0..$#$states) {
+ my($state)=$$states[$stateno];
+
+ exists($$state{ACTIONS}{''})
+ and ( @{$$state{ACTIONS}{''}} > 1
+ or keys(%{$$state{ACTIONS}}) > 1 )
+ and do {
+ ++$inconsistent->{$stateno};
+
+ for my $ruleno (@{$$state{ACTIONS}{''}}) {
+ my($lhs,$rhs)=@{$$grammar{RULES}[$ruleno]}[0,1];
+
+ for my $predno (@{_Preds($states,$stateno,scalar(@$rhs))}) {
+ ++$rel->{"$stateno.$ruleno"}{"$predno.$lhs"};
+ }
+ }
+ };
+
+ exists($$state{GOTOS})
+ or next;
+
+ for my $symbol (keys(%{$$state{GOTOS}})) {
+ my($tostate)=$$states[$$state{GOTOS}{$symbol}];
+ my($goto)="$stateno.$symbol";
+
+ $follows->{$goto}=pack('b'.@$termlst);
+
+ for my $item (@{$$tostate{'CORE'}}) {
+ my($ruleno,$pos)=@$item;
+ my($key)="$ruleno.$pos";
+
+ exists($sfx->{$key})
+ or $sfx->{$key} = _FirstSfx($grammar,$firstset,
+ $termlst,$terminx,
+ $ruleno,$pos,$key);
+
+ $follows->{$goto}|=$sfx->{$key};
+
+ vec($follows->{$goto},0,1)
+ and do {
+ my($lhs)=$$grammar{RULES}[$ruleno][0];
+
+ vec($follows->{$goto},0,1)=0;
+
+ for my $predno (@{_Preds($states,$stateno,$pos-1)}) {
+ ++$rel->{$goto}{"$predno.$lhs"};
+ }
+ };
+ }
+ }
+ }
+ _Digraph($rel,$follows);
+
+ ($follows,$inconsistent)
+}
+
+sub _ComputeLA {
+ my($grammar,$states)=@_;
+ my($termlst)= [ '',keys(%{$$grammar{TERM}}) ];
+
+ my($follows,$inconsistent) = _ComputeFollows($grammar,$states,$termlst);
+
+ for my $stateno ( keys(%$inconsistent ) ) {
+ my($state)=$$states[$stateno];
+ my($conflict);
+
+ #NB the sort is VERY important for conflicts resolution order
+ for my $ruleno (sort { $a <=> $b }
+ @{$$state{ACTIONS}{''}}) {
+ for my $term ( map { $termlst->[$_] } grep {
+ vec($follows->{"$stateno.$ruleno"},$_,1) }
+ 0..$#$termlst) {
+ exists($$state{ACTIONS}{$term})
+ and ++$conflict;
+ push(@{$$state{ACTIONS}{$term}},-$ruleno);
+ }
+ }
+ delete($$state{ACTIONS}{''});
+ $conflict
+ or delete($inconsistent->{$stateno});
+ }
+
+ $inconsistent
+}
+
+#############################
+# Solve remaining conflicts #
+#############################
+
+sub _SolveConflicts {
+ my($grammar,$states,$inconsistent)=@_;
+ my(%rulesprec,$RulePrec);
+ my($conflicts)={ SOLVED => {},
+ FORCED => { TOTAL => [ 0, 0 ],
+ DETAIL => {}
+ }
+ };
+
+ $RulePrec = sub {
+ my($ruleno)=@_;
+ my($rhs,$rprec)=@{$$grammar{RULES}[$ruleno]}[1,2];
+ my($lastterm);
+
+ defined($rprec)
+ and return($rprec);
+
+ exists($rulesprec{$ruleno})
+ and return($rulesprec{$ruleno});
+
+ $lastterm=(grep { exists($$grammar{TERM}{$_}) } @$rhs)[-1];
+
+ defined($lastterm)
+ and ref($$grammar{TERM}{$lastterm})
+ and do {
+ $rulesprec{$ruleno}=$$grammar{TERM}{$lastterm}[1];
+ return($rulesprec{$ruleno});
+ };
+
+ undef;
+ };
+
+ for my $stateno (keys(%$inconsistent)) {
+ my($state)=$$states[$stateno];
+ my($actions)=$$state{ACTIONS};
+ my($nbsr,$nbrr);
+
+ for my $term ( keys(%$actions) ) {
+ my($act)=$$actions{$term};
+
+ @$act > 1
+ or next;
+
+ $$act[0] > 0
+ and ref($$grammar{TERM}{$term})
+ and do {
+ my($assoc,$tprec)=@{$$grammar{TERM}{$term}};
+ my($k,$error);
+
+ for ($k=1;$k<@$act;++$k) {
+ my($ruleno)=-$$act[$k];
+ my($rprec)=&$RulePrec($ruleno);
+
+ defined($rprec)
+ or next;
+
+ ( $tprec > $rprec
+ or ( $tprec == $rprec and $assoc eq 'RIGHT'))
+ and do {
+ push(@{$$conflicts{SOLVED}{$stateno}},
+ [ $ruleno, $term, 'shift' ]);
+ splice(@$act,$k--,1);
+ next;
+ };
+ ( $tprec < $rprec
+ or $assoc eq 'LEFT')
+ and do {
+ push(@{$$conflicts{SOLVED}{$stateno}},
+ [ $ruleno, $term, 'reduce' ]);
+ $$act[0] > 0
+ and do {
+ splice(@$act,0,1);
+ --$k;
+ };
+ next;
+ };
+ push(@{$$conflicts{SOLVED}{$stateno}},
+ [ $ruleno, $term, 'error' ]);
+ splice(@$act,$k--,1);
+ $$act[0] > 0
+ and do {
+ splice(@$act,0,1);
+ ++$error;
+ --$k;
+ };
+ }
+ $error
+ and unshift(@$act,undef);
+ };
+
+ @$act > 1
+ and do {
+ $nbrr += @$act - 2;
+ ($$act[0] > 0 ? $nbsr : $nbrr) += 1;
+ push(@{$$conflicts{FORCED}{DETAIL}{$stateno}{LIST}},
+ map { [ $term, $_ ] } splice(@$act,1));
+ };
+ }
+
+ $nbsr
+ and do {
+ $$conflicts{FORCED}{TOTAL}[0]+=$nbsr;
+ $$conflicts{FORCED}{DETAIL}{$stateno}{TOTAL}[0]+=$nbsr;
+ };
+
+ $nbrr
+ and do {
+ $$conflicts{FORCED}{TOTAL}[1]+=$nbrr;
+ $$conflicts{FORCED}{DETAIL}{$stateno}{TOTAL}[1]+=$nbrr;
+ };
+
+ }
+
+ $conflicts
+}
+
+###############################
+# Make default reduce actions #
+###############################
+sub _SetDefaults {
+ my($states)=@_;
+
+ for my $state (@$states) {
+ my($actions)=$$state{ACTIONS};
+ my(%reduces,$default,$nodefault);
+
+ exists($$actions{''})
+ and do {
+ $$actions{''}[0] = -$$actions{''}[0];
+ ++$nodefault;
+ };
+
+ #shift error token => no default
+ exists($$actions{error})
+ and $$actions{error}[0] > 0
+ and ++$nodefault;
+
+ for my $term (keys(%$actions)) {
+
+ $$actions{$term}=$$actions{$term}[0];
+
+ ( not defined($$actions{$term})
+ or $$actions{$term} > 0
+ or $nodefault)
+ and next;
+
+ push(@{$reduces{$$actions{$term}}},$term);
+ }
+
+ keys(%reduces) > 0
+ or next;
+
+ $default=( map { $$_[0] }
+ sort { $$b[1] <=> $$a[1] or $$b[0] <=> $$a[0] }
+ map { [ $_, scalar(@{$reduces{$_}}) ] }
+ keys(%reduces))[0];
+
+ delete(@$actions{ @{$reduces{$default}} });
+ $$state{ACTIONS}{''}=$default;
+ }
+}
+
+sub _LALR {
+ my($grammar,$states) = @_;
+ my($conflicts,$inconsistent);
+
+ $inconsistent = _ComputeLA($grammar,$states);
+
+ $conflicts = _SolveConflicts($grammar,$states,$inconsistent);
+ _SetDefaults($states);
+
+ $conflicts
+}
+
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Parse/Yapp/Options.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,186 @@
+#
+# Module Parse::Yapp::Options
+#
+# (c) Copyright 1999-2001 Francois Desarmenien, all rights reserved.
+# (see the pod text in Parse::Yapp module for use and distribution rights)
+#
+package Parse::Yapp::Options;
+
+use strict;
+use Carp;
+
+############################################################################
+#Definitions of options
+#
+# %known_options allowed options
+#
+# %default_options default
+#
+# %actions sub refs to execute if option is set with ($self,$value)
+# as parameters
+############################################################################
+#
+#A value of '' means any value can do
+#
+my(%known_options)= (
+ language => {
+ perl => "Ouput parser for Perl language",
+# for future use...
+# 'c++' => "Output parser for C++ language",
+# c => "Output parser for C language"
+ },
+ linenumbers => {
+ 0 => "Don't embbed line numbers in parser",
+ 1 => "Embbed source line numbers in parser"
+ },
+ inputfile => {
+ '' => "Input file name: will automagically fills input"
+ },
+ classname => {
+ '' => "Class name of parser object (Perl and C++)"
+ },
+ standalone => {
+ 0 => "Don't create a standalone parser (Perl and C++)",
+ 1 => "Create a standalone parser"
+ },
+ input => {
+ '' => "Input text of grammar"
+ },
+ template => {
+ '' => "Template text for generating grammar file"
+ },
+);
+
+my(%default_options)= (
+ language => 'perl',
+ linenumbers => 1,
+ inputfile => undef,
+ classname => 'Parser',
+ standalone => 0,
+ input => undef,
+ template => undef,
+ shebang => undef,
+);
+
+my(%actions)= (
+ inputfile => \&__LoadFile
+);
+
+#############################################################################
+#
+# Actions
+#
+# These are NOT a method, although they look like...
+#
+# They are super-private routines (that's why I prepend __ to their names)
+#
+#############################################################################
+sub __LoadFile {
+ my($self,$filename)=@_;
+
+ open(IN,"<$filename")
+ or croak "Cannot open input file '$filename' for reading";
+ $self->{OPTIONS}{input}=join('',<IN>);
+ close(IN);
+}
+
+#############################################################################
+#
+# Private methods
+#
+#############################################################################
+
+sub _SetOption {
+ my($self)=shift;
+ my($key,$value)=@_;
+
+ $key=lc($key);
+
+ @_ == 2
+ or croak "Invalid number of arguments";
+
+ exists($known_options{$key})
+ or croak "Unknown option: '$key'";
+
+ if(exists($known_options{$key}{lc($value)})) {
+ $value=lc($value);
+ }
+ elsif(not exists($known_options{$key}{''})) {
+ croak "Invalid value '$value' for option '$key'";
+ }
+
+ exists($actions{$key})
+ and &{$actions{$key}}($self,$value);
+
+ $self->{OPTIONS}{$key}=$value;
+}
+
+sub _GetOption {
+ my($self)=shift;
+ my($key)=map { lc($_) } @_;
+
+ @_ == 1
+ or croak "Invalid number of arguments";
+
+ exists($known_options{$key})
+ or croak "Unknown option: '$key'";
+
+ $self->{OPTIONS}{$key};
+}
+
+#############################################################################
+#
+# Public methods
+#
+#############################################################################
+
+#
+# Constructor
+#
+sub new {
+ my($class)=shift;
+ my($self)={ OPTIONS => { %default_options } };
+
+ ref($class)
+ and $class=ref($class);
+
+ bless($self,$class);
+
+ $self->Options(@_);
+
+ $self;
+}
+
+#
+# Specify one or more options to set
+#
+sub Options {
+ my($self)=shift;
+ my($key,$value);
+
+ @_ % 2 == 0
+ or croak "Invalid number of arguments";
+
+ while(($key,$value)=splice(@_,0,2)) {
+ $self->_SetOption($key,$value);
+ }
+}
+
+#
+# Set (2 parameters) or Get (1 parameter) values for one option
+#
+sub Option {
+ my($self)=shift;
+ my($key,$value)=@_;
+
+ @_ == 1
+ and return $self->_GetOption($key);
+
+ @_ == 2
+ and return $self->_SetOption($key,$value);
+
+ croak "Invalid number of arguments";
+
+}
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Parse/Yapp/Output.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,92 @@
+#
+# Module Parse::Yapp::Output
+#
+# (c) Copyright 1998-2001 Francois Desarmenien, all rights reserved.
+# (see the pod text in Parse::Yapp module for use and distribution rights)
+#
+package Parse::Yapp::Output;
+@ISA=qw ( Parse::Yapp::Lalr );
+
+require 5.004;
+
+use Parse::Yapp::Lalr;
+use Parse::Yapp::Driver;
+
+use strict;
+
+use Carp;
+
+sub _CopyDriver {
+ my($text)='#Included Parse/Yapp/Driver.pm file'.('-' x 40)."\n";
+ open(DRV,$Parse::Yapp::Driver::FILENAME)
+ or die "BUG: could not open $Parse::Yapp::Driver::FILENAME";
+ $text.="{\n".join('',<DRV>)."}\n";
+ close(DRV);
+ $text.='#End of include'.('-' x 50)."\n";
+}
+
+sub Output {
+ my($self)=shift;
+
+ $self->Options(@_);
+
+ my($package)=$self->Option('classname');
+ my($head,$states,$rules,$tail,$driver);
+ my($version)=$Parse::Yapp::Driver::VERSION;
+ my($datapos);
+ my($text)=$self->Option('template') ||<<'EOT';
+####################################################################
+#
+# This file was generated using Parse::Yapp version <<$version>>.
+#
+# Don't edit this file, use source file instead.
+#
+# ANY CHANGE MADE HERE WILL BE LOST !
+#
+####################################################################
+package <<$package>>;
+use vars qw ( @ISA );
+use strict;
+
+@ISA= qw ( Parse::Yapp::Driver );
+<<$driver>>
+
+<<$head>>
+
+sub new {
+ my($class)=shift;
+ ref($class)
+ and $class=ref($class);
+
+ my($self)=$class->SUPER::new( yyversion => '<<$version>>',
+ yystates =>
+<<$states>>,
+ yyrules =>
+<<$rules>>,
+ @_);
+ bless($self,$class);
+}
+
+<<$tail>>
+1;
+EOT
+
+ $driver='use Parse::Yapp::Driver;';
+
+ defined($package)
+ or $package='Parse::Yapp::Default';
+
+ $head= $self->Head();
+ $rules=$self->RulesTable();
+ $states=$self->DfaTable();
+ $tail= $self->Tail();
+
+ $self->Option('standalone')
+ and $driver=_CopyDriver();
+
+ $text=~s/<<(\$.+)>>/$1/gee;
+
+ $text;
+}
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/Parse/Yapp/Parse.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1093 @@
+####################################################################
+#
+# This file was generated using Parse::Yapp version 1.05.
+#
+# Don't edit this file, use source file instead.
+#
+# ANY CHANGE MADE HERE WILL BE LOST !
+#
+####################################################################
+package Parse::Yapp::Parse;
+use vars qw ( @ISA );
+use strict;
+
+@ISA= qw ( Parse::Yapp::Driver );
+use Parse::Yapp::Driver;
+
+#line 1 "YappParse.yp"
+# (c) Copyright Francois Desarmenien 1998-2001, all rights reserved.
+# (see COPYRIGHT in Parse::Yapp.pm pod section for use and distribution rights)
+#
+# Parse/Yapp/Parser.yp: Parse::Yapp::Parser.pm source file
+#
+# Use: yapp -m 'Parse::Yapp::Parse' -o Parse/Yapp/Parse.pm YappParse.yp
+#
+# to generate the Parser module.
+#
+#line 12 "YappParse.yp"
+
+require 5.004;
+
+use Carp;
+
+my($input,$lexlevel,@lineno,$nberr,$prec,$labelno);
+my($syms,$head,$tail,$token,$term,$nterm,$rules,$precterm,$start,$nullable);
+my($expect);
+
+
+
+sub new {
+ my($class)=shift;
+ ref($class)
+ and $class=ref($class);
+
+ my($self)=$class->SUPER::new( yyversion => '1.05',
+ yystates =>
+[
+ {#State 0
+ ACTIONS => {
+ "%%" => -6,
+ 'HEADCODE' => 3,
+ 'UNION' => 2,
+ 'TOKEN' => 5,
+ 'ASSOC' => 7,
+ 'START' => 6,
+ 'error' => 9,
+ 'TYPE' => 10,
+ "\n" => 11,
+ 'EXPECT' => 13
+ },
+ GOTOS => {
+ 'head' => 1,
+ 'decls' => 12,
+ 'yapp' => 4,
+ 'decl' => 14,
+ 'headsec' => 8
+ }
+ },
+ {#State 1
+ ACTIONS => {
+ 'error' => 19,
+ "%%" => 16,
+ 'IDENT' => 18
+ },
+ GOTOS => {
+ 'rules' => 15,
+ 'rulesec' => 20,
+ 'body' => 17
+ }
+ },
+ {#State 2
+ ACTIONS => {
+ 'CODE' => 21
+ }
+ },
+ {#State 3
+ ACTIONS => {
+ "\n" => 22
+ }
+ },
+ {#State 4
+ ACTIONS => {
+ '' => 23
+ }
+ },
+ {#State 5
+ ACTIONS => {
+ "<" => 25
+ },
+ DEFAULT => -19,
+ GOTOS => {
+ 'typedecl' => 24
+ }
+ },
+ {#State 6
+ ACTIONS => {
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'ident' => 27
+ }
+ },
+ {#State 7
+ ACTIONS => {
+ "<" => 25
+ },
+ DEFAULT => -19,
+ GOTOS => {
+ 'typedecl' => 28
+ }
+ },
+ {#State 8
+ ACTIONS => {
+ "%%" => 29
+ }
+ },
+ {#State 9
+ ACTIONS => {
+ "\n" => 30
+ }
+ },
+ {#State 10
+ ACTIONS => {
+ "<" => 25
+ },
+ DEFAULT => -19,
+ GOTOS => {
+ 'typedecl' => 31
+ }
+ },
+ {#State 11
+ DEFAULT => -10
+ },
+ {#State 12
+ ACTIONS => {
+ "%%" => -7,
+ 'HEADCODE' => 3,
+ 'UNION' => 2,
+ 'TOKEN' => 5,
+ 'ASSOC' => 7,
+ 'START' => 6,
+ 'error' => 9,
+ 'TYPE' => 10,
+ "\n" => 11,
+ 'EXPECT' => 13
+ },
+ GOTOS => {
+ 'decl' => 32
+ }
+ },
+ {#State 13
+ ACTIONS => {
+ 'NUMBER' => 33
+ }
+ },
+ {#State 14
+ DEFAULT => -9
+ },
+ {#State 15
+ DEFAULT => -28
+ },
+ {#State 16
+ DEFAULT => -26
+ },
+ {#State 17
+ ACTIONS => {
+ 'TAILCODE' => 34
+ },
+ DEFAULT => -45,
+ GOTOS => {
+ 'tail' => 35
+ }
+ },
+ {#State 18
+ ACTIONS => {
+ ":" => 36
+ }
+ },
+ {#State 19
+ ACTIONS => {
+ ";" => 37
+ }
+ },
+ {#State 20
+ ACTIONS => {
+ 'error' => 19,
+ "%%" => 39,
+ 'IDENT' => 18
+ },
+ GOTOS => {
+ 'rules' => 38
+ }
+ },
+ {#State 21
+ ACTIONS => {
+ "\n" => 40
+ }
+ },
+ {#State 22
+ DEFAULT => -14
+ },
+ {#State 23
+ DEFAULT => -0
+ },
+ {#State 24
+ ACTIONS => {
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'symlist' => 43,
+ 'ident' => 44,
+ 'symbol' => 42
+ }
+ },
+ {#State 25
+ ACTIONS => {
+ 'IDENT' => 45
+ }
+ },
+ {#State 26
+ DEFAULT => -4
+ },
+ {#State 27
+ ACTIONS => {
+ "\n" => 46
+ }
+ },
+ {#State 28
+ ACTIONS => {
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'symlist' => 47,
+ 'ident' => 44,
+ 'symbol' => 42
+ }
+ },
+ {#State 29
+ DEFAULT => -5
+ },
+ {#State 30
+ DEFAULT => -18
+ },
+ {#State 31
+ ACTIONS => {
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'ident' => 48,
+ 'identlist' => 49
+ }
+ },
+ {#State 32
+ DEFAULT => -8
+ },
+ {#State 33
+ ACTIONS => {
+ "\n" => 50
+ }
+ },
+ {#State 34
+ DEFAULT => -46
+ },
+ {#State 35
+ DEFAULT => -1
+ },
+ {#State 36
+ ACTIONS => {
+ 'CODE' => 57,
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ DEFAULT => -35,
+ GOTOS => {
+ 'rhselts' => 56,
+ 'rule' => 51,
+ 'code' => 52,
+ 'rhs' => 53,
+ 'ident' => 44,
+ 'rhselt' => 58,
+ 'rhss' => 55,
+ 'symbol' => 54
+ }
+ },
+ {#State 37
+ DEFAULT => -30
+ },
+ {#State 38
+ DEFAULT => -27
+ },
+ {#State 39
+ DEFAULT => -25
+ },
+ {#State 40
+ DEFAULT => -15
+ },
+ {#State 41
+ DEFAULT => -2
+ },
+ {#State 42
+ DEFAULT => -22
+ },
+ {#State 43
+ ACTIONS => {
+ "\n" => 60,
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'ident' => 44,
+ 'symbol' => 59
+ }
+ },
+ {#State 44
+ DEFAULT => -3
+ },
+ {#State 45
+ ACTIONS => {
+ ">" => 61
+ }
+ },
+ {#State 46
+ DEFAULT => -13
+ },
+ {#State 47
+ ACTIONS => {
+ "\n" => 62,
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'ident' => 44,
+ 'symbol' => 59
+ }
+ },
+ {#State 48
+ DEFAULT => -24
+ },
+ {#State 49
+ ACTIONS => {
+ "\n" => 63,
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'ident' => 64
+ }
+ },
+ {#State 50
+ DEFAULT => -17
+ },
+ {#State 51
+ DEFAULT => -32
+ },
+ {#State 52
+ DEFAULT => -40
+ },
+ {#State 53
+ ACTIONS => {
+ 'PREC' => 66
+ },
+ DEFAULT => -34,
+ GOTOS => {
+ 'prec' => 65
+ }
+ },
+ {#State 54
+ DEFAULT => -39
+ },
+ {#State 55
+ ACTIONS => {
+ "|" => 68,
+ ";" => 67
+ }
+ },
+ {#State 56
+ ACTIONS => {
+ 'CODE' => 57,
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ DEFAULT => -36,
+ GOTOS => {
+ 'code' => 52,
+ 'ident' => 44,
+ 'rhselt' => 69,
+ 'symbol' => 54
+ }
+ },
+ {#State 57
+ DEFAULT => -44
+ },
+ {#State 58
+ DEFAULT => -38
+ },
+ {#State 59
+ DEFAULT => -21
+ },
+ {#State 60
+ DEFAULT => -11
+ },
+ {#State 61
+ DEFAULT => -20
+ },
+ {#State 62
+ DEFAULT => -12
+ },
+ {#State 63
+ DEFAULT => -16
+ },
+ {#State 64
+ DEFAULT => -23
+ },
+ {#State 65
+ ACTIONS => {
+ 'CODE' => 57
+ },
+ DEFAULT => -42,
+ GOTOS => {
+ 'code' => 70,
+ 'epscode' => 71
+ }
+ },
+ {#State 66
+ ACTIONS => {
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ GOTOS => {
+ 'ident' => 44,
+ 'symbol' => 72
+ }
+ },
+ {#State 67
+ DEFAULT => -29
+ },
+ {#State 68
+ ACTIONS => {
+ 'CODE' => 57,
+ 'LITERAL' => 41,
+ 'IDENT' => 26
+ },
+ DEFAULT => -35,
+ GOTOS => {
+ 'rhselts' => 56,
+ 'rule' => 73,
+ 'code' => 52,
+ 'rhs' => 53,
+ 'ident' => 44,
+ 'rhselt' => 58,
+ 'symbol' => 54
+ }
+ },
+ {#State 69
+ DEFAULT => -37
+ },
+ {#State 70
+ DEFAULT => -43
+ },
+ {#State 71
+ DEFAULT => -33
+ },
+ {#State 72
+ DEFAULT => -41
+ },
+ {#State 73
+ DEFAULT => -31
+ }
+],
+ yyrules =>
+[
+ [#Rule 0
+ '$start', 2, undef
+ ],
+ [#Rule 1
+ 'yapp', 3, undef
+ ],
+ [#Rule 2
+ 'symbol', 1,
+sub
+#line 30 "YappParse.yp"
+{
+ exists($$syms{$_[1][0]})
+ or do {
+ $$syms{$_[1][0]} = $_[1][1];
+ $$term{$_[1][0]} = undef;
+ };
+ $_[1]
+ }
+ ],
+ [#Rule 3
+ 'symbol', 1, undef
+ ],
+ [#Rule 4
+ 'ident', 1,
+sub
+#line 41 "YappParse.yp"
+{
+ exists($$syms{$_[1][0]})
+ or do {
+ $$syms{$_[1][0]} = $_[1][1];
+ $$term{$_[1][0]} = undef;
+ };
+ $_[1]
+ }
+ ],
+ [#Rule 5
+ 'head', 2, undef
+ ],
+ [#Rule 6
+ 'headsec', 0, undef
+ ],
+ [#Rule 7
+ 'headsec', 1, undef
+ ],
+ [#Rule 8
+ 'decls', 2, undef
+ ],
+ [#Rule 9
+ 'decls', 1, undef
+ ],
+ [#Rule 10
+ 'decl', 1, undef
+ ],
+ [#Rule 11
+ 'decl', 4,
+sub
+#line 66 "YappParse.yp"
+{
+ for (@{$_[3]}) {
+ my($symbol,$lineno)=@$_;
+
+ exists($$token{$symbol})
+ and do {
+ _SyntaxError(0,
+ "Token $symbol redefined: ".
+ "Previously defined line $$syms{$symbol}",
+ $lineno);
+ next;
+ };
+ $$token{$symbol}=$lineno;
+ $$term{$symbol} = [ ];
+ }
+ undef
+ }
+ ],
+ [#Rule 12
+ 'decl', 4,
+sub
+#line 84 "YappParse.yp"
+{
+ for (@{$_[3]}) {
+ my($symbol,$lineno)=@$_;
+
+ defined($$term{$symbol}[0])
+ and do {
+ _SyntaxError(1,
+ "Precedence for symbol $symbol redefined: ".
+ "Previously defined line $$syms{$symbol}",
+ $lineno);
+ next;
+ };
+ $$token{$symbol}=$lineno;
+ $$term{$symbol} = [ $_[1][0], $prec ];
+ }
+ ++$prec;
+ undef
+ }
+ ],
+ [#Rule 13
+ 'decl', 3,
+sub
+#line 102 "YappParse.yp"
+{ $start=$_[2][0]; undef }
+ ],
+ [#Rule 14
+ 'decl', 2,
+sub
+#line 103 "YappParse.yp"
+{ push(@$head,$_[1]); undef }
+ ],
+ [#Rule 15
+ 'decl', 3,
+sub
+#line 104 "YappParse.yp"
+{ undef }
+ ],
+ [#Rule 16
+ 'decl', 4,
+sub
+#line 106 "YappParse.yp"
+{
+ for ( @{$_[3]} ) {
+ my($symbol,$lineno)=@$_;
+
+ exists($$nterm{$symbol})
+ and do {
+ _SyntaxError(0,
+ "Non-terminal $symbol redefined: ".
+ "Previously defined line $$syms{$symbol}",
+ $lineno);
+ next;
+ };
+ delete($$term{$symbol}); #not a terminal
+ $$nterm{$symbol}=undef; #is a non-terminal
+ }
+ }
+ ],
+ [#Rule 17
+ 'decl', 3,
+sub
+#line 122 "YappParse.yp"
+{ $expect=$_[2][0]; undef }
+ ],
+ [#Rule 18
+ 'decl', 2,
+sub
+#line 123 "YappParse.yp"
+{ $_[0]->YYErrok }
+ ],
+ [#Rule 19
+ 'typedecl', 0, undef
+ ],
+ [#Rule 20
+ 'typedecl', 3, undef
+ ],
+ [#Rule 21
+ 'symlist', 2,
+sub
+#line 130 "YappParse.yp"
+{ push(@{$_[1]},$_[2]); $_[1] }
+ ],
+ [#Rule 22
+ 'symlist', 1,
+sub
+#line 131 "YappParse.yp"
+{ [ $_[1] ] }
+ ],
+ [#Rule 23
+ 'identlist', 2,
+sub
+#line 134 "YappParse.yp"
+{ push(@{$_[1]},$_[2]); $_[1] }
+ ],
+ [#Rule 24
+ 'identlist', 1,
+sub
+#line 135 "YappParse.yp"
+{ [ $_[1] ] }
+ ],
+ [#Rule 25
+ 'body', 2,
+sub
+#line 140 "YappParse.yp"
+{
+ $start
+ or $start=$$rules[1][0];
+
+ ref($$nterm{$start})
+ or _SyntaxError(2,"Start symbol $start not found ".
+ "in rules section",$_[2][1]);
+
+ $$rules[0]=[ '$start', [ $start, chr(0) ], undef, undef ];
+ }
+ ],
+ [#Rule 26
+ 'body', 1,
+sub
+#line 150 "YappParse.yp"
+{ _SyntaxError(2,"No rules in input grammar",$_[1][1]); }
+ ],
+ [#Rule 27
+ 'rulesec', 2, undef
+ ],
+ [#Rule 28
+ 'rulesec', 1, undef
+ ],
+ [#Rule 29
+ 'rules', 4,
+sub
+#line 157 "YappParse.yp"
+{ _AddRules($_[1],$_[3]); undef }
+ ],
+ [#Rule 30
+ 'rules', 2,
+sub
+#line 158 "YappParse.yp"
+{ $_[0]->YYErrok }
+ ],
+ [#Rule 31
+ 'rhss', 3,
+sub
+#line 161 "YappParse.yp"
+{ push(@{$_[1]},$_[3]); $_[1] }
+ ],
+ [#Rule 32
+ 'rhss', 1,
+sub
+#line 162 "YappParse.yp"
+{ [ $_[1] ] }
+ ],
+ [#Rule 33
+ 'rule', 3,
+sub
+#line 165 "YappParse.yp"
+{ push(@{$_[1]}, $_[2], $_[3]); $_[1] }
+ ],
+ [#Rule 34
+ 'rule', 1,
+sub
+#line 166 "YappParse.yp"
+{
+ my($code)=undef;
+
+ defined($_[1])
+ and $_[1][-1][0] eq 'CODE'
+ and $code = ${pop(@{$_[1]})}[1];
+
+ push(@{$_[1]}, undef, $code);
+
+ $_[1]
+ }
+ ],
+ [#Rule 35
+ 'rhs', 0, undef
+ ],
+ [#Rule 36
+ 'rhs', 1, undef
+ ],
+ [#Rule 37
+ 'rhselts', 2,
+sub
+#line 183 "YappParse.yp"
+{ push(@{$_[1]},$_[2]); $_[1] }
+ ],
+ [#Rule 38
+ 'rhselts', 1,
+sub
+#line 184 "YappParse.yp"
+{ [ $_[1] ] }
+ ],
+ [#Rule 39
+ 'rhselt', 1,
+sub
+#line 187 "YappParse.yp"
+{ [ 'SYMB', $_[1] ] }
+ ],
+ [#Rule 40
+ 'rhselt', 1,
+sub
+#line 188 "YappParse.yp"
+{ [ 'CODE', $_[1] ] }
+ ],
+ [#Rule 41
+ 'prec', 2,
+sub
+#line 192 "YappParse.yp"
+{
+ defined($$term{$_[2][0]})
+ or do {
+ _SyntaxError(1,"No precedence for symbol $_[2][0]",
+ $_[2][1]);
+ return undef;
+ };
+
+ ++$$precterm{$_[2][0]};
+ $$term{$_[2][0]}[1];
+ }
+ ],
+ [#Rule 42
+ 'epscode', 0,
+sub
+#line 205 "YappParse.yp"
+{ undef }
+ ],
+ [#Rule 43
+ 'epscode', 1,
+sub
+#line 206 "YappParse.yp"
+{ $_[1] }
+ ],
+ [#Rule 44
+ 'code', 1,
+sub
+#line 209 "YappParse.yp"
+{ $_[1] }
+ ],
+ [#Rule 45
+ 'tail', 0, undef
+ ],
+ [#Rule 46
+ 'tail', 1,
+sub
+#line 215 "YappParse.yp"
+{ $tail=$_[1] }
+ ]
+],
+ @_);
+ bless($self,$class);
+}
+
+#line 218 "YappParse.yp"
+
+sub _Error {
+ my($value)=$_[0]->YYCurval;
+
+ my($what)= $token ? "input: '$$value[0]'" : "end of input";
+
+ _SyntaxError(1,"Unexpected $what",$$value[1]);
+}
+
+sub _Lexer {
+
+ #At EOF
+ pos($$input) >= length($$input)
+ and return('',[ undef, -1 ]);
+
+ #In TAIL section
+ $lexlevel > 1
+ and do {
+ my($pos)=pos($$input);
+
+ $lineno[0]=$lineno[1];
+ $lineno[1]=-1;
+ pos($$input)=length($$input);
+ return('TAILCODE',[ substr($$input,$pos), $lineno[0] ]);
+ };
+
+ #Skip blanks
+ $lexlevel == 0
+ ? $$input=~m{\G((?:
+ [\t\ ]+ # Any white space char but \n
+ | \#[^\n]* # Perl like comments
+ | /\*.*?\*/ # C like comments
+ )+)}xsgc
+ : $$input=~m{\G((?:
+ \s+ # any white space char
+ | \#[^\n]* # Perl like comments
+ | /\*.*?\*/ # C like comments
+ )+)}xsgc
+ and do {
+ my($blanks)=$1;
+
+ #Maybe At EOF
+ pos($$input) >= length($$input)
+ and return('',[ undef, -1 ]);
+
+ $lineno[1]+= $blanks=~tr/\n//;
+ };
+
+ $lineno[0]=$lineno[1];
+
+ $$input=~/\G([A-Za-z_][A-Za-z0-9_]*)/gc
+ and return('IDENT',[ $1, $lineno[0] ]);
+
+ $$input=~/\G('(?:[^'\\]|\\\\|\\'|\\)+?')/gc
+ and do {
+ $1 eq "'error'"
+ and do {
+ _SyntaxError(0,"Literal 'error' ".
+ "will be treated as error token",$lineno[0]);
+ return('IDENT',[ 'error', $lineno[0] ]);
+ };
+ return('LITERAL',[ $1, $lineno[0] ]);
+ };
+
+ $$input=~/\G(%%)/gc
+ and do {
+ ++$lexlevel;
+ return($1, [ $1, $lineno[0] ]);
+ };
+
+ $$input=~/\G{/gc
+ and do {
+ my($level,$from,$code);
+
+ $from=pos($$input);
+
+ $level=1;
+ while($$input=~/([{}])/gc) {
+ substr($$input,pos($$input)-1,1) eq '\\' #Quoted
+ and next;
+ $level += ($1 eq '{' ? 1 : -1)
+ or last;
+ }
+ $level
+ and _SyntaxError(2,"Unmatched { opened line $lineno[0]",-1);
+ $code = substr($$input,$from,pos($$input)-$from-1);
+ $lineno[1]+= $code=~tr/\n//;
+ return('CODE',[ $code, $lineno[0] ]);
+ };
+
+ if($lexlevel == 0) {# In head section
+ $$input=~/\G%(left|right|nonassoc)/gc
+ and return('ASSOC',[ uc($1), $lineno[0] ]);
+ $$input=~/\G%(start)/gc
+ and return('START',[ undef, $lineno[0] ]);
+ $$input=~/\G%(expect)/gc
+ and return('EXPECT',[ undef, $lineno[0] ]);
+ $$input=~/\G%{/gc
+ and do {
+ my($code);
+
+ $$input=~/\G(.*?)%}/sgc
+ or _SyntaxError(2,"Unmatched %{ opened line $lineno[0]",-1);
+
+ $code=$1;
+ $lineno[1]+= $code=~tr/\n//;
+ return('HEADCODE',[ $code, $lineno[0] ]);
+ };
+ $$input=~/\G%(token)/gc
+ and return('TOKEN',[ undef, $lineno[0] ]);
+ $$input=~/\G%(type)/gc
+ and return('TYPE',[ undef, $lineno[0] ]);
+ $$input=~/\G%(union)/gc
+ and return('UNION',[ undef, $lineno[0] ]);
+ $$input=~/\G([0-9]+)/gc
+ and return('NUMBER',[ $1, $lineno[0] ]);
+
+ }
+ else {# In rule section
+ $$input=~/\G%(prec)/gc
+ and return('PREC',[ undef, $lineno[0] ]);
+ }
+
+ #Always return something
+ $$input=~/\G(.)/sg
+ or die "Parse::Yapp::Grammar::Parse: Match (.) failed: report as a BUG";
+
+ $1 eq "\n"
+ and ++$lineno[1];
+
+ ( $1 ,[ $1, $lineno[0] ]);
+
+}
+
+sub _SyntaxError {
+ my($level,$message,$lineno)=@_;
+
+ $message= "*".
+ [ 'Warning', 'Error', 'Fatal' ]->[$level].
+ "* $message, at ".
+ ($lineno < 0 ? "eof" : "line $lineno").
+ ".\n";
+
+ $level > 1
+ and die $message;
+
+ warn $message;
+
+ $level > 0
+ and ++$nberr;
+
+ $nberr == 20
+ and die "*Fatal* Too many errors detected.\n"
+}
+
+sub _AddRules {
+ my($lhs,$lineno)=@{$_[0]};
+ my($rhss)=$_[1];
+
+ ref($$nterm{$lhs})
+ and do {
+ _SyntaxError(1,"Non-terminal $lhs redefined: ".
+ "Previously declared line $$syms{$lhs}",$lineno);
+ return;
+ };
+
+ ref($$term{$lhs})
+ and do {
+ my($where) = exists($$token{$lhs}) ? $$token{$lhs} : $$syms{$lhs};
+ _SyntaxError(1,"Non-terminal $lhs previously ".
+ "declared as token line $where",$lineno);
+ return;
+ };
+
+ ref($$nterm{$lhs}) #declared through %type
+ or do {
+ $$syms{$lhs}=$lineno; #Say it's declared here
+ delete($$term{$lhs}); #No more a terminal
+ };
+ $$nterm{$lhs}=[]; #It's a non-terminal now
+
+ my($epsrules)=0; #To issue a warning if more than one epsilon rule
+
+ for my $rhs (@$rhss) {
+ my($tmprule)=[ $lhs, [ ], splice(@$rhs,-2) ]; #Init rule
+
+ @$rhs
+ or do {
+ ++$$nullable{$lhs};
+ ++$epsrules;
+ };
+
+ for (0..$#$rhs) {
+ my($what,$value)=@{$$rhs[$_]};
+
+ $what eq 'CODE'
+ and do {
+ my($name)='@'.++$labelno."-$_";
+ push(@$rules,[ $name, [], undef, $value ]);
+ push(@{$$tmprule[1]},$name);
+ next;
+ };
+ push(@{$$tmprule[1]},$$value[0]);
+ }
+ push(@$rules,$tmprule);
+ push(@{$$nterm{$lhs}},$#$rules);
+ }
+
+ $epsrules > 1
+ and _SyntaxError(0,"More than one empty rule for symbol $lhs",$lineno);
+}
+
+sub Parse {
+ my($self)=shift;
+
+ @_ > 0
+ or croak("No input grammar\n");
+
+ my($parsed)={};
+
+ $input=\$_[0];
+
+ $lexlevel=0;
+ @lineno=(1,1);
+ $nberr=0;
+ $prec=0;
+ $labelno=0;
+
+ $head=();
+ $tail="";
+
+ $syms={};
+ $token={};
+ $term={};
+ $nterm={};
+ $rules=[ undef ]; #reserve slot 0 for start rule
+ $precterm={};
+
+ $start="";
+ $nullable={};
+ $expect=0;
+
+ pos($$input)=0;
+
+
+ $self->YYParse(yylex => \&_Lexer, yyerror => \&_Error);
+
+ $nberr
+ and _SyntaxError(2,"Errors detected: No output",-1);
+
+ @$parsed{ 'HEAD', 'TAIL', 'RULES', 'NTERM', 'TERM',
+ 'NULL', 'PREC', 'SYMS', 'START', 'EXPECT' }
+ = ( $head, $tail, $rules, $nterm, $term,
+ $nullable, $precterm, $syms, $start, $expect);
+
+ undef($input);
+ undef($lexlevel);
+ undef(@lineno);
+ undef($nberr);
+ undef($prec);
+ undef($labelno);
+
+ undef($head);
+ undef($tail);
+
+ undef($syms);
+ undef($token);
+ undef($term);
+ undef($nterm);
+ undef($rules);
+ undef($precterm);
+
+ undef($start);
+ undef($nullable);
+ undef($expect);
+
+ $parsed
+}
+
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Checker.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,2006 @@
+#
+#
+# TO DO
+# - update docs regarding PerlSAX interface
+# - add current node to error context when checking DOM subtrees
+# - add parsed Entity to test XML files
+# - free circular references
+# - Implied handler?
+# - Notation, Entity, Unparsed checks, Default handler?
+# - check no root element (it's checked by expat) ?
+
+package XML::Checker::Term;
+use strict;
+
+sub new
+{
+ my ($class, %h) = @_;
+ bless \%h, $class;
+}
+
+sub str
+{
+ '<' . $_[0]->{C} . $_[0]->{N} . '>'
+}
+
+sub re
+{
+ $_[0]->{S}
+}
+
+sub rel
+{
+ my $self = shift;
+ defined $self->{SL} ? @{ $self->{SL} } : ( $self->{S} );
+}
+
+sub debug
+{
+ my $t = shift;
+ my ($c, $n, $s) = ($t->{C}, $t->{N}, $t->{S});
+ my @sl = $t->rel;
+ "{C=$c N=$n S=$s SL=@sl}";
+}
+
+#-------------------------------------------------------------------------
+
+package XML::Checker::Context;
+
+sub new
+{
+ my ($class) = @_;
+ my $scalar;
+ bless \$scalar, $class;
+}
+
+sub Start {}
+sub End {}
+sub Char {}
+
+#
+# The initial Context when checking an entire XML Document
+#
+package XML::Checker::DocContext;
+use vars qw( @ISA );
+@ISA = qw( XML::Checker::Context );
+
+sub new
+{
+#??checker not used
+ my ($class, $checker) = @_;
+ bless { }, $class;
+}
+
+sub setRootElement
+{
+ $_[0]->{RootElement} = $_[1];
+}
+
+sub Start
+{
+ my ($self, $checker, $tag) = @_;
+ if (exists $self->{Elem})
+ {
+ my $tags = join (", ", @{$self->{Elem}});
+ $checker->fail (155, "more than one root Element [$tags]");
+ push @{$self->{Elem}}, $tag;
+ }
+ else
+ {
+ $self->{Elem} = [ $tag ];
+ }
+
+ my $exp_root = $self->{RootElement};
+ $checker->fail (156, "unexpected root Element [$tag], expected [$exp_root]")
+ if defined ($exp_root) and $tag ne $exp_root;
+}
+
+sub debug
+{
+ my $self = shift;
+ "DocContext[Count=" . $self->{Count} . ",Root=" .
+ $self->{RootElement} . "]";
+}
+
+package XML::Checker::Context::ANY;
+use vars qw( @ISA );
+@ISA = qw( XML::Checker::Context );
+
+# No overrides, because everything is accepted
+
+sub debug { "XML::Checker::Context::ANY" }
+
+package XML::Checker::Context::EMPTY;
+use vars qw( @ISA $ALLOW_WHITE_SPACE );
+@ISA = qw( XML::Checker::Context );
+
+$ALLOW_WHITE_SPACE = 0;
+
+sub debug { "XML::Checker::Context::EMPTY" }
+
+sub Start
+{
+ my ($self, $checker, $tag) = @_;
+ $checker->fail (152, "Element should be EMPTY, found Element [$tag]");
+}
+
+sub Char
+{
+ my ($self, $checker, $str) = @_;
+ $checker->fail (153, "Element should be EMPTY, found text [$str]")
+ unless ($ALLOW_WHITE_SPACE and $checker->isWS ($str));
+
+ # NOTE: if $ALLOW_WHITE_SPACE = 1, the isWS call does not only check
+ # whether it is whitespace, but it also informs the checker that this
+ # might be insignificant whitespace
+}
+
+#?? what about Comments
+
+package XML::Checker::Context::Children;
+use vars qw( @ISA );
+@ISA = qw( XML::Checker::Context );
+
+sub new
+{
+ my ($class, $rule) = @_;
+ bless { Name => $rule->{Name}, RE => $rule->{RE}, Buf => "", N => 0 }, $class;
+}
+
+sub phash
+{
+ my $href = shift;
+ my $str = "";
+ for (keys %$href)
+ {
+ $str .= ' ' if $str;
+ $str .= $_ . '=' . $href->{$_};
+ }
+ $str;
+}
+
+sub debug
+{
+ my $self = shift;
+ "Context::Children[Name=(" . phash ($self->{Name}) . ",N=" . $self->{N} .
+ ",RE=" . $self->{RE} . ",Buf=[" . $self->{Buf} . "]";
+}
+
+sub Start
+{
+ my ($self, $checker, $tag) = @_;
+
+#print "Children.Start tag=$tag rule=$checker drule=" . $checker->debug . "\n";
+
+ if (exists $self->{Name}->{$tag})
+ {
+#print "Buf=[".$self->{Buf}. "] tag=[" . $self->{Name}->{$tag}->{S} . "]\n";
+ $self->{Buf} .= $self->{Name}->{$tag}->{S};
+ }
+ else
+ {
+ $checker->fail (157, "unexpected Element [$tag]",
+ ChildElementIndex => $self->{N})
+ }
+ $self->{N}++;
+}
+
+sub decode
+{
+ my ($self) = @_;
+ my $re = $self->{RE};
+ my $name = $self->{Name};
+ my $buf = $self->{Buf};
+
+ my %s = ();
+ while (my ($key, $val) = each %$name)
+ {
+ $s{$val->{S}} = $key;
+ }
+
+ my ($len) = scalar (keys %$name);
+ $len = length $len;
+ my $dots = "[^()*+?]" x $len;
+
+ $buf =~ s/($dots)/$s{$1} . ","/ge;
+ chop $buf;
+
+ $re =~ s/($dots)/"(" . $s{$1} . ")"/ge;
+
+ "Found=[$buf] RE=[$re]"
+}
+
+sub End
+{
+ my ($self, $checker) = @_;
+ my $re = $self->{RE};
+
+#print "End " . $self->debug . "\n";
+ $checker->fail (154, "bad order of Elements " . $self->decode)
+ unless $self->{Buf} =~ /^$re$/;
+}
+
+sub Char
+{
+ my ($self, $checker, $str) = @_;
+
+ # Inform the checker that this might be insignificant whitespace
+ $checker->isWS ($str);
+}
+
+package XML::Checker::Context::Mixed;
+use vars qw( @ISA );
+@ISA = qw( XML::Checker::Context );
+
+sub new
+{
+ my ($class, $rule) = @_;
+ bless { Name => $rule->{Name}, N => 0 }, $class;
+}
+
+sub debug
+{
+ my $self = shift;
+ "Context::Mixed[Name=" . $self->{Name} . ",N=" , $self->{N} . "]";
+}
+
+sub Start
+{
+ my ($self, $checker, $tag) = @_;
+
+ $checker->fail (157, "unexpected Element [$tag]",
+ ChildElementIndex => $self->{N})
+ unless exists $self->{Name}->{$tag};
+ $self->{N}++;
+}
+
+package XML::Checker::ERule;
+
+package XML::Checker::ERule::EMPTY;
+use vars qw( @ISA );
+@ISA = qw( XML::Checker::ERule );
+
+sub new
+{
+ my ($class) = @_;
+ bless {}, $class;
+}
+
+my $context = new XML::Checker::Context::EMPTY;
+sub context { $context } # share the context
+
+sub debug { "EMPTY" }
+
+package XML::Checker::ERule::ANY;
+use vars qw( @ISA );
+@ISA = qw( XML::Checker::ERule );
+
+sub new
+{
+ my ($class) = @_;
+ bless {}, $class;
+}
+
+my $any_context = new XML::Checker::Context::ANY;
+sub context { $any_context } # share the context
+
+sub debug { "ANY" }
+
+package XML::Checker::ERule::Mixed;
+use vars qw( @ISA );
+@ISA = qw( XML::Checker::ERule );
+
+sub new
+{
+ my ($class) = @_;
+ bless { Name => {} }, $class;
+}
+
+sub context
+{
+ my ($self) = @_;
+ new XML::Checker::Context::Mixed ($self);
+}
+
+sub setModel
+{
+ my ($self, $model) = @_;
+ my $rule = $model;
+
+ # Mixed := '(' '#PCDATA' ')' '*'?
+ if ($rule =~ /^\(\s*#PCDATA\s*\)(\*)?$/)
+ {
+#? how do we interpret the '*' ??
+ return 1;
+ }
+ else # Mixed := '(' '#PCDATA' ('|' Name)* ')*'
+ {
+ return 0 unless $rule =~ s/^\(\s*#PCDATA\s*//;
+ return 0 unless $rule =~ s/\s*\)\*$//;
+
+ my %names = ();
+ while ($rule =~ s/^\s*\|\s*($XML::RegExp::Name)//)
+ {
+ $names{$1} = 1;
+ }
+ if ($rule eq "")
+ {
+ $self->{Name} = \%names;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+sub debug
+{
+ my ($self) = @_;
+ "Mixed[Names=" . join("|", keys %{$self->{Name}}) . "]";
+}
+
+package XML::Checker::ERule::Children;
+use vars qw( @ISA %_name %_map $_n );
+@ISA = qw( XML::Checker::ERule );
+
+sub new
+{
+ my ($class) = @_;
+ bless {}, $class;
+}
+
+sub context
+{
+ my ($self) = @_;
+ new XML::Checker::Context::Children ($self);
+}
+
+sub _add # static
+{
+ my $exp = new XML::Checker::Term (@_);
+ $_map{$exp->{N}} = $exp;
+ $exp->str;
+}
+
+my $IDS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+sub _tokenize
+{
+ my ($self, $rule) = @_;
+
+ # Replace names with Terms of the form "<n#>", e.g. "<n2>".
+ # Lookup already used names and store new names in %_name.
+ #
+ $$rule =~ s/($XML::RegExp::Name)(?!>)/
+ if (exists $_name{$1}) # name already used?
+ {
+ $_name{$1}->str;
+ }
+ else
+ {
+ my $exp = new XML::Checker::Term (C => 'n', N => $_n++,
+ Name => $1);
+ $_name{$1} = $_map{$exp->{N}} = $exp;
+ $exp->str;
+ }
+ /eg;
+
+ if ($_n < length $IDS)
+ {
+ # Generate regular expression for the name Term, i.e.
+ # a single character from $IDS
+ my $i = 0;
+ for (values %_name)
+ {
+ $_->{S} = substr ($IDS, $i++, 1);
+#print "tokenized " . $_->{Name} . " num=" . $_->{N} . " to " . $_->{S} . "\n";
+ }
+ }
+ else
+ {
+ # Generate RE, convert Term->{N} to hex string a la "(#)",
+ # e.g. "(03d)". Calculate needed length of hex string first.
+ my $len = 1;
+ for (my $n = $_n - 1; ($n >> 4) > 0; $len++) {}
+
+ my $i = 0;
+ for (values %_name)
+ {
+ $_->{S} = sprintf ("(0${len}lx)", $i++);
+#print "tokenized " . $_->{Name} . " num=" . $_->{N} . " to " . $_->{S} . "\n";
+ }
+ }
+}
+
+sub setModel
+{
+ my ($self, $rule) = @_;
+
+ local $_n = 0;
+ local %_map = ();
+ local %_name = ();
+
+ $self->_tokenize (\$rule);
+
+#?? check for single name - die "!ELEMENT contents can't be just a NAME" if $rule =~ /^$XML::RegExp::Name$/;
+
+ for ($rule)
+ {
+ my $n = 1;
+ while ($n)
+ {
+ $n = 0;
+
+ # cp := ( name | choice | seq ) ('?' | '*' | '+')?
+ $n++ while s/<[ncs](\d+)>([?*+]?)/_add
+ (C => 'a', N => $_n++,
+ S => ($_map{$1}->re . $2))/eg;
+
+ # choice := '(' ch_l ')'
+ $n++ while s/\(\s*<[ad](\d+)>\s*\)/_add
+ (C => 'c', N => $_n++,
+ S => "(" . join ("|", $_map{$1}->rel) . ")")/eg;
+
+ # ch_l := ( cp | ch_l ) '|' ( cp | ch_l )
+ $n++ while s/<[ad](\d+)>\s*\|\s*<[ad](\d+)>/_add
+ (C => 'd', N => $_n++,
+ SL => [ $_map{$1}->rel, $_map{$2}->rel ])/eg;
+
+ # seq := '(' (seq_l ')'
+ $n++ while s/\(\s*<[at](\d+)>\s*\)/_add
+ (C => 's', N => $_n++,
+ S => "(".join("", $_map{$1}->rel).")")/eg;
+
+ # seq_l := ( cp | seq_l ) ',' ( cp | seq_l )
+ $n++ while s/<[at](\d+)>\s*,\s*<[at](\d+)>/_add
+ (C => 't', N => $_n++,
+ SL => [ $_map{$1}->rel, $_map{$2}->rel ])/eg;
+ }
+ }
+
+ return 0 if ($rule !~ /^<a(\d+)>$/);
+
+ $self->{Name} = \%_name;
+ $self->{RE} = $_map{$1}->re;
+
+ return 1;
+}
+
+sub debug
+{
+ my ($self) = @_;
+ "Children[RE=" . $self->{RE} . "]";
+}
+
+
+package XML::Checker::ARule;
+use XML::RegExp;
+
+sub new
+{
+ my ($class, $elem, $checker) = @_;
+ bless { Elem => $elem, Checker => $checker, Required => {} }, $class;
+}
+
+sub Attlist
+{
+ my ($self, $attr, $type, $default, $fixed, $checker) = @_;
+ my ($c1, $c2);
+
+ if ($self->{Defined}->{$attr})
+ {
+ my $tag = $self->{Elem};
+ $self->fail ($attr, 110, "attribute [$attr] of element [$tag] already defined");
+ }
+ else
+ {
+ $self->{Defined}->{$attr} = 1;
+ }
+
+ if ($default =~ /^\#(REQUIRED|IMPLIED)$/)
+ {
+ $c1 = $1;
+
+ # Keep list of all required attributes
+ if ($default eq '#REQUIRED')
+ {
+ $self->{Required}->{$attr} = 1;
+ }
+ }
+ else
+ {
+ $self->fail ($attr, 122, "invalid default attribute value [$default]")
+ unless $default =~ /^$XML::RegExp::AttValue$/;
+
+ $default = substr ($default, 1, length($default)-2);
+ $self->{Default}->{$attr} = $default;
+ $c1 = 'FIXED' if $fixed;
+ }
+
+ if ($type eq 'ID')
+ {
+ $self->fail ($attr, 123, "invalid default ID [$default], must be #REQUIRED or #IMPLIED")
+ unless $default =~ /^#(REQUIRED|IMPLIED)$/;
+
+ if (exists ($self->{ID}) && $self->{ID} ne $attr)
+ {
+ $self->fail ($attr, 151, "only one ID allowed per ELEMENT " .
+ "first=[" . $self->{ID} . "]");
+ }
+ else
+ {
+ $self->{ID} = $attr;
+ }
+ $c2 = 'ID';
+ }
+ elsif ($type =~ /^(IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS)$/)
+ {
+ my $def = $self->{Default}->{$attr};
+ if (defined $def)
+ {
+ my $re = ($type =~ /^[IE]/) ? $XML::RegExp::Name : $XML::RegExp::NmToken;
+ if ($type =~ /S$/)
+ {
+ for (split (/\s+/, $def))
+ {
+ $self->fail ($attr, 121,
+ "invalid default [$_] in $type [$def]")
+ unless $_ =~ /^$re$/;
+ }
+ }
+ else # singular
+ {
+ $self->fail ($attr, 120, "invalid default $type [$def]")
+ unless $def =~ /^$re$/;
+ }
+ }
+ $c2 = $type;
+ }
+ elsif ($type ne 'CDATA') # Enumerated := NotationType | Enumeration
+ {
+ if ($type =~ /^\s*NOTATION\s*\(\s*($XML::RegExp::Name(\s*\|\s*$XML::RegExp::Name)*)\s*\)\s*$/)
+ {
+ $self->fail ($attr, 135, "empty NOTATION list in ATTLIST")
+ unless defined $1;
+
+ my @tok = split (/\s*\|\s*/, $1);
+ for (@tok)
+ {
+ $self->fail ($attr, 100, "undefined NOTATION [$_] in ATTLIST")
+ unless exists $checker->{NOTATION}->{$_};
+ }
+
+ my $re = join ("|", @tok);
+ $self->{NotationRE} = "^($re)\$";
+ $c2 = 'NotationType';
+ }
+ elsif ($type =~ /^\s*\(\s*($XML::RegExp::NmToken(\s*\|\s*$XML::RegExp::NmToken)*)\s*\)\s*$/)
+ {
+ # Enumeration
+
+ $self->fail ($attr, 136, "empty Enumeration list in ATTLIST")
+ unless defined $1;
+
+ my @tok = split (/\s*\|\s*/, $1);
+ for (@tok)
+ {
+ $self->fail ($attr, 134,
+ "invalid Enumeration value [$_] in ATTLIST")
+ unless $_ =~ /^$XML::RegExp::NmToken$/;
+ }
+ $self->{EnumRE}->{$attr} = '^(' . join ("|", @tok) . ')$'; #';
+ $c2 = 'Enumeration';
+ }
+ else
+ {
+ $self->fail ($attr, 137, "invalid ATTLIST type [$type]");
+ }
+ }
+
+ $self->{Check1}->{$attr} = $c1 if $c1;
+ $self->{Check2}->{$attr} = $c2 if $c2;
+}
+
+sub fail
+{
+ my $self = shift;
+ my $attr = shift;
+ $self->{Checker}->fail (@_, Element => $self->{Elem}, Attr => $attr);
+}
+
+sub check
+{
+ my ($self, $attr) = @_;
+ my $func1 = $self->{Check1}->{$attr};
+ my $func2 = $self->{Check2}->{$attr};
+# print "check func1=$func1 func2=$func2 @_\n";
+
+ if (exists $self->{ReqNotSeen}->{$attr})
+ {
+ delete $self->{ReqNotSeen}->{$attr};
+ }
+ no strict;
+
+ &$func1 (@_) if defined $func1;
+ &$func2 (@_) if defined $func2;
+}
+
+# Copies the list of all required attributes from $self->{Required} to
+# $self->{ReqNotSeen}.
+# When check() encounters a required attribute, it is removed from ReqNotSeen.
+# In EndAttr we look at which attribute names are still in ReqNotSeen - those
+# are the ones that were not specified and are, therefore, in error.
+sub StartAttr
+{
+ my $self = shift;
+ my %not_seen = %{ $self->{Required} };
+ $self->{ReqNotSeen} = \%not_seen;
+}
+
+# Checks which of the #REQUIRED attributes were not specified
+sub EndAttr
+{
+ my $self = shift;
+
+ for my $attr (keys %{ $self->{ReqNotSeen} })
+ {
+ $self->fail ($attr, 159,
+ "unspecified value for \#REQUIRED attribute [$attr]");
+ }
+}
+
+sub FIXED
+{
+ my ($self, $attr, $val, $specified) = @_;
+
+ my $default = $self->{Default}->{$attr};
+ $self->fail ($attr, 150,
+ "bad \#FIXED attribute value [$val], it should be [$default]")
+ unless ($val eq $default);
+}
+
+sub IMPLIED
+{
+ my ($self, $attr, $val, $specified) = @_;
+
+#?? should #IMPLIED be specified?
+ $self->fail ($attr, 158,
+ "unspecified value for \#IMPLIED attribute [$attr]")
+ unless $specified;
+
+#?? Implied handler ?
+}
+
+# This is called when an attribute is passed to the check() method by
+# XML::Checker::Attr(), i.e. when the attribute was specified explicitly
+# or defaulted by the parser (which should never happen), *NOT* when the
+# attribute was omitted. (The latter is checked by StartAttr/EndAttr)
+sub REQUIRED
+{
+ my ($self, $attr, $val, $specified) = @_;
+# print "REQUIRED attr=$attr val=$val spec=$specified\n";
+
+ $self->fail ($attr, 159,
+ "unspecified value for \#REQUIRED attribute [$attr]")
+ unless $specified;
+}
+
+sub ID # must be #IMPLIED or #REQUIRED
+{
+ my ($self, $attr, $val, $specified) = @_;
+
+ $self->fail ($attr, 131, "invalid ID [$val]")
+ unless $val =~ /^$XML::RegExp::Name$/;
+
+ $self->fail ($attr, 111, "ID [$val] already defined")
+ if $self->{Checker}->{ID}->{$val}++;
+}
+
+sub IDREF
+{
+ my ($self, $attr, $val, $specified) = @_;
+
+ $self->fail ($attr, 132, "invalid IDREF [$val]")
+ unless $val =~ /^$XML::RegExp::Name$/;
+
+ $self->{Checker}->{IDREF}->{$val}++;
+}
+
+sub IDREFS
+{
+ my ($self, $attr, $val, $specified) = @_;
+ for (split /\s+/, $val)
+ {
+ $self->IDREF ($attr, $_);
+ }
+}
+
+sub ENTITY
+{
+ my ($self, $attr, $val, $specified) = @_;
+#?? should it be specified?
+
+ $self->fail ($attr, 133, "invalid ENTITY name [$val]")
+ unless $val =~ /^$XML::RegExp::Name$/;
+
+ $self->fail ($attr, 102, "undefined unparsed ENTITY [$val]")
+ unless exists $self->{Checker}->{Unparsed}->{$val};
+}
+
+sub ENTITIES
+{
+ my ($self, $attr, $val, $specified) = @_;
+ for (split /\s+/, $val)
+ {
+ $self->ENTITY ($attr, $_);
+ }
+}
+
+sub NMTOKEN
+{
+ my ($self, $attr, $val, $specified) = @_;
+ $self->fail ($attr, 130, "invalid NMTOKEN [$val]")
+ unless $val =~ /^$XML::RegExp::NmToken$/;
+}
+
+sub NMTOKENS
+{
+ my ($self, $attr, $val, $specified) = @_;
+ for (split /\s+/, $val)
+ {
+ $self->NMTOKEN ($attr, $_, $specified);
+ }
+}
+
+sub Enumeration
+{
+ my ($self, $attr, $val, $specified) = @_;
+ my $re = $self->{EnumRE}->{$attr};
+
+ $self->fail ($attr, 160, "invalid Enumeration value [$val]")
+ unless $val =~ /$re/;
+}
+
+sub NotationType
+{
+ my ($self, $attr, $val, $specified) = @_;
+ my $re = $self->{NotationRE};
+
+ $self->fail ($attr, 161, "invalid NOTATION value [$val]")
+ unless $val =~ /$re/;
+
+ $self->fail ($attr, 162, "undefined NOTATION [$val]")
+ unless exists $self->{Checker}->{NOTATION}->{$val};
+}
+
+package XML::Checker;
+use vars qw ( $VERSION $FAIL $INSIGNIF_WS );
+
+BEGIN
+{
+ $VERSION = '0.09';
+}
+
+$FAIL = \&print_error;
+
+# Whether the last seen Char data was insignicant whitespace
+$INSIGNIF_WS = 0;
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ $args{ERule} = {};
+ $args{ARule} = {};
+ $args{InCDATA} = 0;
+
+# $args{Debug} = 1;
+ bless \%args, $class;
+}
+
+# PerlSAX API
+sub element_decl
+{
+ my ($self, $hash) = @_;
+ $self->Element ($hash->{Name}, $hash->{Model});
+}
+
+# Same parameter order as the Element handler in XML::Parser module
+sub Element
+{
+ my ($self, $name, $model) = @_;
+
+ if (defined $self->{ERule}->{$name})
+ {
+ $self->fail (115, "ELEMENT [$name] already defined",
+ Element => $name);
+ }
+
+ if ($model eq "EMPTY")
+ {
+ $self->{ERule}->{$name} = new XML::Checker::ERule::EMPTY;
+ }
+ elsif ($model eq "ANY")
+ {
+ $self->{ERule}->{$name} = new XML::Checker::ERule::ANY;
+ }
+ elsif ($model =~ /#PCDATA/)
+ {
+ my $rule = new XML::Checker::ERule::Mixed;
+ if ($rule->setModel ($model))
+ {
+ $self->{ERule}->{$name} = $rule;
+ }
+ else
+ {
+ $self->fail (124, "bad model [$model] for ELEMENT [$name]",
+ Element => $name);
+ }
+ }
+ else
+ {
+ my $rule = new XML::Checker::ERule::Children;
+ if ($rule->setModel ($model))
+ {
+ $self->{ERule}->{$name} = $rule;
+ }
+ else
+ {
+ $self->fail (124, "bad model [$model] for ELEMENT [$name]",
+ Element => $name);
+ }
+ }
+ my $rule = $self->{ERule}->{$name};
+ print "added ELEMENT model for $name: " . $rule->debug . "\n"
+ if $rule and $self->{Debug};
+}
+
+# PerlSAX API
+sub attlist_decl
+{
+ my ($self, $hash) = @_;
+ $self->Attlist ($hash->{ElementName}, $hash->{AttributeName},
+ $hash->{Type}, $hash->{Default}, $hash->{Fixed});
+}
+
+sub Attlist
+{
+ my ($self, $tag, $attrName, $type, $default, $fixed) = @_;
+ my $arule = $self->{ARule}->{$tag} ||=
+ new XML::Checker::ARule ($tag, $self);
+
+ $arule->Attlist ($attrName, $type, $default, $fixed, $self);
+}
+
+# Initializes the context stack to check an XML::DOM::Element
+sub InitDomElem
+{
+ my $self = shift;
+
+ # initialize Context stack
+ $self->{Context} = [ new XML::Checker::Context::ANY ($self) ];
+ $self->{InCDATA} = 0;
+}
+
+# Clears the context stack after checking an XML::DOM::Element
+sub FinalDomElem
+{
+ my $self = shift;
+ delete $self->{Context};
+}
+
+# PerlSAX API
+sub start_document
+{
+ shift->Init;
+}
+
+sub Init
+{
+ my $self = shift;
+
+ # initialize Context stack
+ $self->{Context} = [ new XML::Checker::DocContext ($self) ];
+ $self->{InCDATA} = 0;
+}
+
+# PerlSAX API
+sub end_document
+{
+ shift->Final;
+}
+
+sub Final
+{
+ my $self = shift;
+#?? could add more statistics: unreferenced Unparsed, ID
+
+ for (keys %{ $self->{IDREF} })
+ {
+ my $n = $self->{IDREF}->{$_};
+ $self->fail (200, "undefined ID [$_] was referenced [$n] times")
+ unless defined $self->{ID}->{$_};
+ }
+
+ for (keys %{ $self->{ID} })
+ {
+ my $n = $self->{IDREF}->{$_} || 0;
+ $self->fail (300, "[$n] references to ID [$_]");
+ }
+
+ delete $self->{Context};
+}
+
+sub getRootElement
+{
+ my $self = shift;
+# print "getRoot $self " . $self->{RootElement} . "\n";
+ $_[0]->{RootElement};
+}
+
+# PerlSAX API
+sub doctype_decl
+{
+ my ($self, $hash) = @_;
+ $self->Doctype ($hash->{Name}, $hash->{SystemId},
+ $hash->{PublicId}, $hash->{Internal});
+}
+
+sub Doctype
+{
+ my ($self, $name, $sysid, $pubid, $internal) = @_;
+ $self->{RootElement} = $name;
+
+ my $context = $self->{Context}->[0];
+ $context->setRootElement ($name);
+
+#?? what else
+}
+
+sub Attr
+{
+ my ($self, $tag, $attr, $val, $specified) = @_;
+
+#print "Attr for tag=$tag attr=$attr val=$val spec=$specified\n";
+
+ my $arule = $self->{ARule}->{$tag};
+ if (defined $arule && $arule->{Defined}->{$attr})
+ {
+ $arule->check ($attr, $val, $specified);
+ }
+ else
+ {
+ $self->fail (103, "undefined attribute [$attr]", Element => $tag);
+ }
+}
+
+sub EndAttr
+{
+ my $self = shift;
+
+ my $arule = $self->{CurrARule};
+ if (defined $arule)
+ {
+ $arule->EndAttr;
+ }
+}
+
+# PerlSAX API
+sub start_element
+{
+ my ($self, $hash) = @_;
+ my $tag = $hash->{Name};
+ my $attr = $hash->{Attributes};
+
+ $self->Start ($tag);
+
+ if (exists $hash->{AttributeOrder})
+ {
+ my $defaulted = $hash->{Defaulted};
+ my @order = @{ $hash->{AttributeOrder} };
+
+ # Specified attributes
+ for (my $i = 0; $i < $defaulted; $i++)
+ {
+ my $a = $order[$i];
+ $self->Attr ($tag, $a, $attr->{$a}, 1);
+ }
+
+ # Defaulted attributes
+ for (my $i = $defaulted; $i < @order; $i++)
+ {
+ my $attr = $order[$i];
+ $self->Attr ($tag, $a, $attr->{$a}, 0);
+ }
+ }
+ else
+ {
+ # Assume all attributes were specified
+ my @attr = %$attr;
+ my ($key, $val);
+ while ($key = shift @attr)
+ {
+ $val = shift @attr;
+
+ $self->Attr ($tag, $key, $val, 1);
+ }
+ }
+ $self->EndAttr;
+}
+
+sub Start
+{
+ my ($self, $tag) = @_;
+#?? if first tag, check with root element - or does expat check this already?
+
+ my $context = $self->{Context};
+ $context->[0]->Start ($self, $tag);
+
+ my $erule = $self->{ERule}->{$tag};
+ if (defined $erule)
+ {
+ unshift @$context, $erule->context;
+ }
+ else
+ {
+ # It's not a real error according to the XML Spec.
+ $self->fail (101, "undefined ELEMENT [$tag]");
+ unshift @$context, new XML::Checker::Context::ANY;
+ }
+
+#?? what about ARule ??
+ my $arule = $self->{ARule}->{$tag};
+ if (defined $arule)
+ {
+ $self->{CurrARule} = $arule;
+ $arule->StartAttr;
+ }
+}
+
+# PerlSAX API
+sub end_element
+{
+ shift->End;
+}
+
+sub End
+{
+ my ($self) = @_;
+ my $context = $self->{Context};
+
+ $context->[0]->End ($self);
+ shift @$context;
+}
+
+# PerlSAX API
+sub characters
+{
+ my ($self, $hash) = @_;
+ my $data = $hash->{Data};
+
+ if ($self->{InCDATA})
+ {
+ $self->CData ($data);
+ }
+ else
+ {
+ $self->Char ($data);
+ }
+}
+
+# PerlSAX API
+sub start_cdata
+{
+ $_[0]->{InCDATA} = 1;
+}
+
+# PerlSAX API
+sub end_cdata
+{
+ $_[0]->{InCDATA} = 0;
+}
+
+sub Char
+{
+ my ($self, $text) = @_;
+ my $context = $self->{Context};
+
+ # NOTE: calls to isWS may set this to 1.
+ $INSIGNIF_WS = 0;
+
+ $context->[0]->Char ($self, $text);
+}
+
+# Treat CDATASection same as Char (Text)
+sub CData
+{
+ my ($self, $cdata) = @_;
+ my $context = $self->{Context};
+
+ $context->[0]->Char ($self, $cdata);
+
+ # CDATASection can never be insignificant whitespace
+ $INSIGNIF_WS = 0;
+#?? I'm not sure if this assumption is correct
+}
+
+# PerlSAX API
+sub comment
+{
+ my ($self, $hash) = @_;
+ $self->Comment ($hash->{Data});
+}
+
+sub Comment
+{
+# ?? what can be checked here?
+}
+
+# PerlSAX API
+sub entity_reference
+{
+ my ($self, $hash) = @_;
+ $self->EntityRef ($hash->{Name}, 0);
+#?? parameter entities (like %par;) are NOT supported!
+# PerlSAX::handle_default should be fixed!
+}
+
+sub EntityRef
+{
+ my ($self, $ref, $isParam) = @_;
+
+ if ($isParam)
+ {
+ # expand to "%name;"
+ print STDERR "XML::Checker::Entity - parameter Entity (%ent;) not implemented\n";
+ }
+ else
+ {
+ # Treat same as Char - for now
+ my $context = $self->{Context};
+ $context->[0]->Char ($self, "&$ref;");
+ $INSIGNIF_WS = 0;
+#?? I could count the number of times each Entity is referenced
+ }
+}
+
+# PerlSAX API
+sub unparsed_entity_decl
+{
+ my ($self, $hash) = @_;
+ $self->Unparsed ($hash->{Name});
+#?? what about Base, SytemId, PublicId ?
+}
+
+sub Unparsed
+{
+ my ($self, $entity) = @_;
+# print "ARule::Unparsed $entity\n";
+ if ($self->{Unparsed}->{$entity})
+ {
+ $self->fail (112, "unparsed ENTITY [$entity] already defined");
+ }
+ else
+ {
+ $self->{Unparsed}->{$entity} = 1;
+ }
+}
+
+# PerlSAX API
+sub notation_decl
+{
+ my ($self, $hash) = @_;
+ $self->Notation ($hash->{Name});
+#?? what about Base, SytemId, PublicId ?
+}
+
+sub Notation
+{
+ my ($self, $notation) = @_;
+ if ($self->{NOTATION}->{$notation})
+ {
+ $self->fail (113, "NOTATION [$notation] already defined");
+ }
+ else
+ {
+ $self->{NOTATION}->{$notation} = 1;
+ }
+}
+
+# PerlSAX API
+sub entity_decl
+{
+ my ($self, $hash) = @_;
+
+ $self->Entity ($hash->{Name}, $hash->{Value}, $hash->{SystemId},
+ $hash->{PublicId}, $hash->{'Notation'});
+}
+
+sub Entity
+{
+ my ($self, $name, $val, $sysId, $pubId, $ndata) = @_;
+
+ if (exists $self->{ENTITY}->{$name})
+ {
+ $self->fail (114, "ENTITY [$name] already defined");
+ }
+ else
+ {
+ $self->{ENTITY}->{$name} = $val;
+ }
+}
+
+# PerlSAX API
+#sub xml_decl {} $hash=> Version, Encoding, Standalone
+# Don't implement resolve_entity() which is called by ExternEnt!
+#sub processing_instruction {} $hash=> Target, Data
+
+# Returns whether the Char data is whitespace and also updates the
+# $INSIGNIF_WS variable to indicate whether it is insignificant whitespace.
+# Note that this method is only called in places where potential whitespace
+# can be insignificant (i.e. when the ERule is Children or EMPTY)
+sub isWS
+{
+ $INSIGNIF_WS = ($_[1] =~ /^\s*$/);
+}
+
+sub isInsignifWS
+{
+ $INSIGNIF_WS;
+}
+
+sub fail
+{
+ my $self = shift;
+ &$FAIL (@_);
+}
+
+sub print_error # static
+{
+ my $str = error_string (@_);
+ print STDERR $str;
+}
+
+sub error_string # static
+{
+ my $code = shift;
+ my $msg = shift;
+
+ my @a = ();
+ my ($key, $val);
+ while ($key = shift)
+ {
+ $val = shift;
+ push @a, ("$key " . (defined $val ? $val : "(undef)"));
+ }
+
+ my $cat = $code >= 200 ? ($code >= 300 ? "INFO" : "WARNING") : "ERROR";
+ my $str = join (", ", @a);
+ $str = length($str) ? "\tContext: $str\n" : "";
+
+ "XML::Checker $cat-$code: $msg\n$str";
+}
+
+sub debug
+{
+ my ($self) = @_;
+ my $context = $self->{Context}->[0];
+ my $c = $context ? $context->debug : "no context";
+ my $root = $self->{RootElement};
+
+ "Checker[$c,RootElement=$root]";
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::Checker - A perl module for validating XML
+
+=head1 SYNOPSIS
+
+L<XML::Checker::Parser> - an L<XML::Parser> that validates at parse time
+
+L<XML::DOM::ValParser> - an L<XML::DOM::Parser> that validates at parse time
+
+(Some of the package names may change! This is only an alpha release...)
+
+=head1 DESCRIPTION
+
+XML::Checker can be used in different ways to validate XML. See the manual
+pages of L<XML::Checker::Parser> and L<XML::DOM::ValParser>
+for more information.
+
+This document only describes common topics like error handling
+and the XML::Checker class itself.
+
+WARNING: Not all errors are currently checked. Almost everything is subject to
+change. Some reported errors may not be real errors.
+
+=head1 ERROR HANDLING
+
+Whenever XML::Checker (or one of the packages that uses XML::Checker) detects a
+potential error, the 'fail handler' is called. It is currently also called
+to report information, like how many times an Entity was referenced.
+(The whole error handling mechanism is subject to change, I'm afraid...)
+
+The default fail handler is XML::Checker::print_error(), which prints an error
+message to STDERR. It does not stop the XML::Checker, so it will continue
+looking for other errors.
+The error message is created with XML::Checker::error_string().
+
+You can define your
+own fail handler in two ways, locally and globally. Use a local variable to
+temporarily override the fail handler. This way the default fail handler is restored
+when the local variable goes out of scope, esp. when exceptions are thrown e.g.
+
+ # Using a local variable to temporarily override the fail handler (preferred)
+ { # new block - start of local scope
+ local $XML::Checker::FAIL = \&my_fail;
+ ... your code here ...
+ } # end of block - the previous fail handler is restored
+
+You can also set the error handler globally, risking that your code may not
+be reusable or may clash with other modules that use XML::Checker.
+
+ # Globally setting the fail handler (not recommended)
+ $XML::Checker::FAIL = \&my_fail;
+ ... rest of your code ...
+
+The fail handler is called with the following parameters ($code, $msg, @context),
+where $code is the error code, $msg is the error description and
+@context contains information on where the error occurred. The @context is
+a (ordered) list of (key,value) pairs and can easily be turned into a hash.
+It contains the following information:
+
+ Element - tag name of Element node (if applicable)
+ Attr - attribute name (if applicable)
+ ChildElementIndex - if applicable (see error 157)
+ line - only when parsing
+ column - only when parsing
+ byte - only when parsing (-1 means: end of file)
+
+Some examples of fail handlers:
+
+ # Don't print info messages
+ sub my_fail
+ {
+ my $code = shift;
+ print STDERR XML::Checker::error_message ($code, @_)
+ if $code < 300;
+ }
+
+ # Die when the first error is encountered - this will stop
+ # the parsing process. Ignore information messages.
+ sub my_fail
+ {
+ my $code = shift;
+ die XML::Checker::error_message ($code, @_) if $code < 300;
+ }
+
+ # Count the number of undefined NOTATION references
+ # and print the error as usual
+ sub my_fail
+ {
+ my $code = shift;
+ $count_undef_notations++ if $code == 100;
+ XML::Checker::print_error ($code, @_);
+ }
+
+ # Die when an error is encountered.
+ # Don't die if a warning or info message is encountered, just print a message.
+ sub my_fail {
+ my $code = shift;
+ die XML::Checker::error_string ($code, @_) if $code < 200;
+ XML::Checker::print_error ($code, @_);
+ }
+
+=head1 INSIGNIFICANT WHITESPACE
+
+XML::Checker keeps track of whether whitespace found in character data
+is significant or not. It is considered insignicant if it is found inside
+an element that has a ELEMENT rule that is not of type Mixed or of type ANY.
+(A Mixed ELEMENT rule does contains the #PCDATA keyword.
+An ANY rule contains the ANY keyword. See the XML spec for more info.)
+
+XML::Checker can not determine whether whitespace is insignificant in those two
+cases, because they both allow regular character data to appear within
+XML elements and XML::Checker can therefore not deduce whether whitespace
+is part of the actual data or was just added for readability of the XML file.
+
+XML::Checker::Parser and XML::DOM::ValParser both have the option to skip
+insignificant whitespace when setting B<SkipInsignifWS> to 1 in their constructor.
+If set, they will not call the Char handler when insignificant whitespace is
+encountered. This means that in XML::DOM::ValParser no Text nodes are created
+for insignificant whitespace.
+
+Regardless of whether the SkipInsignifWS options is set, XML::Checker always
+keeps track of whether whitespace is insignificant. After making a call to
+XML::Checker's Char handler, you can find out if it was insignificant whitespace
+by calling the isInsignifWS method.
+
+When using multiple (nested) XML::Checker instances or when using XML::Checker
+without using XML::Checker::Parser or XML::DOM::ValParser (which hardly anybody
+probably will), make sure to set a local variable in the scope of your checking
+code, e.g.
+
+ { # new block - start of local scope
+ local $XML::Checker::INSIGNIF_WS = 0;
+ ... insert your code here ...
+ } # end of scope
+
+=head1 ERROR CODES
+
+There are 3 categories, errors, warnings and info messages.
+(The codes are still subject to change, as well the error descriptions.)
+
+Most errors have a link to the appropriate Validaty Constraint (B<VC>)
+or other section in the XML specification.
+
+=head2 ERROR Messages
+
+=head2 100 - 109
+
+=over 4
+
+=item *
+
+B<100> - undefined NOTATION [$notation] in ATTLIST
+
+The ATTLIST contained a Notation reference that was not defined in a
+NOTATION definition.
+B<VC:> L<Notation Attributes|http://www.w3.org/TR/REC-xml#notatn>
+
+
+=item *
+
+B<101> - undefined ELEMENT [$tagName]
+
+The specified Element was never defined in an ELEMENT definition.
+This is not an error according to the XML spec.
+See L<Element Type Declarations|http://www.w3.org/TR/REC-xml#elemdecls>
+
+
+=item *
+
+B<102> - undefined unparsed ENTITY [$entity]
+
+The attribute value referenced an undefined unparsed entity.
+B<VC:> L<Entity Name|http://www.w3.org/TR/REC-xml#entname>
+
+
+=item *
+
+B<103> - undefined attribute [$attrName]
+
+The specified attribute was not defined in an ATTLIST for that Element.
+B<VC:> L<Attribute Value Type|http://www.w3.org/TR/REC-xml#ValueType>
+
+
+=back
+
+=head2 110 - 119
+
+=over 4
+
+=item *
+
+B<110> - attribute [$attrName] of element [$tagName] already defined
+
+The specified attribute was already defined in this ATTLIST definition or
+in a previous one.
+This is not an error according to the XML spec.
+See L<Attribute-List Declarations|http://www.w3.org/TR/REC-xml#attdecls>
+
+
+=item *
+
+B<111> - ID [$value] already defined
+
+An ID with the specified value was already defined in an attribute
+within the same document.
+B<VC:> L<ID|http://www.w3.org/TR/REC-xml#id>
+
+
+=item *
+
+B<112> - unparsed ENTITY [$entity] already defined
+
+This is not an error according to the XML spec.
+See L<Entity Declarations|http://www.w3.org/TR/REC-xml#sec-entity-decl>
+
+
+=item *
+
+B<113> - NOTATION [$notation] already defined
+
+
+=item *
+
+B<114> - ENTITY [$entity] already defined
+
+This is not an error according to the XML spec.
+See L<Entity Declarations|http://www.w3.org/TR/REC-xml#sec-entity-decl>
+
+
+=item *
+
+B<115> - ELEMENT [$name] already defined
+B<VC:> L<Unique Element Type Declaration|http://www.w3.org/TR/REC-xml#EDUnique>
+
+
+=back
+
+=head2 120 - 129
+
+=over 4
+
+=item *
+
+B<120> - invalid default ENTITY [$default]
+
+(Or IDREF or NMTOKEN instead of ENTITY.)
+The ENTITY, IDREF or NMTOKEN reference in the default attribute
+value for an attribute with types ENTITY, IDREF or NMTOKEN was not
+valid.
+B<VC:> L<Attribute Default Legal|http://www.w3.org/TR/REC-xml#defattrvalid>
+
+
+=item *
+
+B<121> - invalid default [$token] in ENTITIES [$default]
+
+(Or IDREFS or NMTOKENS instead of ENTITIES)
+One of the ENTITY, IDREF or NMTOKEN references in the default attribute
+value for an attribute with types ENTITIES, IDREFS or NMTOKENS was not
+valid.
+B<VC:> L<Attribute Default Legal|http://www.w3.org/TR/REC-xml#defattrvalid>
+
+
+=item *
+
+B<122> - invalid default attribute value [$default]
+
+The specified default attribute value is not a valid attribute value.
+B<VC:> L<Attribute Default Legal|http://www.w3.org/TR/REC-xml#defattrvalid>
+
+
+=item *
+
+B<123> - invalid default ID [$default], must be #REQUIRED or #IMPLIED
+
+The default attribute value for an attribute of type ID has to be
+#REQUIRED or #IMPLIED.
+B<VC:> L<ID Attribute Default|http://www.w3.org/TR/REC-xml#id-default>
+
+
+=item *
+
+B<124> - bad model [$model] for ELEMENT [$name]
+
+The model in the ELEMENT definition did not conform to the XML syntax
+for Mixed models.
+See L<Mixed Content|http://www.w3.org/TR/REC-xml#sec-mixed-content>
+
+
+=back
+
+=head2 130 - 139
+
+=over 4
+
+=item *
+
+B<130> - invalid NMTOKEN [$attrValue]
+
+The attribute value is not a valid NmToken token.
+B<VC:> L<Enumeration|http://www.w3.org/TR/REC-xml#enum>
+
+
+=item *
+
+B<131> - invalid ID [$attrValue]
+
+The specified attribute value is not a valid Name token.
+B<VC:> L<ID|http://www.w3.org/TR/REC-xml#id>
+
+
+=item *
+
+B<132> - invalid IDREF [$value]
+
+The specified attribute value is not a valid Name token.
+B<VC:> L<IDREF|http://www.w3.org/TR/REC-xml#idref>
+
+
+=item *
+
+B<133> - invalid ENTITY name [$name]
+
+The specified attribute value is not a valid Name token.
+B<VC:> L<Entity Name|http://www.w3.org/TR/REC-xml#entname>
+
+
+=item *
+
+B<134> - invalid Enumeration value [$value] in ATTLIST
+
+The specified value is not a valid NmToken (see XML spec for def.)
+See definition of L<NmToken|http://www.w3.org/TR/REC-xml#NT-Nmtoken>
+
+
+=item *
+
+B<135> - empty NOTATION list in ATTLIST
+
+The NOTATION list of the ATTLIST definition did not contain any NOTATION
+references.
+See definition of L<NotationType|http://www.w3.org/TR/REC-xml#NT-NotationType>
+
+
+=item *
+
+B<136> - empty Enumeration list in ATTLIST
+
+The ATTLIST definition of the attribute of type Enumeration did not
+contain any values.
+See definition of L<Enumeration|http://www.w3.org/TR/REC-xml#NT-Enumeration>
+
+
+=item *
+
+B<137> - invalid ATTLIST type [$type]
+
+The attribute type has to be one of: ID, IDREF, IDREFS, ENTITY, ENTITIES,
+NMTOKEN, NMTOKENS, CDATA, NOTATION or an Enumeration.
+See definition of L<AttType|http://www.w3.org/TR/REC-xml#NT-AttType>
+
+
+=back
+
+=head2 150 - 159
+
+=over 4
+
+=item *
+
+B<150> - bad #FIXED attribute value [$value], it should be [$default]
+
+The specified attribute was defined as #FIXED in the ATTLIST definition
+and the found attribute $value differs from the specified $default value.
+B<VC:> L<Fixed Attribute Default|http://www.w3.org/TR/REC-xml#FixedAttr>
+
+
+=item *
+
+B<151> - only one ID allowed in ATTLIST per element first=[$attrName]
+
+The ATTLIST definitions for an Element may contain only one attribute
+with the type ID. The specified $attrName is the one that was found first.
+B<VC:> L<One ID per Element Type|http://www.w3.org/TR/REC-xml#one-id-per-el>
+
+
+=item *
+
+B<152> - Element should be EMPTY, found Element [$tagName]
+
+The ELEMENT definition for the specified Element said it should be
+EMPTY, but a child Element was found.
+B<VC:> L<Element Valid (sub1)|http://www.w3.org/TR/REC-xml#elementvalid>
+
+
+=item *
+
+B<153> - Element should be EMPTY, found text [$text]
+
+The ELEMENT definition for the specified Element said it should be
+EMPTY, but text was found. Currently, whitespace is not allowed between the
+open and close tag. (This may be wrong, please give feedback.)
+To allow whitespace (subject to change), set:
+
+ $XML::Checker::Context::EMPTY::ALLOW_WHITE_SPACE = 1;
+
+B<VC:> L<Element Valid (sub1)|http://www.w3.org/TR/REC-xml#elementvalid>
+
+
+=item *
+
+B<154> - bad order of Elements Found=[$found] RE=[$re]
+
+The child elements of the specified Element did not match the
+regular expression found in the ELEMENT definition. $found contains
+a comma separated list of all the child element tag names that were found.
+$re contains the (decoded) regular expression that was used internally.
+B<VC:> L<Element Valid|http://www.w3.org/TR/REC-xml#elementvalid>
+
+
+=item *
+
+B<155> - more than one root Element [$tags]
+
+An XML Document may only contain one Element.
+$tags is a comma separated list of element tag names encountered sofar.
+L<XML::Parser> (expat) throws 'no element found' exception.
+See two_roots.xml for an example.
+See definition of L<document|http://www.w3.org/TR/REC-xml#dt-root>
+
+
+=item *
+
+B<156> - unexpected root Element [$tagName], expected [$rootTagName]
+
+The tag name of the root Element of the XML Document differs from the name
+specified in the DOCTYPE section.
+L<XML::Parser> (expat) throws 'not well-formed' exception.
+See bad_root.xml for an example.
+B<VC:> L<Root Element Type|http://www.w3.org/TR/REC-xml#vc-roottype>
+
+
+=item *
+
+B<157> - unexpected Element [$tagName]
+
+The ELEMENT definition for the specified Element does not allow child
+Elements with the specified $tagName.
+B<VC:> L<Element Valid|http://www.w3.org/TR/REC-xml#elementvalid>
+
+The error context contains ChildElementIndex which is the index within
+its parent Element (counting only Element nodes.)
+
+
+=item *
+
+B<158> - unspecified value for #IMPLIED attribute [$attrName]
+
+The ATTLIST for the specified attribute said the attribute was #IMPLIED,
+which means the user application should supply a value, but the attribute
+value was not specified. (User applications should pass a value and set
+$specified to 1 in the Attr handler.)
+
+
+=item *
+
+B<159> - unspecified value for #REQUIRED attribute [$attrName]
+
+The ATTLIST for the specified attribute said the attribute was #REQUIRED,
+which means that a value should have been specified.
+B<VC:> L<Required Attribute|http://www.w3.org/TR/REC-xml#RequiredAttr>
+
+
+=back
+
+=head2 160 - 169
+
+=over 4
+
+=item *
+
+B<160> - invalid Enumeration value [$attrValue]
+
+The specified attribute value does not match one of the Enumeration values
+in the ATTLIST.
+B<VC:> L<Enumeration|http://www.w3.org/TR/REC-xml#enum>
+
+
+=item *
+
+B<161> - invalid NOTATION value [$attrValue]
+
+The specifed attribute value was not found in the list of possible NOTATION
+references as found in the ATTLIST definition.
+B<VC:> L<Notation Attributes|http://www.w3.org/TR/REC-xml#notatn>
+
+
+=item *
+
+B<162> - undefined NOTATION [$attrValue]
+
+The NOTATION referenced by the specified attribute value was not defined.
+B<VC:> L<Notation Attributes|http://www.w3.org/TR/REC-xml#notatn>
+
+
+=back
+
+=head2 WARNING Messages (200 and up)
+
+=over 4
+
+=item *
+
+B<200> - undefined ID [$id] was referenced [$n] times
+
+The specified ID was referenced $n times, but never defined in an attribute
+value with type ID.
+B<VC:> L<IDREF|http://www.w3.org/TR/REC-xml#idref>
+
+
+=back
+
+=head2 INFO Messages (300 and up)
+
+=over 4
+
+=item *
+
+B<300> - [$n] references to ID [$id]
+
+The specified ID was referenced $n times.
+
+
+=back
+
+=head2 Not checked
+
+The following errors are already checked by L<XML::Parser> (expat) and
+are currently not checked by XML::Checker:
+
+(?? TODO - add more info)
+
+=over 4
+
+=item root element is missing
+
+L<XML::Parser> (expat) throws 'no element found' exception.
+See no_root.xml for an example.
+
+=back
+
+=head1 XML::Checker
+
+XML::Checker can be easily plugged into your application.
+It uses mostly the same style of event handlers (or callbacks) as L<XML::Parser>.
+See L<XML::Parser> manual page for descriptions of most handlers.
+
+It also implements PerlSAX style event handlers. See L<PerlSAX interface>.
+
+Currently, the XML::Checker object is a blessed hash with the following
+(potentially useful) entries:
+
+ $checker->{RootElement} - root element name as found in the DOCTYPE
+ $checker->{NOTATION}->{$notation} - is 1 if the NOTATION was defined
+ $checker->{ENTITY}->{$name} - contains the (first) ENTITY value if defined
+ $checker->{Unparsed}->{$entity} - is 1 if the unparsed ENTITY was defined
+ $checker->{ID}->{$id} - is 1 if the ID was defined
+ $checker->{IDREF}->{$id} - number of times the ID was referenced
+
+ # Less useful:
+ $checker->{ERule}->{$tag} - the ELEMENT rules by Element tag name
+ $checker->{ARule}->{$tag} - the ATTLIST rules by Element tag name
+ $checker->{Context} - context stack used internally
+ $checker->{CurrARule} - current ATTLIST rule for the current Element
+
+=head2 XML:Checker methods
+
+This section is only interesting when using XML::Checker directly.
+XML::Checker supports most event handlers that L<XML::Parser> supports with minor
+differences. Note that the XML::Checker event handler methods are
+instance methods and not static, so don't forget to call them like this,
+without passing $expat (as in the L<XML::Parser>) handlers:
+
+ $checker->Start($tagName);
+
+=over 4
+
+=item Constructor
+
+ $checker = new XML::Checker;
+ $checker = new XML::Checker (%user_args);
+
+User data may be stored by client applications. Only $checker->{User} is
+guaranteed not to clash with internal hash keys.
+
+=item getRootElement ()
+
+ $tagName = $checker->getRootElement;
+
+Returns the root element name as found in the DOCTYPE
+
+=back
+
+=head2 Expat interface
+
+XML::Checker supports what I call the I<Expat> interface, which is
+the collection of methods you normally specify as the callback handlers
+when using XML::Parser.
+
+Only the following L<XML::Parser> handlers are currently supported:
+Init, Final, Char, Start, End, Element, Attlist, Doctype,
+Unparsed, Entity, Notation.
+
+I don't know how to correctly support the Default handler for all L<XML::Parser>
+releases. The Start handler works a little different (see below) and I
+added Attr, InitDomElem, FinalDomElem, CDATA and EntityRef handlers.
+See L<XML::Parser> for a description of the handlers that are not listed below.
+
+Note that this interface may disappear, when the PerlSAX interface stabilizes.
+
+=over 4
+
+=item Start ($tag)
+
+ $checker->Start($tag);
+
+Call this when an Element with the specified $tag name is encountered.
+Different from the Start handler in L<XML::Parser>, in that no attributes
+are passed in (use the Attr handler for those.)
+
+=item Attr ($tag, $attrName, $attrValue, $isSpecified)
+
+ $checker->Attr($tag,$attrName,$attrValue,$spec);
+
+Checks an attribute with the specified $attrName and $attrValue against the
+ATTLIST definition of the element with the specified $tag name.
+$isSpecified means whether the attribute was specified (1) or defaulted (0).
+
+=item EndAttr ()
+
+ $checker->EndAttr;
+
+This should be called after all attributes are passed with Attr().
+It will check which of the #REQUIRED attributes were not specified and generate
+the appropriate error (159) for each one that is missing.
+
+=item CDATA ($text)
+
+ $checker->CDATA($text);
+
+This should be called whenever CDATASections are encountered.
+Similar to Char handler (but might perform different checks later...)
+
+=item EntityRef ($entity, $isParameterEntity)
+
+ $checker->EntityRef($entity,$isParameterEntity);
+
+Checks the ENTITY reference. Set $isParameterEntity to 1 for
+entity references that start with '%'.
+
+=item InitDomElem () and FinalDomElem ()
+
+Used by XML::DOM::Element::check() to initialize (and cleanup) the
+context stack when checking a single element.
+
+=back
+
+=head2 PerlSAX interface
+
+XML::Checker now also supports the PerlSAX interface, so you can use XML::Checker
+wherever you use PerlSAX handlers.
+
+XML::Checker implements the following methods: start_document, end_document,
+start_element, end_element, characters, processing_instruction, comment,
+start_cdata, end_cdata, entity_reference, notation_decl, unparsed_entity_decl,
+entity_decl, element_decl, attlist_decl, doctype_decl, xml_decl
+
+Not implemented: set_document_locator, ignorable_whitespace
+
+See PerlSAX.pod for details. (It is called lib/PerlSAX.pod in the libxml-perl
+distribution which can be found at CPAN.)
+
+=head1 CAVEATS
+
+This is an alpha release. Almost everything is subject to change.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=head1 SEE ALSO
+
+The home page of XML::Checker at L<http://www.erols.com/enno/checker/index.html>
+
+The XML spec (Extensible Markup Language 1.0) at L<http://www.w3.org/TR/REC-xml>
+
+The L<XML::Parser> and L<XML::Parser::Expat> manual pages.
+
+The other packages that come with XML::Checker:
+L<XML::Checker::Parser>, L<XML::DOM::ValParser>
+
+The DOM Level 1 specification at L<http://www.w3.org/TR/REC-DOM-Level-1>
+
+The PerlSAX specification. It is currently in lib/PerlSAX.pod in the
+libxml-perl distribution by Ken MacLeod.
+
+The original SAX specification (Simple API for XML) can be found at
+L<http://www.megginson.com/SAX> and L<http://www.megginson.com/SAX/SAX2>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Checker/DOM.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,4 @@
+BEGIN
+{
+ warn "XML::Checker::DOM has been deprecated. The methods have been merged into XML::DOM."
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Checker/Parser.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,683 @@
+package XML::Checker::Parser;
+use strict;
+use XML::Parser;
+use XML::Checker;
+
+use vars qw( @ISA @InterceptedHandlers @SGML_SEARCH_PATH %URI_MAP
+ $_checker $_prevFAIL
+ $_Init $_Final $_Char $_Start $_End $_Element $_Attlist
+ $_Doctype $_Unparsed $_Notation $_Entity $_skipInsignifWS
+ $_EndOfDoc
+ );
+
+@ISA = qw( XML::Parser );
+
+@InterceptedHandlers = qw( Init Final Char Start End Element Attlist
+ Doctype Unparsed Notation Entity );
+
+# Where to search for external DTDs (in local file system)
+@SGML_SEARCH_PATH = ();
+
+# Where to search for external DTDs as referred to by public ID in a
+# <!DOCTYPE ...> statement, e.g. "-//W3C//DTD HTML 4.0//EN"
+# E.g. it could map "-//W3C//DTD HTML 4.0//EN" to "file:/user/html.dtd"
+%URI_MAP = ();
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ my $super = new XML::Parser (%args);
+ $super->{Checker} = new XML::Checker (%args);
+
+ my %handlers = %{$super->{Handlers}};
+
+ # Don't need Comment handler - assuming comments are allowed anywhere
+#?? What should Default handler do?
+#?? Check XMLDecl, ExternEnt, Proc? No, for now.
+#?? Add CdataStart, CdataEnd support?
+
+ for (@InterceptedHandlers)
+ {
+ my $func = "XML::Checker::Parser::$_";
+ $handlers{$_} = \&$func;
+ }
+
+ $super->{UserHandlers} = $super->{Handlers};
+ $super->{Handlers} = \%handlers;
+
+ bless $super, $class;
+}
+
+sub getChecker
+{
+ $_[0]->{Checker}
+}
+
+sub parse
+{
+ my $self = shift;
+ my $uh = $self->{UserHandlers};
+
+ local $_checker = $self->{Checker};
+
+ local $_Init = $uh->{Init};
+ local $_Final = $uh->{Final};
+ local $_Start = $uh->{Start};
+ local $_End = $uh->{End};
+ local $_Char = $uh->{Char};
+ local $_Element = $uh->{'Element'};
+ local $_Attlist = $uh->{'Attlist'};
+ local $_Doctype = $uh->{Doctype};
+ local $_Unparsed = $uh->{Unparsed};
+ local $_Notation = $uh->{Notation};
+ local $_Entity = $uh->{Entity};
+
+ local $_prevFAIL = $XML::Checker::FAIL;
+ local $XML::Checker::FAIL = \&fail_add_context;
+
+ local $XML::Checker::INSIGNIF_WS = 0;
+ local $_skipInsignifWS = $self->{SkipInsignifWS};
+
+ local $_EndOfDoc = 0;
+
+ $self->SUPER::parse (@_);
+}
+
+my $LWP_USER_AGENT;
+sub set_LWP_UserAgent # static
+{
+ $LWP_USER_AGENT = shift;
+}
+
+sub load_URL # static
+{
+ my ($url, $lwp_user_agent) = @_;
+ my $result;
+
+ # Read the file from the web with LWP.
+ #
+ # Note that we read in the entire file, which may not be ideal
+ # for large files. LWP::UserAgent also provides a callback style
+ # request, which we could convert to a stream with a fork()...
+
+ my $response;
+ eval
+ {
+ use LWP::UserAgent;
+
+ my $ua = $lwp_user_agent;
+ unless (defined $ua)
+ {
+ unless (defined $LWP_USER_AGENT)
+ {
+ $LWP_USER_AGENT = LWP::UserAgent->new;
+
+ # Load proxy settings from environment variables, i.e.:
+ # http_proxy, ftp_proxy, no_proxy etc. (see LWP::UserAgent(3))
+ # You need these to go thru firewalls.
+ $LWP_USER_AGENT->env_proxy;
+ }
+ $ua = $LWP_USER_AGENT;
+ }
+ my $req = new HTTP::Request 'GET', $url;
+ $response = $LWP_USER_AGENT->request ($req);
+ $result = $response->content;
+ };
+ if ($@)
+ {
+ die "Couldn't load URL [$url] with LWP: $@";
+ }
+ if (!$result)
+ {
+ my $message = $response->as_string;
+ die "Couldn't load URL [$url] with LWP: $message";
+ }
+ return $result;
+}
+
+sub parsefile
+{
+ my $self = shift;
+ my $url = shift;
+
+ # Any other URL schemes?
+ if ($url =~ /^(https?|ftp|wais|gopher|file):/)
+ {
+ my $xml = load_URL ($url, $self->{LWP_UserAgent});
+ my $result;
+ eval
+ {
+ # Parse the result of the HTTP request
+ $result = $self->parse ($xml, @_);
+ };
+ if ($@)
+ {
+ die "Couldn't parsefile [$url]: $@";
+ }
+ return $result;
+ }
+ else
+ {
+ return $self->SUPER::parsefile ($url, @_);
+ }
+}
+
+sub Init
+{
+ my $expat = shift;
+ $_checker->{Expat} = $expat;
+
+ $_checker->Init (@_);
+ &$_Init ($expat) if $_Init;
+}
+
+sub Final
+{
+ my $expat = shift;
+ $_EndOfDoc = 1;
+
+ $_checker->Final (@_);
+ my $result = &$_Final ($expat) if $_Final;
+
+ # Decouple Expat from Checker
+ delete $_checker->{Expat};
+
+ # NOTE: Checker is not decoupled
+ return $result;
+}
+
+sub Start
+{
+ my ($expat, $tag, @attr) = @_;
+
+ $_checker->Start ($tag);
+
+ my $num_spec = $expat->specified_attr;
+ for (my $i = 0; $i < @attr; $i++)
+ {
+ my $spec = ($i < $num_spec);
+ my $attr = $attr[$i];
+ my $val = $attr[++$i];
+
+# print "--- $tag $attr $val $spec\n";
+ $_checker->Attr ($tag, $attr, $val, $spec);
+ }
+ $_checker->EndAttr;
+
+ &$_Start ($expat, $tag, @attr) if $_Start;
+}
+
+sub End
+{
+ my $expat = shift;
+ $_checker->End (@_);
+ &$_End ($expat, @_) if $_End;
+}
+
+sub Char
+{
+ my $expat = shift;
+ $_checker->Char (@_);
+ &$_Char ($expat, @_)
+ if $_Char && !($XML::Checker::INSIGNIF_WS && $_skipInsignifWS);
+ # Skip insignificant whitespace
+}
+
+sub Element
+{
+ my $expat = shift;
+ $_checker->Element (@_);
+ &$_Element ($expat, @_) if $_Element;
+}
+
+sub Attlist
+{
+ my $expat = shift;
+ $_checker->Attlist (@_);
+ &$_Attlist ($expat, @_) if $_Attlist;
+}
+
+
+sub Doctype
+{
+ my $expat = shift;
+ my ($name, $sysid, $pubid, $internal) = @_;
+
+ my $dtd;
+ unless ($_checker->{SkipExternalDTD})
+ {
+ if ($sysid)
+ {
+ # External DTD...
+
+ #?? I'm not sure if we should die here or keep going?
+ $dtd = load_DTD ($sysid, $expat->{LWP_UserAgent});
+ }
+ elsif ($pubid)
+ {
+ $dtd = load_DTD ($pubid, $expat->{LWP_UserAgent});
+ }
+ }
+
+ if (defined $dtd)
+ {
+#?? what about passing ProtocolEncoding, Namespaces, Stream_Delimiter ?
+ my $parser = new XML::Parser (
+ Checker => $_checker,
+ ErrorContext => $expat->{ErrorContext},
+ Handlers => {
+ Entity => \&XML::Checker::Parser::ExternalDTD::Entity,
+ Notation => \&XML::Checker::Parser::ExternalDTD::Notation,
+ Element => \&XML::Checker::Parser::ExternalDTD::Element,
+ Attlist => \&XML::Checker::Parser::ExternalDTD::Attlist,
+ Unparsed => \&XML::Checker::Parser::ExternalDTD::Unparsed,
+ });
+
+ eval
+ {
+ $parser->parse ("<!DOCTYPE $name SYSTEM '$sysid' [\n$dtd\n]>\n<$name/>");
+ };
+ if ($@)
+ {
+ die "Couldn't parse contents of external DTD <$sysid> :$@";
+ }
+ }
+ $_checker->Doctype (@_);
+ &$_Doctype ($expat, @_) if $_Doctype;
+}
+
+sub Unparsed
+{
+ my $expat = shift;
+ $_checker->Unparsed (@_);
+ &$_Unparsed ($expat, @_) if $_Unparsed;
+}
+
+sub Entity
+{
+ my $expat = shift;
+ $_checker->Entity (@_);
+ &$_Entity ($expat, @_) if $_Entity;
+}
+
+sub Notation
+{
+ my $expat = shift;
+ $_checker->Notation (@_);
+ &$_Notation ($expat, @_) if $_Notation;
+}
+
+sub Default
+{
+#?? what can I check here?
+# print "Default handler got[" . join (", ", @_) . "]";
+}
+
+#sub XMLDecl
+#{
+#?? support later?
+#}
+
+sub setHandlers
+{
+ my ($self, %h) = @_;
+
+ for my $name (@InterceptedHandlers)
+ {
+ if (exists $h{$name})
+ {
+ eval "\$_$name = \$h{$name}";
+ delete $h{$name};
+ }
+ }
+
+ # Pass remaining handlers to the parent class (XML::Parser)
+ $self->SUPER::setHandlers (%h);
+}
+
+# Add (line, column, byte) to error context (unless it's EOF)
+sub fail_add_context # static
+{
+ my $e = $_checker->{Expat};
+
+ my $byte = $e->current_byte; # -1 means: end of XML document
+ if ($byte != -1 && !$_EndOfDoc)
+ {
+ push @_, (line => $e->current_line,
+ column => $e->current_column,
+ byte => $byte);
+ }
+ &$_prevFAIL (@_);
+}
+
+#-------- STATIC METHODS related to External DTDs ---------------------------
+
+sub load_DTD # static
+{
+ my ($sysid, $lwp_user_agent) = @_;
+
+ # See if it is defined in the %URI_MAP
+ # (Public IDs are stored here, e.g. "-//W3C//DTD HTML 4.0//EN")
+ if (exists $URI_MAP{$sysid})
+ {
+ $sysid = $URI_MAP{$sysid};
+ }
+ elsif ($sysid !~ /^\w+:/)
+ {
+ # Prefix the sysid with 'file:' if it has no protocol identifier
+ unless ($sysid =~ /^\//)
+ {
+ # Not an absolute path. See if it's in SGML_SEARCH_PATH.
+ my $relative_sysid = $sysid;
+
+ $sysid = find_in_sgml_search_path ($sysid);
+ if (! $sysid)
+ {
+ if ($ENV{'SGML_SEARCH_PATH'})
+ {
+ die "Couldn't find external DTD [$relative_sysid] in SGML_SEARCH_PATH ($ENV{'SGML_SEARCH_PATH'})";
+ }
+ else
+ {
+ die "Couldn't find external DTD [$relative_sysid], may be you should set SGML_SEARCH_PATH";
+ }
+ }
+ }
+ $sysid = "file:$sysid";
+ }
+
+ return load_URL ($sysid, $lwp_user_agent);
+}
+
+sub map_uri # static
+{
+ %URI_MAP = (%URI_MAP, @_);
+}
+
+sub set_sgml_search_path # static
+{
+ @SGML_SEARCH_PATH = @_;
+}
+
+sub find_in_sgml_search_path # static
+{
+ my $file = shift;
+
+ my @dirs = @SGML_SEARCH_PATH;
+ unless (@dirs)
+ {
+ my $path = $ENV{SGML_SEARCH_PATH};
+ if ($path)
+ {
+ @dirs = split (':', $path);
+ }
+ else
+ {
+ my $home = $ENV{HOME};
+ @dirs = (".", "$home/.sgml", "/usr/lib/sgml", "/usr/share/sgml");
+ }
+ }
+
+ for my $directory (@dirs)
+ {
+ if (-e "$directory/$file")
+ {
+ return "$directory/$file";
+ }
+ }
+ return undef;
+}
+
+package XML::Checker::Parser::ExternalDTD;
+
+sub Element {
+ my $expat = shift;
+ $expat->{Checker}->Element(@_);
+}
+
+sub Attlist {
+ my $expat = shift;
+ $expat->{Checker}->Attlist(@_);
+}
+
+sub Unparsed {
+ my $expat = shift;
+ $expat->{Checker}->Unparsed(@_);
+}
+
+sub Notation {
+ my $expat = shift;
+ $expat->{Checker}->Notation(@_);
+}
+
+sub Entity {
+ my $expat = shift;
+# print "Entity: $expat\n";
+ $expat->{Checker}->Entity(@_);
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::Checker::Parser - an XML::Parser that validates at parse time
+
+=head1 SYNOPSIS
+
+ use XML::Checker::Parser;
+
+ my %expat_options = (KeepCDATA => 1,
+ Handlers => [ Unparsed => \&my_Unparsed_handler ]);
+ my $parser = new XML::Checker::Parser (%expat_options);
+
+ eval {
+ local $XML::Checker::FAIL = \&my_fail;
+ $parser->parsefile ("fail.xml");
+ };
+ if ($@) {
+ # Either XML::Parser (expat) threw an exception or my_fail() died.
+ ... your error handling code here ...
+ }
+
+ # Throws an exception (with die) when an error is encountered, this
+ # will stop the parsing process.
+ # Don't die if a warning or info message is encountered, just print a message.
+ sub my_fail {
+ my $code = shift;
+ die XML::Checker::error_string ($code, @_) if $code < 200;
+ XML::Checker::print_error ($code, @_);
+ }
+
+=head1 DESCRIPTION
+
+XML::Checker::Parser extends L<XML::Parser>
+
+I hope the example in the SYNOPSIS says it all, just use
+L<XML::Checker::Parser> as if it were an XML::Parser.
+See L<XML::Parser> for the supported (expat) options.
+
+You can also derive your parser from XML::Checker::Parser instead of
+from XML::Parser. All you should have to do is replace:
+
+ package MyParser;
+ @ISA = qw( XML::Parser );
+
+with:
+
+ package MyParser;
+ @ISA = qw( XML::Checker::Parser );
+
+=head1 XML::Checker::Parser constructor
+
+ $parser = new XML::Checker::Parser (SkipExternalDTD => 1, SkipInsignifWS => 1);
+
+The constructor takes the same parameters as L<XML::Parser> with the following additions:
+
+=over 4
+
+=item SkipExternalDTD
+
+By default, it will try to load external DTDs using LWP. You can disable this
+by setting SkipExternalDTD to 1. See L<External DTDs|"External DTDs"> for details.
+
+=item SkipInsignifWS
+
+By default, it will treat insignificant whitespace as regular Char data.
+By setting SkipInsignifWS to 1, the user Char handler will not be called
+if insignificant whitespace is encountered.
+See L<XML::Checker/INSIGNIFICANT_WHITESPACE> for details.
+
+=item LWP_UserAgent
+
+When calling parsefile() with a URL (instead of a filename) or when loading
+external DTDs, we use LWP to download the
+remote file. By default it will use a L<LWP::UserAgent> that is created as follows:
+
+ use LWP::UserAgent;
+ $LWP_USER_AGENT = LWP::UserAgent->new;
+ $LWP_USER_AGENT->env_proxy;
+
+Note that L<env_proxy> reads proxy settings from your environment variables,
+which is what I need to do to get thru our firewall.
+If you want to use a different LWP::UserAgent, you can either set
+it globally with:
+
+ XML::Checker::Parser::set_LWP_UserAgent ($my_agent);
+
+or, you can specify it for a specific XML::Checker::Parser by passing it to
+the constructor:
+
+ my $parser = new XML::Checker::Parser (LWP_UserAgent => $my_agent);
+
+Currently, LWP is used when the filename (passed to parsefile) starts with one of
+the following URL schemes: http, https, ftp, wais, gopher, or file
+(followed by a colon.) If I missed one, please let me know.
+
+The LWP modules are part of libwww-perl which is available at CPAN.
+
+=back
+
+=head1 External DTDs
+
+XML::Checker::Parser will try to load and parse external DTDs that are
+referenced in DOCTYPE definitions unless you set the B<SkipExternalDTD>
+option to 1 (the default setting is 0.)
+See L<CAVEATS|"CAVEATS"> for details on what is not supported by XML::Checker::Parser.
+
+L<XML::Parser> (version 2.27 and up) does a much better job at reading external
+DTDs, because recently external DTD parsing was added to expat.
+Make sure you set the L<XML::Parser> option B<ParseParamEnt> to 1 and the
+XML::Checker::Parser option B<SkipExternalDTD> to 1.
+(They can both be set in the XML::Checker::Parser constructor.)
+
+When external DTDs are parsed by XML::Checker::Parser, they are
+located in the following order:
+
+=over 4
+
+=item *
+
+With the %URI_MAP, which can be set using B<map_uri>.
+This hash maps external resource ids (like system ID's and public ID's)
+to full path URI's.
+It was meant to aid in resolving PUBLIC IDs found in DOCTYPE declarations
+after the PUBLIC keyword, e.g.
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+
+However, you can also use this to force L<XML::Checker> to read DTDs from a
+different URL than was specified (e.g. from the local file system for
+performance reasons.)
+
+=item *
+
+on the Internet, if their system identifier starts with a protocol
+(like http://...)
+
+=item *
+
+on the local disk, if their system identifier starts with a slash
+(absolute path)
+
+=item *
+
+in the SGML_SEARCH_PATH, if their system identifier is a
+relative file name. It will use @SGML_SEARCH_PATH if it was set with
+B<set_sgml_search_path()>, or the colon-separated $ENV{SGML_SEARCH_PATH},
+or (if that isn't set) the list (".", "$ENV{'HOME'}/.sgml", "/usr/lib/sgml",
+"/usr/share/sgml"), which includes the
+current directory, so it should do the right thing in most cases.
+
+=back
+
+=head2 Static methods related to External DTDs
+
+=over 4
+
+=item set_sgml_search_path (dir1, dir2, ...)
+
+External DTDs with relative file paths are looked up using the @SGML_SEARCH_PATH,
+which can be set with this method. If @SGML_SEARCH_PATH is never set, it
+will use the colon-separated $ENV{SGML_SEARCH_PATH} instead. If neither are set
+it uses the list: ".", "$ENV{'HOME'}/.sgml", "/usr/lib/sgml",
+"/usr/share/sgml".
+
+set_sgml_search_path is a static method.
+
+=item map_uri (pubid => uri, ...)
+
+To define the location of PUBLIC ids, as found in DOCTYPE declarations
+after the PUBLIC keyword, e.g.
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+
+call this method, e.g.
+
+ XML::Checker::Parser::map_uri (
+ "-//W3C//DTD HTML 4.0//EN" => "file:/user/html.dtd");
+
+See L<External DTDs|"External DTDs"> for more info.
+
+XML::Checker::Parser::map_uri is a static method.
+
+=back
+
+=head1 Switching user handlers at parse time
+
+You should be able to use setHandlers() just as in L<XML::Parser>.
+(Using setHandlers has not been tested yet.)
+
+=head1 Error handling
+
+XML::Checker::Parser routes the fail handler through
+XML::Checker::Parser::fail_add_context() before calling your fail handler
+(i.e. the global fail handler: $XML::Checker::FAIL.
+See L<XML::Checker/ERROR_HANDLING>.)
+It adds the (line, column, byte) information from L<XML::Parser> to the
+error context (unless it was the end of the XML document.)
+
+=head1 Supported XML::Parser handlers
+
+Only the following L<XML::Parser> handlers are currently routed through
+L<XML::Checker>: Init, Final, Char, Start, End, Element, Attlist, Doctype,
+Unparsed, Notation.
+
+=head1 CAVEATS
+
+When using XML::Checker::Parser to parse external DTDs
+(i.e. with SkipExternalDTD => 0),
+expect trouble when your external DTD contains parameter entities inside
+declarations or conditional sections. The external DTD should probably have
+the same encoding as the orignal XML document.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=head1 SEE ALSO
+
+L<XML::Checker> (L<XML::Checker/SEE_ALSO>), L<XML::Parser>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,5065 @@
+################################################################################
+#
+# Perl module: XML::DOM
+#
+# By Enno Derksen <enno@att.com>
+#
+################################################################################
+#
+# To do:
+#
+# * optimize Attr if it only contains 1 Text node to hold the value
+# * fix setDocType!
+#
+# * BUG: setOwnerDocument - does not process default attr values correctly,
+# they still point to the old doc.
+# * change Exception mechanism
+# * maybe: more checking of sysId etc.
+# * NoExpand mode (don't know what else is useful)
+# * various odds and ends: see comments starting with "??"
+# * normalize(1) could also expand CDataSections and EntityReferences
+# * parse a DocumentFragment?
+# * encoding support
+#
+######################################################################
+
+######################################################################
+package XML::DOM;
+######################################################################
+
+use strict;
+use vars qw( $VERSION @ISA @EXPORT
+ $IgnoreReadOnly $SafeMode $TagStyle
+ %DefaultEntities %DecodeDefaultEntity
+ );
+use Carp;
+use XML::RegExp;
+
+BEGIN
+{
+ require XML::Parser;
+ $VERSION = '1.27';
+
+ my $needVersion = '2.23';
+ die "need at least XML::Parser version $needVersion (current=${XML::Parser::VERSION})"
+ unless $XML::Parser::VERSION >= $needVersion;
+
+ @ISA = qw( Exporter );
+
+ # Constants for XML::DOM Node types
+ @EXPORT = qw(
+ UNKNOWN_NODE
+ ELEMENT_NODE
+ ATTRIBUTE_NODE
+ TEXT_NODE
+ CDATA_SECTION_NODE
+ ENTITY_REFERENCE_NODE
+ ENTITY_NODE
+ PROCESSING_INSTRUCTION_NODE
+ COMMENT_NODE
+ DOCUMENT_NODE
+ DOCUMENT_TYPE_NODE
+ DOCUMENT_FRAGMENT_NODE
+ NOTATION_NODE
+ ELEMENT_DECL_NODE
+ ATT_DEF_NODE
+ XML_DECL_NODE
+ ATTLIST_DECL_NODE
+ );
+}
+
+#---- Constant definitions
+
+# Node types
+
+sub UNKNOWN_NODE () { 0 } # not in the DOM Spec
+
+sub ELEMENT_NODE () { 1 }
+sub ATTRIBUTE_NODE () { 2 }
+sub TEXT_NODE () { 3 }
+sub CDATA_SECTION_NODE () { 4 }
+sub ENTITY_REFERENCE_NODE () { 5 }
+sub ENTITY_NODE () { 6 }
+sub PROCESSING_INSTRUCTION_NODE () { 7 }
+sub COMMENT_NODE () { 8 }
+sub DOCUMENT_NODE () { 9 }
+sub DOCUMENT_TYPE_NODE () { 10}
+sub DOCUMENT_FRAGMENT_NODE () { 11}
+sub NOTATION_NODE () { 12}
+
+sub ELEMENT_DECL_NODE () { 13 } # not in the DOM Spec
+sub ATT_DEF_NODE () { 14 } # not in the DOM Spec
+sub XML_DECL_NODE () { 15 } # not in the DOM Spec
+sub ATTLIST_DECL_NODE () { 16 } # not in the DOM Spec
+
+%DefaultEntities =
+(
+ "quot" => '"',
+ "gt" => ">",
+ "lt" => "<",
+ "apos" => "'",
+ "amp" => "&"
+);
+
+%DecodeDefaultEntity =
+(
+ '"' => """,
+ ">" => ">",
+ "<" => "<",
+ "'" => "'",
+ "&" => "&"
+);
+
+#
+# If you don't want DOM warnings to use 'warn', override this method like this:
+#
+# { # start block scope
+# local *XML::DOM::warning = \&my_warn;
+# ... your code here ...
+# } # end block scope (old XML::DOM::warning takes effect again)
+#
+sub warning # static
+{
+ warn @_;
+}
+
+#
+# This method defines several things in the caller's package, so you can use named constants to
+# access the array that holds the member data, i.e. $self->[_Data]. It assumes the caller's package
+# defines a class that is implemented as a blessed array reference.
+# Note that this is very similar to using 'use fields' and 'use base'.
+#
+# E.g. if $fields eq "Name Model", $parent eq "XML::DOM::Node" and
+# XML::DOM::Node had "A B C" as fields and it was called from package "XML::DOM::ElementDecl",
+# then this code would basically do the following:
+#
+# package XML::DOM::ElementDecl;
+#
+# sub _Name () { 3 } # Note that parent class had three fields
+# sub _Model () { 4 }
+#
+# # Maps constant names (without '_') to constant (int) value
+# %HFIELDS = ( %XML::DOM::Node::HFIELDS, Name => _Name, Model => _Model );
+#
+# # Define XML:DOM::ElementDecl as a subclass of XML::DOM::Node
+# @ISA = qw{ XML::DOM::Node };
+#
+# # The following function names can be exported into the user's namespace.
+# @EXPORT_OK = qw{ _Name _Model };
+#
+# # The following function names can be exported into the user's namespace
+# # with: import XML::DOM::ElementDecl qw( :Fields );
+# %EXPORT_TAGS = ( Fields => qw{ _Name _Model } );
+#
+sub def_fields # static
+{
+ my ($fields, $parent) = @_;
+
+ my ($pkg) = caller;
+
+ no strict 'refs';
+
+ my @f = split (/\s+/, $fields);
+ my $n = 0;
+
+ my %hfields;
+ if (defined $parent)
+ {
+ my %pf = %{"$parent\::HFIELDS"};
+ %hfields = %pf;
+
+ $n = scalar (keys %pf);
+ @{"$pkg\::ISA"} = ( $parent );
+ }
+
+ my $i = $n;
+ for (@f)
+ {
+ eval "sub $pkg\::_$_ () { $i }";
+ $hfields{$_} = $i;
+ $i++;
+ }
+ %{"$pkg\::HFIELDS"} = %hfields;
+ @{"$pkg\::EXPORT_OK"} = map { "_$_" } @f;
+
+ ${"$pkg\::EXPORT_TAGS"}{Fields} = [ map { "_$_" } @f ];
+}
+
+# sub blesh
+# {
+# my $hashref = shift;
+# my $class = shift;
+# no strict 'refs';
+# my $self = bless [\%{"$class\::FIELDS"}], $class;
+# if (defined $hashref)
+# {
+# for (keys %$hashref)
+# {
+# $self->{$_} = $hashref->{$_};
+# }
+# }
+# $self;
+# }
+
+# sub blesh2
+# {
+# my $hashref = shift;
+# my $class = shift;
+# no strict 'refs';
+# my $self = bless [\%{"$class\::FIELDS"}], $class;
+# if (defined $hashref)
+# {
+# for (keys %$hashref)
+# {
+# eval { $self->{$_} = $hashref->{$_}; };
+# croak "ERROR in field [$_] $@" if $@;
+# }
+# }
+# $self;
+#}
+
+#
+# CDATA section may not contain "]]>"
+#
+sub encodeCDATA
+{
+ my ($str) = shift;
+ $str =~ s/]]>/]]>/go;
+ $str;
+}
+
+#
+# PI may not contain "?>"
+#
+sub encodeProcessingInstruction
+{
+ my ($str) = shift;
+ $str =~ s/\?>/?>/go;
+ $str;
+}
+
+#
+#?? Not sure if this is right - must prevent double minus somehow...
+#
+sub encodeComment
+{
+ my ($str) = shift;
+ return undef unless defined $str;
+
+ $str =~ s/--/--/go;
+ $str;
+}
+
+#
+# For debugging
+#
+sub toHex
+{
+ my $str = shift;
+ my $len = length($str);
+ my @a = unpack ("C$len", $str);
+ my $s = "";
+ for (@a)
+ {
+ $s .= sprintf ("%02x", $_);
+ }
+ $s;
+}
+
+#
+# 2nd parameter $default: list of Default Entity characters that need to be
+# converted (e.g. "&<" for conversion to "&" and "<" resp.)
+#
+sub encodeText
+{
+ my ($str, $default) = @_;
+ return undef unless defined $str;
+
+ $str =~ s/([\xC0-\xDF].|[\xE0-\xEF]..|[\xF0-\xFF]...)|([$default])|(]]>)/
+ defined($1) ? XmlUtf8Decode ($1) :
+ defined ($2) ? $DecodeDefaultEntity{$2} : "]]>" /egs;
+
+#?? could there be references that should not be expanded?
+# e.g. should not replace &#nn; ¯ and &abc;
+# $str =~ s/&(?!($ReName|#[0-9]+|#x[0-9a-fA-F]+);)/&/go;
+
+ $str;
+}
+
+#
+# Used by AttDef - default value
+#
+sub encodeAttrValue
+{
+ encodeText (shift, '"&<');
+}
+
+#
+# Converts an integer (Unicode - ISO/IEC 10646) to a UTF-8 encoded character
+# sequence.
+# Used when converting e.g. { or Ͽ to a string value.
+#
+# Algorithm borrowed from expat/xmltok.c/XmlUtf8Encode()
+#
+# not checking for bad characters: < 0, x00-x08, x0B-x0C, x0E-x1F, xFFFE-xFFFF
+#
+sub XmlUtf8Encode
+{
+ my $n = shift;
+ if ($n < 0x80)
+ {
+ return chr ($n);
+ }
+ elsif ($n < 0x800)
+ {
+ return pack ("CC", (($n >> 6) | 0xc0), (($n & 0x3f) | 0x80));
+ }
+ elsif ($n < 0x10000)
+ {
+ return pack ("CCC", (($n >> 12) | 0xe0), ((($n >> 6) & 0x3f) | 0x80),
+ (($n & 0x3f) | 0x80));
+ }
+ elsif ($n < 0x110000)
+ {
+ return pack ("CCCC", (($n >> 18) | 0xf0), ((($n >> 12) & 0x3f) | 0x80),
+ ((($n >> 6) & 0x3f) | 0x80), (($n & 0x3f) | 0x80));
+ }
+ croak "number is too large for Unicode [$n] in &XmlUtf8Encode";
+}
+
+#
+# Opposite of XmlUtf8Decode plus it adds prefix "&#" or "&#x" and suffix ";"
+# The 2nd parameter ($hex) indicates whether the result is hex encoded or not.
+#
+sub XmlUtf8Decode
+{
+ my ($str, $hex) = @_;
+ my $len = length ($str);
+ my $n;
+
+ if ($len == 2)
+ {
+ my @n = unpack "C2", $str;
+ $n = (($n[0] & 0x3f) << 6) + ($n[1] & 0x3f);
+ }
+ elsif ($len == 3)
+ {
+ my @n = unpack "C3", $str;
+ $n = (($n[0] & 0x1f) << 12) + (($n[1] & 0x3f) << 6) +
+ ($n[2] & 0x3f);
+ }
+ elsif ($len == 4)
+ {
+ my @n = unpack "C4", $str;
+ $n = (($n[0] & 0x0f) << 18) + (($n[1] & 0x3f) << 12) +
+ (($n[2] & 0x3f) << 6) + ($n[3] & 0x3f);
+ }
+ elsif ($len == 1) # just to be complete...
+ {
+ $n = ord ($str);
+ }
+ else
+ {
+ croak "bad value [$str] for XmlUtf8Decode";
+ }
+ $hex ? sprintf ("&#x%x;", $n) : "&#$n;";
+}
+
+$IgnoreReadOnly = 0;
+$SafeMode = 1;
+
+sub getIgnoreReadOnly
+{
+ $IgnoreReadOnly;
+}
+
+#
+# The global flag $IgnoreReadOnly is set to the specified value and the old
+# value of $IgnoreReadOnly is returned.
+#
+# To temporarily disable read-only related exceptions (i.e. when parsing
+# XML or temporarily), do the following:
+#
+# my $oldIgnore = XML::DOM::ignoreReadOnly (1);
+# ... do whatever you want ...
+# XML::DOM::ignoreReadOnly ($oldIgnore);
+#
+sub ignoreReadOnly
+{
+ my $i = $IgnoreReadOnly;
+ $IgnoreReadOnly = $_[0];
+ return $i;
+}
+
+#
+# XML spec seems to break its own rules... (see ENTITY xmlpio)
+#
+sub forgiving_isValidName
+{
+ $_[0] =~ /^$XML::RegExp::Name$/o;
+}
+
+#
+# Don't allow names starting with xml (either case)
+#
+sub picky_isValidName
+{
+ $_[0] =~ /^$XML::RegExp::Name$/o and $_[0] !~ /^xml/i;
+}
+
+# Be forgiving by default,
+*isValidName = \&forgiving_isValidName;
+
+sub allowReservedNames # static
+{
+ *isValidName = ($_[0] ? \&forgiving_isValidName : \&picky_isValidName);
+}
+
+sub getAllowReservedNames # static
+{
+ *isValidName == \&forgiving_isValidName;
+}
+
+#
+# Always compress empty tags by default
+# This is used by Element::print.
+#
+$TagStyle = sub { 0 };
+
+sub setTagCompression
+{
+ $TagStyle = shift;
+}
+
+######################################################################
+package XML::DOM::PrintToFileHandle;
+######################################################################
+
+#
+# Used by XML::DOM::Node::printToFileHandle
+#
+
+sub new
+{
+ my($class, $fn) = @_;
+ bless $fn, $class;
+}
+
+sub print
+{
+ my ($self, $str) = @_;
+ print $self $str;
+}
+
+######################################################################
+package XML::DOM::PrintToString;
+######################################################################
+
+use vars qw{ $Singleton };
+
+#
+# Used by XML::DOM::Node::toString to concatenate strings
+#
+
+sub new
+{
+ my($class) = @_;
+ my $str = "";
+ bless \$str, $class;
+}
+
+sub print
+{
+ my ($self, $str) = @_;
+ $$self .= $str;
+}
+
+sub toString
+{
+ my $self = shift;
+ $$self;
+}
+
+sub reset
+{
+ ${$_[0]} = "";
+}
+
+$Singleton = new XML::DOM::PrintToString;
+
+######################################################################
+package XML::DOM::DOMImplementation;
+######################################################################
+
+$XML::DOM::DOMImplementation::Singleton =
+ bless \$XML::DOM::DOMImplementation::Singleton, 'XML::DOM::DOMImplementation';
+
+sub hasFeature
+{
+ my ($self, $feature, $version) = @_;
+
+ $feature eq 'XML' and $version eq '1.0';
+}
+
+
+######################################################################
+package XML::XQL::Node; # forward declaration
+######################################################################
+
+######################################################################
+package XML::DOM::Node;
+######################################################################
+
+use vars qw( @NodeNames @EXPORT @ISA %HFIELDS @EXPORT_OK @EXPORT_TAGS );
+
+BEGIN
+{
+ use XML::DOM::DOMException;
+ import Carp;
+
+ require FileHandle;
+
+ @ISA = qw( Exporter XML::XQL::Node );
+
+ # NOTE: SortKey is used in XML::XQL::Node.
+ # UserData is reserved for users (Hang your data here!)
+ XML::DOM::def_fields ("C A Doc Parent ReadOnly UsedIn Hidden SortKey UserData");
+
+ push (@EXPORT, qw(
+ UNKNOWN_NODE
+ ELEMENT_NODE
+ ATTRIBUTE_NODE
+ TEXT_NODE
+ CDATA_SECTION_NODE
+ ENTITY_REFERENCE_NODE
+ ENTITY_NODE
+ PROCESSING_INSTRUCTION_NODE
+ COMMENT_NODE
+ DOCUMENT_NODE
+ DOCUMENT_TYPE_NODE
+ DOCUMENT_FRAGMENT_NODE
+ NOTATION_NODE
+ ELEMENT_DECL_NODE
+ ATT_DEF_NODE
+ XML_DECL_NODE
+ ATTLIST_DECL_NODE
+ ));
+}
+
+#---- Constant definitions
+
+# Node types
+
+sub UNKNOWN_NODE () {0;} # not in the DOM Spec
+
+sub ELEMENT_NODE () {1;}
+sub ATTRIBUTE_NODE () {2;}
+sub TEXT_NODE () {3;}
+sub CDATA_SECTION_NODE () {4;}
+sub ENTITY_REFERENCE_NODE () {5;}
+sub ENTITY_NODE () {6;}
+sub PROCESSING_INSTRUCTION_NODE () {7;}
+sub COMMENT_NODE () {8;}
+sub DOCUMENT_NODE () {9;}
+sub DOCUMENT_TYPE_NODE () {10;}
+sub DOCUMENT_FRAGMENT_NODE () {11;}
+sub NOTATION_NODE () {12;}
+
+sub ELEMENT_DECL_NODE () {13;} # not in the DOM Spec
+sub ATT_DEF_NODE () {14;} # not in the DOM Spec
+sub XML_DECL_NODE () {15;} # not in the DOM Spec
+sub ATTLIST_DECL_NODE () {16;} # not in the DOM Spec
+
+@NodeNames = (
+ "UNKNOWN_NODE", # not in the DOM Spec!
+
+ "ELEMENT_NODE",
+ "ATTRIBUTE_NODE",
+ "TEXT_NODE",
+ "CDATA_SECTION_NODE",
+ "ENTITY_REFERENCE_NODE",
+ "ENTITY_NODE",
+ "PROCESSING_INSTRUCTION_NODE",
+ "COMMENT_NODE",
+ "DOCUMENT_NODE",
+ "DOCUMENT_TYPE_NODE",
+ "DOCUMENT_FRAGMENT_NODE",
+ "NOTATION_NODE",
+
+ "ELEMENT_DECL_NODE",
+ "ATT_DEF_NODE",
+ "XML_DECL_NODE",
+ "ATTLIST_DECL_NODE"
+ );
+
+sub decoupleUsedIn
+{
+ my $self = shift;
+ undef $self->[_UsedIn]; # was delete
+}
+
+sub getParentNode
+{
+ $_[0]->[_Parent];
+}
+
+sub appendChild
+{
+ my ($self, $node) = @_;
+
+ # REC 7473
+ if ($XML::DOM::SafeMode)
+ {
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+ }
+
+ my $doc = $self->[_Doc];
+
+ if ($node->isDocumentFragmentNode)
+ {
+ if ($XML::DOM::SafeMode)
+ {
+ for my $n (@{$node->[_C]})
+ {
+ croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,
+ "nodes belong to different documents")
+ if $doc != $n->[_Doc];
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "node is ancestor of parent node")
+ if $n->isAncestor ($self);
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "bad node type")
+ if $self->rejectChild ($n);
+ }
+ }
+
+ my @list = @{$node->[_C]}; # don't try to compress this
+ for my $n (@list)
+ {
+ $n->setParentNode ($self);
+ }
+ push @{$self->[_C]}, @list;
+ }
+ else
+ {
+ if ($XML::DOM::SafeMode)
+ {
+ croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,
+ "nodes belong to different documents")
+ if $doc != $node->[_Doc];
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "node is ancestor of parent node")
+ if $node->isAncestor ($self);
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "bad node type")
+ if $self->rejectChild ($node);
+ }
+ $node->setParentNode ($self);
+ push @{$self->[_C]}, $node;
+ }
+ $node;
+}
+
+sub getChildNodes
+{
+ # NOTE: if node can't have children, $self->[_C] is undef.
+ my $kids = $_[0]->[_C];
+
+ # Return a list if called in list context.
+ wantarray ? (defined ($kids) ? @{ $kids } : ()) :
+ (defined ($kids) ? $kids : $XML::DOM::NodeList::EMPTY);
+}
+
+sub hasChildNodes
+{
+ my $kids = $_[0]->[_C];
+ defined ($kids) && @$kids > 0;
+}
+
+# This method is overriden in Document
+sub getOwnerDocument
+{
+ $_[0]->[_Doc];
+}
+
+sub getFirstChild
+{
+ my $kids = $_[0]->[_C];
+ defined $kids ? $kids->[0] : undef;
+}
+
+sub getLastChild
+{
+ my $kids = $_[0]->[_C];
+ defined $kids ? $kids->[-1] : undef;
+}
+
+sub getPreviousSibling
+{
+ my $self = shift;
+
+ my $pa = $self->[_Parent];
+ return undef unless $pa;
+ my $index = $pa->getChildIndex ($self);
+ return undef unless $index;
+
+ $pa->getChildAtIndex ($index - 1);
+}
+
+sub getNextSibling
+{
+ my $self = shift;
+
+ my $pa = $self->[_Parent];
+ return undef unless $pa;
+
+ $pa->getChildAtIndex ($pa->getChildIndex ($self) + 1);
+}
+
+sub insertBefore
+{
+ my ($self, $node, $refNode) = @_;
+
+ return $self->appendChild ($node) unless $refNode; # append at the end
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ my @nodes = ($node);
+ @nodes = @{$node->[_C]}
+ if $node->getNodeType == DOCUMENT_FRAGMENT_NODE;
+
+ my $doc = $self->[_Doc];
+
+ for my $n (@nodes)
+ {
+ croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,
+ "nodes belong to different documents")
+ if $doc != $n->[_Doc];
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "node is ancestor of parent node")
+ if $n->isAncestor ($self);
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "bad node type")
+ if $self->rejectChild ($n);
+ }
+ my $index = $self->getChildIndex ($refNode);
+
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR,
+ "reference node not found")
+ if $index == -1;
+
+ for my $n (@nodes)
+ {
+ $n->setParentNode ($self);
+ }
+
+ splice (@{$self->[_C]}, $index, 0, @nodes);
+ $node;
+}
+
+sub replaceChild
+{
+ my ($self, $node, $refNode) = @_;
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ my @nodes = ($node);
+ @nodes = @{$node->[_C]}
+ if $node->getNodeType == DOCUMENT_FRAGMENT_NODE;
+
+ for my $n (@nodes)
+ {
+ croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,
+ "nodes belong to different documents")
+ if $self->[_Doc] != $n->[_Doc];
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "node is ancestor of parent node")
+ if $n->isAncestor ($self);
+
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "bad node type")
+ if $self->rejectChild ($n);
+ }
+
+ my $index = $self->getChildIndex ($refNode);
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR,
+ "reference node not found")
+ if $index == -1;
+
+ for my $n (@nodes)
+ {
+ $n->setParentNode ($self);
+ }
+ splice (@{$self->[_C]}, $index, 1, @nodes);
+
+ $refNode->removeChildHoodMemories;
+ $refNode;
+}
+
+sub removeChild
+{
+ my ($self, $node) = @_;
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ my $index = $self->getChildIndex ($node);
+
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR,
+ "reference node not found")
+ if $index == -1;
+
+ splice (@{$self->[_C]}, $index, 1, ());
+
+ $node->removeChildHoodMemories;
+ $node;
+}
+
+# Merge all subsequent Text nodes in this subtree
+sub normalize
+{
+ my ($self) = shift;
+ my $prev = undef; # previous Text node
+
+ return unless defined $self->[_C];
+
+ my @nodes = @{$self->[_C]};
+ my $i = 0;
+ my $n = @nodes;
+ while ($i < $n)
+ {
+ my $node = $self->getChildAtIndex($i);
+ my $type = $node->getNodeType;
+
+ if (defined $prev)
+ {
+ # It should not merge CDATASections. Dom Spec says:
+ # Adjacent CDATASections nodes are not merged by use
+ # of the Element.normalize() method.
+ if ($type == TEXT_NODE)
+ {
+ $prev->appendData ($node->getData);
+ $self->removeChild ($node);
+ $i--;
+ $n--;
+ }
+ else
+ {
+ $prev = undef;
+ if ($type == ELEMENT_NODE)
+ {
+ $node->normalize;
+ if (defined $node->[_A])
+ {
+ for my $attr (@{$node->[_A]->getValues})
+ {
+ $attr->normalize;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if ($type == TEXT_NODE)
+ {
+ $prev = $node;
+ }
+ elsif ($type == ELEMENT_NODE)
+ {
+ $node->normalize;
+ if (defined $node->[_A])
+ {
+ for my $attr (@{$node->[_A]->getValues})
+ {
+ $attr->normalize;
+ }
+ }
+ }
+ }
+ $i++;
+ }
+}
+
+#
+# Return all Element nodes in the subtree that have the specified tagName.
+# If tagName is "*", all Element nodes are returned.
+# NOTE: the DOM Spec does not specify a 3rd or 4th parameter
+#
+sub getElementsByTagName
+{
+ my ($self, $tagName, $recurse, $list) = @_;
+ $recurse = 1 unless defined $recurse;
+ $list = (wantarray ? [] : new XML::DOM::NodeList) unless defined $list;
+
+ return unless defined $self->[_C];
+
+ # preorder traversal: check parent node first
+ for my $kid (@{$self->[_C]})
+ {
+ if ($kid->isElementNode)
+ {
+ if ($tagName eq "*" || $tagName eq $kid->getTagName)
+ {
+ push @{$list}, $kid;
+ }
+ $kid->getElementsByTagName ($tagName, $recurse, $list) if $recurse;
+ }
+ }
+ wantarray ? @{ $list } : $list;
+}
+
+sub getNodeValue
+{
+ undef;
+}
+
+sub setNodeValue
+{
+ # no-op
+}
+
+#
+# Redefined by XML::DOM::Element
+#
+sub getAttributes
+{
+ undef;
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub setOwnerDocument
+{
+ my ($self, $doc) = @_;
+ $self->[_Doc] = $doc;
+
+ return unless defined $self->[_C];
+
+ for my $kid (@{$self->[_C]})
+ {
+ $kid->setOwnerDocument ($doc);
+ }
+}
+
+sub cloneChildren
+{
+ my ($self, $node, $deep) = @_;
+ return unless $deep;
+
+ return unless defined $self->[_C];
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ for my $kid (@{$node->[_C]})
+ {
+ my $newNode = $kid->cloneNode ($deep);
+ push @{$self->[_C]}, $newNode;
+ $newNode->setParentNode ($self);
+ }
+}
+
+#
+# For internal use only!
+#
+sub removeChildHoodMemories
+{
+ my ($self) = @_;
+
+ undef $self->[_Parent]; # was delete
+}
+
+#
+# Remove circular dependencies. The Node and its children should
+# not be used afterwards.
+#
+sub dispose
+{
+ my $self = shift;
+
+ $self->removeChildHoodMemories;
+
+ if (defined $self->[_C])
+ {
+ $self->[_C]->dispose;
+ undef $self->[_C]; # was delete
+ }
+ undef $self->[_Doc]; # was delete
+}
+
+#
+# For internal use only!
+#
+sub setParentNode
+{
+ my ($self, $parent) = @_;
+
+ # REC 7473
+ my $oldParent = $self->[_Parent];
+ if (defined $oldParent)
+ {
+ # remove from current parent
+ my $index = $oldParent->getChildIndex ($self);
+
+ # NOTE: we don't have to check if [_C] is defined,
+ # because were removing a child here!
+ splice (@{$oldParent->[_C]}, $index, 1, ());
+
+ $self->removeChildHoodMemories;
+ }
+ $self->[_Parent] = $parent;
+}
+
+#
+# This function can return 3 values:
+# 1: always readOnly
+# 0: never readOnly
+# undef: depends on parent node
+#
+# Returns 1 for DocumentType, Notation, Entity, EntityReference, Attlist,
+# ElementDecl, AttDef.
+# The first 4 are readOnly according to the DOM Spec, the others are always
+# children of DocumentType. (Naturally, children of a readOnly node have to be
+# readOnly as well...)
+# These nodes are always readOnly regardless of who their ancestors are.
+# Other nodes, e.g. Comment, are readOnly only if their parent is readOnly,
+# which basically means that one of its ancestors has to be one of the
+# aforementioned node types.
+# Document and DocumentFragment return 0 for obvious reasons.
+# Attr, Element, CDATASection, Text return 0. The DOM spec says that they can
+# be children of an Entity, but I don't think that that's possible
+# with the current XML::Parser.
+# Attr uses a {ReadOnly} property, which is only set if it's part of a AttDef.
+# Always returns 0 if ignoreReadOnly is set.
+#
+sub isReadOnly
+{
+ # default implementation for Nodes that are always readOnly
+ ! $XML::DOM::IgnoreReadOnly;
+}
+
+sub rejectChild
+{
+ 1;
+}
+
+sub getNodeTypeName
+{
+ $NodeNames[$_[0]->getNodeType];
+}
+
+sub getChildIndex
+{
+ my ($self, $node) = @_;
+ my $i = 0;
+
+ return -1 unless defined $self->[_C];
+
+ for my $kid (@{$self->[_C]})
+ {
+ return $i if $kid == $node;
+ $i++;
+ }
+ -1;
+}
+
+sub getChildAtIndex
+{
+ my $kids = $_[0]->[_C];
+ defined ($kids) ? $kids->[$_[1]] : undef;
+}
+
+sub isAncestor
+{
+ my ($self, $node) = @_;
+
+ do
+ {
+ return 1 if $self == $node;
+ $node = $node->[_Parent];
+ }
+ while (defined $node);
+
+ 0;
+}
+
+#
+# Added for optimization. Overriden in XML::DOM::Text
+#
+sub isTextNode
+{
+ 0;
+}
+
+#
+# Added for optimization. Overriden in XML::DOM::DocumentFragment
+#
+sub isDocumentFragmentNode
+{
+ 0;
+}
+
+#
+# Added for optimization. Overriden in XML::DOM::Element
+#
+sub isElementNode
+{
+ 0;
+}
+
+#
+# Add a Text node with the specified value or append the text to the
+# previous Node if it is a Text node.
+#
+sub addText
+{
+ # REC 9456 (if it was called)
+ my ($self, $str) = @_;
+
+ my $node = ${$self->[_C]}[-1]; # $self->getLastChild
+
+ if (defined ($node) && $node->isTextNode)
+ {
+ # REC 5475 (if it was called)
+ $node->appendData ($str);
+ }
+ else
+ {
+ $node = $self->[_Doc]->createTextNode ($str);
+ $self->appendChild ($node);
+ }
+ $node;
+}
+
+#
+# Add a CDATASection node with the specified value or append the text to the
+# previous Node if it is a CDATASection node.
+#
+sub addCDATA
+{
+ my ($self, $str) = @_;
+
+ my $node = ${$self->[_C]}[-1]; # $self->getLastChild
+
+ if (defined ($node) && $node->getNodeType == CDATA_SECTION_NODE)
+ {
+ $node->appendData ($str);
+ }
+ else
+ {
+ $node = $self->[_Doc]->createCDATASection ($str);
+ $self->appendChild ($node);
+ }
+ $node;
+}
+
+sub removeChildNodes
+{
+ my $self = shift;
+
+ my $cref = $self->[_C];
+ return unless defined $cref;
+
+ my $kid;
+ while ($kid = pop @{$cref})
+ {
+ undef $kid->[_Parent]; # was delete
+ }
+}
+
+sub toString
+{
+ my $self = shift;
+ my $pr = $XML::DOM::PrintToString::Singleton;
+ $pr->reset;
+ $self->print ($pr);
+ $pr->toString;
+}
+
+sub to_sax
+{
+ my $self = shift;
+ unshift @_, 'Handler' if (@_ == 1);
+ my %h = @_;
+
+ my $doch = exists ($h{DocumentHandler}) ? $h{DocumentHandler}
+ : $h{Handler};
+ my $dtdh = exists ($h{DTDHandler}) ? $h{DTDHandler}
+ : $h{Handler};
+ my $enth = exists ($h{EntityResolver}) ? $h{EntityResolver}
+ : $h{Handler};
+
+ $self->_to_sax ($doch, $dtdh, $enth);
+}
+
+sub printToFile
+{
+ my ($self, $fileName) = @_;
+ my $fh = new FileHandle ($fileName, "w") ||
+ croak "printToFile - can't open output file $fileName";
+
+ $self->print ($fh);
+ $fh->close;
+}
+
+#
+# Use print to print to a FileHandle object (see printToFile code)
+#
+sub printToFileHandle
+{
+ my ($self, $FH) = @_;
+ my $pr = new XML::DOM::PrintToFileHandle ($FH);
+ $self->print ($pr);
+}
+
+#
+# Used by AttDef::setDefault to convert unexpanded default attribute value
+#
+sub expandEntityRefs
+{
+ my ($self, $str) = @_;
+ my $doctype = $self->[_Doc]->getDoctype;
+
+ $str =~ s/&($XML::RegExp::Name|(#([0-9]+)|#x([0-9a-fA-F]+)));/
+ defined($2) ? XML::DOM::XmlUtf8Encode ($3 || hex ($4))
+ : expandEntityRef ($1, $doctype)/ego;
+ $str;
+}
+
+sub expandEntityRef
+{
+ my ($entity, $doctype) = @_;
+
+ my $expanded = $XML::DOM::DefaultEntities{$entity};
+ return $expanded if defined $expanded;
+
+ $expanded = $doctype->getEntity ($entity);
+ return $expanded->getValue if (defined $expanded);
+
+#?? is this an error?
+ croak "Could not expand entity reference of [$entity]\n";
+# return "&$entity;"; # entity not found
+}
+
+sub isHidden
+{
+ $_[0]->[_Hidden];
+}
+
+######################################################################
+package XML::DOM::Attr;
+######################################################################
+
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Name Specified", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+sub new
+{
+ my ($class, $doc, $name, $value, $specified) = @_;
+
+ if ($XML::DOM::SafeMode)
+ {
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Attr name [$name]")
+ unless XML::DOM::isValidName ($name);
+ }
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_C] = new XML::DOM::NodeList;
+ $self->[_Name] = $name;
+
+ if (defined $value)
+ {
+ $self->setValue ($value);
+ $self->[_Specified] = (defined $specified) ? $specified : 1;
+ }
+ else
+ {
+ $self->[_Specified] = 0;
+ }
+ $self;
+}
+
+sub getNodeType
+{
+ ATTRIBUTE_NODE;
+}
+
+sub isSpecified
+{
+ $_[0]->[_Specified];
+}
+
+sub getName
+{
+ $_[0]->[_Name];
+}
+
+sub getValue
+{
+ my $self = shift;
+ my $value = "";
+
+ for my $kid (@{$self->[_C]})
+ {
+ $value .= $kid->getData;
+ }
+ $value;
+}
+
+sub setValue
+{
+ my ($self, $value) = @_;
+
+ # REC 1147
+ $self->removeChildNodes;
+ $self->appendChild ($self->[_Doc]->createTextNode ($value));
+ $self->[_Specified] = 1;
+}
+
+sub getNodeName
+{
+ $_[0]->getName;
+}
+
+sub getNodeValue
+{
+ $_[0]->getValue;
+}
+
+sub setNodeValue
+{
+ $_[0]->setValue ($_[1]);
+}
+
+sub cloneNode
+{
+ my ($self) = @_; # parameter deep is ignored
+
+ my $node = $self->[_Doc]->createAttribute ($self->getName);
+ $node->[_Specified] = $self->[_Specified];
+ $node->[_ReadOnly] = 1 if $self->[_ReadOnly];
+
+ $node->cloneChildren ($self, 1);
+ $node;
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+#
+
+sub isReadOnly
+{
+ # ReadOnly property is set if it's part of a AttDef
+ ! $XML::DOM::IgnoreReadOnly && defined ($_[0]->[_ReadOnly]);
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_Name];
+
+ $FILE->print ("$name=\"");
+ for my $kid (@{$self->[_C]})
+ {
+ if ($kid->getNodeType == TEXT_NODE)
+ {
+ $FILE->print (XML::DOM::encodeAttrValue ($kid->getData));
+ }
+ else # ENTITY_REFERENCE_NODE
+ {
+ $kid->print ($FILE);
+ }
+ }
+ $FILE->print ("\"");
+}
+
+sub rejectChild
+{
+ my $t = $_[1]->getNodeType;
+
+ $t != TEXT_NODE
+ && $t != ENTITY_REFERENCE_NODE;
+}
+
+######################################################################
+package XML::DOM::ProcessingInstruction;
+######################################################################
+
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Target Data", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+sub new
+{
+ my ($class, $doc, $target, $data, $hidden) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad ProcessingInstruction Target [$target]")
+ unless (XML::DOM::isValidName ($target) && $target !~ /^xml$/io);
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_Target] = $target;
+ $self->[_Data] = $data;
+ $self->[_Hidden] = $hidden;
+ $self;
+}
+
+sub getNodeType
+{
+ PROCESSING_INSTRUCTION_NODE;
+}
+
+sub getTarget
+{
+ $_[0]->[_Target];
+}
+
+sub getData
+{
+ $_[0]->[_Data];
+}
+
+sub setData
+{
+ my ($self, $data) = @_;
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ $self->[_Data] = $data;
+}
+
+sub getNodeName
+{
+ $_[0]->[_Target];
+}
+
+#
+# Same as getData
+#
+sub getNodeValue
+{
+ $_[0]->[_Data];
+}
+
+sub setNodeValue
+{
+ $_[0]->setData ($_[1]);
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ $self->[_Doc]->createProcessingInstruction ($self->getTarget,
+ $self->getData,
+ $self->isHidden);
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub isReadOnly
+{
+ return 0 if $XML::DOM::IgnoreReadOnly;
+
+ my $pa = $_[0]->[_Parent];
+ defined ($pa) ? $pa->isReadOnly : 0;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ $FILE->print ("<?");
+ $FILE->print ($self->[_Target]);
+ $FILE->print (" ");
+ $FILE->print (XML::DOM::encodeProcessingInstruction ($self->[_Data]));
+ $FILE->print ("?>");
+}
+
+######################################################################
+package XML::DOM::Notation;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Name Base SysId PubId", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+sub new
+{
+ my ($class, $doc, $name, $base, $sysId, $pubId, $hidden) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Notation Name [$name]")
+ unless XML::DOM::isValidName ($name);
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_Name] = $name;
+ $self->[_Base] = $base;
+ $self->[_SysId] = $sysId;
+ $self->[_PubId] = $pubId;
+ $self->[_Hidden] = $hidden;
+ $self;
+}
+
+sub getNodeType
+{
+ NOTATION_NODE;
+}
+
+sub getPubId
+{
+ $_[0]->[_PubId];
+}
+
+sub setPubId
+{
+ $_[0]->[_PubId] = $_[1];
+}
+
+sub getSysId
+{
+ $_[0]->[_SysId];
+}
+
+sub setSysId
+{
+ $_[0]->[_SysId] = $_[1];
+}
+
+sub getName
+{
+ $_[0]->[_Name];
+}
+
+sub setName
+{
+ $_[0]->[_Name] = $_[1];
+}
+
+sub getBase
+{
+ $_[0]->[_Base];
+}
+
+sub getNodeName
+{
+ $_[0]->[_Name];
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_Name];
+ my $sysId = $self->[_SysId];
+ my $pubId = $self->[_PubId];
+
+ $FILE->print ("<!NOTATION $name ");
+
+ if (defined $pubId)
+ {
+ $FILE->print (" PUBLIC \"$pubId\"");
+ }
+ if (defined $sysId)
+ {
+ $FILE->print (" SYSTEM \"$sysId\"");
+ }
+ $FILE->print (">");
+}
+
+sub cloneNode
+{
+ my ($self) = @_;
+ $self->[_Doc]->createNotation ($self->[_Name], $self->[_Base],
+ $self->[_SysId], $self->[_PubId],
+ $self->[_Hidden]);
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ $iter->Notation ($self->getName, $self->getBase,
+ $self->getSysId, $self->getPubId);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ $dtdh->notation_decl ( { Name => $self->getName,
+ Base => $self->getBase,
+ SystemId => $self->getSysId,
+ PublicId => $self->getPubId });
+}
+
+######################################################################
+package XML::DOM::Entity;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("NotationName Parameter Value Ndata SysId PubId", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+sub new
+{
+ my ($class, $doc, $par, $notationName, $value, $sysId, $pubId, $ndata, $hidden) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Entity Name [$notationName]")
+ unless XML::DOM::isValidName ($notationName);
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_NotationName] = $notationName;
+ $self->[_Parameter] = $par;
+ $self->[_Value] = $value;
+ $self->[_Ndata] = $ndata;
+ $self->[_SysId] = $sysId;
+ $self->[_PubId] = $pubId;
+ $self->[_Hidden] = $hidden;
+ $self;
+#?? maybe Value should be a Text node
+}
+
+sub getNodeType
+{
+ ENTITY_NODE;
+}
+
+sub getPubId
+{
+ $_[0]->[_PubId];
+}
+
+sub getSysId
+{
+ $_[0]->[_SysId];
+}
+
+# Dom Spec says:
+# For unparsed entities, the name of the notation for the
+# entity. For parsed entities, this is null.
+
+#?? do we have unparsed entities?
+sub getNotationName
+{
+ $_[0]->[_NotationName];
+}
+
+sub getNodeName
+{
+ $_[0]->[_NotationName];
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ $self->[_Doc]->createEntity ($self->[_Parameter],
+ $self->[_NotationName], $self->[_Value],
+ $self->[_SysId], $self->[_PubId],
+ $self->[_Ndata], $self->[_Hidden]);
+}
+
+sub rejectChild
+{
+ return 1;
+#?? if value is split over subnodes, recode this section
+# also add: C => new XML::DOM::NodeList,
+
+ my $t = $_[1];
+
+ return $t == TEXT_NODE
+ || $t == ENTITY_REFERENCE_NODE
+ || $t == PROCESSING_INSTRUCTION_NODE
+ || $t == COMMENT_NODE
+ || $t == CDATA_SECTION_NODE
+ || $t == ELEMENT_NODE;
+}
+
+sub getValue
+{
+ $_[0]->[_Value];
+}
+
+sub isParameterEntity
+{
+ $_[0]->[_Parameter];
+}
+
+sub getNdata
+{
+ $_[0]->[_Ndata];
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_NotationName];
+
+ my $par = $self->isParameterEntity ? "% " : "";
+
+ $FILE->print ("<!ENTITY $par$name");
+
+ my $value = $self->[_Value];
+ my $sysId = $self->[_SysId];
+ my $pubId = $self->[_PubId];
+ my $ndata = $self->[_Ndata];
+
+ if (defined $value)
+ {
+#?? Not sure what to do if it contains both single and double quote
+ $value = ($value =~ /\"/) ? "'$value'" : "\"$value\"";
+ $FILE->print (" $value");
+ }
+ if (defined $pubId)
+ {
+ $FILE->print (" PUBLIC \"$pubId\"");
+ }
+ elsif (defined $sysId)
+ {
+ $FILE->print (" SYSTEM");
+ }
+
+ if (defined $sysId)
+ {
+ $FILE->print (" \"$sysId\"");
+ }
+ $FILE->print (" NDATA $ndata") if defined $ndata;
+ $FILE->print (">");
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ my $name = ($self->isParameterEntity ? '%' : "") . $self->getNotationName;
+ $iter->Entity ($name,
+ $self->getValue, $self->getSysId, $self->getPubId,
+ $self->getNdata);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ my $name = ($self->isParameterEntity ? '%' : "") . $self->getNotationName;
+ $dtdh->entity_decl ( { Name => $name,
+ Value => $self->getValue,
+ SystemId => $self->getSysId,
+ PublicId => $self->getPubId,
+ Notation => $self->getNdata } );
+}
+
+######################################################################
+package XML::DOM::EntityReference;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("EntityName Parameter", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+sub new
+{
+ my ($class, $doc, $name, $parameter) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Entity Name [$name] in EntityReference")
+ unless XML::DOM::isValidName ($name);
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_EntityName] = $name;
+ $self->[_Parameter] = ($parameter || 0);
+ $self;
+}
+
+sub getNodeType
+{
+ ENTITY_REFERENCE_NODE;
+}
+
+sub getNodeName
+{
+ $_[0]->[_EntityName];
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub getEntityName
+{
+ $_[0]->[_EntityName];
+}
+
+sub isParameterEntity
+{
+ $_[0]->[_Parameter];
+}
+
+sub getData
+{
+ my $self = shift;
+ my $name = $self->[_EntityName];
+ my $parameter = $self->[_Parameter];
+
+ my $data = $self->[_Doc]->expandEntity ($name, $parameter);
+
+ unless (defined $data)
+ {
+#?? this is probably an error
+ my $pc = $parameter ? "%" : "&";
+ $data = "$pc$name;";
+ }
+ $data;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_EntityName];
+
+#?? or do we expand the entities?
+
+ my $pc = $self->[_Parameter] ? "%" : "&";
+ $FILE->print ("$pc$name;");
+}
+
+# Dom Spec says:
+# [...] but if such an Entity exists, then
+# the child list of the EntityReference node is the same as that of the
+# Entity node.
+#
+# The resolution of the children of the EntityReference (the replacement
+# value of the referenced Entity) may be lazily evaluated; actions by the
+# user (such as calling the childNodes method on the EntityReference
+# node) are assumed to trigger the evaluation.
+sub getChildNodes
+{
+ my $self = shift;
+ my $entity = $self->[_Doc]->getEntity ($self->[_EntityName]);
+ defined ($entity) ? $entity->getChildNodes : new XML::DOM::NodeList;
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ $self->[_Doc]->createEntityReference ($self->[_EntityName],
+ $self->[_Parameter]);
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ $iter->EntityRef ($self->getEntityName, $self->isParameterEntity);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ my @par = $self->isParameterEntity ? (Parameter => 1) : ();
+#?? not supported by PerlSAX: $self->isParameterEntity
+
+ $doch->entity_reference ( { Name => $self->getEntityName, @par } );
+}
+
+# NOTE: an EntityReference can't really have children, so rejectChild
+# is not reimplemented (i.e. it always returns 0.)
+
+######################################################################
+package XML::DOM::AttDef;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Name Type Fixed Default Required Implied Quote", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+#------------------------------------------------------------
+# Extra method implementations
+
+# AttDef is not part of DOM Spec
+sub new
+{
+ my ($class, $doc, $name, $attrType, $default, $fixed, $hidden) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Attr name in AttDef [$name]")
+ unless XML::DOM::isValidName ($name);
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_Name] = $name;
+ $self->[_Type] = $attrType;
+
+ if (defined $default)
+ {
+ if ($default eq "#REQUIRED")
+ {
+ $self->[_Required] = 1;
+ }
+ elsif ($default eq "#IMPLIED")
+ {
+ $self->[_Implied] = 1;
+ }
+ else
+ {
+ # strip off quotes - see Attlist handler in XML::Parser
+ $default =~ m#^(["'])(.*)['"]$#;
+
+ $self->[_Quote] = $1; # keep track of the quote character
+ $self->[_Default] = $self->setDefault ($2);
+
+#?? should default value be decoded - what if it contains e.g. "&"
+ }
+ }
+ $self->[_Fixed] = $fixed if defined $fixed;
+ $self->[_Hidden] = $hidden if defined $hidden;
+
+ $self;
+}
+
+sub getNodeType
+{
+ ATT_DEF_NODE;
+}
+
+sub getName
+{
+ $_[0]->[_Name];
+}
+
+# So it can be added to a NamedNodeMap
+sub getNodeName
+{
+ $_[0]->[_Name];
+}
+
+sub getType
+{
+ $_[0]->[_Type];
+}
+
+sub setType
+{
+ $_[0]->[_Type] = $_[1];
+}
+
+sub getDefault
+{
+ $_[0]->[_Default];
+}
+
+sub setDefault
+{
+ my ($self, $value) = @_;
+
+ # specified=0, it's the default !
+ my $attr = $self->[_Doc]->createAttribute ($self->[_Name], undef, 0);
+ $attr->[_ReadOnly] = 1;
+
+#?? this should be split over Text and EntityReference nodes, just like other
+# Attr nodes - just expand the text for now
+ $value = $self->expandEntityRefs ($value);
+ $attr->addText ($value);
+#?? reimplement in NoExpand mode!
+
+ $attr;
+}
+
+sub isFixed
+{
+ $_[0]->[_Fixed] || 0;
+}
+
+sub isRequired
+{
+ $_[0]->[_Required] || 0;
+}
+
+sub isImplied
+{
+ $_[0]->[_Implied] || 0;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_Name];
+ my $type = $self->[_Type];
+ my $fixed = $self->[_Fixed];
+ my $default = $self->[_Default];
+
+ $FILE->print ("$name $type");
+ $FILE->print (" #FIXED") if defined $fixed;
+
+ if ($self->[_Required])
+ {
+ $FILE->print (" #REQUIRED");
+ }
+ elsif ($self->[_Implied])
+ {
+ $FILE->print (" #IMPLIED");
+ }
+ elsif (defined ($default))
+ {
+ my $quote = $self->[_Quote];
+ $FILE->print (" $quote");
+ for my $kid (@{$default->[_C]})
+ {
+ $kid->print ($FILE);
+ }
+ $FILE->print ($quote);
+ }
+}
+
+sub getDefaultString
+{
+ my $self = shift;
+ my $default;
+
+ if ($self->[_Required])
+ {
+ return "#REQUIRED";
+ }
+ elsif ($self->[_Implied])
+ {
+ return "#IMPLIED";
+ }
+ elsif (defined ($default = $self->[_Default]))
+ {
+ my $quote = $self->[_Quote];
+ $default = $default->toString;
+ return "$quote$default$quote";
+ }
+ undef;
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ my $node = new XML::DOM::AttDef ($self->[_Doc], $self->[_Name], $self->[_Type],
+ undef, $self->[_Fixed]);
+
+ $node->[_Required] = 1 if $self->[_Required];
+ $node->[_Implied] = 1 if $self->[_Implied];
+ $node->[_Fixed] = $self->[_Fixed] if defined $self->[_Fixed];
+ $node->[_Hidden] = $self->[_Hidden] if defined $self->[_Hidden];
+
+ if (defined $self->[_Default])
+ {
+ $node->[_Default] = $self->[_Default]->cloneNode(1);
+ }
+ $node->[_Quote] = $self->[_Quote];
+
+ $node;
+}
+
+sub setOwnerDocument
+{
+ my ($self, $doc) = @_;
+ $self->SUPER::setOwnerDocument ($doc);
+
+ if (defined $self->[_Default])
+ {
+ $self->[_Default]->setOwnerDocument ($doc);
+ }
+}
+
+######################################################################
+package XML::DOM::AttlistDecl;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ import XML::DOM::AttDef qw{ :Fields };
+
+ XML::DOM::def_fields ("ElementName", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+#------------------------------------------------------------
+# Extra method implementations
+
+# AttlistDecl is not part of the DOM Spec
+sub new
+{
+ my ($class, $doc, $name) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Element TagName [$name] in AttlistDecl")
+ unless XML::DOM::isValidName ($name);
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_C] = new XML::DOM::NodeList;
+ $self->[_ReadOnly] = 1;
+ $self->[_ElementName] = $name;
+
+ $self->[_A] = new XML::DOM::NamedNodeMap (Doc => $doc,
+ ReadOnly => 1,
+ Parent => $self);
+
+ $self;
+}
+
+sub getNodeType
+{
+ ATTLIST_DECL_NODE;
+}
+
+sub getName
+{
+ $_[0]->[_ElementName];
+}
+
+sub getNodeName
+{
+ $_[0]->[_ElementName];
+}
+
+sub getAttDef
+{
+ my ($self, $attrName) = @_;
+ $self->[_A]->getNamedItem ($attrName);
+}
+
+sub addAttDef
+{
+ my ($self, $attrName, $type, $default, $fixed, $hidden) = @_;
+ my $node = $self->getAttDef ($attrName);
+
+ if (defined $node)
+ {
+ # data will be ignored if already defined
+ my $elemName = $self->getName;
+ XML::DOM::warning ("multiple definitions of attribute $attrName for element $elemName, only first one is recognized");
+ }
+ else
+ {
+ $node = new XML::DOM::AttDef ($self->[_Doc], $attrName, $type,
+ $default, $fixed, $hidden);
+ $self->[_A]->setNamedItem ($node);
+ }
+ $node;
+}
+
+sub getDefaultAttrValue
+{
+ my ($self, $attr) = @_;
+ my $attrNode = $self->getAttDef ($attr);
+ (defined $attrNode) ? $attrNode->getDefault : undef;
+}
+
+sub cloneNode
+{
+ my ($self, $deep) = @_;
+ my $node = $self->[_Doc]->createAttlistDecl ($self->[_ElementName]);
+
+ $node->[_A] = $self->[_A]->cloneNode ($deep);
+ $node;
+}
+
+sub setOwnerDocument
+{
+ my ($self, $doc) = @_;
+ $self->SUPER::setOwnerDocument ($doc);
+
+ $self->[_A]->setOwnerDocument ($doc);
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->getName;
+ my @attlist = @{$self->[_A]->getValues};
+
+ my $hidden = 1;
+ for my $att (@attlist)
+ {
+ unless ($att->[_Hidden])
+ {
+ $hidden = 0;
+ last;
+ }
+ }
+
+ unless ($hidden)
+ {
+ $FILE->print ("<!ATTLIST $name");
+
+ if (@attlist == 1)
+ {
+ $FILE->print (" ");
+ $attlist[0]->print ($FILE);
+ }
+ else
+ {
+ for my $attr (@attlist)
+ {
+ next if $attr->[_Hidden];
+
+ $FILE->print ("\x0A ");
+ $attr->print ($FILE);
+ }
+ }
+ $FILE->print (">");
+ }
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ my $tag = $self->getName;
+ for my $a ($self->[_A]->getValues)
+ {
+ my $default = $a->isImplied ? '#IMPLIED' :
+ ($a->isRequired ? '#REQUIRED' :
+ ($a->[_Quote] . $a->getDefault->getValue . $a->[_Quote]));
+
+ $iter->Attlist ($tag, $a->getName, $a->getType, $default, $a->isFixed);
+ }
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ my $tag = $self->getName;
+ for my $a ($self->[_A]->getValues)
+ {
+ my $default = $a->isImplied ? '#IMPLIED' :
+ ($a->isRequired ? '#REQUIRED' :
+ ($a->[_Quote] . $a->getDefault->getValue . $a->[_Quote]));
+
+ $dtdh->attlist_decl ({ ElementName => $tag,
+ AttributeName => $a->getName,
+ Type => $a->[_Type],
+ Default => $default,
+ Fixed => $a->isFixed });
+ }
+}
+
+######################################################################
+package XML::DOM::ElementDecl;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Name Model", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+
+#------------------------------------------------------------
+# Extra method implementations
+
+# ElementDecl is not part of the DOM Spec
+sub new
+{
+ my ($class, $doc, $name, $model, $hidden) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Element TagName [$name] in ElementDecl")
+ unless XML::DOM::isValidName ($name);
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_Name] = $name;
+ $self->[_ReadOnly] = 1;
+ $self->[_Model] = $model;
+ $self->[_Hidden] = $hidden;
+ $self;
+}
+
+sub getNodeType
+{
+ ELEMENT_DECL_NODE;
+}
+
+sub getName
+{
+ $_[0]->[_Name];
+}
+
+sub getNodeName
+{
+ $_[0]->[_Name];
+}
+
+sub getModel
+{
+ $_[0]->[_Model];
+}
+
+sub setModel
+{
+ my ($self, $model) = @_;
+
+ $self->[_Model] = $model;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_Name];
+ my $model = $self->[_Model];
+
+ $FILE->print ("<!ELEMENT $name $model>")
+ unless $self->[_Hidden];
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ $self->[_Doc]->createElementDecl ($self->[_Name], $self->[_Model],
+ $self->[_Hidden]);
+}
+
+sub to_expat
+{
+#?? add support for Hidden?? (allover, also in _to_sax!!)
+
+ my ($self, $iter) = @_;
+ $iter->Element ($self->getName, $self->getModel);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ $dtdh->element_decl ( { Name => $self->getName,
+ Model => $self->getModel } );
+}
+
+######################################################################
+package XML::DOM::Element;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("TagName", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use XML::DOM::NamedNodeMap;
+use Carp;
+
+sub new
+{
+ my ($class, $doc, $tagName) = @_;
+
+ if ($XML::DOM::SafeMode)
+ {
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Element TagName [$tagName]")
+ unless XML::DOM::isValidName ($tagName);
+ }
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_C] = new XML::DOM::NodeList;
+ $self->[_TagName] = $tagName;
+
+# Now we're creating the NamedNodeMap only when needed (REC 2313 => 1147)
+# $self->[_A] = new XML::DOM::NamedNodeMap (Doc => $doc,
+# Parent => $self);
+
+ $self;
+}
+
+sub getNodeType
+{
+ ELEMENT_NODE;
+}
+
+sub getTagName
+{
+ $_[0]->[_TagName];
+}
+
+sub getNodeName
+{
+ $_[0]->[_TagName];
+}
+
+sub getAttributeNode
+{
+ my ($self, $name) = @_;
+ return undef unless defined $self->[_A];
+
+ $self->getAttributes->{$name};
+}
+
+sub getAttribute
+{
+ my ($self, $name) = @_;
+ my $attr = $self->getAttributeNode ($name);
+ (defined $attr) ? $attr->getValue : "";
+}
+
+sub setAttribute
+{
+ my ($self, $name, $val) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Attr Name [$name]")
+ unless XML::DOM::isValidName ($name);
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ my $node = $self->getAttributes->{$name};
+ if (defined $node)
+ {
+ $node->setValue ($val);
+ }
+ else
+ {
+ $node = $self->[_Doc]->createAttribute ($name, $val);
+ $self->[_A]->setNamedItem ($node);
+ }
+}
+
+sub setAttributeNode
+{
+ my ($self, $node) = @_;
+ my $attr = $self->getAttributes;
+ my $name = $node->getNodeName;
+
+ # REC 1147
+ if ($XML::DOM::SafeMode)
+ {
+ croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR,
+ "nodes belong to different documents")
+ if $self->[_Doc] != $node->[_Doc];
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ my $attrParent = $node->[_UsedIn];
+ croak new XML::DOM::DOMException (INUSE_ATTRIBUTE_ERR,
+ "Attr is already used by another Element")
+ if (defined ($attrParent) && $attrParent != $attr);
+ }
+
+ my $other = $attr->{$name};
+ $attr->removeNamedItem ($name) if defined $other;
+
+ $attr->setNamedItem ($node);
+
+ $other;
+}
+
+sub removeAttributeNode
+{
+ my ($self, $node) = @_;
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ my $attr = $self->[_A];
+ unless (defined $attr)
+ {
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR);
+ return undef;
+ }
+
+ my $name = $node->getNodeName;
+ my $attrNode = $attr->getNamedItem ($name);
+
+#?? should it croak if it's the default value?
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR)
+ unless $node == $attrNode;
+
+ # Not removing anything if it's the default value already
+ return undef unless $node->isSpecified;
+
+ $attr->removeNamedItem ($name);
+
+ # Substitute with default value if it's defined
+ my $default = $self->getDefaultAttrValue ($name);
+ if (defined $default)
+ {
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ $default = $default->cloneNode (1);
+ $attr->setNamedItem ($default);
+ }
+ $node;
+}
+
+sub removeAttribute
+{
+ my ($self, $name) = @_;
+ my $attr = $self->[_A];
+ unless (defined $attr)
+ {
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR);
+ return;
+ }
+
+ my $node = $attr->getNamedItem ($name);
+ if (defined $node)
+ {
+#?? could use dispose() to remove circular references for gc, but what if
+#?? somebody is referencing it?
+ $self->removeAttributeNode ($node);
+ }
+}
+
+sub cloneNode
+{
+ my ($self, $deep) = @_;
+ my $node = $self->[_Doc]->createElement ($self->getTagName);
+
+ # Always clone the Attr nodes, even if $deep == 0
+ if (defined $self->[_A])
+ {
+ $node->[_A] = $self->[_A]->cloneNode (1); # deep=1
+ $node->[_A]->setParentNode ($node);
+ }
+
+ $node->cloneChildren ($self, $deep);
+ $node;
+}
+
+sub getAttributes
+{
+ $_[0]->[_A] ||= XML::DOM::NamedNodeMap->new (Doc => $_[0]->[_Doc],
+ Parent => $_[0]);
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+# Added for convenience
+sub setTagName
+{
+ my ($self, $tagName) = @_;
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "bad Element TagName [$tagName]")
+ unless XML::DOM::isValidName ($tagName);
+
+ $self->[_TagName] = $tagName;
+}
+
+sub isReadOnly
+{
+ 0;
+}
+
+# Added for optimization.
+sub isElementNode
+{
+ 1;
+}
+
+sub rejectChild
+{
+ my $t = $_[1]->getNodeType;
+
+ $t != TEXT_NODE
+ && $t != ENTITY_REFERENCE_NODE
+ && $t != PROCESSING_INSTRUCTION_NODE
+ && $t != COMMENT_NODE
+ && $t != CDATA_SECTION_NODE
+ && $t != ELEMENT_NODE;
+}
+
+sub getDefaultAttrValue
+{
+ my ($self, $attr) = @_;
+ $self->[_Doc]->getDefaultAttrValue ($self->[_TagName], $attr);
+}
+
+sub dispose
+{
+ my $self = shift;
+
+ $self->[_A]->dispose if defined $self->[_A];
+ $self->SUPER::dispose;
+}
+
+sub setOwnerDocument
+{
+ my ($self, $doc) = @_;
+ $self->SUPER::setOwnerDocument ($doc);
+
+ $self->[_A]->setOwnerDocument ($doc) if defined $self->[_A];
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_TagName];
+
+ $FILE->print ("<$name");
+
+ if (defined $self->[_A])
+ {
+ for my $att (@{$self->[_A]->getValues})
+ {
+ # skip un-specified (default) Attr nodes
+ if ($att->isSpecified)
+ {
+ $FILE->print (" ");
+ $att->print ($FILE);
+ }
+ }
+ }
+
+ my @kids = @{$self->[_C]};
+ if (@kids > 0)
+ {
+ $FILE->print (">");
+ for my $kid (@kids)
+ {
+ $kid->print ($FILE);
+ }
+ $FILE->print ("</$name>");
+ }
+ else
+ {
+ my $style = &$XML::DOM::TagStyle ($name, $self);
+ if ($style == 0)
+ {
+ $FILE->print ("/>");
+ }
+ elsif ($style == 1)
+ {
+ $FILE->print ("></$name>");
+ }
+ else
+ {
+ $FILE->print (" />");
+ }
+ }
+}
+
+sub check
+{
+ my ($self, $checker) = @_;
+ die "Usage: \$xml_dom_elem->check (\$checker)" unless $checker;
+
+ $checker->InitDomElem;
+ $self->to_expat ($checker);
+ $checker->FinalDomElem;
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+
+ my $tag = $self->getTagName;
+ $iter->Start ($tag);
+
+ if (defined $self->[_A])
+ {
+ for my $attr ($self->[_A]->getValues)
+ {
+ $iter->Attr ($tag, $attr->getName, $attr->getValue, $attr->isSpecified);
+ }
+ }
+
+ $iter->EndAttr;
+
+ for my $kid ($self->getChildNodes)
+ {
+ $kid->to_expat ($iter);
+ }
+
+ $iter->End;
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+
+ my $tag = $self->getTagName;
+
+ my @attr = ();
+ my $attrOrder;
+ my $attrDefaulted;
+
+ if (defined $self->[_A])
+ {
+ my @spec = (); # names of specified attributes
+ my @unspec = (); # names of defaulted attributes
+
+ for my $attr ($self->[_A]->getValues)
+ {
+ my $attrName = $attr->getName;
+ push @attr, $attrName, $attr->getValue;
+ if ($attr->isSpecified)
+ {
+ push @spec, $attrName;
+ }
+ else
+ {
+ push @unspec, $attrName;
+ }
+ }
+ $attrOrder = [ @spec, @unspec ];
+ $attrDefaulted = @spec;
+ }
+ $doch->start_element (defined $attrOrder ?
+ { Name => $tag,
+ Attributes => { @attr },
+ AttributeOrder => $attrOrder,
+ Defaulted => $attrDefaulted
+ } :
+ { Name => $tag,
+ Attributes => { @attr }
+ }
+ );
+
+ for my $kid ($self->getChildNodes)
+ {
+ $kid->_to_sax ($doch, $dtdh, $enth);
+ }
+
+ $doch->end_element ( { Name => $tag } );
+}
+
+######################################################################
+package XML::DOM::CharacterData;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Data", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+
+#
+# CharacterData nodes should never be created directly, only subclassed!
+#
+sub new
+{
+ my ($class, $doc, $data) = @_;
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_Data] = $data;
+ $self;
+}
+
+sub appendData
+{
+ my ($self, $data) = @_;
+
+ if ($XML::DOM::SafeMode)
+ {
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+ }
+ $self->[_Data] .= $data;
+}
+
+sub deleteData
+{
+ my ($self, $offset, $count) = @_;
+
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "bad offset [$offset]")
+ if ($offset < 0 || $offset >= length ($self->[_Data]));
+#?? DOM Spec says >, but >= makes more sense!
+
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "negative count [$count]")
+ if $count < 0;
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ substr ($self->[_Data], $offset, $count) = "";
+}
+
+sub getData
+{
+ $_[0]->[_Data];
+}
+
+sub getLength
+{
+ length $_[0]->[_Data];
+}
+
+sub insertData
+{
+ my ($self, $offset, $data) = @_;
+
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "bad offset [$offset]")
+ if ($offset < 0 || $offset >= length ($self->[_Data]));
+#?? DOM Spec says >, but >= makes more sense!
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ substr ($self->[_Data], $offset, 0) = $data;
+}
+
+sub replaceData
+{
+ my ($self, $offset, $count, $data) = @_;
+
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "bad offset [$offset]")
+ if ($offset < 0 || $offset >= length ($self->[_Data]));
+#?? DOM Spec says >, but >= makes more sense!
+
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "negative count [$count]")
+ if $count < 0;
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ substr ($self->[_Data], $offset, $count) = $data;
+}
+
+sub setData
+{
+ my ($self, $data) = @_;
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ $self->[_Data] = $data;
+}
+
+sub substringData
+{
+ my ($self, $offset, $count) = @_;
+ my $data = $self->[_Data];
+
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "bad offset [$offset]")
+ if ($offset < 0 || $offset >= length ($data));
+#?? DOM Spec says >, but >= makes more sense!
+
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "negative count [$count]")
+ if $count < 0;
+
+ substr ($data, $offset, $count);
+}
+
+sub getNodeValue
+{
+ $_[0]->getData;
+}
+
+sub setNodeValue
+{
+ $_[0]->setData ($_[1]);
+}
+
+######################################################################
+package XML::DOM::CDATASection;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::CharacterData qw( :DEFAULT :Fields );
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("", "XML::DOM::CharacterData");
+}
+
+use XML::DOM::DOMException;
+
+sub getNodeName
+{
+ "#cdata-section";
+}
+
+sub getNodeType
+{
+ CDATA_SECTION_NODE;
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ $self->[_Doc]->createCDATASection ($self->getData);
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub isReadOnly
+{
+ 0;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+ $FILE->print ("<![CDATA[");
+ $FILE->print (XML::DOM::encodeCDATA ($self->getData));
+ $FILE->print ("]]>");
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ $iter->CData ($self->getData);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ $doch->start_cdata;
+ $doch->characters ( { Data => $self->getData } );
+ $doch->end_cdata;
+}
+
+######################################################################
+package XML::DOM::Comment;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::CharacterData qw( :DEFAULT :Fields );
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("", "XML::DOM::CharacterData");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+#?? setData - could check comment for double minus
+
+sub getNodeType
+{
+ COMMENT_NODE;
+}
+
+sub getNodeName
+{
+ "#comment";
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ $self->[_Doc]->createComment ($self->getData);
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub isReadOnly
+{
+ return 0 if $XML::DOM::IgnoreReadOnly;
+
+ my $pa = $_[0]->[_Parent];
+ defined ($pa) ? $pa->isReadOnly : 0;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+ my $comment = XML::DOM::encodeComment ($self->[_Data]);
+
+ $FILE->print ("<!--$comment-->");
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ $iter->Comment ($self->getData);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ $doch->Comment ( { Data => $self->getData });
+}
+
+######################################################################
+package XML::DOM::Text;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::CharacterData qw( :DEFAULT :Fields );
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("", "XML::DOM::CharacterData");
+}
+
+use XML::DOM::DOMException;
+use Carp;
+
+sub getNodeType
+{
+ TEXT_NODE;
+}
+
+sub getNodeName
+{
+ "#text";
+}
+
+sub splitText
+{
+ my ($self, $offset) = @_;
+
+ my $data = $self->getData;
+ croak new XML::DOM::DOMException (INDEX_SIZE_ERR,
+ "bad offset [$offset]")
+ if ($offset < 0 || $offset >= length ($data));
+#?? DOM Spec says >, but >= makes more sense!
+
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR,
+ "node is ReadOnly")
+ if $self->isReadOnly;
+
+ my $rest = substring ($data, $offset);
+
+ $self->setData (substring ($data, 0, $offset));
+ my $node = $self->[_Doc]->createTextNode ($rest);
+
+ # insert new node after this node
+ $self->[_Parent]->insertAfter ($node, $self);
+
+ $node;
+}
+
+sub cloneNode
+{
+ my $self = shift;
+ $self->[_Doc]->createTextNode ($self->getData);
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub isReadOnly
+{
+ 0;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+ $FILE->print (XML::DOM::encodeText ($self->getData, "<&"));
+}
+
+sub isTextNode
+{
+ 1;
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ $iter->Char ($self->getData);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ $doch->characters ( { Data => $self->getData } );
+}
+
+######################################################################
+package XML::DOM::XMLDecl;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Version Encoding Standalone", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+
+
+#------------------------------------------------------------
+# Extra method implementations
+
+# XMLDecl is not part of the DOM Spec
+sub new
+{
+ my ($class, $doc, $version, $encoding, $standalone) = @_;
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_Version] = $version if defined $version;
+ $self->[_Encoding] = $encoding if defined $encoding;
+ $self->[_Standalone] = $standalone if defined $standalone;
+
+ $self;
+}
+
+sub setVersion
+{
+ if (defined $_[1])
+ {
+ $_[0]->[_Version] = $_[1];
+ }
+ else
+ {
+ undef $_[0]->[_Version]; # was delete
+ }
+}
+
+sub getVersion
+{
+ $_[0]->[_Version];
+}
+
+sub setEncoding
+{
+ if (defined $_[1])
+ {
+ $_[0]->[_Encoding] = $_[1];
+ }
+ else
+ {
+ undef $_[0]->[_Encoding]; # was delete
+ }
+}
+
+sub getEncoding
+{
+ $_[0]->[_Encoding];
+}
+
+sub setStandalone
+{
+ if (defined $_[1])
+ {
+ $_[0]->[_Standalone] = $_[1];
+ }
+ else
+ {
+ undef $_[0]->[_Standalone]; # was delete
+ }
+}
+
+sub getStandalone
+{
+ $_[0]->[_Standalone];
+}
+
+sub getNodeType
+{
+ XML_DECL_NODE;
+}
+
+sub cloneNode
+{
+ my $self = shift;
+
+ new XML::DOM::XMLDecl ($self->[_Doc], $self->[_Version],
+ $self->[_Encoding], $self->[_Standalone]);
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $version = $self->[_Version];
+ my $encoding = $self->[_Encoding];
+ my $standalone = $self->[_Standalone];
+ $standalone = ($standalone ? "yes" : "no") if defined $standalone;
+
+ $FILE->print ("<?xml");
+ $FILE->print (" version=\"$version\"") if defined $version;
+ $FILE->print (" encoding=\"$encoding\"") if defined $encoding;
+ $FILE->print (" standalone=\"$standalone\"") if defined $standalone;
+ $FILE->print ("?>");
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+ $iter->XMLDecl ($self->getVersion, $self->getEncoding, $self->getStandalone);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+ $dtdh->xml_decl ( { Version => $self->getVersion,
+ Encoding => $self->getEncoding,
+ Standalone => $self->getStandalone } );
+}
+
+######################################################################
+package XML::DOM::DocumentFragment;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+
+sub new
+{
+ my ($class, $doc) = @_;
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_C] = new XML::DOM::NodeList;
+ $self;
+}
+
+sub getNodeType
+{
+ DOCUMENT_FRAGMENT_NODE;
+}
+
+sub getNodeName
+{
+ "#document-fragment";
+}
+
+sub cloneNode
+{
+ my ($self, $deep) = @_;
+ my $node = $self->[_Doc]->createDocumentFragment;
+
+ $node->cloneChildren ($self, $deep);
+ $node;
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub isReadOnly
+{
+ 0;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ for my $node (@{$self->[_C]})
+ {
+ $node->print ($FILE);
+ }
+}
+
+sub rejectChild
+{
+ my $t = $_[1]->getNodeType;
+
+ $t != TEXT_NODE
+ && $t != ENTITY_REFERENCE_NODE
+ && $t != PROCESSING_INSTRUCTION_NODE
+ && $t != COMMENT_NODE
+ && $t != CDATA_SECTION_NODE
+ && $t != ELEMENT_NODE;
+}
+
+sub isDocumentFragmentNode
+{
+ 1;
+}
+
+######################################################################
+package XML::DOM::Document;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ XML::DOM::def_fields ("Doctype XmlDecl", "XML::DOM::Node");
+}
+
+use Carp;
+use XML::DOM::NodeList;
+use XML::DOM::DOMException;
+
+sub new
+{
+ my ($class) = @_;
+ my $self = bless [], $class;
+
+ # keep Doc pointer, even though getOwnerDocument returns undef
+ $self->[_Doc] = $self;
+ $self->[_C] = new XML::DOM::NodeList;
+ $self;
+}
+
+sub getNodeType
+{
+ DOCUMENT_NODE;
+}
+
+sub getNodeName
+{
+ "#document";
+}
+
+#?? not sure about keeping a fixed order of these nodes....
+sub getDoctype
+{
+ $_[0]->[_Doctype];
+}
+
+sub getDocumentElement
+{
+ my ($self) = @_;
+ for my $kid (@{$self->[_C]})
+ {
+ return $kid if $kid->isElementNode;
+ }
+ undef;
+}
+
+sub getOwnerDocument
+{
+ undef;
+}
+
+sub getImplementation
+{
+ $XML::DOM::DOMImplementation::Singleton;
+}
+
+#
+# Added extra parameters ($val, $specified) that are passed straight to the
+# Attr constructor
+#
+sub createAttribute
+{
+ new XML::DOM::Attr (@_);
+}
+
+sub createCDATASection
+{
+ new XML::DOM::CDATASection (@_);
+}
+
+sub createComment
+{
+ new XML::DOM::Comment (@_);
+
+}
+
+sub createElement
+{
+ new XML::DOM::Element (@_);
+}
+
+sub createTextNode
+{
+ new XML::DOM::Text (@_);
+}
+
+sub createProcessingInstruction
+{
+ new XML::DOM::ProcessingInstruction (@_);
+}
+
+sub createEntityReference
+{
+ new XML::DOM::EntityReference (@_);
+}
+
+sub createDocumentFragment
+{
+ new XML::DOM::DocumentFragment (@_);
+}
+
+sub createDocumentType
+{
+ new XML::DOM::DocumentType (@_);
+}
+
+sub cloneNode
+{
+ my ($self, $deep) = @_;
+ my $node = new XML::DOM::Document;
+
+ $node->cloneChildren ($self, $deep);
+
+ my $xmlDecl = $self->[_XmlDecl];
+ $node->[_XmlDecl] = $xmlDecl->cloneNode ($deep) if defined $xmlDecl;
+
+ $node;
+}
+
+sub appendChild
+{
+ my ($self, $node) = @_;
+
+ # Extra check: make sure we don't end up with more than one Element.
+ # Don't worry about multiple DocType nodes, because DocumentFragment
+ # can't contain DocType nodes.
+
+ my @nodes = ($node);
+ @nodes = @{$node->[_C]}
+ if $node->getNodeType == DOCUMENT_FRAGMENT_NODE;
+
+ my $elem = 0;
+ for my $n (@nodes)
+ {
+ $elem++ if $n->isElementNode;
+ }
+
+ if ($elem > 0 && defined ($self->getDocumentElement))
+ {
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "document can have only one Element");
+ }
+ $self->SUPER::appendChild ($node);
+}
+
+sub insertBefore
+{
+ my ($self, $node, $refNode) = @_;
+
+ # Extra check: make sure sure we don't end up with more than 1 Elements.
+ # Don't worry about multiple DocType nodes, because DocumentFragment
+ # can't contain DocType nodes.
+
+ my @nodes = ($node);
+ @nodes = @{$node->[_C]}
+ if $node->getNodeType == DOCUMENT_FRAGMENT_NODE;
+
+ my $elem = 0;
+ for my $n (@nodes)
+ {
+ $elem++ if $n->isElementNode;
+ }
+
+ if ($elem > 0 && defined ($self->getDocumentElement))
+ {
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "document can have only one Element");
+ }
+ $self->SUPER::insertBefore ($node, $refNode);
+}
+
+sub replaceChild
+{
+ my ($self, $node, $refNode) = @_;
+
+ # Extra check: make sure sure we don't end up with more than 1 Elements.
+ # Don't worry about multiple DocType nodes, because DocumentFragment
+ # can't contain DocType nodes.
+
+ my @nodes = ($node);
+ @nodes = @{$node->[_C]}
+ if $node->getNodeType == DOCUMENT_FRAGMENT_NODE;
+
+ my $elem = 0;
+ $elem-- if $refNode->isElementNode;
+
+ for my $n (@nodes)
+ {
+ $elem++ if $n->isElementNode;
+ }
+
+ if ($elem > 0 && defined ($self->getDocumentElement))
+ {
+ croak new XML::DOM::DOMException (HIERARCHY_REQUEST_ERR,
+ "document can have only one Element");
+ }
+ $self->SUPER::appendChild ($node, $refNode);
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub isReadOnly
+{
+ 0;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $xmlDecl = $self->getXMLDecl;
+ if (defined $xmlDecl)
+ {
+ $xmlDecl->print ($FILE);
+ $FILE->print ("\x0A");
+ }
+
+ for my $node (@{$self->[_C]})
+ {
+ $node->print ($FILE);
+ $FILE->print ("\x0A");
+ }
+}
+
+sub setDoctype
+{
+ my ($self, $doctype) = @_;
+ my $oldDoctype = $self->[_Doctype];
+ if (defined $oldDoctype)
+ {
+ $self->replaceChild ($doctype, $oldDoctype);
+ }
+ else
+ {
+#?? before root element, but after XmlDecl !
+ $self->appendChild ($doctype);
+ }
+ $_[0]->[_Doctype] = $_[1];
+}
+
+sub removeDoctype
+{
+ my $self = shift;
+ my $doctype = $self->removeChild ($self->[_Doctype]);
+
+ undef $self->[_Doctype]; # was delete
+ $doctype;
+}
+
+sub rejectChild
+{
+ my $t = $_[1]->getNodeType;
+ $t != ELEMENT_NODE
+ && $t != PROCESSING_INSTRUCTION_NODE
+ && $t != COMMENT_NODE
+ && $t != DOCUMENT_TYPE_NODE;
+}
+
+sub expandEntity
+{
+ my ($self, $ent, $param) = @_;
+ my $doctype = $self->getDoctype;
+
+ (defined $doctype) ? $doctype->expandEntity ($ent, $param) : undef;
+}
+
+sub getDefaultAttrValue
+{
+ my ($self, $elem, $attr) = @_;
+
+ my $doctype = $self->getDoctype;
+
+ (defined $doctype) ? $doctype->getDefaultAttrValue ($elem, $attr) : undef;
+}
+
+sub getEntity
+{
+ my ($self, $entity) = @_;
+
+ my $doctype = $self->getDoctype;
+
+ (defined $doctype) ? $doctype->getEntity ($entity) : undef;
+}
+
+sub dispose
+{
+ my $self = shift;
+
+ $self->[_XmlDecl]->dispose if defined $self->[_XmlDecl];
+ undef $self->[_XmlDecl]; # was delete
+ undef $self->[_Doctype]; # was delete
+ $self->SUPER::dispose;
+}
+
+sub setOwnerDocument
+{
+ # Do nothing, you can't change the owner document!
+#?? could throw exception...
+}
+
+sub getXMLDecl
+{
+ $_[0]->[_XmlDecl];
+}
+
+sub setXMLDecl
+{
+ $_[0]->[_XmlDecl] = $_[1];
+}
+
+sub createXMLDecl
+{
+ new XML::DOM::XMLDecl (@_);
+}
+
+sub createNotation
+{
+ new XML::DOM::Notation (@_);
+}
+
+sub createElementDecl
+{
+ new XML::DOM::ElementDecl (@_);
+}
+
+sub createAttlistDecl
+{
+ new XML::DOM::AttlistDecl (@_);
+}
+
+sub createEntity
+{
+ new XML::DOM::Entity (@_);
+}
+
+sub createChecker
+{
+ my $self = shift;
+ my $checker = XML::Checker->new;
+
+ $checker->Init;
+ my $doctype = $self->getDoctype;
+ $doctype->to_expat ($checker) if $doctype;
+ $checker->Final;
+
+ $checker;
+}
+
+sub check
+{
+ my ($self, $checker) = @_;
+ $checker ||= XML::Checker->new;
+
+ $self->to_expat ($checker);
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+
+ $iter->Init;
+
+ for my $kid ($self->getChildNodes)
+ {
+ $kid->to_expat ($iter);
+ }
+ $iter->Final;
+}
+
+sub check_sax
+{
+ my ($self, $checker) = @_;
+ $checker ||= XML::Checker->new;
+
+ $self->to_sax (Handler => $checker);
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+
+ $doch->start_document;
+
+ for my $kid ($self->getChildNodes)
+ {
+ $kid->_to_sax ($doch, $dtdh, $enth);
+ }
+ $doch->end_document;
+}
+
+######################################################################
+package XML::DOM::DocumentType;
+######################################################################
+use vars qw{ @ISA @EXPORT_OK %EXPORT_TAGS %HFIELDS };
+
+BEGIN
+{
+ import XML::DOM::Node qw( :DEFAULT :Fields );
+ import XML::DOM::Document qw( :Fields );
+ XML::DOM::def_fields ("Entities Notations Name SysId PubId Internal", "XML::DOM::Node");
+}
+
+use XML::DOM::DOMException;
+use XML::DOM::NamedNodeMap;
+
+sub new
+{
+ my $class = shift;
+ my $doc = shift;
+
+ my $self = bless [], $class;
+
+ $self->[_Doc] = $doc;
+ $self->[_ReadOnly] = 1;
+ $self->[_C] = new XML::DOM::NodeList;
+
+ $self->[_Entities] = new XML::DOM::NamedNodeMap (Doc => $doc,
+ Parent => $self,
+ ReadOnly => 1);
+ $self->[_Notations] = new XML::DOM::NamedNodeMap (Doc => $doc,
+ Parent => $self,
+ ReadOnly => 1);
+ $self->setParams (@_);
+ $self;
+}
+
+sub getNodeType
+{
+ DOCUMENT_TYPE_NODE;
+}
+
+sub getNodeName
+{
+ $_[0]->[_Name];
+}
+
+sub getName
+{
+ $_[0]->[_Name];
+}
+
+sub getEntities
+{
+ $_[0]->[_Entities];
+}
+
+sub getNotations
+{
+ $_[0]->[_Notations];
+}
+
+sub setParentNode
+{
+ my ($self, $parent) = @_;
+ $self->SUPER::setParentNode ($parent);
+
+ $parent->[_Doctype] = $self
+ if $parent->getNodeType == DOCUMENT_NODE;
+}
+
+sub cloneNode
+{
+ my ($self, $deep) = @_;
+
+ my $node = new XML::DOM::DocumentType ($self->[_Doc], $self->[_Name],
+ $self->[_SysId], $self->[_PubId],
+ $self->[_Internal]);
+
+#?? does it make sense to make a shallow copy?
+
+ # clone the NamedNodeMaps
+ $node->[_Entities] = $self->[_Entities]->cloneNode ($deep);
+
+ $node->[_Notations] = $self->[_Notations]->cloneNode ($deep);
+
+ $node->cloneChildren ($self, $deep);
+
+ $node;
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub getSysId
+{
+ $_[0]->[_SysId];
+}
+
+sub getPubId
+{
+ $_[0]->[_PubId];
+}
+
+sub getInternal
+{
+ $_[0]->[_Internal];
+}
+
+sub setSysId
+{
+ $_[0]->[_SysId] = $_[1];
+}
+
+sub setPubId
+{
+ $_[0]->[_PubId] = $_[1];
+}
+
+sub setInternal
+{
+ $_[0]->[_Internal] = $_[1];
+}
+
+sub setName
+{
+ $_[0]->[_Name] = $_[1];
+}
+
+sub removeChildHoodMemories
+{
+ my ($self, $dontWipeReadOnly) = @_;
+
+ my $parent = $self->[_Parent];
+ if (defined $parent && $parent->getNodeType == DOCUMENT_NODE)
+ {
+ undef $parent->[_Doctype]; # was delete
+ }
+ $self->SUPER::removeChildHoodMemories;
+}
+
+sub dispose
+{
+ my $self = shift;
+
+ $self->[_Entities]->dispose;
+ $self->[_Notations]->dispose;
+ $self->SUPER::dispose;
+}
+
+sub setOwnerDocument
+{
+ my ($self, $doc) = @_;
+ $self->SUPER::setOwnerDocument ($doc);
+
+ $self->[_Entities]->setOwnerDocument ($doc);
+ $self->[_Notations]->setOwnerDocument ($doc);
+}
+
+sub expandEntity
+{
+ my ($self, $ent, $param) = @_;
+
+ my $kid = $self->[_Entities]->getNamedItem ($ent);
+ return $kid->getValue
+ if (defined ($kid) && $param == $kid->isParameterEntity);
+
+ undef; # entity not found
+}
+
+sub getAttlistDecl
+{
+ my ($self, $elemName) = @_;
+ for my $kid (@{$_[0]->[_C]})
+ {
+ return $kid if ($kid->getNodeType == ATTLIST_DECL_NODE &&
+ $kid->getName eq $elemName);
+ }
+ undef; # not found
+}
+
+sub getElementDecl
+{
+ my ($self, $elemName) = @_;
+ for my $kid (@{$_[0]->[_C]})
+ {
+ return $kid if ($kid->getNodeType == ELEMENT_DECL_NODE &&
+ $kid->getName eq $elemName);
+ }
+ undef; # not found
+}
+
+sub addElementDecl
+{
+ my ($self, $name, $model, $hidden) = @_;
+ my $node = $self->getElementDecl ($name);
+
+#?? could warn
+ unless (defined $node)
+ {
+ $node = $self->[_Doc]->createElementDecl ($name, $model, $hidden);
+ $self->appendChild ($node);
+ }
+ $node;
+}
+
+sub addAttlistDecl
+{
+ my ($self, $name) = @_;
+ my $node = $self->getAttlistDecl ($name);
+
+ unless (defined $node)
+ {
+ $node = $self->[_Doc]->createAttlistDecl ($name);
+ $self->appendChild ($node);
+ }
+ $node;
+}
+
+sub addNotation
+{
+ my $self = shift;
+ my $node = $self->[_Doc]->createNotation (@_);
+ $self->[_Notations]->setNamedItem ($node);
+ $node;
+}
+
+sub addEntity
+{
+ my $self = shift;
+ my $node = $self->[_Doc]->createEntity (@_);
+
+ $self->[_Entities]->setNamedItem ($node);
+ $node;
+}
+
+# All AttDefs for a certain Element are merged into a single ATTLIST
+sub addAttDef
+{
+ my $self = shift;
+ my $elemName = shift;
+
+ # create the AttlistDecl if it doesn't exist yet
+ my $attListDecl = $self->addAttlistDecl ($elemName);
+ $attListDecl->addAttDef (@_);
+}
+
+sub getDefaultAttrValue
+{
+ my ($self, $elem, $attr) = @_;
+ my $elemNode = $self->getAttlistDecl ($elem);
+ (defined $elemNode) ? $elemNode->getDefaultAttrValue ($attr) : undef;
+}
+
+sub getEntity
+{
+ my ($self, $entity) = @_;
+ $self->[_Entities]->getNamedItem ($entity);
+}
+
+sub setParams
+{
+ my ($self, $name, $sysid, $pubid, $internal) = @_;
+
+ $self->[_Name] = $name;
+
+#?? not sure if we need to hold on to these...
+ $self->[_SysId] = $sysid if defined $sysid;
+ $self->[_PubId] = $pubid if defined $pubid;
+ $self->[_Internal] = $internal if defined $internal;
+
+ $self;
+}
+
+sub rejectChild
+{
+ # DOM Spec says: DocumentType -- no children
+ not $XML::DOM::IgnoreReadOnly;
+}
+
+sub print
+{
+ my ($self, $FILE) = @_;
+
+ my $name = $self->[_Name];
+
+ my $sysId = $self->[_SysId];
+ my $pubId = $self->[_PubId];
+
+ $FILE->print ("<!DOCTYPE $name");
+ if (defined $pubId)
+ {
+ $FILE->print (" PUBLIC \"$pubId\" \"$sysId\"");
+ }
+ elsif (defined $sysId)
+ {
+ $FILE->print (" SYSTEM \"$sysId\"");
+ }
+
+ my @entities = @{$self->[_Entities]->getValues};
+ my @notations = @{$self->[_Notations]->getValues};
+ my @kids = @{$self->[_C]};
+
+ if (@entities || @notations || @kids)
+ {
+ $FILE->print (" [\x0A");
+
+ for my $kid (@entities)
+ {
+ next if $kid->[_Hidden];
+
+ $FILE->print (" ");
+ $kid->print ($FILE);
+ $FILE->print ("\x0A");
+ }
+
+ for my $kid (@notations)
+ {
+ next if $kid->[_Hidden];
+
+ $FILE->print (" ");
+ $kid->print ($FILE);
+ $FILE->print ("\x0A");
+ }
+
+ for my $kid (@kids)
+ {
+ next if $kid->[_Hidden];
+
+ $FILE->print (" ");
+ $kid->print ($FILE);
+ $FILE->print ("\x0A");
+ }
+ $FILE->print ("]");
+ }
+ $FILE->print (">");
+}
+
+sub to_expat
+{
+ my ($self, $iter) = @_;
+
+ $iter->Doctype ($self->getName, $self->getSysId, $self->getPubId, $self->getInternal);
+
+ for my $ent ($self->getEntities->getValues)
+ {
+ next if $ent->[_Hidden];
+ $ent->to_expat ($iter);
+ }
+
+ for my $nota ($self->getNotations->getValues)
+ {
+ next if $nota->[_Hidden];
+ $nota->to_expat ($iter);
+ }
+
+ for my $kid ($self->getChildNodes)
+ {
+ next if $kid->[_Hidden];
+ $kid->to_expat ($iter);
+ }
+}
+
+sub _to_sax
+{
+ my ($self, $doch, $dtdh, $enth) = @_;
+
+ $dtdh->doctype_decl ( { Name => $self->getName,
+ SystemId => $self->getSysId,
+ PublicId => $self->getPubId,
+ Internal => $self->getInternal });
+
+ for my $ent ($self->getEntities->getValues)
+ {
+ next if $ent->[_Hidden];
+ $ent->_to_sax ($doch, $dtdh, $enth);
+ }
+
+ for my $nota ($self->getNotations->getValues)
+ {
+ next if $nota->[_Hidden];
+ $nota->_to_sax ($doch, $dtdh, $enth);
+ }
+
+ for my $kid ($self->getChildNodes)
+ {
+ next if $kid->[_Hidden];
+ $kid->_to_sax ($doch, $dtdh, $enth);
+ }
+}
+
+######################################################################
+package XML::DOM::Parser;
+######################################################################
+use vars qw ( @ISA );
+@ISA = qw( XML::Parser );
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ $args{Style} = 'Dom';
+ $class->SUPER::new (%args);
+}
+
+# This method needed to be overriden so we can restore some global
+# variables when an exception is thrown
+sub parse
+{
+ my $self = shift;
+
+ local $XML::Parser::Dom::_DP_doc;
+ local $XML::Parser::Dom::_DP_elem;
+ local $XML::Parser::Dom::_DP_doctype;
+ local $XML::Parser::Dom::_DP_in_prolog;
+ local $XML::Parser::Dom::_DP_end_doc;
+ local $XML::Parser::Dom::_DP_saw_doctype;
+ local $XML::Parser::Dom::_DP_in_CDATA;
+ local $XML::Parser::Dom::_DP_keep_CDATA;
+ local $XML::Parser::Dom::_DP_last_text;
+
+
+ # Temporarily disable checks that Expat already does (for performance)
+ local $XML::DOM::SafeMode = 0;
+ # Temporarily disable ReadOnly checks
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ my $ret;
+ eval {
+ $ret = $self->SUPER::parse (@_);
+ };
+ my $err = $@;
+
+ if ($err)
+ {
+ my $doc = $XML::Parser::Dom::_DP_doc;
+ if ($doc)
+ {
+ $doc->dispose;
+ }
+ die $err;
+ }
+
+ $ret;
+}
+
+my $LWP_USER_AGENT;
+sub set_LWP_UserAgent
+{
+ $LWP_USER_AGENT = shift;
+}
+
+sub parsefile
+{
+ my $self = shift;
+ my $url = shift;
+
+ # Any other URL schemes?
+ if ($url =~ /^(https?|ftp|wais|gopher|file):/)
+ {
+ # Read the file from the web with LWP.
+ #
+ # Note that we read in the entire file, which may not be ideal
+ # for large files. LWP::UserAgent also provides a callback style
+ # request, which we could convert to a stream with a fork()...
+
+ my $result;
+ eval
+ {
+ use LWP::UserAgent;
+
+ my $ua = $self->{LWP_UserAgent};
+ unless (defined $ua)
+ {
+ unless (defined $LWP_USER_AGENT)
+ {
+ $LWP_USER_AGENT = LWP::UserAgent->new;
+
+ # Load proxy settings from environment variables, i.e.:
+ # http_proxy, ftp_proxy, no_proxy etc. (see LWP::UserAgent(3))
+ # You need these to go thru firewalls.
+ $LWP_USER_AGENT->env_proxy;
+ }
+ $ua = $LWP_USER_AGENT;
+ }
+ my $req = new HTTP::Request 'GET', $url;
+ my $response = $LWP_USER_AGENT->request ($req);
+
+ # Parse the result of the HTTP request
+ $result = $self->parse ($response->content, @_);
+ };
+ if ($@)
+ {
+ die "Couldn't parsefile [$url] with LWP: $@";
+ }
+ return $result;
+ }
+ else
+ {
+ return $self->SUPER::parsefile ($url, @_);
+ }
+}
+
+######################################################################
+package XML::Parser::Dom;
+######################################################################
+
+BEGIN
+{
+ import XML::DOM::Node qw( :Fields );
+ import XML::DOM::CharacterData qw( :Fields );
+}
+
+use vars qw( $_DP_doc
+ $_DP_elem
+ $_DP_doctype
+ $_DP_in_prolog
+ $_DP_end_doc
+ $_DP_saw_doctype
+ $_DP_in_CDATA
+ $_DP_keep_CDATA
+ $_DP_last_text
+ $_DP_level
+ $_DP_expand_pent
+ );
+
+# This adds a new Style to the XML::Parser class.
+# From now on you can say: $parser = new XML::Parser ('Style' => 'Dom' );
+# but that is *NOT* how a regular user should use it!
+$XML::Parser::Built_In_Styles{Dom} = 1;
+
+sub Init
+{
+ $_DP_elem = $_DP_doc = new XML::DOM::Document();
+ $_DP_doctype = new XML::DOM::DocumentType ($_DP_doc);
+ $_DP_doc->setDoctype ($_DP_doctype);
+ $_DP_keep_CDATA = $_[0]->{KeepCDATA};
+
+ # Prepare for document prolog
+ $_DP_in_prolog = 1;
+
+ # We haven't passed the root element yet
+ $_DP_end_doc = 0;
+
+ # Expand parameter entities in the DTD by default
+
+ $_DP_expand_pent = defined $_[0]->{ExpandParamEnt} ?
+ $_[0]->{ExpandParamEnt} : 1;
+ if ($_DP_expand_pent)
+ {
+ $_[0]->{DOM_Entity} = {};
+ }
+
+ $_DP_level = 0;
+
+ undef $_DP_last_text;
+}
+
+sub Final
+{
+ unless ($_DP_saw_doctype)
+ {
+ my $doctype = $_DP_doc->removeDoctype;
+ $doctype->dispose;
+ }
+ $_DP_doc;
+}
+
+sub Char
+{
+ my $str = $_[1];
+
+ if ($_DP_in_CDATA && $_DP_keep_CDATA)
+ {
+ undef $_DP_last_text;
+ # Merge text with previous node if possible
+ $_DP_elem->addCDATA ($str);
+ }
+ else
+ {
+ # Merge text with previous node if possible
+ # Used to be: $expat->{DOM_Element}->addText ($str);
+ if ($_DP_last_text)
+ {
+ $_DP_last_text->[_Data] .= $str;
+ }
+ else
+ {
+ $_DP_last_text = $_DP_doc->createTextNode ($str);
+ $_DP_last_text->[_Parent] = $_DP_elem;
+ push @{$_DP_elem->[_C]}, $_DP_last_text;
+ }
+ }
+}
+
+sub Start
+{
+ my ($expat, $elem, @attr) = @_;
+ my $parent = $_DP_elem;
+ my $doc = $_DP_doc;
+
+ if ($parent == $doc)
+ {
+ # End of document prolog, i.e. start of first Element
+ $_DP_in_prolog = 0;
+ }
+
+ undef $_DP_last_text;
+ my $node = $doc->createElement ($elem);
+ $_DP_elem = $node;
+ $parent->appendChild ($node);
+
+ my $n = @attr;
+ return unless $n;
+
+ # Add attributes
+ my $first_default = $expat->specified_attr;
+ my $i = 0;
+ while ($i < $n)
+ {
+ my $specified = $i < $first_default;
+ my $name = $attr[$i++];
+ undef $_DP_last_text;
+ my $attr = $doc->createAttribute ($name, $attr[$i++], $specified);
+ $node->setAttributeNode ($attr);
+ }
+}
+
+sub End
+{
+ $_DP_elem = $_DP_elem->[_Parent];
+ undef $_DP_last_text;
+
+ # Check for end of root element
+ $_DP_end_doc = 1 if ($_DP_elem == $_DP_doc);
+}
+
+# Called at end of file, i.e. whitespace following last closing tag
+# Also for Entity references
+# May also be called at other times...
+sub Default
+{
+ my ($expat, $str) = @_;
+
+# shift; deb ("Default", @_);
+
+ if ($_DP_in_prolog) # still processing Document prolog...
+ {
+#?? could try to store this text later
+#?? I've only seen whitespace here so far
+ }
+ elsif (!$_DP_end_doc) # ignore whitespace at end of Document
+ {
+# if ($expat->{NoExpand})
+# {
+ $str =~ /^&(.+);$/os;
+ return unless defined ($1);
+ # Got a TextDecl (<?xml ...?>) from an external entity here once
+
+ $_DP_elem->appendChild (
+ $_DP_doc->createEntityReference ($1));
+ undef $_DP_last_text;
+# }
+# else
+# {
+# $expat->{DOM_Element}->addText ($str);
+# }
+ }
+}
+
+# XML::Parser 2.19 added support for CdataStart and CdataEnd handlers
+# If they are not defined, the Default handler is called instead
+# with the text "<![CDATA[" and "]]"
+sub CdataStart
+{
+ $_DP_in_CDATA = 1;
+}
+
+sub CdataEnd
+{
+ $_DP_in_CDATA = 0;
+}
+
+my $START_MARKER = "__DOM__START__ENTITY__";
+my $END_MARKER = "__DOM__END__ENTITY__";
+
+sub Comment
+{
+ undef $_DP_last_text;
+
+ # These comments were inserted by ExternEnt handler
+ if ($_[1] =~ /(?:($START_MARKER)|($END_MARKER))/)
+ {
+ if ($1) # START
+ {
+ $_DP_level++;
+ }
+ else
+ {
+ $_DP_level--;
+ }
+ }
+ else
+ {
+ my $comment = $_DP_doc->createComment ($_[1]);
+ $_DP_elem->appendChild ($comment);
+ }
+}
+
+sub deb
+{
+# return;
+
+ my $name = shift;
+ print "$name (" . join(",", map {defined($_)?$_ : "(undef)"} @_) . ")\n";
+}
+
+sub Doctype
+{
+ my $expat = shift;
+# deb ("Doctype", @_);
+
+ $_DP_doctype->setParams (@_);
+ $_DP_saw_doctype = 1;
+}
+
+sub Attlist
+{
+ my $expat = shift;
+# deb ("Attlist", @_);
+
+ $_[5] = "Hidden" unless $_DP_expand_pent || $_DP_level == 0;
+ $_DP_doctype->addAttDef (@_);
+}
+
+sub XMLDecl
+{
+ my $expat = shift;
+# deb ("XMLDecl", @_);
+
+ undef $_DP_last_text;
+ $_DP_doc->setXMLDecl (new XML::DOM::XMLDecl ($_DP_doc, @_));
+}
+
+sub Entity
+{
+ my $expat = shift;
+# deb ("Entity", @_);
+
+ # Parameter Entities names are passed starting with '%'
+ my $parameter = 0;
+ if ($_[0] =~ /^%(.*)/s)
+ {
+ $_[0] = $1;
+ $parameter = 1;
+
+ if (defined $_[2]) # was sysid specified?
+ {
+ # Store the Entity mapping for use in ExternEnt
+ if (exists $expat->{DOM_Entity}->{$_[2]})
+ {
+ # If this ever happens, the name of entity may be the wrong one
+ # when writing out the Document.
+ XML::DOM::warning ("Entity $_[2] is known as %$_[0] and %" .
+ $expat->{DOM_Entity}->{$_[2]});
+ }
+ else
+ {
+ $expat->{DOM_Entity}->{$_[2]} = $_[0];
+ }
+ #?? remove this block when XML::Parser has better support
+ }
+ }
+
+ undef $_DP_last_text;
+
+ $_[5] = "Hidden" unless $_DP_expand_pent || $_DP_level == 0;
+ $_DP_doctype->addEntity ($parameter, @_);
+}
+
+#
+# Unparsed is called when it encounters e.g:
+#
+# <!ENTITY logo SYSTEM "http://server/logo.gif" NDATA gif>
+#
+sub Unparsed
+{
+ Entity (@_); # same as regular ENTITY, as far as DOM is concerned
+}
+
+sub Element
+{
+ shift;
+# deb ("Element", @_);
+
+ undef $_DP_last_text;
+ push @_, "Hidden" unless $_DP_expand_pent || $_DP_level == 0;
+ $_DP_doctype->addElementDecl (@_);
+}
+
+sub Notation
+{
+ shift;
+# deb ("Notation", @_);
+
+ undef $_DP_last_text;
+ $_[4] = "Hidden" unless $_DP_expand_pent || $_DP_level == 0;
+ $_DP_doctype->addNotation (@_);
+}
+
+sub Proc
+{
+ shift;
+# deb ("Proc", @_);
+
+ undef $_DP_last_text;
+ push @_, "Hidden" unless $_DP_expand_pent || $_DP_level == 0;
+ $_DP_elem->appendChild ($_DP_doc->createProcessingInstruction (@_));
+}
+
+#
+# ExternEnt is called when an external entity, such as:
+#
+# <!ENTITY externalEntity PUBLIC "-//Enno//TEXT Enno's description//EN"
+# "http://server/descr.txt">
+#
+# is referenced in the document, e.g. with: &externalEntity;
+# If ExternEnt is not specified, the entity reference is passed to the Default
+# handler as e.g. "&externalEntity;", where an EntityReference object is added.
+#
+# Also for %externalEntity; references in the DTD itself.
+#
+# It can also be called when XML::Parser parses the DOCTYPE header
+# (just before calling the DocType handler), when it contains a
+# reference like "docbook.dtd" below:
+#
+# <!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.3//EN"
+# "docbook.dtd" [
+# ... rest of DTD ...
+#
+sub ExternEnt
+{
+ my ($expat, $base, $sysid, $pubid) = @_;
+# deb ("ExternEnt", @_);
+
+ # Invoke XML::Parser's default ExternEnt handler
+ my $content;
+ if ($XML::Parser::have_LWP)
+ {
+ $content = XML::Parser::lwp_ext_ent_handler (@_);
+ }
+ else
+ {
+ $content = XML::Parser::file_ext_ent_handler (@_);
+ }
+
+ if ($_DP_expand_pent)
+ {
+ return $content;
+ }
+ else
+ {
+ my $entname = $expat->{DOM_Entity}->{$sysid};
+ if (defined $entname)
+ {
+ $_DP_doctype->appendChild ($_DP_doc->createEntityReference ($entname, 1));
+ # Wrap the contents in special comments, so we know when we reach the
+ # end of parsing the entity. This way we can omit the contents from
+ # the DTD, when ExpandParamEnt is set to 0.
+
+ return "<!-- $START_MARKER sysid=[$sysid] -->" .
+ $content . "<!-- $END_MARKER sysid=[$sysid] -->";
+ }
+ else
+ {
+ # We either read the entity ref'd by the system id in the
+ # <!DOCTYPE> header, or the entity was undefined.
+ # In either case, don't bother with maintaining the entity
+ # reference, just expand the contents.
+ return "<!-- $START_MARKER sysid=[DTD] -->" .
+ $content . "<!-- $END_MARKER sysid=[DTD] -->";
+ }
+ }
+}
+
+1; # module return code
+
+__END__
+
+=head1 NAME
+
+XML::DOM - A perl module for building DOM Level 1 compliant document structures
+
+=head1 SYNOPSIS
+
+ use XML::DOM;
+
+ my $parser = new XML::DOM::Parser;
+ my $doc = $parser->parsefile ("file.xml");
+
+ # print all HREF attributes of all CODEBASE elements
+ my $nodes = $doc->getElementsByTagName ("CODEBASE");
+ my $n = $nodes->getLength;
+
+ for (my $i = 0; $i < $n; $i++)
+ {
+ my $node = $nodes->item ($i);
+ my $href = $node->getAttributeNode ("HREF");
+ print $href->getValue . "\n";
+ }
+
+ # Print doc file
+ $doc->printToFile ("out.xml");
+
+ # Print to string
+ print $doc->toString;
+
+ # Avoid memory leaks - cleanup circular references for garbage collection
+ $doc->dispose;
+
+=head1 DESCRIPTION
+
+This module extends the XML::Parser module by Clark Cooper.
+The XML::Parser module is built on top of XML::Parser::Expat,
+which is a lower level interface to James Clark's expat library.
+
+XML::DOM::Parser is derived from XML::Parser. It parses XML strings or files
+and builds a data structure that conforms to the API of the Document Object
+Model as described at http://www.w3.org/TR/REC-DOM-Level-1.
+See the XML::Parser manpage for other available features of the
+XML::DOM::Parser class.
+Note that the 'Style' property should not be used (it is set internally.)
+
+The XML::Parser I<NoExpand> option is more or less supported, in that it will
+generate EntityReference objects whenever an entity reference is encountered
+in character data. I'm not sure how useful this is. Any comments are welcome.
+
+As described in the synopsis, when you create an XML::DOM::Parser object,
+the parse and parsefile methods create an I<XML::DOM::Document> object
+from the specified input. This Document object can then be examined, modified and
+written back out to a file or converted to a string.
+
+When using XML::DOM with XML::Parser version 2.19 and up, setting the
+XML::DOM::Parser option I<KeepCDATA> to 1 will store CDATASections in
+CDATASection nodes, instead of converting them to Text nodes.
+Subsequent CDATASection nodes will be merged into one. Let me know if this
+is a problem.
+
+When using XML::Parser 2.27 and above, you can suppress expansion of
+parameter entity references (e.g. %pent;) in the DTD, by setting I<ParseParamEnt>
+to 1 and I<ExpandParamEnt> to 0. See L<Hidden Nodes|/_Hidden_Nodes_> for details.
+
+A Document has a tree structure consisting of I<Node> objects. A Node may contain
+other nodes, depending on its type.
+A Document may have Element, Text, Comment, and CDATASection nodes.
+Element nodes may have Attr, Element, Text, Comment, and CDATASection nodes.
+The other nodes may not have any child nodes.
+
+This module adds several node types that are not part of the DOM spec (yet.)
+These are: ElementDecl (for <!ELEMENT ...> declarations), AttlistDecl (for
+<!ATTLIST ...> declarations), XMLDecl (for <?xml ...?> declarations) and AttDef
+(for attribute definitions in an AttlistDecl.)
+
+=head1 XML::DOM Classes
+
+The XML::DOM module stores XML documents in a tree structure with a root node
+of type XML::DOM::Document. Different nodes in tree represent different
+parts of the XML file. The DOM Level 1 Specification defines the following
+node types:
+
+=over 4
+
+=item * L<XML::DOM::Node> - Super class of all node types
+
+=item * L<XML::DOM::Document> - The root of the XML document
+
+=item * L<XML::DOM::DocumentType> - Describes the document structure: <!DOCTYPE root [ ... ]>
+
+=item * L<XML::DOM::Element> - An XML element: <elem attr="val"> ... </elem>
+
+=item * L<XML::DOM::Attr> - An XML element attribute: name="value"
+
+=item * L<XML::DOM::CharacterData> - Super class of Text, Comment and CDATASection
+
+=item * L<XML::DOM::Text> - Text in an XML element
+
+=item * L<XML::DOM::CDATASection> - Escaped block of text: <![CDATA[ text ]]>
+
+=item * L<XML::DOM::Comment> - An XML comment: <!-- comment -->
+
+=item * L<XML::DOM::EntityReference> - Refers to an ENTITY: &ent; or %ent;
+
+=item * L<XML::DOM::Entity> - An ENTITY definition: <!ENTITY ...>
+
+=item * L<XML::DOM::ProcessingInstruction> - <?PI target>
+
+=item * L<XML::DOM::DocumentFragment> - Lightweight node for cut & paste
+
+=item * L<XML::DOM::Notation> - An NOTATION definition: <!NOTATION ...>
+
+=back
+
+In addition, the XML::DOM module contains the following nodes that are not part
+of the DOM Level 1 Specification:
+
+=over 4
+
+=item * L<XML::DOM::ElementDecl> - Defines an element: <!ELEMENT ...>
+
+=item * L<XML::DOM::AttlistDecl> - Defines one or more attributes in an <!ATTLIST ...>
+
+=item * L<XML::DOM::AttDef> - Defines one attribute in an <!ATTLIST ...>
+
+=item * L<XML::DOM::XMLDecl> - An XML declaration: <?xml version="1.0" ...>
+
+=back
+
+Other classes that are part of the DOM Level 1 Spec:
+
+=over 4
+
+=item * L<XML::DOM::Implementation> - Provides information about this implementation. Currently it doesn't do much.
+
+=item * L<XML::DOM::NodeList> - Used internally to store a node's child nodes. Also returned by getElementsByTagName.
+
+=item * L<XML::DOM::NamedNodeMap> - Used internally to store an element's attributes.
+
+=back
+
+Other classes that are not part of the DOM Level 1 Spec:
+
+=over 4
+
+=item * L<XML::DOM::Parser> - An non-validating XML parser that creates XML::DOM::Documents
+
+=item * L<XML::DOM::ValParser> - A validating XML parser that creates XML::DOM::Documents. It uses L<XML::Checker> to check against the DocumentType (DTD)
+
+=item * L<XML::Handler::BuildDOM> - A PerlSAX handler that creates XML::DOM::Documents.
+
+=back
+
+=head1 XML::DOM package
+
+=over 4
+
+=item Constant definitions
+
+The following predefined constants indicate which type of node it is.
+
+=back
+
+ UNKNOWN_NODE (0) The node type is unknown (not part of DOM)
+
+ ELEMENT_NODE (1) The node is an Element.
+ ATTRIBUTE_NODE (2) The node is an Attr.
+ TEXT_NODE (3) The node is a Text node.
+ CDATA_SECTION_NODE (4) The node is a CDATASection.
+ ENTITY_REFERENCE_NODE (5) The node is an EntityReference.
+ ENTITY_NODE (6) The node is an Entity.
+ PROCESSING_INSTRUCTION_NODE (7) The node is a ProcessingInstruction.
+ COMMENT_NODE (8) The node is a Comment.
+ DOCUMENT_NODE (9) The node is a Document.
+ DOCUMENT_TYPE_NODE (10) The node is a DocumentType.
+ DOCUMENT_FRAGMENT_NODE (11) The node is a DocumentFragment.
+ NOTATION_NODE (12) The node is a Notation.
+
+ ELEMENT_DECL_NODE (13) The node is an ElementDecl (not part of DOM)
+ ATT_DEF_NODE (14) The node is an AttDef (not part of DOM)
+ XML_DECL_NODE (15) The node is an XMLDecl (not part of DOM)
+ ATTLIST_DECL_NODE (16) The node is an AttlistDecl (not part of DOM)
+
+ Usage:
+
+ if ($node->getNodeType == ELEMENT_NODE)
+ {
+ print "It's an Element";
+ }
+
+B<Not In DOM Spec>: The DOM Spec does not mention UNKNOWN_NODE and,
+quite frankly, you should never encounter it. The last 4 node types were added
+to support the 4 added node classes.
+
+=head2 Global Variables
+
+=over 4
+
+=item $VERSION
+
+The variable $XML::DOM::VERSION contains the version number of this
+implementation, e.g. "1.07".
+
+=back
+
+=head2 METHODS
+
+These methods are not part of the DOM Level 1 Specification.
+
+=over 4
+
+=item getIgnoreReadOnly and ignoreReadOnly (readOnly)
+
+The DOM Level 1 Spec does not allow you to edit certain sections of the document,
+e.g. the DocumentType, so by default this implementation throws DOMExceptions
+(i.e. NO_MODIFICATION_ALLOWED_ERR) when you try to edit a readonly node.
+These readonly checks can be disabled by (temporarily) setting the global
+IgnoreReadOnly flag.
+
+The ignoreReadOnly method sets the global IgnoreReadOnly flag and returns its
+previous value. The getIgnoreReadOnly method simply returns its current value.
+
+ my $oldIgnore = XML::DOM::ignoreReadOnly (1);
+ eval {
+ ... do whatever you want, catching any other exceptions ...
+ };
+ XML::DOM::ignoreReadOnly ($oldIgnore); # restore previous value
+
+Another way to do it, using a local variable:
+
+ { # start new scope
+ local $XML::DOM::IgnoreReadOnly = 1;
+ ... do whatever you want, don't worry about exceptions ...
+ } # end of scope ($IgnoreReadOnly is set back to its previous value)
+
+
+=item isValidName (name)
+
+Whether the specified name is a valid "Name" as specified in the XML spec.
+Characters with Unicode values > 127 are now also supported.
+
+=item getAllowReservedNames and allowReservedNames (boolean)
+
+The first method returns whether reserved names are allowed.
+The second takes a boolean argument and sets whether reserved names are allowed.
+The initial value is 1 (i.e. allow reserved names.)
+
+The XML spec states that "Names" starting with (X|x)(M|m)(L|l)
+are reserved for future use. (Amusingly enough, the XML version of the XML spec
+(REC-xml-19980210.xml) breaks that very rule by defining an ENTITY with the name
+'xmlpio'.)
+A "Name" in this context means the Name token as found in the BNF rules in the
+XML spec.
+
+XML::DOM only checks for errors when you modify the DOM tree, not when the
+DOM tree is built by the XML::DOM::Parser.
+
+=item setTagCompression (funcref)
+
+There are 3 possible styles for printing empty Element tags:
+
+=over 4
+
+=item Style 0
+
+ <empty/> or <empty attr="val"/>
+
+XML::DOM uses this style by default for all Elements.
+
+=item Style 1
+
+ <empty></empty> or <empty attr="val"></empty>
+
+=item Style 2
+
+ <empty /> or <empty attr="val" />
+
+This style is sometimes desired when using XHTML.
+(Note the extra space before the slash "/")
+See L<http://www.w3.org/TR/xhtml1> Appendix C for more details.
+
+=back
+
+By default XML::DOM compresses all empty Element tags (style 0.)
+You can control which style is used for a particular Element by calling
+XML::DOM::setTagCompression with a reference to a function that takes
+2 arguments. The first is the tag name of the Element, the second is the
+XML::DOM::Element that is being printed.
+The function should return 0, 1 or 2 to indicate which style should be used to
+print the empty tag. E.g.
+
+ XML::DOM::setTagCompression (\&my_tag_compression);
+
+ sub my_tag_compression
+ {
+ my ($tag, $elem) = @_;
+
+ # Print empty br, hr and img tags like this: <br />
+ return 2 if $tag =~ /^(br|hr|img)$/;
+
+ # Print other empty tags like this: <empty></empty>
+ return 1;
+ }
+
+=back
+
+=head1 IMPLEMENTATION DETAILS
+
+=over 4
+
+=item * Perl Mappings
+
+The value undef was used when the DOM Spec said null.
+
+The DOM Spec says: Applications must encode DOMString using UTF-16 (defined in
+Appendix C.3 of [UNICODE] and Amendment 1 of [ISO-10646]).
+In this implementation we use plain old Perl strings encoded in UTF-8 instead of
+UTF-16.
+
+=item * Text and CDATASection nodes
+
+The Expat parser expands EntityReferences and CDataSection sections to
+raw strings and does not indicate where it was found.
+This implementation does therefore convert both to Text nodes at parse time.
+CDATASection and EntityReference nodes that are added to an existing Document
+(by the user) will be preserved.
+
+Also, subsequent Text nodes are always merged at parse time. Text nodes that are
+added later can be merged with the normalize method. Consider using the addText
+method when adding Text nodes.
+
+=item * Printing and toString
+
+When printing (and converting an XML Document to a string) the strings have to
+encoded differently depending on where they occur. E.g. in a CDATASection all
+substrings are allowed except for "]]>". In regular text, certain characters are
+not allowed, e.g. ">" has to be converted to ">".
+These routines should be verified by someone who knows the details.
+
+=item * Quotes
+
+Certain sections in XML are quoted, like attribute values in an Element.
+XML::Parser strips these quotes and the print methods in this implementation
+always uses double quotes, so when parsing and printing a document, single quotes
+may be converted to double quotes. The default value of an attribute definition
+(AttDef) in an AttlistDecl, however, will maintain its quotes.
+
+=item * AttlistDecl
+
+Attribute declarations for a certain Element are always merged into a single
+AttlistDecl object.
+
+=item * Comments
+
+Comments in the DOCTYPE section are not kept in the right place. They will become
+child nodes of the Document.
+
+=item * Hidden Nodes
+
+Previous versions of XML::DOM would expand parameter entity references
+(like B<%pent;>), so when printing the DTD, it would print the contents
+of the external entity, instead of the parameter entity reference.
+With this release (1.27), you can prevent this by setting the XML::DOM::Parser
+options ParseParamEnt => 1 and ExpandParamEnt => 0.
+
+When it is parsing the contents of the external entities, it *DOES* still add
+the nodes to the DocumentType, but it marks these nodes by setting
+the 'Hidden' property. In addition, it adds an EntityReference node to the
+DocumentType node.
+
+When printing the DocumentType node (or when using to_expat() or to_sax()),
+the 'Hidden' nodes are suppressed, so you will see the parameter entity
+reference instead of the contents of the external entities. See test case
+t/dom_extent.t for an example.
+
+The reason for adding the 'Hidden' nodes to the DocumentType node, is that
+the nodes may contain <!ENTITY> definitions that are referenced further
+in the document. (Simply not adding the nodes to the DocumentType could
+cause such entity references to be expanded incorrectly.)
+
+Note that you need XML::Parser 2.27 or higher for this to work correctly.
+
+=back
+
+=head1 SEE ALSO
+
+The Japanese version of this document by Takanori Kawai (Hippo2000)
+at L<http://member.nifty.ne.jp/hippo2000/perltips/xml/dom.htm>
+
+The DOM Level 1 specification at L<http://www.w3.org/TR/REC-DOM-Level-1>
+
+The XML spec (Extensible Markup Language 1.0) at L<http://www.w3.org/TR/REC-xml>
+
+The L<XML::Parser> and L<XML::Parser::Expat> manual pages.
+
+=head1 CAVEATS
+
+The method getElementsByTagName() does not return a "live" NodeList.
+Whether this is an actual caveat is debatable, but a few people on the
+www-dom mailing list seemed to think so. I haven't decided yet. It's a pain
+to implement, it slows things down and the benefits seem marginal.
+Let me know what you think.
+
+(To subscribe to the www-dom mailing list send an email with the subject
+"subscribe" to www-dom-request@w3.org. I only look here occasionally, so don't
+send bug reports or suggestions about XML::DOM to this list, send them
+to enno@att.com instead.)
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+Thanks to Clark Cooper for his help with the initial version.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/AttDef.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,36 @@
+=head1 NAME
+
+XML::DOM::AttDef - A single XML attribute definition in an ATTLIST in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::AttDef extends L<XML::DOM::Node>, but is not part of the DOM Level 1
+specification.
+
+Each object of this class represents one attribute definition in an AttlistDecl.
+
+=head2 METHODS
+
+=over 4
+
+=item getName
+
+Returns the attribute name.
+
+=item getDefault
+
+Returns the default value, or undef.
+
+=item isFixed
+
+Whether the attribute value is fixed (see #FIXED keyword.)
+
+=item isRequired
+
+Whether the attribute value is required (see #REQUIRED keyword.)
+
+=item isImplied
+
+Whether the attribute value is implied (see #IMPLIED keyword.)
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/AttlistDecl.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,45 @@
+=head1 NAME
+
+XML::DOM::AttlistDecl - An XML ATTLIST declaration in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::AttlistDecl extends L<XML::DOM::Node> but is not part of the
+DOM Level 1 specification.
+
+This node represents an ATTLIST declaration, e.g.
+
+ <!ATTLIST person
+ sex (male|female) #REQUIRED
+ hair CDATA "bold"
+ eyes (none|one|two) "two"
+ species (human) #FIXED "human">
+
+Each attribute definition is stored a separate AttDef node. The AttDef nodes can
+be retrieved with getAttDef and added with addAttDef.
+(The AttDef nodes are stored in a NamedNodeMap internally.)
+
+=head2 METHODS
+
+=over 4
+
+=item getName
+
+Returns the Element tagName.
+
+=item getAttDef (attrName)
+
+Returns the AttDef node for the attribute with the specified name.
+
+=item addAttDef (attrName, type, default, [ fixed ])
+
+Adds a AttDef node for the attribute with the specified name.
+
+Parameters:
+ I<attrName> the attribute name.
+ I<type> the attribute type (e.g. "CDATA" or "(male|female)".)
+ I<default> the default value enclosed in quotes (!), the string #IMPLIED or
+ the string #REQUIRED.
+ I<fixed> whether the attribute is '#FIXED' (default is 0.)
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Attr.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,67 @@
+=head1 NAME
+
+XML::DOM::Attr - An XML attribute in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Attr extends L<XML::DOM::Node>.
+
+The Attr nodes built by the XML::DOM::Parser always have one child node
+which is a Text node containing the expanded string value (i.e. EntityReferences
+are always expanded.) EntityReferences may be added when modifying or creating
+a new Document.
+
+The Attr interface represents an attribute in an Element object.
+Typically the allowable values for the attribute are defined in a
+document type definition.
+
+Attr objects inherit the Node interface, but since they are not
+actually child nodes of the element they describe, the DOM does not
+consider them part of the document tree. Thus, the Node attributes
+parentNode, previousSibling, and nextSibling have a undef value for Attr
+objects. The DOM takes the view that attributes are properties of
+elements rather than having a separate identity from the elements they
+are associated with; this should make it more efficient to implement
+such features as default attributes associated with all elements of a
+given type. Furthermore, Attr nodes may not be immediate children of a
+DocumentFragment. However, they can be associated with Element nodes
+contained within a DocumentFragment. In short, users and implementors
+of the DOM need to be aware that Attr nodes have some things in common
+with other objects inheriting the Node interface, but they also are
+quite distinct.
+
+The attribute's effective value is determined as follows: if this
+attribute has been explicitly assigned any value, that value is the
+attribute's effective value; otherwise, if there is a declaration for
+this attribute, and that declaration includes a default value, then
+that default value is the attribute's effective value; otherwise, the
+attribute does not exist on this element in the structure model until
+it has been explicitly added. Note that the nodeValue attribute on the
+Attr instance can also be used to retrieve the string version of the
+attribute's value(s).
+
+In XML, where the value of an attribute can contain entity references,
+the child nodes of the Attr node provide a representation in which
+entity references are not expanded. These child nodes may be either
+Text or EntityReference nodes. Because the attribute type may be
+unknown, there are no tokenized attribute values.
+
+=head2 METHODS
+
+=over 4
+
+=item getValue
+
+On retrieval, the value of the attribute is returned as a string.
+Character and general entity references are replaced with their values.
+
+=item setValue (str)
+
+DOM Spec: On setting, this creates a Text node with the unparsed contents of the
+string.
+
+=item getName
+
+Returns the name of this attribute.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/CDATASection.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,31 @@
+=head1 NAME
+
+XML::DOM::CDATASection - Escaping XML text blocks in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::CDATASection extends L<XML::DOM::CharacterData> which extends
+L<XML::DOM::Node>.
+
+CDATA sections are used to escape blocks of text containing characters
+that would otherwise be regarded as markup. The only delimiter that is
+recognized in a CDATA section is the "]]>" string that ends the CDATA
+section. CDATA sections can not be nested. The primary purpose is for
+including material such as XML fragments, without needing to escape all
+the delimiters.
+
+The DOMString attribute of the Text node holds the text that is
+contained by the CDATA section. Note that this may contain characters
+that need to be escaped outside of CDATA sections and that, depending
+on the character encoding ("charset") chosen for serialization, it may
+be impossible to write out some characters as part of a CDATA section.
+
+The CDATASection interface inherits the CharacterData interface through
+the Text interface. Adjacent CDATASections nodes are not merged by use
+of the Element.normalize() method.
+
+B<NOTE:> XML::DOM::Parser and XML::DOM::ValParser convert all CDATASections
+to regular text by default.
+To preserve CDATASections, set the parser option KeepCDATA to 1.
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/CharacterData.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,87 @@
+=head1 NAME
+
+XML::DOM::CharacterData - Common interface for Text, CDATASections and Comments
+
+=head1 DESCRIPTION
+
+XML::DOM::CharacterData extends L<XML::DOM::Node>
+
+The CharacterData interface extends Node with a set of attributes and
+methods for accessing character data in the DOM. For clarity this set
+is defined here rather than on each object that uses these attributes
+and methods. No DOM objects correspond directly to CharacterData,
+though Text, Comment and CDATASection do inherit the interface from it.
+All offsets in this interface start from 0.
+
+=head2 METHODS
+
+=over 4
+
+=item getData and setData (data)
+
+The character data of the node that implements this
+interface. The DOM implementation may not put arbitrary
+limits on the amount of data that may be stored in a
+CharacterData node. However, implementation limits may mean
+that the entirety of a node's data may not fit into a single
+DOMString. In such cases, the user may call substringData to
+retrieve the data in appropriately sized pieces.
+
+=item getLength
+
+The number of characters that are available through data and
+the substringData method below. This may have the value zero,
+i.e., CharacterData nodes may be empty.
+
+=item substringData (offset, count)
+
+Extracts a range of data from the node.
+
+Parameters:
+ I<offset> Start offset of substring to extract.
+ I<count> The number of characters to extract.
+
+Return Value: The specified substring. If the sum of offset and count
+exceeds the length, then all characters to the end of
+the data are returned.
+
+=item appendData (str)
+
+Appends the string to the end of the character data of the
+node. Upon success, data provides access to the concatenation
+of data and the DOMString specified.
+
+=item insertData (offset, arg)
+
+Inserts a string at the specified character offset.
+
+Parameters:
+ I<offset> The character offset at which to insert.
+ I<arg> The DOMString to insert.
+
+=item deleteData (offset, count)
+
+Removes a range of characters from the node.
+Upon success, data and length reflect the change.
+If the sum of offset and count exceeds length then all characters
+from offset to the end of the data are deleted.
+
+Parameters:
+ I<offset> The offset from which to remove characters.
+ I<count> The number of characters to delete.
+
+=item replaceData (offset, count, arg)
+
+Replaces the characters starting at the specified character
+offset with the specified string.
+
+Parameters:
+ I<offset> The offset from which to start replacing.
+ I<count> The number of characters to replace.
+ I<arg> The DOMString with which the range must be replaced.
+
+If the sum of offset and count exceeds length, then all characters to the end of
+the data are replaced (i.e., the effect is the same as a remove method call with
+the same range, followed by an append method invocation).
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Comment.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,14 @@
+=head1 NAME
+
+XML::DOM::Comment - An XML comment in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Comment extends L<XML::DOM::CharacterData> which extends
+L<XML::DOM::Node>.
+
+This node represents the content of a comment, i.e., all the characters
+between the starting '<!--' and ending '-->'. Note that this is the
+definition of a comment in XML, and, in practice, HTML, although some
+HTML tools may implement the full SGML comment structure.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/DOMException.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,103 @@
+#
+# Copyright (c) 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:
+#
+######################################################################
+package XML::DOM::DOMException;
+######################################################################
+
+use Exporter;
+
+use overload '""' => \&stringify;
+use vars qw ( @ISA @EXPORT @ErrorNames );
+
+BEGIN
+{
+ @ISA = qw( Exporter );
+ @EXPORT = qw( INDEX_SIZE_ERR
+ DOMSTRING_SIZE_ERR
+ HIERARCHY_REQUEST_ERR
+ WRONG_DOCUMENT_ERR
+ INVALID_CHARACTER_ERR
+ NO_DATA_ALLOWED_ERR
+ NO_MODIFICATION_ALLOWED_ERR
+ NOT_FOUND_ERR
+ NOT_SUPPORTED_ERR
+ INUSE_ATTRIBUTE_ERR
+ );
+}
+
+sub UNKNOWN_ERR () {0;} # not in the DOM Spec!
+sub INDEX_SIZE_ERR () {1;}
+sub DOMSTRING_SIZE_ERR () {2;}
+sub HIERARCHY_REQUEST_ERR () {3;}
+sub WRONG_DOCUMENT_ERR () {4;}
+sub INVALID_CHARACTER_ERR () {5;}
+sub NO_DATA_ALLOWED_ERR () {6;}
+sub NO_MODIFICATION_ALLOWED_ERR () {7;}
+sub NOT_FOUND_ERR () {8;}
+sub NOT_SUPPORTED_ERR () {9;}
+sub INUSE_ATTRIBUTE_ERR () {10;}
+
+@ErrorNames = (
+ "UNKNOWN_ERR",
+ "INDEX_SIZE_ERR",
+ "DOMSTRING_SIZE_ERR",
+ "HIERARCHY_REQUEST_ERR",
+ "WRONG_DOCUMENT_ERR",
+ "INVALID_CHARACTER_ERR",
+ "NO_DATA_ALLOWED_ERR",
+ "NO_MODIFICATION_ALLOWED_ERR",
+ "NOT_FOUND_ERR",
+ "NOT_SUPPORTED_ERR",
+ "INUSE_ATTRIBUTE_ERR"
+ );
+sub new
+{
+ my ($type, $code, $msg) = @_;
+ my $self = bless {Code => $code}, $type;
+
+ $self->{Message} = $msg if defined $msg;
+
+# print "=> Exception: " . $self->stringify . "\n";
+ $self;
+}
+
+sub getCode
+{
+ $_[0]->{Code};
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub getName
+{
+ $ErrorNames[$_[0]->{Code}];
+}
+
+sub getMessage
+{
+ $_[0]->{Message};
+}
+
+sub stringify
+{
+ my $self = shift;
+
+ "XML::DOM::DOMException(Code=" . $self->getCode . ", Name=" .
+ $self->getName . ", Message=" . $self->getMessage . ")";
+}
+
+1; # package return code
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/DOMImplementation.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,24 @@
+=head1 NAME
+
+XML::DOM::DOMImplementation - Information about XML::DOM implementation
+
+=head1 DESCRIPTION
+
+The DOMImplementation interface provides a number of methods for
+performing operations that are independent of any particular instance
+of the document object model.
+
+The DOM Level 1 does not specify a way of creating a document instance,
+and hence document creation is an operation specific to an
+implementation. Future Levels of the DOM specification are expected to
+provide methods for creating documents directly.
+
+=head2 METHODS
+
+=over 4
+
+=item hasFeature (feature, version)
+
+Returns 1 if and only if feature equals "XML" and version equals "1.0".
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Document.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,220 @@
+=head1 NAME
+
+XML::DOM::Document - An XML document node in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Document extends L<XML::DOM::Node>.
+
+It is the main root of the XML document structure as returned by
+XML::DOM::Parser::parse and XML::DOM::Parser::parsefile.
+
+Since elements, text nodes, comments, processing instructions, etc.
+cannot exist outside the context of a Document, the Document interface
+also contains the factory methods needed to create these objects. The
+Node objects created have a getOwnerDocument method which associates
+them with the Document within whose context they were created.
+
+=head2 METHODS
+
+=over 4
+
+=item getDocumentElement
+
+This is a convenience method that allows direct access to
+the child node that is the root Element of the document.
+
+=item getDoctype
+
+The Document Type Declaration (see DocumentType) associated
+with this document. For HTML documents as well as XML
+documents without a document type declaration this returns
+undef. The DOM Level 1 does not support editing the Document
+Type Declaration.
+
+B<Not In DOM Spec>: This implementation allows editing the doctype.
+See I<XML::DOM::ignoreReadOnly> for details.
+
+=item getImplementation
+
+The DOMImplementation object that handles this document. A
+DOM application may use objects from multiple implementations.
+
+=item createElement (tagName)
+
+Creates an element of the type specified. Note that the
+instance returned implements the Element interface, so
+attributes can be specified directly on the returned object.
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the tagName does not conform to the XML spec.
+
+=back
+
+=item createTextNode (data)
+
+Creates a Text node given the specified string.
+
+=item createComment (data)
+
+Creates a Comment node given the specified string.
+
+=item createCDATASection (data)
+
+Creates a CDATASection node given the specified string.
+
+=item createAttribute (name [, value [, specified ]])
+
+Creates an Attr of the given name. Note that the Attr
+instance can then be set on an Element using the setAttribute method.
+
+B<Not In DOM Spec>: The DOM Spec does not allow passing the value or the
+specified property in this method. In this implementation they are optional.
+
+Parameters:
+ I<value> The attribute's value. See Attr::setValue for details.
+ If the value is not supplied, the specified property is set to 0.
+ I<specified> Whether the attribute value was specified or whether the default
+ value was used. If not supplied, it's assumed to be 1.
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the name does not conform to the XML spec.
+
+=back
+
+=item createProcessingInstruction (target, data)
+
+Creates a ProcessingInstruction node given the specified name and data strings.
+
+Parameters:
+ I<target> The target part of the processing instruction.
+ I<data> The data for the node.
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the target does not conform to the XML spec.
+
+=back
+
+=item createDocumentFragment
+
+Creates an empty DocumentFragment object.
+
+=item createEntityReference (name)
+
+Creates an EntityReference object.
+
+=back
+
+=head2 Additional methods not in the DOM Spec
+
+=over 4
+
+=item getXMLDecl and setXMLDecl (xmlDecl)
+
+Returns the XMLDecl for this Document or undef if none was specified.
+Note that XMLDecl is not part of the list of child nodes.
+
+=item setDoctype (doctype)
+
+Sets or replaces the DocumentType.
+B<NOTE>: Don't use appendChild or insertBefore to set the DocumentType.
+Even though doctype will be part of the list of child nodes, it is handled
+specially.
+
+=item getDefaultAttrValue (elem, attr)
+
+Returns the default attribute value as a string or undef, if none is available.
+
+Parameters:
+ I<elem> The element tagName.
+ I<attr> The attribute name.
+
+=item getEntity (name)
+
+Returns the Entity with the specified name.
+
+=item createXMLDecl (version, encoding, standalone)
+
+Creates an XMLDecl object. All parameters may be undefined.
+
+=item createDocumentType (name, sysId, pubId)
+
+Creates a DocumentType object. SysId and pubId may be undefined.
+
+=item createNotation (name, base, sysId, pubId)
+
+Creates a new Notation object. Consider using
+XML::DOM::DocumentType::addNotation!
+
+=item createEntity (parameter, notationName, value, sysId, pubId, ndata)
+
+Creates an Entity object. Consider using XML::DOM::DocumentType::addEntity!
+
+=item createElementDecl (name, model)
+
+Creates an ElementDecl object.
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the element name (tagName) does not conform to the XML spec.
+
+=back
+
+=item createAttlistDecl (name)
+
+Creates an AttlistDecl object.
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the element name (tagName) does not conform to the XML spec.
+
+=back
+
+=item expandEntity (entity [, parameter])
+
+Expands the specified entity or parameter entity (if parameter=1) and returns
+its value as a string, or undef if the entity does not exist.
+(The entity name should not contain the '%', '&' or ';' delimiters.)
+
+=item check ( [$checker] )
+
+Uses the specified L<XML::Checker> to validate the document.
+If no XML::Checker is supplied, a new XML::Checker is created.
+See L<XML::Checker> for details.
+
+=item check_sax ( [$checker] )
+
+Similar to check() except it uses the SAX interface to XML::Checker instead of
+the expat interface. This method may disappear or replace check() at some time.
+
+=item createChecker ()
+
+Creates an XML::Checker based on the document's DTD.
+The $checker can be reused to check any elements within the document.
+Create a new L<XML::Checker> whenever the DOCTYPE section of the document
+is altered!
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/DocumentFragment.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,40 @@
+=head1 NAME
+
+XML::DOM::DocumentFragment - Facilitates cut & paste in XML::DOM documents
+
+=head1 DESCRIPTION
+
+XML::DOM::DocumentFragment extends L<XML::DOM::Node>
+
+DocumentFragment is a "lightweight" or "minimal" Document object. It is
+very common to want to be able to extract a portion of a document's
+tree or to create a new fragment of a document. Imagine implementing a
+user command like cut or rearranging a document by moving fragments
+around. It is desirable to have an object which can hold such fragments
+and it is quite natural to use a Node for this purpose. While it is
+true that a Document object could fulfil this role, a Document object
+can potentially be a heavyweight object, depending on the underlying
+implementation. What is really needed for this is a very lightweight
+object. DocumentFragment is such an object.
+
+Furthermore, various operations -- such as inserting nodes as children
+of another Node -- may take DocumentFragment objects as arguments; this
+results in all the child nodes of the DocumentFragment being moved to
+the child list of this node.
+
+The children of a DocumentFragment node are zero or more nodes
+representing the tops of any sub-trees defining the structure of the
+document. DocumentFragment nodes do not need to be well-formed XML
+documents (although they do need to follow the rules imposed upon
+well-formed XML parsed entities, which can have multiple top nodes).
+For example, a DocumentFragment might have only one child and that
+child node could be a Text node. Such a structure model represents
+neither an HTML document nor a well-formed XML document.
+
+When a DocumentFragment is inserted into a Document (or indeed any
+other Node that may take children) the children of the DocumentFragment
+and not the DocumentFragment itself are inserted into the Node. This
+makes the DocumentFragment very useful when the user wishes to create
+nodes that are siblings; the DocumentFragment acts as the parent of
+these nodes so that the user can use the standard methods from the Node
+interface, such as insertBefore() and appendChild().
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/DocumentType.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,182 @@
+=head1 NAME
+
+XML::DOM::DocumentType - An XML document type (DTD) in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::DocumentType extends L<XML::DOM::Node>.
+
+Each Document has a doctype attribute whose value is either null or a
+DocumentType object. The DocumentType interface in the DOM Level 1 Core
+provides an interface to the list of entities that are defined for the
+document, and little else because the effect of namespaces and the
+various XML scheme efforts on DTD representation are not clearly
+understood as of this writing.
+The DOM Level 1 doesn't support editing DocumentType nodes.
+
+B<Not In DOM Spec>: This implementation has added a lot of extra
+functionality to the DOM Level 1 interface.
+To allow editing of the DocumentType nodes, see XML::DOM::ignoreReadOnly.
+
+=head2 METHODS
+
+=over 4
+
+=item getName
+
+Returns the name of the DTD, i.e. the name immediately following the
+DOCTYPE keyword.
+
+=item getEntities
+
+A NamedNodeMap containing the general entities, both external
+and internal, declared in the DTD. Duplicates are discarded.
+For example in:
+
+ <!DOCTYPE ex SYSTEM "ex.dtd" [
+ <!ENTITY foo "foo">
+ <!ENTITY bar "bar">
+ <!ENTITY % baz "baz">
+ ]>
+ <ex/>
+
+the interface provides access to foo and bar but not baz.
+Every node in this map also implements the Entity interface.
+
+The DOM Level 1 does not support editing entities, therefore
+entities cannot be altered in any way.
+
+B<Not In DOM Spec>: See XML::DOM::ignoreReadOnly to edit the DocumentType etc.
+
+=item getNotations
+
+A NamedNodeMap containing the notations declared in the DTD.
+Duplicates are discarded. Every node in this map also
+implements the Notation interface.
+
+The DOM Level 1 does not support editing notations, therefore
+notations cannot be altered in any way.
+
+B<Not In DOM Spec>: See XML::DOM::ignoreReadOnly to edit the DocumentType etc.
+
+=head2 Additional methods not in the DOM Spec
+
+=item Creating and setting the DocumentType
+
+A new DocumentType can be created with:
+
+ $doctype = $doc->createDocumentType ($name, $sysId, $pubId, $internal);
+
+To set (or replace) the DocumentType for a particular document, use:
+
+ $doc->setDocType ($doctype);
+
+=item getSysId and setSysId (sysId)
+
+Returns or sets the system id.
+
+=item getPubId and setPubId (pudId)
+
+Returns or sets the public id.
+
+=item setName (name)
+
+Sets the name of the DTD, i.e. the name immediately following the
+DOCTYPE keyword. Note that this should always be the same as the element
+tag name of the root element.
+
+=item getAttlistDecl (elemName)
+
+Returns the AttlistDecl for the Element with the specified name, or undef.
+
+=item getElementDecl (elemName)
+
+Returns the ElementDecl for the Element with the specified name, or undef.
+
+=item getEntity (entityName)
+
+Returns the Entity with the specified name, or undef.
+
+=item addAttlistDecl (elemName)
+
+Adds a new AttDecl node with the specified elemName if one doesn't exist yet.
+Returns the AttlistDecl (new or existing) node.
+
+=item addElementDecl (elemName, model)
+
+Adds a new ElementDecl node with the specified elemName and model if one doesn't
+exist yet.
+Returns the AttlistDecl (new or existing) node. The model is ignored if one
+already existed.
+
+=item addEntity (parameter, notationName, value, sysId, pubId, ndata)
+
+Adds a new Entity node. Don't use createEntity and appendChild, because it should
+be added to the internal NamedNodeMap containing the entities.
+
+Parameters:
+ I<parameter> whether it is a parameter entity (%ent;) or not (&ent;).
+ I<notationName> the entity name.
+ I<value> the entity value.
+ I<sysId> the system id (if any.)
+ I<pubId> the public id (if any.)
+ I<ndata> the NDATA declaration (if any, for general unparsed entities.)
+
+SysId, pubId and ndata may be undefined.
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the notationName does not conform to the XML spec.
+
+=back
+
+=item addNotation (name, base, sysId, pubId)
+
+Adds a new Notation object.
+
+Parameters:
+ I<name> the notation name.
+ I<base> the base to be used for resolving a relative URI.
+ I<sysId> the system id.
+ I<pubId> the public id.
+
+Base, sysId, and pubId may all be undefined.
+(These parameters are passed by the XML::Parser Notation handler.)
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the notationName does not conform to the XML spec.
+
+=back
+
+=item addAttDef (elemName, attrName, type, default, fixed)
+
+Adds a new attribute definition. It will add the AttDef node to the AttlistDecl
+if it exists. If an AttDef with the specified attrName already exists for the
+given elemName, this function only generates a warning.
+
+See XML::DOM::AttDef::new for the other parameters.
+
+=item getDefaultAttrValue (elem, attr)
+
+Returns the default attribute value as a string or undef, if none is available.
+
+Parameters:
+ I<elem> The element tagName.
+ I<attr> The attribute name.
+
+=item expandEntity (entity [, parameter])
+
+Expands the specified entity or parameter entity (if parameter=1) and returns
+its value as a string, or undef if the entity does not exist.
+(The entity name should not contain the '%', '&' or ';' delimiters.)
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Element.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,189 @@
+=head1 NAME
+
+XML::DOM::Element - An XML element node in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Element extends L<XML::DOM::Node>.
+
+By far the vast majority of objects (apart from text) that authors
+encounter when traversing a document are Element nodes. Assume the
+following XML document:
+
+ <elementExample id="demo">
+ <subelement1/>
+ <subelement2><subsubelement/></subelement2>
+ </elementExample>
+
+When represented using DOM, the top node is an Element node for
+"elementExample", which contains two child Element nodes, one for
+"subelement1" and one for "subelement2". "subelement1" contains no
+child nodes.
+
+Elements may have attributes associated with them; since the Element
+interface inherits from Node, the generic Node interface method
+getAttributes may be used to retrieve the set of all attributes for an
+element. There are methods on the Element interface to retrieve either
+an Attr object by name or an attribute value by name. In XML, where an
+attribute value may contain entity references, an Attr object should be
+retrieved to examine the possibly fairly complex sub-tree representing
+the attribute value. On the other hand, in HTML, where all attributes
+have simple string values, methods to directly access an attribute
+value can safely be used as a convenience.
+
+=head2 METHODS
+
+=over 4
+
+=item getTagName
+
+The name of the element. For example, in:
+
+ <elementExample id="demo">
+ ...
+ </elementExample>
+
+tagName has the value "elementExample". Note that this is
+case-preserving in XML, as are all of the operations of the
+DOM.
+
+=item getAttribute (name)
+
+Retrieves an attribute value by name.
+
+Return Value: The Attr value as a string, or the empty string if that
+attribute does not have a specified or default value.
+
+=item setAttribute (name, value)
+
+Adds a new attribute. If an attribute with that name is
+already present in the element, its value is changed to be
+that of the value parameter. This value is a simple string,
+it is not parsed as it is being set. So any markup (such as
+syntax to be recognized as an entity reference) is treated as
+literal text, and needs to be appropriately escaped by the
+implementation when it is written out. In order to assign an
+attribute value that contains entity references, the user
+must create an Attr node plus any Text and EntityReference
+nodes, build the appropriate subtree, and use
+setAttributeNode to assign it as the value of an attribute.
+
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the specified name contains an invalid character.
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=back
+
+=item removeAttribute (name)
+
+Removes an attribute by name. If the removed attribute has a
+default value it is immediately replaced.
+
+DOMExceptions:
+
+=over 4
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=back
+
+=item getAttributeNode
+
+Retrieves an Attr node by name.
+
+Return Value: The Attr node with the specified attribute name or undef
+if there is no such attribute.
+
+=item setAttributeNode (attr)
+
+Adds a new attribute. If an attribute with that name is
+already present in the element, it is replaced by the new one.
+
+Return Value: If the newAttr attribute replaces an existing attribute
+with the same name, the previously existing Attr node is
+returned, otherwise undef is returned.
+
+DOMExceptions:
+
+=over 4
+
+=item * WRONG_DOCUMENT_ERR
+
+Raised if newAttr was created from a different document than the one that created
+the element.
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=item * INUSE_ATTRIBUTE_ERR
+
+Raised if newAttr is already an attribute of another Element object. The DOM
+user must explicitly clone Attr nodes to re-use them in other elements.
+
+=back
+
+=item removeAttributeNode (oldAttr)
+
+Removes the specified attribute. If the removed Attr has a default value it is
+immediately replaced. If the Attr already is the default value, nothing happens
+and nothing is returned.
+
+Parameters:
+ I<oldAttr> The Attr node to remove from the attribute list.
+
+Return Value: The Attr node that was removed.
+
+DOMExceptions:
+
+=over 4
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=item * NOT_FOUND_ERR
+
+Raised if oldAttr is not an attribute of the element.
+
+=back
+
+=head2 Additional methods not in the DOM Spec
+
+=over 4
+
+=item setTagName (newTagName)
+
+Sets the tag name of the Element. Note that this method is not portable
+between DOM implementations.
+
+DOMExceptions:
+
+=over 4
+
+=item * INVALID_CHARACTER_ERR
+
+Raised if the specified name contains an invalid character.
+
+=back
+
+=item check ($checker)
+
+Uses the specified L<XML::Checker> to validate the document.
+NOTE: an XML::Checker must be supplied. The checker can be created in
+different ways, e.g. when parsing a document with XML::DOM::ValParser,
+or with XML::DOM::Document::createChecker().
+See L<XML::Checker> for more info.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/ElementDecl.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,27 @@
+=head1 NAME
+
+XML::DOM::ElementDecl - An XML ELEMENT declaration in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::ElementDecl extends L<XML::DOM::Node> but is not part of the
+DOM Level 1 specification.
+
+This node represents an Element declaration, e.g.
+
+ <!ELEMENT address (street+, city, state, zip, country?)>
+
+=head2 METHODS
+
+=over 4
+
+=item getName
+
+Returns the Element tagName.
+
+=item getModel and setModel (model)
+
+Returns and sets the model as a string, e.g.
+"(street+, city, state, zip, country?)" in the above example.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Entity.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,56 @@
+=head1 NAME
+
+XML::DOM::Entity - An XML ENTITY in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Entity extends L<XML::DOM::Node>.
+
+This node represents an Entity declaration, e.g.
+
+ <!ENTITY % draft 'INCLUDE'>
+
+ <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif>
+
+The first one is called a parameter entity and is referenced like this: %draft;
+The 2nd is a (regular) entity and is referenced like this: &hatch-pic;
+
+=head2 METHODS
+
+=over 4
+
+=item getNotationName
+
+Returns the name of the notation for the entity.
+
+I<Not Implemented> The DOM Spec says: For unparsed entities, the name of the
+notation for the entity. For parsed entities, this is null.
+(This implementation does not support unparsed entities.)
+
+=item getSysId
+
+Returns the system id, or undef.
+
+=item getPubId
+
+Returns the public id, or undef.
+
+=back
+
+=head2 Additional methods not in the DOM Spec
+
+=over 4
+
+=item isParameterEntity
+
+Whether it is a parameter entity (%ent;) or not (&ent;)
+
+=item getValue
+
+Returns the entity value.
+
+=item getNdata
+
+Returns the NDATA declaration (for general unparsed entities), or undef.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/EntityReference.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,27 @@
+=head1 NAME
+
+XML::DOM::EntityReference - An XML ENTITY reference in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::EntityReference extends L<XML::DOM::Node>.
+
+EntityReference objects may be inserted into the structure model when
+an entity reference is in the source document, or when the user wishes
+to insert an entity reference. Note that character references and
+references to predefined entities are considered to be expanded by the
+HTML or XML processor so that characters are represented by their
+Unicode equivalent rather than by an entity reference. Moreover, the
+XML processor may completely expand references to entities while
+building the structure model, instead of providing EntityReference
+objects. If it does provide such objects, then for a given
+EntityReference node, it may be that there is no Entity node
+representing the referenced entity; but if such an Entity exists, then
+the child list of the EntityReference node is the same as that of the
+Entity node. As with the Entity node, all descendants of the
+EntityReference are readonly.
+
+The resolution of the children of the EntityReference (the replacement
+value of the referenced Entity) may be lazily evaluated; actions by the
+user (such as calling the childNodes method on the EntityReference
+node) are assumed to trigger the evaluation.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/NamedNodeMap.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,271 @@
+######################################################################
+package XML::DOM::NamedNodeMap;
+######################################################################
+
+use strict;
+
+use Carp;
+use XML::DOM::DOMException;
+use XML::DOM::NodeList;
+
+use vars qw( $Special );
+
+# Constant definition:
+# Note: a real Name should have at least 1 char, so nobody else should use this
+$Special = "";
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ $args{Values} = new XML::DOM::NodeList;
+
+ # Store all NamedNodeMap properties in element $Special
+ bless { $Special => \%args}, $class;
+}
+
+sub getNamedItem
+{
+ # Don't return the $Special item!
+ ($_[1] eq $Special) ? undef : $_[0]->{$_[1]};
+}
+
+sub setNamedItem
+{
+ my ($self, $node) = @_;
+ my $prop = $self->{$Special};
+
+ my $name = $node->getNodeName;
+
+ if ($XML::DOM::SafeMode)
+ {
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR)
+ if $self->isReadOnly;
+
+ croak new XML::DOM::DOMException (WRONG_DOCUMENT_ERR)
+ if $node->[XML::DOM::Node::_Doc] != $prop->{Doc};
+
+ croak new XML::DOM::DOMException (INUSE_ATTRIBUTE_ERR)
+ if defined ($node->[XML::DOM::Node::_UsedIn]);
+
+ croak new XML::DOM::DOMException (INVALID_CHARACTER_ERR,
+ "can't add name with NodeName [$name] to NamedNodeMap")
+ if $name eq $Special;
+ }
+
+ my $values = $prop->{Values};
+ my $index = -1;
+
+ my $prev = $self->{$name};
+ if (defined $prev)
+ {
+ # decouple previous node
+ $prev->decoupleUsedIn;
+
+ # find index of $prev
+ $index = 0;
+ for my $val (@{$values})
+ {
+ last if ($val == $prev);
+ $index++;
+ }
+ }
+
+ $self->{$name} = $node;
+ $node->[XML::DOM::Node::_UsedIn] = $self;
+
+ if ($index == -1)
+ {
+ push (@{$values}, $node);
+ }
+ else # replace previous node with new node
+ {
+ splice (@{$values}, $index, 1, $node);
+ }
+
+ $prev;
+}
+
+sub removeNamedItem
+{
+ my ($self, $name) = @_;
+
+ # Be careful that user doesn't delete $Special node!
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR)
+ if $name eq $Special;
+
+ my $node = $self->{$name};
+
+ croak new XML::DOM::DOMException (NOT_FOUND_ERR)
+ unless defined $node;
+
+ # The DOM Spec doesn't mention this Exception - I think it's an oversight
+ croak new XML::DOM::DOMException (NO_MODIFICATION_ALLOWED_ERR)
+ if $self->isReadOnly;
+
+ $node->decoupleUsedIn;
+ delete $self->{$name};
+
+ # remove node from Values list
+ my $values = $self->getValues;
+ my $index = 0;
+ for my $val (@{$values})
+ {
+ if ($val == $node)
+ {
+ splice (@{$values}, $index, 1, ());
+ last;
+ }
+ $index++;
+ }
+ $node;
+}
+
+# The following 2 are really bogus. DOM should use an iterator instead (Clark)
+
+sub item
+{
+ my ($self, $item) = @_;
+ $self->{$Special}->{Values}->[$item];
+}
+
+sub getLength
+{
+ my ($self) = @_;
+ my $vals = $self->{$Special}->{Values};
+ int (@$vals);
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub isReadOnly
+{
+ return 0 if $XML::DOM::IgnoreReadOnly;
+
+ my $used = $_[0]->{$Special}->{UsedIn};
+ defined $used ? $used->isReadOnly : 0;
+}
+
+sub cloneNode
+{
+ my ($self, $deep) = @_;
+ my $prop = $self->{$Special};
+
+ my $map = new XML::DOM::NamedNodeMap (Doc => $prop->{Doc});
+ # Not copying Parent property on purpose!
+
+ local $XML::DOM::IgnoreReadOnly = 1; # temporarily...
+
+ for my $val (@{$prop->{Values}})
+ {
+ my $key = $val->getNodeName;
+
+ my $newNode = $val->cloneNode ($deep);
+ $newNode->[XML::DOM::Node::_UsedIn] = $map;
+ $map->{$key} = $newNode;
+ push (@{$map->{$Special}->{Values}}, $newNode);
+ }
+
+ $map;
+}
+
+sub setOwnerDocument
+{
+ my ($self, $doc) = @_;
+ my $special = $self->{$Special};
+
+ $special->{Doc} = $doc;
+ for my $kid (@{$special->{Values}})
+ {
+ $kid->setOwnerDocument ($doc);
+ }
+}
+
+sub getChildIndex
+{
+ my ($self, $attr) = @_;
+ my $i = 0;
+ for my $kid (@{$self->{$Special}->{Values}})
+ {
+ return $i if $kid == $attr;
+ $i++;
+ }
+ -1; # not found
+}
+
+sub getValues
+{
+ wantarray ? @{ $_[0]->{$Special}->{Values} } : $_[0]->{$Special}->{Values};
+}
+
+# Remove circular dependencies. The NamedNodeMap and its values should
+# not be used afterwards.
+sub dispose
+{
+ my $self = shift;
+
+ for my $kid (@{$self->getValues})
+ {
+ undef $kid->[XML::DOM::Node::_UsedIn]; # was delete
+ $kid->dispose;
+ }
+
+ delete $self->{$Special}->{Doc};
+ delete $self->{$Special}->{Parent};
+ delete $self->{$Special}->{Values};
+
+ for my $key (keys %$self)
+ {
+ delete $self->{$key};
+ }
+}
+
+sub setParentNode
+{
+ $_[0]->{$Special}->{Parent} = $_[1];
+}
+
+sub getProperty
+{
+ $_[0]->{$Special}->{$_[1]};
+}
+
+#?? remove after debugging
+sub toString
+{
+ my ($self) = @_;
+ my $str = "NamedNodeMap[";
+ while (my ($key, $val) = each %$self)
+ {
+ if ($key eq $Special)
+ {
+ $str .= "##Special (";
+ while (my ($k, $v) = each %$val)
+ {
+ if ($k eq "Values")
+ {
+ $str .= $k . " => [";
+ for my $a (@$v)
+ {
+# $str .= $a->getNodeName . "=" . $a . ",";
+ $str .= $a->toString . ",";
+ }
+ $str .= "], ";
+ }
+ else
+ {
+ $str .= $k . " => " . $v . ", ";
+ }
+ }
+ $str .= "), ";
+ }
+ else
+ {
+ $str .= $key . " => " . $val . ", ";
+ }
+ }
+ $str . "]";
+}
+
+1; # package return code
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/NamedNodeMap.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,130 @@
+=head1 NAME
+
+XML::DOM::NamedNodeMap - A hash table interface for XML::DOM
+
+=head1 DESCRIPTION
+
+Objects implementing the NamedNodeMap interface are used to represent
+collections of nodes that can be accessed by name. Note that
+NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not
+maintained in any particular order. Objects contained in an object
+implementing NamedNodeMap may also be accessed by an ordinal index, but
+this is simply to allow convenient enumeration of the contents of a
+NamedNodeMap, and does not imply that the DOM specifies an order to
+these Nodes.
+
+Note that in this implementation, the objects added to a NamedNodeMap
+are kept in order.
+
+=head2 METHODS
+
+=over 4
+
+=item getNamedItem (name)
+
+Retrieves a node specified by name.
+
+Return Value: A Node (of any type) with the specified name, or undef if
+the specified name did not identify any node in the map.
+
+=item setNamedItem (arg)
+
+Adds a node using its nodeName attribute.
+
+As the nodeName attribute is used to derive the name which
+the node must be stored under, multiple nodes of certain
+types (those that have a "special" string value) cannot be
+stored as the names would clash. This is seen as preferable
+to allowing nodes to be aliased.
+
+Parameters:
+ I<arg> A node to store in a named node map.
+
+The node will later be accessible using the value of the nodeName
+attribute of the node. If a node with that name is
+already present in the map, it is replaced by the new one.
+
+Return Value: If the new Node replaces an existing node with the same
+name the previously existing Node is returned, otherwise undef is returned.
+
+DOMExceptions:
+
+=over 4
+
+=item * WRONG_DOCUMENT_ERR
+
+Raised if arg was created from a different document than the one that
+created the NamedNodeMap.
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this NamedNodeMap is readonly.
+
+=item * INUSE_ATTRIBUTE_ERR
+
+Raised if arg is an Attr that is already an attribute of another Element object.
+The DOM user must explicitly clone Attr nodes to re-use them in other elements.
+
+=back
+
+=item removeNamedItem (name)
+
+Removes a node specified by name. If the removed node is an
+Attr with a default value it is immediately replaced.
+
+Return Value: The node removed from the map or undef if no node with
+such a name exists.
+
+DOMException:
+
+=over 4
+
+=item * NOT_FOUND_ERR
+
+Raised if there is no node named name in the map.
+
+=back
+
+=item item (index)
+
+Returns the indexth item in the map. If index is greater than
+or equal to the number of nodes in the map, this returns undef.
+
+Return Value: The node at the indexth position in the NamedNodeMap, or
+undef if that is not a valid index.
+
+=item getLength
+
+Returns the number of nodes in the map. The range of valid child node
+indices is 0 to length-1 inclusive.
+
+=back
+
+=head2 Additional methods not in the DOM Spec
+
+=over 4
+
+=item getValues
+
+Returns a NodeList with the nodes contained in the NamedNodeMap.
+The NodeList is "live", in that it reflects changes made to the NamedNodeMap.
+
+When this method is called in a list context, it returns a regular perl list
+containing the values. Note that this list is not "live". E.g.
+
+ @list = $map->getValues; # returns a perl list
+ $nodelist = $map->getValues; # returns a NodeList (object ref.)
+ for my $val ($map->getValues) # iterate over the values
+
+=item getChildIndex (node)
+
+Returns the index of the node in the NodeList as returned by getValues, or -1
+if the node is not in the NamedNodeMap.
+
+=item dispose
+
+Removes all circular references in this NamedNodeMap and its descendants so the
+objects can be claimed for garbage collection. The objects should not be used
+afterwards.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Node.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,451 @@
+=head1 NAME
+
+XML::DOM::Node - Super class of all nodes in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Node is the super class of all nodes in an XML::DOM document.
+This means that all nodes that subclass XML::DOM::Node also inherit all
+the methods that XML::DOM::Node implements.
+
+=head2 GLOBAL VARIABLES
+
+=over 4
+
+=item @NodeNames
+
+The variable @XML::DOM::Node::NodeNames maps the node type constants to strings.
+It is used by XML::DOM::Node::getNodeTypeName.
+
+=back
+
+=head2 METHODS
+
+=over 4
+
+=item getNodeType
+
+Return an integer indicating the node type. See XML::DOM constants.
+
+=item getNodeName
+
+Return a property or a hardcoded string, depending on the node type.
+Here are the corresponding functions or values:
+
+ Attr getName
+ AttDef getName
+ AttlistDecl getName
+ CDATASection "#cdata-section"
+ Comment "#comment"
+ Document "#document"
+ DocumentType getNodeName
+ DocumentFragment "#document-fragment"
+ Element getTagName
+ ElementDecl getName
+ EntityReference getEntityName
+ Entity getNotationName
+ Notation getName
+ ProcessingInstruction getTarget
+ Text "#text"
+ XMLDecl "#xml-declaration"
+
+B<Not In DOM Spec>: AttDef, AttlistDecl, ElementDecl and XMLDecl were added for
+completeness.
+
+=item getNodeValue and setNodeValue (value)
+
+Returns a string or undef, depending on the node type. This method is provided
+for completeness. In other languages it saves the programmer an upcast.
+The value is either available thru some other method defined in the subclass, or
+else undef is returned. Here are the corresponding methods:
+Attr::getValue, Text::getData, CDATASection::getData, Comment::getData,
+ProcessingInstruction::getData.
+
+=item getParentNode and setParentNode (parentNode)
+
+The parent of this node. All nodes, except Document,
+DocumentFragment, and Attr may have a parent. However, if a
+node has just been created and not yet added to the tree, or
+if it has been removed from the tree, this is undef.
+
+=item getChildNodes
+
+A NodeList that contains all children of this node. If there
+are no children, this is a NodeList containing no nodes. The
+content of the returned NodeList is "live" in the sense that,
+for instance, changes to the children of the node object that
+it was created from are immediately reflected in the nodes
+returned by the NodeList accessors; it is not a static
+snapshot of the content of the node. This is true for every
+NodeList, including the ones returned by the
+getElementsByTagName method.
+
+NOTE: this implementation does not return a "live" NodeList for
+getElementsByTagName. See L<CAVEATS>.
+
+When this method is called in a list context, it returns a regular perl list
+containing the child nodes. Note that this list is not "live". E.g.
+
+ @list = $node->getChildNodes; # returns a perl list
+ $nodelist = $node->getChildNodes; # returns a NodeList (object reference)
+ for my $kid ($node->getChildNodes) # iterate over the children of $node
+
+=item getFirstChild
+
+The first child of this node. If there is no such node, this returns undef.
+
+=item getLastChild
+
+The last child of this node. If there is no such node, this returns undef.
+
+=item getPreviousSibling
+
+The node immediately preceding this node. If there is no such
+node, this returns undef.
+
+=item getNextSibling
+
+The node immediately following this node. If there is no such node, this returns
+undef.
+
+=item getAttributes
+
+A NamedNodeMap containing the attributes (Attr nodes) of this node
+(if it is an Element) or undef otherwise.
+Note that adding/removing attributes from the returned object, also adds/removes
+attributes from the Element node that the NamedNodeMap came from.
+
+=item getOwnerDocument
+
+The Document object associated with this node. This is also
+the Document object used to create new nodes. When this node
+is a Document this is undef.
+
+=item insertBefore (newChild, refChild)
+
+Inserts the node newChild before the existing child node
+refChild. If refChild is undef, insert newChild at the end of
+the list of children.
+
+If newChild is a DocumentFragment object, all of its children
+are inserted, in the same order, before refChild. If the
+newChild is already in the tree, it is first removed.
+
+Return Value: The node being inserted.
+
+DOMExceptions:
+
+=over 4
+
+=item * HIERARCHY_REQUEST_ERR
+
+Raised if this node is of a type that does not allow children of the type of
+the newChild node, or if the node to insert is one of this node's ancestors.
+
+=item * WRONG_DOCUMENT_ERR
+
+Raised if newChild was created from a different document than the one that
+created this node.
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=item * NOT_FOUND_ERR
+
+Raised if refChild is not a child of this node.
+
+=back
+
+=item replaceChild (newChild, oldChild)
+
+Replaces the child node oldChild with newChild in the list of
+children, and returns the oldChild node. If the newChild is
+already in the tree, it is first removed.
+
+Return Value: The node replaced.
+
+DOMExceptions:
+
+=over 4
+
+=item * HIERARCHY_REQUEST_ERR
+
+Raised if this node is of a type that does not allow children of the type of
+the newChild node, or it the node to put in is one of this node's ancestors.
+
+=item * WRONG_DOCUMENT_ERR
+
+Raised if newChild was created from a different document than the one that
+created this node.
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=item * NOT_FOUND_ERR
+
+Raised if oldChild is not a child of this node.
+
+=back
+
+=item removeChild (oldChild)
+
+Removes the child node indicated by oldChild from the list of
+children, and returns it.
+
+Return Value: The node removed.
+
+DOMExceptions:
+
+=over 4
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=item * NOT_FOUND_ERR
+
+Raised if oldChild is not a child of this node.
+
+=back
+
+=item appendChild (newChild)
+
+Adds the node newChild to the end of the list of children of
+this node. If the newChild is already in the tree, it is
+first removed. If it is a DocumentFragment object, the entire contents of
+the document fragment are moved into the child list of this node
+
+Return Value: The node added.
+
+DOMExceptions:
+
+=over 4
+
+=item * HIERARCHY_REQUEST_ERR
+
+Raised if this node is of a type that does not allow children of the type of
+the newChild node, or if the node to append is one of this node's ancestors.
+
+=item * WRONG_DOCUMENT_ERR
+
+Raised if newChild was created from a different document than the one that
+created this node.
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=back
+
+=item hasChildNodes
+
+This is a convenience method to allow easy determination of
+whether a node has any children.
+
+Return Value: 1 if the node has any children, 0 otherwise.
+
+=item cloneNode (deep)
+
+Returns a duplicate of this node, i.e., serves as a generic
+copy constructor for nodes. The duplicate node has no parent
+(parentNode returns undef.).
+
+Cloning an Element copies all attributes and their values,
+including those generated by the XML processor to represent
+defaulted attributes, but this method does not copy any text
+it contains unless it is a deep clone, since the text is
+contained in a child Text node. Cloning any other type of
+node simply returns a copy of this node.
+
+Parameters:
+ I<deep> If true, recursively clone the subtree under the specified node.
+If false, clone only the node itself (and its attributes, if it is an Element).
+
+Return Value: The duplicate node.
+
+=item normalize
+
+Puts all Text nodes in the full depth of the sub-tree
+underneath this Element into a "normal" form where only
+markup (e.g., tags, comments, processing instructions, CDATA
+sections, and entity references) separates Text nodes, i.e.,
+there are no adjacent Text nodes. This can be used to ensure
+that the DOM view of a document is the same as if it were
+saved and re-loaded, and is useful when operations (such as
+XPointer lookups) that depend on a particular document tree
+structure are to be used.
+
+B<Not In DOM Spec>: In the DOM Spec this method is defined in the Element and
+Document class interfaces only, but it doesn't hurt to have it here...
+
+=item getElementsByTagName (name [, recurse])
+
+Returns a NodeList of all descendant elements with a given
+tag name, in the order in which they would be encountered in
+a preorder traversal of the Element tree.
+
+Parameters:
+ I<name> The name of the tag to match on. The special value "*" matches all tags.
+ I<recurse> Whether it should return only direct child nodes (0) or any descendant that matches the tag name (1). This argument is optional and defaults to 1. It is not part of the DOM spec.
+
+Return Value: A list of matching Element nodes.
+
+NOTE: this implementation does not return a "live" NodeList for
+getElementsByTagName. See L<CAVEATS>.
+
+When this method is called in a list context, it returns a regular perl list
+containing the result nodes. E.g.
+
+ @list = $node->getElementsByTagName("tag"); # returns a perl list
+ $nodelist = $node->getElementsByTagName("tag"); # returns a NodeList (object ref.)
+ for my $elem ($node->getElementsByTagName("tag")) # iterate over the result nodes
+
+=back
+
+=head2 Additional methods not in the DOM Spec
+
+=over 4
+
+=item getNodeTypeName
+
+Return the string describing the node type.
+E.g. returns "ELEMENT_NODE" if getNodeType returns ELEMENT_NODE.
+It uses @XML::DOM::Node::NodeNames.
+
+=item toString
+
+Returns the entire subtree as a string.
+
+=item printToFile (filename)
+
+Prints the entire subtree to the file with the specified filename.
+
+Croaks: if the file could not be opened for writing.
+
+=item printToFileHandle (handle)
+
+Prints the entire subtree to the file handle.
+E.g. to print to STDOUT:
+
+ $node->printToFileHandle (\*STDOUT);
+
+=item print (obj)
+
+Prints the entire subtree using the object's print method. E.g to print to a
+FileHandle object:
+
+ $f = new FileHandle ("file.out", "w");
+ $node->print ($f);
+
+=item getChildIndex (child)
+
+Returns the index of the child node in the list returned by getChildNodes.
+
+Return Value: the index or -1 if the node is not found.
+
+=item getChildAtIndex (index)
+
+Returns the child node at the specifed index or undef.
+
+=item addText (text)
+
+Appends the specified string to the last child if it is a Text node, or else
+appends a new Text node (with the specified text.)
+
+Return Value: the last child if it was a Text node or else the new Text node.
+
+=item dispose
+
+Removes all circular references in this node and its descendants so the
+objects can be claimed for garbage collection. The objects should not be used
+afterwards.
+
+=item setOwnerDocument (doc)
+
+Sets the ownerDocument property of this node and all its children (and
+attributes etc.) to the specified document.
+This allows the user to cut and paste document subtrees between different
+XML::DOM::Documents. The node should be removed from the original document
+first, before calling setOwnerDocument.
+
+This method does nothing when called on a Document node.
+
+=item isAncestor (parent)
+
+Returns 1 if parent is an ancestor of this node or if it is this node itself.
+
+=item expandEntityRefs (str)
+
+Expands all the entity references in the string and returns the result.
+The entity references can be character references (e.g. "{" or "ῂ"),
+default entity references (""", ">", "<", "'" and "&") or
+entity references defined in Entity objects as part of the DocumentType of
+the owning Document. Character references are expanded into UTF-8.
+Parameter entity references (e.g. %ent;) are not expanded.
+
+=item to_sax ( %HANDLERS )
+
+E.g.
+
+ $node->to_sax (DocumentHandler => $my_handler,
+ Handler => $handler2 );
+
+%HANDLERS may contain the following handlers:
+
+=over 4
+
+=item * DocumentHandler
+
+=item * DTDHandler
+
+=item * EntityResolver
+
+=item * Handler
+
+Default handler when one of the above is not specified
+
+=back
+
+Each XML::DOM::Node generates the appropriate SAX callbacks (for the
+appropriate SAX handler.) Different SAX handlers can be plugged in to
+accomplish different things, e.g. L<XML::Checker> would check the node
+(currently only Document and Element nodes are supported), L<XML::Handler::BuildDOM>
+would create a new DOM subtree (thereby, in essence, copying the Node)
+and in the near future, XML::Writer could print the node.
+All Perl SAX related work is still in flux, so this interface may change a
+little.
+
+See PerlSAX for the description of the SAX interface.
+
+=item check ( [$checker] )
+
+See descriptions for check() in L<XML::DOM::Document> and L<XML::DOM::Element>.
+
+=item xql ( @XQL_OPTIONS )
+
+To use the xql method, you must first I<use> L<XML::XQL> and L<XML::XQL::DOM>.
+This method is basically a shortcut for:
+
+ $query = new XML::XQL::Query ( @XQL_OPTIONS );
+ return $query->solve ($node);
+
+If the first parameter in @XQL_OPTIONS is the XQL expression, you can leave off
+the 'Expr' keyword, so:
+
+ $node->xql ("doc//elem1[@attr]", @other_options);
+
+is identical to:
+
+ $node->xql (Expr => "doc//elem1[@attr]", @other_options);
+
+See L<XML::XQL::Query> for other available XQL_OPTIONS.
+See L<XML::XQL> and L<XML::XQL::Tutorial> for more info.
+
+=item isHidden ()
+
+Whether the node is hidden.
+See L<Hidden Nodes|XML::DOM/_Hidden_Nodes_> for details.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/NodeList.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,46 @@
+######################################################################
+package XML::DOM::NodeList;
+######################################################################
+
+use vars qw ( $EMPTY );
+
+# Empty NodeList
+$EMPTY = new XML::DOM::NodeList;
+
+sub new
+{
+ bless [], $_[0];
+}
+
+sub item
+{
+ $_[0]->[$_[1]];
+}
+
+sub getLength
+{
+ int (@{$_[0]});
+}
+
+#------------------------------------------------------------
+# Extra method implementations
+
+sub dispose
+{
+ my $self = shift;
+ for my $kid (@{$self})
+ {
+ $kid->dispose;
+ }
+}
+
+sub setOwnerDocument
+{
+ my ($self, $doc) = @_;
+ for my $kid (@{$self})
+ {
+ $kid->setOwnerDocument ($doc);
+ }
+}
+
+1; # package return code
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/NodeList.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,46 @@
+=head1 NAME
+
+XML::DOM::NodeList - A node list as used by XML::DOM
+
+=head1 DESCRIPTION
+
+The NodeList interface provides the abstraction of an ordered
+collection of nodes, without defining or constraining how this
+collection is implemented.
+
+The items in the NodeList are accessible via an integral index,
+starting from 0.
+
+Although the DOM spec states that all NodeLists are "live" in that they
+allways reflect changes to the DOM tree, the NodeList returned by
+getElementsByTagName is not live in this implementation. See L<CAVEATS>
+for details.
+
+=head2 METHODS
+
+=over 4
+
+=item item (index)
+
+Returns the indexth item in the collection. If index is
+greater than or equal to the number of nodes in the list,
+this returns undef.
+
+=item getLength
+
+The number of nodes in the list. The range of valid child
+node indices is 0 to length-1 inclusive.
+
+=back
+
+=head2 Additional methods not in the DOM Spec
+
+=over 4
+
+=item dispose
+
+Removes all circular references in this NodeList and its descendants so the
+objects can be claimed for garbage collection. The objects should not be used
+afterwards.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Notation.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,47 @@
+=head1 NAME
+
+XML::DOM::Notation - An XML NOTATION in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Notation extends L<XML::DOM::Node>.
+
+This node represents a Notation, e.g.
+
+ <!NOTATION gs SYSTEM "GhostScript">
+
+ <!NOTATION name PUBLIC "pubId">
+
+ <!NOTATION name PUBLIC "pubId" "sysId">
+
+ <!NOTATION name SYSTEM "sysId">
+
+=head2 METHODS
+
+=over 4
+
+=item getName and setName (name)
+
+Returns (or sets) the Notation name, which is the first token after the
+NOTATION keyword.
+
+=item getSysId and setSysId (sysId)
+
+Returns (or sets) the system ID, which is the token after the optional
+SYSTEM keyword.
+
+=item getPubId and setPubId (pubId)
+
+Returns (or sets) the public ID, which is the token after the optional
+PUBLIC keyword.
+
+=item getBase
+
+This is passed by XML::Parser in the Notation handler.
+I don't know what it is yet.
+
+=item getNodeName
+
+Returns the same as getName.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Parser.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,66 @@
+=head1 NAME
+
+XML::DOM::Parser - An XML::Parser that builds XML::DOM document structures
+
+=head1 SYNOPSIS
+
+ use XML::DOM;
+
+ my $parser = new XML::DOM::Parser;
+ my $doc = $parser->parsefile ("file.xml");
+
+=head1 DESCRIPTION
+
+XML::DOM::Parser extends L<XML::Parser>
+
+The XML::Parser module was written by Clark Cooper and
+is built on top of XML::Parser::Expat,
+which is a lower level interface to James Clark's expat library.
+
+XML::DOM::Parser parses XML strings or files
+and builds a data structure that conforms to the API of the Document Object
+Model as described at L<http://www.w3.org/TR/REC-DOM-Level-1>.
+See the L<XML::Parser> manpage for other additional properties of the
+XML::DOM::Parser class.
+Note that the 'Style' property should not be used (it is set internally.)
+
+The XML::Parser B<NoExpand> option is more or less supported, in that it will
+generate EntityReference objects whenever an entity reference is encountered
+in character data. I'm not sure how useful this is. Any comments are welcome.
+
+As described in the synopsis, when you create an XML::DOM::Parser object,
+the parse and parsefile methods create an L<XML::DOM::Document> object
+from the specified input. This Document object can then be examined, modified and
+written back out to a file or converted to a string.
+
+When using XML::DOM with XML::Parser version 2.19 and up, setting the
+XML::DOM::Parser option B<KeepCDATA> to 1 will store CDATASections in
+CDATASection nodes, instead of converting them to Text nodes.
+Subsequent CDATASection nodes will be merged into one. Let me know if this
+is a problem.
+
+=head1 Using LWP to parse URLs
+
+The parsefile() method now also supports URLs, e.g. I<http://www.erols.com/enno/xsa.xml>.
+It uses LWP to download the file and then calls parse() on the resulting string.
+By default it will use a L<LWP::UserAgent> that is created as follows:
+
+ use LWP::UserAgent;
+ $LWP_USER_AGENT = LWP::UserAgent->new;
+ $LWP_USER_AGENT->env_proxy;
+
+Note that env_proxy reads proxy settings from environment variables, which is what I need to
+do to get thru our firewall. If you want to use a different LWP::UserAgent, you can either set
+it globally with:
+
+ XML::DOM::Parser::set_LWP_UserAgent ($my_agent);
+
+or, you can specify it for a specific XML::DOM::Parser by passing it to the constructor:
+
+ my $parser = new XML::DOM::Parser (LWP_UserAgent => $my_agent);
+
+Currently, LWP is used when the filename (passed to parsefile) starts with one of
+the following URL schemes: http, https, ftp, wais, gopher, or file (followed by a colon.)
+If I missed one, please let me know.
+
+The LWP modules are part of libwww-perl which is available at CPAN.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/PerlSAX.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,46 @@
+package XML::DOM::PerlSAX;
+use strict;
+
+BEGIN
+{
+ if ($^W)
+ {
+ warn "XML::DOM::PerlSAX has been renamed to XML::Handler::DOM, "
+ "please modify your code accordingly.";
+ }
+}
+
+use XML::Handler::DOM;
+use vars qw{ @ISA };
+@ISA = qw{ XML::Handler::DOM };
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::DOM::PerlSAX - Old name of L<XML::Handler::BuildDOM>
+
+=head1 SYNOPSIS
+
+ See L<XML::DOM::BuildDOM>
+
+=head1 DESCRIPTION
+
+XML::DOM::PerlSAX was renamed to L<XML::Handler::BuildDOM> to comply
+with naming conventions for PerlSAX filters/handlers.
+
+For backward compatibility, this package will remain in existence
+(it simply includes XML::Handler::BuildDOM), but it will print a warning when
+running with I<'perl -w'>.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=head1 SEE ALSO
+
+L<XML::Handler::BuildDOM>, L<XML::DOM>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/ProcessingInstruction.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,32 @@
+=head1 NAME
+
+XML::DOM::ProcessingInstruction - An XML processing instruction in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::ProcessingInstruction extends L<XML::DOM::Node>.
+
+It represents a "processing instruction", used in XML as a way to keep
+processor-specific information in the text of the document. An example:
+
+ <?PI processing instruction?>
+
+Here, "PI" is the target and "processing instruction" is the data.
+
+=head2 METHODS
+
+=over 4
+
+=item getTarget
+
+The target of this processing instruction. XML defines this
+as being the first token following the markup that begins the
+processing instruction.
+
+=item getData and setData (data)
+
+The content of this processing instruction. This is from the
+first non white space character after the target to the
+character immediately preceding the ?>.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/Text.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,60 @@
+=head1 NAME
+
+XML::DOM::Text - A piece of XML text in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::Text extends L<XML::DOM::CharacterData>, which extends
+L<XML::DOM::Node>.
+
+The Text interface represents the textual content (termed character
+data in XML) of an Element or Attr. If there is no markup inside an
+element's content, the text is contained in a single object
+implementing the Text interface that is the only child of the element.
+If there is markup, it is parsed into a list of elements and Text nodes
+that form the list of children of the element.
+
+When a document is first made available via the DOM, there is only one
+Text node for each block of text. Users may create adjacent Text nodes
+that represent the contents of a given element without any intervening
+markup, but should be aware that there is no way to represent the
+separations between these nodes in XML or HTML, so they will not (in
+general) persist between DOM editing sessions. The normalize() method
+on Element merges any such adjacent Text objects into a single node for
+each block of text; this is recommended before employing operations
+that depend on a particular document structure, such as navigation with
+XPointers.
+
+=head2 METHODS
+
+=over 4
+
+=item splitText (offset)
+
+Breaks this Text node into two Text nodes at the specified
+offset, keeping both in the tree as siblings. This node then
+only contains all the content up to the offset point. And a
+new Text node, which is inserted as the next sibling of this
+node, contains all the content at and after the offset point.
+
+Parameters:
+ I<offset> The offset at which to split, starting from 0.
+
+Return Value: The new Text node.
+
+DOMExceptions:
+
+=over 4
+
+=item * INDEX_SIZE_ERR
+
+Raised if the specified offset is negative or greater than the number of
+characters in data.
+
+=item * NO_MODIFICATION_ALLOWED_ERR
+
+Raised if this node is readonly.
+
+=back
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/ValParser.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,123 @@
+#
+# Use XML::DOM::ValParser instead of XML::DOM::Parser and it will
+# use XML::Checker to validate XML at parse time.
+#
+
+package XML::DOM::ValParser;
+
+use strict;
+use XML::DOM;
+use XML::Checker::Parser;
+
+use vars qw( @ISA @SupportedHandlers );
+
+@ISA = qw( XML::Checker::Parser );
+
+# These XML::Parser handlers are currently supported by XML::DOM
+@SupportedHandlers = qw( Init Final Char Start End Default Doctype
+ CdataStart CdataEnd XMLDecl Entity Notation Proc
+ Default Comment Attlist Element Unparsed );
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ my %handlers = ();
+ for (@SupportedHandlers)
+ {
+ my $domHandler = "XML::Parser::Dom::$_";
+ $handlers{$_} = \&$domHandler;
+ }
+ $args{Handlers} = \%handlers;
+ $class->SUPER::new (%args);
+}
+
+sub parse
+{
+ # Do what XML::DOM::Parser normally does.
+ # Temporarily override his @ISA, so that he thinks he's a
+ # XML::DOM::ValParser and calls the right SUPER::parse(),
+ # (otherwise he thinks he's an XML::DOM::Parser and you see runtime
+ # error: Can't call method "Init" on unblessed reference ...)
+ local @XML::DOM::Parser::ISA = @ISA;
+ local $XML::Checker::Parser::_skipInsignifWS = $_[0]->{SkipInsignifWS};
+ XML::DOM::Parser::parse (@_);
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::DOM::ValParser - an XML::DOM::Parser that validates at parse time
+
+=head1 SYNOPSIS
+
+ use XML::DOM::ValParser;
+
+ my %expat_options = (KeepCDATA => 1,
+ Handlers => [ Unparsed => \&my_Unparsed_handler ]);
+ my $parser = new XML::DOM::ValParser (%expat_options);
+
+ eval {
+ local $XML::Checker::FAIL = \&my_fail;
+ my $doc = $parser->parsefile ("fail.xml");
+ ... XML::DOM::Document was created sucessfully ...
+ };
+ if ($@) {
+ # Either XML::Parser (expat) threw an exception or my_fail() died.
+ ... your error handling code here ...
+ # Note that the XML::DOM::Document is automatically disposed off and
+ # will be garbage collected
+ }
+
+ # Throws an exception (with die) when an error is encountered, this
+ # will stop the parsing process.
+ # Don't die if a warning or info message is encountered, just print a message.
+ sub my_fail {
+ my $code = shift;
+ die XML::Checker::error_string ($code, @_) if $code < 200;
+ XML::Checker::print_error ($code, @_);
+ }
+
+=head1 DESCRIPTION
+
+Use XML::DOM::ValParser wherever you would use L<XML::DOM::Parser> and
+your XML will be checked using L<XML::Checker> at parse time.
+
+See L<XML::DOM> for details on XML::DOM::Parser options.
+See L<XML::Checker> for details on setting the fail handler (my_fail.)
+
+The following handlers are currently supported, just like XML::DOM::Parser:
+Init, Final, Char, Start, End, Default, Doctype, CdataStart, CdataEnd,
+XMLDecl, Entity, Notation, Proc, Default, Comment, Attlist, Element, Unparsed.
+
+=head1 XML::DOM::ValParser
+
+XML::DOM::ValParser extends from L<XML::Checker::Parser>. It creates an
+L<XML::Checker> object and routes all event handlers through the checker,
+before processing the events to create the XML::DOM::Document.
+
+Just like L<XML::Checker::Parser>, the checker object can be retrieved with
+the getChecker() method and can be reused later on (provided that the DOCTYPE
+section of the XML::DOM::Document did not change in the mean time.)
+
+You can control which errors are fatal (and therefore should stop creation
+of the XML::DOM::Document) by filtering the appropriate error codes in
+the global $XML::Checker::FAIL handler
+(see L<XML::Checker/ERROR_HANDLING>) and
+calling I<die> or I<croak> appropriately.
+
+Just like XML::Checker::Parser, XML::DOM::ValParser supports the
+SkipExternalDTD and SkipInsignifWS options. See L<XML::Checker::Parser>
+for details.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=head1 SEE ALSO
+
+L<XML::DOM>, L<XML::Checker> (L<XML::Checker/SEE_ALSO>)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/DOM/XMLDecl.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,33 @@
+=head1 NAME
+
+XML::DOM::XMLDecl - XML declaration in XML::DOM
+
+=head1 DESCRIPTION
+
+XML::DOM::XMLDecl extends L<XML::DOM::Node>, but is not part of the DOM Level 1
+specification.
+
+It contains the XML declaration, e.g.
+
+ <?xml version="1.0" encoding="UTF-16" standalone="yes"?>
+
+See also XML::DOM::Document::getXMLDecl.
+
+=head2 METHODS
+
+=over 4
+
+=item getVersion and setVersion (version)
+
+Returns and sets the XML version. At the time of this writing the version should
+always be "1.0"
+
+=item getEncoding and setEncoding (encoding)
+
+undef may be specified for the encoding value.
+
+=item getStandalone and setStandalone (standalone)
+
+undef may be specified for the standalone value.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Filter/DetectWS.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,622 @@
+package XML::Filter::DetectWS;
+use strict;
+use XML::Filter::SAXT;
+
+#----------------------------------------------------------------------
+# CONSTANT DEFINITIONS
+#----------------------------------------------------------------------
+
+# Locations of whitespace
+sub WS_START (%) { 1 } # just after <a>
+sub WS_END (%) { 2 } # just before </a>
+sub WS_INTER (%) { 0 } # not at the start or end (i.e. intermediate)
+sub WS_ONLY (%) { 3 } # both START and END, i.e. between <a> and </a>
+
+# The states of the WhiteSpace detection code
+# for regular elements, i.e. elements that:
+# 1) don't have xml:space="preserve"
+# 2) have an ELEMENT model that allows text children (i.e. ANY or Mixed content)
+
+sub START (%) { 0 } # just saw <elem>
+sub ONLY_WS (%) { 1 } # saw <elem> followed by whitespace (only)
+sub ENDS_IN_WS (%) { 2 } # ends in whitespace (sofar)
+sub ENDS_IN_NON_WS (%) { 3 } # ends in non-ws text or non-text node (sofar)
+
+# NO_TEXT States: when <!ELEMENT> model does not allow text
+# (we assume that all text children are whitespace)
+sub NO_TEXT_START (%) { 4 } # just saw <elem>
+sub NO_TEXT_ONLY_WS (%) { 5 } # saw <elem> followed by whitespace (only)
+sub NO_TEXT_ENDS_IN_WS (%) { 6 } # ends in whitespace (sofar)
+sub NO_TEXT_ENDS_IN_NON_WS (%) { 7 } # ends in non-text node (sofar)
+
+# State for elements with xml:space="preserve" (all text is non-WS)
+sub PRESERVE_WS (%) { 8 }
+
+#----------------------------------------------------------------------
+# METHOD DEFINITIONS
+#----------------------------------------------------------------------
+
+# Constructor options:
+#
+# SkipIgnorableWS 1 means: don't forward ignorable_whitespace events
+# Handler SAX Handler that will receive the resulting events
+#
+
+sub new
+{
+ my ($class, %options) = @_;
+
+ my $self = bless \%options, $class;
+
+ $self->init_handlers;
+
+ $self;
+}
+
+# Does nothing
+sub noop {}
+
+sub init_handlers
+{
+ my ($self) = @_;
+ my %handlers;
+
+ my $handler = $self->{Handler};
+
+ for my $cb (map { @{$_} } values %XML::Filter::SAXT::SAX_HANDLERS)
+ {
+ if (UNIVERSAL::can ($handler, $cb))
+ {
+ $handlers{$cb} = eval "sub { \$handler->$cb (\@_) }";
+ }
+ else
+ {
+ $handlers{$cb} = \&noop;
+ }
+ }
+
+ if ($self->{SkipIgnorableWS})
+ {
+ delete $handlers{ignorable_whitespace}; # if it exists
+ }
+ elsif (UNIVERSAL::can ($handler, 'ignorable_whitespace'))
+ {
+ # Support ignorable_whitespace callback if it exists
+ # (if not, just use characters callback)
+ $handlers{ignorable_whitespace} =
+ sub { $handler->ignorable_whitespace (@_) };
+ }
+ else
+ {
+ $handlers{ignorable_whitespace} = $handlers{characters};
+ }
+
+ $handlers{ws} = $handlers{characters};
+#?? were should whitespace go?
+
+ # NOTE: 'cdata' is not a valid PerlSAX callback
+ if (UNIVERSAL::can ($handler, 'start_cdata') &&
+ UNIVERSAL::can ($handler, 'end_cdata'))
+ {
+ $handlers{cdata} = sub {
+ $handler->start_cdata;
+ $handler->characters (@_);
+ $handler->end_cdata;
+ }
+ }
+ else # pass CDATA as regular characters
+ {
+ $handlers{cdata} = $handlers{characters};
+ }
+
+ $self->{Callback} = \%handlers;
+}
+
+sub start_cdata
+{
+ my ($self, $event) = @_;
+
+ $self->{InCDATA} = 1;
+}
+
+sub end_cdata
+{
+ my ($self, $event) = @_;
+
+ $self->{InCDATA} = 0;
+}
+
+sub entity_reference
+{
+ my ($self, $event) = @_;
+
+ $self->push_event ('entity_reference', $event);
+
+ my $parent = $self->{ParentStack}->[-1];
+ $parent->{State} |= ENDS_IN_NON_WS unless $parent->{State} == PRESERVE_WS;
+}
+
+sub comment
+{
+ my ($self, $event) = @_;
+
+ $self->push_event ('comment', $event);
+
+ my $parent = $self->{ParentStack}->[-1];
+ $parent->{State} |= ENDS_IN_NON_WS unless $parent->{State} == PRESERVE_WS;
+}
+
+sub processing_instruction
+{
+ my ($self, $event) = @_;
+
+ $self->push_event ('processing_instruction', $event);
+
+ my $parent = $self->{ParentStack}->[-1];
+ $parent->{State} |= ENDS_IN_NON_WS unless $parent->{State} == PRESERVE_WS;
+}
+
+sub start_document
+{
+ my ($self, $event) = @_;
+
+ # Initialize initial state
+ $self->{ParentStack} = [];
+ $self->{EventQ} = [];
+ $self->{InCDATA} = 0;
+
+ $self->init_handlers;
+
+ $event = {} unless defined $event;
+ # Don't preserve WS by default (unless specified by the user)
+ $event->{PreserveWS} = defined ($self->{PreserveWS}) ?
+ $self->{PreserveWS} : 0;
+
+ # We don't need whitespace detection at the document level
+ $event->{State} = PRESERVE_WS;
+
+ $self->push_event ('start_document', $event);
+ push @{ $self->{ParentStack} }, $event;
+}
+
+sub end_document
+{
+ my ($self, $event) = @_;
+ $event = {} unless defined $event;
+
+ $self->push_event ('end_document', $event);
+
+ $self->flush;
+}
+
+sub start_element
+{
+ my ($self, $event) = @_;
+
+ my $pres = $event->{Attributes}->{'xml:space'};
+ if (defined $pres)
+ {
+ $event->{PreserveWS} = $pres eq "preserve";
+ }
+ else
+ {
+ $event->{PreserveWS} = $self->{ParentStack}->[-1]->{PreserveWS};
+ }
+
+ if ($self->{NoText}->{ $event->{Name} })
+ {
+ $event->{NoText} = 1;
+ }
+
+ $event->{State} = $self->get_init_state ($event);
+
+ $self->push_event ('start_element', $event);
+ push @{ $self->{ParentStack} }, $event;
+}
+
+sub end_element
+{
+ my ($self, $event) = @_;
+
+ # Mark previous whitespace event as the last event (WS_END)
+ # (if it's there)
+ my $prev = $self->{EventQ}->[-1];
+ $prev->{Loc} |= WS_END if exists $prev->{Loc};
+
+ $self->push_event ('end_element', $event);
+
+ my $elem = pop @{ $self->{ParentStack} };
+ delete $elem->{State};
+}
+
+sub characters
+{
+ my ($self, $event) = @_;
+
+ if ($self->{InCDATA})
+ {
+ # NOTE: 'cdata' is not a valid PerlSAX callback
+ $self->push_event ('cdata', $event);
+
+ my $parent = $self->{ParentStack}->[-1];
+ $parent->{State} |= ENDS_IN_NON_WS unless $parent->{State} == PRESERVE_WS;
+ return;
+ }
+
+ my $text = $event->{Data};
+ return unless length ($text);
+
+ my $state = $self->{ParentStack}->[-1]->{State};
+ if ($state == PRESERVE_WS)
+ {
+ $self->push_event ('characters', $event);
+ }
+ elsif ($state == NO_TEXT_START)
+ {
+ # ELEMENT model does not allow regular text.
+ # All characters are whitespace.
+ $self->push_event ('ignorable_whitespace', { Data => $text, Loc => WS_START });
+ $state = NO_TEXT_ONLY_WS;
+ }
+ elsif ($state == NO_TEXT_ONLY_WS)
+ {
+ $self->merge_text ($text, 'ignorable_whitespace', WS_START );
+ }
+ elsif ($state == NO_TEXT_ENDS_IN_NON_WS)
+ {
+ $self->push_event ('ignorable_whitespace', { Data => $text, Loc => WS_INTER });
+ $state = NO_TEXT_ENDS_IN_WS;
+ }
+ elsif ($state == NO_TEXT_ENDS_IN_WS)
+ {
+ $self->merge_text ($text, 'ignorable_whitespace', WS_INTER );
+ }
+ elsif ($state == START)
+ {
+#?? add support for full Unicode
+ $text =~ /^(\s*)(\S(?:.*\S)?)?(\s*)$/;
+ if (length $1)
+ {
+ $self->push_event ('ws', { Data => $1, Loc => WS_START });
+ $state = ONLY_WS;
+ }
+ if (length $2)
+ {
+ $self->push_event ('characters', { Data => $2 });
+ $state = ENDS_IN_NON_WS;
+ }
+ if (length $3)
+ {
+ $self->push_event ('ws', { Data => $3, Loc => WS_INTER });
+ $state = ENDS_IN_WS;
+ }
+ }
+ elsif ($state == ONLY_WS)
+ {
+ $text =~ /^(\s*)(\S(?:.*\S)?)?(\s*)$/;
+ if (length $1)
+ {
+ $self->merge_text ($1, 'ws', WS_START);
+ }
+ if (length $2)
+ {
+ $self->push_event ('characters', { Data => $2 });
+ $state = ENDS_IN_NON_WS;
+ }
+ if (length $3)
+ {
+ $self->push_event ('ws', { Data => $3, Loc => WS_INTER });
+ $state = ENDS_IN_WS;
+ }
+ }
+ else # state == ENDS_IN_WS or ENDS_IN_NON_WS
+ {
+ $text =~ /^(.*\S)?(\s*)$/;
+ if (length $1)
+ {
+ if ($state == ENDS_IN_NON_WS)
+ {
+ $self->merge_text ($1, 'characters');
+ }
+ else
+ {
+ $self->push_event ('characters', { Data => $1 });
+ $state = ENDS_IN_NON_WS;
+ }
+ }
+ if (length $2)
+ {
+ if ($state == ENDS_IN_WS)
+ {
+ $self->merge_text ($2, 'ws', WS_INTER);
+ }
+ else
+ {
+ $self->push_event ('ws', { Data => $2, Loc => WS_INTER });
+ $state = ENDS_IN_WS;
+ }
+ }
+ }
+
+ $self->{ParentStack}->[-1]->{State} = $state;
+}
+
+sub element_decl
+{
+ my ($self, $event) = @_;
+ my $tag = $event->{Name};
+ my $model = $event->{Model};
+
+ # Check the model to see if the elements may contain regular text
+ $self->{NoText}->{$tag} = ($model eq 'EMPTY' || $model !~ /\#PCDATA/);
+
+ $self->push_event ('element_decl', $event);
+}
+
+sub attlist_decl
+{
+ my ($self, $event) = @_;
+
+ my $prev = $self->{EventQ}->[-1];
+ if ($prev->{EventType} eq 'attlist_decl' &&
+ $prev->{ElementName} eq $event->{ElementName})
+ {
+ $prev->{MoreFollow} = 1;
+ $event->{First} = 0;
+ }
+ else
+ {
+ $event->{First} = 1;
+ }
+
+ $self->push_event ('attlist_decl', $event);
+}
+
+sub notation_decl
+{
+ my ($self, $event) = @_;
+ $self->push_event ('notation_decl', $event);
+}
+
+sub unparsed_entity_decl
+{
+ my ($self, $event) = @_;
+ $self->push_event ('unparsed_entity_decl', $event);
+}
+
+sub entity_decl
+{
+ my ($self, $event) = @_;
+ $self->push_event ('entity_decl', $event);
+}
+
+sub doctype_decl
+{
+ my ($self, $event) = @_;
+ $self->push_event ('doctype_decl', $event);
+}
+
+sub xml_decl
+{
+ my ($self, $event) = @_;
+ $self->push_event ('xml_decl', $event);
+}
+
+#?? what about set_document_locator, resolve_entity
+
+#
+# Determine the initial State for the current Element.
+# By default, we look at the PreserveWS property (i.e. value of xml:space.)
+# The user can override this to force xml:space="preserve" for a particular
+# element with e.g.
+#
+# sub get_init_state
+# {
+# my ($self, $event) = @_;
+# ($event->{Name} eq 'foo' || $event->{PreserveWS}) ? PRESERVE_WS : START;
+# }
+#
+sub get_init_state
+{
+ my ($self, $event) = @_;
+ my $tag = $event->{Name};
+
+ if ($self->{NoText}->{$tag}) # ELEMENT model does not allow text
+ {
+ return NO_TEXT_START;
+ }
+ $event->{PreserveWS} ? PRESERVE_WS : START;
+}
+
+sub push_event
+{
+ my ($self, $type, $event) = @_;
+
+ $event->{EventType} = $type;
+
+ $self->flush;
+ push @{ $self->{EventQ} }, $event;
+}
+
+# Merge text with previous event (if it has the same EventType)
+# or push a new text event
+sub merge_text
+{
+ my ($self, $str, $eventType, $wsLocation) = @_;
+ my $q = $self->{EventQ};
+
+ my $prev = $q->[-1];
+ if (defined $prev && $prev->{EventType} eq $eventType)
+ {
+ $prev->{Data} .= $str;
+ }
+ else
+ {
+ my $event = { Data => $str };
+ $event->{Loc} = $wsLocation if defined $wsLocation;
+ $self->push_event ($eventType, $event);
+ }
+}
+
+# Forward all events on the EventQ
+sub flush
+{
+ my ($self) = @_;
+
+ my $q = $self->{EventQ};
+ while (@$q)
+ {
+ my $event = shift @$q;
+ my $type = $event->{EventType};
+ delete $event->{EventType};
+
+ $self->{Callback}->{$type}->($event);
+ }
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::Filter::DetectWS - A PerlSAX filter that detects ignorable whitespace
+
+=head1 SYNOPSIS
+
+ use XML::Filter::DetectWS;
+
+ my $detect = new XML::Filter::DetectWS (Handler => $handler,
+ SkipIgnorableWS => 1);
+
+=head1 DESCRIPTION
+
+This a PerlSAX filter that detects which character data contains
+ignorable whitespace and optionally filters it.
+
+Note that this is just a first stab at the implementation and it may
+change completely in the near future. Please provide feedback whether
+you like it or not, so I know whether I should change it.
+
+The XML spec defines ignorable whitespace as the character data found in elements
+that were defined in an <!ELEMENT> declaration with a model of 'EMPTY' or
+'Children' (Children is the rule that does not contain '#PCDATA'.)
+
+In addition, XML::Filter::DetectWS allows the user to define other whitespace to
+be I<ignorable>. The ignorable whitespace is passed to the PerlSAX Handler with
+the B<ignorable_whitespace> handler, provided that the Handler implements this
+method. (Otherwise it is passed to the characters handler.)
+If the B<SkipIgnorableWS> is set, the ignorable whitespace is simply
+discarded.
+
+XML::Filter::DetectWS also takes xml:space attributes into account. See below
+for details.
+
+CDATA sections are passed in the standard PerlSAX way (i.e. with surrounding
+start_cdata and end_cdata events), unless the Handler does not implement these
+methods. In that case, the CDATA section is simply passed to the characters
+method.
+
+=head1 Constructor Options
+
+=over 4
+
+=item * SkipIgnorableWS (Default: 0)
+
+When set, detected ignorable whitespace is discarded.
+
+=item * Handler
+
+The PerlSAX handler (or filter) that will receive the PerlSAX events from this
+filter.
+
+=back
+
+=head1 Current Implementation
+
+When determining which whitespace is ignorable, it first looks at the
+xml:space attribute of the parent element node (and its ancestors.)
+If the attribute value is "preserve", then it is *NOT* ignorable.
+(If someone took the trouble of adding xml:space="preserve", then that is
+the final answer...)
+
+If xml:space="default", then we look at the <!ELEMENT> definition of the parent
+element. If the model is 'EMPTY' or follows the 'Children' rule (i.e. does not
+contain '#PCDATA') then we know that the whitespace is ignorable.
+Otherwise we need input from the user somehow.
+
+The idea is that the API of DetectWS will be extended, so that you can
+specify/override e.g. which elements should behave as if xml:space="preserve"
+were set, and/or which elements should behave as if the <!ELEMENT> model was
+defined a certain way, etc.
+
+Please send feedback!
+
+The current implementation also detects whitespace after an element-start tag,
+whitespace before an element-end tag.
+It also detects whitespace before an element-start and after an element-end tag
+and before or after comments, processing instruction, cdata sections etc.,
+but this needs to be reimplemented.
+In either case, the detected whitespace is split off into its own PerlSAX
+characters event and an extra property 'Loc' is added. It can have 4 possible
+values:
+
+=over 4
+
+=item * 1 (WS_START) - whitespace immediately after element-start tag
+
+=item * 2 (WS_END) - whitespace just before element-end tag
+
+=item * 3 (WS_ONLY) - both WS_START and WS_END, i.e. it's the only text found between the start and end tag and it's all whitespace
+
+=item * 0 (WS_INTER) - none of the above, probably before an element-start tag,
+after an element-end tag, or before or after a comment, PI, cdata section etc.
+
+=back
+
+Note that WS_INTER may not be that useful, so this may change.
+
+=head1 xml:space attribute
+
+The XML spec states that: A special attribute
+named xml:space may be attached to an element
+to signal an intention that in that element,
+white space should be preserved by applications.
+In valid documents, this attribute, like any other, must be
+declared if it is used.
+When declared, it must be given as an
+enumerated type whose only
+possible values are "default" and "preserve".
+For example:
+
+ <!ATTLIST poem xml:space (default|preserve) 'preserve'>
+
+The value "default" signals that applications'
+default white-space processing modes are acceptable for this element; the
+value "preserve" indicates the intent that applications preserve
+all the white space.
+This declared intent is considered to apply to all elements within the content
+of the element where it is specified, unless overriden with another instance
+of the xml:space attribute.
+
+The root element of any document
+is considered to have signaled no intentions as regards application space
+handling, unless it provides a value for
+this attribute or the attribute is declared with a default value.
+
+[... end of excerpt ...]
+
+=head1 CAVEATS
+
+This code is highly experimental!
+It has not been tested well and the API may change.
+
+The code that detects of blocks of whitespace at potential indent positions
+may need some work. See
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Filter/Reindent.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,301 @@
+package XML::Filter::Reindent;
+use strict;
+use XML::Filter::DetectWS;
+
+use vars qw{ @ISA };
+@ISA = qw{ XML::Filter::DetectWS };
+
+sub MAYBE (%) { 2 }
+
+sub new
+{
+ my $class = shift;
+ my $self = $class->SUPER::new (@_);
+
+ # Use one space per indent level (by default)
+ $self->{Tab} = " " unless defined $self->{Tab};
+
+ # Note that this is a PerlSAX filter so we use the XML newline ("\x0A"),
+ # not the Perl output newline ("\n"), by default.
+ $self->{Newline} = "\x0A" unless defined $self->{Newline};
+
+ $self;
+}
+
+# Indent the element if its parent element says so
+sub indent_element
+{
+ my ($self, $event, $parent_says_indent) = @_;
+ return $parent_says_indent;
+}
+
+# Always indent children unless element (or its ancestor) has
+# xml:space="preserve" attribute
+sub indent_children
+{
+ my ($self, $event) = @_;
+ return $event->{PreserveWS} ? 0 : MAYBE;
+}
+
+sub start_element
+{
+ my ($self, $event) = @_;
+
+ my $parent = $self->{ParentStack}->[-1];
+ my $level = $self->{Level}++;
+ $self->SUPER::start_element ($event);
+
+ my $parent_says_indent = $parent->{IndentChildren} ? 1 : 0;
+ # init with 1 if parent says MAYBE
+ $event->{Indent} = $self->indent_element ($event, $parent_says_indent) ?
+ $level : undef;
+
+ $event->{IndentChildren} = $self->indent_children ($event);
+}
+
+sub end_element
+{
+ my ($self, $event) = @_;
+ my $start_element = $self->{ParentStack}->[-1];
+
+ if ($start_element->{IndentChildren} == MAYBE)
+ {
+ my $q = $self->{EventQ};
+ my $prev = $q->[-1];
+
+ if ($prev == $start_element)
+ {
+ # End tag follows start tag: compress tag
+ $start_element->{Compress} = 1;
+ $event->{Compress} = 1;
+#?? could detect if it contains only ignorable_ws
+ }
+ elsif ($prev->{EventType} eq 'characters')
+ {
+ if ($q->[-2] == $start_element)
+ {
+ # Element has only one child, a text node.
+ # Print element as: <a>text here</a>
+ delete $prev->{Indent};
+ $start_element->{IndentChildren} = 0;
+ }
+ }
+ }
+
+ my $level = --$self->{Level};
+ $event->{Indent} = $start_element->{IndentChildren} ? $level : undef;
+
+ my $compress = $start_element->{Compress};
+ if ($compress)
+ {
+ $event->{Compress} = $compress;
+ delete $event->{Indent};
+ }
+
+ $self->SUPER::end_element ($event);
+}
+
+sub end_document
+{
+ my ($self, $event) = @_;
+
+ $self->push_event ('end_document', $event || {});
+ $self->flush (0); # send remaining events
+}
+
+sub push_event
+{
+ my ($self, $type, $event) = @_;
+
+ $event->{EventType} = $type;
+ if ($type =~ /^(characters|comment|processing_instruction|entity_reference|cdata)$/)
+ {
+ my $indent_kids = $self->{ParentStack}->[-1]->{IndentChildren} ? 1 : 0;
+ $event->{Indent} = $indent_kids ? $self->{Level} : undef;
+ }
+
+ my $q = $self->{EventQ};
+ push @$q, $event;
+
+ $self->flush (4); # keep 4 events on the stack (maybe 3 is enough)
+}
+
+sub flush
+{
+ my ($self, $keep) = @_;
+ my $q = $self->{EventQ};
+
+ while (@$q > $keep)
+ {
+ my $head = $q->[0];
+# print "head=" . $head->{EventType} . " indent=" . $head->{Indent} . "\n";
+
+ if ($head->{EventType} =~ /ws|ignorable/)
+ {
+ my $next = $q->[1];
+ my $indent = $next->{Indent};
+
+ if (defined $indent) # fix existing indent
+ {
+ $head->{Data} = $self->{Newline} . ($self->{Tab} x $indent);
+ $self->send (2);
+ }
+ else # remove existing indent
+ {
+ shift @$q;
+ $self->send (1);
+ }
+#?? remove keys: Indent, ...
+ }
+ else
+ {
+ my $indent = $head->{Indent};
+
+ if (defined $indent) # insert indent
+ {
+ unshift @$q, { EventType => 'ws',
+ Data => $self->{Newline} . ($self->{Tab} x $indent) };
+ $self->send (2);
+ }
+ else # no indent - leave as is
+ {
+ $self->send (1);
+ }
+ }
+ }
+}
+
+sub send
+{
+ my ($self, $i) = @_;
+
+ my $q = $self->{EventQ};
+
+ while ($i--)
+ {
+ my $event = shift @$q;
+ my $type = $event->{EventType};
+ delete $event->{EventType};
+
+#print "TYPE=$type " . join(",", map { "$_=" . $event->{$_} } keys %$event) . "\n";
+ $self->{Callback}->{$type}->($event);
+ }
+}
+
+1; # package return code
+
+=head1 NAME
+
+XML::Filter::Reindent - Reformats whitespace for pretty printing XML
+
+=head1 SYNOPSIS
+
+ use XML::Handler::Composer;
+ use XML::Filter::Reindent;
+
+ my $composer = new XML::Handler::Composer (%OPTIONS);
+ my $indent = new XML::Filter::Reindent (Handler => $composer, %OPTIONS);
+
+=head1 DESCRIPTION
+
+XML::Filter::Reindent is a sub class of L<XML::Filter::DetectWS>.
+
+XML::Filter::Reindent can be used as a PerlSAX filter to reformat an
+XML document before sending it to a PerlSAX handler that prints it
+(like L<XML::Handler::Composer>.)
+
+Like L<XML::Filter::DetectWS>, it detects ignorable whitespace and blocks of
+whitespace characters in certain places. It uses this information and
+information supplied by the user to determine where whitespace may be
+modified, deleted or inserted.
+Based on the indent settings, it then modifies, inserts and deletes characters
+and ignorable_whitespace events accordingly.
+
+This is just a first stab at the implementation.
+It may be buggy and may change completely!
+
+=head1 Constructor Options
+
+=over 4
+
+=item * Handler
+
+The PerlSAX handler (or filter) that will receive the PerlSAX events from this
+filter.
+
+=item * Tab (Default: one space)
+
+The number of spaces per indent level for elements etc. in document content.
+
+=item * Newline (Default: "\x0A")
+
+The newline to use when re-indenting.
+The default is the internal newline used by L<XML::Parser>, L<XML::DOM> etc.,
+and should be fine when used in combination with L<XML::Handler::Composer>.
+
+=back
+
+=head1 $self->indent_children ($start_element_event)
+
+This method determines whether children of a certain element
+may be reformatted.
+The default implementation checks the PreserveWS parameter of the specified
+start_element event and returns 0 if it is set or MAYBE otherwise.
+The value MAYBE (2) indicates that further investigation is needed, e.g.
+by examining the element contents. A value of 1 means yes, indent the
+child nodes, no further investigation is needed.
+
+NOTE: the PreserveWS parameter is set by the parent class,
+L<XML::Filter::DetectWS>, when the element or one of its ancestors has
+the attribute xml:space="preserve".
+
+Override this method to tweak the behavior of this class.
+
+=head1 $self->indent_element ($start_element_event, $parent_says_indent)
+
+This method determines whether a certain element may be re-indented.
+The default implementation returns the value of the $parent_says_indent
+parameter, which was set to the value returned by indent_children for the
+parent element. In other words, the element will be re-indented if the
+parent element allows it.
+
+Override this method to tweak the behavior of this class.
+I'm not sure how useful this hook is. Please provide feedback!
+
+=head1 Current Implementation
+
+The current implementation puts all incoming Perl SAX events in a queue for
+further processing. When determining which nodes should be re-indented,
+it sometimes needs information from previous events, hence the use of the
+queue.
+
+The parameter (Compress => 1) is added to
+matching start_element and end_element events with no events in between
+This indicates to an XML printer that a compressed notation can be used,
+e.g <foo/>.
+
+If an element allows reformatting of its contents (xml:space="preserve" was
+not active and indent_children returned MAYBE), the element
+contents will be reformatted unless it only has one child node and that
+child is a regular text node (characters event.)
+In that case, the element will be printed as <foo>text contents</foo>.
+
+If you want element nodes with just one text child to be reindented as well,
+simply override indent_children to return 1 instead of MAYBE (2.)
+
+This behavior may be changed or extended in the future.
+
+=head1 CAVEATS
+
+This code is highly experimental!
+It has not been tested well and the API may change.
+
+The code that detects blocks of whitespace at potential indent positions
+may need some work.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Filter/SAXT.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,188 @@
+#
+# To do:
+# - later: ErrorHandler, Locale?
+
+package XML::Filter::SAXT;
+use strict;
+
+use vars qw( %SAX_HANDLERS );
+
+%SAX_HANDLERS = ( DocumentHandler =>
+ [ "start_document",
+ "end_document",
+ "start_element",
+ "end_element",
+ "characters",
+ "processing_instruction",
+ "comment",
+ "start_cdata",
+ "end_cdata",
+ "entity_reference",
+ "set_document_locator" # !! passes {Locator=>$perlsax}
+ ],
+
+ DTDHandler =>
+ [ "notation_decl",
+ "unparsed_entity_decl",
+ "entity_decl",
+ "element_decl",
+ "attlist_decl",
+ "doctype_decl",
+ "xml_decl"
+ ],
+
+ EntityResolver =>
+ [ "resolve_entity" ]);
+
+#
+# Usage:
+#
+# $saxt = new XML::Filter::SAXT ( { Handler => $out0 },
+# { DocumentHandler => $out1 },
+# { DTDHandler => $out3,
+# Handler => $out4
+# }
+# );
+#
+# $perlsax = new XML::Parser::PerlSAX ( Handler => $saxt );
+# $perlsax->parse ( [OPTIONS] );
+#
+sub new
+{
+ my ($class, @out) = @_;
+
+ my $self = bless { Out => \@out }, $class;
+
+ for (my $i = 0; $i < @out; $i++)
+ {
+ for my $handler (keys %SAX_HANDLERS)
+ {
+ my $callbacks = $SAX_HANDLERS{$handler};
+ my $h = ($self->{Out}->[$i]->{$handler} ||= $self->{Out}->[$i]->{Handler});
+ next unless defined $h;
+
+ for my $cb (@$callbacks)
+ {
+ if (UNIVERSAL::can ($h, $cb))
+ {
+ $self->{$cb} .= "\$out->[$i]->{$handler}->$cb (\@_);\n";
+ }
+ }
+ }
+ }
+
+ for my $handler (keys %SAX_HANDLERS)
+ {
+ my $callbacks = $SAX_HANDLERS{$handler};
+ for my $cb (@$callbacks)
+ {
+ my $code = $self->{$cb};
+ if (defined $code)
+ {
+ $self->{$cb} =
+ eval "sub { my \$out = shift->{Out}; $code }";
+ }
+ else
+ {
+ $self->{$cb} = \&noop;
+ }
+ }
+ }
+ return $self;
+}
+
+sub noop
+{
+ # does nothing
+}
+
+for my $cb (map { @{ $_ } } values %SAX_HANDLERS)
+{
+ eval "sub $cb { shift->{$cb}->(\@_); }";
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::Filter::SAXT - Replicates SAX events to several SAX event handlers
+
+=head1 SYNOPSIS
+
+ $saxt = new XML::Filter::SAXT ( { Handler => $out1 },
+ { DocumentHandler => $out2 },
+ { DTDHandler => $out3,
+ Handler => $out4
+ }
+ );
+
+ $perlsax = new XML::Parser::PerlSAX ( Handler => $saxt );
+ $perlsax->parse ( [OPTIONS] );
+
+=head1 DESCRIPTION
+
+SAXT is like the Unix 'tee' command in that it multiplexes the input stream
+to several output streams. In this case, the input stream is a PerlSAX event
+producer (like XML::Parser::PerlSAX) and the output streams are PerlSAX
+handlers or filters.
+
+The SAXT constructor takes a list of hash references. Each hash specifies
+an output handler. The hash keys can be: DocumentHandler, DTDHandler,
+EntityResolver or Handler, where Handler is a combination of the previous three
+and acts as the default handler.
+E.g. if DocumentHandler is not specified, it will try to use Handler.
+
+=head2 EXAMPLE
+
+In this example we use L<XML::Parser::PerlSAX> to parse an XML file and
+to invoke the PerlSAX callbacks of our SAXT object. The SAXT object then
+forwards the callbacks to L<XML::Checker>, which will 'die' if it encounters
+an error, and to L<XML::Hqandler::BuildDOM>, which will store the XML in an
+L<XML::DOM::Document>.
+
+ use XML::Parser::PerlSAX;
+ use XML::Filter::SAXT;
+ use XML::Handler::BuildDOM;
+ use XML::Checker;
+
+ my $checker = new XML::Checker;
+ my $builder = new XML::Handler::BuildDOM (KeepCDATA => 1);
+ my $tee = new XML::Filter::SAXT ( { Handler => $checker },
+ { Handler => $builder } );
+
+ my $parser = new XML::Parser::PerlSAX (Handler => $tee);
+ eval
+ {
+ # This is how you set the error handler for XML::Checker
+ local $XML::Checker::FAIL = \&my_fail;
+
+ my $dom_document = $parser->parsefile ("file.xml");
+ ... your code here ...
+ };
+ if ($@)
+ {
+ # Either XML::Parser::PerlSAX threw an exception (bad XML)
+ # or XML::Checker found an error and my_fail died.
+ ... your error handling code here ...
+ }
+
+ # XML::Checker error handler
+ sub my_fail
+ {
+ my $code = shift;
+ die XML::Checker::error_string ($code, @_)
+ if $code < 200; # warnings and info messages are >= 200
+ }
+
+=head1 CAVEATS
+
+This is still alpha software.
+Package names and interfaces are subject to change.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Handler/BuildDOM.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,338 @@
+package XML::Handler::BuildDOM;
+use strict;
+use XML::DOM;
+
+#
+# TODO:
+# - add support for parameter entity references
+# - expand API: insert Elements in the tree or stuff into DocType etc.
+
+sub new
+{
+ my ($class, %args) = @_;
+ bless \%args, $class;
+}
+
+#-------- PerlSAX Handler methods ------------------------------
+
+sub start_document # was Init
+{
+ my $self = shift;
+
+ # Define Document if it's not set & not obtainable from Element or DocType
+ $self->{Document} ||=
+ (defined $self->{Element} ? $self->{Element}->getOwnerDocument : undef)
+ || (defined $self->{DocType} ? $self->{DocType}->getOwnerDocument : undef)
+ || new XML::DOM::Document();
+
+ $self->{Element} ||= $self->{Document};
+
+ unless (defined $self->{DocType})
+ {
+ $self->{DocType} = $self->{Document}->getDoctype
+ if defined $self->{Document};
+
+ unless (defined $self->{Doctype})
+ {
+#?? should be $doc->createDocType for extensibility!
+ $self->{DocType} = new XML::DOM::DocumentType ($self->{Document});
+ $self->{Document}->setDoctype ($self->{DocType});
+ }
+ }
+
+ # Prepare for document prolog
+ $self->{InProlog} = 1;
+
+ # We haven't passed the root element yet
+ $self->{EndDoc} = 0;
+
+ undef $self->{LastText};
+}
+
+sub end_document # was Final
+{
+ my $self = shift;
+ unless ($self->{SawDocType})
+ {
+ my $doctype = $self->{Document}->removeDoctype;
+ $doctype->dispose;
+#?? do we always want to destroy the Doctype?
+ }
+ $self->{Document};
+}
+
+sub characters # was Char
+{
+ my $self = $_[0];
+ my $str = $_[1]->{Data};
+
+ if ($self->{InCDATA} && $self->{KeepCDATA})
+ {
+ undef $self->{LastText};
+ # Merge text with previous node if possible
+ $self->{Element}->addCDATA ($str);
+ }
+ else
+ {
+ # Merge text with previous node if possible
+ # Used to be: $expat->{DOM_Element}->addText ($str);
+ if ($self->{LastText})
+ {
+ $self->{LastText}->appendData ($str);
+ }
+ else
+ {
+ $self->{LastText} = $self->{Document}->createTextNode ($str);
+ $self->{Element}->appendChild ($self->{LastText});
+ }
+ }
+}
+
+sub start_element # was Start
+{
+ my ($self, $hash) = @_;
+ my $elem = $hash->{Name};
+ my $attr = $hash->{Attributes};
+
+ my $parent = $self->{Element};
+ my $doc = $self->{Document};
+
+ if ($parent == $doc)
+ {
+ # End of document prolog, i.e. start of first Element
+ $self->{InProlog} = 0;
+ }
+
+ undef $self->{LastText};
+ my $node = $doc->createElement ($elem);
+ $self->{Element} = $node;
+ $parent->appendChild ($node);
+
+ my $i = 0;
+ my $n = scalar keys %$attr;
+ return unless $n;
+
+ if (exists $hash->{AttributeOrder})
+ {
+ my $defaulted = $hash->{Defaulted};
+ my @order = @{ $hash->{AttributeOrder} };
+
+ # Specified attributes
+ for (my $i = 0; $i < $defaulted; $i++)
+ {
+ my $a = $order[$i];
+ my $att = $doc->createAttribute ($a, $attr->{$a}, 1);
+ $node->setAttributeNode ($att);
+ }
+
+ # Defaulted attributes
+ for (my $i = $defaulted; $i < @order; $i++)
+ {
+ my $a = $order[$i];
+ my $att = $doc->createAttribute ($elem, $attr->{$a}, 0);
+ $node->setAttributeNode ($att);
+ }
+ }
+ else
+ {
+ # We're assuming that all attributes were specified (1)
+ for my $a (keys %$attr)
+ {
+ my $att = $doc->createAttribute ($a, $attr->{$a}, 1);
+ $node->setAttributeNode ($att);
+ }
+ }
+}
+
+sub end_element
+{
+ my $self = shift;
+ $self->{Element} = $self->{Element}->getParentNode;
+ undef $self->{LastText};
+
+ # Check for end of root element
+ $self->{EndDoc} = 1 if ($self->{Element} == $self->{Document});
+}
+
+sub entity_reference # was Default
+{
+ my $self = $_[0];
+ my $name = $_[1]->{Name};
+
+ $self->{Element}->appendChild (
+ $self->{Document}->createEntityReference ($name));
+ undef $self->{LastText};
+}
+
+sub start_cdata
+{
+ my $self = shift;
+ $self->{InCDATA} = 1;
+}
+
+sub end_cdata
+{
+ my $self = shift;
+ $self->{InCDATA} = 0;
+}
+
+sub comment
+{
+ my $self = $_[0];
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ undef $self->{LastText};
+ my $comment = $self->{Document}->createComment ($_[1]->{Data});
+ $self->{Element}->appendChild ($comment);
+}
+
+sub doctype_decl
+{
+ my ($self, $hash) = @_;
+
+ $self->{DocType}->setParams ($hash->{Name}, $hash->{SystemId},
+ $hash->{PublicId}, $hash->{Internal});
+ $self->{SawDocType} = 1;
+}
+
+sub attlist_decl
+{
+ my ($self, $hash) = @_;
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ $self->{DocType}->addAttDef ($hash->{ElementName},
+ $hash->{AttributeName},
+ $hash->{Type},
+ $hash->{Default},
+ $hash->{Fixed});
+}
+
+sub xml_decl
+{
+ my ($self, $hash) = @_;
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ undef $self->{LastText};
+ $self->{Document}->setXMLDecl (new XML::DOM::XMLDecl ($self->{Document},
+ $hash->{Version},
+ $hash->{Encoding},
+ $hash->{Standalone}));
+}
+
+sub entity_decl
+{
+ my ($self, $hash) = @_;
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ # Parameter Entities names are passed starting with '%'
+ my $parameter = 0;
+
+#?? parameter entities currently not supported by PerlSAX!
+
+ undef $self->{LastText};
+ $self->{DocType}->addEntity ($parameter, $hash->{Name}, $hash->{Value},
+ $hash->{SystemId}, $hash->{PublicId},
+ $hash->{Notation});
+}
+
+# Unparsed is called when it encounters e.g:
+#
+# <!ENTITY logo SYSTEM "http://server/logo.gif" NDATA gif>
+#
+sub unparsed_decl
+{
+ my ($self, $hash) = @_;
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ # same as regular ENTITY, as far as DOM is concerned
+ $self->entity_decl ($hash);
+}
+
+sub element_decl
+{
+ my ($self, $hash) = @_;
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ undef $self->{LastText};
+ $self->{DocType}->addElementDecl ($hash->{Name}, $hash->{Model});
+}
+
+sub notation_decl
+{
+ my ($self, $hash) = @_;
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ undef $self->{LastText};
+ $self->{DocType}->addNotation ($hash->{Name}, $hash->{Base},
+ $hash->{SystemId}, $hash->{PublicId});
+}
+
+sub processing_instruction
+{
+ my ($self, $hash) = @_;
+
+ local $XML::DOM::IgnoreReadOnly = 1;
+
+ undef $self->{LastText};
+ $self->{Element}->appendChild (new XML::DOM::ProcessingInstruction
+ ($self->{Document}, $hash->{Target}, $hash->{Data}));
+}
+
+return 1;
+
+__END__
+
+=head1 NAME
+
+XML::Handler::BuildDOM - PerlSAX handler that creates XML::DOM document structures
+
+=head1 SYNOPSIS
+
+ use XML::Handler::BuildDOM;
+ use XML::Parser::PerlSAX;
+
+ my $handler = new XML::Handler::BuildDOM (KeepCDATA => 1);
+ my $parser = new XML::Parser::PerlSAX (Handler => $handler);
+
+ my $doc = $parser->parsefile ("file.xml");
+
+=head1 DESCRIPTION
+
+XML::Handler::BuildDOM creates L<XML::DOM> document structures
+(i.e. L<XML::DOM::Document>) from PerlSAX events.
+
+This class used to be called L<XML::PerlSAX::DOM> prior to libxml-enno 1.0.1.
+
+=head2 CONSTRUCTOR OPTIONS
+
+The XML::Handler::BuildDOM constructor supports the following options:
+
+=over 4
+
+=item * KeepCDATA => 1
+
+If set to 0 (default), CDATASections will be converted to regular text.
+
+=item * Document => $doc
+
+If undefined, start_document will extract it from Element or DocType (if set),
+otherwise it will create a new XML::DOM::Document.
+
+=item * Element => $elem
+
+If undefined, it is set to Document. This will be the insertion point (or parent)
+for the nodes defined by the following callbacks.
+
+=item * DocType => $doctype
+
+If undefined, start_document will extract it from Document (if possible).
+Otherwise it adds a new XML::DOM::DocumentType to the Document.
+
+=back
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Handler/CanonXMLWriter.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,180 @@
+#
+# Copyright (C) 1998, 1999 Ken MacLeod
+# XML::Handler::CanonXMLWriter is free software; you can redistribute
+# it and/or modify it under the same terms as Perl itself.
+#
+# $Id: CanonXMLWriter.pm,v 1.2 1999/12/22 21:15:00 kmacleod Exp $
+#
+
+use strict;
+
+package XML::Handler::CanonXMLWriter;
+use vars qw{ $VERSION %char_entities };
+
+# will be substituted by make-rel script
+$VERSION = "0.07";
+
+%char_entities = (
+ "\x09" => '	',
+ "\x0a" => ' ',
+ "\x0d" => ' ',
+ '&' => '&',
+ '<' => '<',
+ '>' => '>',
+ '"' => '"',
+);
+
+sub new {
+ my ($class, %args) = @_;
+
+ my $self = \%args;
+ return bless $self, $class;
+}
+
+sub start_document {
+ my $self = shift; my $document = shift;
+
+ $self->{'_text_array'} = [];
+}
+
+sub end_document {
+ my $self = shift; my $document = shift;
+
+ if (defined $self->{IOHandle}) {
+ return ();
+ } else {
+ my $text = join ('', @{$self->{'_text_array'}});
+ undef $self->{'_text_array'};
+ return $text;
+ }
+}
+
+sub start_element {
+ my $self = shift; my $element = shift;
+
+ $self->_print('<' . $element->{Name});
+ my $key;
+ my $attrs = $element->{Attributes};
+ foreach $key (sort keys %$attrs) {
+ $self->_print(" $key=\"" . $self->_escape($attrs->{$key}) . '"');
+ }
+ $self->_print('>');
+}
+
+sub end_element {
+ my $self = shift; my $element = shift;
+
+ $self->_print('</' . $element->{Name} . '>');
+}
+
+sub characters {
+ my $self = shift; my $characters = shift;
+
+ $self->_print($self->_escape($characters->{Data}));
+}
+
+sub ignorable_whitespace {
+ my $self = shift; my $characters = shift;
+
+ $self->_print($self->_escape($characters->{Data}));
+}
+
+sub processing_instruction {
+ my $self = shift; my $pi = shift;
+
+ $self->_print('<?' . $pi->{Target} . ' ' . $pi->{Data} . '?>');
+}
+
+sub entity {
+ # entities don't occur in text
+ return ();
+}
+
+sub comment {
+ my $self = shift; my $comment = shift;
+
+ if ($self->{PrintComments}) {
+ $self->_print('<!--' . $comment->{Data} . '-->');
+ } else {
+ return ();
+ }
+}
+
+sub _print {
+ my $self = shift; my $string = shift;
+
+ if (defined $self->{IOHandle}) {
+ $self->{IOHandle}->print($string);
+ return ();
+ } else {
+ push @{$self->{'_text_array'}}, $string;
+ }
+}
+
+sub _escape {
+ my $self = shift; my $string = shift;
+
+ $string =~ s/([\x09\x0a\x0d&<>"])/$char_entities{$1}/ge;
+ return $string;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::Handler::CanonXMLWriter - output XML in canonical XML format
+
+=head1 SYNOPSIS
+
+ use XML::Handler::CanonXMLWriter;
+
+ $writer = XML::Handler::CanonXMLWriter OPTIONS;
+ $parser->parse(Handler => $writer);
+
+=head1 DESCRIPTION
+
+C<XML::Handler::CanonXMLWriter> is a PerlSAX handler that will return
+a string or write a stream of canonical XML for an XML instance and it's
+content.
+
+C<XML::Handler::CanonXMLWriter> objects hold the options used for
+writing the XML objects. Options can be supplied when the the object
+is created,
+
+ $writer = new XML::Handler::CanonXMLWriter PrintComments => 1;
+
+or modified at any time before calling the parser's `C<parse()>' method:
+
+ $writer->{PrintComments} = 0;
+
+=head1 OPTIONS
+
+=over 4
+
+=item IOHandle
+
+IOHandle contains a handle for writing the canonical XML to. If an
+IOHandle is not provided, the canonical XML string will be returned
+from `C<parse()>'.
+
+=item PrintComments
+
+By default comments are not written to the output. Setting comment to
+a true value will include comments in the output.
+
+=back
+
+=head1 AUTHOR
+
+Ken MacLeod, ken@bitsko.slc.ut.us
+
+=head1 SEE ALSO
+
+perl(1), PerlSAX
+
+James Clark's Canonical XML definition
+<http://www.jclark.com/xml/canonxml.html>
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Handler/Composer.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,821 @@
+package XML::Handler::Composer;
+use strict;
+use XML::UM;
+use Carp;
+
+use vars qw{ %DEFAULT_QUOTES %XML_MAPPING_CRITERIA };
+
+%DEFAULT_QUOTES = (
+ XMLDecl => '"',
+ Attr => '"',
+ Entity => '"',
+ SystemLiteral => '"',
+ );
+
+%XML_MAPPING_CRITERIA =
+(
+ Text =>
+ {
+ '<' => '<',
+ '&' => '&',
+
+ ']]>' => ']]>',
+ },
+
+ CDataSection =>
+ {
+ ']]>' => ']]>', # NOTE: this won't be translated back correctly
+ },
+
+ Attr => # attribute value (assuming double quotes "" are used)
+ {
+# '"' => '"', # Use ("'" => ''') when using single quotes
+ '<' => '<',
+ '&' => '&',
+ },
+
+ Entity => # entity value (assuming double quotes "" are used)
+ {
+# '"' => '"', # Use ("'" => ''') when using single quotes
+ '%' => '%',
+ '&' => '&',
+ },
+
+ Comment =>
+ {
+ '--' => '--', # NOTE: this won't be translated back correctly
+ },
+
+ ProcessingInstruction =>
+ {
+ '?>' => '?>', # not sure if this will be translated back correctly
+ },
+
+ # The SYSTEM and PUBLIC identifiers in DOCTYPE declaration (quoted strings)
+ SystemLiteral =>
+ {
+# '"' => '"', # Use ("'" => ''') when using single quotes
+ },
+
+);
+
+sub new
+{
+ my ($class, %options) = @_;
+ my $self = bless \%options, $class;
+
+ $self->{EndWithNewline} = 1 unless defined $self->{EndWithNewline};
+
+ if (defined $self->{Newline})
+ {
+ $self->{ConvertNewlines} = 1;
+ }
+ else
+ {
+ # Use this when printing newlines in case the user didn't specify one
+ $self->{Newline} = "\x0A";
+ }
+
+ $self->{DocTypeIndent} = $self->{Newline} . " "
+ unless defined $self->{DocTypeIndent};
+
+ $self->{IndentAttlist} = " " unless defined $self->{IndentAttlist};
+
+ $self->{Print} = sub { print @_ } unless defined $self->{Print};
+
+ $self->{Quote} ||= {};
+ for my $q (keys %DEFAULT_QUOTES)
+ {
+ $self->{Quote}->{$q} ||= $DEFAULT_QUOTES{$q};
+ }
+
+ # Convert to UTF-8 by default, i.e. when <?xml encoding=...?> is missing
+ # and no {Encoding} is specified.
+ # Note that the internal representation *is* UTF-8, so we
+ # simply return the (string) parameter.
+ $self->{Encode} = sub { shift } unless defined $self->{Encode};
+
+ # Convert unmapped characters to hexadecimal constants a la '号'
+ $self->{EncodeUnmapped} = \&XML::UM::encode_unmapped_hex
+ unless defined $self->{EncodeUnmapped};
+
+ my $encoding = $self->{Encoding};
+ $self->setEncoding ($encoding) if defined $encoding;
+
+ $self->initMappers;
+
+ $self;
+}
+
+#
+# Setup the mapping routines that convert '<' to '<' etc.
+# for the specific XML constructs.
+#
+sub initMappers
+{
+ my $self = shift;
+ my %escape;
+ my $convert_newlines = $self->{ConvertNewlines};
+
+ for my $n (qw{ Text Comment CDataSection Attr SystemLiteral
+ ProcessingInstruction Entity })
+ {
+ $escape{$n} = $self->create_utf8_mapper ($n, $convert_newlines);
+ }
+
+ # Text with xml:space="preserve", should not have newlines converted.
+ $escape{TextPreserveNL} = $self->create_utf8_mapper ('Text', 0);
+ # (If newline conversion is inactive, $escape{TextPreserveNL} does the
+ # same as $escape{Text} defined above ...)
+
+ $self->{Escape} = \%escape;
+}
+
+sub setEncoding
+{
+ my ($self, $encoding) = @_;
+
+ $self->{Encode} = XML::UM::get_encode (
+ Encoding => $encoding, EncodeUnmapped => $self->{EncodeUnmapped});
+}
+
+sub create_utf8_mapper
+{
+ my ($self, $construct, $convert_newlines) = @_;
+
+ my $c = $XML_MAPPING_CRITERIA{$construct};
+ croak "no XML mapping criteria defined for $construct"
+ unless defined $c;
+
+ my %hash = %$c;
+
+ # If this construct appears between quotes in the XML document
+ # (and it has a quoting character defined),
+ # ensure that the quoting character is appropriately converted
+ # to " or '
+ my $quote = $self->{Quote}->{$construct};
+ if (defined $quote)
+ {
+ $hash{$quote} = $quote eq '"' ? '"' : ''';
+ }
+
+ if ($convert_newlines)
+ {
+ $hash{"\x0A"} = $self->{Newline};
+ }
+
+ gen_utf8_subst (%hash);
+}
+
+#
+# Converts a string literal e.g. "ABC" into '\x41\x42\x43'
+# so it can be stuffed into a regular expression
+#
+sub str_to_hex # static
+{
+ my $s = shift;
+
+ $s =~ s/(.)/ sprintf ("\\x%02x", ord ($1)) /egos;
+
+ $s;
+}
+
+#
+# In later perl versions (5.005_55 and up) we can simply say:
+#
+# use utf8;
+# $literals = join ("|", map { str_to_hex ($_) } keys %hash);
+# $s =~ s/($literals)/$hash{$1}/ego;
+#
+
+sub gen_utf8_subst # static
+{
+ my (%hash) = @_;
+
+ my $code = 'sub { my $s = shift; $s =~ s/(';
+ $code .= join ("|", map { str_to_hex ($_) } keys %hash);
+ $code .= ')|(';
+ $code .= '[\\x00-\\xBF]|[\\xC0-\\xDF].|[\\xE0-\\xEF]..|[\\xF0-\\xFF]...';
+ $code .= ')/ defined ($1) ? $hash{$1} : $2 /ego; $s }';
+
+ my $f = eval $code;
+ croak "XML::Handler::Composer - can't eval code: $code\nReason: $@" if $@;
+
+ $f;
+}
+
+# This should be optimized!
+sub print
+{
+ my ($self, $str) = @_;
+ $self->{Print}->($self->{Encode}->($str));
+}
+
+# Used by start_element. It determines the style in which empty elements
+# are printed. The default implementation returns "/>" so they are printed
+# like this: <a/>
+# Override this method to support e.g. XHTML style tags.
+sub get_compressed_element_suffix
+{
+ my ($self, $event) = @_;
+
+ "/>";
+
+ # return " />" for XHTML style, or
+ # "><$tagName/>" for uncompressed tags (where $tagName is $event->{Name})
+}
+
+#----- PerlSAX handlers -------------------------------------------------------
+
+sub start_document
+{
+ my ($self) = @_;
+
+ $self->{InCDATA} = 0;
+ $self->{DTD} = undef;
+ $self->{PreserveWS} = 0; # root element has xml:space="default"
+ $self->{PreserveStack} = [];
+ $self->{PrintedXmlDecl} = 0; # whether <?xml ...?> was printed
+}
+
+sub end_document
+{
+ my ($self) = @_;
+
+ # Print final Newline at the end of the XML document (if desired)
+ $self->print ($self->{Newline}) if $self->{EndWithNewline};
+}
+
+# This event is received *AFTER* the Notation, Element, Attlist etc. events
+# that are contained within the DTD.
+sub doctype_decl
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $q = $self->{Quote}->{SystemLiteral};
+ my $escape_literal = $self->{Escape}->{SystemLiteral};
+
+ my $name = $event->{Name};
+ my $sysId = $event->{SystemId};
+ $sysId = &$escape_literal ($sysId) if defined $sysId;
+ my $pubId = $event->{PublicId};
+ $pubId = &$escape_literal ($pubId) if defined $pubId;
+
+ my $str = "<!DOCTYPE $name";
+ if (defined $pubId)
+ {
+ $str .= " PUBLIC $q$pubId$q $q$sysId$q";
+ }
+ elsif (defined $sysId)
+ {
+ $str .= " SYSTEM $q$sysId$q";
+ }
+
+ my $dtd_contents = $self->{DTD};
+ my $nl = $self->{Newline};
+
+ if (defined $dtd_contents)
+ {
+ delete $self->{DTD};
+
+ $str .= " [$dtd_contents$nl]>$nl";
+ }
+ else
+ {
+ $str .= ">$nl";
+ }
+ $self->print ($str);
+}
+
+sub start_element
+{
+ my ($self, $event) = @_;
+
+ my $preserve_stack = $self->{PreserveStack};
+ if (@$preserve_stack == 0)
+ {
+ # This is the root element. Print the <?xml ...?> declaration now if
+ # it wasn't printed and it should be.
+ $self->flush_xml_decl;
+ }
+
+ my $str = "<" . $event->{Name};
+
+ my $suffix = ">";
+ if ($event->{Compress})
+ {
+ $suffix = $self->get_compressed_element_suffix ($event);
+ }
+
+ # Push PreserveWS state of parent element on the stack
+ push @{ $preserve_stack }, $self->{PreserveWS};
+ $self->{PreserveWS} = $event->{PreserveWS};
+
+ my $ha = $event->{Attributes};
+ my @attr;
+ if (exists $event->{AttributeOrder})
+ {
+ my $defaulted = $event->{Defaulted};
+ if (defined $defaulted && !$self->{PrintDefaultAttr})
+ {
+ if ($defaulted > 0)
+ {
+ @attr = @{ $event->{AttributeOrder} }[0 .. $defaulted - 1];
+ }
+ # else: all attributes are defaulted i.e. @attr = ();
+ }
+ else # no attr are defaulted
+ {
+ @attr = @{ $event->{AttributeOrder} };
+ }
+ }
+ else # no attr order defined
+ {
+ @attr = keys %$ha;
+ }
+
+ my $escape = $self->{Escape}->{Attr};
+ my $q = $self->{Quote}->{Attr};
+
+ for (my $i = 0; $i < @attr; $i++)
+ {
+#?? could print a newline every so often...
+ my $name = $attr[$i];
+ my $val = &$escape ($ha->{$name});
+ $str .= " $name=$q$val$q";
+ }
+ $str .= $suffix;
+
+ $self->print ($str);
+}
+
+sub end_element
+{
+ my ($self, $event) = @_;
+
+ $self->{PreserveWS} = pop @{ $self->{PreserveStack} };
+
+ return if $event->{Compress};
+
+ $self->print ("</" . $event->{Name} . ">");
+}
+
+sub characters
+{
+ my ($self, $event) = @_;
+
+ if ($self->{InCDATA})
+ {
+#?? should this use $self->{PreserveWS} ?
+
+ my $esc = $self->{Escape}->{CDataSection};
+ $self->print (&$esc ($event->{Data}));
+ }
+ else # regular text
+ {
+ my $esc = $self->{PreserveWS} ?
+ $self->{Escape}->{TextPreserveNL} :
+ $self->{Escape}->{Text};
+
+ $self->print (&$esc ($event->{Data}));
+ }
+}
+
+sub start_cdata
+{
+ my $self = shift;
+ $self->{InCDATA} = 1;
+
+ $self->print ("<![CDATA[");
+}
+
+sub end_cdata
+{
+ my $self = shift;
+ $self->{InCDATA} = 0;
+
+ $self->print ("]]>");
+}
+
+sub comment
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $esc = $self->{Escape}->{Comment};
+#?? still need to support comments in the DTD
+
+ $self->print ("<!--" . &$esc ($event->{Data}) . "-->");
+}
+
+sub entity_reference
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $par = $event->{Parameter} ? '%' : '&';
+#?? parameter entities (like %par;) are NOT supported!
+# PerlSAX::handle_default should be fixed!
+
+ $self->print ($par . $event->{Name} . ";");
+}
+
+sub unparsed_entity_decl
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ $self->entity_decl ($event);
+}
+
+sub notation_decl
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $name = $event->{Name};
+ my $sysId = $event->{SystemId};
+ my $pubId = $event->{PublicId};
+
+ my $q = $self->{Quote}->{SystemLiteral};
+ my $escape = $self->{Escape}->{SystemLiteral};
+
+ $sysId = &$escape ($sysId) if defined $sysId;
+ $pubId = &$escape ($pubId) if defined $pubId;
+
+ my $str = $self->{DocTypeIndent} . "<!NOTATION $name";
+
+ if (defined $pubId)
+ {
+ $str .= " PUBLIC $q$pubId$q";
+ }
+ if (defined $sysId)
+ {
+ $str .= " SYSTEM $q$sysId$q";
+ }
+ $str .= ">";
+
+ $self->{DTD} .= $str;
+}
+
+sub element_decl
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $name = $event->{Name};
+ my $model = $event->{Model};
+
+ $self->{DTD} .= $self->{DocTypeIndent} . "<!ELEMENT $name $model>";
+}
+
+sub entity_decl
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $name = $event->{Name};
+
+ my $par = "";
+ if ($name =~ /^%/)
+ {
+ # It's a parameter entity (i.e. %ent; instead of &ent;)
+ $name = substr ($name, 1);
+ $par = "% ";
+ }
+
+ my $str = $self->{DocTypeIndent} . "<!ENTITY $par$name";
+
+ my $value = $event->{Value};
+ my $sysId = $event->{SysId};
+ my $pubId = $event->{PubId};
+ my $ndata = $event->{Ndata};
+
+ my $q = $self->{Quote}->{SystemLiteral};
+ my $escape = $self->{Escape}->{SystemLiteral};
+
+ if (defined $value)
+ {
+#?? use {Entity} quote etc...
+ my $esc = $self->{Escape}->{Entity};
+ my $p = $self->{Quote}->{Entity};
+ $str .= " $p" . &$esc ($value) . $p;
+ }
+ if (defined $pubId)
+ {
+ $str .= " PUBLIC $q" . &$escape ($pubId) . $q;
+ }
+ elsif (defined $sysId)
+ {
+ $str .= " SYSTEM";
+ }
+
+ if (defined $sysId)
+ {
+ $str .= " $q" . &$escape ($sysId) . $q;
+ }
+ $str .= " NDATA $ndata" if defined $ndata;
+ $str .= ">";
+
+ $self->{DTD} .= $str;
+}
+
+sub attlist_decl
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $elem = $event->{ElementName};
+
+ my $str = $event->{AttributeName} . " " . $event->{Type};
+ $str .= " #FIXED" if defined $event->{Fixed};
+
+ $str = $str;
+
+ my $def = $event->{Default};
+ if (defined $def)
+ {
+ $str .= " $def";
+
+ # Note sometimes Default is a value with quotes.
+ # We'll use the existing quotes in that case...
+ }
+
+ my $indent;
+ if (!exists($event->{First}) || $event->{First})
+ {
+ $self->{DTD} .= $self->{DocTypeIndent} . "<!ATTLIST $elem";
+
+ if ($event->{MoreFollow})
+ {
+ $indent = $self->{Newline} . $self->{IndentAttlist};
+ }
+ else
+ {
+ $indent = " ";
+ }
+ }
+ else
+ {
+ $indent = $self->{Newline} . $self->{IndentAttlist};
+ }
+
+ $self->{DTD} .= $indent . $str;
+
+ unless ($event->{MoreFollow})
+ {
+ $self->{DTD} .= '>';
+ }
+}
+
+sub xml_decl
+{
+ my ($self, $event) = @_;
+ return if $self->{PrintedXmlDecl}; # already printed it
+
+ my $version = $event->{Version};
+ my $encoding = $event->{Encoding};
+ if (defined $self->{Encoding})
+ {
+ $encoding = $self->{Encoding};
+ }
+ else
+ {
+ $self->setEncoding ($encoding) if defined $encoding;
+ }
+
+ my $standalone = $event->{Standalone};
+ $standalone = ($standalone ? "yes" : "no") if defined $standalone;
+
+ my $q = $self->{Quote}->{XMLDecl};
+ my $nl = $self->{Newline};
+
+ my $str = "<?xml";
+ $str .= " version=$q$version$q" if defined $version;
+ $str .= " encoding=$q$encoding$q" if defined $encoding;
+ $str .= " standalone=$q$standalone$q" if defined $standalone;
+ $str .= "?>$nl$nl";
+
+ $self->print ($str);
+ $self->{PrintedXmlDecl} = 1;
+}
+
+#
+# Prints the <xml ...?> declaration if it wasn't already printed
+# *and* the user wanted it to be printed (because s/he set $self->{Encoding})
+#
+sub flush_xml_decl
+{
+ my ($self) = @_;
+ return if $self->{PrintedXmlDecl};
+
+ if (defined $self->{Encoding})
+ {
+ $self->xml_decl ({ Version => '1.0', Encoding => $self->{Encoding} });
+ }
+
+ # If it wasn't printed just now, it doesn't need to be printed at all,
+ # so pretend we did print it.
+ $self->{PrintedXmlDecl} = 1;
+}
+
+sub processing_instruction
+{
+ my ($self, $event) = @_;
+ $self->flush_xml_decl;
+
+ my $escape = $self->{Escape}->{ProcessingInstruction};
+
+ my $str = "<?" . $event->{Target} . " " .
+ &$escape ($event->{Data}). "?>";
+
+ $self->print ($str);
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::Handler::Composer - Another XML printer/writer/generator
+
+=head1 SYNOPSIS
+
+use XML::Handler::Composer;
+
+my $composer = new XML::Handler::Composer ( [OPTIONS] );
+
+=head1 DESCRIPTION
+
+XML::Handler::Composer is similar to XML::Writer, XML::Handler::XMLWriter,
+XML::Handler::YAWriter etc. in that it generates XML output.
+
+This implementation may not be fast and it may not be the best solution for
+your particular problem, but it has some features that may be missing in the
+other implementations:
+
+=over 4
+
+=item * Supports every output encoding that L<XML::UM> supports
+
+L<XML::UM> supports every encoding for which there is a mapping file
+in the L<XML::Encoding> distribution.
+
+=item * Pretty printing
+
+When used with L<XML::Filter::Reindent>.
+
+=item * Fine control over which kind of quotes are used
+
+See options below.
+
+=item * Supports PerlSAX interface
+
+=back
+
+=head1 Constructor Options
+
+=over 4
+
+=item * EndWithNewline (Default: 1)
+
+Whether to print a newline at the end of the file (i.e. after the root element)
+
+=item * Newline (Default: undef)
+
+If defined, which newline to use for printing.
+(Note that XML::Parser etc. convert newlines into "\x0A".)
+
+If undef, newlines will not be converted and XML::Handler::Composer will
+use "\x0A" when printing.
+
+A value of "\n" will convert the internal newlines into the platform
+specific line separator.
+
+See the PreserveWS option in the characters event (below) for finer control
+over when newline conversion is active.
+
+=item * DocTypeIndent (Default: a Newline and 2 spaces)
+
+Newline plus indent that is used to separate lines inside the DTD.
+
+=item * IndentAttList (Default: 8 spaces)
+
+Indent used when printing an <!ATTLIST> declaration that has more than one
+attribute definition, e.g.
+
+ <!ATTLIST my_elem
+ attr1 CDATA "foo"
+ attr2 CDATA "bar"
+ >
+
+=item * Quote (Default: { XMLDecl => '"', Attr => '"', Entity => '"', SystemLiteral => '"' })
+
+Quote contains a reference to a hash that defines which quoting characters
+to use when printing XML declarations (XMLDecl), attribute values (Attr),
+<!ENTITY> values (Entity) and system/public literals (SystemLiteral)
+as found in <!DOCTYPE>, <!ENTITY> declarations etc.
+
+=item * PrintDefaultAttr (Default: 0)
+
+If 1, prints attribute values regardless of whether they are default
+attribute values (as defined in <!ATTLIST> declarations.)
+Normally, default attributes are not printed.
+
+=item * Encoding (Default: undef)
+
+Defines the output encoding (if specified.)
+Note that future calls to the xml_decl() handler may override this setting
+(if they contain an Encoding definition.)
+
+=item * EncodeUnmapped (Default: \&XML::UM::encode_unmapped_dec)
+
+Defines how Unicode characters not found in the mapping file (of the
+specified encoding) are printed.
+By default, they are converted to decimal entity references, like '{'
+
+Use \&XML::UM::encode_unmapped_hex for hexadecimal constants, like '«'
+
+=item * Print (Default: sub { print @_ }, which prints to stdout)
+
+The subroutine that is used to print the encoded XML output.
+The default prints the string to stdout.
+
+=back
+
+=head1 Method: get_compressed_element_suffix ($event)
+
+Override this method to support the different styles for printing
+empty elements in compressed notation, e.g. <p/>, <p></p>, <p />, <p>.
+
+The default returns "/>", which results in <p/>.
+Use " />" for XHTML style elements or ">" for certain HTML style elements.
+
+The $event parameter is the hash reference that was received from the
+start_element() handler.
+
+=head1 Extra PerlSAX event information
+
+XML::Handler::Composer relies on hints from previous SAX filters to
+format certain parts of the XML.
+These SAX filters (e.g. XML::Filter::Reindent) pass extra information by adding
+name/value pairs to the appropriate PerlSAX events (the events themselves are
+hash references.)
+
+=over 4
+
+=item * entity_reference: Parameter => 1
+
+If Parameter is 1, it means that it is a parameter entity reference.
+A parameter entity is referenced with %ent; instead of &ent; and the
+entity declaration starts with <!ENTITY % ent ...> instead of <!ENTITY ent ...>
+
+NOTE: This should be added to the PerlSAX interface!
+
+=item * start_element/end_element: Compress => 1
+
+If Compress is 1 in both the start_element and end_element event, the element
+will be printed in compressed form, e.g. <a/> instead of <a></a>.
+
+=item * start_element: PreserveWS => 1
+
+If newline conversion is active (i.e. Newline was defined in the constructor),
+then newlines will *NOT* be converted in text (character events) within this
+element.
+
+=item * attlist_decl: First, MoreFollow
+
+The First and MoreFollow options can be used to force successive <!ATTLIST>
+declarations for the same element to be merged, e.g.
+
+ <!ATTLIST my_elem
+ attr1 CDATA "foo"
+ attr2 CDATA "bar"
+ attr3 CDATA "quux"
+ >
+
+In this example, the attlist_decl event for foo should contain
+(First => 1, MoreFollow => 1) and the event for bar should contain
+(MoreFollow => 1). The quux event should have no extra info.
+
+'First' indicates that the event is the first of a sequence.
+'MoreFollow' indicates that more events will follow in this sequence.
+
+If neither option is set by the preceding PerlSAX filter, each attribute
+definition will be printed as a separate <!ATTLIST> line.
+
+=back
+
+=head1 CAVEATS
+
+This code is highly experimental!
+It has not been tested well and the API may change.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Handler/PrintEvents.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,67 @@
+#
+# This PerlSAX handler prints out all the PerlSAX events/callbacks
+# it receives. Very useful when debugging.
+#
+
+package XML::Handler::PrintEvents;
+use strict;
+use XML::Filter::SAXT;
+
+my @EXTRA_HANDLERS = ( 'ignorable_whitespace' );
+
+sub new
+{
+ my ($class, %options) = @_;
+ bless \%options, $class;
+}
+
+sub print_event
+{
+ my ($self, $event_name, $event) = @_;
+
+ printf "%-22s ", $event_name;
+ if (defined $event)
+ {
+ print join (", ", map { "$_ => [" .
+ (defined $event->{$_} ? $event->{$_} : "(undef)")
+ . "]" } keys %$event);
+ }
+ print "\n";
+}
+
+#
+# This generates the PerlSAX handler methods for PrintEvents.
+# They basically forward the event to print_event() while adding the callback
+# (event) name.
+#
+for my $cb (@EXTRA_HANDLERS, map { @{$_} } values %XML::Filter::SAXT::SAX_HANDLERS)
+{
+ eval "sub $cb { shift->print_event ('$cb', \@_) }";
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::Handler::PrintEvents - Prints PerlSAX events (for debugging)
+
+=head1 SYNOPSIS
+
+use XML::Handler::PrintEvents;
+
+my $pr = new XML::Handler::PrintEvents;
+
+=head1 DESCRIPTION
+
+This PerlSAX handler prints the PerlSAX events it receives to STDOUT.
+It can be useful when debugging PerlSAX filters.
+It supports all PerlSAX handler including ignorable_whitespace.
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Handler/Sample.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,101 @@
+# This template file is in the Public Domain.
+# You may do anything you want with this file.
+#
+# $Id: Sample.pm,v 1.4 1999/08/16 16:04:03 kmacleod Exp $
+#
+
+package XML::Handler::Sample;
+
+use vars qw{ $AUTOLOAD };
+
+sub new {
+ my $type = shift;
+ my $self = ( $#_ == 0 ) ? shift : { @_ };
+
+ return bless $self, $type;
+}
+
+# Basic PerlSAX
+sub start_document { print "start_document\n"; }
+sub end_document { print "end_document\n"; }
+sub start_element { print "start_element\n"; }
+sub end_element { print "end_element\n"; }
+sub characters { print "characters\n"; }
+sub processing_instruction { print "processing_instruction\n"; }
+sub ignorable_whitespace { print "ignorable_whitespace\n"; }
+
+# Additional expat callbacks in XML::Parser::PerlSAX
+sub comment { print "comment\n"; }
+sub notation_decl { print "notation_decl\n"; }
+sub unparsed_entity_decl { print "unparsed_entity_decl\n"; }
+sub entity_decl { print "entity_decl\n"; }
+sub element_decl { print "element_decl\n"; }
+sub doctype_decl { print "doctype_decl\n"; }
+sub xml_decl { print "xml_decl\n"; }
+
+# Additional SP/nsgmls callbacks in XML::ESISParser
+sub start_subdoc { print "start_subdoc\n"; }
+sub end_subdoc { print "start_subdoc\n"; }
+sub appinfo { print "appinfo\n"; }
+sub internal_entity_ref { print "sdata\n"; }
+sub external_entity_ref { print "sdata\n"; }
+sub record_end { print "record_end\n"; }
+sub internal_entity_decl { print "internal_entity_decl\n"; }
+sub external_entity_decl { print "external_entity_decl\n"; }
+sub external_sgml_entity_decl { print "external_sgml_entity_decl\n"; }
+sub subdoc_entity_decl { print "subdoc_entity_decl\n"; }
+sub notation { print "notation\n"; }
+sub error { print "error\n"; }
+sub conforming { print "conforming\n"; }
+
+# Others
+sub AUTOLOAD {
+ my $self = shift;
+
+ my $method = $AUTOLOAD;
+ $method =~ s/.*:://;
+ return if $method eq 'DESTROY';
+
+ print "UNRECOGNIZED $method\n";
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::Handler::Sample - a trivial PerlSAX handler
+
+=head1 SYNOPSIS
+
+ use XML::Parser::PerlSAX;
+ use XML::Handler::Sample;
+
+ $my_handler = XML::Handler::Sample->new;
+
+ XML::Parser::PerlSAX->new->parse(Source => { SystemId => 'REC-xml-19980210.xml' },
+ Handler => $my_handler);
+
+=head1 DESCRIPTION
+
+C<XML::Handler::Sample> is a trivial PerlSAX handler that prints out
+the name of each event it receives. The source for
+C<XML::Handler::Sample> lists all the currently known PerlSAX
+handler methods.
+
+C<XML::Handler::Sample> is intended for Perl module authors who wish
+to look at example PerlSAX handler modules. C<XML::Handler::Sample>
+can be used as a template for writing your own PerlSAX handler
+modules. C<XML::Handler::Sample> is in the Public Domain and can be
+used for any purpose without restriction.
+
+=head1 AUTHOR
+
+Ken MacLeod, ken@bitsko.slc.ut.us
+
+=head1 SEE ALSO
+
+perl(1), PerlSAX.pod(3)
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Handler/Subs.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,177 @@
+#
+# Copyright (C) 1999 Ken MacLeod
+# XML::Handler::XMLWriter is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+#
+# $Id: Subs.pm,v 1.2 1999/12/22 21:15:00 kmacleod Exp $
+#
+
+use strict;
+
+package XML::Handler::Subs;
+
+use UNIVERSAL;
+
+use vars qw{ $VERSION };
+
+# will be substituted by make-rel script
+$VERSION = "0.07";
+
+sub new {
+ my $type = shift;
+ my $self = ($#_ == 0) ? { %{ (shift) } } : { @_ };
+
+ return bless $self, $type;
+}
+
+sub start_document {
+ my ($self, $document) = @_;
+
+ $self->{Names} = [];
+ $self->{Nodes} = [];
+}
+
+sub end_document {
+ my ($self, $document) = @_;
+
+ delete $self->{Names};
+ delete $self->{Nodes};
+
+ return();
+}
+
+sub start_element {
+ my ($self, $element) = @_;
+
+ push @{$self->{Names}}, $element->{Name};
+ push @{$self->{Nodes}}, $element;
+
+ my $el_name = "s_" . $element->{Name};
+ $el_name =~ s/[^a-zA-Z0-9_]/_/g;
+ if ($self->can($el_name)) {
+ $self->$el_name($element);
+ return 1;
+ }
+
+ return 0;
+}
+
+sub end_element {
+ my ($self, $element) = @_;
+
+ my $called_sub = 0;
+ my $el_name = "e_" . $element->{Name};
+ $el_name =~ s/[^a-zA-Z0-9_]/_/g;
+ if ($self->can(${el_name})) {
+ $self->$el_name($element);
+ $called_sub = 1;
+ }
+
+ pop @{$self->{Names}};
+ pop @{$self->{Nodes}};
+
+ return $called_sub;
+}
+
+sub in_element {
+ my ($self, $name) = @_;
+
+ return ($self->{Names}[-1] eq $name);
+}
+
+sub within_element {
+ my ($self, $name) = @_;
+
+ my $count = 0;
+ foreach my $el_name (@{$self->{Names}}) {
+ $count ++ if ($el_name eq $name);
+ }
+
+ return $count;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::Handler::Subs - a PerlSAX handler base class for calling user-defined subs
+
+=head1 SYNOPSIS
+
+ use XML::Handler::Subs;
+
+ package MyHandlers;
+ use vars qw{ @ISA };
+
+ sub s_NAME { my ($self, $element) = @_ };
+ sub e_NAME { my ($self, $element) = @_ };
+
+ $self->{Names}; # an array of names
+ $self->{Nodes}; # an array of $element nodes
+
+ $handler = MyHandlers->new();
+ $self->in_element($name);
+ $self->within_element($name);
+
+=head1 DESCRIPTION
+
+C<XML::Handler::Subs> is a base class for PerlSAX handlers.
+C<XML::Handler::Subs> is subclassed to implement complete behavior and
+to add element-specific handling.
+
+Each time an element starts, a method by that name prefixed with `s_'
+is called with the element to be processed. Each time an element
+ends, a method with that name prefixed with `e_' is called. Any
+special characters in the element name are replaced by underscores.
+
+Subclassing XML::Handler::Subs in this way is similar to
+XML::Parser's Subs style.
+
+XML::Handler::Subs maintains a stack of element names,
+`C<$self->{Names}', and a stack of element nodes, `C<$self->{Nodes}>'
+that can be used by subclasses. The current element is pushed on the
+stacks before calling an element-name start method and popped off the
+stacks after calling the element-name end method. The
+`C<in_element()>' and `C<within_element()>' calls use these stacks.
+
+If the subclass implements `C<start_document()>', `C<end_document()>',
+`C<start_element()>', and `C<end_element()>', be sure to use
+`C<SUPER::>' to call the the superclass methods also. See perlobj(1)
+for details on SUPER::. `C<SUPER::start_element()>' and
+`C<SUPER::end_element()>' return 1 if an element-name method is
+called, they return 0 if no method was called.
+
+XML::Handler::Subs does not implement any other PerlSAX handlers.
+
+XML::Handler::Subs supports the following methods:
+
+=over 4
+
+=item new( I<OPTIONS> )
+
+A basic `C<new()>' method. `C<new()>' takes a list of key, value
+pairs or a hash and creates and returns a hash with those options; the
+hash is blessed into the subclass.
+
+=item in_element($name)
+
+Returns true if `C<$name>' is equal to the name of the innermost
+currently opened element.
+
+=item within_element($name)
+
+Returns the number of times the `C<$name>' appears in Names.
+
+=back
+
+=head1 AUTHOR
+
+Ken MacLeod, ken@bitsko.slc.ut.us
+
+=head1 SEE ALSO
+
+perl(1), PerlSAX.pod(3)
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Handler/XMLWriter.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,313 @@
+#
+# Copyright (C) 1999 Ken MacLeod
+# Portions derived from code in XML::Writer by David Megginson
+# XML::Handler::XMLWriter is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+#
+# $Id: XMLWriter.pm,v 1.2 1999/12/22 21:15:00 kmacleod Exp $
+#
+
+use strict;
+
+package XML::Handler::XMLWriter;
+use XML::Handler::Subs;
+
+use vars qw{ $VERSION @ISA $escapes };
+
+# will be substituted by make-rel script
+$VERSION = "0.07";
+
+@ISA = qw{ XML::Handler::Subs };
+
+$escapes = { '&' => '&',
+ '<' => '<',
+ '>' => '>',
+ '"' => '"'
+ };
+
+sub start_document {
+ my ($self, $document) = @_;
+
+ $self->SUPER::start_document($document);
+
+ # create a temporary Output_ in case we're creating a standard
+ # output file that we'll delete later.
+ if (!$self->{AsString} && !defined($self->{Output})) {
+ require IO::File;
+ import IO::File;
+ $self->{Output_} = new IO::File(">-");
+ } elsif (defined($self->{Output})) {
+ $self->{Output_} = $self->{Output};
+ }
+
+ if ($self->{AsString}) {
+ $self->{Strings} = [];
+ }
+
+ $self->print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+
+ # FIXME support Doctype declarations
+}
+
+sub end_document {
+ my ($self, $document) = @_;
+
+ if (defined($self->{Output_})) {
+ $self->{Output_}->print("\n");
+ delete $self->{Output_};
+ }
+
+ my $string = undef;
+ if (defined($self->{AsString})) {
+ push @{$self->{Strings}}, "\n";
+ $string = join('', @{$self->{Strings}});
+ delete $self->{Strings};
+ }
+
+ $self->SUPER::end_document($document);
+
+ return($string);
+}
+
+sub start_element {
+ my ($self, $element) = @_;
+
+ if ($self->SUPER::start_element($element) == 0) {
+ $self->print_start_element($element);
+ }
+}
+
+sub print_start_element {
+ my ($self, $element) = @_;
+
+ my $output = "<$element->{Name}";
+ if (defined($element->{Attributes})) {
+ foreach my $name (sort keys %{$element->{Attributes}}) {
+ my $esc_value = $element->{Attributes}{$name};
+ $esc_value =~ s/([\&\<\>\"])/$escapes->{$1}/ge;
+ $output .= " $name=\"$esc_value\"";
+ }
+ }
+
+ if ($self->{Newlines}) {
+ $output .= "\n";
+ }
+
+ $output .= ">";
+
+ $self->print($output);
+}
+
+sub end_element {
+ my ($self, $element) = @_;
+
+ if ($self->SUPER::end_element($element) == 0) {
+ $self->print_end_element($element);
+ }
+}
+
+sub print_end_element {
+ my ($self, $element) = @_;
+
+ my $output = "</$element->{Name}"
+ . ($self->{Newlines} ? "\n" : "") . ">";
+
+ $self->print($output);
+}
+sub characters {
+ my ($self, $characters) = @_;
+
+ my $output = $characters->{Data};
+
+ $output =~ s/([\&\<\>])/$escapes->{$1}/ge;
+
+ $self->print($output);
+}
+
+sub processing_instruction {
+ my ($self, $pi) = @_;
+
+ my $nl = ($#{$self->{Names}} == -1) ? "\n" : "";
+
+ my $output;
+ if ($self->{IsSGML}) {
+ $output = "<?$pi->{Data}>\n";
+ } else {
+ if ($pi->{Data}) {
+ $output = "<?$pi->{Target} $pi->{Data}?>$nl";
+ } else {
+ $output = "<?$pi->{Target}?>$nl";
+ }
+ }
+
+ $self->print($output);
+}
+
+sub ignorable_whitespace {
+ my ($self, $whitespace) = @_;
+
+ $self->print($whitespace->{Data});
+}
+
+sub comment {
+ my ($self, $comment) = @_;
+
+ my $nl = ($#{$self->{Names}} == -1) ? "\n" : "";
+
+ my $output = "<!-- $comment->{Data} -->$nl";
+
+ $self->print($output);
+}
+
+sub print {
+ my ($self, $output) = @_;
+
+ $self->{Output_}->print($output)
+ if (defined($self->{Output_}));
+
+ push(@{$self->{Strings}}, $output)
+ if (defined($self->{AsString}));
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::Handler::XMLWriter - a PerlSAX handler for writing readable XML
+
+=head1 SYNOPSIS
+
+ use XML::Parser::PerlSAX;
+ use XML::Handler::XMLWriter;
+
+ $my_handler = XML::Handler::XMLWriter->new( I<OPTIONS> );
+
+ XML::Parser::PerlSAX->new->parse(Source => { SystemId => 'REC-xml-19980210.xml' },
+ Handler => $my_handler);
+
+=head1 DESCRIPTION
+
+C<XML::Handler::XMLWriter> is a PerlSAX handler for writing readable
+XML (in contrast to Canonical XML, for example).
+XML::Handler::XMLWriter can be used with a parser to reformat XML,
+with XML::DOM or XML::Grove to write out XML, or with other PerlSAX
+modules that generate events.
+
+C<XML::Handler::XMLWriter> is intended to be used with PerlSAX event
+generators and does not perform any checking itself (for example,
+matching start and end element events). If you want to generate XML
+directly from your Perl code, use the XML::Writer module. XML::Writer
+has an easy to use interface and performs many checks to make sure
+that the XML you generate is well-formed.
+
+C<XML::Handler::XMLWriter> is a subclass of C<XML::Handler::Subs>.
+C<XML::Handler::XMLWriter> can be further subclassed to alter it's
+behavior or to add element-specific handling. In the subclass, each
+time an element starts, a method by that name prefixed with `s_' is
+called with the element to be processed. Each time an element ends, a
+method with that name prefixed with `e_' is called. Any special
+characters in the element name are replaced by underscores. If there
+isn't a start or end method for an element, the default action is to
+write the start or end tag. Start and end methods can use the
+`C<print_start_element()>' and `C<print_end_element()>' methods to
+print start or end tags. Subclasses can call the `C<print()>' method
+to write additional output.
+
+Subclassing XML::Handler::XMLWriter in this way is similar to
+XML::Parser's Stream style.
+
+XML::Handler::Subs maintains a stack of element names,
+`C<$self->{Names}', and a stack of element nodes, `C<$self->{Nodes}>'
+that can be used by subclasses. The current element is pushed on the
+stacks before calling an element-name start method and popped off the
+stacks after calling the element-name end method.
+
+See XML::Handler::Subs for additional methods.
+
+In addition to the standard PerlSAX handler methods (see PerlSAX for
+descriptions), XML::Handler::XMLWriter supports the following methods:
+
+=over 4
+
+=item new( I<OPTIONS> )
+
+Creates and returns a new instance of XML::Handler::XMLWriter with the
+given I<OPTIONS>. Options may be changed at any time by modifying
+them directly in the hash returned. I<OPTIONS> can be a list of key,
+value pairs or a hash. The following I<OPTIONS> are supported:
+
+=over 4
+
+=item Output
+
+An IO::Handle or one of it's subclasses (such as IO::File), if this
+parameter is not present and the AsString option is not used, the
+module will write to standard output.
+
+=item AsString
+
+Return the generated XML as a string from the `C<parse()>' method of
+the PerlSAX event generator.
+
+=item Newlines
+
+A true or false value; if this parameter is present and its value is
+true, then the module will insert an extra newline before the closing
+delimiter of start, end, and empty tags to guarantee that the document
+does not end up as a single, long line. If the paramter is not
+present, the module will not insert the newlines.
+
+=item IsSGML
+
+A true or false value; if this parameter is present and its value is
+true, then the module will generate SGML rather than XML.
+
+=back
+
+=item print_start_element($element)
+
+Print a start tag for `C<$element>'. This is the default action for
+the PerlSAX `C<start_element()>' handler, but subclasses may use this
+if they define a start method for an element.
+
+=item print_end_element($element)
+
+Prints an end tag for `C<$element>'. This is the default action for
+the PerlSAX `C<end_element()>' handler, but subclasses may use this
+if they define a start method for an element.
+
+=item print($output)
+
+Write `C<$output>' to Output and/or append it to the string to be
+returned. Subclasses may use this to write additional output.
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item *
+
+An Elements option that provides finer control over newlines than the
+Newlines option, where you can choose before and after newline for
+element start and end tags. Inspired by the Python XMLWriter.
+
+=item *
+
+Support Doctype and XML declarations.
+
+=back
+
+=head1 AUTHOR
+
+Ken MacLeod, ken@bitsko.slc.ut.us
+This module is partially derived from XML::Writer by David Megginson.
+
+=head1 SEE ALSO
+
+perl(1), PerlSAX.pod(3)
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Parser.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,466 @@
+=head1 WARNING
+
+This manual page was copied from the XML::Parser distribution (version 2.27)
+written by Clark Cooper. You can find newer versions at CPAN.
+
+=head1 NAME
+
+XML::Parser - A perl module for parsing XML documents
+
+=head1 SYNOPSIS
+
+ use XML::Parser;
+
+ $p1 = new XML::Parser(Style => 'Debug');
+ $p1->parsefile('REC-xml-19980210.xml');
+ $p1->parse('<foo id="me">Hello World</foo>');
+
+ # Alternative
+ $p2 = new XML::Parser(Handlers => {Start => \&handle_start,
+ End => \&handle_end,
+ Char => \&handle_char});
+ $p2->parse($socket);
+
+ # Another alternative
+ $p3 = new XML::Parser(ErrorContext => 2);
+
+ $p3->setHandlers(Char => \&text,
+ Default => \&other);
+
+ open(FOO, 'xmlgenerator |');
+ $p3->parse(*FOO, ProtocolEncoding => 'ISO-8859-1');
+ close(FOO);
+
+ $p3->parsefile('junk.xml', ErrorContext => 3);
+
+=head1 DESCRIPTION
+
+This module provides ways to parse XML documents. It is built on top of
+L<XML::Parser::Expat>, which is a lower level interface to James Clark's
+expat library. Each call to one of the parsing methods creates a new
+instance of XML::Parser::Expat which is then used to parse the document.
+Expat options may be provided when the XML::Parser object is created.
+These options are then passed on to the Expat object on each parse call.
+They can also be given as extra arguments to the parse methods, in which
+case they override options given at XML::Parser creation time.
+
+The behavior of the parser is controlled either by C<L</Style>> and/or
+C<L</Handlers>> options, or by L</setHandlers> method. These all provide
+mechanisms for XML::Parser to set the handlers needed by XML::Parser::Expat.
+If neither C<Style> nor C<Handlers> are specified, then parsing just
+checks the document for being well-formed.
+
+When underlying handlers get called, they receive as their first parameter
+the I<Expat> object, not the Parser object.
+
+=head1 METHODS
+
+=over 4
+
+=item new
+
+This is a class method, the constructor for XML::Parser. Options are passed
+as keyword value pairs. Recognized options are:
+
+=over 4
+
+=item * Style
+
+This option provides an easy way to create a given style of parser. The
+built in styles are: L<"Debug">, L<"Subs">, L<"Tree">, L<"Objects">,
+and L<"Stream">.
+Custom styles can be provided by giving a full package name containing
+at least one '::'. This package should then have subs defined for each
+handler it wishes to have installed. See L<"STYLES"> below
+for a discussion of each built in style.
+
+=item * Handlers
+
+When provided, this option should be an anonymous hash containing as
+keys the type of handler and as values a sub reference to handle that
+type of event. All the handlers get passed as their 1st parameter the
+instance of expat that is parsing the document. Further details on
+handlers can be found in L<"HANDLERS">. Any handler set here
+overrides the corresponding handler set with the Style option.
+
+=item * Pkg
+
+Some styles will refer to subs defined in this package. If not provided,
+it defaults to the package which called the constructor.
+
+=item * ErrorContext
+
+This is an Expat option. When this option is defined, errors are reported
+in context. The value should be the number of lines to show on either side
+of the line in which the error occurred.
+
+=item * ProtocolEncoding
+
+This is an Expat option. This sets the protocol encoding name. It defaults
+to none. The built-in encodings are: C<UTF-8>, C<ISO-8859-1>, C<UTF-16>, and
+C<US-ASCII>. Other encodings may be used if they have encoding maps in one
+of the directories in the @Encoding_Path list. Check L<"ENCODINGS"> for
+more information on encoding maps. Setting the protocol encoding overrides
+any encoding in the XML declaration.
+
+=item * Namespaces
+
+This is an Expat option. If this is set to a true value, then namespace
+processing is done during the parse. See L<XML::Parser::Expat/"Namespaces">
+for further discussion of namespace processing.
+
+=item * NoExpand
+
+This is an Expat option. Normally, the parser will try to expand references
+to entities defined in the internal subset. If this option is set to a true
+value, and a default handler is also set, then the default handler will be
+called when an entity reference is seen in text. This has no effect if a
+default handler has not been registered, and it has no effect on the expansion
+of entity references inside attribute values.
+
+=item * Stream_Delimiter
+
+This is an Expat option. It takes a string value. When this string is found
+alone on a line while parsing from a stream, then the parse is ended as if it
+saw an end of file. The intended use is with a stream of xml documents in a
+MIME multipart format. The string should not contain a trailing newline.
+
+=item * ParseParamEnt
+
+This is an Expat option. Unless standalone is set to "yes" in the XML
+declaration, setting this to a true value allows the external DTD to be read,
+and parameter entities to be parsed and expanded.
+
+=item * Non-Expat-Options
+
+If provided, this should be an anonymous hash whose keys are options that
+shouldn't be passed to Expat. This should only be of concern to those
+subclassing XML::Parser.
+
+=back
+
+=item setHandlers(TYPE, HANDLER [, TYPE, HANDLER [...]])
+
+This method registers handlers for various parser events. It overrides any
+previous handlers registered through the Style or Handler options or through
+earlier calls to setHandlers. By providing a false or undefined value as
+the handler, the existing handler can be unset.
+
+This method returns a list of type, handler pairs corresponding to the
+input. The handlers returned are the ones that were in effect prior to
+the call.
+
+See a description of the handler types in L<"HANDLERS">.
+
+=item parse(SOURCE [, OPT => OPT_VALUE [...]])
+
+The SOURCE parameter should either be a string containing the whole XML
+document, or it should be an open IO::Handle. Constructor options to
+XML::Parser::Expat given as keyword-value pairs may follow the SOURCE
+parameter. These override, for this call, any options or attributes passed
+through from the XML::Parser instance.
+
+A die call is thrown if a parse error occurs. Otherwise it will return 1
+or whatever is returned from the B<Final> handler, if one is installed.
+In other words, what parse may return depends on the style.
+
+=item parsestring
+
+This is just an alias for parse for backwards compatibility.
+
+=item parsefile(FILE [, OPT => OPT_VALUE [...]])
+
+Open FILE for reading, then call parse with the open handle. The file
+is closed no matter how parse returns. Returns what parse returns.
+
+=item parse_start([ OPT => OPT_VALUE [...]])
+
+Create and return a new instance of XML::Parser::ExpatNB. Constructor
+options may be provided. If an init handler has been provided, it is
+called before returning the ExpatNB object. Documents are parsed by
+making incremental calls to the parse_more method of this object, which
+takes a string. A single call to the parse_done method of this object,
+which takes no arguments, indicates that the document is finished.
+
+If there is a final handler installed, it is executed by the parse_done
+method before returning and the parse_done method returns whatever is
+returned by the final handler.
+
+=back
+
+=head1 HANDLERS
+
+Expat is an event based parser. As the parser recognizes parts of the
+document (say the start or end tag for an XML element), then any handlers
+registered for that type of an event are called with suitable parameters.
+All handlers receive an instance of XML::Parser::Expat as their first
+argument. See L<XML::Parser::Expat/"METHODS"> for a discussion of the
+methods that can be called on this object.
+
+=head2 Init (Expat)
+
+This is called just before the parsing of the document starts.
+
+=head2 Final (Expat)
+
+This is called just after parsing has finished, but only if no errors
+occurred during the parse. Parse returns what this returns.
+
+=head2 Start (Expat, Element [, Attr, Val [,...]])
+
+This event is generated when an XML start tag is recognized. Element is the
+name of the XML element type that is opened with the start tag. The Attr &
+Val pairs are generated for each attribute in the start tag.
+
+=head2 End (Expat, Element)
+
+This event is generated when an XML end tag is recognized. Note that
+an XML empty tag (<foo/>) generates both a start and an end event.
+
+=head2 Char (Expat, String)
+
+This event is generated when non-markup is recognized. The non-markup
+sequence of characters is in String. A single non-markup sequence of
+characters may generate multiple calls to this handler. Whatever the
+encoding of the string in the original document, this is given to the
+handler in UTF-8.
+
+=head2 Proc (Expat, Target, Data)
+
+This event is generated when a processing instruction is recognized.
+
+=head2 Comment (Expat, Data)
+
+This event is generated when a comment is recognized.
+
+=head2 CdataStart (Expat)
+
+This is called at the start of a CDATA section.
+
+=head2 CdataEnd (Expat)
+
+This is called at the end of a CDATA section.
+
+=head2 Default (Expat, String)
+
+This is called for any characters that don't have a registered handler.
+This includes both characters that are part of markup for which no
+events are generated (markup declarations) and characters that
+could generate events, but for which no handler has been registered.
+
+Whatever the encoding in the original document, the string is returned to
+the handler in UTF-8.
+
+=head2 Unparsed (Expat, Entity, Base, Sysid, Pubid, Notation)
+
+This is called for a declaration of an unparsed entity. Entity is the name
+of the entity. Base is the base to be used for resolving a relative URI.
+Sysid is the system id. Pubid is the public id. Notation is the notation
+name. Base and Pubid may be undefined.
+
+=head2 Notation (Expat, Notation, Base, Sysid, Pubid)
+
+This is called for a declaration of notation. Notation is the notation name.
+Base is the base to be used for resolving a relative URI. Sysid is the system
+id. Pubid is the public id. Base, Sysid, and Pubid may all be undefined.
+
+=head2 ExternEnt (Expat, Base, Sysid, Pubid)
+
+This is called when an external entity is referenced. Base is the base to be
+used for resolving a relative URI. Sysid is the system id. Pubid is the public
+id. Base, and Pubid may be undefined.
+
+This handler should either return a string, which represents the contents of
+the external entity, or return an open filehandle that can be read to obtain
+the contents of the external entity, or return undef, which indicates the
+external entity couldn't be found and will generate a parse error.
+
+If an open filehandle is returned, it must be returned as either a glob
+(*FOO) or as a reference to a glob (e.g. an instance of IO::Handle). The
+parser will close the filehandle after using it.
+
+A default handler, XML::Parser::default_ext_ent_handler, is installed
+for this. It only handles the file URL method and it assumes "file:" if
+it isn't there. The expat base method can be used to set a basename for
+relative pathnames. If no basename is given, or if the basename is itself
+a relative name, then it is relative to the current working directory.
+
+=head2 Entity (Expat, Name, Val, Sysid, Pubid, Ndata)
+
+This is called when an entity is declared. For internal entities, the Val
+parameter will contain the value and the remaining three parameters will be
+undefined. For external entities, the Val parameter will be undefined, the
+Sysid parameter will have the system id, the Pubid parameter will have the
+public id if it was provided (it will be undefined otherwise), the Ndata
+parameter will contain the notation for unparsed entities. If this is a
+parameter entity declaration, then a '%' will be prefixed to the name.
+
+Note that this handler and the Unparsed handler above overlap. If both are
+set, then this handler will not be called for unparsed entities.
+
+=head2 Element (Expat, Name, Model)
+
+The element handler is called when an element declaration is found. Name
+is the element name, and Model is the content model as a string.
+
+=head2 Attlist (Expat, Elname, Attname, Type, Default, Fixed)
+
+This handler is called for each attribute in an ATTLIST declaration.
+So an ATTLIST declaration that has multiple attributes will generate multiple
+calls to this handler. The Elname parameter is the name of the element with
+which the attribute is being associated. The Attname parameter is the name
+of the attribute. Type is the attribute type, given as a string. Default is
+the default value, which will either be "#REQUIRED", "#IMPLIED" or a quoted
+string (i.e. the returned string will begin and end with a quote character).
+If Fixed is true, then this is a fixed attribute.
+
+=head2 Doctype (Expat, Name, Sysid, Pubid, Internal)
+
+This handler is called for DOCTYPE declarations. Name is the document type
+name. Sysid is the system id of the document type, if it was provided,
+otherwise it's undefined. Pubid is the public id of the document type,
+which will be undefined if no public id was given. Internal is the internal
+subset, given as a string. If there was no internal subset, it will be
+undefined. Internal will contain all whitespace, comments, processing
+instructions, and declarations seen in the internal subset. The declarations
+will be there whether or not they have been processed by another handler
+(except for unparsed entities processed by the Unparsed handler). However,
+comments and processing instructions will not appear if they've been processed
+by their respective handlers.
+
+=head2 XMLDecl (Expat, Version, Encoding, Standalone)
+
+This handler is called for xml declarations. Version is a string containg
+the version. Encoding is either undefined or contains an encoding string.
+Standalone will be either true, false, or undefined if the standalone attribute
+is yes, no, or not made respectively.
+
+=head1 STYLES
+
+=head2 Debug
+
+This just prints out the document in outline form. Nothing special is
+returned by parse.
+
+=head2 Subs
+
+Each time an element starts, a sub by that name in the package specified
+by the Pkg option is called with the same parameters that the Start
+handler gets called with.
+
+Each time an element ends, a sub with that name appended with an underscore
+("_"), is called with the same parameters that the End handler gets called
+with.
+
+Nothing special is returned by parse.
+
+=head2 Tree
+
+Parse will return a parse tree for the document. Each node in the tree
+takes the form of a tag, content pair. Text nodes are represented with
+a pseudo-tag of "0" and the string that is their content. For elements,
+the content is an array reference. The first item in the array is a
+(possibly empty) hash reference containing attributes. The remainder of
+the array is a sequence of tag-content pairs representing the content
+of the element.
+
+So for example the result of parsing:
+
+ <foo><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
+
+would be:
+ Tag Content
+ ==================================================================
+ [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]],
+ bar, [ {}, 0, "Howdy", ref, [{}]],
+ 0, "do"
+ ]
+ ]
+
+The root document "foo", has 3 children: a "head" element, a "bar"
+element and the text "do". After the empty attribute hash, these are
+represented in it's contents by 3 tag-content pairs.
+
+=head2 Objects
+
+This is similar to the Tree style, except that a hash object is created for
+each element. The corresponding object will be in the class whose name
+is created by appending "::" and the element name to the package set with
+the Pkg option. Non-markup text will be in the ::Characters class. The
+contents of the corresponding object will be in an anonymous array that
+is the value of the Kids property for that object.
+
+=head2 Stream
+
+This style also uses the Pkg package. If none of the subs that this
+style looks for is there, then the effect of parsing with this style is
+to print a canonical copy of the document without comments or declarations.
+All the subs receive as their 1st parameter the Expat instance for the
+document they're parsing.
+
+It looks for the following routines:
+
+=over 4
+
+=item * StartDocument
+
+Called at the start of the parse .
+
+=item * StartTag
+
+Called for every start tag with a second parameter of the element type. The $_
+variable will contain a copy of the tag and the %_ variable will contain
+attribute values supplied for that element.
+
+=item * EndTag
+
+Called for every end tag with a second parameter of the element type. The $_
+variable will contain a copy of the end tag.
+
+=item * Text
+
+Called just before start or end tags with accumulated non-markup text in
+the $_ variable.
+
+=item * PI
+
+Called for processing instructions. The $_ variable will contain a copy of
+the PI and the target and data are sent as 2nd and 3rd parameters
+respectively.
+
+=item * EndDocument
+
+Called at conclusion of the parse.
+
+=back
+
+=head1 ENCODINGS
+
+XML documents may be encoded in character sets other than Unicode as
+long as they may be mapped into the Unicode character set. Expat has
+further restrictions on encodings. Read the xmlparse.h header file in
+the expat distribution to see details on these restrictions.
+
+Expat has built-in encodings for: C<UTF-8>, C<ISO-8859-1>, C<UTF-16>, and
+C<US-ASCII>. Encodings are set either through the XML declaration
+encoding attribute or through the ProtocolEncoding option to XML::Parser
+or XML::Parser::Expat.
+
+For encodings other than the built-ins, expat calls the function
+load_encoding in the Expat package with the encoding name. This function
+looks for a file in the path list @XML::Parser::Expat::Encoding_Path, that
+matches the lower-cased name with a '.enc' extension. The first one it
+finds, it loads.
+
+If you wish to build your own encoding maps, check out the XML::Encoding
+module from CPAN.
+
+=head1 AUTHORS
+
+Larry Wall <F<larry@wall.org>> wrote version 1.0.
+
+Clark Cooper <F<coopercc@netheaven.com>> picked up support, changed the API
+for this version (2.x), provided documentation,
+and added some standard package features.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/Parser/Expat.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,511 @@
+=head1 WARNING
+
+This manual page was copied from the XML::Parser distribution (version 2.27)
+written by Clark Cooper. You can find newer versions at CPAN.
+
+=head1 NAME
+
+XML::Parser::Expat - Lowlevel access to James Clark's expat XML parser
+
+=head1 SYNOPSIS
+
+ use XML::Parser::Expat;
+
+ $parser = new XML::Parser::Expat;
+ $parser->setHandlers('Start' => \&sh,
+ 'End' => \&eh,
+ 'Char' => \&ch);
+ open(FOO, 'info.xml') or die "Couldn't open";
+ $parser->parse(*FOO);
+ close(FOO);
+ # $parser->parse('<foo id="me"> here <em>we</em> go </foo>');
+
+ sub sh
+ {
+ my ($p, $el, %atts) = @_;
+ $p->setHandlers('Char' => \&spec)
+ if ($el eq 'special');
+ ...
+ }
+
+ sub eh
+ {
+ my ($p, $el) = @_;
+ $p->setHandlers('Char' => \&ch) # Special elements won't contain
+ if ($el eq 'special'); # other special elements
+ ...
+ }
+
+=head1 DESCRIPTION
+
+This module provides an interface to James Clark's XML parser, expat. As in
+expat, a single instance of the parser can only parse one document. Calls
+to parsestring after the first for a given instance will die.
+
+Expat (and XML::Parser::Expat) are event based. As the parser recognizes
+parts of the document (say the start or end of an XML element), then any
+handlers registered for that type of an event are called with suitable
+parameters.
+
+=head1 METHODS
+
+=over 4
+
+=item new
+
+This is a class method, the constructor for XML::Parser::Expat. Options are
+passed as keyword value pairs. The recognized options are:
+
+=over 4
+
+=item * ProtocolEncoding
+
+The protocol encoding name. The default is none. The expat built-in
+encodings are: C<UTF-8>, C<ISO-8859-1>, C<UTF-16>, and C<US-ASCII>.
+Other encodings may be used if they have encoding maps in one of the
+directories in the @Encoding_Path list. Setting the protocol encoding
+overrides any encoding in the XML declaration.
+
+=item * Namespaces
+
+When this option is given with a true value, then the parser does namespace
+processing. By default, namespace processing is turned off. When it is
+turned on, the parser consumes I<xmlns> attributes and strips off prefixes
+from element and attributes names where those prefixes have a defined
+namespace. A name's namespace can be found using the L<"namespace"> method
+and two names can be checked for absolute equality with the L<"eq_name">
+method.
+
+=item * NoExpand
+
+Normally, the parser will try to expand references to entities defined in
+the internal subset. If this option is set to a true value, and a default
+handler is also set, then the default handler will be called when an
+entity reference is seen in text. This has no effect if a default handler
+has not been registered, and it has no effect on the expansion of entity
+references inside attribute values.
+
+=item * Stream_Delimiter
+
+This option takes a string value. When this string is found alone on a line
+while parsing from a stream, then the parse is ended as if it saw an end of
+file. The intended use is with a stream of xml documents in a MIME multipart
+format. The string should not contain a trailing newline.
+
+=item * ErrorContext
+
+When this option is defined, errors are reported in context. The value
+of ErrorContext should be the number of lines to show on either side of
+the line in which the error occurred.
+
+=item * ParseParamEnt
+
+Unless standalone is set to "yes" in the XML declaration, setting this to
+a true value allows the external DTD to be read, and parameter entities
+to be parsed and expanded.
+
+=item * Base
+
+The base to use for relative pathnames or URLs. This can also be done by
+using the base method.
+
+=back
+
+=item setHandlers(TYPE, HANDLER [, TYPE, HANDLER [...]])
+
+This method registers handlers for the various events. If no handlers are
+registered, then a call to parsestring or parsefile will only determine if
+the corresponding XML document is well formed (by returning without error.)
+This may be called from within a handler, after the parse has started.
+
+Setting a handler to something that evaluates to false unsets that
+handler.
+
+This method returns a list of type, handler pairs corresponding to the
+input. The handlers returned are the ones that were in effect before the
+call to setHandlers.
+
+The recognized events and the parameters passed to the corresponding
+handlers are:
+
+=over 4
+
+=item * Start (Parser, Element [, Attr, Val [,...]])
+
+This event is generated when an XML start tag is recognized. Parser is
+an XML::Parser::Expat instance. Element is the name of the XML element that
+is opened with the start tag. The Attr & Val pairs are generated for each
+attribute in the start tag.
+
+=item * End (Parser, Element)
+
+This event is generated when an XML end tag is recognized. Note that
+an XML empty tag (<foo/>) generates both a start and an end event.
+
+There is always a lower level start and end handler installed that wrap
+the corresponding callbacks. This is to handle the context mechanism.
+A consequence of this is that the default handler (see below) will not
+see a start tag or end tag unless the default_current method is called.
+
+=item * Char (Parser, String)
+
+This event is generated when non-markup is recognized. The non-markup
+sequence of characters is in String. A single non-markup sequence of
+characters may generate multiple calls to this handler. Whatever the
+encoding of the string in the original document, this is given to the
+handler in UTF-8.
+
+=item * Proc (Parser, Target, Data)
+
+This event is generated when a processing instruction is recognized.
+
+=item * Comment (Parser, String)
+
+This event is generated when a comment is recognized.
+
+=item * CdataStart (Parser)
+
+This is called at the start of a CDATA section.
+
+=item * CdataEnd (Parser)
+
+This is called at the end of a CDATA section.
+
+=item * Default (Parser, String)
+
+This is called for any characters that don't have a registered handler.
+This includes both characters that are part of markup for which no
+events are generated (markup declarations) and characters that
+could generate events, but for which no handler has been registered.
+
+Whatever the encoding in the original document, the string is returned to
+the handler in UTF-8.
+
+=item * Unparsed (Parser, Entity, Base, Sysid, Pubid, Notation)
+
+This is called for a declaration of an unparsed entity. Entity is the name
+of the entity. Base is the base to be used for resolving a relative URI.
+Sysid is the system id. Pubid is the public id. Notation is the notation
+name. Base and Pubid may be undefined.
+
+=item * Notation (Parser, Notation, Base, Sysid, Pubid)
+
+This is called for a declaration of notation. Notation is the notation name.
+Base is the base to be used for resolving a relative URI. Sysid is the system
+id. Pubid is the public id. Base, Sysid, and Pubid may all be undefined.
+
+=item * ExternEnt (Parser, Base, Sysid, Pubid)
+
+This is called when an external entity is referenced. Base is the base to be
+used for resolving a relative URI. Sysid is the system id. Pubid is the public
+id. Base, and Pubid may be undefined.
+
+This handler should either return a string, which represents the contents of
+the external entity, or return an open filehandle that can be read to obtain
+the contents of the external entity, or return undef, which indicates the
+external entity couldn't be found and will generate a parse error.
+
+If an open filehandle is returned, it must be returned as either a glob
+(*FOO) or as a reference to a glob (e.g. an instance of IO::Handle). The
+parser will close the filehandle after using it.
+
+=item * Entity (Parser, Name, Val, Sysid, Pubid, Ndata)
+
+This is called when an entity is declared. For internal entities, the Val
+parameter will contain the value and the remaining three parameters will
+be undefined. For external entities, the Val parameter
+will be undefined, the Sysid parameter will have the system id, the Pubid
+parameter will have the public id if it was provided (it will be undefined
+otherwise), the Ndata parameter will contain the notation for unparsed
+entities. If this is a parameter entity declaration, then a '%' will be
+prefixed to the name.
+
+Note that this handler and the Unparsed handler above overlap. If both are
+set, then this handler will not be called for unparsed entities.
+
+=item * Element (Parser, Name, Model)
+
+The element handler is called when an element declaration is found. Name is
+the element name, and Model is the content model as a string.
+
+=item * Attlist (Parser, Elname, Attname, Type, Default, Fixed)
+
+This handler is called for each attribute in an ATTLIST declaration.
+So an ATTLIST declaration that has multiple attributes
+will generate multiple calls to this handler. The Elname parameter is the
+name of the element with which the attribute is being associated. The Attname
+parameter is the name of the attribute. Type is the attribute type, given as
+a string. Default is the default value, which will either be "#REQUIRED",
+"#IMPLIED" or a quoted string (i.e. the returned string will begin and end
+with a quote character). If Fixed is true, then this is a fixed attribute.
+
+=item * Doctype (Parser, Name, Sysid, Pubid, Internal)
+
+This handler is called for DOCTYPE declarations. Name is the document type
+name. Sysid is the system id of the document type, if it was provided,
+otherwise it's undefined. Pubid is the public id of the document type,
+which will be undefined if no public id was given. Internal is the internal
+subset, given as a string. If there was no internal subset, it will be
+undefined. Internal will contain all whitespace, comments, processing
+instructions, and declarations seen in the internal subset. The declarations
+will be there whether or not they have been processed by another handler
+(except for unparsed entities processed by the Unparsed handler). However,
+comments and processing instructions will not appear if they've been processed
+by their respective handlers.
+
+=item * XMLDecl (Parser, Version, Encoding, Standalone)
+
+This handler is called for xml declarations. Version is a string containg
+the version. Encoding is either undefined or contains an encoding string.
+Standalone will be either true, false, or undefined if the standalone attribute
+is yes, no, or not made respectively.
+
+=back
+
+=item namespace(name)
+
+Return the URI of the namespace that the name belongs to. If the name doesn't
+belong to any namespace, an undef is returned. This is only valid on names
+received through the Start or End handlers from a single document, or through
+a call to the generate_ns_name method. In other words, don't use names
+generated from one instance of XML::Parser::Expat with other instances.
+
+=item eq_name(name1, name2)
+
+Return true if name1 and name2 are identical (i.e. same name and from
+the same namespace.) This is only meaningful if both names were obtained
+through the Start or End handlers from a single document, or through
+a call to the generate_ns_name method.
+
+=item generate_ns_name(name, namespace)
+
+Return a name, associated with a given namespace, good for using with the
+above 2 methods. The namespace argument should be the namespace URI, not
+a prefix.
+
+=item new_ns_prefixes
+
+When called from a start tag handler, returns namespace prefixes declared
+with this start tag. If called elsewere (or if there were no namespace
+prefixes declared), it returns an empty list. Setting of the default
+namespace is indicated with '#default' as a prefix.
+
+=item expand_ns_prefix(prefix)
+
+Return the uri to which the given prefix is currently bound. Returns
+undef if the prefix isn't currently bound. Use '#default' to find the
+current binding of the default namespace (if any).
+
+=item current_ns_prefixes
+
+Return a list of currently bound namespace prefixes. The order of the
+the prefixes in the list has no meaning. If the default namespace is
+currently bound, '#default' appears in the list.
+
+=item recognized_string
+
+Returns the string from the document that was recognized in order to call
+the current handler. For instance, when called from a start handler, it
+will give us the the start-tag string. The string is encoded in UTF-8.
+
+=item original_string
+
+Returns the verbatim string from the document that was recognized in
+order to call the current handler. The string is in the original document
+encoding.
+
+=item default_current
+
+When called from a handler, causes the sequence of characters that generated
+the corresponding event to be sent to the default handler (if one is
+registered). Use of this method is deprecated in favor the recognized_string
+method, which you can use without installing a default handler.
+
+=item xpcroak(message)
+
+Concatenate onto the given message the current line number within the
+XML document plus the message implied by ErrorContext. Then croak with
+the formed message.
+
+=item xpcarp(message)
+
+Concatenate onto the given message the current line number within the
+XML document plus the message implied by ErrorContext. Then carp with
+the formed message.
+
+=item current_line
+
+Returns the line number of the current position of the parse.
+
+=item current_column
+
+Returns the column number of the current position of the parse.
+
+=item current_byte
+
+Returns the current position of the parse.
+
+=item base([NEWBASE]);
+
+Returns the current value of the base for resolving relative URIs. If
+NEWBASE is supplied, changes the base to that value.
+
+=item context
+
+Returns a list of element names that represent open elements, with the
+last one being the innermost. Inside start and end tag handlers, this
+will be the tag of the parent element.
+
+=item current_element
+
+Returns the name of the innermost currently opened element. Inside
+start or end handlers, returns the parent of the element associated
+with those tags.
+
+=item in_element(NAME)
+
+Returns true if NAME is equal to the name of the innermost currently opened
+element. If namespace processing is being used and you want to check
+against a name that may be in a namespace, then use the generate_ns_name
+method to create the NAME argument.
+
+=item within_element(NAME)
+
+Returns the number of times the given name appears in the context list.
+If namespace processing is being used and you want to check
+against a name that may be in a namespace, then use the generate_ns_name
+method to create the NAME argument.
+
+=item depth
+
+Returns the size of the context list.
+
+=item element_index
+
+Returns an integer that is the depth-first visit order of the current
+element. This will be zero outside of the root element. For example,
+this will return 1 when called from the start handler for the root element
+start tag.
+
+=item skip_until(INDEX)
+
+INDEX is an integer that represents an element index. When this method
+is called, all handlers are suspended until the start tag for an element
+that has an index number equal to INDEX is seen. If a start handler has
+been set, then this is the first tag that the start handler will see
+after skip_until has been called.
+
+
+=item position_in_context(LINES)
+
+Returns a string that shows the current parse position. LINES should be
+an integer >= 0 that represents the number of lines on either side of the
+current parse line to place into the returned string.
+
+=item xml_escape(TEXT [, CHAR [, CHAR ...]])
+
+Returns TEXT with markup characters turned into character entities. Any
+additional characters provided as arguments are also turned into character
+references where found in TEXT.
+
+=item parse (SOURCE)
+
+The SOURCE parameter should either be a string containing the whole XML
+document, or it should be an open IO::Handle. Only a single document
+may be parsed for a given instance of XML::Parser::Expat, so this will croak
+if it's been called previously for this instance.
+
+=item parsestring(XML_DOC_STRING)
+
+Parses the given string as an XML document. Only a single document may be
+parsed for a given instance of XML::Parser::Expat, so this will die if either
+parsestring or parsefile has been called for this instance previously.
+
+This method is deprecated in favor of the parse method.
+
+=item parsefile(FILENAME)
+
+Parses the XML document in the given file. Will die if parsestring or
+parsefile has been called previously for this instance.
+
+=item is_defaulted(ATTNAME)
+
+NO LONGER WORKS. To find out if an attribute is defaulted please use
+the specified_attr method.
+
+=item specified_attr
+
+When the start handler receives lists of attributes and values, the
+non-defaulted (i.e. explicitly specified) attributes occur in the list
+first. This method returns the number of specified items in the list.
+So if this number is equal to the length of the list, there were no
+defaulted values. Otherwise the number points to the index of the
+first defaulted attribute name.
+
+=item finish
+
+Unsets all handlers (including internal ones that set context), but expat
+continues parsing to the end of the document or until it finds an error.
+It should finish up a lot faster than with the handlers set.
+
+=item release
+
+There are data structures used by XML::Parser::Expat that have circular
+references. This means that these structures will never be garbage
+collected unless these references are explicitly broken. Calling this
+method breaks those references (and makes the instance unusable.)
+
+Normally, higher level calls handle this for you, but if you are using
+XML::Parser::Expat directly, then it's your responsibility to call it.
+
+=back
+
+=head2 XML::Parser::ExpatNB Methods
+
+The class XML::Parser::ExpatNB is a subclass of XML::Parser::Expat used
+for non-blocking access to the expat library. It does not support the parse,
+parsestring, or parsefile methods, but it does have these additional methods:
+
+=over 4
+
+=item parse_more(DATA)
+
+Feed expat more text to munch on.
+
+=item parse_done
+
+Tell expat that it's gotten the whole document.
+
+=back
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item XML::Parser::Expat::load_encoding(ENCODING)
+
+Load an external encoding. ENCODING is either the name of an encoding or
+the name of a file. The basename is converted to lowercase and a '.enc'
+extension is appended unless there's one already there. Then, unless
+it's an absolute pathname (i.e. begins with '/'), the first file by that
+name discovered in the @Encoding_Path path list is used.
+
+The encoding in the file is loaded and kept in the %Encoding_Table
+table. Earlier encodings of the same name are replaced.
+
+This function is automaticly called by expat when it encounters an encoding
+it doesn't know about. Expat shouldn't call this twice for the same
+encoding name. The only reason users should use this function is to
+explicitly load an encoding not contained in the @Encoding_Path list.
+
+=back
+
+=head1 AUTHORS
+
+Larry Wall <F<larry@wall.org>> wrote version 1.0.
+
+Clark Cooper <F<coopercc@netheaven.com>> picked up support, changed the API
+for this version (2.x), provided documentation, and added some standard
+package features.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/RegExp.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,77 @@
+package XML::RegExp;
+
+use vars qw( $BaseChar $Ideographic $Letter $Digit $Extender
+ $CombiningChar $NameChar
+ $EntityRef $CharRef $Reference
+ $Name $NmToken $AttValue
+ $NCNameChar $NCName $Prefix $LocalPart $QName );
+
+$BaseChar = '(?:[a-zA-Z]|\xC3[\x80-\x96\x98-\xB6\xB8-\xBF]|\xC4[\x80-\xB1\xB4-\xBE]|\xC5[\x81-\x88\x8A-\xBE]|\xC6[\x80-\xBF]|\xC7[\x80-\x83\x8D-\xB0\xB4\xB5\xBA-\xBF]|\xC8[\x80-\x97]|\xC9[\x90-\xBF]|\xCA[\x80-\xA8\xBB-\xBF]|\xCB[\x80\x81]|\xCE[\x86\x88-\x8A\x8C\x8E-\xA1\xA3-\xBF]|\xCF[\x80-\x8E\x90-\x96\x9A\x9C\x9E\xA0\xA2-\xB3]|\xD0[\x81-\x8C\x8E-\xBF]|\xD1[\x80-\x8F\x91-\x9C\x9E-\xBF]|\xD2[\x80\x81\x90-\xBF]|\xD3[\x80-\x84\x87\x88\x8B\x8C\x90-\xAB\xAE-\xB5\xB8\xB9]|\xD4[\xB1-\xBF]|\xD5[\x80-\x96\x99\xA1-\xBF]|\xD6[\x80-\x86]|\xD7[\x90-\xAA\xB0-\xB2]|\xD8[\xA1-\xBA]|\xD9[\x81-\x8A\xB1-\xBF]|\xDA[\x80-\xB7\xBA-\xBE]|\xDB[\x80-\x8E\x90-\x93\x95\xA5\xA6]|\xE0(?:\xA4[\x85-\xB9\xBD]|\xA5[\x98-\xA1]|\xA6[\x85-\x8C\x8F\x90\x93-\xA8\xAA-\xB0\xB2\xB6-\xB9]|\xA7[\x9C\x9D\x9F-\xA1\xB0\xB1]|\xA8[\x85-\x8A\x8F\x90\x93-\xA8\xAA-\xB0\xB2\xB3\xB5\xB6\xB8\xB9]|\xA9[\x99-\x9C\x9E\xB2-\xB4]|\xAA[\x85-\x8B\x8D\x8F-\x91\x93-\xA8\xAA-\xB0\xB2\xB3\xB5-\xB9\xBD]|\xAB\xA0|\xAC[\x85-\x8C\x8F\x90\x93-\xA8\xAA-\xB0\xB2\xB3\xB6-\xB9\xBD]|\xAD[\x9C\x9D\x9F-\xA1]|\xAE[\x85-\x8A\x8E-\x90\x92-\x95\x99\x9A\x9C\x9E\x9F\xA3\xA4\xA8-\xAA\xAE-\xB5\xB7-\xB9]|\xB0[\x85-\x8C\x8E-\x90\x92-\xA8\xAA-\xB3\xB5-\xB9]|\xB1[\xA0\xA1]|\xB2[\x85-\x8C\x8E-\x90\x92-\xA8\xAA-\xB3\xB5-\xB9]|\xB3[\x9E\xA0\xA1]|\xB4[\x85-\x8C\x8E-\x90\x92-\xA8\xAA-\xB9]|\xB5[\xA0\xA1]|\xB8[\x81-\xAE\xB0\xB2\xB3]|\xB9[\x80-\x85]|\xBA[\x81\x82\x84\x87\x88\x8A\x8D\x94-\x97\x99-\x9F\xA1-\xA3\xA5\xA7\xAA\xAB\xAD\xAE\xB0\xB2\xB3\xBD]|\xBB[\x80-\x84]|\xBD[\x80-\x87\x89-\xA9])|\xE1(?:\x82[\xA0-\xBF]|\x83[\x80-\x85\x90-\xB6]|\x84[\x80\x82\x83\x85-\x87\x89\x8B\x8C\x8E-\x92\xBC\xBE]|\x85[\x80\x8C\x8E\x90\x94\x95\x99\x9F-\xA1\xA3\xA5\xA7\xA9\xAD\xAE\xB2\xB3\xB5]|\x86[\x9E\xA8\xAB\xAE\xAF\xB7\xB8\xBA\xBC-\xBF]|\x87[\x80-\x82\xAB\xB0\xB9]|[\xB8\xB9][\x80-\xBF]|\xBA[\x80-\x9B\xA0-\xBF]|\xBB[\x80-\xB9]|\xBC[\x80-\x95\x98-\x9D\xA0-\xBF]|\xBD[\x80-\x85\x88-\x8D\x90-\x97\x99\x9B\x9D\x9F-\xBD]|\xBE[\x80-\xB4\xB6-\xBC\xBE]|\xBF[\x82-\x84\x86-\x8C\x90-\x93\x96-\x9B\xA0-\xAC\xB2-\xB4\xB6-\xBC])|\xE2(?:\x84[\xA6\xAA\xAB\xAE]|\x86[\x80-\x82])|\xE3(?:\x81[\x81-\xBF]|\x82[\x80-\x94\xA1-\xBF]|\x83[\x80-\xBA]|\x84[\x85-\xAC])|\xEA(?:[\xB0-\xBF][\x80-\xBF])|\xEB(?:[\x80-\xBF][\x80-\xBF])|\xEC(?:[\x80-\xBF][\x80-\xBF])|\xED(?:[\x80-\x9D][\x80-\xBF]|\x9E[\x80-\xA3]))';
+
+$Ideographic = '(?:\xE3\x80[\x87\xA1-\xA9]|\xE4(?:[\xB8-\xBF][\x80-\xBF])|\xE5(?:[\x80-\xBF][\x80-\xBF])|\xE6(?:[\x80-\xBF][\x80-\xBF])|\xE7(?:[\x80-\xBF][\x80-\xBF])|\xE8(?:[\x80-\xBF][\x80-\xBF])|\xE9(?:[\x80-\xBD][\x80-\xBF]|\xBE[\x80-\xA5]))';
+
+$Digit = '(?:[0-9]|\xD9[\xA0-\xA9]|\xDB[\xB0-\xB9]|\xE0(?:\xA5[\xA6-\xAF]|\xA7[\xA6-\xAF]|\xA9[\xA6-\xAF]|\xAB[\xA6-\xAF]|\xAD[\xA6-\xAF]|\xAF[\xA7-\xAF]|\xB1[\xA6-\xAF]|\xB3[\xA6-\xAF]|\xB5[\xA6-\xAF]|\xB9[\x90-\x99]|\xBB[\x90-\x99]|\xBC[\xA0-\xA9]))';
+
+$Extender = '(?:\xC2\xB7|\xCB[\x90\x91]|\xCE\x87|\xD9\x80|\xE0(?:\xB9\x86|\xBB\x86)|\xE3(?:\x80[\x85\xB1-\xB5]|\x82[\x9D\x9E]|\x83[\xBC-\xBE]))';
+
+$CombiningChar = '(?:\xCC[\x80-\xBF]|\xCD[\x80-\x85\xA0\xA1]|\xD2[\x83-\x86]|\xD6[\x91-\xA1\xA3-\xB9\xBB-\xBD\xBF]|\xD7[\x81\x82\x84]|\xD9[\x8B-\x92\xB0]|\xDB[\x96-\xA4\xA7\xA8\xAA-\xAD]|\xE0(?:\xA4[\x81-\x83\xBC\xBE\xBF]|\xA5[\x80-\x8D\x91-\x94\xA2\xA3]|\xA6[\x81-\x83\xBC\xBE\xBF]|\xA7[\x80-\x84\x87\x88\x8B-\x8D\x97\xA2\xA3]|\xA8[\x82\xBC\xBE\xBF]|\xA9[\x80-\x82\x87\x88\x8B-\x8D\xB0\xB1]|\xAA[\x81-\x83\xBC\xBE\xBF]|\xAB[\x80-\x85\x87-\x89\x8B-\x8D]|\xAC[\x81-\x83\xBC\xBE\xBF]|\xAD[\x80-\x83\x87\x88\x8B-\x8D\x96\x97]|\xAE[\x82\x83\xBE\xBF]|\xAF[\x80-\x82\x86-\x88\x8A-\x8D\x97]|\xB0[\x81-\x83\xBE\xBF]|\xB1[\x80-\x84\x86-\x88\x8A-\x8D\x95\x96]|\xB2[\x82\x83\xBE\xBF]|\xB3[\x80-\x84\x86-\x88\x8A-\x8D\x95\x96]|\xB4[\x82\x83\xBE\xBF]|\xB5[\x80-\x83\x86-\x88\x8A-\x8D\x97]|\xB8[\xB1\xB4-\xBA]|\xB9[\x87-\x8E]|\xBA[\xB1\xB4-\xB9\xBB\xBC]|\xBB[\x88-\x8D]|\xBC[\x98\x99\xB5\xB7\xB9\xBE\xBF]|\xBD[\xB1-\xBF]|\xBE[\x80-\x84\x86-\x8B\x90-\x95\x97\x99-\xAD\xB1-\xB7\xB9])|\xE2\x83[\x90-\x9C\xA1]|\xE3(?:\x80[\xAA-\xAF]|\x82[\x99\x9A]))';
+
+$Letter = "(?:$BaseChar|$Ideographic)";
+$NameChar = "(?:[-._:]|$Letter|$Digit|$CombiningChar|$Extender)";
+
+$Name = "(?:(?:[:_]|$Letter)$NameChar*)";
+$NmToken = "(?:$NameChar+)";
+$EntityRef = "(?:\&$Name;)";
+$CharRef = "(?:\&#(?:[0-9]+|x[0-9a-fA-F]+);)";
+$Reference = "(?:$EntityRef|$CharRef)";
+
+#?? what if it contains entity references?
+$AttValue = "(?:\"(?:[^\"&<]*|$Reference)\"|'(?:[^\'&<]|$Reference)*')";
+
+#########################################################################
+# The following definitions came from the XML Namespaces spec:
+#########################################################################
+
+# Same as $NameChar without the ":"
+$NCNameChar = "(?:[-._]|$Letter|$Digit|$CombiningChar|$Extender)";
+
+# Same as $Name without the colons
+$NCName = "(?:(?:_|$Letter)$NCNameChar*)";
+
+$Prefix = $NCName;
+$LocalPart = $NCName;
+$QName = "(?:(?:$Prefix:)?$LocalPart)";
+
+return 1;
+
+__END__
+
+=head1 NAME
+
+XML::RegExp - Regular expressions for XML tokens
+
+=head1 SYNOPSIS
+
+ use XML::RegExp;
+
+ if ($my_name =~ /^$XML::RegExp::Name$/)
+ {
+ # $my_name is a valid XML 'Name'
+ }
+
+=head1 DESCRIPTION
+
+This package contains regular expressions for the following XML tokens:
+BaseChar, Ideographic, Letter, Digit, Extender, CombiningChar, NameChar,
+EntityRef, CharRef, Reference, Name, NmToken, and AttValue.
+
+The definitions of these tokens were taken from the XML spec
+(Extensible Markup Language 1.0) at L<http://www.w3.org/TR/REC-xml>.
+
+Also contains the regular expressions for the following tokens from the
+XML Namespaces spec at L<http://www.w3.org/TR/REC-xml-names>:
+NCNameChar, NCName, QName, Prefix and LocalPart.
+
+=head1 AUTHOR
+
+Please send bugs, comments and suggestions to Enno Derksen <F<enno@att.com>>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/UM.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,466 @@
+#
+# TO DO:
+#
+# - Implement SlowMappers for expat builtin encodings (for which there
+# are no .enc files), e.g. UTF-16, US-ASCII, ISO-8859-1.
+# - Instead of parsing the .xml file with XML::Encoding, we should use XS.
+# If this will not be implemented for a while, we could try reading the
+# .enc file directly, instead of the .xml file.
+# I started writing XML::UM::EncParser to do this (see EOF), but got stuck.
+#
+
+use strict;
+
+package XML::UM::SlowMapper;
+use Carp;
+use XML::Encoding;
+
+use vars qw{ $ENCDIR %DEFAULT_ASCII_MAPPINGS };
+
+my $UTFCHAR = '[\\x00-\\xBF]|[\\xC0-\\xDF].|[\\xE0-\\xEF]..|[\\xF0-\\xFF]...';
+
+#
+# The directory that contains the .xml files that come with XML::Encoding.
+# Include the terminating '\' or '/' !!
+#
+$ENCDIR = "/home1/enno/perlModules/XML-Encoding-1.01/maps/";
+#$ENCDIR = "c:\\src\\perl\\xml\\XML-Encoding-1.01\\maps\\";
+
+#
+# From xmlparse.h in expat distribution:
+#
+# Expat places certain restrictions on the encodings that are supported
+# using this mechanism.
+#
+# 1. Every ASCII character that can appear in a well-formed XML document,
+# other than the characters
+#
+# $@\^`{}~
+#
+# must be represented by a single byte, and that byte must be the
+# same byte that represents that character in ASCII.
+#
+# [end of excerpt]
+
+#?? Which 'ASCII characters can appear in a well-formed XML document ??
+
+# All ASCII codes 0 - 127, excl. 36,64,92,94,96,123,125,126 i.e. $@\^`{}~
+%DEFAULT_ASCII_MAPPINGS = map { (chr($_), chr($_)) } (0 .. 35, 37 .. 63,
+ 65 .. 91, 93, 95,
+ 97 .. 122, 124, 127);
+
+sub new
+{
+ my ($class, %hash) = @_;
+ my $self = bless \%hash, $class;
+
+ $self->read_encoding_file;
+
+ $self;
+}
+
+sub dispose
+{
+ my $self = shift;
+ $self->{Factory}->dispose_mapper ($self);
+ delete $self->{Encode};
+}
+
+# Reads the XML file that contains the encoding definition.
+# These files come with XML::Encoding.
+sub read_encoding_file
+{
+#?? This should parse the .enc files (the .xml files are not installed) !!
+
+ my ($self) = @_;
+ my $encoding = $self->{Encoding};
+
+ # There is no .enc (or .xml) file for US-ASCII, but the mapping is simple
+ # so here it goes...
+ if ($encoding eq 'US-ASCII')
+ {
+ $self->{EncMapName} = 'US-ASCII';
+ $self->{Map} = \%DEFAULT_ASCII_MAPPINGS; # I hope this is right
+ return;
+ }
+
+ my $file = $self->find_encoding_file ($encoding);
+
+ my %uni = %DEFAULT_ASCII_MAPPINGS;
+ my $prefix = "";
+ my $DIR = "file:$ENCDIR";
+
+ my $enc = new XML::Encoding (Handlers => {
+ Init =>
+ sub {
+ my $base = shift->base ($DIR);
+ }
+ },
+
+ PushPrefixFcn =>
+ sub {
+ $prefix .= chr (shift);
+ undef;
+ },
+
+ PopPrefixFcn =>
+ sub {
+ chop $prefix;
+ undef;
+ },
+
+ RangeSetFcn =>
+ sub {
+ my ($byte, $uni, $len) = @_;
+ for (my $i = $uni; $len--; $uni++)
+ {
+ $uni{XML::UM::unicode_to_utf8($uni)} = $prefix . chr ($byte++);
+ }
+ undef;
+ });
+
+ $self->{EncMapName} = $enc->parsefile ($file);
+
+#print "Parsed Encoding " . $self->{Encoding} . " MapName=" . $self->{EncMapName} . "\n";
+
+ $self->{Map} = \%uni;
+}
+
+sub find_encoding_file
+{
+ my ($self, $enc) = @_;
+
+ return "$ENCDIR\L$enc\E.xml"; # .xml filename is lower case
+}
+
+# Returns a closure (method) that converts a UTF-8 encoded string to an
+# encoded byte sequence.
+sub get_encode
+{
+ my ($self, %hash) = @_;
+ my $MAP = $self->{Map};
+ my $ENCODE_UNMAPPED = $hash{EncodeUnmapped} || \&XML::UM::encode_unmapped_dec;
+
+ my $code = "sub {\n my \$str = shift;\n \$str =~ s/";
+
+ $code .= "($UTFCHAR)/\n";
+ $code .= "defined \$MAP->{\$1} ? \$MAP->{\$1} : ";
+ $code .= "\&\$ENCODE_UNMAPPED(\$1) /egs;\n";
+
+ $code .= "\$str }\n";
+# print $code;
+
+ my $func = eval $code;
+ croak "could not eval generated code=[$code]: $@" if $@;
+
+ $func;
+}
+
+#
+# Optimized version for when the encoding is UTF-8.
+# (In that case no conversion takes place.)
+#
+package XML::UM::SlowMapper::UTF8;
+use vars qw{ @ISA };
+@ISA = qw{ XML::UM::SlowMapper };
+
+sub read_encoding_file
+{
+ # ignore it
+}
+
+sub get_encode
+{
+ \&dont_convert;
+}
+
+sub dont_convert # static
+{
+ shift # return argument unchanged
+}
+
+package XML::UM::SlowMapperFactory;
+
+sub new
+{
+ my ($class, %hash) = @_;
+ bless \%hash, $class;
+}
+
+sub get_encode
+{
+ my ($self, %options) = @_;
+ my $encoding = $options{Encoding};
+
+ my $mapper = $self->get_mapper ($encoding);
+ return $mapper->get_encode (%options);
+}
+
+sub get_mapper
+{
+ my ($self, $encoding) = @_;
+ $self->{Mapper}->{$encoding} ||=
+ ($encoding eq "UTF-8" ?
+ new XML::UM::SlowMapper::UTF8 (Encoding => $encoding,
+ Factory => $self) :
+ new XML::UM::SlowMapper (Encoding => $encoding,
+ Factory => $self));
+}
+
+#
+# Prepare for garbage collection (remove circular refs)
+#
+sub dispose_encoding
+{
+ my ($self, $encoding) = @_;
+ my $mapper = $self->{Mapper}->{$encoding};
+ return unless defined $mapper;
+
+ delete $mapper->{Factory};
+ delete $self->{Mapper}->{$encoding};
+}
+
+package XML::UM;
+use Carp;
+
+use vars qw{ $FACTORY %XML_MAPPING_CRITERIA };
+$FACTORY = XML::UM::SlowMapperFactory->new;
+
+sub get_encode # static
+{
+ $FACTORY->get_encode (@_);
+}
+
+sub dispose_encoding # static
+{
+ $FACTORY->dispose_encoding (@_);
+}
+
+# Convert UTF-8 byte sequence to Unicode index; then to '&#xNN;' string
+sub encode_unmapped_hex # static
+{
+ my $n = utf8_to_unicode (shift);
+ sprintf ("&#x%X;", $n);
+}
+
+sub encode_unmapped_dec # static
+{
+ my $n = utf8_to_unicode (shift);
+ "&#$n;"
+}
+
+# Converts a UTF-8 byte sequence that represents one character,
+# to its Unicode index.
+sub utf8_to_unicode # static
+{
+ my $str = shift;
+ my $len = length ($str);
+
+ if ($len == 1)
+ {
+ return ord ($str);
+ }
+ if ($len == 2)
+ {
+ my @n = unpack "C2", $str;
+ return (($n[0] & 0x3f) << 6) + ($n[1] & 0x3f);
+ }
+ elsif ($len == 3)
+ {
+ my @n = unpack "C3", $str;
+ return (($n[0] & 0x1f) << 12) + (($n[1] & 0x3f) << 6) +
+ ($n[2] & 0x3f);
+ }
+ elsif ($len == 4)
+ {
+ my @n = unpack "C4", $str;
+ return (($n[0] & 0x0f) << 18) + (($n[1] & 0x3f) << 12) +
+ (($n[2] & 0x3f) << 6) + ($n[3] & 0x3f);
+ }
+ else
+ {
+ croak "bad UTF8 sequence [$str] hex=" . hb($str);
+ }
+}
+
+# Converts a Unicode character index to the byte sequence
+# that represents that character in UTF-8.
+sub unicode_to_utf8 # static
+{
+ my $n = shift;
+ if ($n < 0x80)
+ {
+ return chr ($n);
+ }
+ elsif ($n < 0x800)
+ {
+ return pack ("CC", (($n >> 6) | 0xc0), (($n & 0x3f) | 0x80));
+ }
+ elsif ($n < 0x10000)
+ {
+ return pack ("CCC", (($n >> 12) | 0xe0), ((($n >> 6) & 0x3f) | 0x80),
+ (($n & 0x3f) | 0x80));
+ }
+ elsif ($n < 0x110000)
+ {
+ return pack ("CCCC", (($n >> 18) | 0xf0), ((($n >> 12) & 0x3f) | 0x80),
+ ((($n >> 6) & 0x3f) | 0x80), (($n & 0x3f) | 0x80));
+ }
+ croak "number [$n] is too large for Unicode in \&unicode_to_utf8";
+}
+
+#?? The following package is unfinished.
+#?? It should parse the .enc file and create an array that maps
+#?? Unicode-index to encoded-str. I got stuck...
+
+# package XML::UM::EncParser;
+#
+# sub new
+# {
+# my ($class, %hash) = @_;
+# my $self = bless \%hash, $class;
+# $self;
+# }
+#
+# sub parse
+# {
+# my ($self, $filename) = @_;
+# open (FILE, $filename) || die "can't open .enc file $filename";
+# binmode (FILE);
+#
+# my $buf;
+# read (FILE, $buf, 4 + 40 + 2 + 2 + 1024);
+#
+# my ($magic, $name, $pfsize, $bmsize, @map) = unpack ("NA40nnN256", $buf);
+# printf "magic=%04x name=$name pfsize=$pfsize bmsize=$bmsize\n", $magic;
+#
+# if ($magic != 0xFEEBFACE)
+# {
+# close FILE;
+# die sprintf ("bad magic number [0x%08X] in $filename, expected 0xFEEBFACE", $magic);
+# }
+#
+# for (my $i = 0; $i < 256; $i++)
+# {
+# printf "[%d]=%d ", $i, $map[$i];
+# print "\n" if ($i % 8 == 7);
+# }
+#
+# for (my $i = 0; $i < $pfsize; $i++)
+# {
+# print "----- PrefixMap $i ----\n";
+# read (FILE, $buf, 2 + 2 + 32 + 32);
+# my ($min, $len, $bmap_start, @ispfx) = unpack ("CCnC64", $buf);
+# my (@ischar) = splice @ispfx, 32, 32, ();
+# #?? could use b256 instead of C32 for bitvector a la vec()
+#
+# print "ispfx=@ispfx\n";
+# print "ischar=@ischar\n";
+# $len = 256 if $len == 0;
+#
+# print " min=$min len=$len bmap_start=$bmap_start\n";
+# }
+#
+# close FILE;
+# }
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::UM - Convert UTF-8 strings to any encoding supported by XML::Encoding
+
+=head1 SYNOPSIS
+
+ use XML::UM;
+
+ # Set directory with .xml files that comes with XML::Encoding distribution
+ # Always include the trailing slash!
+ $XML::UM::ENCDIR = '/home1/enno/perlModules/XML-Encoding-1.01/maps/';
+
+ # Create the encoding routine
+ my $encode = XML::UM::get_encode (
+ Encoding => 'ISO-8859-2',
+ EncodeUnmapped => \&XML::UM::encode_unmapped_dec);
+
+ # Convert a string from UTF-8 to the specified Encoding
+ my $encoded_str = $encode->($utf8_str);
+
+ # Remove circular references for garbage collection
+ XML::UM::dispose_encoding ('ISO-8859-2');
+
+=head1 DESCRIPTION
+
+This module provides methods to convert UTF-8 strings to any XML encoding
+that L<XML::Encoding> supports. It creates mapping routines from the .xml
+files that can be found in the maps/ directory in the L<XML::Encoding>
+distribution. Note that the XML::Encoding distribution does install the
+.enc files in your perl directory, but not the.xml files they were created
+from. That's why you have to specify $ENCDIR as in the SYNOPSIS.
+
+This implementation uses the XML::Encoding class to parse the .xml
+file and creates a hash that maps UTF-8 characters (each consisting of up
+to 4 bytes) to their equivalent byte sequence in the specified encoding.
+Note that large mappings may consume a lot of memory!
+
+Future implementations may parse the .enc files directly, or
+do the conversions entirely in XS (i.e. C code.)
+
+=head1 get_encode (Encoding => STRING, EncodeUnmapped => SUB)
+
+The central entry point to this module is the XML::UM::get_encode() method.
+It forwards the call to the global $XML::UM::FACTORY, which is defined as
+an instance of XML::UM::SlowMapperFactory by default. Override this variable
+to plug in your own mapper factory.
+
+The XML::UM::SlowMapperFactory creates an instance of XML::UM::SlowMapper
+(and caches it for subsequent use) that reads in the .xml encoding file and
+creates a hash that maps UTF-8 characters to encoded characters.
+
+The get_encode() method of XML::UM::SlowMapper is called, finally, which
+generates an anonimous subroutine that uses the hash to convert
+multi-character UTF-8 blocks to the proper encoding.
+
+=head1 dispose_encoding ($encoding_name)
+
+Call this to free the memory used by the SlowMapper for a specific encoding.
+Note that in order to free the big conversion hash, the user should no longer
+have references to the subroutines generated by get_encode().
+
+The parameters to the get_encode() method (defined as name/value pairs) are:
+
+=over 4
+
+=item * Encoding
+
+The name of the desired encoding, e.g. 'ISO-8859-2'
+
+=item * EncodeUnmapped (Default: \&XML::UM::encode_unmapped_dec)
+
+Defines how Unicode characters not found in the mapping file (of the
+specified encoding) are printed.
+By default, they are converted to decimal entity references, like '{'
+
+Use \&XML::UM::encode_unmapped_hex for hexadecimal constants, like '«'
+
+=back
+
+=head1 CAVEATS
+
+I'm not exactly sure about which Unicode characters in the range (0 .. 127)
+should be mapped to themselves. See comments in XML/UM.pm near
+%DEFAULT_ASCII_MAPPINGS.
+
+The encodings that expat supports by default are currently not supported,
+(e.g. UTF-16, ISO-8859-1),
+because there are no .enc files available for these encodings.
+This module needs some more work. If you have the time, please help!
+
+=head1 AUTHOR
+
+Send bug reports, hints, tips, suggestions to Enno Derksen at
+<F<enno@att.com>>.
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,3947 @@
+############################################################################
+# Copyright (c) 1998,1999 Enno Derksen
+# All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+############################################################################
+#
+# To do (in no particular order):
+#
+# - Element tag names that are the same as a XQL keyword (e.g. "or", "not", ..)
+# are currently not supported. The parser and lexer needs to be smarter and
+# know what context they are in.
+# - output using xql:result etc.
+# - xml:space=preserve still needs to be adhered to in text() etc.
+# - I already added xql_preserveSpace. Still need to use it in (raw)text() etc.
+# - XQL functions (like value()) should probably work on input lists > 1 node
+# (The code was changed, but it needs to be tested. ancestor() wasn't fixed)
+# - verify implementation of xql_namespace
+# - verify implementation of end, index
+# - check passing of context to the solve() methods
+# - functions/methods may be wrong. They receive the entire LHS set,
+# so count() is right, but the rest may be wrong!
+# - may need to use different comment delimiters, '#' may be used in future XQL
+# definition (according to Joe Lapp, one of the XQL spec authors)
+# - caching of Node xql_values (?)
+# - finish the Date class
+# - discuss which classes: Date, Time, and/or DateTime ?
+# - conversion of Query result to Perl primitives, i.e. how do we return the
+# result of a query.
+# - add support for ordering/formatting the query results, see XML-QL
+# - discuss typecasting mechanism
+# - error reporting mechanism
+# - yyerror handler doesn't seem to work
+# - passing intermediate exceptions ($@) to the user
+# - more debugging support
+# - subst, map etc.
+# - use rawText for Nodes?
+# - recurse or not?
+# - text/rawText default - recurse or not?
+# - what should default value() implementation use?
+# - check if all Syntactic Constraints in XQL spec are implemented
+# - support all node types, i.e. Notation, Attlist etc.
+# - sorting in 'document order' doesn't work yet for 'other' DOM nodes
+# - generateFunction - support functions that return lists?
+# - match() function - what should it return?
+# - keeping track of reference nodes not always done right
+# - also think about Perl builtin functions
+# - conversion to Perl number throws warnings with -w (in comparisons etc.)
+# - sorting
+# - add sorting by attribute name (within same element)
+# (or other criteria)
+# - optional sorting in $union$ ?
+# - could add a flag that says "don't worry about document order for $union$"
+# - user defined sort?
+# - OPTIMIZE!
+# - Subscript operator
+# - Filter operator
+# - etc.
+
+package XML::XQL;
+use strict;
+
+use Carp;
+use XML::RegExp;
+
+use vars qw( @EXPORT $VERSION
+ $ContextStart $ContextEnd $BoldOn $BoldOff
+ %Func %Method %FuncArgCount
+ %AllowedOutsideSubquery %ConstFunc %ExpandedType
+ $Restricted $Included $ReXQLName
+ %CompareOper $Token_q $Token_qq $LAST_SORT_KEY
+ );
+
+@EXPORT = qw( $VERSION $Restricted $Included );
+
+BEGIN
+{
+ $VERSION = '0.63';
+
+ die "XML::XQL is already used/required" if defined $Included;
+ $Included = 1;
+
+ # From XQL spec (The '-' was added to allow XPath style function names.)
+ $ReXQLName = "(?:[-a-zA-Z_]+\\w*)";
+
+ $Token_q = undef;
+ $Token_qq = undef;
+
+ $Restricted = 0 unless defined $Restricted;
+
+ if (not $Restricted)
+ {
+ # Allow names with Perl package prefixes
+ $ReXQLName = "(?:$ReXQLName(?:::$ReXQLName)*)";
+
+ # Support q// and qq// strings
+ $Token_q = "q";
+ $Token_qq = "qq";
+ }
+};
+
+# To save the user some typing for the simplest cases
+sub solve
+{
+ my ($expr, @args) = @_;
+ my $query = new XML::XQL::Query (Expr => $expr);
+ my @result = $query->solve (@args);
+ $query->dispose;
+
+ @result;
+}
+
+#---------- Parser related stuff ----------------------------------------------
+
+# Find (nested) closing delimiter in q{} or qq{} strings
+sub parse_q
+{
+ my ($qname, $q, $str, $d1, $d2) = @_;
+ my ($match) = "";
+ my ($found);
+
+ while ($str =~ /^([^$d1$d2]*)($d1|($d2))(.*)/s)
+ {
+ defined ($3) and return ($4, $match . $1); # $d2 found
+
+ # match delimiters recursively
+ $match .= $1 . $2;
+
+ ($str, $found) = parse_q ($qname, $q, $4, $d1, $d2);
+ $match .= $found . $d2;
+ }
+ XML::XQL::parseError ("no $qname// closing delimiter found near '$q$d1'");
+}
+
+# To support nested delimiters in q{} and qq() strings
+my %MatchingCloseDelim =
+(
+ '{' => '}',
+ '(' => ')',
+ '<' => '>',
+ '[' => ']'
+);
+
+sub Lexer
+{
+ my($parser)=shift;
+
+ exists($parser->YYData->{LINE})
+ or $parser->YYData->{LINE} = 1;
+
+ $parser->YYData->{INPUT}
+ or return('', undef);
+
+ print "Lexer input=[" . $parser->YYData->{INPUT} . "]\n"
+ if $parser->{yydebug};
+
+ if ($Restricted)
+ {
+ # strip leading whitespace
+ $parser->YYData->{INPUT} =~ s/^\s*//;
+ }
+ else
+ {
+ # strip leading whitespace and comments
+ $parser->YYData->{INPUT} =~ s/^(\s|#.*)*//;
+ }
+
+
+ for ($parser->YYData->{INPUT})
+ {
+ s#^"([^"]*)"##o and return ('TEXT', $1);
+ s#^'([^']*)'##o and return ('TEXT', $1);
+
+ if (not $Restricted)
+ {
+ # Support q// and qq// string delimiters
+ for my $qname ('q', 'qq')
+ {
+ my ($q) = $parser->{Query}->{$qname};
+ if (defined ($q) and s/^$q(\[\(\{\<#!=-\+|'":;\.,\?\/!@\%^\*)//)
+ {
+ my ($d1, $d2) = ($1, $MatchingCloseDelim{$1});
+ my ($str);
+ if (defined $d2)
+ {
+ ($parser->YYData->{INPUT}, $str) = parse_q (
+ $qname, $q, $_, $d1, $d2);
+ }
+ else # close delim is same open delim
+ {
+ $d2 = $d1;
+ s/([^$d2])*$d2// or XML::XQL::parseError (
+ "no $qname// closing delimiter found near '$q$d1'");
+ $str = $1;
+ }
+ return ('TEXT', eval "$q$d1$str$d2");
+ }
+ }
+ }
+
+ s/^(-?\d+\.(\d+)?)// and return ('NUMBER', $1);
+ s/^(-?\d+)// and return ('INTEGER', $1);
+
+ s/^(\$|\b)(i?(eq|ne|lt|le|gt|ge))\1(?=\W)//i
+ and return ('COMPARE', "\L$2");
+
+ s/^((\$|\b)(any|all|or|and|not|to|intersect)\2)(?=\W)//i
+ and return ("\L$3", $1);
+
+ s/^((\$|\b)union\2(?=\W)|\|)//i and return ('UnionOp', $1);
+
+ s/^(;;?)// and return ('SeqOp', $1);
+
+ if (not $Restricted)
+ {
+ s/^(=~|!~)// and return ('MATCH', $1);
+ s/^\$((no_)?match)\$//i
+ and return ('MATCH', "\L$1");
+ s/^\$($ReXQLName)\$//o and return ('COMPARE', $1);
+ }
+
+ s/^(=|!=|<|<=|>|>=)// and return ('COMPARE', $1);
+
+ s!^(//|/|\(|\)|\.\.?|@|\!|\[|\]|\*|:|,)!!
+ and return ($1, $1);
+
+ s/^($ReXQLName)\s*\(//o
+ and return ('XQLName_Paren', $1);
+
+ s/^($XML::RegExp::Name)//o and return ('NCName', $1);
+ }
+}
+
+#------ end Parser related stuff ----------------------------------------------
+
+# Converts result from a Disjunction to a 0 or 1.
+# If it's a XML::XQL::Boolean, its value is returned.
+# If it's an empty list it returns 0.
+# If it's a node or a Text or Number, it returns 1.
+# If it's a list with 1 or more elements, it returns 1 if at least one
+# element evaluates to 1 (with toBoolean)
+sub toBoolean # static method
+{
+ my $arg = shift;
+
+ my $type = ref ($arg);
+ if ($type eq "ARRAY")
+ {
+ for my $n (@$arg)
+ {
+ return 1 if toBoolean ($n);
+ }
+ return 0;
+ }
+ return $arg->xql_toBoolean;
+}
+
+sub listContains
+{
+ my ($list, $x) = @_;
+
+#?? $n should be a PrimitiveType or an XML Node
+ for my $y (@$list)
+ {
+#?? return 1 if $x == $y;
+
+ if (ref($x) eq ref($y)) # same object class
+ {
+ my ($src1, $src2) = ($x->xql_sourceNode, $y->xql_sourceNode);
+ next if ((defined $src1 or defined $src2) and $src1 != $src2);
+
+ return ($x == $y) if (UNIVERSAL::isa ($x, 'XML::XQL::Node'));
+
+ return 1 if $x->xql_eq ($y);
+ }
+ }
+ 0;
+}
+
+sub toList
+{
+ my $r = shift;
+ (ref ($r) eq "ARRAY") ? $r : [ $r ];
+}
+
+# Prepare right hand side for a comparison, i.e.
+# turn it into a single value.
+# If it is a list with 2 or more values, it croaks.
+sub prepareRvalue
+{
+ my $r = shift;
+
+ if (ref ($r) eq "ARRAY")
+ {
+ # more than 1 value gives a runtime error (as per Joe Lapp)
+ croak "bad rvalue $r" if @$r > 1;
+ $r = $r->[0];
+ }
+
+ if (ref ($r) and $r->isa ('XML::XQL::Node'))
+ {
+ $r = $r->xql_value;
+ }
+ $r;
+}
+
+sub trimSpace
+{
+ $_[0] =~ s/^\s+//;
+ $_[0] =~ s/\s+$//;
+ $_[0];
+}
+
+# Assumption: max. 32768 (2**15 = 2**($BITS-1)) children (or attributes) per node
+# Use setMaxChildren() to support larger offspring.
+my $BITS = 16;
+$LAST_SORT_KEY = (2 ** $BITS) - 1;
+
+# Call with values: $max = 128 * (256**N), where N=0, 1, 2, ...
+sub setMaxChildren
+{
+ my $max = shift;
+ my $m = 128;
+ $BITS = 8;
+ while ($max > $m)
+ {
+ $m = $m * 256;
+ $BITS += 8;
+ }
+ $LAST_SORT_KEY = (2 ** $BITS) - 1;
+}
+
+sub createSortKey
+{
+ # $_[0] = parent sort key, $_[1] = child index,
+ # $_[2] = 0 for attribute nodes, 1 for other node types
+ my $vec = "";
+ vec ($vec, 0, $BITS) = $_[1];
+ vec ($vec, 7, 1) = $_[2] if $_[2]; # set leftmost bit (for non-attributes)
+ $_[0] . $vec;
+}
+
+#--------------- Sorting source nodes ----------------------------------------
+
+# Sort the list by 'document order' (as per the XQL spec.)
+# Values with an associated source node are sorted by the position of their
+# source node in the XML document.
+# Values without a source node are placed at the end of the resulting list.
+# The source node of an Attribute node, is its (parent) Element node
+# (per definition.) The source node of the other types of XML nodes, is itself.
+# The order for values with the same source node is undefined.
+
+sub sortDocOrder
+{
+#?? or should I just use: sort { $a->xql_sortKey cmp $b->xql_sortKey }
+
+ my $list = shift;
+
+#print "before---\n";
+#for (@$list)
+#{
+# print "key=" . keyStr($_->xql_sortKey) . " node=" . $_->getTagName . " id=" . $_->getAttribute('id') . "\n";
+#}
+
+ @$list = map { $_->[1] } # 3) extract nodes
+ sort { $a->[0] cmp $b->[0] } # 2) sort by sortKey
+ map { [$_->xql_sortKey, $_] } # 1) make [sortKey,node] records
+ @$list;
+
+#print "after---\n";
+#for (@$list)
+#{
+# print "key=" . keyStr($_->xql_sortKey) . " node=" . $_->getTagName . " id=" . $_->getAttribute('id') . "\n";
+#}
+
+ $list;
+}
+
+# Converts sort key from createSortKey in human readable form
+# For debugging only.
+sub keyStr
+{
+ my $key = shift;
+ my $n = $BITS / 8;
+ my $bitn = 2 ** ($BITS - 1);
+ my $str;
+ for (my $i = 0; $i < length $key; $i += $n)
+ {
+ my $dig = substr ($key, $i, $n);
+ my $v = vec ($dig, 0, $BITS);
+ my $elem = 0;
+ if ($v >= $bitn)
+ {
+ $v -= $bitn;
+ $elem = 1;
+ }
+ $str .= "/" if defined $str;
+ $str .= "@" unless $elem;
+ $str .= $v;
+ }
+ $str;
+}
+
+sub isEmptyList
+{
+ my $list = shift;
+ (ref ($list) eq "ARRAY") && (@$list == 0);
+}
+
+# Used by Element and Attribute nodes
+sub buildNameSpaceExpr
+{
+ my ($nameSpace, $name) = @_;
+ $name = ".*" if $name eq "*";
+ if (defined $nameSpace)
+ {
+ $nameSpace = ".*" if $nameSpace eq "*";
+ "^$nameSpace:$name\$";
+ }
+ else
+ {
+ "^$name\$";
+ }
+}
+
+sub prepareForCompare
+{
+ my ($left, $right) = @_;
+ my $leftType = $left->xql_primType;
+ if ($leftType == 0) # Node
+ {
+ $left = $left->xql_value;
+ $leftType = $left->xql_primType;
+ }
+ my $rightType = $right->xql_primType;
+ if ($rightType == 0) # Node
+ {
+ $right = $right->xql_value;
+ $rightType = $right->xql_primType;
+ }
+ # Note: reverse the order if $leftType < $rightType
+ ($leftType < $rightType, $left, $right);
+}
+
+sub xql_eq
+{
+ my ($left, $right, $ignoreCase) = @_;
+ my $reverse;
+ ($reverse, $left, $right) = prepareForCompare ($left, $right);
+ $reverse ? $right->xql_eq ($left, $ignoreCase)
+ : $left->xql_eq ($right, $ignoreCase);
+}
+
+sub xql_ne
+{
+ my ($left, $right, $ignoreCase) = @_;
+ my $reverse;
+ ($reverse, $left, $right) = prepareForCompare ($left, $right);
+ $reverse ? $right->xql_ne ($left, $ignoreCase)
+ : $left->xql_ne ($right, $ignoreCase);
+}
+
+sub xql_lt
+{
+ my ($left, $right, $ignoreCase) = @_;
+ my $reverse;
+ ($reverse, $left, $right) = prepareForCompare ($left, $right);
+ $reverse ? $right->xql_ge ($left, $ignoreCase)
+ : $left->xql_lt ($right, $ignoreCase);
+}
+
+sub xql_le
+{
+ my ($left, $right, $ignoreCase) = @_;
+ my $reverse;
+ ($reverse, $left, $right) = prepareForCompare ($left, $right);
+ $reverse ? $right->xql_gt ($left, $ignoreCase)
+ : $left->xql_le ($right, $ignoreCase);
+}
+
+sub xql_gt
+{
+ my ($left, $right, $ignoreCase) = @_;
+ my $reverse;
+ ($reverse, $left, $right) = prepareForCompare ($left, $right);
+ $reverse ? $right->xql_le ($left, $ignoreCase)
+ : $left->xql_gt ($right, $ignoreCase);
+}
+
+sub xql_ge
+{
+ my ($left, $right, $ignoreCase) = @_;
+ my $reverse;
+ ($reverse, $left, $right) = prepareForCompare ($left, $right);
+ $reverse ? $right->xql_lt ($left, $ignoreCase)
+ : $left->xql_ge ($right, $ignoreCase);
+}
+
+sub xql_ieq { xql_eq (@_, 1); }
+sub xql_ine { xql_ne (@_, 1); }
+sub xql_ilt { xql_lt (@_, 1); }
+sub xql_igt { xql_gt (@_, 1); }
+sub xql_ige { xql_ge (@_, 1); }
+sub xql_ile { xql_le (@_, 1); }
+
+sub tput
+{
+ # Let me know if I need to add other systems for which 'tput' is not
+ # available.
+ if ($^O =~ /Win|MacOS/)
+ {
+ return undef;
+ }
+ else
+ {
+ my $c = shift;
+
+ # tput is only available on Unix systems.
+ # Calling `tput ...` on Windows generates warning messages
+ # that can not be suppressed.
+ return `tput $c`;
+ }
+}
+
+# Underline the query subexpression that fails (if tput exists)
+$ContextStart = tput ('smul') || ">>"; # smul: underline on
+$ContextEnd = tput ('rmul') || "<<"; # rmul: underline off
+# Used for making the significant keyword of a subexpression bold, e.g. "$and$"
+$BoldOn = tput ('bold') || "";
+$BoldOff = tput ('rmul') . tput ('smul') || "";
+# rmul reverts the string back to normal text, smul makes it underlined again,
+# so the rest of the subexpresion will be underlined.
+
+sub setErrorContextDelimiters
+{
+ ($ContextStart, $ContextEnd, $BoldOn, $BoldOff) = @_;
+}
+
+sub delim
+{
+ my ($str, $node, $contextNode) = @_;
+ if ($node == $contextNode)
+ {
+ $str =~ s/\016([^\017]*)\017/$BoldOn$1$BoldOff/g;
+ "$ContextStart$str$ContextEnd";
+ }
+ else
+ {
+ $str =~ s/\016([^\017]*)\017/$1/g;
+ $str;
+ }
+}
+
+sub bold
+{
+ my $x = shift;
+ "\016$x\017"; # arbitrary ASCII codes
+}
+
+sub parseError
+{
+ my ($msg) = @_;
+ print STDERR $msg . "\n";
+ croak $msg;
+}
+
+# Builtin XQL functions (may not appear after Bang "!")
+%Func =
+(
+ ancestor => \&XML::XQL::Func::ancestor,
+ attribute => \&XML::XQL::Func::attribute,
+ comment => \&XML::XQL::Func::comment,
+ element => \&XML::XQL::Func::element,
+ id => \&XML::XQL::Func::id,
+ node => \&XML::XQL::Func::node,
+ pi => \&XML::XQL::Func::pi,
+ textNode => \&XML::XQL::Func::textNode,
+ true => \&XML::XQL::Func::true,
+ false => \&XML::XQL::Func::false,
+
+# NOTE: date() is added with: use XML::XQL::Date;
+);
+
+# Builtin XQL methods (may appear after Bang "!")
+%Method =
+(
+ baseName => \&XML::XQL::Func::baseName,
+ count => \&XML::XQL::Func::count,
+ end => \&XML::XQL::Func::end,
+ 'index' => \&XML::XQL::Func::xql_index,
+ namespace => \&XML::XQL::Func::namespace,
+ nodeName => \&XML::XQL::Func::nodeName,
+ nodeType => \&XML::XQL::Func::nodeType,
+ nodeTypeString => \&XML::XQL::Func::nodeTypeString,
+ prefix => \&XML::XQL::Func::prefix,
+ text => \&XML::XQL::Func::text,
+ rawText => \&XML::XQL::Func::rawText,
+ value => \&XML::XQL::Func::value,
+);
+
+# Number of arguments for builtin XQL functions:
+# Value is either an integer or a range. Value is 0 if not specified.
+# Range syntax:
+#
+# range ::= '[' start ',' end [ ',' start ',' end ]* ']'
+# start ::= INTEGER
+# end ::= INTEGER | '-1' ('-1' means: "or more")
+#
+# Example: [2, 4, 7, 7, 10, -1] means (2,3,4,7,10,11,...)
+
+%FuncArgCount =
+(
+ ancestor => 1,
+ attribute => [0,1],
+ count => [0,1],
+# date => 1,
+ element => [0,1],
+ id => 1,
+ text => [0,1],
+ rawText => [0,1],
+);
+
+%AllowedOutsideSubquery =
+(
+ ancestor => 1,
+ attribute => 1,
+ comment => 1,
+ element => 1,
+ id => 1,
+ node => 1,
+ pi => 1,
+ textNode => 1,
+
+#?? what about subst etc.
+);
+
+# Functions that always return the same thing if their arguments are constant
+%ConstFunc =
+(
+ true => 1,
+ false => 1,
+# date => 1,
+);
+
+%ExpandedType =
+(
+ "boolean" => "XML::XQL::Boolean",
+ "text" => "XML::XQL::Text",
+ "number" => "XML::XQL::Number",
+ "date" => "XML::XQL::Date",
+ "node" => "XML::XQL::Node",
+);
+
+sub expandType
+{
+ my ($type) = @_;
+ # Expand "number" to "XML::XQL::Number" etc.
+ my $expanded = $ExpandedType{"\L$type"};
+ defined $expanded ? $expanded : $type;
+}
+
+sub defineExpandedTypes
+{
+ my (%args) = @_;
+ while (my ($key, $val) = each %args)
+ {
+ # Convert keys to lowercase
+ $ExpandedType{"\L$key"} = $val;
+ }
+}
+
+sub generateFunction
+{
+ my ($name, $funcName, $returnType, $argCount, $allowedOutsideSubquery,
+ $const, $queryArg) = @_;
+ $argCount = 0 unless defined $argCount;
+ $allowedOutsideSubquery = 1 unless defined $allowedOutsideSubquery;
+ $const = 0 unless defined $const;
+ $queryArg = 0 unless defined $queryArg;
+
+ $returnType = expandType ($returnType);
+ my $wrapperName = "xql_wrap_$name";
+ $wrapperName =~ s/\W/_/g; # replace colons etc.
+
+ my $func;
+ my $code = <<END_CODE;
+sub $wrapperName {
+ my (\$context, \$list, \@arg) = \@_;
+ for my \$i (0 .. \$#arg)
+ {
+ if (\$i == $queryArg)
+ {
+ \$arg[\$i] = XML::XQL::toList (\$arg[\$i]->solve (\$context, \$list));
+ }
+ else
+ {
+ \$arg[\$i] = XML::XQL::prepareRvalue (\$arg[\$i]->solve (\$context, \$list));
+ return [] if XML::XQL::isEmptyList (\$arg[\$i]);
+ \$arg[\$i] = \$arg[\$i]->xql_toString;
+ }
+ }
+END_CODE
+
+ if (ref ($argCount) eq "ARRAY" && @$argCount == 2 &&
+ $argCount->[0] == $argCount->[1])
+ {
+ $argCount = $argCount->[0];
+ }
+
+ if ($queryArg != -1)
+ {
+ $code .=<<END_CODE;
+ my \@result = ();
+ my \@qp = \@{\$arg[$queryArg]};
+ for (my \$k = 0; \$k < \@qp; \$k++)
+ {
+ \$arg[$queryArg] = \$qp[\$k]->xql_toString;
+END_CODE
+ }
+
+ if (ref ($argCount) ne "ARRAY")
+ {
+ $code .= " my \$result = $funcName (";
+ for my $i (0 .. $argCount-1)
+ {
+ $code .= ", " if $i;
+ $code .= "\$arg[$i]";
+ }
+ $code .= ");\n";
+ }
+ elsif (@$argCount == 2)
+ {
+ my ($start, $end) = ($argCount->[0], $argCount->[1]);
+ if ($end == -1)
+ {
+ $code .= " my \$result = $funcName (";
+ for my $i (0 .. ($start - 1))
+ {
+ $code .= ", " if $i;
+ $code .= "\$arg[$i]";
+ }
+ $code .= ", \@arg[" . $start . " .. \$#arg]);\n";
+ }
+ else
+ {
+ $code .= " my \$n = \@arg;\n my \$result;\n ";
+ for my $j ($argCount->[0] .. $argCount->[1])
+ {
+ $code .= " els" unless $j == $argCount->[0];
+ $code .= ($j == $argCount->[1] ? "e\n" :
+ "if (\$n == $j)\n");
+ $code .= " {\n \$result = $funcName (";
+ for my $i (0 .. $j-1)
+ {
+ $code .= ", " if $i;
+ $code .= "\$arg[$i]";
+ }
+ $code .= ");\n }\n";
+ }
+ }
+ }
+ else #?? what now...
+ {
+ $code .= " my \$result = $funcName (\@arg);\n";
+ }
+
+ if ($returnType eq "*") # return result as is
+ {
+ $code .= " \$result = [] unless defined \$result;\n";
+ }
+ else
+ {
+ $code .= " \$result = defined \$result ? new $returnType (\$result) : [];\n";
+ }
+
+ if ($queryArg == -1)
+ {
+ $code .= " \$result;\n}\n";
+ }
+ else
+ {
+ $code .= " push \@result, \$result;\n }\n \\\@result;\n}\n";
+ }
+ $code .= "\$func = \\\&$wrapperName;";
+
+#print "CODE=$code\n";
+
+ eval "$code";
+ if ($@) { croak "generateFunction failed for $funcName: $@\n"; }
+
+ defineFunction ($name, $func, $argCount,
+ $allowedOutsideSubquery, $const);
+}
+
+sub defineFunction
+{
+ my ($name, $func, $argCount, $allowedOutside, $const) = @_;
+ $Func{$name} = $func;
+ $FuncArgCount{$name} = $argCount;
+ $AllowedOutsideSubquery{$name} = 1 if $allowedOutside;
+ $ConstFunc{$name} = $const;
+}
+
+sub defineMethod
+{
+ my ($name, $func, $argCount, $allowedOutside) = @_;
+ $Method{$name} = $func;
+ $FuncArgCount{$name} = $argCount;
+ $AllowedOutsideSubquery{$name} = 1 if $allowedOutside;
+}
+
+%CompareOper =
+(
+ 'eq' => \&XML::XQL::xql_eq,
+ 'ne' => \&XML::XQL::xql_ne,
+ 'le' => \&XML::XQL::xql_le,
+ 'ge' => \&XML::XQL::xql_ge,
+ 'gt' => \&XML::XQL::xql_gt,
+ 'lt' => \&XML::XQL::xql_lt,
+
+ 'ieq' => \&XML::XQL::xql_ieq,
+ 'ine' => \&XML::XQL::xql_ine,
+ 'ile' => \&XML::XQL::xql_ile,
+ 'ige' => \&XML::XQL::xql_ige,
+ 'igt' => \&XML::XQL::xql_igt,
+ 'ilt' => \&XML::XQL::xql_ilt,
+
+ '=' => \&XML::XQL::xql_eq,
+ '!=' => \&XML::XQL::xql_ne,
+ '>' => \&XML::XQL::xql_gt,
+ '>=' => \&XML::XQL::xql_ge,
+ '<' => \&XML::XQL::xql_lt,
+ '<=' => \&XML::XQL::xql_le,
+);
+
+sub defineComparisonOperators
+{
+ my (%args) = @_;
+ %CompareOper = (%CompareOper, %args);
+}
+
+sub defineTokenQ
+{
+ $Token_q = $_[0];
+}
+
+sub defineTokenQQ
+{
+ $Token_qq = $_[0];
+}
+
+my %ElementValueType = ();
+my $ElementValueTypeCount = 0;
+
+sub elementValue
+{
+ my ($elem) = @_;
+
+#?? raw text/recursive ?
+
+ return new XML::XQL::Text ($elem->xql_text, $elem)
+ if $ElementValueTypeCount == 0; # user hasn't defined any types
+
+ my $tagName = $elem->xql_nodeName;
+ my $func = $ElementValueType{$tagName};
+ return new XML::XQL::Text ($elem->xql_text, $elem) unless defined $func;
+
+ &$func ($elem, $tagName);
+}
+
+sub defineElementValueConvertor
+{
+ my ($elemTagName, $func) = @_;
+ my $prev = defined $ElementValueType{$elemTagName};
+ $ElementValueType{$elemTagName} = $func;
+ if (defined $func != $prev)
+ {
+ defined $func ? $ElementValueTypeCount++ : $ElementValueTypeCount--;
+ }
+}
+
+my %AttrValueType = ();
+my $AttrValueTypeCount = 0;
+
+sub attrValue
+{
+ my ($attr) = @_;
+
+#?? raw text/recursive ?
+ return new XML::XQL::Text ($attr->xql_text, $attr)
+ if $AttrValueTypeCount == 0; # user hasn't defined any types
+
+ my $elem = $attr->xql_parent->xql_nodeName;
+ my $attrName = $attr->xql_nodeName;
+ my $func = $AttrValueType{"$elem $attrName"};
+
+ if (not defined $func)
+ {
+ $elem = "*";
+ $func = $AttrValueType{"$elem $attrName"};
+ }
+ return new XML::XQL::Text ($attr->xql_text, $attr) unless defined $func;
+
+ &$func ($attr, $attrName, $elem);
+}
+
+sub defineAttrValueConvertor
+{
+ my ($elemTagName, $attrName, $type) = @_;
+ my $both = "$elemTagName $attrName";
+
+ my $prev = defined $AttrValueType{$both};
+ $AttrValueType{$both} = $type;
+ if (defined $type != $prev)
+ {
+ defined $type ? $AttrValueTypeCount++ : $AttrValueTypeCount--;
+ }
+}
+
+#=== debug
+
+sub exception
+{
+ my ($ex) = @_;
+ print "Exception: $ex\n" if $ex;
+ $ex;
+}
+
+sub d
+{
+ my $n = shift;
+ my $type = ref $n;
+
+ if ($type eq "ARRAY")
+ {
+ my $str = "";
+ for my $i (@$n)
+ {
+ $str .= ", " unless $str eq "";
+ $str .= d ($i);
+ }
+ return "[$str]";
+ }
+ elsif ($type eq "HASH")
+ {
+ my $str = "";
+ while (my ($key, $val) = %$n)
+ {
+ $str .= ", " unless $str eq "";
+ $str .= $key . " => " . d ($val);
+ }
+ return "{$str}";
+ }
+ elsif ($type)
+ {
+ return $n->xql_contextString if ($n->isa ('XML::XQL::Operator'));
+ return "${type}\[" . $n->xql_toString . "]" if $n->isa ('XML::XQL::PrimitiveType');
+# return "${type}\[" . $n->toString . "]" if $n->isa ('XML::DOM::Element');
+ }
+ $n;
+}
+
+
+package XML::XQL::Query;
+
+use Carp;
+use XML::XQL::Parser;
+
+use vars qw( %Func %FuncArgCount );
+
+my $parser = new XML::XQL::Parser;
+
+# This is passed as 'yyerror' to YYParse
+sub Error
+{
+ my($parser) = shift;
+
+ print STDERR "Error in Query Expression near: " . $parser->YYData->{INPUT} . "\n";
+}
+
+sub defineFunction
+{
+ my ($self, $name, $func, $argCount, $allowedOutside, $const) = @_;
+ $self->{Func}->{$name} = $func;
+ $self->{FuncArgCount}->{$name} = $argCount;
+ $self->{AllowedOutsideSubquery}->{$name} = 1 if $allowedOutside;
+ $self->{ConstFunc} = $const;
+}
+
+sub defineMethod
+{
+ my ($self, $name, $func, $argCount, $allowedOutside) = @_;
+ $self->{Method}->{$name} = $func;
+ $self->{FuncArgCount}->{$name} = $argCount;
+ $self->{AllowedOutsideSubquery}->{$name} = 1 if $allowedOutside;
+}
+
+sub defineComparisonOperators
+{
+ my ($self, %args) = @_;
+ $self->{CompareOper} = \%args;
+}
+
+sub defineTokenQ
+{
+ $_[0]->{'q'} = $_[1];
+}
+
+sub defineTokenQQ
+{
+ $_[0]->{'qq'} = $_[1];
+}
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ croak "no Expr specified" unless defined $args{Expr};
+
+ my $self = bless \%args, $class;
+
+ my $error = $self->{'Error'} || \&XML::XQL::Query::Error;
+ my $debug = defined ($self->{Debug}) ? $self->{Debug} : 0; # 0x17;
+
+ $self->{'q'} = $XML::XQL::Token_q unless exists $self->{'q'};
+ $self->{'qq'} = $XML::XQL::Token_qq unless exists $self->{'qq'};
+
+ # Invoke the query expression parser
+ $parser->YYData->{INPUT} = $self->{Expr};
+ $parser->{Query} = $self;
+ $self->{Tree} = $parser->YYParse (yylex => \&XML::XQL::Lexer,
+ yyerror => $error,
+ yydebug => $debug);
+
+ # Nothing but whitespace should be left over
+ if ($parser->YYData->{INPUT} !~ /^\s*$/)
+ {
+ XML::XQL::parseError ("Error when parsing expression. Unexpected characters at end of expression [" . $parser->YYData->{INPUT} . "]")
+ }
+
+ XML::XQL::parseError ("Error when parsing expression")
+ unless defined $self->{Tree};
+
+ $self->{Tree}->{Query} = $self;
+ $self->{Tree}->xql_check (0, 0); # inSubQuery=0, inParam=0
+
+ print "Expression parsed successfully\n" if $debug;
+
+ $self;
+}
+
+sub dispose
+{
+ my $self = shift;
+
+ undef $self->{Tree}->{Query};
+
+ $self->{Tree}->dispose;
+ delete $self->{Tree};
+}
+
+sub isNodeQuery
+{
+ $_[0]->{NodeQuery};
+}
+
+sub solve
+{
+ my ($self, @list) = @_;
+ my $context = undef;
+
+ # clear cached "once" values
+ $self->{Tree}->xql_prepCache;
+ my $result = $self->{Tree}->solve ($context, \@list);
+ ref ($result) eq "ARRAY" ? @$result : ($result);
+}
+
+sub toString
+{
+ $_[0]->{Expr};
+}
+
+sub toDOM
+{
+ my ($self, $doc) = @_;
+ my $root = $doc->createElement ("XQL");
+ $doc->appendChild ($root);
+ $root->appendChild ($self->{Tree}->xql_toDOM ($doc));
+ $doc;
+}
+
+sub findComparisonOperator
+{
+ my ($self, $name) = @_;
+ my $cmp;
+ if (exists $self->{CompareOper}->{$name})
+ {
+ $cmp = $self->{CompareOper}->{$name};
+ }
+ else
+ {
+ $cmp = $XML::XQL::CompareOper{$name};
+ }
+ if (not defined $cmp)
+ {
+ XML::XQL::parseError ("undefined comparison operator '$name'");
+ }
+ $cmp;
+}
+
+# Return function pointer. Croak if wrong number of arguments.
+sub findFunctionOrMethod
+{
+ my ($self, $name, $args) = @_;
+
+ my $func;
+ my $type = "function";
+ if (exists $self->{Func}->{$name})
+ {
+ $func = $self->{Func}->{$name};
+ }
+ elsif (exists $self->{Method}->{$name})
+ {
+ $func = $self->{Method}->{$name};
+ $type = "method";
+ }
+ elsif (defined $XML::XQL::Func{$name})
+ {
+ $func = $XML::XQL::Func{$name};
+ }
+ elsif (defined $XML::XQL::Method{$name})
+ {
+ $func = $XML::XQL::Method{$name};
+ $type = "method";
+ }
+ elsif (not $XML::XQL::Restricted)
+ {
+ $func = XML::XQL::generatePerlWrapper ($name);
+ }
+
+ XML::XQL::parseError ("undefined function/method '$name' in query '" .
+ $self->toString . "'")
+ unless defined &$func;
+
+ my $funcArgCount = $self->{FuncArgCount}->{$name}
+ || $XML::XQL::FuncArgCount{$name} || 0;
+
+ # Check number of args
+ my $nargs = @$args;
+
+#print "$args " . XML::XQL::d($args) . "\n";
+
+ my $ok = 0;
+ if (ref ($funcArgCount) eq "ARRAY")
+ {
+ my $i = 0;
+ my $n = @$funcArgCount;
+ while ($i < $n)
+ {
+ my $s = $funcArgCount->[$i++];
+ my $e = $funcArgCount->[$i++] || $s; # same as $s if odd #args
+ if ($nargs >= $s && ($e == -1 || $nargs <= $e))
+ {
+ $ok = 1; # found it
+ last;
+ }
+ }
+ }
+ else
+ {
+ $ok = ($nargs eq $funcArgCount);
+ }
+
+ XML::XQL::parseError ("wrong number of args ($nargs) for $type $name in query '" .
+ $self->toString . "', it should be " . XML::XQL::d($funcArgCount))
+ if not $ok;
+
+ return ($func, $type);
+}
+
+sub isAllowedOutsideSubquery
+{
+ my ($self, $funcName) = @_;
+ my ($ok) = $self->{AllowedOutsideSubquery}->{$funcName};
+ return $ok if defined $ok;
+ $XML::XQL::AllowedOutsideSubquery{$funcName};
+}
+
+package XML::XQL::Operator;
+use fields qw{ Left Right Parent };
+
+sub new
+{
+ my ($class, %attr) = @_;
+ my $self = bless \%attr, $class;
+
+ $self->{Left}->setParent ($self) if defined $self->{Left};
+ $self->{Right}->setParent ($self) if defined $self->{Right};
+
+ $self;
+}
+
+sub dispose
+{
+ my $self = shift;
+ if (defined ($self->{Left}))
+ {
+ $self->{Left}->dispose;
+ undef $self->{Left};
+ }
+ if (defined ($self->{Right}))
+ {
+ $self->{Right}->dispose;
+ undef $self->{Right};
+ }
+
+ undef $self->{Parent};
+}
+
+sub xql_check
+{
+ my ($self, $inSubQuery, $inParam) = @_;
+ $self->{Left}->xql_check ($inSubQuery, $inParam);
+ $self->{Right}->xql_check ($inSubQuery, $inParam) if defined $self->{Right};
+}
+
+sub xql_prepCache
+{
+ my ($self) = @_;
+ $self->{Left}->xql_prepCache;
+ $self->{Right}->xql_prepCache if defined $self->{Right};
+}
+
+sub xql_toDOM
+{
+ my ($self, $doc) = @_;
+ my $name = ref $self;
+ $name =~ s/.*:://;
+ my $elem = $doc->createElement ($name);
+ if (defined $self->{Left})
+ {
+ my $left = $doc->createElement ("left");
+ $elem->appendChild ($left);
+ $left->appendChild ($self->{Left}->xql_toDOM ($doc));
+ }
+ if (defined $self->{Right})
+ {
+ my $right = $doc->createElement ("right");
+ $elem->appendChild ($right);
+ $right->appendChild ($self->{Right}->xql_toDOM ($doc));
+ }
+ $elem;
+}
+
+sub isConstant
+{
+ 0;
+}
+
+# Overriden by Union and Path operators
+sub mustSort
+{
+ 0;
+}
+
+sub setParent
+{
+ $_[0]->{Parent} = $_[1];
+}
+
+sub warning
+{
+ my ($self, $msg) = @_;
+ print STDERR "WARNING: $msg";
+ print STDERR " Context: " . $self->toContextString . "\n";
+}
+
+sub root
+{
+ my ($self) = @_;
+ my $top = $self;
+
+ while (defined ($top->{Parent}))
+ {
+ $top = $top->{Parent};
+ }
+ $top;
+}
+
+sub query
+{
+ $_[0]->root->{Query};
+}
+
+sub toContextString
+{
+ my ($self) = @_;
+ $self->root->xql_contextString ($self);
+}
+
+sub debugString
+{
+ my ($self) = @_;
+ my $str = "[" . ref($self);
+ while (my ($key, $val) = each %$self)
+ {
+ $str .= "$key=>" . XML::XQL::d($val);
+ }
+ $str . "]";
+}
+
+sub verbose
+{
+ my ($self, $str, $list) = @_;
+# print STDERR "$self - $str: " . XML::XQL::d($list) . "\n";
+ $list;
+}
+
+package XML::XQL::Root; # "/" at start of XQL expression
+use base 'XML::XQL::Operator'; # L -> L
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ return [] if (@$list < 1);
+
+#?? what if first value is not a XML::XQL::Node? should we try the second one?
+ [$list->[0]->xql_document];
+}
+#?? add isOnce here?
+
+sub xql_check
+{
+}
+
+sub xql_prepCache
+{
+}
+
+sub xql_contextString
+{
+ XML::XQL::delim ("/", @_);
+}
+
+package XML::XQL::Path;
+use base 'XML::XQL::Operator'; # L -> L
+use fields qw{ PathOp };
+
+sub new
+{
+ my ($class, %arg) = @_;
+ my $self = bless \%arg, $class;
+
+ $self->{Left} ||= new XML::XQL::Root;
+
+ $self->{Left}->setParent ($self);
+ $self->{Right}->setParent ($self);
+
+ $self;
+}
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ $list = $self->{Left}->solve ($context, $list);
+ $self->verbose ("left", $list);
+
+ return $list if @$list < 1;
+
+ if ($self->{PathOp} eq '/')
+ {
+ $self->verbose ("result", $self->{Right}->solve ($context, $list));
+ }
+ else # recurse "//"
+ {
+ my $new_list = [];
+ my $n = @$list;
+ NODE: for (my $i = 0; $i < $n; $i++)
+ {
+ my $node = $list->[$i];
+ # Node must be an Element or must be allowed to contain Elements
+ # i.e. must be an Element or a Document
+ # (DocumentFragment is not expected here)
+ my $nodeType = $node->xql_nodeType;
+ next NODE unless ($nodeType == 1 || $nodeType == 9);
+
+ # Skip the node if one of its ancestors is part of the input $list
+ # (and therefore already processed)
+ my $parent = $node->xql_parent;
+ while (defined $parent)
+ {
+ for (my $j = $i - 1; $j >= 0; $j--)
+ {
+ next NODE if ($parent == $list->[$j]);
+ }
+ $parent = $parent->xql_parent;
+ }
+ recurse ($node, $new_list);
+ }
+
+ my $results = $self->{Right}->solve ($context, $new_list);
+
+ # Sort the result list unless the parent Operator will sort
+ my $parent = $self->{Parent};
+ XML::XQL::sortDocOrder ($results)
+ unless defined ($parent) and $parent->mustSort;
+
+ $self->verbose ("result //", $results);
+ }
+}
+
+sub mustSort
+{
+ $_[0]->{PathOp} eq '//';
+}
+
+sub recurse
+{
+ my ($node, $list) = @_;
+ push @$list, $node;
+ for my $kid (@{$node->xql_element})
+ {
+ recurse ($kid, $list);
+ }
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+
+ my $str = $self->{Left}->isa ('XML::XQL::Root') ?
+ "" : $self->{Left}->xql_contextString (@_);
+
+ XML::XQL::delim ($str . XML::XQL::bold($self->{PathOp}) .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+sub xql_toDOM
+{
+ my ($self, $doc) = @_;
+ my $elem = $self->SUPER::xql_toDOM ($doc);
+ $elem->setAttribute ("pathOp", $self->{PathOp});
+ $elem;
+}
+
+package XML::XQL::Sequence; # "elem;elem" or "elem;;elem"
+use base 'XML::XQL::Operator'; # L -> L
+use fields qw{ Oper };
+
+# See "The Design of XQL" by Jonathan Robie
+# <URL:http://www.texcel.no/whitepapers/xql-design.html>
+# for definition of Sequence operators.
+
+# Note that the "naive" implementation slows things down quite a bit here...
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my $left = $self->{Left}->solve ($context, $list);
+ $self->verbose ("left", $left);
+ return [] unless @$left;
+
+ my $right = $self->{Right}->solve ($context, $list);
+ $self->verbose ("right", $right);
+ return [] unless @$right;
+
+ my @result;
+ if ($self->{Oper} eq ';') # immediately precedes
+ {
+ my %hleft; @hleft{@$left} = (); # initialize all values to undef
+ my %pushed;
+
+ for my $r (@$right)
+ {
+ # Find previous sibling that is not a text node that has only
+ # whitespace that can be ignored (because xml:space=preserve)
+ my $prev = $r->xql_prevNonWS;
+ # $prev must be defined and must exist in $left
+ next unless $prev and exists $hleft{$prev};
+
+ # Filter duplicates (no need to sort afterwards)
+ push @result, $prev unless $pushed{$prev}++;
+ push @result, $r unless $pushed{$r}++;
+ }
+ }
+ else # oper eq ';;' (i.e. precedes)
+ {
+ my %pushed;
+
+ for my $r (@$right)
+ {
+ for my $l (@$left)
+ {
+ # If left node precedes right node, add them
+ if ($l->xql_sortKey lt $r->xql_sortKey)
+ {
+ # Filter duplicates
+ push @result, $l unless $pushed{$l}++;
+ push @result, $r unless $pushed{$r}++;
+ }
+ }
+
+#?? optimize - left & right are already sorted...
+ # sort in document order
+ XML::XQL::sortDocOrder (\@result) if @result;
+ }
+ }
+ \@result;
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) .
+ XML::XQL::bold($self->{Oper}) .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::Current; # "."
+use base 'XML::XQL::Operator'; # L -> L
+
+sub xql_check
+{
+}
+
+sub xql_prepCache
+{
+}
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ $list;
+}
+
+sub xql_contextString
+{
+ XML::XQL::delim (".", @_);
+}
+
+package XML::XQL::Parent; # ".."
+use base 'XML::XQL::Operator';
+
+sub xql_check
+{
+}
+
+sub xql_prepCache
+{
+}
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my @result = ();
+ for my $node (@$list)
+ {
+ push @result, $node->xql_parent;
+ }
+ \@result;
+}
+
+sub xql_contextString
+{
+ XML::XQL::delim ("..", @_);
+}
+
+package XML::XQL::Element; # "elem"
+use base 'XML::XQL::Operator'; # L -> L
+use fields qw{ Name NameSpace Expr };
+
+sub new
+{
+ my ($class, %args) = @_;
+ if (not defined ($args{NameSpace}))
+ {
+ if ($args{Name} eq "*")
+ {
+ return bless \%args, 'XML::XQL::AllElements';
+ }
+ else
+ {
+ return bless \%args, 'XML::XQL::SimpleElement';
+ }
+ }
+
+ $args{Expr} = XML::XQL::buildNameSpaceExpr ($args{NameSpace},
+ $args{Name});
+ bless \%args, $class;
+}
+
+sub xql_check
+{
+}
+
+sub xql_prepCache
+{
+}
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my @result = ();
+
+ my $expr = $self->{Expr};
+ for my $node (@$list)
+ {
+ for my $kid (@{$node->xql_element})
+ {
+ push @result, $kid if $kid->xql_nodeName =~ /$expr/;
+ }
+ }
+ \@result;
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ my $name = $self->{Name};
+ my $space = $self->{NameSpace};
+
+ my $str = defined($space) ? "$space:$name" : $name;
+
+ XML::XQL::delim ($str, $self, @_);
+}
+
+sub xql_toDOM
+{
+ my ($self, $doc) = @_;
+ my $elem = $self->SUPER::xql_toDOM ($doc);
+
+ my $name = $self->{Name};
+ my $space = $self->{NameSpace};
+ my $str = defined($space) ? "$space:$name" : $name;
+
+ $elem->setAttribute ("name", $str);
+ $elem;
+}
+
+package XML::XQL::SimpleElement; # "elem"
+use base 'XML::XQL::Element'; # L -> L
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my @result = ();
+ my $name = $self->{Name};
+
+ for my $node (@$list)
+ {
+ push @result, @{ $node->xql_element ($name) };
+ }
+ \@result;
+}
+
+package XML::XQL::AllElements; # "*"
+use base 'XML::XQL::Element'; # L -> L
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my @result = ();
+
+ for my $node (@$list)
+ {
+ push @result, @{$node->xql_element};
+ }
+ \@result;
+}
+
+package XML::XQL::Attribute; # "@attr"
+use base 'XML::XQL::Operator'; # L -> L of Attributes
+use fields qw{ Name NameSpace Expr };
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ if (not defined ($args{NameSpace}))
+ {
+ if ($args{Name} eq "*")
+ {
+ return bless \%args, 'XML::XQL::AllAttr';
+ }
+ else
+ {
+ return bless \%args, 'XML::XQL::SimpleAttr';
+ }
+ }
+
+ $args{Expr} = XML::XQL::buildNameSpaceExpr ($args{NameSpace},
+ $args{Name});
+ bless \%args, $class;
+}
+
+sub xql_check
+{
+}
+
+sub xql_prepCache
+{
+}
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my @result = ();
+
+ my $expr = $self->{Expr};
+ for my $node (@$list)
+ {
+ for my $kid (@{$node->xql_attribute})
+ {
+ push @result, $kid if $kid->xql_nodeName =~ /$expr/;
+ }
+ }
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ my $name = $self->{Name};
+ my $space = $self->{NameSpace};
+
+ my $str = defined($space) ? "\@$space:$name" : ('@' . $name);
+
+ XML::XQL::delim ($str, $self, @_);
+}
+
+package XML::XQL::SimpleAttr; # "@attr"
+use base 'XML::XQL::Attribute'; # L -> L
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my @result = ();
+ my $name = $self->{Name};
+
+ for my $node (@$list)
+ {
+ push @result, @{ $node->xql_attribute ($name) };
+ }
+ \@result;
+}
+
+package XML::XQL::AllAttr; # "@*"
+use base 'XML::XQL::Attribute'; # L -> L
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my @result = ();
+
+ for my $node (@$list)
+ {
+ push @result, @{$node->xql_attribute};
+ }
+ \@result;
+}
+
+package XML::XQL::Subscript; # "[3, 5 $to$ 7, -1]"
+use base 'XML::XQL::Operator'; # L -> L
+use fields qw{ IndexList };
+
+#?? optimize for simple subscripts
+sub solve
+{
+ my ($self, $context, $inlist) = @_;
+ my @result = ();
+
+ for my $node (@$inlist)
+ {
+
+ my $list = $self->{Left}->solve ($context, [$node]);
+ $self->verbose("Left", $list);
+
+ my $n = int (@$list);
+ next if ($n == 0);
+
+ # build ordered index list
+ my @indexFlags = ();
+ $#indexFlags = $n - 1;
+
+ my $index = $self->{IndexList};
+ my $len = @$index;
+
+#?? this is done a lot - optimize....
+ my $i = 0;
+ while ($i < $len)
+ {
+ my $start = $index->[$i++];
+ $start += $n if ($start < 0);
+ my $end = $index->[$i++];
+ $end += $n if ($end < 0);
+
+ next unless $start <= $end && $end >=0 && $start < $n;
+ $start = 0 if ($start < 0);
+ $end = $n-1 if ($end >= $n);
+
+ for my $j ($start .. $end)
+ {
+ $indexFlags[$j] = 1;
+ }
+ }
+ for $i (0 .. $n-1)
+ {
+ push @result, $list->[$i] if $indexFlags[$i];
+ }
+ }
+ \@result;
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+
+ my $index = $self->{IndexList};
+ my $str = XML::XQL::bold("[");
+ for (my $i = 0; $i < @$index; $i++)
+ {
+ $str .= ", " if $i > 0;
+
+ my $s = $index->[$i++];
+ my $e = $index->[$i];
+ $str = ($s == $e) ? $s : "$s \$to\$ $e";
+ }
+ $str .= XML::XQL::bold("]");
+
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) . $str, $self, @_);
+}
+
+sub xql_toDOM
+{
+ my ($self, $doc) = @_;
+ my $elem = $self->SUPER::xql_toDOM ($doc);
+
+ my $index = $self->{IndexList};
+ my $str = "";
+ for (my $i = 0; $i < @$index; $i++)
+ {
+ $str .= ", " if $i > 0;
+
+ my $s = $index->[$i++];
+ my $e = $index->[$i];
+ $str .= ($s == $e) ? $s : "$s \$to\$ $e";
+ }
+
+ my $ie = $doc->createElement ("index");
+ $ie->setAttribute ("list", $str);
+ $elem->appendChild ($ie);
+ $elem;
+}
+
+package XML::XQL::Union; # "book $union$ magazine", also "|"
+use base 'XML::XQL::Operator'; # L x L -> L
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my $left = XML::XQL::toList ($self->{Left}->solve ($context, $list));
+ my $right = XML::XQL::toList ($self->{Right}->solve ($context, $list));
+
+ return $right if (@$left < 1);
+ return $left if (@$right < 1);
+
+ my @result = @$left;
+ for my $node (@$right)
+ {
+ push @result, $node unless XML::XQL::listContains ($left, $node);
+ }
+
+ my $parent = $self->{Parent};
+
+ # Don't sort if parent is a Union or //, because the parent will do the sort
+ unless (defined $parent and $parent->mustSort)
+ {
+ XML::XQL::sortDocOrder (\@result)
+ }
+# $self->verbose ("Union result", \@result);
+
+ \@result;
+}
+
+sub mustSort
+{
+ 1;
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) .
+ XML::XQL::bold (" \$union\$ ") .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::Intersect; # "book $intersect$ magazine"
+use base 'XML::XQL::Operator'; # L x L -> L
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my $left = XML::XQL::toList ($self->{Left}->solve ($context, $list));
+ return [] if @$left < 1;
+
+ my $right = XML::XQL::toList ($self->{Right}->solve ($context, $list));
+ return [] if @$right < 1;
+
+ # Assumption: $left and $right don't have duplicates themselves
+ my @result = ();
+ for my $node (@$left)
+ {
+#? reimplement with hash - faster!
+ push @result, $node if XML::XQL::listContains ($right, $node);
+ }
+ \@result;
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) .
+ XML::XQL::bold (" \$intersect\$ ") .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::Filter; # "elem[expr]"
+use base 'XML::XQL::Operator'; # L -> L
+
+sub solve
+{
+ my ($self, $context, $inlist) = @_;
+ my @result = ();
+
+ for my $node (@$inlist)
+ {
+
+ my $list = $self->{Left}->solve ($context, [$node]);
+ next if @$list == 0;
+
+ my $subQuery = $self->{Right};
+
+ $context = [0, scalar (@$list)];
+ for my $node (@$list)
+ {
+#?? optimize? only need the first one to succeed
+ my $r = $subQuery->solve ($context, [ $node ]);
+ push @result, $node if XML::XQL::toBoolean ($r);
+ $context->[0]++; # increase the index for the index() method
+ }
+ }
+ \@result;
+}
+
+sub xql_check
+{
+ my ($self, $inSubQuery, $inParam) = @_;
+ $self->{Left}->xql_check ($inSubQuery, $inParam);
+ $self->{Right}->xql_check (1, $inParam);
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) .
+ XML::XQL::bold ("[") .
+ $self->{Right}->xql_contextString (@_) .
+ XML::XQL::bold ("]"), $self, @_);
+}
+
+package XML::XQL::BooleanOp;
+use base 'XML::XQL::Operator';
+
+package XML::XQL::Or;
+use base 'XML::XQL::BooleanOp';
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my $left = $self->{Left}->solve ($context, $list);
+ return $XML::XQL::Boolean::TRUE if XML::XQL::toBoolean ($left);
+ return $self->{Right}->solve ($context, $list);
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) .
+ XML::XQL::bold (" \$or\$ ") .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::And;
+use base 'XML::XQL::BooleanOp';
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my $left = $self->{Left}->solve ($context, $list);
+ return $XML::XQL::Boolean::FALSE unless XML::XQL::toBoolean ($left);
+ return $self->{Right}->solve ($context, $list);
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) .
+ XML::XQL::bold (" \$and\$ ") .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::Not;
+use base 'XML::XQL::BooleanOp';
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ my $left = $self->{Left}->solve ($context, $list);
+ return XML::XQL::toBoolean ($left) ? $XML::XQL::Boolean::FALSE : $XML::XQL::Boolean::TRUE;
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim (XML::XQL::bold ("\$not\$ ") .
+ $self->{Left}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::Compare;
+use base 'XML::XQL::Operator';
+use fields qw{ Func All };
+
+use Carp;
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+
+ my $type;
+ my $cmpFunc = $self->{Func};
+
+ my $left = $self->verbose ("left", XML::XQL::toList ($self->{Left}->solve ($context, $list)));
+ return [] if @$left < 1;
+
+ my $right;
+ eval {
+ $right = $self->verbose ("right", XML::XQL::prepareRvalue ($self->{Right}->solve ($context, $list)));
+ };
+ return [] if XML::XQL::exception ($@);
+
+ if ($self->{All})
+ {
+ for my $node (@$left)
+ {
+ eval {
+ # Stop if any of the comparisons fails
+ return [] unless &$cmpFunc ($node, $right);
+ };
+ return [] if XML::XQL::exception ($@);
+ }
+ return $left;
+ }
+ else # $any$
+ {
+ my @result = ();
+ for my $node (@$left)
+ {
+ eval {
+ push (@result, $node)
+ if &$cmpFunc ($node, $right);
+ };
+ return [] if XML::XQL::exception ($@);
+ }
+ return \@result;
+ }
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ my $all = $self->{All} ? "\$all\$ " : "";
+
+ XML::XQL::delim ($all . $self->{Left}->xql_contextString (@_) . " " .
+ XML::XQL::bold ($self->{Oper}) . " " .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::Func;
+
+use Carp;
+
+sub count
+{
+ my ($context, $list, $expr) = @_;
+
+ my $cnt;
+ if (defined $expr)
+ {
+ $list = XML::XQL::toList ($expr->solve ($context, $list));
+ $cnt = @$list;
+ }
+ else
+ {
+ $cnt = $context->[1];
+ }
+#?? ref node?
+ new XML::XQL::Number ($cnt);
+}
+
+sub id
+{
+ my ($context, $list, $query) = @_;
+
+ return [] if @$list == 0;
+
+ my $id = XML::XQL::prepareRvalue ($query->solve ($context, $list));
+#?? check result?
+
+#?? if [0] is not a Node, I should probably try the next one
+ my $doc = $list->[0]->xql_document;
+
+ _findId ($doc->xql_element->[0], $id);
+}
+
+sub _findId # static method
+{
+ my ($elem, $id) = @_;
+ my $attr = $elem->xql_attribute ("id");
+ return [$elem] if (@$attr == 1 && $attr->[0]->xql_nodeName eq $id);
+
+ for my $kid (@{$elem->xql_element})
+ {
+ $attr = _findId ($kid);
+ return $attr if @$attr;
+ }
+ return [];
+}
+
+sub end
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+ new XML::XQL::Boolean ($context->[0] == $context->[1] - 1);
+}
+
+sub xql_index
+{
+ my ($context, $list) = @_;
+
+# print "index: " . XML::XQL::d($context) . "\n";
+#?? wrong!
+ return [] if @$list == 0;
+ new XML::XQL::Number ($context->[0]);
+}
+
+sub ancestor
+{
+ my ($context, $list, $query) = @_;
+
+ return [] if @$list == 0;
+
+ my @anc = ();
+#?? fix for @$list > 1
+ my $parent = $list->[0]->xql_parent;
+
+ while (defined $parent)
+ {
+ # keep list of ancestors so far
+ unshift @anc, $parent;
+
+ # solve the query for the ancestor
+ my $result = $query->solve ($context, [$parent]);
+ for my $node (@{$result})
+ {
+ for my $anc (@anc)
+ {
+ return [$node] if $node == $anc;
+ }
+ }
+ $parent = $parent->xql_parent;
+ }
+ return [];
+}
+
+sub node
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+ return $list->[0]->xql_node if @$list == 1;
+
+ my @result;
+ for my $node (@$list)
+ {
+ push @result, @{ $node->xql_node };
+ }
+ XML::XQL::sortDocOrder (\@result);
+}
+
+sub _nodesByType
+{
+ my ($list, $type) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ for my $kid (@{ $node->xql_node })
+ {
+ push @result, $kid if $kid->xql_nodeType == $type;
+ }
+ }
+ @$list > 1 ? XML::XQL::sortDocOrder (\@result) : \@result;
+}
+
+sub pi
+{
+ my ($context, $list, $pi_name) = @_;
+ if (defined $pi_name)
+ {
+ return [] if @$list == 0;
+
+ $pi_name = $pi_name->solve ($context, $list)->xql_toString;
+
+ my @result;
+ for my $node (@$list)
+ {
+ for my $kid (@{ $node->xql_node })
+ {
+ push @result, $kid
+ if $kid->xql_nodeType == 7 && $kid->getTarget eq $pi_name;
+ }
+ }
+ return @$list > 1 ? XML::XQL::sortDocOrder (\@result) : \@result;
+ }
+
+ return _nodesByType ($_[1], 7);
+}
+
+sub comment
+{
+ _nodesByType ($_[1], 8);
+}
+
+sub textNode
+{
+ _nodesByType ($_[1], 3);
+}
+
+sub nodeName
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ push @result, new XML::XQL::Text ($node->xql_nodeName, $node);
+ }
+ \@result;
+}
+
+sub namespace
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ my $namespace = $node->xql_namespace;
+ next unless defined $namespace;
+ push @result, new XML::XQL::Text ($namespace, $node);
+ }
+ \@result;
+}
+
+sub prefix
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ my $prefix = $node->xql_prefix;
+ next unless defined $prefix;
+ push @result, new XML::XQL::Text ($prefix, $node);
+ }
+ \@result;
+}
+
+sub baseName
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ my $basename = $node->xql_baseName;
+ next unless defined $basename;
+ push @result, new XML::XQL::Text ($basename, $node);
+ }
+ \@result;
+}
+
+sub nodeType
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ push @result, new XML::XQL::Number ($node->xql_nodeType, $node);
+ }
+ \@result;
+}
+
+sub nodeTypeString
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ push @result, new XML::XQL::Text ($node->xql_nodeTypeString, $node);
+ }
+ @result;
+}
+
+sub value
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ push @result, $node->xql_value; # value always returns an object
+ }
+ \@result;
+}
+
+sub text
+{
+ my ($context, $list, $recurse) = @_;
+
+ return [] if @$list == 0;
+
+ if (defined $recurse)
+ {
+ $recurse = $recurse->solve ($context, $list)->xql_toString;
+ }
+ else
+ {
+ $recurse = 1; # default
+ }
+
+ my @result;
+ for my $node (@$list)
+ {
+ my $text = $node->xql_text ($recurse);
+ next unless defined $text;
+
+ push @result, new XML::XQL::Text ($text, $node);
+ }
+ \@result;
+}
+
+sub rawText
+{
+ my ($context, $list, $recurse) = @_;
+
+ return [] if @$list == 0;
+
+ if (defined $recurse)
+ {
+ $recurse = $recurse->solve ($context, $list)->xql_toString;
+ }
+ else
+ {
+ $recurse = 1; # default
+ }
+
+ my @result;
+ for my $node (@$list)
+ {
+ my $text = $node->xql_rawText ($recurse);
+ next unless defined $text;
+
+ push @result, new XML::XQL::Text ($text, $node);
+ }
+ \@result;
+}
+
+sub true
+{
+ return $XML::XQL::Boolean::TRUE;
+}
+
+sub false
+{
+ return $XML::XQL::Boolean::FALSE;
+}
+
+#sub date() is in XQL::XML::Date
+
+sub element
+{
+ my ($context, $list, $text) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ if (defined $text)
+ {
+ $text = XML::XQL::prepareRvalue ($text->solve ($context, $list))->xql_toString;
+ for my $node (@$list)
+ {
+ push @result, @{$node->xql_element ($text)};
+ }
+ }
+ else
+ {
+ for my $node (@$list)
+ {
+ push @result, @{$node->xql_element};
+ }
+ }
+ @$list > 1 ? XML::XQL::sortDocOrder (\@result) : \@result;
+}
+
+sub attribute
+{
+ my ($context, $list, $text) = @_;
+
+ return [] if @$list == 0;
+
+ my @result;
+ if (defined $text)
+ {
+ $text = XML::XQL::prepareRvalue ($text->solve ($context, $list))->xql_toString;
+ for my $node (@$list)
+ {
+ push @result, @{ $node->xql_attribute ($text) };
+ }
+ }
+ else
+ {
+ for my $node (@$list)
+ {
+ push @result, @{ $node->xql_attribute };
+ }
+ }
+ \@result;
+}
+
+package XML::XQL::Bang;
+use base 'XML::XQL::Operator';
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+ $list = $self->{Left}->solve ($context, $list);
+ $self->{Right}->solve ($context, $list);
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+ XML::XQL::delim ($self->{Left}->xql_contextString (@_) .
+ XML::XQL::bold ("!") .
+ $self->{Right}->xql_contextString (@_), $self, @_);
+}
+
+package XML::XQL::Invocation;
+use base 'XML::XQL::Operator';
+use fields qw{ Args Name Type Once ConstVal };
+
+use Carp;
+
+sub new
+{
+ my ($class, %args) = @_;
+
+ my $self = bless \%args, $class;
+ for my $par (@{$self->{Args}})
+ {
+ $par->setParent ($self);
+ }
+ $self;
+}
+
+sub dispose
+{
+ my $self = shift;
+ for (@{ $self->{Args} })
+ {
+ $_->dispose;
+ }
+ undef $self->{Args};
+
+ undef $self->{Parent};
+}
+
+sub isConstant
+{
+ my ($self) = @_;
+
+ # An Invocation is constant, if all it's arguments are constant
+ # and it's a "constant" function
+ my $name = $self->{Name};
+ my $cf = $self->query->{ConstFunc};
+ my $const = exists ($cf->{$name}) ?
+ $cf->{name} : $XML::XQL::ConstFunc{$name};
+ return 0 unless $const;
+
+ for my $par (@{$self->{Args}})
+ {
+ return 0 unless $par->isConstant;
+ }
+ 1;
+}
+
+sub xql_check
+{
+ my ($self, $inSubQuery, $inParam) = @_;
+
+ # Syntactic Constraint 7:
+ # In a node query this function or method is only valid inside an instance
+ # of Subquery, unless it appears within an instance of Param.
+ # Functions and methods are valid anywhere in a full query.
+
+ my $query;
+ if (not ($inSubQuery or $inParam) and ($query = $self->query)->isNodeQuery)
+ {
+ unless ($query->isAllowedOutsideSubquery ($self->{Name}))
+ {
+ XML::XQL::parseError $self->{Type} . " " . $self->{Name} .
+ " is only allowed inside a Subquery or Param for 'Node Queries'." .
+ " Context: " . $self->toContextString;
+ }
+ }
+ for my $par (@{$self->{Args}})
+ {
+ $par->xql_check ($inSubQuery, 1); # these are Params
+ }
+ # once() should only be evaluated once per query
+ # "constant" functions should only be evaluated once *ever*
+ $self->{Once} = $self->isOnce || $self->isConstant;
+}
+
+sub xql_prepCache
+{
+ my ($self) = @_;
+ # once() should only be evaluated once per query
+ # "constant" functions should only be evaluated once *ever*
+ delete $self->{ConstVal} if $self->isOnce;
+
+ for my $par (@{$self->{Args}})
+ {
+ $par->xql_prepCache;
+ }
+}
+
+sub isOnce
+{
+ $_[0]->{Name} eq "once";
+}
+
+sub isMethod
+{
+ $_[0]->{Type} eq "method";
+}
+
+sub solve
+{
+ my ($self, $context, $list) = @_;
+
+ # Use the cached value if it's a "constant" function
+ return $self->{ConstVal} if (exists $self->{ConstVal});
+
+ my $func = $self->{Func};
+
+ my $result;
+ eval {
+ $result = &$func ($context, $list, @{$self->{Args}});
+ $self->{ConstVal} = $result if $self->{Once};
+ };
+ if ($@)
+ {
+#?? or croak
+ $self->warning ("invocation of '" . $self->{Name} . "' failed:\n\t$@");
+ $self->{ConstVal} = [] if $self->{Once};
+ return [];
+ }
+ $result;
+}
+
+sub xql_contextString
+{
+ my $self = shift;
+
+ my $str = XML::XQL::bold ($self->{Name}) . "(";
+ for (my $i = 0; $i < @{$self->{Args}}; $i++)
+ {
+ $str .= ", " if $i > 0;
+ $str .= $self->{Args}->[$i]->xql_contextString (@_);
+ }
+ $str .= ")";
+
+ XML::XQL::delim ($str, $self, @_);
+}
+
+# Base class shared by Node and PrimitiveType
+package XML::XQL::PrimitiveTypeBase;
+
+sub dispose
+{
+}
+
+sub xql_check
+{
+}
+
+sub xql_prepCache
+{
+}
+
+sub xql_prevSibling
+{
+ undef;
+}
+
+# This method returns an integer that determines how values should be casted
+# for comparisons. If the left value (LHS) has a higher xql_primType, the
+# right value (RHS) is cast to the type of the LHS (otherwise, the LHS is casted
+# to the type of the LHS)
+#
+# Values for certain types:
+# Node 0 (always cast a node to a Text string first)
+# Text 1
+# Number 2
+# Boolean 3
+# Date 4 (other classes automatically use 4 by default)
+
+sub xql_primType
+{
+ 4; # default for all classes other then Node, Text, Number, Boolean
+}
+
+sub xql_toBoolean
+{
+ 1; # it is true if it exists
+}
+
+sub xql_namespace
+{
+ undef;
+}
+
+sub xql_baseName
+{
+ undef;
+}
+
+sub xql_prefix
+{
+ undef;
+}
+
+sub xql_sortKey
+{
+ my $src = $_[0]->xql_sourceNode;
+ $src ? $src->xql_sortKey : $XML::XQL::LAST_SORT_KEY;
+}
+
+sub xql_toDOM
+{
+ my ($self, $doc) = @_;
+ my $name = ref $self;
+ $name =~ s/.*:://;
+ my $elem = $doc->createElement ($name);
+ $elem->setAttribute ("value", $self->xql_toString);
+ $elem;
+}
+
+package XML::XQL::PrimitiveType;
+use vars qw( @ISA );
+@ISA = qw( XML::XQL::PrimitiveTypeBase );
+
+sub new
+{
+ my ($class, $val, $srcNode) = @_;
+ bless [$val, $srcNode], $class;
+}
+
+sub isConstant
+{
+ 1;
+}
+
+sub setParent
+{
+ # not defined
+}
+
+sub solve
+{
+ $_[0]; # evaluates to itself
+}
+
+#
+# Derived classes should not override this method.
+# Override xql_toString instead.
+#
+sub xql_contextString
+{
+ my $self = shift;
+
+ XML::XQL::delim ($self->xql_toString, $self, @_);
+}
+
+#
+# Return the value of the Object as a primitive Perl value, i.e. an integer,
+# a float, or a string.
+#
+sub xql_toString
+{
+ $_[0]->[0];
+}
+
+sub xql_sourceNode
+{
+ $_[0]->[1];
+}
+
+sub xql_setSourceNode
+{
+ $_[0]->[1] = $_[1];
+}
+
+sub xql_setValue
+{
+ # This could potentially change the value of a constant in the XQL
+ # query expression.
+ $_[0]->[0] = $_[1];
+}
+
+sub xql_nodeType
+{
+ 0; # it's not a Node
+}
+
+sub xql_compare
+{
+ # Temporarily switch off $WARNING flag, to disable messages a la:
+ # Argument "1993-02-14" isn't numeric in ncmp
+ local $^W = 0;
+ $_[0]->[0] <=> $_[1]->xql_toString;
+}
+
+sub xql_eq { my $self = shift; $self->xql_compare (@_) == 0; }
+sub xql_ne { my $self = shift; $self->xql_compare (@_) != 0; }
+sub xql_lt { my $self = shift; $self->xql_compare (@_) < 0; }
+sub xql_le { my $self = shift; $self->xql_compare (@_) <= 0; }
+sub xql_gt { my $self = shift; $self->xql_compare (@_) > 0; }
+sub xql_ge { my $self = shift; $self->xql_compare (@_) >= 0; }
+
+package XML::XQL::Boolean;
+use vars qw( @ISA @EXPORT $TRUE $FALSE );
+
+use Carp;
+
+@ISA = qw( XML::XQL::PrimitiveType );
+@EXPORT = qw( $TRUE $FALSE );
+
+$TRUE = new XML::XQL::Boolean (1);
+$FALSE = new XML::XQL::Boolean (0);
+
+sub xql_primType
+{
+ 3;
+}
+
+sub xql_toBoolean
+{
+ $_[0]->[0]; # evaluate it to its value
+}
+
+sub xql_negate
+{
+#?? do we need to keep track of a source node here?
+ $_[0]->[0] ? $FALSE : $TRUE;
+}
+
+sub xql_compare
+{
+#?? how do we convert string to boolean value
+ $_[0]->[0] <=> ($_[1]->xql_toString ? 1 : 0);
+}
+
+sub xql_lt { badComparisonError (@_); }
+sub xql_gt { badComparisonError (@_); }
+sub xql_le { badComparisonError (@_); }
+sub xql_ge { badComparisonError (@_); }
+
+sub badComparisonError
+{
+ croak 'comparison operator (other than =, !=, $ieq$, $ine$) not defined for type Boolean';
+}
+
+package XML::XQL::Number;
+use vars qw( @ISA );
+@ISA = qw( XML::XQL::PrimitiveType );
+
+#use overload
+# 'fallback' => 1, # use default operators, if not specified
+# '""' => \&debug;
+
+sub debug
+{
+ "Number[" . $_[0]->[0] . "]";
+}
+
+sub xql_primType
+{
+ 2;
+}
+
+package XML::XQL::Text;
+use vars qw( @ISA );
+@ISA = qw( XML::XQL::PrimitiveType );
+
+#use overload
+# 'fallback' => 1, # use default operators, if not specified
+# '""' => \&debug;
+
+sub debug
+{
+ "Text[" . $_[0]->[0] . "]";
+}
+
+sub xql_primType
+{
+ 1;
+}
+
+sub xql_compare
+{
+ my ($self, $other, $ignoreCase) = @_;
+ if ($ignoreCase)
+ {
+ my $lhs = $self->[0];
+ my $rhs = $other->xql_toString;
+ "\U$lhs" cmp "\U$rhs";
+ }
+ else
+ {
+ $self->[0] cmp $other->xql_toString;
+ }
+}
+
+# Declare package XML::XQL::Node so that XML implementations can say
+# that their nodes derive from it:
+#
+# This worked for me when I added XQL support for XML::DOM:
+#
+# BEGIN
+# {
+# push @XML::DOM::Node::ISA, 'XML::XQL::Node';
+# }
+#
+
+package XML::XQL::Node;
+
+use vars qw( @ISA );
+@ISA = qw( XML::XQL::PrimitiveTypeBase );
+
+use Carp;
+
+sub xql_primType
+{
+ 0;
+}
+
+sub xql_toBoolean
+{
+ 1; # it is true if it exists
+}
+
+sub xql_attribute
+{
+ [];
+}
+
+sub xql_sourceNode
+{
+ $_[0];
+}
+
+# Default implementation - override this for speed
+sub xql_element
+{
+ my ($node, $elem) = @_;
+
+ my @list = ();
+ if (defined $elem)
+ {
+ for my $kid (@{$_[0]->xql_node})
+ {
+ # 1: element
+ push @list, $kid
+ if $kid->xql_nodeType == 1 && $kid->xql_nodeName eq $elem;
+ }
+ }
+ else
+ {
+ for my $kid (@{$_[0]->xql_node})
+ {
+ push @list, $kid if $kid->xql_nodeType == 1; # 1: element
+ }
+ }
+ \@list;
+}
+
+sub xql_text
+{
+ undef;
+}
+
+sub xql_rawText
+{
+ undef;
+}
+
+sub xql_rawTextBlocks
+{
+ undef;
+}
+
+sub xql_value
+{
+ new XML::XQL::Text ($_[0]->xql_text ($_[1]), $_[0]);
+}
+
+# Convert xql_value to Perl string (or undef if xql_value is undefined)
+sub xql_toString
+{
+ my $val = $_[0]->xql_value;
+ return undef if XML::XQL::isEmptyList ($val);
+
+ $val->xql_toString;
+}
+
+sub xql_setValue
+{
+ # Not implemented for most node types
+}
+
+sub xql_data
+{
+ "";
+}
+
+sub xql_nodeType
+{
+ 0;
+}
+
+sub xql_nodeName
+{
+ [];
+}
+
+# Java code from "XML:: Namespaces in 20 lines" by James Clark:
+# see: http://www.oasis-open.org/cover/clarkNS-980804.html
+#
+# String expandName(String name, Element element, boolean isAttribute) {
+# // The index of the colon character in the name.
+# int colonIndex = name.indexOf(':');
+# // The name of the attribute that declares the namespace prefix.
+# String declAttName;
+# if (colonIndex == -1) {
+# // Default namespace applies only to element type names.
+# if (isAttribute)
+# return name;
+# declAttName = "xmlns";
+# }
+# else {
+# String prefix = name.substring(0, colonIndex);
+# // "xml:" is special
+# if (prefix.equals("xml"))
+# return name;
+# declAttName = "xmlns:" + prefix;
+# }
+# for (; element != null; element = element.getParent()) {
+# String ns = element.getAttributeValue(declAttName);
+# if (ns != null) {
+# // Handle special meaning of xmlns=""
+# if (ns.length() == 0 && colonIndex == -1)
+# return name;
+# return ns + '+' + name.substring(colonIndex + 1);
+# }
+# }
+# return null;
+# }
+
+# From "Namespaces in XML"
+# at http://www.w3.org/TR/1998/WD-xml-names-19980916
+#
+# The prefix xml is by definition bound to the namespace name
+# urn:Connolly:input:required. The prefix xmlns is used only for
+# namespace bindings and is not itself bound to any namespace name.
+
+my $DEFAULT_NAMESPACE = undef;
+my $XML_NAMESPACE = "urn:Connolly:input:required";
+#?? default namespace
+
+sub xql_namespace
+{
+ my ($self) = @_;
+ my $nodeType = $self->xql_nodeType;
+ my $element = $self;
+
+ if ($nodeType == 2) # 2: Attr
+ {
+ $element = $self->xql_parent;
+ }
+ elsif ($nodeType != 1) # 1: Element
+ {
+ return undef;
+ }
+ my $name = $self->xql_nodeName;
+ my $declAttName;
+
+ if ($name =~ /([^:]+):([^:]+)/)
+ {
+ my ($prefix, $basename) = ($1, $2);
+
+ # "xml:" is special
+ return $XML_NAMESPACE if $prefix eq "xml";
+
+ $declAttName = "xmlns:$prefix";
+ }
+ else
+ {
+ # Default namespace applies only to element type names.
+ return $DEFAULT_NAMESPACE if $nodeType == 2; # 2: Attr
+#?? default namespace?
+ $declAttName = "xmlns";
+ }
+
+ do
+ {
+ my $ns = $element->xql_attribute ($declAttName);
+ next unless defined $ns;
+ return $ns->xql_rawText;
+
+ $element = $element->xql_parent;
+ }
+ while (defined ($element) and $element->xql_nodeType == 1);
+
+ # namespace not found
+ undef;
+}
+
+sub xql_basename
+{
+ my ($self) = @_;
+ my $nodeType = $self->xql_nodeType;
+ return undef unless $nodeType == 1 || $nodeType == 2;
+
+ my $name = $self->xql_nodeName;
+ $name =~ s/^[^:]://; # strip prefix
+ $name;
+}
+
+sub xql_prefix
+{
+ my ($self) = @_;
+ my $nodeType = $self->xql_nodeType;
+ return undef unless $nodeType == 1 || $nodeType == 2;
+
+ $self->xql_nodeName =~ /^([^:]+):/;
+ $1;
+}
+
+# Used by ancestor()
+sub xql_parent
+{
+ undef;
+}
+
+my @NodeTypeString =
+(
+ "", "element", "attribute", "text", "", "", "", "processing_instruction",
+ "comment", "document"
+);
+
+sub xql_nodeTypeString
+{
+ my $i = $_[0]->xql_nodeType;
+ return $NodeTypeString[$i] if ($i >= 1 && $i <= 3 || $i >= 7 && $i <= 9);
+
+#?? what should this return?
+ "<unknown xql_nodeType $i>";
+}
+
+if (not $XML::XQL::Restricted)
+{
+ require XML::XQL::Plus;
+}
+
+# All nodes should implement:
+
+#?? this section must be updated!!
+
+# - xql_document
+# - xql_node: return an unblessed list reference with childNodes (not
+# attributes)
+# - xql_nodeType (default implementation for XML::XQL::Node returns 0):
+# Element: 1
+# Element Attribute: 2
+# Markup-Delimited Region of Text (Text and CDATASection): 3
+# Processing Instruction: 7
+# Comment: 8
+# Document (Entity): 9
+# - xql_text
+# - xql_value (default implementation is xql_text)
+# - xql_parent: return parent node or undef (Document, DocumentFragment)
+#
+# Element should define/override the following:
+# - xql_nodeName: return the element name
+# - xql_attribute("attributeName"): return an unblessed reference to a list
+# with the attribute, or [] if no such attribute
+# - xql_attribute(): return an unblessed reference to a list with
+# all attribute nodes
+# - xql_baseName, xql_prefix
+#
+# Attribute:
+# - xql_nodeName: return the attribute name
+# - xql_baseName, xql_prefix
+#
+# EntityReference:
+# - xql_data: return expanded text value
+#
+# Text, CDATASection:
+# - xql_data: return expanded text value
+#
+# -xql_element could be overriden to speed up performance
+#
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::XQL - A perl module for querying XML tree structures with XQL
+
+=head1 SYNOPSIS
+
+ use XML::XQL;
+ use XML::XQL::DOM;
+
+ $parser = new XML::DOM::Parser;
+ $doc = $parser->parsefile ("file.xml");
+
+ # Return all elements with tagName='title' under the root element 'book'
+ $query = new XML::XQL::Query (Expr => "book/title");
+ @result = $query->solve ($doc);
+ $query->dispose; # Avoid memory leaks - Remove circular references
+
+ # Or (to save some typing)
+ @result = XML::XQL::solve ("book/title", $doc);
+
+ # Or (to save even more typing)
+ @result = $doc->xql ("book/title");
+
+=head1 DESCRIPTION
+
+The XML::XQL module implements the XQL (XML Query Language) proposal
+submitted to the XSL Working Group in September 1998.
+The spec can be found at: L<http://www.w3.org/TandS/QL/QL98/pp/xql.html>
+Most of the contents related to the XQL syntax can also be found in the
+L<XML::XQL::Tutorial> that comes with this distribution.
+Note that XQL is not the same as XML-QL!
+
+The current implementation only works with the L<XML::DOM> module, but once the
+design is stable and the major bugs are flushed out, other extensions might
+follow, e.g. for XML::Grove.
+
+XQL was designed to be extensible and this implementation tries to stick to that.
+Users can add their own functions, methods, comparison operators and data types.
+Plugging in a new XML tree structure (like XML::Grove) should be a piece of cake.
+
+To use the XQL module, either
+
+ use XML::XQL;
+
+or
+
+ use XML::XQL::Strict;
+
+The Strict module only provides the core XQL functionality as found in the
+XQL spec. By default (i.e. by using XML::XQL) you get 'XQL+', which has
+some additional features.
+
+See the section L<Additional Features in XQL+> for the differences.
+
+This module is still in development. See the To-do list in XQL.pm for what
+still needs to be done. Any suggestions are welcome, the sooner these
+implementation issues are resolved, the faster we can all use this module.
+
+If you find a bug, you would do me great favor by sending it to me in the
+form of a test case. See the file t/xql_template.t that comes with this distribution.
+
+If you have written a cool comparison operator, function, method or XQL data
+type that you would like to share, send it to enno@att.com and I will
+add it to this module.
+
+=head1 XML::XQL global functions
+
+=over 4
+
+=item solve (QUERY_STRING, INPUT_LIST...)
+
+ @result = XML::XQL::solve ("doc//book", $doc);
+
+This is provided as a shortcut for:
+
+ $query = new XML::XQL::Query (Expr => "doc//book");
+ @result = $query->solve ($doc);
+ $query->dispose;
+
+Note that with L<XML::XQL::DOM>, you can also write (see L<XML::DOM::Node>
+for details):
+
+ @result = $doc->xql ("doc//book");
+
+=item setDocParser (PARSER)
+
+Sets the XML::DOM::Parser that is used by the new XQL+ document() method.
+By default it uses an XML::DOM::Parser that was created without any arguments,
+i.e.
+
+ $PARSER = new XML::DOM::Parser;
+
+=item defineFunction (NAME, FUNCREF, ARGCOUNT [, ALLOWED_OUTSIDE [, CONST, [QUERY_ARG]]])
+
+Defines the XQL function (at the global level, i.e. for all newly created
+queries) with the specified NAME. The ARGCOUNT parameter can either be a single
+number or a reference to a list with numbers.
+A single number expands to [ARGCOUNT, ARGCOUNT]. The list contains pairs of
+numbers, indicating the number of arguments that the function allows. The value
+-1 means infinity. E.g. [2, 5, 7, 9, 12, -1] means that the function can have
+2, 3, 4, 5, 7, 8, 9, 12 or more arguments.
+The number of arguments is checked when parsing the XQL query string.
+
+The second parameter must be a reference to a Perl function or an anonymous
+sub. E.g. '\&my_func' or 'sub { ... code ... }'
+
+If ALLOWED_OUTSIDE (default is 0) is set to 1, the function or method may
+also be used outside subqueries in I<node queries>.
+(See NodeQuery parameter in Query constructor)
+
+If CONST (default is 0) is set to 1, the function is considered to be
+"constant". See L<Constant Function Invocations> for details.
+
+If QUERY_ARG (default is 0) is not -1, the argument with that index is
+considered to be a 'query parameter'. If the query parameter is a subquery,
+that returns multiple values, the result list of the function invocation will
+contain one result value for each value of the subquery.
+E.g. 'length(book/author)' will return a list of Numbers, denoting the string
+lengths of all the author elements returned by 'book/author'.
+
+Note that only methods (not functions) may appear after a Bang "!" operator.
+This is checked when parsing the XQL query string.
+
+See also: defineMethod
+
+=item generateFunction (NAME, FUNCNAME, RETURN_TYPE [, ARGCOUNT [, ALLOWED_OUTSIDE [, CONST [, QUERY_ARG]]]])
+
+Generates and defines an XQL function wrapper for the Perl function with the
+name FUNCNAME. The function name will be NAME in XQL query expressions.
+The return type should be one of the builtin XQL Data Types or a class derived
+from XML::XQL::PrimitiveType (see L<Adding Data Types>.)
+See defineFunction for the meaning of ARGCOUNT, ALLOWED_OUTSIDE, CONST and
+QUERY_ARG.
+
+Function values are always converted to Perl strings with xql_toString before
+they are passed to the Perl function implementation. The function return value
+is cast to an object of type RETURN_TYPE, or to the empty list [] if the
+result is undef. It uses expandType to expand XQL primitive type names.
+If RETURN_TYPE is "*", it returns the function
+result as is, unless the function result is undef, in which case it returns [].
+
+=item defineMethod (NAME, FUNCREF, ARGCOUNT [, ALLOWED_OUTSIDE])
+
+Defines the XQL method (at the global level, i.e. for all newly created
+queries) with the specified NAME. The ARGCOUNT parameter can either be a single
+number or a reference to a list with numbers.
+A single number expands to [ARGCOUNT, ARGCOUNT]. The list contains pairs of
+numbers, indicating the number of arguments that the method allows. The value
+-1 means infinity. E.g. [2, 5, 7, 9, 12, -1] means that the method can have
+2, 3, 4, 5, 7, 8, 9, 12 or more arguments.
+The number of arguments is checked when parsing the XQL query string.
+
+The second parameter must be a reference to a Perl function or an anonymous
+sub. E.g. '\&my_func' or 'sub { ... code ... }'
+
+If ALLOWED_OUTSIDE (default is 0) is set to 1, the function or method may
+also be used outside subqueries in I<node queries>.
+(See NodeQuery parameter in Query constructor)
+
+Note that only methods (not functions) may appear after a Bang "!" operator.
+This is checked when parsing the XQL query string.
+
+See also: defineFunction
+
+=item defineComparisonOperators (NAME => FUNCREF [, NAME => FUNCREF]*)
+
+Defines XQL comparison operators at the global level.
+The FUNCREF parameters must be a references to a Perl function or an anonymous
+sub. E.g. '\&my_func' or 'sub { ... code ... }'
+
+E.g. define the operators $my_op$ and $my_op2$:
+
+ defineComparisonOperators ('my_op' => \&my_op,
+ 'my_op2' => sub { ... insert code here ... });
+
+=item defineElementValueConvertor (TAG_NAME, FUNCREF)
+
+Defines that the result of the value() call for Elements with the specified
+TAG_NAME uses the specified function. The function will receive
+two parameters. The second one is the TAG_NAME of the Element node
+and the first parameter is the Element node itself.
+FUNCREF should be a reference to a Perl function, e.g. \&my_sub, or
+an anonymous sub.
+
+E.g. to define that all Elements with tag name 'date-of-birth' should return
+XML::XQL::Date objects:
+
+ defineElementValueConvertor ('date-of-birth', sub {
+ my $elem = shift;
+ # Always pass in the node as the second parameter. This is
+ # the reference node for the object, which is used when
+ # sorting values in document order.
+ new XML::XQL::Date ($elem->xql_text, $elem);
+ });
+
+These convertors can only be specified at a global level, not on a per query
+basis. To undefine a convertor, simply pass a FUNCREF of undef.
+
+=item defineAttrValueConvertor (ELEM_TAG_NAME, ATTR_NAME, FUNCREF)
+
+Defines that the result of the value() call for Attributes with the specified
+ATTR_NAME and a parent Element with the specified ELEM_TAG_NAME
+uses the specified function. An ELEM_TAG_NAME of "*" will match regardless of
+the tag name of the parent Element. The function will receive
+3 parameters. The third one is the tag name of the parent Element (even if
+ELEM_TAG_NAME was "*"), the second is the ATTR_NAME and the first is the
+Attribute node itself.
+FUNCREF should be a reference to a Perl function, e.g. \&my_sub, or
+an anonymous sub.
+
+These convertors can only be specified at a global level, not on a per query
+basis. To undefine a convertor, simply pass a FUNCREF of undef.
+
+=item defineTokenQ (Q)
+
+Defines the token for the q// string delimiters at a global level.
+The default value for XQL+ is 'q', for XML::XQL::Strict it is undef.
+A value of undef will deactivate this feature.
+
+=item defineTokenQQ (QQ)
+
+Defines the token for the qq// string delimiters at a global level.
+The default value for XQL+ is 'qq', for XML::XQL::Strict it is undef.
+A value of undef will deactivate this feature.
+
+=item expandType (TYPE)
+
+Used internally to expand type names of XQL primitive types.
+E.g. it expands "Number" to "XML::XQL::Number" and is not case-sensitive, so
+"number" and "NuMbEr" will both expand correctly.
+
+=item defineExpandedTypes (ALIAS, FULL_NAME [, ...])
+
+For each pair of arguments it allows the class name FULL_NAME to be abbreviated
+with ALIAS. The definitions are used by expandType().
+(ALIAS is always converted to lowercase internally, because expandType
+is case-insensitive.)
+
+Overriding the ALIAS for "date", also affects the object type returned by the
+date() function.
+
+=item setErrorContextDelimiters (START, END, BOLD_ON, BOLD_OFF)
+
+Sets the delimiters used when printing error messages during query evaluation.
+The default delimiters on Unix are `tput smul` (underline on) and `tput rmal`
+(underline off). On other systems (that don't have tput), the delimiters are
+">>" and "<<" resp.
+
+When printing the error message, the subexpression that caused the error will
+be enclosed by the delimiters, i.e. underlined on Unix.
+
+For certain subexpressions the significant keyword, e.g. "$and$" is enclosed in
+the bold delimiters BOLD_ON (default: `tput bold` on Unix, "" elsewhere) and
+BOLD_OFF (default: (`tput rmul` . `tput smul`) on Unix, "" elsewhere,
+see $BoldOff in XML::XQL::XQL.pm for details.)
+
+=item isEmptyList (VAR)
+
+Returns 1 if VAR is [], else 0. Can be used in user defined functions.
+
+=back
+
+=head1 Additional Features in XQL+
+
+=over 4
+
+=item Parent operator '..'
+
+The '..' operator returns the parent of the current node, where '.' would
+return the current node. This is not part of any XQL standard, because you
+would normally use return operators, which are not implemented here.
+
+=item Sequence operators ';' and ';;'
+
+The sequence operators ';' (precedes) and ';;' (immediately precedes) are
+not in the XQL spec, but are described in 'The Design of XQL' by Jonathan Robie
+who is one of the designers of XQL. It can be found at
+L<http://www.texcel.no/whitepapers/xql-design.html>
+See also the XQL Tutorial for a description of what they mean.
+
+=item q// and qq// String Tokens
+
+String tokens a la q// and qq// are allowed. q// evaluates like Perl's single
+quotes and qq// like Perl's double quotes. Note that the default XQL strings do
+not allow escaping etc., so it's not possible to define a string with both
+single and double quotes. If 'q' and 'qq' are not to your liking, you may
+redefine them to something else or undefine them altogether, by assigning undef
+to them. E.g:
+
+ # at a global level - shared by all queries (that don't (re)define 'q')
+ XML::XQL::defineTokenQ ('k');
+ XML::XQL::defineTokenQQ (undef);
+
+ # at a query level - only defined for this query
+ $query = new XML::XQL::Query (Expr => "book/title", q => 'k', qq => undef);
+
+From now on k// works like q// did and qq// doesn't work at all anymore.
+
+=item Query strings can have embedded Comments
+
+For example:
+
+ $queryExpr = "book/title # this comment is inside the query string
+ [. = 'Moby Dick']"; # this comment is outside
+
+=item Optional dollar delimiters and case-insensitive XQL keywords
+
+The following XQL keywords are case-insensitive and the dollar sign delimiters
+may be omitted: $and$, $or$, $not$, $union$, $intersect$, $to$, $any$, $all$,
+$eq$, $ne$, $lt$, $gt$, $ge$, $le$, $ieq$, $ine$, $ilt$, $igt$, $ige$, $ile$.
+
+E.g. $AND$, $And$, $aNd$, and, And, aNd are all valid replacements for $and$.
+
+Note that XQL+ comparison operators ($match$, $no_match$, $isa$, $can$) still
+require dollar delimiters and are case-sensitive.
+
+=item Comparison operator: $match$ or '=~'
+
+E.g. "book/title =~ '/(Moby|Dick)/']" will return all book titles containing
+Moby or Dick. Note that the match expression needs to be quoted and should
+contain the // or m// delimiters for Perl.
+
+When casting the values to be matched, both are converted to Text.
+
+=item Comparison operator: $no_match$ or '!~'
+
+E.g. "book/title !~ '/(Moby|Dick)/']" will return all book titles that don't
+contain Moby or Dick. Note that the match expression needs to be quoted and
+should contain the // or m// delimiters for Perl.
+
+When casting the values to be matched, both are converted to Text.
+
+=item Comparison operator: $isa$
+
+E.g. '//. $isa$ "XML::XQL::Date"' returns all elements for which the value()
+function returns an XML::XQL::Date object. (Note that the value() function can
+be overridden to return a specific object type for certain elements and
+attributes.) It uses expandType to expand XQL primitive type names.
+
+=item Comparison operator: $can$
+
+E.g. '//. $can$ "swim"' returns all elements for which the value()
+function returns an object that implements the (Perl) swim() method.
+(Note that the value() function can be overridden to return a specific object
+type for certain elements and attributes.)
+
+=item Function: once (QUERY)
+
+E.g. 'once(id("foo"))' will evaluate the QUERY expression only once per query.
+Certain query results (like the above example) will always return the same
+value within a query. Using once() will cache the QUERY result for the
+rest of the query.
+
+Note that "constant" function invocations are always cached.
+See also L<Constant Function Invocations>
+
+=item Function: subst (QUERY, EXPR, EXPR [,MODIFIERS, [MODE]])
+
+E.g. 'subst(book/title, "[M|m]oby", "Dick", "g")' will replace Moby or moby
+with Dick globally ("g") in all book title elements. Underneath it uses Perl's
+substitute operator s///. Don't worry about which delimiters are used underneath.
+The function returns all the book/titles for which a substitution occurred.
+The default MODIFIERS string is "" (empty.) The function name may be abbreviated
+to "s".
+
+For most Node types, it converts the value() to a string (with xql_toString)
+to match the string and xql_setValue to set the new value in case it matched.
+For XQL primitives (Boolean, Number, Text) and other data types (e.g. Date) it
+uses xql_toString to match the String and xql_setValue to set the result.
+Beware that performing a substitution on a primitive that was found in the
+original XQL query expression, changes the value of that constant.
+
+If MODE is 0 (default), it treats Element nodes differently by matching and
+replacing I<text blocks> occurring in the Element node. A text block is defined
+as the concatenation of the raw text of subsequent Text, CDATASection and
+EntityReference nodes. In this mode it skips embedded Element nodes.
+If a text block matches, it is replaced by a single Text node, regardless
+of the original node type(s).
+
+If MODE is 1, it treats Element nodes like the other nodes, i.e. it converts
+the value() to a string etc. Note that the default implementation of value()
+calls text(), which normalizes whitespace and includes embedded Element
+descendants (recursively.) This is probably not what you want to use in most
+cases, but since I'm not a professional psychic... :-)
+
+=item Function: map (QUERY, CODE)
+
+E.g. 'map(book/title, "s/[M|m]oby/Dick/g; $_")' will replace Moby or moby
+with Dick globally ("g") in all book title elements. Underneath it uses Perl's
+map operator. The function returns all the book/titles for which a
+change occurred.
+
+??? add more specifics
+
+=item Function: eval (EXPR [,TYPE])
+
+Evaluates the Perl expression EXPR and returns an object of the specified TYPE.
+It uses expandType to expand XQL primitive type names.
+If the result of the eval was undef, the empty list [] is returned.
+
+E.g. 'eval("2 + 5", "Number")' returns a Number object with the value 7, and
+ 'eval("%ENV{USER}")' returns a Text object with the user name.
+
+Consider using once() to cache the return value, when the invocation will
+return the same result for each invocation within a query.
+
+??? add more specifics
+
+=item Function: new (TYPE [, QUERY [, PAR] *])
+
+Creates a new object of the specified object TYPE. The constructor may have any
+number of arguments. The first argument of the constructor (the 2nd argument
+of the new() function) is considered to be a 'query parameter'.
+See defineFunction for a definition of I<query parameter>.
+It uses expandType to expand XQL primitive type names.
+
+=item Function: document (QUERY) or doc (QUERY)
+
+The document() function creates a new L<XML::XML::Document> for each result
+of QUERY (QUERY may be a simple string expression, like "/usr/enno/file.xml".
+See t/xql_document.t or below for an example with a more complex QUERY.)
+
+document() may be abbreviated to doc().
+
+document() uses an XML::DOM::Parser underneath, which can be set with
+XML::XQL::setDocParser(). By default it uses a parser that was created without
+any arguments, i.e.
+
+ $PARSER = new XML::DOM::Parser;
+
+Let's try a more complex example, assuming $doc contains:
+
+ <doc>
+ <file name="file1.xml"/>
+ <file name="file2.xml"/>
+ </doc>
+
+Then the following query will return two L<XML::XML::Document>s,
+one for file1.xml and one for file2.xml:
+
+ @result = XML::XQL::solve ("document(doc/file/@name)", $doc);
+
+The resulting documents can be used as input for following queries, e.g.
+
+ @result = XML::XQL::solve ("document(doc/file/@name)/root/bla", $doc);
+
+will return all /root/bla elements from the documents returned by document().
+
+=item Method: DOM_nodeType ()
+
+Returns the DOM node type. Note that these are mostly the same as nodeType(),
+except for CDATASection and EntityReference nodes. DOM_nodeType() returns
+4 and 5 respectively, whereas nodeType() returns 3, because they are
+considered text nodes.
+
+=item Function wrappers for Perl builtin functions
+
+XQL function wrappers have been provided for most Perl builtin functions.
+When using a Perl builtin function like "substr" in an XQL+ querry, an
+XQL function wrapper will be generated on the fly. The arguments to these
+functions may be regular XQL+ subqueries (that return one or more values) for
+a I<query parameter> (see generateFunction for a definition.)
+Most wrappers of Perl builtin functions have argument 0 for a query parameter,
+except for: chmod (parameter 1 is the query parameter), chown (2) and utime (2).
+The following functions have no query parameter, which means that all parameters
+should be a single value: atan2, rand, srand, sprintf, rename, unlink, system.
+
+The function result is casted to the appropriate XQL primitive type (Number,
+Text or Boolean), or to an empty list if the result was undef.
+
+=back
+
+=head2 XPath functions and methods
+
+The following functions were found in the XPath specification:
+
+=over 4
+
+=item Function: concat (STRING, STRING, STRING*)
+
+The concat function returns the concatenation of its arguments.
+
+=item Function: starts-with (STRING, STRING)
+
+The starts-with function returns true if the first argument string starts with
+the second argument string, and otherwise returns false.
+
+=item Function: contains (STRING, STRING)
+
+The contains function returns true if the first argument string contains the
+second argument string, and otherwise returns false.
+
+=item Function: substring-before (STRING, STRING)
+
+The substring-before function returns the substring of the first argument
+string that precedes the first occurrence of the second argument string
+in the first argument string, or the empty string if the first argument
+string does not contain the second argument string. For example,
+
+ substring-before("1999/04/01","/") returns 1999.
+
+=item Function: substring-after (STRING, STRING)
+
+The substring-after function returns the substring of the first argument string
+that follows the first occurrence of the second argument string in
+the first argument string, or the empty string if the first argument string does
+not contain the second argument string. For example,
+
+ substring-after("1999/04/01","/") returns 04/01,
+
+and
+
+ substring-after("1999/04/01","19") returns 99/04/01.
+
+=item Function: substring (STRING, NUMBER [, NUMBER] )
+
+The substring function returns the substring of the first argument starting at
+the position specified in the second argument with length specified in
+the third argument. For example,
+
+ substring("12345",2,3) returns "234".
+
+If the third argument is not specified, it returns the substring
+starting at the position specified in the second argument and continuing to
+the end of the string. For example,
+
+ substring("12345",2) returns "2345".
+
+More precisely, each character in the string is considered
+to have a numeric position: the position of the first character is 1,
+the position of the second character is 2 and so on.
+
+NOTE: This differs from the B<substr> method , in which the
+method treats the position of the first character as 0.
+
+The XPath spec says this about rounding, but that is not true in this
+implementation:
+I<The returned substring contains those characters for which the position of the
+character is greater than or equal to the rounded value of the
+second argument and, if the third argument is specified, less than the
+sum of the rounded value of the second argument and the rounded value of
+the third argument; the comparisons and addition used for the above
+follow the standard IEEE 754 rules; rounding is done as if by a call to the
+round function.>
+
+=item Method: string-length ( [ QUERY ] )
+
+The string-length returns the number of characters in the string.
+If the argument is omitted, it defaults to the context node
+converted to a string, in other words the string-value of the context node.
+
+Note that the generated XQL wrapper for the Perl built-in B<substr> does not
+allow the argument to be omitted.
+
+=item Method: normalize-space ( [ QUERY ] )
+
+The normalize-space function returns the argument string with whitespace
+normalized by stripping leading and trailing whitespace and replacing
+sequences of whitespace characters by a single space. Whitespace characters are
+the same as those allowed by the S production in XML. If the
+argument is omitted, it defaults to the context node converted to a string, in
+other words the string-value of the context node.
+
+=item Function: translate (STRING, STRING, STRING)
+
+The translate function returns the first argument string with occurrences of
+characters in the second argument string replaced by the character at
+the corresponding position in the third argument string. For example,
+
+ translate("bar","abc","ABC") returns the string BAr.
+
+If there is a
+character in the second argument string with no character at a corresponding
+position in the third argument string (because the second argument
+string is longer than the third argument string), then occurrences of that
+character in the first argument string are removed. For example,
+
+ translate("--aaa--","abc-","ABC") returns "AAA".
+
+If a character occurs more than once in the second argument string, then the
+first occurrence determines the replacement character. If the third argument
+string is longer than the second argument string, then excess characters
+are ignored.
+
+NOTE: The translate function is not a sufficient solution for case conversion
+in all languages. A future version may
+provide additional functions for case conversion.
+
+This function was implemented using tr///d.
+
+=item Function: sum ( QUERY )
+
+The sum function returns the sum of the QUERY results, by
+converting the string values of each result to a number.
+
+=item Function: floor (NUMBER)
+
+The floor function returns the largest (closest to positive infinity) number
+that is not greater than the argument and that is an integer.
+
+=item Function: ceiling (NUMBER)
+
+The ceiling function returns the smallest (closest to negative infinity) number
+that is not less than the argument and that is an integer.
+
+=item Function: round (NUMBER)
+
+The round function returns the number that is closest to the argument
+and that is an integer. If there are two such numbers, then the one that is
+closest to positive infinity is returned.
+
+=back
+
+=head1 Implementation Details
+
+=over 4
+
+=item XQL Builtin Data Types
+
+The XQL engine uses the following object classes internally. Only Number,
+Boolean and Text are considered I<primitive XQL types>:
+
+=over 4
+
+=item * XML::XQL::Number
+
+For integers and floating point numbers.
+
+=item * XML::XQL::Boolean
+
+For booleans, e.g returned by true() and false().
+
+=item * XML::XQL::Text
+
+For string values.
+
+=item * XML::XQL::Date
+
+For date, time and date/time values. E.g. returned by the date() function.
+
+=item * XML::XQL::Node
+
+Superclass of all XML node types. E.g. all subclasses of XML::DOM::Node subclass
+from this.
+
+=item * Perl list reference
+
+Lists of values are passed by reference (i.e. using [] delimiters).
+The empty list [] has a double meaning. It also means 'undef' in certain
+situations, e.g. when a function invocation or comparison failed.
+
+=back
+
+=item Type casting in comparisons
+
+When two values are compared in an XML comparison (e.g. $eq$) the values are
+first casted to the same data type. Node values are first replaced by their
+value() (i.e. the XQL value() function is used, which returns a Text value by
+default, but may return any data type if the user so chooses.)
+The resulting values are then casted to the type of the object with the highest
+xql_primType() value. They are as follows: Node (0), Text (1), Number (2),
+Boolean (3), Date (4), other data types (4 by default, but this may be
+overriden by the user.)
+
+E.g. if one value is a Text value and the other is a Number, the Text value is
+cast to a Number and the resulting low-level (Perl) comparison is (for $eq$):
+
+ $number->xql_toString == $text->xql_toString
+
+If both were Text values, it would have been
+
+ $text1->xql_toString eq $text2->xql_toString
+
+Note that the XQL spec is vague and even conflicting where it concerns type
+casting. This implementation resulted after talking to Joe Lapp, one of the
+spec writers.
+
+=item Adding Data Types
+
+If you want to add your own data type, make sure it derives from
+XML::XQL::PrimitiveType and implements the necessary methods.
+
+I will add more stuff here to explain it all, but for now, look at the code
+for the primitive XQL types or the Date class (L<XML::XQL::Date> in Date.pm.)
+
+=item Document Order
+
+The XQL spec states that query results always return their values in
+I<document order>, which means the order in which they appeared in the original
+XML document. Values extracted from Nodes (e.g. with value(), text(), rawText(),
+nodeName(), etc.) always have a pointer to the reference node (i.e. the Node
+from which the value was extracted.) These pointers are acknowledged when
+(intermediate) result lists are sorted. Currently, the only place where a
+result list is sorted is in a $union$ expression, which is the only place
+where the result list can be unordered.
+(If you find that this is not true, let me know.)
+
+Non-node values that have no associated reference node, always end up at the end
+of the result list in the order that they were added.
+The XQL spec states that the reference node for an XML Attribute is the Element
+to which it belongs, and that the order of values with the same reference node
+is undefined. This means that the order of an Element and its attributes would
+be undefined.
+But since the XML::DOM module keeps track of the order of the attributes, the
+XQL engine does the same, and therefore, the attributes of an Element are
+sorted and appear after their parent Element in a sorted result list.
+
+=item Constant Function Invocations
+
+If a function always returns the same value when given "constant" arguments,
+the function is considered to be "constant". A "constant" argument can be
+either an XQL primitive (Number, Boolean, Text) or a "constant" function
+invocation. E.g.
+
+ date("12-03-1998")
+ true()
+ sin(0.3)
+ length("abc")
+ date(substr("12-03-1998 is the date", 0, 10))
+
+are constant, but not:
+
+ length(book[2])
+
+Results of constant function invocations are cached and calculated only once
+for each query. See also the CONST parameter in defineFunction.
+It is not necessary to wrap constant function invocations in a once() call.
+
+Constant XQL functions are: date, true, false and a lot of the XQL+
+wrappers for Perl builtin functions. Function wrappers for certain builtins
+are not made constant on purpose to force the invocation to be evaluated
+every time, e.g. 'mkdir("/user/enno/my_dir", "0644")' (although constant
+in appearance) may return different results for multiple invocations.
+See %PerlFunc in Plus.pm for details.
+
+=item Function: count ([QUERY])
+
+The count() function has no parameters in the XQL spec. In this implementation
+it will return the number of QUERY results when passed a QUERY parameter.
+
+=item Method: text ([RECURSE])
+
+When expanding an Element node, the text() method adds the expanded text() value
+of sub-Elements. When RECURSE is set to 0 (default is 1), it will not include
+sub-elements. This is useful e.g. when using the $match$ operator in a recursive
+context (using the // operator), so it won't return parent Elements when one of
+the children matches.
+
+=item Method: rawText ([RECURSE])
+
+See text().
+
+=back
+
+=head1 SEE ALSO
+
+L<XML::XQL::Query>, L<XML::XQL::DOM>, L<XML::XQL::Date>
+
+The Japanese version of this document can be found on-line at
+L<http://member.nifty.ne.jp/hippo2000/perltips/xml/xql.htm>
+
+The L<XML::XQL::Tutorial> manual page. The Japanese version can be found at
+L<http://member.nifty.ne.jp/hippo2000/perltips/xml/xql/tutorial.htm>
+
+The XQL spec at L<http://www.w3.org/TandS/QL/QL98/pp/xql.html>
+
+The Design of XQL at L<http://www.texcel.no/whitepapers/xql-design.html>
+
+The DOM Level 1 specification at L<http://www.w3.org/TR/REC-DOM-Level-1>
+
+The XML spec (Extensible Markup Language 1.0) at L<http://www.w3.org/TR/REC-xml>
+
+The L<XML::Parser> and L<XML::Parser::Expat> manual pages.
+
+=head1 AUTHOR
+
+Please send bugs, comments and suggestions to Enno Derksen <F<enno@att.com>>
+
+=cut
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/DOM.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,622 @@
+############################################################################
+# Copyright (c) 1998 Enno Derksen
+# All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+############################################################################
+#
+# Functions added to the XML::DOM implementation for XQL support
+#
+# NOTE: This code is a bad example of how to use XML::DOM.
+# I'm accessing internal (private) data members for a little gain in performance.
+# When the internal DOM implementation changes, this code will no longer work.
+# But since I maintain XML::DOM, it's easy for me to keep them in sync.
+# Regular users are adviced to use the XML::DOM API as described in the
+# documentation.
+#
+
+use strict;
+package XML::XQL::DOM;
+
+BEGIN
+{
+ require XML::DOM;
+
+ # import constant field definitions, e.g. _Doc
+ import XML::DOM::Node qw{ :Fields };
+}
+
+package XML::DOM::Node;
+
+sub xql
+{
+ my $self = shift;
+
+ # Odd number of args, assume first is XQL expression without 'Expr' key
+ unshift @_, 'Expr' if (@_ % 2 == 1);
+ my $query = new XML::XQL::Query (@_);
+ my @result = $query->solve ($self);
+ $query->dispose;
+
+ @result;
+}
+
+sub xql_sortKey
+{
+ my $key = $_[0]->[_SortKey];
+ return $key if defined $key;
+
+ $key = XML::XQL::createSortKey ($_[0]->[_Parent]->xql_sortKey,
+ $_[0]->xql_childIndex, 1);
+#print "xql_sortKey $_[0] ind=" . $_[0]->xql_childIndex . " key=$key str=" . XML::XQL::keyStr($key) . "\n";
+ $_[0]->[_SortKey] = $key;
+}
+
+# Find previous sibling that is not a text node with ignorable whitespace
+sub xql_prevNonWS
+{
+ my $self = shift;
+ my $parent = $self->[_Parent];
+ return unless $parent;
+
+ for (my $i = $parent->getChildIndex ($self) - 1; $i >= 0; $i--)
+ {
+ my $node = $parent->getChildAtIndex ($i);
+ return $node unless $node->xql_isIgnorableWS; # skip whitespace
+ }
+ undef;
+}
+
+# True if it's a Text node with just whitespace and xml::space != "preserve"
+sub xql_isIgnorableWS
+{
+ 0;
+}
+
+# Whether the node should preserve whitespace
+# It should if it has attribute xml:space="preserve"
+sub xql_preserveSpace
+{
+ $_[0]->[_Parent]->xql_preserveSpace;
+}
+
+sub xql_element
+{
+#?? I wonder which implemention is used for e.g. DOM::Text, since XML::XQL::Node also has an implementation
+ [];
+}
+
+sub xql_document
+{
+ $_[0]->[_Doc];
+}
+
+sub xql_node
+{
+ my $kids = $_[0]->[_C];
+ if (defined $kids)
+ {
+ # Must copy the list or else we return a blessed reference
+ # (which causes trouble later on)
+ my @list = @$kids;
+ return \@list;
+ }
+
+ [];
+}
+
+#?? implement something to support NamedNodeMaps in DocumentType
+sub xql_childIndex
+{
+ $_[0]->[_Parent]->getChildIndex ($_[0]);
+}
+
+#?? implement something to support NamedNodeMaps in DocumentType
+sub xql_childCount
+{
+ my $ch = $_[0]->[_C];
+ defined $ch ? scalar(@$ch) : 0;
+}
+
+sub xql_parent
+{
+ $_[0]->[_Parent];
+}
+
+sub xql_DOM_nodeType
+{
+ $_[0]->getNodeType;
+}
+
+sub xql_nodeType
+{
+ $_[0]->getNodeType;
+}
+
+# As it appears in the XML document
+sub xql_xmlString
+{
+ $_[0]->toString;
+}
+
+package XML::DOM::Element;
+
+sub xql_attribute
+{
+ my ($node, $attrName) = @_;
+
+ if (defined $attrName)
+ {
+ my $attr = $node->getAttributeNode ($attrName);
+ defined ($attr) ? [ $attr ] : [];
+ }
+ else
+ {
+ defined $node->[_A] ? $node->[_A]->getValues : [];
+ }
+}
+
+# Used by XML::XQL::Union::genSortKey to generate sort keys
+# Returns the maximum of the number of children and the number of Attr nodes.
+sub xql_childCount
+{
+ my $n = scalar @{$_[0]->[_C]};
+ my $m = defined $_[0]->[_A] ? $_[0]->[_A]->getLength : 0;
+ return $n > $m ? $n : $m;
+}
+
+sub xql_element
+{
+ my ($node, $elem) = @_;
+
+ my @list;
+ if (defined $elem)
+ {
+ for my $kid (@{$node->[_C]})
+ {
+ push @list, $kid if $kid->isElementNode && $kid->[_TagName] eq $elem;
+ }
+ }
+ else
+ {
+ for my $kid (@{$node->[_C]})
+ {
+ push @list, $kid if $kid->isElementNode;
+ }
+ }
+ \@list;
+}
+
+sub xql_nodeName
+{
+ $_[0]->[_TagName];
+}
+
+sub xql_baseName
+{
+ my $name = $_[0]->[_TagName];
+ $name =~ s/^\w*://;
+ $name;
+}
+
+sub xql_prefix
+{
+ my $name = $_[0]->[_TagName];
+ $name =~ /([^:]+):/;
+ $1;
+}
+
+sub xql_rawText
+{
+ my ($self, $recurse) = @_;
+ $recurse = 1 unless defined $recurse;
+
+ my $text = "";
+
+ for my $kid (@{$self->xql_node})
+ {
+ my $type = $kid->xql_nodeType;
+
+ # type=1: element
+ # type=3: text (Text, CDATASection, EntityReference)
+ if (($type == 1 && $recurse) || $type == 3)
+ {
+ $text .= $kid->xql_rawText ($recurse);
+ }
+ }
+ $text;
+}
+
+sub xql_text
+{
+ my ($self, $recurse) = @_;
+ $recurse = 1 unless defined $recurse;
+
+ my $j = -1;
+ my @text;
+ my $last_was_text = 0;
+
+ # Collect text blocks. Consecutive blocks of Text, CDataSection and
+ # EntityReference nodes should be merged without stripping and without
+ # putting spaces in between.
+ for my $kid (@{$self->xql_node})
+ {
+ my $type = $kid->xql_nodeType;
+
+ if ($type == 1) # 1: element
+ {
+ if ($recurse)
+ {
+ $text[++$j] = $kid->xql_text ($recurse);
+ }
+ $last_was_text = 0;
+ }
+ elsif ($type == 3) # 3: text (Text, CDATASection, EntityReference)
+ {
+ ++$j unless $last_was_text; # next text block
+ $text[$j] .= $kid->getData;
+ $last_was_text = 1;
+ }
+ else # e.g. Comment
+ {
+ $last_was_text = 0;
+ }
+ }
+
+ # trim whitespace and remove empty blocks
+ my $i = 0;
+ my $n = @text;
+ while ($i < $n)
+ {
+ # similar to XML::XQL::trimSpace
+ $text[$i] =~ s/^\s+//;
+ $text[$i] =~ s/\s+$//;
+
+ if ($text[$i] eq "")
+ {
+ splice (@text, $i, 1); # remove empty block
+ $n--;
+ }
+ else
+ {
+ $i++;
+ }
+ }
+ join (" ", @text);
+}
+
+#
+# Returns a list of text blocks for this Element.
+# A text block is a concatenation of consecutive text-containing nodes (i.e.
+# Text, CDATASection or EntityReference nodes.)
+# For each text block a reference to an array is returned with the following
+# 3 items:
+# [0] index of first node of the text block
+# [1] index of last node of the text block
+# [2] concatenation of the raw text (of the nodes in this text block)
+#
+# The text blocks are returned in reverse order for the convenience of
+# the routines that want to modify the text blocks.
+#
+sub xql_rawTextBlocks
+{
+ my ($self) = @_;
+
+ my @result;
+ my $curr;
+ my $prevWasText = 0;
+ my $kids = $self->[_C];
+ my $n = @$kids;
+ for (my $i = 0; $i < $n; $i++)
+ {
+ my $node = $kids->[$i];
+ # 3: text (Text, CDATASection, EntityReference)
+ if ($node->xql_nodeType == 3)
+ {
+ if ($prevWasText)
+ {
+ $curr->[1] = $i;
+ $curr->[2] .= $node->getData;
+ }
+ else
+ {
+ $curr = [$i, $i, $node->getData];
+ unshift @result, $curr;
+ $prevWasText = 1;
+ }
+ }
+ else
+ {
+ $prevWasText = 0;
+ }
+ }
+ @result;
+}
+
+sub xql_replaceBlockWithText
+{
+ my ($self, $start, $end, $text) = @_;
+ for (my $i = $end; $i > $start; $i--)
+ {
+ # dispose of the old nodes
+ $self->removeChild ($self->[_C]->[$i])->dispose;
+ }
+ my $node = $self->[_C]->[$start];
+ my $newNode = $self->[_Doc]->createTextNode ($text);
+ $self->replaceChild ($newNode, $node)->dispose;
+}
+
+sub xql_setValue
+{
+ my ($self, $str) = @_;
+ # Remove all children
+ for my $kid (@{$self->[_C]})
+ {
+ $self->removeChild ($kid);
+ }
+ # Add a (single) text node
+ $self->appendChild ($self->[_Doc]->createTextNode ($str));
+}
+
+sub xql_value
+{
+ XML::XQL::elementValue ($_[0]);
+}
+
+sub xql_preserveSpace
+{
+ # attribute value should be "preserve" (1), "default" (0) or "" (ask parent)
+ my $space = $_[0]->getAttribute ("xml:space");
+ $space eq "" ? $_[0]->[_Parent]->xql_preserveSpace : ($space eq "preserve");
+}
+
+package XML::DOM::Attr;
+
+sub xql_sortKey
+{
+ my $key = $_[0]->[_SortKey];
+ return $key if defined $key;
+
+ $_[0]->[_SortKey] = XML::XQL::createSortKey ($_[0]->xql_parent->xql_sortKey,
+ $_[0]->xql_childIndex, 0);
+}
+
+sub xql_nodeName
+{
+ $_[0]->getNodeName;
+}
+
+sub xql_text
+{
+ XML::XQL::trimSpace ($_[0]->getValue);
+}
+
+sub xql_rawText
+{
+ $_[0]->getValue;
+}
+
+sub xql_value
+{
+ XML::XQL::attrValue ($_[0]);
+}
+
+sub xql_setValue
+{
+ $_[0]->setValue ($_[1]);
+}
+
+sub xql_baseName
+{
+ my $name = $_[0]->getNodeName;
+ $name =~ s/^\w*://;
+ $name;
+}
+
+sub xql_prefix
+{
+ my $name = $_[0]->getNodeName;
+ $name =~ s/:\w*$//;
+ $name;
+}
+
+sub xql_parent
+{
+ $_[0]->[_UsedIn]->{''}->{Parent};
+}
+
+sub xql_childIndex
+{
+ my $map = $_[0]->[_UsedIn];
+ $map ? $map->getChildIndex ($_[0]) : 0;
+}
+
+package XML::DOM::Text;
+
+sub xql_rawText
+{
+ $_[0]->[_Data];
+}
+
+sub xql_text
+{
+ XML::XQL::trimSpace ($_[0]->[_Data]);
+}
+
+sub xql_setValue
+{
+ $_[0]->setData ($_[1]);
+}
+
+sub xql_isIgnorableWS
+{
+ $_[0]->[_Data] =~ /^\s*$/ &&
+ !$_[0]->xql_preserveSpace;
+}
+
+package XML::DOM::CDATASection;
+
+sub xql_rawText
+{
+ $_[0]->[_Data];
+}
+
+sub xql_text
+{
+ XML::XQL::trimSpace ($_[0]->[_Data]);
+}
+
+sub xql_setValue
+{
+ $_[0]->setData ($_[1]);
+}
+
+sub xql_nodeType
+{
+ 3; # it contains text, so XQL spec states it's a text node
+}
+
+package XML::DOM::EntityReference;
+
+BEGIN
+{
+ # import constant field definitions, e.g. _Data
+ import XML::DOM::CharacterData qw{ :Fields };
+}
+
+sub xql_text
+{
+ $_[0]->getData;
+}
+
+sub xql_rawText
+{
+ XML::XQL::trimSpace ($_[0]->[_Data]);
+}
+
+sub xql_setValue
+{
+ $_[0]->setData ($_[1]);
+}
+
+sub xql_nodeType
+{
+ 3; # it contains text, so XQL spec states it's a text node
+}
+
+package XML::DOM::Document;
+
+BEGIN
+{
+ # import constant field definitions, e.g. _TagName
+ import XML::DOM::Element qw{ :Fields };
+}
+
+sub xql_sortKey
+{
+ "";
+}
+
+sub xql_element
+{
+ my ($node, $elem) = @_;
+
+ my @list;
+ if (defined $elem)
+ {
+ for my $kid (@{$node->[_C]})
+ {
+ push @list, $kid if $kid->isElementNode && $kid->[_TagName] eq $elem;
+ }
+ }
+ else
+ {
+ for my $kid (@{$node->[_C]})
+ {
+ push @list, $kid if $kid->isElementNode;
+ }
+ }
+ \@list;
+}
+
+sub xql_parent
+{
+ undef;
+}
+
+# By default the elements in a document don't preserve whitespace
+sub xql_preserveSpace
+{
+ 0;
+}
+
+package XML::DOM::DocumentFragment;
+
+BEGIN
+{
+ # import constant field definitions, e.g. _TagName
+ import XML::DOM::Element qw{ :Fields };
+}
+
+sub xql_element
+{
+ my ($node, $elemName) = @_;
+
+ my @list;
+ if (defined $elemName)
+ {
+ for my $kid (@{$node->[_C]})
+ {
+ push @list, $kid if $kid->isElementNode && $kid->[_TagName] eq $elemName;
+ }
+ }
+ else
+ {
+ for my $kid (@{$node->[_C]})
+ {
+ push @list, $kid if $kid->isElementNode;
+ }
+ }
+ \@list;
+}
+
+sub xql_parent
+{
+ undef;
+}
+
+1; # module loaded successfuly
+
+__END__
+
+=head1 NAME
+
+XML::XQL::DOM - Adds XQL support to XML::DOM nodes
+
+=head1 SYNOPSIS
+
+ use XML::XQL;
+ use XML::XQL::DOM;
+
+ $parser = new XML::DOM::Parser;
+ $doc = $parser->parsefile ("file.xml");
+
+ # Return all elements with tagName='title' under the root element 'book'
+ $query = new XML::XQL::Query (Expr => "book/title");
+ @result = $query->solve ($doc);
+
+ # Or (to save some typing)
+ @result = XML::XQL::solve ("book/title", $doc);
+
+ # Or (see XML::DOM::Node)
+ @result = $doc->xql ("book/title");
+
+=head1 DESCRIPTION
+
+XML::XQL::DOM adds methods to L<XML::DOM> nodes to support XQL queries
+on XML::DOM document structures.
+
+See L<XML::XQL> and L<XML::XQL::Query> for more details.
+L<XML::DOM::Node> describes the B<xql()> method.
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/Date.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,206 @@
+############################################################################
+# Copyright (c) 1998 Enno Derksen
+# All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+############################################################################
+
+package XML::XQL::Date;
+
+use vars qw(@ISA);
+@ISA = qw( XML::XQL::PrimitiveType );
+
+use strict;
+use Carp;
+
+BEGIN
+{
+ # Date::Manip relies on setting of $TZ.
+ unless (defined $ENV{TZ})
+ {
+ $ENV{TZ} = "EST5EDT";
+ warn "XML::XQL::Date - setting timezone \$ENV{TZ} to EST5EDT (east coast USA.) Set your TZ environment variable to avoid this message.";
+ }
+}
+use Date::Manip;
+
+BEGIN {
+ # add date() implementation to XQL engine.
+ XML::XQL::defineFunction ("date", \&XML::XQL::Date::date, 1, 1, 1);
+};
+
+use overload
+ 'fallback' => 1, # use default operators, if not specified
+ '<=>' => \&compare, # also takes care of <, <=, ==, != etc.
+ 'cmp' => \&compare, # also takes care of le, lt, eq, ne, etc.
+ '""' => \&yyyymmddhhmmss; # conversion to string uses yyyymmddhhmmss
+
+sub new
+{
+ my $class = shift;
+
+ my (%args);
+ if (@_ < 2)
+ {
+ my $str = @_ ? $_[0] : "";
+ %args = (String => $str);
+ }
+ else
+ {
+ %args = @_;
+ }
+
+ my $self = bless \%args, $class;
+
+ if (@_ < 2)
+ {
+ my $date = $self->createInternal (@_ ? $_[0] : "now");
+ $date = "" unless isValidDate ($date);
+ $self->{Internal} = $date;
+ }
+ $self;
+}
+
+sub createInternal
+{
+ my ($self, $str) = @_;
+ Date::Manip::ParseDate ($str);
+
+# From Date::Manip:
+#
+# 2 digit years fall into the 100 year period given by [ CURR-N,
+# CURR+(99-N) ] where N is 0-99. Default behavior is 89, but other useful
+# numbers might be 0 (forced to be this year or later) and 99 (forced to be
+# this year or earlier). It can also be set to "c" (current century) or
+# "cNN" (i.e. c18 forces the year to bet 1800-1899). Also accepts the
+# form cNNNN to give the 100 year period NNNN to NNNN+99.
+#$Date::Manip::YYtoYYYY=89;
+
+# Use this to force the current date to be set to this:
+#$Date::Manip::ForceDate="";
+}
+
+sub isValidDate # static method
+{
+ my ($date) = @_;
+ return 0 unless defined $date;
+
+ my $year = substr ($date, 0, 4) || 0;
+
+ $year > 1500;
+#?? arbitrary limit - years < 100 cause problems in Date::Manip
+}
+
+sub ymdhms
+{
+ my $self = shift;
+ if (@_)
+ {
+ my ($y, $mon, $d, $h, $m, $s) = @;
+#?? implement
+ }
+ else
+ {
+#?? test: x skips a character. Format: "YYYYMMDDhh:mm::ss"
+ return () unless length $self->{Internal};
+# print "ymhds " . $self->{Internal} . "\n";
+ unpack ("A4A2A2A2xA2xA2", $self->{Internal});
+ }
+}
+
+sub yyyymmddhhmmss
+{
+ my ($self) = @_;
+ my ($y, $mon, $d, $h, $m, $s) = $self->ymdhms;
+
+ $y ? "$y-$mon-${d}T$h:$m:$s" : "";
+ # using Date::Manip::UnixDate is a bit too slow for my liking
+#?? could add support for other formats
+}
+
+sub xql_toString
+{
+#?? use $_[0]->{String} or
+ $_[0]->yyyymmddhhmmss;
+}
+
+sub xql_compare
+{
+ my ($self, $other) = @_;
+ my $type = ref ($self);
+ if (ref ($other) ne $type)
+ {
+ my $str = $other->xql_toString;
+ # Allow users to plug in their own Date class
+ $other = eval "new $type (\$str)";
+#?? check result?
+ }
+#print "date::compare self=" . $self->{Internal} . " other=" . $other->{Internal}. "\n";
+ $self->{Internal} cmp $other->{Internal};
+}
+
+sub xql_setSourceNode
+{
+ $_[0]->{SourceNode} = $_[1];
+}
+
+sub xql_sourceNode
+{
+ $_[0]->{SourceNode};
+}
+
+sub xql_setValue
+{
+ my ($self, $val) = @_;
+ $self->{Internal} = $self->createInternal ($val);
+ $self->{String} = $val;
+}
+
+# The XQL date() function
+sub date # static method
+{
+ my ($context, $listref, $text) = @_;
+
+ $text = XML::XQL::toList ($text->solve ($context, $listref));
+ my @result = ();
+ for my $val (@$text)
+ {
+ # Using xql_new allows users to plug-in their own Date class
+ my $date = XML::XQL::xql_new ("date", $val->xql_toString);
+# print "date $val " . XML::XQL::d($val) . " " . $date->xql_toString . "\n";
+ push @result, $date;
+ }
+ \@result;
+}
+
+1; # module return code
+
+__END__
+
+=head1 NAME
+
+XML::XQL::Date - Adds an XQL::Node type for representing and comparing dates and times
+
+=head1 SYNOPSIS
+
+ use XML::XQL;
+ use XML::XQL::Date;
+
+ my $query = new XML::XQL::Query (Expr => "doc//timestamp[. < date('12/31/1999')]");
+ my @results = $query->solve ($doc);
+
+=head1 DESCRIPTION
+
+This package uses the L<Date::Manip> package to add an XQL node type
+(called XML::XQL::Date) that can be used to represent dates and times.
+The Date::Manip package can parse almost any date or time format imaginable.
+(I tested it with Date::Manip 5.33 and I know for sure that it doesn't work
+with 5.20 or lower.)
+
+It also adds the XQL B<date> function which creates an XML::XQL::Date
+object from a string. See L<XML::XQL::Tutorial> for a description of the date()
+function.
+
+You can plug in your own Date type, if you don't want to use Date::Manip
+ for some reason. See L<XML::XQL> and the XML::XQL::Date source file for
+more details.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/Debug.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,144 @@
+package XML::XQL::Debug;
+
+# Replaces the filepath separator if necessary (i.e for Macs and Windows/DOS)
+sub filename
+{
+ my $name = shift;
+
+ if ((defined $^O and
+ $^O =~ /MSWin32/i ||
+ $^O =~ /Windows_95/i ||
+ $^O =~ /Windows_NT/i) ||
+ (defined $ENV{OS} and
+ $ENV{OS} =~ /MSWin32/i ||
+ $ENV{OS} =~ /Windows_95/i ||
+ $ENV{OS} =~ /Windows_NT/i))
+ {
+ $name =~ s!/!\\!g;
+ }
+ elsif ((defined $^O and $^O =~ /MacOS/i) ||
+ (defined $ENV{OS} and $ENV{OS} =~ /MacOS/i))
+ {
+ $name =~ s!/!:!g;
+ $name = ":$name";
+ }
+ $name;
+}
+
+sub dump
+{
+ new XML::XQL::Debug::Dump->pr (@_);
+}
+
+sub str
+{
+ my $dump = new XML::XQL::Debug::Dump;
+ $dump->pr (@_);
+ $dump->{Str} =~ tr/\012/\n/; # for MacOS where '\012' != '\n'
+ $dump->{Str};
+}
+
+package XML::XQL::Debug::Dump;
+
+sub new
+{
+ my ($class, %args) = @_;
+ $args{Indent} = 0;
+ $args{Str} = "";
+ bless \%args, $class;
+}
+
+sub indent
+{
+ $_[0]->p (" " x $_[0]->{Indent});
+}
+
+sub ip
+{
+ my $self = shift;
+ $self->indent;
+ $self->p (@_);
+}
+
+sub pr
+{
+ my ($self, $x) = @_;
+ if (ref($x))
+ {
+ if (ref($x) eq "ARRAY")
+ {
+ if (@$x == 0)
+ {
+ $self->ip ("<array/>\n");
+ return;
+ }
+
+ $self->ip ("<array>\n");
+ $self->{Indent}++;
+
+ for (my $i = 0; $i < @$x; $i++)
+ {
+ $self->ip ("<item index='$i'>\n");
+ $self->{Indent}++;
+
+ $self->pr ($x->[$i]);
+
+ $self->{Indent}--;
+ $self->ip ("</item>\n");
+ }
+ $self->{Indent}--;
+ $self->ip ("</array>\n");
+ }
+ else
+ {
+ $self->ip ("<obj type='" . ref($x) . "'>");
+
+ if ($x->isa ('XML::XQL::PrimitiveType'))
+ {
+ $self->p ($x->xql_toString);
+ }
+ else
+ {
+ $self->p ("\n");
+ $self->{Indent}++;
+
+ if ($x->isa ("XML::DOM::Node"))
+ {
+ # print node plus subnodes as XML
+ $self->p ($x->toString);
+ }
+ $self->p ("\n");
+
+ $self->{Indent}--;
+ $self->indent;
+ }
+ $self->p ("</obj>\n");
+ }
+ }
+ elsif (defined $x)
+ {
+ $self->indent;
+ $self->p ("<str>$x<str/>\n");
+ }
+ else
+ {
+ $self->indent;
+ $self->p ("<undef/>\n");
+ }
+}
+
+sub p
+{
+ my $self = shift;
+
+ if ($self->{Dump})
+ {
+ print @;
+ }
+ else
+ {
+ $self->{Str} .= join ("", @_);
+ }
+}
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/DirXQL.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,974 @@
+# Attibute Definitions:
+#
+# name: Text - name of file, dir, ...
+# ext: Text - file extension
+# no_ext: Text - name without ext
+# full: Text - full path name
+# abs: Text - absolute path name
+#
+# M,age: Number - Age of file (in days)
+# [since script started says man(perlfunc)??]
+# cre,create: Date (see age)
+# A,acc_in_days: Number - Last access time in days
+# acc,access: Date (see A)
+# set with utime()
+# f,is_file: Boolean
+# d,is_dir: Boolean
+# l,is_link: Boolean
+# p,is_pipe: Boolean
+# e,exists: Boolean
+# z,is_zero: Boolean - whether size equals zero bytes
+# r,readable: Boolean
+# w,writable: Boolean
+# x,executable: Boolean
+# o,owned: Boolean - whether it is owned (by effective uid)
+#
+#---------------------------------------------------------------------------
+# Todo:
+# - implement abs(): absolute filepath
+# - support links: use lstat(), @link
+# - flags: -R,-W,-X,-O (by real uid/gid instead of effective uid,
+# -S (is_socket), -b (block special file), -c (char. special file),
+# -t Filehandle is opened to a tty.
+# -u File has setuid bit set.
+# -g File has setgid bit set.
+# -k File has sticky bit set.
+# -T File is a text file.
+# -B File is a binary file (opposite of -T).
+# -C inode change time in days.
+# set with utime() ??
+#
+# stat() fields:
+#
+# 0 dev device number of filesystem
+# 1 ino inode number
+# 2 mode file mode (type and permissions)
+# add mode_str ??: "rwxr-xr--"
+# 3 nlink number of (hard) links to the file
+# 4 uid numeric user ID of file's owner
+# add uname
+# 5 gid numeric group ID of file's owner
+# add gname
+# 6 rdev the device identifier (special files only)
+# x 7 size total size of file, in bytes
+# - 8 atime last access time since the epoch
+# - 9 mtime last modify time since the epoch
+# - 10 ctime inode change time (NOT creation time!) since the epoch
+# 11 blksize preferred block size for file system I/O
+# 12 blocks actual number of blocks allocated
+
+package XML::XQL::DirXQL;
+
+use strict;
+use XML::XQL;
+use XML::XQL::Date;
+
+sub dirxql
+{
+ my ($context, $list, $filepath) = @_;
+
+ $filepath = XML::XQL::toList ($filepath->solve ($context, $list));
+ my @result;
+ for my $file (@$filepath)
+ {
+ push @result, XML::XQL::DirDoc->new (Root => $file->xql_toString)->root;
+ }
+ \@result;
+}
+
+XML::XQL::defineFunction ("dirxql", \&XML::XQL::DirXQL::dirxql, 1, 1);
+
+package XML::XQL::DirNode;
+# extended by: DirDoc, DirAttr, DirElem (File, Dir), FileContents
+
+use vars qw{ @ISA $SEP };
+@ISA = qw{ XML::XQL::Node };
+
+# Directory path separator (default: Unix)
+$SEP = "/";
+
+if ((defined $^O and
+ $^O =~ /MSWin32/i ||
+ $^O =~ /Windows_95/i ||
+ $^O =~ /Windows_NT/i) ||
+ (defined $ENV{OS} and
+ $ENV{OS} =~ /MSWin32/i ||
+ $ENV{OS} =~ /Windows_95/i ||
+ $ENV{OS} =~ /Windows_NT/i))
+{
+ $SEP = "\\"; # Win32
+}
+elsif ((defined $^O and $^O =~ /MacOS/i) ||
+ (defined $ENV{OS} and $ENV{OS} =~ /MacOS/i))
+{
+ $SEP = ":"; # Mac
+}
+
+sub isElementNode { 0 }
+sub isTextNode { 0 }
+sub xql_parent { $_[0]->{Parent} }
+#sub xql_document { $_[0]->{Doc} }
+sub xml_xqlString { $_[0]->toString }
+
+sub xql
+{
+ my $self = shift;
+
+ # Odd number of args, assume first is XQL expression without 'Expr' key
+ unshift @_, 'Expr' if (@_ % 2 == 1);
+ my $query = new XML::XQL::Query (@_);
+ $query->solve ($self);
+}
+
+sub xql_sortKey
+{
+ my $key = $_[0]->{SortKey};
+ return $key if defined $key;
+
+ $key = XML::XQL::createSortKey ($_[0]->{Parent}->xql_sortKey,
+ $_[0]->xql_childIndex, 1);
+#print "xql_sortKey $_[0] ind=" . $_[0]->xql_childIndex . " key=$key str=" . XML::XQL::keyStr($key) . "\n";
+ $_[0]->{SortKey} = $key;
+}
+
+sub xql_node
+{
+ my $self = shift;
+ $self->build unless $self->{Built};
+
+ $self->{C};
+}
+
+sub getChildIndex
+{
+ my ($self, $kid) = @_;
+ my $i = 0;
+ for (@{ $self->xql_node })
+ {
+ return $i if $kid == $_;
+ $i++;
+ }
+ return -1;
+}
+
+sub xql_childIndex
+{
+ $_[0]->{Parent}->getChildIndex ($_[0]);
+}
+
+# As it appears in the XML document
+sub xql_xmlString
+{
+ $_[0]->toString;
+#?? impl.
+}
+
+sub create_date_from_days
+{
+ my ($days, $srcNode) = @_;
+ my $secs = int (0.5 + $days * 24 * 3600 );
+
+ my $internal = Date::Manip::DateCalc ("today", "- $secs seconds");
+
+ new XML::XQL::Date (SourceNode => $srcNode,
+ Internal => $internal,
+ String => $internal );
+}
+
+#------ WHITESPACE STUFF (DELETE??)
+
+# Find previous sibling that is not a text node with ignorable whitespace
+sub xql_prevNonWS
+{
+ my $self = shift;
+ my $parent = $self->{Parent};
+ return unless $parent;
+
+ for (my $i = $parent->getChildIndex ($self) - 1; $i >= 0; $i--)
+ {
+ my $node = $parent->getChildAtIndex ($i);
+ return $node unless $node->xql_isIgnorableWS; # skip whitespace
+ }
+ undef;
+}
+
+# True if it's a Text node with just whitespace and xml::space != "preserve"
+sub xql_isIgnorableWS
+{
+ 0;
+}
+
+# Whether the node should preserve whitespace
+# It should if it has attribute xml:space="preserve"
+sub xql_preserveSpace
+{
+ $_[0]->{Parent}->xql_preserveSpace;
+}
+
+#---------------------------------------------------------------------------
+package XML::XQL::DirDoc; # The Document
+use vars qw{ @ISA };
+@ISA = qw{ XML::XQL::DirNode };
+
+sub new
+{
+ my ($type, %hash) = @_;
+ my $self = bless \%hash, $type;
+
+ $self->{Root} = "." unless exists $self->{Root};
+
+ my $dirname;
+ if ($self->{Root} =~ /^(.+)\Q${XML::XQL::DirNode::SEP}\E(.+)$/)
+ {
+ $self->{Prefix} = $1;
+ $dirname = $2;
+ }
+ else
+ {
+ $self->{Prefix} = "";
+ $dirname = $self->{Root};
+ }
+
+ $self->{Dir} = new XML::XQL::Dir (TagName => $dirname, Parent => $self);
+ $self->{Built} = 1;
+
+ return $self;
+}
+
+sub xql
+{
+ shift->root->xql (@_);
+}
+
+sub root { $_[0]->{Dir} }
+
+sub isElementNode { 0 }
+sub xql_nodeType { 9 }
+sub xql_childCount { 1 }
+sub fullname { $_[0]->{Prefix} }
+sub xql_sortKey { "" }
+sub xql_parent { undef }
+sub xql_nodeName { "#document" }
+sub depth { 0 }
+sub xql_node { [ $_[0]->{Dir} ] }
+
+sub xql_element
+{
+ my ($self, $elem) = @_;
+
+ my $dir = $self->{Dir};
+ if (defined $elem)
+ {
+ return [ $dir ] if $dir->{TagName} eq $elem;
+ }
+ else
+ {
+ return [ $dir ];
+ }
+}
+
+# By default the elements in a document don't preserve whitespace
+sub xql_preserveSpace
+{
+ 0;
+}
+
+sub toString
+{
+ $_[0]->root->toString;
+}
+
+#----------------------------------------------------------------------------
+package XML::XQL::DirAttrDef; # Definitions for DirAttr nodes
+
+sub new
+{
+ my ($type, %hash) = @_;
+ bless \%hash, $type;
+}
+
+sub dump
+{
+ print $_[0]->toString . "\n";
+}
+
+sub toString
+{
+ my $self = shift;
+ print "DirAttrDef $self\n";
+ my $i = 0;
+ for my $attrName ($self->in_order)
+ {
+ my $a = $self->{$attrName};
+ print "[$i] name=$attrName"; $i++;
+ print " order=" . $a->{Order};
+ print " get=" . $a->{Get} if defined $a->{Get};
+ print " set=" . $a->{Set} if defined $a->{Set};
+ if (defined $a->{Alias})
+ {
+ print " alias=" . join (",", @{ $a->{Alias} });
+ }
+ print "\n";
+ }
+ if (defined $self->{'@ALIAS'})
+ {
+ print "Alias: ";
+ my $alias = $self->{'@ALIAS'};
+
+ print join (",", map { "$_=" . $alias->{$_} } keys %$alias);
+ print "\n";
+ }
+}
+
+sub clone
+{
+ my $self = shift;
+ my $n = new XML::XQL::DirAttrDef;
+ $n->{'@IN_ORDER'} = [ @{ $self->{'@IN_ORDER'} } ];
+
+ for my $a (@{ $self->{'@IN_ORDER'} })
+ {
+ $n->{$a} = { %{ $self->{$a} } };
+ $n->{$a}->{Alias} = [ @{ $self->{$a}->{Alias} } ]
+ if defined $self->{$a}->{Alias};
+ }
+ $n->{'@ALIAS'} = { %{ $self->{'@ALIAS'} } }
+ if defined $self->{'@ALIAS'};
+
+ return $n;
+}
+
+sub in_order { defined $_[0]->{'@IN_ORDER'} ? @{ $_[0]->{'@IN_ORDER'} } : () }
+sub alias { $_[0]->{'@ALIAS'}->{$_[1]} }
+sub order { $_[0]->{$_[1]}->{Order} }
+sub get { $_[0]->{$_[1]}->{Get} }
+sub set { $_[0]->{$_[1]}->{Set} }
+
+sub remove_attr
+{
+ my ($self, $name) = @_;
+ next unless defined $self->{$name};
+
+ my $order = $self->{$name}->{Order};
+ my @in_order = $self->in_order;
+ splice @in_order, $order, 1;
+
+ # Reassign Order numbers
+ for (my $i = 0; $i < @in_order; $i++)
+ {
+ $self->{$name}->{Order} = $i;
+ }
+ $self->{'@IN_ORDER'} = \@in_order;
+
+ delete $self->{$name};
+}
+
+sub define_attr
+{
+ my ($self, %hash) = @_;
+ my $name = $hash{Name};
+
+ if (defined $self->{$name})
+ {
+ $hash{Order} = $self->{$name}->{Order} unless defined $hash{Order};
+ $self->remove_attr ($name);
+ }
+
+ my @in_order = $self->in_order;
+ $hash{Order} = -1
+ if $hash{Order} >= @in_order;
+
+ if ($hash{Order} == -1)
+ {
+ push @in_order, $name;
+ }
+ else
+ {
+ splice @in_order, $hash{Order}, 0, $name;
+ }
+ $self->{$name} = \%hash;
+
+ # Reassign Order numbers
+ for (my $i = 0; $i < @in_order; $i++)
+ {
+ $self->{$name}->{Order} = $i;
+ }
+ $self->{'@IN_ORDER'} = \@in_order;
+
+ my @alias = defined $hash{Alias} ? @{ $hash{Alias} } : ();
+ for (@alias)
+ {
+ $self->{'@ALIAS'}->{$_} = $name;
+ }
+}
+
+#----------------------------------------------------------------------------
+package XML::XQL::DirAttr; # Attr node
+use vars qw{ @ISA %GET_ATTR_FUNC %SET_ATTR_FUNC };
+@ISA = qw{ XML::XQL::DirNode };
+
+sub new
+{
+ my ($type, %hash) = @_;
+ my $self = bless \%hash, $type;
+
+ $self->{xql_value} = $self->{Parent}->{AttrDef}->get ($hash{Name});
+ $self->{xql_setValue} = $self->{Parent}->{AttrDef}->set ($hash{Name});
+ $self;
+}
+
+sub isElementNode { 0 }
+sub xql_nodeType { 2 }
+sub xql_nodeName { $_[0]->{Name} }
+sub xql_childIndex { $_[0]->{Parent}->attrIndex ($_[0]->{Name}) }
+sub xql_childCount { 0 }
+sub xql_node { [] }
+sub is_defined { exists $_[0]->{Value} }
+
+sub create { XML::XQL::DirNode::create_date_from_days ($_[0]->{Parent}->age, $_[0]) }
+sub age { new XML::XQL::Number ($_[0]->{Parent}->age, $_[0]) }
+sub size { new XML::XQL::Text ($_[0]->{Parent}->size, $_[0]) }
+sub ext { new XML::XQL::Text ($_[0]->{Parent}->ext, $_[0]) }
+sub no_ext { new XML::XQL::Text ($_[0]->{Parent}->no_ext, $_[0]) }
+sub name { new XML::XQL::Text ($_[0]->{Parent}->name, $_[0]) }
+sub full { new XML::XQL::Text ($_[0]->{Parent}->full, $_[0]) }
+sub abs { new XML::XQL::Text ($_[0]->{Parent}->abs, $_[0]) }
+sub is_file { new XML::XQL::Boolean ($_[0]->{Parent}->is_file, $_[0]) }
+sub is_dir { new XML::XQL::Boolean ($_[0]->{Parent}->is_dir, $_[0]) }
+sub is_link { new XML::XQL::Boolean ($_[0]->{Parent}->is_link, $_[0]) }
+sub is_pipe { new XML::XQL::Boolean ($_[0]->{Parent}->is_pipe, $_[0]) }
+sub it_exists { new XML::XQL::Boolean ($_[0]->{Parent}->it_exists, $_[0]) }
+sub is_zero { new XML::XQL::Boolean ($_[0]->{Parent}->is_zero, $_[0]) }
+sub readable { new XML::XQL::Boolean ($_[0]->{Parent}->readable, $_[0]) }
+sub writable { new XML::XQL::Boolean ($_[0]->{Parent}->writable, $_[0]) }
+sub executable { new XML::XQL::Boolean ($_[0]->{Parent}->executable, $_[0]) }
+sub owned { new XML::XQL::Boolean ($_[0]->{Parent}->owned, $_[0]) }
+
+sub last_access_in_days
+{
+ new XML::XQL::Number ($_[0]->{Parent}->last_access_in_days, $_[0]);
+}
+
+sub last_access
+{
+ XML::XQL::DirNode::create_date_from_days ($_[0]->{Parent}->last_access_in_days, $_[0]);
+}
+
+sub toString
+{
+ my $old = ""; #$_[0]->is_defined ? "" : " (undef)";
+ my $val = $_[0]->xql_value->xql_toString; #exists $_[0]->{Value} ? $_[0]->{Value}->xql_toString : "(undef)";
+ $_[0]->{Name} . "=\"$val$old\""
+#?? encodeAttrValue
+}
+
+sub xql_value
+{
+ $_[0]->{Value} ||= &{ $_[0]->{xql_value} } (@_);
+}
+
+sub xql_setValue
+{
+ my ($self, $text) = @_;
+ my $set = $_[0]->{xql_setValue};
+ if (defined $set)
+ {
+ &$set ($self, $text);
+ }
+ else
+ {
+ warn "xql_setValue not defined for DirAttr name=" . $self->{TagName};
+ }
+}
+
+sub set_name
+{
+ my ($attr, $text) = @_;
+ $attr->{Parent}->set_name ($text);
+}
+
+sub set_ext
+{
+ my ($attr, $text) = @_;
+ $attr->{Parent}->set_ext ($text);
+}
+
+sub set_no_ext
+{
+ my ($attr, $text) = @_;
+ $attr->{Parent}->set_no_ext ($text);
+}
+
+#----------------------------------------------------------------------------
+package XML::XQL::DirElem; # File or Dir
+use vars qw{ @ISA $ATTRDEF };
+@ISA = qw( XML::XQL::DirNode );
+
+$ATTRDEF = new XML::XQL::DirAttrDef;
+$ATTRDEF->define_attr (Name => 'name', Get => \&XML::XQL::DirAttr::name,
+ Set => \&XML::XQL::DirAttr::set_name);
+$ATTRDEF->define_attr (Name => 'full', Get => \&XML::XQL::DirAttr::full);
+$ATTRDEF->define_attr (Name => 'abs', Get => \&XML::XQL::DirAttr::abs);
+$ATTRDEF->define_attr (Name => 'no_ext', Get => \&XML::XQL::DirAttr::no_ext,
+ Set => \&XML::XQL::DirAttr::set_no_ext);
+$ATTRDEF->define_attr (Name => 'ext', Get => \&XML::XQL::DirAttr::ext,
+ Set => \&XML::XQL::DirAttr::set_ext);
+
+$ATTRDEF->define_attr (Name => 'age', Get => \&XML::XQL::DirAttr::age,
+ Alias => [ 'M' ] );
+$ATTRDEF->define_attr (Name => 'create', Get => \&XML::XQL::DirAttr::create,
+ Alias => [ 'cre' ] );
+$ATTRDEF->define_attr (Name => 'A', Get => \&XML::XQL::DirAttr::last_access_in_days,
+ Alias => [ 'acc_in_days' ] );
+$ATTRDEF->define_attr (Name => 'access', Get => \&XML::XQL::DirAttr::last_access,
+ Alias => [ 'acc' ] );
+
+# These should only be implemented for Link and Pipe resp. !!
+$ATTRDEF->define_attr (Name => 'l', Get => \&XML::XQL::DirAttr::is_link,
+ Alias => [ 'is_link' ] );
+$ATTRDEF->define_attr (Name => 'p', Get => \&XML::XQL::DirAttr::is_pipe,
+ Alias => [ 'is_pipe' ] );
+
+$ATTRDEF->define_attr (Name => 'e', Get => \&XML::XQL::DirAttr::it_exists,
+ Alias => [ 'exists' ] );
+$ATTRDEF->define_attr (Name => 'z', Get => \&XML::XQL::DirAttr::is_zero,
+ Alias => [ 'is_zero' ] );
+$ATTRDEF->define_attr (Name => 'r', Get => \&XML::XQL::DirAttr::readable,
+ Alias => [ 'readable' ] );
+$ATTRDEF->define_attr (Name => 'w', Get => \&XML::XQL::DirAttr::writable,
+ Alias => [ 'writable' ] );
+$ATTRDEF->define_attr (Name => 'x', Get => \&XML::XQL::DirAttr::executable,
+ Alias => [ 'is_zero' ] );
+$ATTRDEF->define_attr (Name => 'o', Get => \&XML::XQL::DirAttr::owned,
+ Alias => [ 'owned' ] );
+
+#dump_attr_def();
+
+# mod => 0,
+# create => 1,
+# prot => 2,
+# protn => 3,
+# name => 4,
+# path => 5,
+# dir => 6,
+
+sub isElementNode { 1 }
+sub xql_nodeType { 1 }
+sub xql_nodeName { $_[0]->{TagName} }
+
+sub dump_attr_def { $ATTRDEF->dump; }
+sub attrNames { @{ $_[0]->{AttrDef}->{'@IN_ORDER'} } }
+sub hasAttr { exists $_[0]->{AttrDef}->{$_[1]} }
+
+# Attributes set/get
+sub full { $_[0]->fullname }
+sub abs { $_[0]->abs }
+sub no_ext { $_[0]->{TagName} }
+sub set_no_ext { shift->set_name (@_) }
+sub size { -s $_[0]->fullname }
+sub age { -M $_[0]->fullname }
+sub last_access_in_days { -A $_[0]->fullname }
+sub is_file { -f $_[0]->fullname }
+sub is_dir { -d $_[0]->fullname }
+sub is_link { -l $_[0]->fullname }
+sub is_pipe { -p $_[0]->fullname }
+sub it_exists { -e $_[0]->fullname }
+sub is_zero { -z $_[0]->fullname }
+sub readable { -r $_[0]->fullname }
+sub writable { -w $_[0]->fullname }
+sub executable { -x $_[0]->fullname }
+sub owned { -o $_[0]->fullname }
+
+sub attr_alias
+{
+ return undef unless defined $_[1];
+
+ my $alias = $_[0]->{AttrDef}->alias ($_[1]);
+ defined $alias ? $alias : $_[1];
+}
+
+sub create_path # static
+{
+ my ($dir, $file) = @_;
+
+ if ($dir =~ /\Q${XML::XQL::DirNode::SEP}\E$/)
+ {
+ return "$dir$file";
+ }
+ elsif ($dir eq "") # e.g. when file is root directory '/'
+ {
+ return $file;
+ }
+ else
+ {
+ return "$dir${XML::XQL::DirNode::SEP}$file";
+ }
+}
+
+sub fullname
+{
+ my $pa = $_[0]->{Parent}->fullname;
+ my $name = $_[0]->{TagName};
+ create_path ($pa, $name);
+}
+
+#?? same as full name - for now
+sub abs
+{
+ shift->fullname (@_);
+}
+
+sub parent_dir
+{
+ $_[0]->{Parent}->fullname;
+}
+
+# With 3 params, sets the specified attribute with $attrName to $attrValue.
+# With 2 params, reinitializes the specified attribute with $attrName if
+# it currently has a value.
+
+sub update_attr
+{
+ my ($self, $attrName, $attrValue) = @_;
+
+ if (@_ == 3)
+ {
+ my $attr = $self->getAttributeNode ($attrName);
+ if (defined $attr && defined $attr->{Value})
+ {
+ $attr->{Value} = $attrValue;
+ }
+ }
+ else
+ {
+ return unless exists $self->{A}->{$attrName};
+ my $a = $self->{A}->{$attrName};
+ if (exists $a->{Value})
+ {
+ delete $a->{Value};
+ $a->xql_value; # reinitialize value
+ }
+ }
+}
+
+sub set_name
+{
+ my ($self, $text) = @_;
+ my $fullName = $self->fullname;
+ my $newName = create_path ($self->parent_dir, $text);
+
+ if (rename ($fullName, $newName))
+ {
+ $self->{TagName} = $text;
+ $self->update_attr ('name', $text);
+ $self->update_attr ('ext');
+ $self->update_attr ('no_ext');
+
+ return 1;
+ }
+ else
+ {
+ warn "set_name: could not rename $fullName to $newName";
+ return 0;
+ }
+}
+
+sub ext
+{
+ my $name = $_[0]->{TagName};
+ $name =~ /\.([^.]+)$/;
+# print "ext name=$name ext=$1\n";
+ return $1;
+}
+
+sub set_ext
+{
+ my ($self, $text) = @_;
+# print "set_ext $text\n";
+ my $no_ext = $self->no_ext;
+ $self->set_name (length ($text) ? "$no_ext.$text" : $no_ext);
+}
+
+sub no_ext
+{
+ my $name = $_[0]->{TagName};
+ $name =~ /^(.+)\.([^.]+)$/;
+# print "no_ext name=$name no_ext=$1\n";
+ return $1;
+}
+
+sub set_no_ext
+{
+ my ($self, $text) = @_;
+# print "set_no_ext $text\n";
+ my $ext = $self->ext;
+ $self->set_name (length ($ext) ? "$text.$ext" : $text);
+}
+
+sub xql_attribute
+{
+ my ($node, $attrName) = @_;
+ if (defined $attrName)
+ {
+ my $attr = $node->getAttributeNode ($attrName);
+ defined ($attr) ? [ $attr ] : [];
+ }
+ else
+ {
+ my @attr;
+ for my $name ($node->attrNames)
+ {
+ push @attr, $node->getAttributeNode ($name);
+ }
+ \@attr;
+ }
+}
+
+sub getAttributeNode
+{
+ my ($self, $attrName) = @_;
+ $attrName = $self->attr_alias ($attrName);
+
+ return undef unless $self->hasAttr ($attrName);
+
+ my $attr = $_[0]->{A}->{$attrName} ||=
+ new XML::XQL::DirAttr (Parent => $self, Name => $attrName);
+ $attr;
+}
+
+sub attrIndex
+{
+ $_[0]->{AttrDef}->order ($_[1]);
+}
+
+sub toString
+{
+ my ($self, $depth) = @_;
+ my $indent = " " x $depth;
+ my $str = $indent;
+ my $tagName = $self->{TagName};
+
+ my $tfp = $self->tag_for_print;
+
+ $str .= "<$tfp name=\"$tagName\"";
+
+ for my $attrName ($self->attrNames)
+ {
+ next unless exists $self->{A}->{$attrName};
+
+#?? don't print un-retrieved attributes - for now
+ my $attr = $self->{A}->{$attrName};
+ next unless $attr->is_defined;
+
+ $str .= " " . $attr->toString;
+ }
+
+ my $kids = $self->print_kids ? $self->xql_node : [];
+ if (@$kids)
+ {
+ $str .= ">\n";
+ for (@$kids)
+ {
+ $str .= $_->toString ($depth + 1);
+ }
+ $str .= $indent . "</dir>\n";
+ }
+ else
+ {
+ $str .= "/>\n";
+ }
+}
+
+#----------------------------------------------------------------------------
+package XML::XQL::Dir; # Element node
+use vars qw{ @ISA $ATTRDEF };
+@ISA = qw( XML::XQL::DirElem );
+
+$ATTRDEF = $XML::XQL::DirElem::ATTRDEF->clone;
+$ATTRDEF->define_attr (Name => 'd', Get => \&XML::XQL::DirAttr::is_dir,
+ Alias => [ 'is_dir' ] );
+#dump_attr_def();
+
+sub tag_for_print { "dir" }
+sub print_kids { 1 }
+sub dump_attr_def { $ATTRDEF->dump }
+
+sub new
+{
+ my ($type, %hash) = @_;
+ $hash{AttrDef} = $ATTRDEF;
+ bless \%hash, $type;
+}
+
+sub build
+{
+ my ($self) = @_;
+ my $dirname = $self->fullname;
+# print "dirname=$dirname\n";
+
+ if (opendir (DIR, $dirname))
+ {
+ my @kids;
+
+ my @f = readdir (DIR);
+ closedir DIR;
+
+ for my $f (@f)
+ {
+ next if $f =~ /^..?$/;
+# print "dirname=$dirname f=$f\n";
+
+ my $full = defined $dirname ? "$dirname${XML::XQL::DirNode::SEP}$f" : $f;
+# print "dirname=$dirname full=$full\n";
+
+ if (-f $full)
+ {
+ push @kids, XML::XQL::File->new (Parent => $self,
+ TagName => $f
+ );
+ }
+ elsif (-d _)
+ {
+ push @kids, XML::XQL::Dir->new (Parent => $self,
+ TagName => $f
+ );
+ }
+ }
+ $self->{C} = \@kids;
+ $self->{Built} = 1;
+ }
+ else
+ {
+ print "can't opendir $dirname: $!";
+ }
+}
+
+sub xql_childCount
+{
+ my $self = shift;
+ $self->build unless $self->{Built};
+ my $ch = $self->{C};
+
+ defined $ch ? scalar(@$ch) : 0;
+}
+
+#----------------------------------------------------------------------------
+package XML::XQL::File; # Element node
+use vars qw{ @ISA $ATTRDEF };
+@ISA = qw( XML::XQL::DirElem );
+
+$ATTRDEF = $XML::XQL::DirElem::ATTRDEF->clone;
+$ATTRDEF->define_attr (Name => 'f', Get => \&XML::XQL::DirAttr::is_file,
+ Alias => [ 'is_file' ] );
+$ATTRDEF->define_attr (Name => 'size', Get => \&XML::XQL::DirAttr::size,
+ Alias => [ 's' ]);
+#dump_attr_def();
+
+sub new
+{
+ my ($type, %hash) = @_;
+ $hash{AttrDef} = $ATTRDEF;
+ bless \%hash, $type;
+}
+
+sub getChildIndex { 0 }
+sub xql_childCount { 1 }
+sub contents { $_[0]->build unless $_[0]->{Built}; $_[0]->{C}->[0] }
+sub xql_text { $_[0]->contents->xql_text }
+sub xql_rawText { $_[0]->contents->xql_text }
+sub tag_for_print { "file" }
+sub print_kids { 0 }
+sub dump_attr_def { $ATTRDEF->dump }
+
+sub xql_rawTextBlocks
+{
+ my $self = shift;
+ ( [ 0, 0, $self->xql_text ])
+}
+
+sub xql_setValue
+{
+ my ($self, $text) = @_;
+ $self->contents->xql_setValue ($text);
+}
+
+sub xql_replaceBlockWithText
+{
+ my ($self, $start, $end, $text) = @_;
+ if ($start == 0 && $end == 0)
+ {
+ $self->xql_setValue ($text);
+ }
+ else
+ {
+ warn "xql_setText bad index start=$start end=$end";
+ }
+}
+
+sub build
+{
+ my $self = shift;
+ push @{ $self->{C} }, XML::XQL::FileContents->new (Parent => $self);
+ $self->{Built} = 1;
+}
+
+#----------------------------------------------------------------------------
+package XML::XQL::FileContents; # Text node
+use vars qw{ @ISA };
+@ISA = qw{ XML::XQL::DirNode };
+
+sub new
+{
+ my ($type, %hash) = @_;
+ bless \%hash, $type;
+}
+
+sub isTextNode { 1 }
+sub xql_nodeType { 3 }
+sub xql_nodeName { "#contents" }
+sub getChildIndex { 0 }
+sub xql_childCount { 0 }
+sub xql_rawText { $_[0]->xql_text }
+
+sub xql_text
+{
+ my $self = shift;
+ unless ($self->{Built})
+ {
+ local *FILE;
+ local $/; # slurp mode
+
+ if (open (FILE, $self->{Parent}->fullname))
+ {
+ $self->{Data} = <FILE>;
+ close FILE;
+ }
+ else
+ {
+#?? warning
+ }
+ $self->{Built} = 1;
+ }
+ $self->{Data};
+}
+
+sub xql_setValue
+{
+ my ($self, $text) = @_;
+
+ my $filename = $self->{Parent}->fullname;
+ local *FILE;
+ if (open (FILE, ">$filename"))
+ {
+ print FILE $text;
+ $self->{Data} = $text;
+ $self->{Built} = 1;
+ close FILE;
+ }
+ else
+ {
+ warn "xql_setValue could not open $filename for writing";
+ }
+}
+
+return 1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/Parser.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1438 @@
+#########################################################################
+#
+# This file was generated using Parse::Yapp version 0.16.
+#
+# Don't edit this file, use source file instead.
+#
+# ANY CHANGE MADE HERE WILL BE LOST !
+#
+#########################################################################
+package XML::XQL::Parser;
+use vars qw ( @ISA );
+use strict;
+
+@ISA= qw ( Parse::Yapp::Driver );
+use Parse::Yapp::Driver;
+
+
+
+sub new {
+ my($class)=shift;
+ ref($class)
+ and $class=ref($class);
+
+ my($self)=$class->SUPER::new( yyversion => '0.16',
+ yystates =>
+[
+ {#State 0
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildQName' => 19,
+ 'WildNCName' => 18,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 5,
+ 'Disjunction' => 6,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Negation' => 26,
+ 'Query' => 27,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Sequence' => 31,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 1
+ ACTIONS => {
+ "[" => 36
+ },
+ DEFAULT => -51,
+ GOTOS => {
+ 'Subscript_2' => 37
+ }
+ },
+ {#State 2
+ DEFAULT => -43
+ },
+ {#State 3
+ ACTIONS => {
+ 'MATCH' => 40,
+ 'COMPARE' => 39
+ },
+ GOTOS => {
+ 'ComparisonOp' => 38
+ }
+ },
+ {#State 4
+ DEFAULT => -65
+ },
+ {#State 5
+ ACTIONS => {
+ "or" => 41
+ },
+ DEFAULT => -21
+ },
+ {#State 6
+ ACTIONS => {
+ 'SeqOp' => 42
+ },
+ DEFAULT => -19
+ },
+ {#State 7
+ DEFAULT => -67
+ },
+ {#State 8
+ DEFAULT => -59
+ },
+ {#State 9
+ DEFAULT => -42
+ },
+ {#State 10
+ ACTIONS => {
+ 'COMPARE' => -37,
+ 'MATCH' => -37
+ },
+ DEFAULT => -33
+ },
+ {#State 11
+ ACTIONS => {
+ "*" => 29,
+ 'NCName' => 25
+ },
+ GOTOS => {
+ 'WildQName' => 43,
+ 'WildNCName' => 18
+ }
+ },
+ {#State 12
+ DEFAULT => -62
+ },
+ {#State 13
+ DEFAULT => -68
+ },
+ {#State 14
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Filter' => 1,
+ 'Bang' => 30,
+ 'RelativePath' => 2,
+ 'LValue' => 44,
+ 'Invocation' => 32,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 45,
+ 'Subscript' => 35
+ }
+ },
+ {#State 15
+ ACTIONS => {
+ 'UnionOp' => 46
+ },
+ DEFAULT => -27
+ },
+ {#State 16
+ ACTIONS => {
+ ".." => -17,
+ 'XQLName_Paren' => -17,
+ "\@" => -17,
+ 'NCName' => -17,
+ "(" => -17,
+ "*" => -17,
+ "." => -17
+ },
+ DEFAULT => -44
+ },
+ {#State 17
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Negation' => 47,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 18
+ ACTIONS => {
+ ":" => 48
+ },
+ DEFAULT => -4
+ },
+ {#State 19
+ DEFAULT => -10
+ },
+ {#State 20
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Filter' => 1,
+ 'Bang' => 30,
+ 'RelativePath' => 2,
+ 'LValue' => 49,
+ 'Invocation' => 32,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 45,
+ 'Subscript' => 35
+ }
+ },
+ {#State 21
+ DEFAULT => -25
+ },
+ {#State 22
+ ACTIONS => {
+ 'NCName' => 25,
+ 'TEXT' => 50,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ ")" => 54,
+ "*" => 29,
+ 'NUMBER' => 51,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ 'INTEGER' => 53,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 5,
+ 'Disjunction' => 52,
+ 'Invocation_2' => 55,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'Param' => 56,
+ 'RelativeTerm' => 12,
+ 'Negation' => 26,
+ 'AttributeName' => 13,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 23
+ DEFAULT => -18
+ },
+ {#State 24
+ ACTIONS => {
+ "*" => 29,
+ 'NCName' => 25,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "(" => 28,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Filter' => 1,
+ 'Bang' => 30,
+ 'RelativePath' => 57,
+ 'Invocation' => 32,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'Subscript' => 35
+ }
+ },
+ {#State 25
+ DEFAULT => -2
+ },
+ {#State 26
+ ACTIONS => {
+ "and" => 58
+ },
+ DEFAULT => -23
+ },
+ {#State 27
+ ACTIONS => {
+ '' => 59
+ }
+ },
+ {#State 28
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 5,
+ 'Disjunction' => 6,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Negation' => 26,
+ 'Query' => 60,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Sequence' => 31,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 29
+ DEFAULT => -3
+ },
+ {#State 30
+ ACTIONS => {
+ "//" => 23,
+ "/" => 61
+ },
+ DEFAULT => -46,
+ GOTOS => {
+ 'PathOp' => 62
+ }
+ },
+ {#State 31
+ DEFAULT => -1
+ },
+ {#State 32
+ DEFAULT => -66
+ },
+ {#State 33
+ ACTIONS => {
+ "intersect" => 63
+ },
+ DEFAULT => -29
+ },
+ {#State 34
+ DEFAULT => -64
+ },
+ {#State 35
+ ACTIONS => {
+ "!" => 64
+ },
+ DEFAULT => -48
+ },
+ {#State 36
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ 'INTEGER' => 65,
+ "\@" => 11,
+ "not" => 17
+ },
+ GOTOS => {
+ 'Subquery' => 67,
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 5,
+ 'Disjunction' => 6,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Range' => 68,
+ 'Path' => 10,
+ 'IndexArg' => 69,
+ 'RelativeTerm' => 12,
+ 'IndexList' => 66,
+ 'AttributeName' => 13,
+ 'Negation' => 26,
+ 'Query' => 70,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Sequence' => 31,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 37
+ DEFAULT => -50
+ },
+ {#State 38
+ ACTIONS => {
+ 'NCName' => 25,
+ 'TEXT' => 71,
+ "(" => 28,
+ "*" => 29,
+ 'NUMBER' => 72,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ 'INTEGER' => 74,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Filter' => 1,
+ 'Bang' => 30,
+ 'RelativePath' => 2,
+ 'Invocation' => 32,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 73,
+ 'Subscript' => 35,
+ 'RValue' => 75
+ }
+ },
+ {#State 39
+ DEFAULT => -31
+ },
+ {#State 40
+ DEFAULT => -32
+ },
+ {#State 41
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 5,
+ 'Disjunction' => 76,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Negation' => 26,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 42
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 5,
+ 'Disjunction' => 6,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Negation' => 26,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Sequence' => 77,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 43
+ DEFAULT => -11
+ },
+ {#State 44
+ ACTIONS => {
+ 'MATCH' => 40,
+ 'COMPARE' => 39
+ },
+ GOTOS => {
+ 'ComparisonOp' => 78
+ }
+ },
+ {#State 45
+ DEFAULT => -37
+ },
+ {#State 46
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 79,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 47
+ DEFAULT => -26
+ },
+ {#State 48
+ ACTIONS => {
+ "*" => 29,
+ 'NCName' => 25
+ },
+ GOTOS => {
+ 'WildNCName' => 80
+ }
+ },
+ {#State 49
+ ACTIONS => {
+ 'MATCH' => 40,
+ 'COMPARE' => 39
+ },
+ GOTOS => {
+ 'ComparisonOp' => 81
+ }
+ },
+ {#State 50
+ DEFAULT => -9
+ },
+ {#State 51
+ DEFAULT => -8
+ },
+ {#State 52
+ DEFAULT => -6
+ },
+ {#State 53
+ DEFAULT => -7
+ },
+ {#State 54
+ DEFAULT => -13
+ },
+ {#State 55
+ DEFAULT => -12
+ },
+ {#State 56
+ ACTIONS => {
+ "," => 83
+ },
+ DEFAULT => -15,
+ GOTOS => {
+ 'Invocation_3' => 82
+ }
+ },
+ {#State 57
+ DEFAULT => -45
+ },
+ {#State 58
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 84,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Negation' => 26,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 59
+ DEFAULT => -0
+ },
+ {#State 60
+ ACTIONS => {
+ ")" => 85
+ }
+ },
+ {#State 61
+ DEFAULT => -17
+ },
+ {#State 62
+ ACTIONS => {
+ "*" => 29,
+ 'NCName' => 25,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "(" => 28,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Filter' => 1,
+ 'Bang' => 30,
+ 'RelativePath' => 86,
+ 'Invocation' => 32,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'Subscript' => 35
+ }
+ },
+ {#State 63
+ ACTIONS => {
+ 'NCName' => 25,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Intersection' => 87,
+ 'Bang' => 30,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 64
+ ACTIONS => {
+ 'XQLName_Paren' => 22
+ },
+ GOTOS => {
+ 'Invocation' => 88
+ }
+ },
+ {#State 65
+ ACTIONS => {
+ "to" => 89
+ },
+ DEFAULT => -56
+ },
+ {#State 66
+ ACTIONS => {
+ "]" => 90
+ }
+ },
+ {#State 67
+ ACTIONS => {
+ "]" => 91
+ }
+ },
+ {#State 68
+ DEFAULT => -57
+ },
+ {#State 69
+ ACTIONS => {
+ "," => 93
+ },
+ DEFAULT => -54,
+ GOTOS => {
+ 'IndexList_2' => 92
+ }
+ },
+ {#State 70
+ DEFAULT => -61
+ },
+ {#State 71
+ DEFAULT => -41
+ },
+ {#State 72
+ DEFAULT => -40
+ },
+ {#State 73
+ DEFAULT => -38
+ },
+ {#State 74
+ DEFAULT => -39
+ },
+ {#State 75
+ DEFAULT => -34
+ },
+ {#State 76
+ DEFAULT => -22
+ },
+ {#State 77
+ DEFAULT => -20
+ },
+ {#State 78
+ ACTIONS => {
+ 'NCName' => 25,
+ 'TEXT' => 71,
+ "(" => 28,
+ "*" => 29,
+ 'NUMBER' => 72,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ 'INTEGER' => 74,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Filter' => 1,
+ 'Bang' => 30,
+ 'RelativePath' => 2,
+ 'Invocation' => 32,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 73,
+ 'Subscript' => 35,
+ 'RValue' => 94
+ }
+ },
+ {#State 79
+ DEFAULT => -28
+ },
+ {#State 80
+ DEFAULT => -5
+ },
+ {#State 81
+ ACTIONS => {
+ 'NCName' => 25,
+ 'TEXT' => 71,
+ "(" => 28,
+ "*" => 29,
+ 'NUMBER' => 72,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ 'INTEGER' => 74,
+ "\@" => 11
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'RelativeTerm' => 12,
+ 'AttributeName' => 13,
+ 'Filter' => 1,
+ 'Bang' => 30,
+ 'RelativePath' => 2,
+ 'Invocation' => 32,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 73,
+ 'Subscript' => 35,
+ 'RValue' => 95
+ }
+ },
+ {#State 82
+ ACTIONS => {
+ ")" => 96
+ }
+ },
+ {#State 83
+ ACTIONS => {
+ 'NCName' => 25,
+ 'TEXT' => 50,
+ "(" => 28,
+ "any" => 14,
+ "all" => 20,
+ "*" => 29,
+ 'NUMBER' => 51,
+ ".." => 4,
+ 'XQLName_Paren' => 22,
+ "." => 34,
+ "//" => 23,
+ "/" => 16,
+ "\@" => 11,
+ 'INTEGER' => 53,
+ "not" => 17
+ },
+ GOTOS => {
+ 'WildNCName' => 18,
+ 'WildQName' => 19,
+ 'Filter' => 1,
+ 'Union' => 21,
+ 'RelativePath' => 2,
+ 'LValue' => 3,
+ 'Conjunction' => 5,
+ 'Disjunction' => 52,
+ 'ElementName' => 7,
+ 'Grouping' => 8,
+ 'PathOp' => 24,
+ 'AbsolutePath' => 9,
+ 'Path' => 10,
+ 'Param' => 97,
+ 'RelativeTerm' => 12,
+ 'Negation' => 26,
+ 'AttributeName' => 13,
+ 'Intersection' => 15,
+ 'Bang' => 30,
+ 'Invocation' => 32,
+ 'Comparison' => 33,
+ 'Subscript' => 35
+ }
+ },
+ {#State 84
+ DEFAULT => -24
+ },
+ {#State 85
+ DEFAULT => -63
+ },
+ {#State 86
+ DEFAULT => -47
+ },
+ {#State 87
+ DEFAULT => -30
+ },
+ {#State 88
+ DEFAULT => -49
+ },
+ {#State 89
+ ACTIONS => {
+ 'INTEGER' => 98
+ }
+ },
+ {#State 90
+ DEFAULT => -52
+ },
+ {#State 91
+ DEFAULT => -60
+ },
+ {#State 92
+ DEFAULT => -53
+ },
+ {#State 93
+ ACTIONS => {
+ 'INTEGER' => 65
+ },
+ GOTOS => {
+ 'IndexArg' => 99,
+ 'Range' => 68
+ }
+ },
+ {#State 94
+ DEFAULT => -35
+ },
+ {#State 95
+ DEFAULT => -36
+ },
+ {#State 96
+ DEFAULT => -14
+ },
+ {#State 97
+ ACTIONS => {
+ "," => 83
+ },
+ DEFAULT => -15,
+ GOTOS => {
+ 'Invocation_3' => 100
+ }
+ },
+ {#State 98
+ DEFAULT => -58
+ },
+ {#State 99
+ ACTIONS => {
+ "," => 93
+ },
+ DEFAULT => -54,
+ GOTOS => {
+ 'IndexList_2' => 101
+ }
+ },
+ {#State 100
+ DEFAULT => -16
+ },
+ {#State 101
+ DEFAULT => -55
+ }
+],
+ yyrules =>
+[
+ [#Rule 0
+ '$start', 2, undef
+ ],
+ [#Rule 1
+ 'Query', 1, undef
+ ],
+ [#Rule 2
+ 'WildNCName', 1, undef
+ ],
+ [#Rule 3
+ 'WildNCName', 1, undef
+ ],
+ [#Rule 4
+ 'WildQName', 1,
+sub {
+ [ Name => $_[1] ];
+}
+ ],
+ [#Rule 5
+ 'WildQName', 3,
+sub {
+
+ [ NameSpace => $_[1], Name => $_[2]];
+}
+ ],
+ [#Rule 6
+ 'Param', 1, undef
+ ],
+ [#Rule 7
+ 'Param', 1,
+sub {
+ new XML::XQL::Number ($_[1]);
+}
+ ],
+ [#Rule 8
+ 'Param', 1,
+sub {
+ new XML::XQL::Number ($_[1]);
+}
+ ],
+ [#Rule 9
+ 'Param', 1,
+sub {
+ new XML::XQL::Text ($_[1]);
+}
+ ],
+ [#Rule 10
+ 'ElementName', 1,
+sub {
+ new XML::XQL::Element (@{$_[1]});
+}
+ ],
+ [#Rule 11
+ 'AttributeName', 2,
+sub {
+ new XML::XQL::Attribute (@{$_[2]});
+}
+ ],
+ [#Rule 12
+ 'Invocation', 2,
+sub {
+
+ my ($func, $type) = $_[0]->{Query}->findFunctionOrMethod ($_[1], $_[2]);
+
+ new XML::XQL::Invocation (Name => $_[1],
+ Args => $_[2],
+ Func => $func,
+ Type => $type);
+}
+ ],
+ [#Rule 13
+ 'Invocation_2', 1,
+sub {
+ []
+}
+ ],
+ [#Rule 14
+ 'Invocation_2', 3,
+sub {
+ unshift @{$_[2]}, $_[1]; $_[2];
+}
+ ],
+ [#Rule 15
+ 'Invocation_3', 0,
+sub {
+ []
+}
+ ],
+ [#Rule 16
+ 'Invocation_3', 3,
+sub {
+ unshift @{$_[3]}, $_[2]; $_[3];
+}
+ ],
+ [#Rule 17
+ 'PathOp', 1, undef
+ ],
+ [#Rule 18
+ 'PathOp', 1, undef
+ ],
+ [#Rule 19
+ 'Sequence', 1, undef
+ ],
+ [#Rule 20
+ 'Sequence', 3,
+sub {
+
+ new XML::XQL::Sequence (Left => $_[1], Oper => $_[2],
+ Right => $_[3]);
+}
+ ],
+ [#Rule 21
+ 'Disjunction', 1, undef
+ ],
+ [#Rule 22
+ 'Disjunction', 3,
+sub {
+
+ new XML::XQL::Or (Left => $_[1], Right => $_[3]);
+}
+ ],
+ [#Rule 23
+ 'Conjunction', 1, undef
+ ],
+ [#Rule 24
+ 'Conjunction', 3,
+sub {
+
+ new XML::XQL::And (Left => $_[1], Right => $_[3]);
+}
+ ],
+ [#Rule 25
+ 'Negation', 1, undef
+ ],
+ [#Rule 26
+ 'Negation', 2,
+sub {
+ new XML::XQL::Not (Left => $_[2]);
+}
+ ],
+ [#Rule 27
+ 'Union', 1, undef
+ ],
+ [#Rule 28
+ 'Union', 3,
+sub {
+
+ new XML::XQL::Union (Left => $_[1], Right => $_[3]);
+}
+ ],
+ [#Rule 29
+ 'Intersection', 1, undef
+ ],
+ [#Rule 30
+ 'Intersection', 3,
+sub {
+
+ new XML::XQL::Intersect ($_[1], $_[3]);
+}
+ ],
+ [#Rule 31
+ 'ComparisonOp', 1,
+sub {
+
+ [ $_[1], $_[0]->{Query}->findComparisonOperator ($_[1]) ];
+}
+ ],
+ [#Rule 32
+ 'ComparisonOp', 1,
+sub {
+
+ [ $_[1], $_[0]->{Query}->findComparisonOperator ($_[1]) ];
+}
+ ],
+ [#Rule 33
+ 'Comparison', 1, undef
+ ],
+ [#Rule 34
+ 'Comparison', 3,
+sub {
+
+ new XML::XQL::Compare (All => 0, Left => $_[1],
+ Oper => $_[2]->[0], Func => $_[2]->[1],
+ Right => $_[3]);
+}
+ ],
+ [#Rule 35
+ 'Comparison', 4,
+sub {
+
+ new XML::XQL::Compare (All => 0, Left => $_[2],
+ Oper => $_[3]->[0], Func => $_[3]->[0],
+ Right => $_[4]);
+}
+ ],
+ [#Rule 36
+ 'Comparison', 4,
+sub {
+
+ new XML::XQL::Compare (All => 1, Left => $_[2],
+ Oper => $_[3]->[0], Func => $_[3]->[0],
+ Right => $_[4]);
+}
+ ],
+ [#Rule 37
+ 'LValue', 1, undef
+ ],
+ [#Rule 38
+ 'RValue', 1, undef
+ ],
+ [#Rule 39
+ 'RValue', 1,
+sub {
+ new XML::XQL::Number ($_[1]);
+}
+ ],
+ [#Rule 40
+ 'RValue', 1,
+sub {
+ new XML::XQL::Number ($_[1]);
+}
+ ],
+ [#Rule 41
+ 'RValue', 1,
+sub {
+ new XML::XQL::Text ($_[1]);
+}
+ ],
+ [#Rule 42
+ 'Path', 1, undef
+ ],
+ [#Rule 43
+ 'Path', 1, undef
+ ],
+ [#Rule 44
+ 'AbsolutePath', 1,
+sub {
+ new XML::Root;
+}
+ ],
+ [#Rule 45
+ 'AbsolutePath', 2,
+sub {
+
+ new XML::XQL::Path (PathOp => $_[1], Right => $_[2]);
+}
+ ],
+ [#Rule 46
+ 'RelativePath', 1, undef
+ ],
+ [#Rule 47
+ 'RelativePath', 3,
+sub {
+
+ new XML::XQL::Path (Left => $_[1], PathOp => $_[2],
+ Right => $_[3]);
+}
+ ],
+ [#Rule 48
+ 'Bang', 1, undef
+ ],
+ [#Rule 49
+ 'Bang', 3,
+sub {
+
+ XML::XQL::parseError ("only methods (not functions) can be used after the Bang (near '!" . $_[3]->{Name} . "'")
+ unless $_[3]->isMethod;
+
+ new XML::XQL::Bang (Left => $_[1],
+ Right => $_[3]);
+}
+ ],
+ [#Rule 50
+ 'Subscript', 2,
+sub {
+
+ defined($_[2]) ?
+ new XML::XQL::Subscript (Left => $_[1],
+ IndexList => $_[2]) : $_[1];
+}
+ ],
+ [#Rule 51
+ 'Subscript_2', 0, undef
+ ],
+ [#Rule 52
+ 'Subscript_2', 3,
+sub {
+ $_[2];
+}
+ ],
+ [#Rule 53
+ 'IndexList', 2,
+sub {
+ push (@{$_[1]}, @{$_[2]}); $_[1];
+}
+ ],
+ [#Rule 54
+ 'IndexList_2', 0,
+sub {
+ []
+}
+ ],
+ [#Rule 55
+ 'IndexList_2', 3,
+sub {
+ push (@{$_[2]}, @{$_[3]}); $_[2];
+}
+ ],
+ [#Rule 56
+ 'IndexArg', 1,
+sub {
+ [ $_[1], $_[1] ];
+}
+ ],
+ [#Rule 57
+ 'IndexArg', 1, undef
+ ],
+ [#Rule 58
+ 'Range', 3,
+sub {
+
+ # Syntactic Constraint 9:
+ # If both integers are positive or if both integers are
+ # negative, the first integer must be less than or
+ # equal to the second integer.
+
+ XML::XQL::parseError (
+ "$_[1] should be less than $_[3] in '$_[1] $_[2] $_[3]'")
+ if ($_[1] > $_[3] && ($_[1] < 0) == ($_[3] < 0));
+ [ $_[1], $_[3] ];
+}
+ ],
+ [#Rule 59
+ 'Filter', 1, undef
+ ],
+ [#Rule 60
+ 'Filter', 4,
+sub {
+
+ new XML::XQL::Filter (Left => $_[1], Right => $_[3]);
+}
+ ],
+ [#Rule 61
+ 'Subquery', 1, undef
+ ],
+ [#Rule 62
+ 'Grouping', 1, undef
+ ],
+ [#Rule 63
+ 'Grouping', 3,
+sub {
+ $_[2];
+}
+ ],
+ [#Rule 64
+ 'RelativeTerm', 1,
+sub {
+ new XML::XQL::Current;
+}
+ ],
+ [#Rule 65
+ 'RelativeTerm', 1,
+sub {
+ new XML::XQL::Parent;
+}
+ ],
+ [#Rule 66
+ 'RelativeTerm', 1, undef
+ ],
+ [#Rule 67
+ 'RelativeTerm', 1, undef
+ ],
+ [#Rule 68
+ 'RelativeTerm', 1, undef
+ ]
+],
+ @_);
+ bless($self,$class);
+}
+
+
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/Plus.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,634 @@
+############################################################################
+# Copyright (c) 1998 Enno Derksen
+# All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+############################################################################
+#
+# Extra functionality that is not part of the XQL spec
+#
+
+package XML::XQL;
+use strict;
+
+BEGIN
+{
+ die "don't use/require XML::XQL::Plus, either use/require XML::XQL or XML::XQL::Strict" unless $XML::XQL::Included;
+};
+
+defineComparisonOperators
+(
+ "=~" => \&XML::XQL::match_oper,
+ "!~" => \&XML::XQL::no_match_oper,
+ "match" => \&XML::XQL::match_oper,
+ "no_match" => \&XML::XQL::no_match_oper,
+ "isa" => \&XML::XQL::isa_oper,
+ "can" => \&XML::XQL::can_oper,
+);
+
+sub match_oper
+{
+ my ($node, $expr) = @_;
+
+ return [] if isEmptyList ($node);
+#?? can this happen?
+
+ my $str = $node->xql_toString;
+
+ $expr = prepareRvalue ($expr->solve ([$node]));
+ return [] if isEmptyList ($expr);
+#?? can this happen?
+
+ $expr = $expr->xql_toString;
+ croak "bad search pattern '$expr' for =~" unless $expr =~ m!^\s*[m/]!o;
+
+ my $res = eval "\$str =~ $expr";
+ croak "bad search pattern '$expr' for =~ operator: $@" if ($@);
+ $res;
+}
+
+sub no_match_oper
+{
+ my ($node, $expr) = @_;
+
+ return [] if isEmptyList ($node);
+#?? can this happen?
+
+ my $str = $node->xql_toString;
+
+ $expr = prepareRvalue ($expr->solve ([$node]));
+ return [] if isEmptyList ($expr);
+#?? can this happen?
+
+ $expr = $expr->xql_toString;
+ croak "bad search pattern '$expr' for !~" unless $expr =~ m!^\s*[m/]!o;
+
+ my $res = eval "\$str !~ $expr";
+ croak "bad search pattern '$expr' for !~ operator: $@" if ($@);
+ $res;
+}
+
+sub isa_oper
+{
+ my ($node, $expr) = @_;
+
+ return [] if isEmptyList ($node);
+#?? can this happen?
+
+ $expr = prepareRvalue ($expr->solve ([$node]));
+ return [] if isEmptyList ($expr);
+#?? can this happen?
+
+ $expr = $expr->xql_toString;
+
+ # Expand "number" to "XML::XQL::Number" etc.
+ $expr = expandType ($expr);
+
+#?? I don't think empty lists are possible here. If so, add "[]" as expr
+
+ ref($node) and $node->isa ($expr);
+}
+
+#
+# Not sure how useful this is, unless it supports XQL functions/methods...
+#
+sub can_oper
+{
+ my ($node, $expr) = @_;
+
+ return [] if isEmptyList ($node);
+#?? can this happen?
+
+ $expr = prepareRvalue ($expr->solve ([$node]));
+ return [] if isEmptyList ($expr);
+#?? can this happen?
+
+ $expr = $expr->xql_toString;
+
+ ref ($node) and $node->can ($expr);
+}
+
+sub once
+{
+ my ($context, $list, $expr) = @_;
+ $expr->solve ($context, $list);
+}
+
+sub xql_eval
+{
+ my ($context, $list, $query, $type) = @_;
+
+# return [] if @$list == 0;
+
+ $query = toList ($query->solve ($context, $list));
+ return [] unless @$query;
+
+ if (defined $type)
+ {
+ $type = prepareRvalue ($type->solve ($context, $list));
+ $type = isEmptyList ($type) ? "Text" : $type->xql_toString;
+
+ # Expand "number" to "XML::XQL::Number" etc.
+ $type = expandType ($type);
+ }
+ else
+ {
+ $type = "XML::XQL::Text";
+ }
+
+ my @result = ();
+ for my $val (@$query)
+ {
+ $val = $val->xql_toString;
+ $val = eval $val;
+
+#print "eval result=$val\n";
+#?? check result?
+ push @result, eval "new $type (\$val)" if defined $val;
+ }
+ \@result;
+}
+
+sub subst
+{
+ my ($context, $list, $query, $expr, $repl, $mod, $mode) = @_;
+
+#?? not sure?
+ return [] if @$list == 0;
+
+ $expr = prepareRvalue ($expr->solve ($context, $list));
+ return [] if isEmptyList ($expr);
+ $expr = $expr->xql_toString;
+
+ $repl = prepareRvalue ($repl->solve ($context, $list));
+ return [] if isEmptyList ($repl);
+ $repl = $repl->xql_toString;
+
+ if (defined $mod)
+ {
+ $mod = prepareRvalue ($mod->solve ($context, $list));
+ $mod = isEmptyList ($mod) ? "" : $mod->xql_toString;
+ }
+
+ if (defined $mode)
+ {
+ $mode = prepareRvalue ($mode->solve ($context, $list));
+ $mode = isEmptyList ($mode) ? 0 : $mode->xql_toString;
+ }
+ else
+ {
+ $mode = 0; # default mode: use textBlocks for Elements
+ }
+
+ my @result = ();
+ my $nodes = toList ($query->solve ($context, $list));
+
+ for my $node (@$nodes)
+ {
+ if ($mode == 0 && $node->xql_nodeType == 1) # 1: Element node
+ {
+ # For Element nodes, replace text in consecutive text blocks
+ # Note that xql_rawtextBlocks, returns the blocks in reverse order,
+ # so that the indices of nodes within previous blocks don't need
+ # to be adjusted when a replacement occurs.
+ my $block_matched = 0;
+ BLOCK: for my $block ($node->xql_rawTextBlocks)
+ {
+ my $str = $block->[2];
+ my $result = eval "\$str =~ s/\$expr/\$repl/$mod";
+ croak "bad subst expression s/$expr/$repl/$mod: $@" if ($@);
+ next BLOCK unless $result;
+
+ $block_matched++;
+ $node->xql_replaceBlockWithText ($block->[0], $block->[1], $str);
+ }
+ # Return the input parameter only if a substitution occurred
+ push @result, $node if $block_matched;
+ }
+ else
+ {
+ my $str = $node->xql_toString;
+ next unless defined $str;
+
+ my $result = eval "\$str =~ s/\$expr/\$repl/$mod";
+ croak "bad subst expression s/$expr/$repl/$mod: $@" if ($@);
+ next unless $result;
+#print "result=$result for str[$str] =~ s/$expr/$repl/$mod\n";
+
+ # Return the input parameter only if a substitution occurred
+ $node->xql_setValue ($str);
+ push @result, $node;
+ }
+ # xql_setValue will actually change the value of the node for an Attr,
+ # Text, CDataSection, EntityRef or Element
+ }
+ \@result;
+}
+
+#?? redo match - what should it return?
+sub match
+{
+ my ($context, $list, $query, $repl, $mod) = @_;
+
+ return [] if @$list == 0;
+
+ $query = prepareRvalue ($query->solve ($context, $list));
+ return [] if isEmptyList ($query);
+ $query = $query->xql_toString;
+
+ if (defined $mod)
+ {
+ $mod = prepareRvalue ($mod->solve ($context, $list));
+ $mod = isEmptyList ($mod) ? "" : $mod->xql_toString;
+ }
+
+ my $str = $list->[0]->xql_toString;
+ return [] unless defined $str;
+
+ my (@matches) = ();
+ eval "\@matches = (\$str =~ /\$query/$mod)";
+ croak "bad match expression m/$query/$mod" if ($@);
+
+#?? or should I map undef to XML::XQL::Text("") ?
+ @matches = map { defined($_) ? new XML::XQL::Text ($_) : [] } @matches;
+ \@matches;
+}
+
+sub xql_map
+{
+ my ($context, $list, $query, $code) = @_;
+
+#?? not sure?
+ return [] if @$list == 0;
+
+ $code = prepareRvalue ($code->solve ($context, $list));
+ return [] if isEmptyList ($code);
+ $code = $code->xql_toString;
+
+ my @result = ();
+ my $nodes = toList ($query->solve ($context, $list));
+
+ for my $node (@$nodes)
+ {
+ my $str = $node->xql_toString;
+ next unless defined $str;
+
+ my (@mapresult) = ($str);
+
+#?? NOTE: the $code should
+ eval "\@mapresult = map { $code } (\$str)";
+ croak "bad map expression '$code' ($@)" if ($@);
+
+ # Return the input parameter only if a change occurred
+ next unless $mapresult[0] eq $str;
+
+ # xql_setValue will actually change the value of the node for an Attr,
+ # Text, CDataSection, EntityRef or Element
+ $node->xql_setValue ($str);
+ push @result, $node;
+ }
+ \@result;
+}
+
+sub xql_new
+{
+ my ($type, @arg) = @_;
+
+ # Expand "number" to "XML::XQL::Number" etc.
+ $type = expandType ($type);
+
+ my $obj = eval "new $type (\@arg)";
+ $@ ? [] : $obj; # return empty list on exception
+}
+
+my $DOM_PARSER; # used by xql_document (below)
+sub setDocParser
+{
+ $DOM_PARSER = shift;
+}
+
+sub xql_document
+{
+ my ($docname) = @_;
+ my $parser = $DOM_PARSER ||= new XML::DOM::Parser;
+ my $doc;
+ eval
+ {
+ $doc = $parser->parsefile ($docname);
+ };
+ if ($@)
+ {
+ warn "xql_document: could not read XML file [$docname]: $@";
+ }
+ return defined $doc ? $doc : [];
+}
+
+#----------- XQL+ methods --------------------------------------------
+
+
+sub DOM_nodeType
+{
+ my ($context, $list) = @_;
+
+ return [] if @$list == 0;
+
+ new XML::XQL::Number ($list->[0]->xql_DOM_nodeType, $list->[0]);
+}
+
+#----------- Perl Builtin Functions ----------------------------------
+
+# Note that certain functions (like mkdir) are not considered "constant"
+# because we don't want their invocation values cached. (We want the
+# function to be called every time the Invocation is solved/evaluated.)
+my %PerlFunc =
+(
+ # Format:
+ # "funcName", => [ARGCOUNT, RETURN_TYPE [, CONSTANT = 0, [QUERY_ARG = 0]]]
+
+ #-------- Arithmetic Functions
+
+ "abs" => [1, "Number", 1],
+ "atan2" => [2, "Number", 1, -1],
+ "cos" => [1, "Number", 1],
+ "exp" => [1, "Number", 1],
+ "int" => [1, "Number", 1],
+ "log" => [1, "Number", 1],
+ "rand" => [[0, 1], "Number", 0, -1],
+ "sin" => [1, "Number", 1],
+ "sqrt" => [1, "Number", 1],
+ "srand" => [[0, 1], "Number", 0, -1],
+ "time" => [0, "Number", 0, -1],
+
+ #-------- Conversion Functions
+
+ "chr" => [1, "Text", 1],
+# "gmtime" => [1, "List of Number", 1],
+ "hex" => [1, "Number", 1],
+# "localtime" => [1, "List of Number", 1],
+ "oct" => [1, "Number", 1],
+ "ord" => [1, "Text", 1],
+ "vec" => [3, "Number", 1],
+ "pack" => [[1, -1], "Text", 1, -1], #?? how should this work??
+# "unpack" => [2, "List of ?", 1],
+
+ #-------- String Functions
+
+ "chomp" => [1, "Text", 1],
+ "chop" => [1, "Text", 1],
+ "crypt" => [2, "Text", 1],
+ "lindex" => [[2, 3], "Number", 1], # "index" is already taken by XQL
+ "length" => [1, "Number", 1],
+ "lc" => [1, "Text", 1],
+ "lcfirst" => [1, "Text", 1],
+ "quotemeta" => [1, "Text", 1],
+ "rindex" => [[2, 3], "Number", 1],
+ "substr" => [[2, 3], "Text", 1],
+ "uc" => [1, "Text", 1],
+ "ucfirst" => [1, "Text", 1],
+ "reverse" => [1, "Text", 1],
+ "sprintf" => [[1, -1], "Text", 1, -1],
+
+ #-------- Array Functions
+
+ "join" => [[1, -1], "Text", 1],
+# "split" => [[2, 3], "List of Text", 1],
+
+ #-------- File Functions
+
+ "chmod" => [2, "Boolean", 0, 1],
+ "chown" => [3, "Boolean", 0, 2],
+ "link" => [2, "Number", 0, -1], #?? no return value
+# "lstat" => [1, "List of Number"],
+ "mkdir" => [2, "Boolean"], #?? or is 1 arg also allowed?
+ "readlink" => [1, "Text"],
+ "rename" => [2, "Boolean", 0, -1],
+ "rmdir" => [1, "Boolean"],
+# "stat" => [1, "List of Number"],
+ "symlink" => [2, "Boolean", 0, -1],
+ "unlink" => [1, "Boolean"],
+ "utime" => [3, "Boolean", 0, 2],
+ "truncate" => [2, "Number"], #?? no return value
+
+ #-------- System Interaction
+
+ "exit" => [[0, 1], "Number"],
+# "glob" => [1, "List of Text"],
+ "system" => [[1, -1], "Number", 0, -1],
+# "times" => [0, "List of Number"],
+
+ #-------- Miscellaneous
+
+ "defined" => [1, "Boolean"], # is this useful??
+ "dump" => [[0, 1], "Number", 0, -1],
+ "ref" => [1, "Text"],
+);
+#?? die, warn, croak (etc.),
+#?? file test (-X), tr// (same as y//)
+#?? array functions, sort
+
+# Generate wrapper for Perl builtin function on the fly
+sub generatePerlWrapper
+{
+ my ($name) = @_;
+ my $args = $PerlFunc{$name};
+ return undef unless defined $args; # not found
+
+ my ($argCount, $returnType, $const, $queryArg) = @$args;
+ my $funcName = $name;
+ if ($name eq "lindex") # "index" is already taken
+ {
+ $funcName = "index";
+ }
+ generateFunction ($name, $funcName, $returnType, $argCount, 0, $const,
+ $queryArg);
+ $Func{$name};
+}
+
+#?? Inline functions, do they make sense? E.g. 'elem!sub("code", "arg1")'
+#?? Normally, user should use defineFunction, but if most of them have
+#?? a lot of common code, I could provide the pre- and post-code.
+#?? After processing the user-supplied code block, how should I convert the
+#?? user's result back to an Invocation result. E.g. do I get a single value
+#?? or a list back?
+
+defineFunction ("eval", \&XML::XQL::xql_eval, [1, 2]);
+defineFunction ("subst", \&XML::XQL::subst, [3, 5], 1);
+defineFunction ("s", \&XML::XQL::subst, [3, 5], 1);
+defineFunction ("match", \&XML::XQL::match, [1, 2]);
+defineFunction ("m", \&XML::XQL::match, [1, 2]);
+defineFunction ("map", \&XML::XQL::xql_map, 2, 1);
+defineFunction ("once", \&XML::XQL::once, 1, 1);
+
+defineMethod ("DOM_nodeType", \&XML::XQL::DOM_nodeType, 0, 0);
+
+generateFunction ("new", "XML::XQL::xql_new", "*", [1, -1], 1, 0, 1);
+generateFunction ("document", "XML::XQL::xql_document", "*", 1, 1, 0, 0);
+
+# doc() is an alias for document()
+defineFunction ("doc", \&XML::XQL::xql_wrap_document, 1, 1);
+
+#------------------------------------------------------------------------------
+# The following functions were found in the XPath spec.
+
+# Found in XPath but not (yet) implemented in XML::XQL:
+# - type casting (string, number, boolean) - Not sure if needed...
+# Note that string() converts booleans to 'true' and 'false', but our
+# internal type casting converts it to perl values '0' and '1'...
+# - math (+,-,*,mod,div) - Use eval() for now
+# - last(), position() - Similar to end() and index() except they're 1-based
+# - local-name(node-set?), namespace-uri(node-set?)
+# - name(node-set?) - Can we pass a node-set in XQL?
+# - lang(string)
+
+sub xpath_concat { join ("", @_) }
+sub xpath_starts_with { $_[0] =~ /^\Q$_[1]\E/ }
+# ends-with is not part of XPath
+sub xpath_ends_with { $_[0] =~ /\Q$_[1]\E$/ }
+sub xpath_contains { $_[0] =~ /\Q$_[1]\E/ }
+
+# The following methods don't know about NaN, +/-Infinity or -0.
+sub xpath_floor { use POSIX; POSIX::floor ($_[0]) }
+sub xpath_ceiling { use POSIX; POSIX::ceil ($_[0]) }
+sub xpath_round { use POSIX; POSIX::floor ($_[0] + 0.5) }
+
+# Note that the start-index is 1-based in XPath
+sub xpath_substring
+{
+ defined $_[2] ? substr ($_[0], $_[1] - 1, $_[2])
+ : substr ($_[0], $_[1] - 1)
+}
+
+sub xpath_substring_before
+{
+ my $i = index ($_[0], $_[1]);
+ $i == -1 ? undef : substr ($_[0], 0, $i)
+}
+
+sub xpath_substring_after
+{
+ my $i = index ($_[0], $_[1]);
+ $i == -1 ? undef : substr ($_[0], $i + length($_[1]))
+}
+
+# Note that d,c,s are tr/// modifiers. Also can't use open delimiters i.e. {[(<
+my @TR_DELIMITERS = split //, "/!%^&*)-_=+|~]}'\";:,.>/?abefghijklmnopqrtuvwxyz";
+
+sub xpath_translate
+{
+ my ($str, $from, $to) = @_;
+
+ my $delim;
+ for my $d (@TR_DELIMITERS)
+ {
+ if (index ($from, $d) == -1 && index ($to, $d) == -1)
+ {
+ $delim = $d;
+ last;
+ }
+ }
+ die "(xpath_)translate: can't find suitable 'tr' delimiter"
+ unless defined $delim;
+
+ # XPath defines that if length($from) > length($to), characters in $from
+ # for which there is no match in $to, should be deleted.
+ # (So we must use the 's' modifier.)
+ eval "\$str =~ tr$delim$from$delim$to${delim}d";
+ $str;
+}
+
+sub xpath_string_length
+{
+ my ($context, $list, $text) = @_;
+
+ if (defined $text)
+ {
+ $text = XML::XQL::prepareRvalue ($text->solve ($context, $list));
+ return [] unless defined $text;
+
+ return new XML::XQL::Number (length $text->xql_toString,
+ $text->xql_sourceNode);
+ }
+ else
+ {
+ return [] if @$list == 0;
+
+ my @result;
+ for my $node (@$list)
+ {
+ push @result, new XML::XQL::Number (length $node->xql_toString,
+ $node);
+ }
+ return \@result;
+ }
+}
+
+sub _normalize
+{
+ $_[0] =~ s/\s+/ /g;
+ $_[0] =~ s/^\s+//;
+ $_[0] =~ s/\s+$//;
+ $_[0];
+}
+
+sub xpath_normalize_space
+{
+ my ($context, $list, $text) = @_;
+
+ return [] if @$list == 0;
+
+ if (defined $text)
+ {
+ $text = XML::XQL::prepareRvalue ($text->solve ($context, $list));
+ return [] unless defined $text;
+
+ return new XML::XQL::Text (_normalize ($text->xql_toString),
+ $text->xql_sourceNode);
+ }
+ else
+ {
+ my @result;
+ for my $node (@$list)
+ {
+ push @result, new XML::XQL::Text (_normalize ($node->xql_toString),
+ $node);
+ }
+ return \@result;
+ }
+}
+
+sub xpath_sum
+{
+ my ($context, $list, $expr) = @_;
+
+ return [] if @$list == 0;
+#?? or return Number(0) ?
+
+ my $sum = 0;
+ $expr = XML::XQL::toList ($expr->solve ($context, $list));
+ for my $r (@{ $expr })
+ {
+ $sum += $r->xql_toString;
+ }
+ return new XML::XQL::Number ($sum, undef);
+}
+
+generateFunction ("round", "XML::XQL::xpath_round", "Number", 1, 1);
+generateFunction ("floor", "XML::XQL::xpath_floor", "Number", 1, 1);
+generateFunction ("ceiling", "XML::XQL::xpath_ceiling", "Number", 1, 1);
+
+generateFunction ("concat", "XML::XQL::xpath_concat", "Text", [2, -1], 1);
+generateFunction ("starts-with", "XML::XQL::xpath_starts_with", "Boolean", 2, 1);
+generateFunction ("ends-with", "XML::XQL::xpath_ends_with", "Boolean", 2, 1);
+generateFunction ("contains", "XML::XQL::xpath_contains", "Boolean", 2, 1);
+generateFunction ("substring-before", "XML::XQL::xpath_substring_before", "Text", 2, 1);
+generateFunction ("substring-after", "XML::XQL::xpath_substring_after", "Text", 2, 1);
+# Same as Perl substr() except index is 1-based
+generateFunction ("substring", "XML::XQL::xpath_substring", "Text", [2, 3], 1);
+generateFunction ("translate", "XML::XQL::xpath_translate", "Text", 3, 1);
+
+defineMethod ("string-length", \&XML::XQL::xpath_string_length, [0, 1], 1);
+defineMethod ("normalize-space", \&XML::XQL::xpath_normalize_space, [0, 1], 1);
+
+defineFunction ("sum", \&XML::XQL::xpath_sum, 1, 1);
+
+1; # module return code
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/Query.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,155 @@
+=head1 NAME
+
+XML::XQL::Query - Creates an XQL query evaluater from a XQL expression
+
+=head1 SYNOPSIS
+
+ use XML::XQL;
+
+ $parser = new XML::DOM::Parser;
+ $doc = $parser->parsefile ("file.xml");
+
+ # Return all elements with tagName='title' under the root element 'book'
+ $query = new XML::XQL::Query (Expr => "book/title");
+ @result = $query->solve ($doc);
+
+ # Or (to save some typing)
+ @result = XML::XQL::solve ("book/title", $doc);
+
+=head1 DESCRIPTION
+
+To perform XQL queries on an XML::DOM document (or, in the future, on other XML
+storage structures), you first have to create an XML::XQL::Query object and
+pass it a valid XQL query expression. You can then perform queries on one or
+more documents by calling the solve() method.
+
+=head1 XML::XQL::Query constructor
+
+Usage, e.g:
+
+ $query = new XML::XQL::Query(
+ Expr => "book/author",
+ Func => [ myfunc => \&my_func, # define 2 functions
+ myfunc2 => \&my_func2 ],
+ FuncArgCount => [ myfunc2 => [2, -1] ], # myfunc2 has 2 or more args
+ AllowedOutSideSubquery => [ myfunc => 1 ],
+ ConstFunc => [ myfunc2 => 1],
+ CompareOper => [ mycmp => \&mycmp ], # define comparison operator
+ q => "str"); # use str// as string delim
+
+=over 4
+
+=item Expr => STRING
+
+The query expression to be evaluated.
+
+=item NodeQuery => BOOLEAN
+
+If set to 1, the query is a I<Node Query> as opposed to a
+I<Full Query> (which is the default.)
+A node query is a query that is only capable of returning Nodes.
+A full query is capable of returning Node values and non-Node values.
+Non-Node values include XML Primitives, element type names, namespace URI's,
+concatenated text nodes, and node type names. The distinction is significant
+because node queries may appear as XSL match and select patterns, while full
+queries have use in other applications.
+The difference between the two forms of queries is trivial and exists only as
+constraints on the syntax of node queries.
+Node queries may contain nested full queries.
+
+=item Func => [ FUNCNAME => FUNCREF, ...]
+
+Defines one or more functions. FUNCNAME is the name as used in the query
+expression. FUNCREF can be either a function reference like \&my_func or
+an anonymous sub.
+See also: defineFunction
+
+=item Method => [ FUNCNAME => FUNCREF, ...]
+
+Defines one or more methods. FUNCNAME is the name as used in the query
+expression. FUNCREF can be either a function reference like \&my_func or
+an anonymous sub.
+See also: defineMethod
+
+=item FuncArgCount => [ FUNCNAME => ARGCOUNT, ...]
+
+Defines the number of arguments for one or more functions or methods.
+FUNCNAME is the name as used in the query expression.
+See also: defineFunction and defineMethod
+
+=item AllowedOutsideSubquery => [ FUNCNAME => BOOLEAN, ...]
+
+Defines whether the specified function or method is allowed outside
+subqueries. FUNCNAME is the name as used in the query expression.
+See also: defineFunction and defineMethod
+
+=item ConstFunc => [ FUNCNAME => BOOLEAN, ...]
+
+Defines whether the function (not method!) is a "constant" function.
+FUNCNAME is the name as used in the query expression.
+See L<Constant Function Invocations> for a definition of "constant"
+See also: defineFunction and defineMethod
+
+=item CompareOper => [ OPERNAME => FUNCREF, ...]
+
+Defines the comparison operator with the specified OPERNAME, e.g. if
+OPERNAME is "contains", you can use "$contains$" in the query.
+See also: defineComparisonOperators
+
+=item q => TOKEN
+
+Defines the q// token. See also: defineTokenQ
+
+=item qq => TOKEN
+
+Defines the qq// token. See also: defineTokenQQ
+
+=item Error => FUNCREF
+
+Defines the function that is called when errors occur during parsing the
+query expression. The default function prints an error message to STDERR.
+
+=item Debug => FLAGS
+
+Sets the debug level for the Yapp parser that parses the query expression.
+Default value is 0 (don't print anything). The maximum value is 0x17, which
+prints a lot of stuff. See the Parse::Yapp manpage for the meaning of the
+individual bits.
+
+=item Reserved hash keys
+
+Users may add their own (key, value) pairs to the Query constructor.
+Beware that the key 'Tree' is used internally.
+
+=back
+
+=head1 XML::XQL::Query methods
+
+=over 4
+
+=item solve (INPUT_LIST...)
+
+Note that solve takes a list of nodes which are assumed to be in document order
+and must belong to the same document. E.g:
+
+ $query = new XML::XQL::Query (Expr => "doc//book");
+ @result = $query->solve ($doc);
+ @result2 = $query->solve ($node1, $node2, $node3);
+
+=back
+
+The following functions are also available at the query level, i.e. when called
+on a Query object they only affect this Query and no others:
+
+ defineFunction, defineMethod, defineComparisonOperators,
+ defineTokenQ, defineTokenQQ
+
+See L<Global functions|XML::XQL/XML::XQL global functions> for details.
+Another way to define these features for a particular Query is by passing the
+appropriate values to the XML::XQL::Query constructor.
+
+=head1 SEE ALSO
+
+L<XML::XQL> for general information about the XML::XQL module
+
+L<XML::XQL::Tutorial> which describes the XQL syntax
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/Strict.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,12 @@
+package XML::XQL::Strict;
+
+BEGIN
+{
+ die "Can't 'use' or 'require' XML::XQL module before XML::XQL::Strict\nJust 'us' or 'require' XML::XQL::Strict instead" if ($XML::XQL::Included);
+
+ $XML::XQL::Restricted = 1;
+
+ require XML::XQL;
+};
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/XQL/Tutorial.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1357 @@
+=head1 NAME
+
+XML::XQL::Tutorial - Describes the XQL query syntax
+
+=head1 DESCRIPTION
+
+This document describes basic the features of the XML Query Language (XQL.)
+A proposal for the XML Query Language (XQL) specification was submitted
+to the XSL Working Group in September 1998.
+The spec can be found at L<http://www.w3.org/TandS/QL/QL98/pp/xql.html>.
+Since it is only a proposal at this point, things may change, but it is very
+likely that the final version will be close to the proposal.
+Most of this document was copied straight from the spec.
+
+See also the L<XML::XQL> man page.
+
+=head1 INTRODUCTION
+
+XQL (XML Query Language) provides a natural extension to the XSL pattern
+language. It builds upon the capabilities XSL provides for identifying classes
+of nodes, by adding Boolean logic, filters, indexing into collections of nodes,
+and more.
+
+XQL is designed specifically for XML documents.
+It is a general purpose query language, providing a single syntax
+that can be used for queries, addressing, and patterns.
+XQL is concise, simple, and powerful.
+
+XQL is designed to be used in many contexts. Although it is a superset of XSL
+patterns, it is also applicable to providing links to nodes, for searching
+repositories, and for many other applications.
+
+Note that the term XQL is a working term for the language described in this
+proposal. It is not their intent that this term be used permanently.
+Also, beware that another query language exists called XML-QL,
+which uses a syntax very similar to SQL.
+
+The L<XML::XQL> module has added functionality to the XQL spec, called I<XQL+>.
+To allow only XQL functionality as described in the spec, use the
+XML::XQL::Strict module. Note that the XQL spec makes the distinction between
+core XQL and XQL extensions. This implementation makes no distinction and
+the Strict module, therefore, implements everything described in the XQL spec.
+See the L<XML::XQL> man page for more information about the Strict module.
+This tutorial will clearly indicate when referring to XQL+.
+
+=head1 XQL Patterns
+
+This section describes the core XQL notation. These features should be part
+of every XQL implementation, and serve as the base level of functionality
+for its use in different technologies.
+
+The basic syntax for XQL mimics the URI directory navigation syntax, but
+instead of specifying navigation through a
+physical file structure, the navigation is through elements in the XML tree.
+
+For example, the following URI means find the foo.jpg file within the bar
+directory:
+
+ bar/foo.jpg
+
+Similarly, in XQL, the following means find the collection of fuz elements
+within baz elements:
+
+ baz/fuz
+
+Throughout this document you will find numerous samples. They refer to the data
+shown in the sample file at the end of this man page.
+
+=head1 Context
+
+A I<context> is the set of nodes against which a query operates.
+For the entire query, which is passed to the L<XML::XQL::Query>
+constructor through the I<Expr> option, the context is the list of input nodes
+that is passed to the query() method.
+
+XQL allows a query to select between using the current context as the input
+context and using the 'root context' as the input context.
+The 'root context' is a context containing only the root-most
+element of the document. When using XML::DOM, this is the Document object.
+
+By default, a query uses the current context. A query prefixed with '/'
+(forward slash) uses the root context. A query may
+optionally explicitly state that it is using the current context by using
+the './' (dot, forward slash) prefix. Both of these
+notations are analogous to the notations used to navigate directories in a file
+system.
+
+The './' prefix is only required in one situation. A query may use the '//'
+operator to indicate recursive descent. When
+this operator appears at the beginning of the query, the initial '/' causes the
+recursive decent to perform relative to the
+root of the document or repository. The prefix './/' allows a query to perform
+a recursive descent relative to the current context.
+
+=over 4
+
+=item Examples:
+
+Find all author elements within the current context. Since the period is really
+not used alone, this example forward-references other features:
+
+ ./author
+
+Note that this is equivalent to:
+
+ author
+
+Find the root element (bookstore) of this document:
+
+ /bookstore
+
+Find all author elements anywhere within the current document:
+
+ //author
+
+Find all books where the value of the style attribute on the book is equal to
+the value of the specialty attribute of the bookstore element at the root of
+the document:
+
+ book[/bookstore/@specialty = @style]
+
+=back
+
+=head1 Query Results
+
+The collection returned by an XQL expression preserves document order,
+hierarchy, and identity, to the extent that these are defined.
+That is, a collection of elements will always be returned in document order
+without repeats. Note that the spec states that the order of attributes within
+an element is undefined, but that this implementation does keep attributes
+in document order. See the L<XML::XQL> man page for more details regarding
+I<Document Order>.
+
+=head1 Collections - 'element' and '.'
+
+The collection of all elements with a certain tag name is expressed using the
+tag name itself. This can be qualified by showing that the elements are
+selected from the current context './', but the current context is assumed and
+often need not be noted explicitly.
+
+=over 4
+
+=item Examples:
+
+Find all first-name elements. These examples are equivalent:
+
+ ./first-name
+
+ first-name
+
+Find all unqualified book elements:
+
+ book
+
+Find all first.name elements:
+
+ first.name
+
+=back
+
+=head1 Selecting children and descendants - '/' and '//'
+
+The collection of elements of a certain type can be determined using the path
+operators ('/' or '//'). These operators take as their arguments a collection
+(left side) from which to query elements, and a collection indicating which
+elements to select (right side). The child operator ('/')selects from immediate
+children of the left-side collection, while the descendant operator ('//')
+selects from arbitrary descendants of the left-side collection.
+In effect, the '//' can be thought of as a substitute for one or more levels of
+hierarchy. Note that the path operators change the context as the
+query is performed. By stringing them together users can 'drill down' into the
+document.
+
+=over 4
+
+=item Examples:
+
+Find all first-name elements within an author element. Note that the author
+children of the current context are found, and then first-name children are
+found relative to the context of the author elements:
+
+ author/first-name
+
+Find all title elements, one or more levels deep in the bookstore
+(arbitrary descendants):
+
+ bookstore//title
+
+Note that this is different from the following query, which finds all title
+elements that are grandchildren of bookstore elements:
+
+ bookstore/*/title
+
+Find emph elements anywhere inside book excerpts, anywhere inside the bookstore:
+
+ bookstore//book/excerpt//emph
+
+Find all titles, one or more levels deep in the current context. Note that this
+situation is essentially the only one where
+the period notation is required:
+
+ .//title
+
+=back
+
+=head1 Collecting element children - '*'
+
+An element can be referenced without using its name by substituting the '*'
+collection. The '*' collection returns all
+elements that are children of the current context, regardless of their tag name.
+
+=over 4
+
+=item Examples:
+
+Find all element children of author elements:
+
+ author/*
+
+Find all last-names that are grand-children of books:
+
+ book/*/last-name
+
+Find the grandchildren elements of the current context:
+
+ */*
+
+Find all elements with specialty attributes. Note that this example uses
+subqueries, which are covered in Filters, and
+attributes, which are discussed in Finding an attribute:
+
+ *[@specialty]
+
+=back
+
+=head1 Finding an attribute - '@'
+
+Attribute names are preceded by the '@' symbol. XQL is designed to treat
+attributes and sub-elements impartially,
+and capabilities are equivalent between the two types wherever possible.
+
+Note: attributes cannot contain subelements. Thus, attributes cannot have path
+operators applied to them in a query.
+Such expressions will result in a syntax error.
+The XQL spec states that attributes are inherently unordered and indices
+cannot be applied to them, but this implementation allows it.
+
+=over 4
+
+=item Examples:
+
+Find the style attribute of the current element context:
+
+ @style
+
+Find the exchange attribute on price elements within the current context:
+
+ price/@exchange
+
+The following example is not valid:
+
+ price/@exchange/total
+
+Find all books with style attributes. Note that this example uses subqueries,
+which are covered in Filters:
+
+ book[@style]
+
+Find the style attribute for all book elements:
+
+ book/@style
+
+=back
+
+=head1 XQL Literals
+
+XQL query expressions may contain literal values (i.e. constants.)
+Numbers (integers and floats) are wrapped in XML::XQL::Number objects and
+strings in XML::XQL::Text objects. Booleans (as returned by true() and false())
+are wrapped in XML::XQL::Boolean objects.
+
+Strings must be enclosed in single or double quotes. Since XQL does not allow
+escaping of special characters, it's impossible to create a string with both
+a single and a double quote in it. To remedy this, XQL+ has added the q// and
+qq// string delimiters which behave just like they do in Perl.
+
+For Numbers, exponential notation is not allowed. Use the XQL+ function eval()
+to circumvent this problem. See L<XML::XQL> man page for details.
+
+The empty list or undef is represented by [] (i.e. reference to empty array)
+in this implementation.
+
+=over 4
+
+=item Example
+
+Integer Numbers:
+
+ 234
+ -456
+
+Floating point Numbers:
+
+ 1.23
+ -0.99
+
+Strings:
+
+ "some text with 'single' quotes"
+ 'text with "double" quotes'
+
+Not allowed:
+
+ 1.23E-4 (use eval("1.23E-4", "Number") in XQL+)
+
+ "can't use \"double \"quotes" (use q/can't use "double" quotes/ in XQL+)
+
+=back
+
+=head1 Grouping - '()'
+
+Parentheses can be used to group collection operators for clarity or where the
+normal precedence is inadequate to express an operation.
+
+=head1 Filters - '[]'
+
+Constraints and branching can be applied to any collection by adding a filter
+clause '[ ]' to the collection. The filter is analogous to the SQL WHERE clause
+with ANY semantics. The filter contains a query within it, called the
+subquery. The subquery evaluates to a Boolean, and is tested for each element
+in the collection. Any elements in the collection failing the subquery test are
+omitted from the result collection.
+
+For convenience, if a collection is placed within the filter, a Boolean TRUE
+is generated if the collection contains any members, and a FALSE is generated
+if the collection is empty. In essence, an expression such as author/degree
+implies a collection-to-Boolean conversion function like the following
+mythical 'there-exists-a' method.
+
+ author[.there-exists-a(degree)]
+
+Note that any number of filters can appear at a given level of an expression.
+Empty filters are not allowed.
+
+=over 4
+
+=item Examples:
+
+Find all books that contain at least one excerpt element:
+
+ book[excerpt]
+
+Find all titles of books that contain at least one excerpt element:
+
+ book[excerpt]/title
+
+Find all authors of books where the book contains at least one excerpt, and
+the author has at least one degree:
+
+ book[excerpt]/author[degree]
+
+Find all books that have authors with at least one degree:
+
+ book[author/degree]
+
+Find all books that have an excerpt and a title:
+
+ book[excerpt][title]
+
+=back
+
+=head2 Any and all semantics - '$any$' and '$all$'
+
+Users can explicitly indicate whether to use any or all semantics through
+the $any$ and $all$ keywords.
+
+$any$ flags that a condition will hold true if any item in a set meets that
+condition. $all$ means that all elements in a
+set must meet the condition for the condition to hold true.
+
+$any$ and $all$ are keywords that appear before a subquery expression within
+a filter.
+
+=over 4
+
+=item Examples:
+
+Find all author elements where one of the last names is Bob:
+
+ author[last-name = 'Bob']
+
+ author[$any$ last-name = 'Bob']
+
+Find all author elements where none of the last-name elements are Bob:
+
+ author[$all$ last-name != 'Bob']
+
+Find all author elements where the first last name is Bob:
+
+ author[last-name[0] = 'Bob']
+
+=back
+
+=head1 Indexing into a collection - '[]' and '$to$'
+
+XQL makes it easy to find a specific node within a set of nodes.
+Simply enclose the index ordinal within square brackets. The ordinal is 0 based.
+
+A range of elements can be returned. To do so, specify an expression rather
+than a single value inside of the subscript operator (square brackets).
+Such expressions can be a comma separated list of any of the following:
+
+ n Returns the nth element
+ -n Returns the element that is n-1 units from the last element.
+ E.g., -1 means the last element. -2 is the next to last element.
+ m $to$ n Returns elements m through n, inclusive
+
+=over 4
+
+=item Examples:
+
+Find the first author element:
+
+ author[0]
+
+Find the third author element that has a first-name:
+
+ author[first-name][2]
+
+Note that indices are relative to the parent. In other words, consider the
+following data:
+
+ <x>
+ <y/>
+ <y/>
+ </x>
+ <x>
+ <y/>
+ <y/>
+ </x>
+
+The following expression will return the first y from each of the x's:
+
+ x/y[0]
+
+The following will return the first y from the entire set of y's within x's:
+
+ (x/y)[0]
+
+The following will return the first y from the first x:
+
+ x[0]/y[0]
+
+Find the first and fourth author elements:
+
+ author[0,3]
+
+Find the first through fourth author elements:
+
+ author[0 $to$ 3]
+
+Find the first, the third through fifth, and the last author elements:
+
+ author[0, 2 $to$ 4, -1]
+
+Find the last author element:
+
+ author[-1]
+
+=back
+
+=head1 Boolean Expressions
+
+Boolean expressions can be used within subqueries. For example, one could use
+Boolean expressions to find all nodes of a particular value, or all nodes with
+nodes in particular ranges. Boolean expressions are of the form
+${op}$, where {op} may be any expression of the form {b|a} - that is, the
+operator takes lvalue and rvalue arguments and returns a Boolean result.
+
+Note that the XQL Extensions section defines additional Boolean operations.
+
+=head2 Boolean AND and OR - '$and$' and '$or$'
+
+$and$ and $or$ are used to perform Boolean ands and ors.
+
+The Boolean operators, in conjunction with grouping parentheses, can be used to
+build very sophisticated logical expressions.
+
+Note that spaces are not significant and can be omitted, or included for
+clarity as shown here.
+
+=over 4
+
+=item Examples:
+
+Find all author elements that contain at least one degree and one award.
+
+ author[degree $and$ award]
+
+Find all author elements that contain at least one degree or award and at
+least one publication.
+
+ author[(degree $or$ award) $and$ publication]
+
+=back
+
+=head2 Boolean NOT - '$not$'
+
+$not$ is a Boolean operator that negates the value of an expression within a
+subquery.
+
+=over 4
+
+=item Examples:
+
+Find all author elements that contain at least one degree element and that
+contain no publication elements.
+
+ author[degree $and$ $not$ publication]
+
+Find all author elements that contain publications elements but do not contain
+either degree elements or award elements.
+
+ author[$not$ (degree $or$ award) $and$ publication]
+
+=back
+
+=head1 Union and intersection - '$union$', '|' and '$intersect$'
+
+The $union$ operator (shortcut is '|') returns the combined set of values from
+the query on the left and the query on the right. Duplicates are filtered out.
+The resulting list is sorted in document order.
+
+Note: because this is a union, the set returned may include 0 or more elements
+of each element type in the list. To restrict the returned set to nodes that
+contain at least one of each of the elements in the list, use a filter, as
+discussed in Filters.
+
+The $intersect$ operator returns the set of elements in common between two sets.
+
+=over 4
+
+=item Examples:
+
+Find all first-names and last-names:
+
+ first-name $union$ last-name
+
+Find all books and magazines from a bookstore:
+
+ bookstore/(book | magazine)
+
+Find all books and all authors:
+
+ book $union$ book/author
+
+Find the first-names, last-names, or degrees from authors within either books
+or magazines:
+
+ (book $union$ magazine)/author/(first-name $union$ last-name $union$ degree)
+
+Find all books with author/first-name equal to 'Bob' and all magazines with
+price less than 10:
+
+ book[author/first-name = 'Bob'] $union$ magazine[price $lt$ 10]
+
+=back
+
+=head1 Equivalence - '$eq$', '=', '$ne$' and '!='
+
+The '=' sign is used for equality; '!=' for inequality. Alternatively, $eq$ and
+ $ne$ can be used for equality and inequality.
+
+Single or double quotes can be used for string delimiters in expressions.
+This makes it easier to construct and pass XQL from within scripting languages.
+
+For comparing values of elements, the value() method is implied. That is,
+last-name < 'foo' really means last-name!value() < 'foo'.
+
+Note that filters are always with respect to a context. That is, the expression
+book[author] means for every book element that is found, see if it has an
+author subelement. Likewise, book[author = 'Bob'] means for
+every book element that is found, see if it has a subelement named author
+whose value is 'Bob'. One can examine the value of the context as well, by
+using the . (period). For example, book[. = 'Trenton'] means for every
+book that is found, see if its value is 'Trenton'.
+
+=over 4
+
+=item Examples:
+
+Find all author elements whose last name is Bob:
+
+ author[last-name = 'Bob']
+
+ author[last-name $eq$ 'Bob']
+
+Find all authors where the from attribute is not equal to 'Harvard':
+
+ degree[@from != 'Harvard']
+
+ degree[@from $ne$ 'Harvard']
+
+Find all authors where the last-name is the same as the /guest/last-name element:
+
+ author[last-name = /guest/last-name]
+
+Find all authors whose text is 'Matthew Bob':
+
+ author[. = 'Matthew Bob']
+
+ author = 'Matthew Bob'
+
+=back
+
+=head2 Comparison - '<', '<=', '>', '>=', '$lt', '$ilt$' etc.
+
+A set of binary comparison operators is available for comparing numbers and
+strings and returning Boolean results.
+$lt$, $le$, $gt$, $ge$ are used for less than, less than or equal, greater
+than, or greater than or equal. These same
+operators are also available in a case insensitive form: $ieq$, $ine$, $ilt$,
+$ile$, $igt$, $ige$.
+
+<, <=, > and >= are allowed short cuts for $lt$, $le$, $gt$ and $ge$.
+
+=over 4
+
+=item Examples:
+
+Find all author elements whose last name is bob and whose price is > 50
+
+ author[last-name = 'Bob' $and$ price $gt$ 50]
+
+Find all authors where the from attribute is not equal to 'Harvard':
+
+ degree[@from != 'Harvard']
+
+Find all authors whose last name begins with 'M' or greater:
+
+ author[last-name $ge$ 'M']
+
+Find all authors whose last name begins with 'M', 'm' or greater:
+
+ author[last-name $ige$ 'M']
+
+Find the first three books:
+
+ book[index() $le$ 2]
+
+Find all authors who have more than 10 publications:
+
+ author[publications!count() $gt$ 10]
+
+=back
+
+=head2 XQL+ Match operators - '$match$', '$no_match$', '=~' and '!~'
+
+XQL+ defines additional operators for pattern matching. The $match$ operator
+(shortcut is '=~') returns TRUE if the lvalue matches the pattern described by
+the rvalue. The $no_match$ operator (shortcut is '!~') returns FALSE if they
+match. Both lvalue and rvalue are first cast to strings.
+
+The rvalue string should have the syntax of a Perl rvalue, that is the delimiters
+should be included and modifiers are allowed. When using delimiters other than
+slashes '/', the 'm' should be included. The rvalue should be a string, so don't
+forget the quotes! (Or use the q// or qq// delimiters in XQL+, see L<XML::XQL>
+man page.)
+
+Note that you can't use the Perl substitution operator s/// here. Try using the
+XQL+ subst() function instead.
+
+=over 4
+
+=item Examples:
+
+Find all authors whose name contains bob or Bob:
+
+ author[first-name =~ '/[Bb]ob/']
+
+Find all book titles that don't contain 'Trenton' (case-insensitive):
+
+ book[title !~ 'm!trenton!i']
+
+=back
+
+=head2 Oher XQL+ comparison operators - '$isa', '$can$'
+
+See the L<XML::XQL> man page for other operators available in XQL+.
+
+=head2 Comparisons and vectors
+
+The lvalue of a comparison can be a vector or a scalar. The rvalue of a
+comparison must be a scalar or a value that can be cast at runtime to a scalar.
+
+If the lvalue of a comparison is a set, then any (exists) semantics are used
+for the comparison operators. That is, the result of a comparison is true if
+any item in the set meets the condition.
+
+=head2 Comparisons and literals
+
+The spec states that the lvalue of an expression cannot be a literal.
+That is, I<'1' = a> is not allowed. This implementation allows it, but it's not
+clear how useful that is.
+
+=head2 Casting of literals during comparison
+
+Elements, attributes and other XML node types are casted to strings (Text)
+by applying the value() method. The value() method calls the text() method by
+default, but this behavior can be altered by the user, so the value() method
+may return other XQL data types.
+
+When two values are compared, they are first casted to the same type.
+See the L<XML::XQL> man page for details on casting.
+
+Note that the XQL spec is not very clear on how values should be casted for
+comparison. Discussions with the authors of the XQL spec revealed that there
+was some disagreement and their implementations differed on this point.
+This implementation is closest to that of Joe Lapp from webMethods, Inc.
+
+=head1 Methods - 'method()' or 'query!method()'
+
+XQL makes a distinction between functions and methods.
+See the L<XML::XQL> man page for details.
+
+XQL provides methods for advanced manipulation of collections. These methods
+provide specialized collections of nodes (see Collection methods), as well as
+information about sets and nodes.
+
+Methods are of the form I<method(arglist)>
+
+Consider the query book[author]. It will find all books that have authors.
+Formally, we call the book corresponding to a particular author the reference
+node for that author. That is, every author element that is examined is an author
+for one of the book elements. (See the Annotated XQL BNF Appendix for a much
+more thorough definition of reference node and other terms. See also the
+XML::XQL man page.) Methods always apply to the reference node.
+
+For example, the text() method returns the text contained within a node,
+minus any structure. (That is, it is the concatenation of all text nodes
+contained with an element and its descendants.) The following expression will
+return all authors named 'Bob':
+
+ author[text() = 'Bob']
+
+The following will return all authors containing a first-name child whose
+text is 'Bob':
+
+ author[first-name!text() = 'Bob']
+
+The following will return all authors containing a child named Bob:
+
+ author[*!text() = 'Bob']
+
+Method names are case sensitive.
+See the L<XML::XQL> man page on how to define your own methods and functions.
+
+=head2 Information methods
+
+The following methods provide information about nodes in a collection.
+These methods return strings or numbers,
+and may be used in conjunction with comparison operators within subqueries.
+
+=over 4
+
+=item Method: text()
+
+The text() method concatenates text of the descendents of a node,
+normalizing white space along the way. White space will be preserved for a node
+if the node has the xml:space attribute set to 'preserve', or if the
+nearest ancestor with the xml:space attribute has the attribute set to
+'preserve'. When white space is normalized, it is normalized across the
+entire string. Spaces are used to separate the text between nodes.
+When entity references are used in a document, spacing is not inserted
+around the entity refs when they are expanded.
+
+In this implementation, the method may receive an optional parameter
+to indicate whether the text() of Element nodes should include the text() of
+its Element descendants. See L<XML::XQL> man page for details.
+
+Examples:
+
+Find the authors whose last name is 'Bob':
+
+ author[last-name!text() = 'Bob']
+
+Note this is equivalent to:
+
+ author[last-name = 'Bob']
+
+Find the authors with value 'Matthew Bob':
+
+ author[text() = 'Matthew Bob']
+
+ author[. = 'Matthew Bob']
+
+ author = 'Matthew Bob'
+
+=item Method: rawText()
+
+The rawText() method is similar to the text() method, but it does not
+normalize whitespace.
+
+In this implementation, the method may receive an optional parameter
+to indicate whether the rawText() of Element nodes should include the
+rawText() of its Element descendants. See L<XML::XQL> man page for details.
+
+=item Method: value()
+
+Returns a type cast version of the value of a node. If no data type is
+provided, returns the same as text().
+
+=over 4
+
+=item Shortcuts
+
+For the purposes of comparison, value( )is implied if omitted.
+In other words, when two items are compared, the comparison is between
+the value of the two items. Remember that in absence of type information,
+value() returns text().
+
+The following examples are equivalent:
+
+ author[last-name!value() = 'Bob' $and$ first-name!value() = 'Joe']
+
+ author[last-name = 'Bob' $and$ first-name = 'Joe']
+
+ price[@intl!value() = 'canada']
+
+ price[@intl = 'canada']
+
+=back
+
+=item Method: nodeType()
+
+Returns a number to indicate the type of the node. The values were based
+on the node type values in the DOM:
+
+ element 1
+ attribute 2
+ text 3
+ entity 6 (not in XQL spec)
+ PI 7
+ comment 8
+ document 9
+ doc. fragment 10 (not in XQL spec)
+ notation 11 (not in XQL spec)
+
+Note that in XQL, CDATASection nodes and EntityReference nodes also return 3,
+whereas in the DOM CDATASection returns 4 and EntityReference returns 5.
+Use the XQL+ method DOM_nodeType() to get DOM node type values.
+See the L<XML::DOM> man page for node type values of nodes not mentioned here.
+
+=item Method: nodeTypeString
+
+Returns the name of the node type in lowercase or an empty string. The
+following node types are currently supported 1 (element), 2 (attribute),
+3 (text), 7 (processing_instruction), 8 (comment), 9 (document)
+
+=item Method: nodeName()
+
+Returns the tag name for Element nodes and the attribute name of attributes.
+
+=back
+
+=head2 Collection index methods
+
+=over 4
+
+=item Method: index()
+
+Returns the index of the value within the search context (i.e. with the input
+list of the subquery.) This is not necessarily the same as the index of a
+node within its parent node. Note that the XQL spec doesn't explain it well.
+
+=over 4
+
+=item Examples:
+
+Find the first 3 degrees:
+
+ degree[index() $lt$ 3]
+
+Note that it skips over other nodes that may exist between the degree elements.
+
+Consider the following data:
+
+ <x>
+ <y/>
+ <y/>
+ </x>
+ <x>
+ <y/>
+ <y/>
+ </x>
+
+The following expression will return the first y from each x:
+
+ x/y[index() = 0]
+
+This could also be accomplished by (see Indexing into a Collection):
+
+ x/y[0]
+
+=back
+
+=item Method: end()
+
+The end() method returns true for the last element in the search context.
+Again, the XQL spec does not explain it well.
+
+=over 4
+
+=item Examples:
+
+Find the last book:
+
+ book[end()]
+
+Find the last author for each book:
+
+ book/author[end()]
+
+Find the last author from the entire set of authors of books:
+
+ (book/author)[end()]
+
+=back
+
+=back
+
+=head2 Aggregate methods
+
+=over 4
+
+=item Method: count( [QUERY] )
+
+Returns the number of values inside the search context.
+In XQL+, when the optional QUERY parameter is supplied, it returns the number of
+values returned by the QUERY.
+
+=back
+
+=head2 Namespace methods
+
+The following methods can be applied to a node to return namespace information.
+
+=over 4
+
+=item Method: baseName()
+
+Returns the local name portion of the node, excluding the prefix.
+Local names are defined only for element nodes and attribute nodes.
+The local name of an element node is the local
+portion of the node's element type name. The local name of an attribute node is
+the local portion of the node's attribute name. If a local name is not defined
+for the reference node, the method evaluates to the empty set.
+
+=item Method: namespace()
+
+Returns the URI for the namespace of the node.
+Namespace URIs are defined only for element nodes and attribute nodes.
+The namespace URI of an element node is the namespace URI associated with the
+node's element type name. The namespace URI of an attribute node is
+the namespace URI associated with the node's attribute name. If a namespace
+URI is not defined for the reference node, the method evaluates to the
+empty set.
+
+=item Method: prefix()
+
+Returns the prefix for the node. Namespace prefixes are defined only for
+element nodes and attribute nodes. The namespace prefix of an element
+node is the shortname for the namespace of the node's element type name.
+The namespace prefix of an attribute
+node is the shortname for the namespace of the node's attribute name.
+If a namespace prefix is not defined
+for the reference node, the method evaluates to the empty set.
+
+The spec states: A node's namespace prefix may be defined
+within the query expression, within the document under query, or within both
+the query expression and the document under query. If it is defined in both
+places the prefixes may not agree. In this case, the prefix assigned by
+the query expression takes precedence.
+In this implementation you cannot define the namespace for a query, so this
+can never happen.
+
+=over 4
+
+=item Examples:
+
+Find all unqualified book elements. Note that this does not return my:book
+elements:
+
+ book
+
+Find all book elements with the prefix 'my'. Note that this query does not
+return unqualified book elements:
+
+ my:book
+
+Find all book elements with a 'my' prefix that have an author subelement:
+
+ my:book[author]
+
+Find all book elements with a 'my' prefix that have an author subelement with a
+my prefix:
+
+ my:book[my:author]
+
+Find all elements with a prefix of 'my':
+
+ my:*
+
+Find all book elements from any namespace:
+
+ *:book
+
+Find any element from any namespace:
+
+ *
+
+Find the style attribute with a 'my' prefix within a book element:
+
+ book/@my:style
+
+=back
+
+All attributes of an element can be returned using @*.
+This is potentially useful for applications that treat attributes
+as fields in a record.
+
+=over 4
+
+=item Examples:
+
+Find all attributes of the current element context:
+
+ @*
+
+Find style attributes from any namespace:
+
+ @*:style
+
+Find all attributes from the 'my' namespace, including unqualified attributes on
+elements from the 'my' namespace:
+
+ @my:*
+
+=back
+
+=back
+
+=head1 Functions
+
+This section defines the functions of XQL. The spec states that:
+XQL defines two kinds of functions:
+collection functions and pure functions. Collection functions use the search
+context of the Invocation instance, while pure functions ignore the
+search context, except to evaluate the function's parameters. A collection
+function evaluates to a subset of the search context, and a pure function
+evaluates to either a constant value or to a value that depends only on the
+function's parameters.
+
+Don't worry if you don't get it. Just use them!
+
+=head2 Collection functions
+
+The collection functions provide access to the various types of nodes in a
+document. Any of these collections can be constrained and indexed.
+The collections return the set of children of the reference node meeting the
+particular restriction.
+
+=over 4
+
+=item Function: textNode()
+
+The collection of text nodes.
+
+=item Function: comment()
+
+The collection of comment nodes.
+
+=item Function: pi()
+
+The collection of processing instruction nodes.
+
+=item Function: element( [NAME] )
+
+The collection of all element nodes. If the optional text
+parameter is provided, it only returns element children
+matching that particular name.
+
+=item Function: attribute( [NAME] )
+
+The collection of all attribute nodes. If the optional text
+parameter is provided, it only returns attributes matching that
+particular name.
+
+=item Function: node()
+
+The collection of all non-attribute nodes.
+
+=over 4
+
+=item Examples:
+
+Find the second text node in each p element in the current context:
+
+ p/textNode()[1]
+
+Find the second comment anywhere in the document. See Context for details on
+setting the context to the document root:
+
+ //comment()[1]
+
+=back
+
+=back
+
+=head2 Other XQL Functions
+
+=over 4
+
+=item Function: ancestor(QUERY)
+
+Finds the nearest ancestor matching the provided query. It returns either a
+single element result or an empty set [].
+Note that this node is never the reference node itself.
+
+=over 4
+
+=item Examples:
+
+Find the nearest book ancestor of the current element:
+
+ ancestor(book)
+
+Find the nearest ancestor author element that is contained in a book element:
+
+ ancestor(book/author)
+
+=back
+
+=item Function: id(NAME)
+
+Pure function that evaluates to a set. The set contains an element node that
+has an 'id' attribute whose value is identical to the string that the Text
+parameter quotes. The element node may appear anywhere within the
+document under query. If more than one element node meets these criteria,
+the function evaluates to a set that contains the first node appearing in a
+document ordering of the nodes.
+
+=item Function: true() and false()
+
+Pure functions that each evaluate to a Boolean. "true()" evaluates to 'true',
+and "false()" evaluates to 'false'. These functions are useful in expressions
+that are constructed using entity references or variable substitution, since
+they may replace an expression found in an instance of Subquery without
+violating the syntax required by the instance of Subquery.
+They return an object of type XML::XQL::Boolean.
+
+=item Function: date(QUERY)
+
+"date" is a pure function that typecasts the value of its parameter to a set of
+dates. If the parameter matches a single string, the value of the function is a
+set containing a single date. If the parameter matches a QUERY, the value of
+the function is a set of dates, where the set contains one date for each member
+of the set to which the parameter evaluates.
+
+XQL does not define the representation of the date value, nor does it
+define how the function translates parameter values into dates.
+This implementation uses the Date::Manip module to parse dates, which accepts
+almost any imaginable format. See L<XML::XQL> to plug in your own
+Date implementation.
+
+Include the L<XML::XQL::Date> package to add the XQL date type and the date()
+function, like this:
+
+ use XML::XQL::Date;
+
+=item Perl builtin functions and other XQL+ functions
+
+XQL+ provides XQL function wrappers for most Perl builtin functions.
+It also provides other cool functions like subst(), map(), and eval() that
+allow you to modify documents and embed perl code.
+If this is still not enough, you can add your own function and methods.
+See L<XML::XQL> man page for details.
+
+=back
+
+=head1 Sequence Operators - ';' and ';;'
+
+The whitepaper 'The Design of XQL' by Jonathan Robie, which can be found
+at L<http://www.texcel.no/whitepapers/xql-design.html> describes the sequence
+operators ';;' (precedes) and ';' (immediately precedes.) Although these
+operators are not included in the XQL spec, I thought I'd add them anyway.
+
+=head2 Immediately Precedes - ';'
+
+=over 4
+
+=item Example:
+
+With the following input:
+
+ <TABLE>
+ <ROWS>
+ <TR>
+ <TD>Shady Grove</TD>
+ <TD>Aeolian</TD>
+ </TR>
+ <TR>
+ <TD>Over the River, Charlie</TD>
+ <TD>Dorian</TD>
+ </TR>
+ </ROWS>
+ </TABLE>
+
+Find the TD node that contains "Shady Grove" and the TD node that immediately
+follows it:
+
+ //(TD="Shady Grove" ; TD)
+
+=back
+
+Note that in XML::DOM there is actually a text node with whitespace between
+the two TD nodes, but those are ignored by this operator, unless the text node
+has 'xml:space' set to 'preserve'. See ??? for details.
+
+=head2 Precedes - ';;'
+
+=over 4
+
+=item Example:
+
+With the following input (from Hamlet):
+
+ <SPEECH>
+ <SPEAKER>MARCELLUS</SPEAKER>
+ <LINE>Tis gone!</LINE>
+ <STAGEDIR>Exit Ghost</STAGEDIR>
+ <LINE>We do it wrong, being so majestical,</LINE>
+ <LINE>To offer it the show of violence;</LINE>
+ <LINE>For it is, as the air, invulnerable,</LINE>
+ <LINE>And our vain blows malicious mockery.</LINE>
+ </SPEECH>
+
+Return the STAGEDIR and all the LINEs that follow it:
+
+ SPEECH//( STAGEDIR ;; LINE )
+
+Suppose an actor playing the ghost wants to know when to exit; that is, he
+wants to know who says what line just before
+he is supposed to exit. The line immediately precedes the stagedir, but the
+speaker may occur at any time before the line.
+In this query, we will use the "precedes" operator (";;") to identify a speaker
+that precedes the line somewhere within a
+speech. Our ghost can find the required information with the following query,
+which selects the speaker, the line, and the stagedir:
+
+ SPEECH//( SPEAKER ;; LINE ; STAGEDIR="Exit Ghost")
+
+=back
+
+=head1 Operator Precedence
+
+The following table lists operators in precedence order, highest precedence
+first, where operators of a given row have the same precedence.
+The table also lists the associated productions:
+
+ Production Operator(s)
+ ---------- -----------
+ Grouping ( )
+ Filter [ ]
+ Subscript [ ]
+ Bang !
+ Path / //
+ Match $match$ $no_match$ =~ !~ (XQL+ only)
+ Comparison = != < <= > >= $eq$ $ne$ $lt$ $le$ $gt$
+ $ge$ $ieq$ $ine$ $ilt$ $ile$ $igt$ $ige$
+ Intersection $intersect$
+ Union $union$ |
+ Negation $not$
+ Conjunction $and$
+ Disjunction $or$
+ Sequence ; ;;
+
+=head1 Sample XML Document - bookstore.xml
+
+This file is also stored in samples/bookstore.xml that comes with the
+XML::XQL distribution.
+
+ <?xml version='1.0'?>
+ <!-- This file represents a fragment of a book store inventory database -->
+ <bookstore specialty='novel'>
+ <book style='autobiography'>
+ <title>Seven Years in Trenton</title>
+ <author>
+ <first-name>Joe</first-name>
+ <last-name>Bob</last-name>
+ <award>Trenton Literary Review Honorable Mention</award>
+ </author>
+ <price>12</price>
+ </book>
+ <book style='textbook'>
+ <title>History of Trenton</title>
+ <author>
+ <first-name>Mary</first-name>
+ <last-name>Bob</last-name>
+ <publication>
+ Selected Short Stories of
+ <first-name>Mary</first-name> <last-name>Bob</last-name>
+ </publication>
+ </author>
+ <price>55</price>
+ </book>
+ <magazine style='glossy' frequency='monthly'>
+ <title>Tracking Trenton</title>
+ <price>2.50</price>
+ <subscription price='24' per='year'/>
+ </magazine>
+ <book style='novel' id='myfave'>
+ <title>Trenton Today, Trenton Tomorrow</title>
+ <author>
+ <first-name>Toni</first-name>
+ <last-name>Bob</last-name>
+ <degree from='Trenton U'>B.A.</degree>
+ <degree from='Harvard'>Ph.D.</degree>
+ <award>Pulizer</award>
+ <publication>Still in Trenton</publication>
+ <publication>Trenton Forever</publication>
+ </author>
+ <price intl='canada' exchange='0.7'>6.50</price>
+ <excerpt>
+ <p>It was a dark and stormy night.</p>
+ <p>But then all nights in Trenton seem dark and
+ stormy to someone who has gone through what
+ <emph>I</emph> have.</p>
+ <definition-list>
+ <term>Trenton</term>
+ <definition>misery</definition>
+ </definition-list>
+ </excerpt>
+ </book>
+ <my:book style='leather' price='29.50' xmlns:my='http://www.placeholder-name-here.com/schema/'>
+ <my:title>Who's Who in Trenton</my:title>
+ <my:author>Robert Bob</my:author>
+ </my:book>
+ </bookstore>
+
+=head1 SEE ALSO
+
+The Japanese version of this document can be found on-line at
+L<http://member.nifty.ne.jp/hippo2000/perltips/xml/xql/tutorial.htm>
+
+L<XML::XQL>, L<XML::XQL::Date>, L<XML::XQL::Query> and L<XML::XQL::DOM>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/XML/perllocal.pod Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,22 @@
+=head2 Fri Apr 23 19:59:32 2004: C<Module> L<XML::XPath|XML::XPath>
+
+=over 4
+
+=item *
+
+C<installed into: F:\perforce\build\build_sys\personal\project\pr97\os\buildtools\bldsystemtools\buildsystemtools\lib\XML>
+
+=item *
+
+C<LINKTYPE: dynamic>
+
+=item *
+
+C<VERSION: 1.13>
+
+=item *
+
+C<EXE_FILES: examples/xpath>
+
+=back
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/freezethaw/FreezeThaw.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,857 @@
+=head1 NAME
+
+FreezeThaw - converting Perl structures to strings and back.
+
+=head1 SYNOPSIS
+
+ use FreezeThaw qw(freeze thaw cmpStr safeFreeze cmpStrHard);
+ $string = freeze $data1, $data2, $data3;
+ ...
+ ($olddata1, $olddata2, $olddata3) = thaw $string;
+ if (cmpStr($olddata2,$data2) == 0) {print "OK!"}
+
+=head1 DESCRIPTION
+
+Converts data to/from stringified form, appropriate for
+saving-to/reading-from permanent storage.
+
+Deals with objects, circular lists, repeated appearence of the same
+refence. Does not deal with overloaded I<stringify> operator yet.
+
+=head1 EXPORT
+
+=over 12
+
+=item Default
+
+None.
+
+=item Exportable
+
+C<freeze thaw cmpStr cmpStrHard safeFreeze>.
+
+=back
+
+=head1 User API
+
+=over 12
+
+=item C<cmpStr>
+
+analogue of C<cmp> for data. Takes two arguments and compares them as
+separate entities.
+
+=item C<cmpStrHard>
+
+analogue of C<cmp> for data. Takes two arguments and compares them
+considered as a group.
+
+=item C<freeze>
+
+returns a string that encupsulates its arguments (considered as a
+group). C<thaw>ing this string leads to a fatal error if arguments to
+C<freeze> contained references to C<GLOB>s and C<CODE>s.
+
+=item C<safeFreeze>
+
+returns a string that encupsulates its arguments (considered as a
+group). The result is C<thaw>able in the same process. C<thaw>ing the
+result in a different process should result in a fatal error if
+arguments to C<safeFreeze> contained references to C<GLOB>s and
+C<CODE>s.
+
+=item C<thaw>
+
+takes one string argument and returns an array. The elements of the
+array are "equivalent" to arguments of the C<freeze> command that
+created the string. Can result in a fatal error (see above).
+
+=back
+
+=head1 Developer API
+
+C<FreezeThaw> C<freeze>s and C<thaw>s data blessed in some package by
+calling methods C<Freeze> and C<Thaw> in the package. The fallback
+methods are provided by the C<FreezeThaw> itself. The fallback
+C<Freeze> freezes the "content" of blessed object (from Perl point of
+view). The fallback C<Thaw> blesses the C<thaw>ed data back into the package.
+
+So the package needs to define its own methods only if the fallback
+methods will fail (for example, for a lot of data the "content" of an
+object is an address of some B<C> data). The methods are called like
+
+ $newcooky = $obj->Freeze($cooky);
+ $obj = Package->Thaw($content,$cooky);
+
+To save and restore the data the following method are applicable:
+
+ $cooky->FreezeScalar($data,$ignorePackage,$noduplicate);
+
+during Freeze()ing, and
+
+ $data = $cooky->ThawScalar;
+
+Two optional arguments $ignorePackage and $noduplicate regulate
+whether the freezing should not call the methods even if $data is a
+reference to a blessed object, and whether the data should not be
+marked as seen already even if it was seen before. The default methods
+
+ sub UNIVERSAL::Freeze {
+ my ($obj, $cooky) = (shift, shift);
+ $cooky->FreezeScalar($obj,1,1);
+ }
+
+ sub UNIVERSAL::Thaw {
+ my ($package, $cooky) = (shift, shift);
+ my $obj = $cooky->ThawScalar;
+ bless $obj, $package;
+ }
+
+call the C<FreezeScalar> method of the $cooky since the freezing
+engine will see the data the second time during this call. Indeed, it
+is the freezing engine who calls UNIVERSAL::Freeze(), and it calls it
+because it needs to freeze $obj. The above call to
+$cooky->FreezeScalar() handles the same data back to engine, but
+because flags are different, the code does not cycle.
+
+Freezing and thawing $cooky also allows the following additional methods:
+
+ $cooky->isSafe;
+
+to find out whether the current freeze was initiated by C<freeze> or
+C<safeFreeze> command. Analogous method for thaw $cooky returns
+whether the current thaw operation is considered safe (i.e., either
+does not contain cached elsewhere data, or comes from the same
+application). You can use
+
+ $cooky->makeSafe;
+
+to prohibit cached data for the duration of the rest of freezing or
+thawing of current object.
+
+Two methods
+
+ $value = $cooky->repeatedOK;
+ $cooky->noRepeated; # Now repeated are prohibited
+
+allow to find out/change the current setting for allowing repeated
+references.
+
+If you want to flush the cache of saved objects you can use
+
+ FreezeThaw->flushCache;
+
+this can invalidate some frozen string, so that thawing them will
+result in fatal error.
+
+=head2 Instantiating
+
+Sometimes, when an object from a package is recreated in presense of
+repeated references, it is not safe to recreate the internal structure
+of an object in one step. In such a situation recreation of an object
+is carried out in two steps: in the first the object is C<allocate>d,
+in the second it is C<instantiate>d.
+
+The restriction is that during the I<allocation> step you cannot use any
+reference to any Perl object that can be referenced from any other
+place. This restriction is applied since that object may not exist yet.
+
+Correspondingly, during I<instantiation> step the previosly I<allocated>
+object should be C<filled>, i.e., it can be changed in any way such
+that the references to this object remain valid.
+
+The methods are called like this:
+
+ $pre_object_ref = Package->Allocate($pre_pre_object_ref);
+ # Returns reference
+ Package->Instantiate($pre_object_ref,$cooky);
+ # Converts into reference to blessed object
+
+The reverse operations are
+
+ $object_ref->FreezeEmpty($cooky);
+ $object_ref->FreezeInstance($cooky);
+
+during these calls object can C<freezeScalar> some information (in a
+usual way) that will be used during C<Allocate> and C<Instantiate>
+calls (via C<thawScalar>). Note that the return value of
+C<FreezeEmpty> is cached during the phase of creation of uninialized
+objects. This B<must> be used like this: the return value is the
+reference to the created object, so it is not destructed until other
+objects are created, thus the frozen values of the different objects
+will not share the same references. Example of bad result:
+
+ $o1->FreezeEmpty($cooky)
+
+freezes C<{}>, and C<$o2-E<gt>FreezeEmpty($cooky)> makes the same. Now
+nobody guaranties that that these two copies of C<{}> are different,
+unless a reference to the first one is preserved during the call to
+C<$o2-E<gt>FreezeEmpty($cooky)>. If C<$o1-E<gt>FreezeEmpty($cooky)>
+returns the value of C<{}> it uses, it will be preserved by the
+engine.
+
+The helper function C<FreezeThaw::copyContents> is provided for
+simplification of instantiation. The syntax is
+
+ FreezeThaw::copyContents $to, $from;
+
+The function copies contents the object $from point to into what the
+object $to points to (including package for blessed references). Both
+arguments should be references.
+
+The default methods are provided. They do the following:
+
+=over 12
+
+=item C<FreezeEmpty>
+
+Freezes an I<empty> object of underlying type.
+
+=item C<FreezeInstance>
+
+Calls C<Freeze>.
+
+=item C<Allocate>
+
+Thaws what was frozen by C<FreezeEmpty>.
+
+=item C<Instantiate>
+
+Thaws what was frozen by C<FreezeInstance>, uses C<copyContents> to
+transfer this to the $pre_object.
+
+=back
+
+=head1 BUGS and LIMITATIONS
+
+A lot of objects are blessed in some obscure packages by XSUB
+typemaps. It is not clear how to (automatically) prevent the
+C<UNIVERSAL> methods to be called for objects in these packages.
+
+The objects which can survive freeze()/thaw() cycle must also survive a
+change of a "member" to an equal member. Say, after
+
+ $a = [a => 3];
+ $a->{b} = \ $a->{a};
+
+$a satisfies
+
+ $a->{b} == \ $a->{a}
+
+This property will be broken by freeze()/thaw(), but it is also broken by
+
+ $a->{a} = delete $a->{a};
+
+=cut
+
+require 5.002; # defined ref stuff...
+
+# Different line noise chars:
+#
+# $567| next 567 chars form a scalar
+#
+# @34| next 34 scalars form an array
+#
+# %34| next 34 scalars form a hash
+#
+# ? next scalar is a safe-stamp at beginning
+#
+# ? next scalar is a stringified data
+#
+# ! repeated array follows (after a scalar denoting array $#),
+# (possibly?) followed by instantiation array. At beginning
+#
+# <45| ordinal of element in repeated array
+#
+# * stringified glob follows
+#
+# & stringified coderef follows
+#
+# \\ stringified defererenced data follows
+#
+# / stringified REx follows
+#
+# > stringified package name follows, then frozen data
+#
+# { stringified package name follows, then allocation data
+#
+# } stringified package name follows, then instantiation data
+#
+# _ frozen form of undef
+
+
+package FreezeThaw;
+
+use Exporter;
+
+@ISA = qw(Exporter);
+$VERSION = '0.43';
+@EXPORT_OK = qw(freeze thaw cmpStr cmpStrHard safeFreeze);
+
+use strict;
+use Carp;
+
+my $lock = (reverse time) ^ $$ ^ \&freezeString; # To distingush processes
+
+use vars qw( @multiple
+ %seen_packages
+ $seen_packages
+ %seen_packages
+ %count
+ %address
+ $string
+ $unsafe
+ $noCache
+ $cooky
+ $secondpass
+ ), # Localized in freeze()
+ qw( $norepeated ), # Localized in freezeScalar()
+ qw( $uninitOK ), # Localized in thawScalar()
+ qw( @uninit ), # Localized in thaw()
+ qw($safe); # Localized in safeFreeze()
+my (%saved);
+
+my %Empty = ( ARRAY => sub {[]}, HASH => sub {{}},
+ SCALAR => sub {my $undef; \$undef},
+ REF => sub {my $undef; \$undef},
+ CODE => 1, # 1 means atomic
+ GLOB => 1,
+ Regexp => 0,
+ );
+
+
+sub flushCache {$lock ^= rand; undef %saved;}
+
+sub getref ($) {
+ my $ref = ref $_[0];
+ return $ref if not $ref or defined $Empty{$ref}; # Optimization _and_ Regexp
+ my $str;
+ if (defined &overload::StrVal) {
+ $str = overload::StrVal($_[0]);
+ } else {
+ $str = "$_[0]";
+ }
+ $ref = $1 if $str =~ /=(\w+)/;
+ $ref;
+}
+
+sub freezeString {$string .= "\$" . length($_[0]) . '|' . $_[0]}
+
+sub freezeNumber {$string .= $_[0] . '|'}
+
+sub freezeREx {$string .= '/' . length($_[0]) . '|' . $_[0]}
+
+sub thawString { # Returns list: a string and offset of rest
+ substr($string, $_[0]) =~ /^\$(\d+)\|/
+ or confess "Wrong format of frozen string: " . substr($string, $_[0]);
+ length($string) - $_[0] > length($1) + 1 + $1
+ or confess "Frozen string too short: `" .
+ substr($string, $_[0]) . "', expect " . (length($1) + 2 + $1);
+ (substr($string, $_[0] + length($1) + 2, $1), $_[0] + length($1) + 2 + $1);
+}
+
+sub thawNumber { # Returns list: a number and offset of rest
+ substr($string, $_[0]) =~ /^(\d+)\|/
+ or confess "Wrong format of frozen string: " . substr($string, $_[0]);
+ ($1, $_[0] + length($1) + 1);
+}
+
+sub _2rex ($);
+if (eval '"Regexp" eq ref qr/1/') {
+ eval 'sub _2rex ($) {my $r = shift; qr/$r/} 1' or die;
+} else {
+ eval 'sub _2rex ($) { shift } 1' or die;
+}
+
+sub thawREx { # Returns list: a REx and offset of rest
+ substr($string, $_[0]) =~ m,^/(\d+)\|,
+ or confess "Wrong format of frozen REx: " . substr($string, $_[0]);
+ length($string) - $_[0] > length($1) + 1 + $1
+ or confess "Frozen string too short: `" .
+ substr($string, $_[0]) . "', expect " . (length($1) + 2 + $1);
+ (_2rex substr($string, $_[0] + length($1) + 2, $1),
+ $_[0] + length($1) + 2 + $1);
+}
+
+sub freezeArray {
+ $string .= '@' . @{$_[0]} . '|';
+ for (@{$_[0]}) {
+ freezeScalar($_);
+ }
+}
+
+sub thawArray {
+ substr($string, $_[0]) =~ /^[\@%](\d+)\|/ # % To make it possible thaw hashes
+ or confess "Wrong format of frozen array: \n$_[0]";
+ my $count = $1;
+ my $off = $_[0] + 2 + length $count;
+ my (@res, $res);
+ while ($count and length $string > $off) {
+ ($res,$off) = thawScalar($off);
+ push(@res,$res);
+ --$count;
+ }
+ confess "Wrong length of data in thawing Array: $count left" if $count;
+ (\@res, $off);
+}
+
+sub freezeHash {
+ my @arr = sort keys %{$_[0]};
+ $string .= '%' . (2*@arr) . '|';
+ for (@arr, @{$_[0]}{@arr}) {
+ freezeScalar($_);
+ }
+}
+
+sub thawHash {
+ my ($arr, $rest) = &thawArray;
+ my %hash;
+ my $l = @$arr/2;
+ foreach (0 .. $l - 1) {
+ $hash{$arr->[$_]} = $arr->[$l + $_];
+ }
+ (\%hash,$rest);
+}
+
+# Second optional argument: ignore the package
+# Third optional one: do not check for duplicates on outer level
+
+sub freezeScalar {
+ $string .= '_', return unless defined $_[0];
+ return &freezeString unless ref $_[0];
+ my $ref = ref $_[0];
+ my $str;
+ if ($_[1] and $ref) { # Similar to getref()
+ if (defined &overload::StrVal) {
+ $str = overload::StrVal($_[0]);
+ } else {
+ $str = "$_[0]";
+ }
+ $ref = $1 if $str =~ /=(\w+)/;
+ } else {
+ $str = "$_[0]";
+ }
+ # Die if a) repeated prohibited, b) met, c) not explicitely requested to ingore.
+ confess "Repeated reference met when prohibited"
+ if $norepeated && !$_[2] && defined $count{$str};
+ if ($secondpass and !$_[2]) {
+ $string .= "<$address{$str}|", return
+ if defined $count{$str} and $count{$str} > 1;
+ } elsif (!$_[2]) {
+ # $count{$str} is defined if we have seen it on this pass.
+ $address{$str} = @multiple, push(@multiple, $_[0])
+ if defined $count{$str} and not exists $address{$str};
+ # This is for debugging and shortening thrown-away output (also
+ # internal data in arrays and hashes is not duplicated).
+ $string .= "<$address{$str}|", ++$count{$str}, return
+ if defined $count{$str};
+ ++$count{$str};
+ }
+ return &freezeArray if $ref eq 'ARRAY';
+ return &freezeHash if $ref eq 'HASH';
+ return &freezeREx if $ref eq 'Regexp' and not defined ${$_[0]};
+ $string .= "*", return &freezeString
+ if $ref eq 'GLOB' and !$safe;
+ $string .= "&", return &freezeString
+ if $ref eq 'CODE' and !$safe;
+ $string .= '\\', return &freezeScalar( $ {shift()} )
+ if $ref eq 'REF' or $ref eq 'SCALAR';
+ if ($noCache and (($ref eq 'CODE') or $ref eq 'GLOB')) {
+ confess "CODE and GLOB references prohibited now";
+ }
+ if ($safe and (($ref eq 'CODE') or $ref eq 'GLOB')) {
+ $unsafe = 1;
+ $saved{$str} = $_[0] unless defined $saved{$str};
+ $string .= "?";
+ return &freezeString;
+ }
+ $string .= '>';
+ local $norepeated = $norepeated;
+ local $noCache = $noCache;
+ freezePackage(ref $_[0]);
+ $_[0]->Freeze($cooky);
+}
+
+sub freezePackage {
+ my $packageid = $seen_packages{$_[0]};
+ if (defined $packageid) {
+ $string .= ')';
+ &freezeNumber( $packageid );
+ } else {
+ $string .= '>';
+ &freezeNumber( $seen_packages );
+ &freezeScalar( $_[0] );
+ $seen_packages{ $_[0] } = $seen_packages++;
+ }
+}
+
+sub thawPackage { # First argument: offset
+ my $key = substr($string,$_[0],1);
+ my ($get, $rest, $id);
+ ($id, $rest) = &thawNumber($_[0] + 1);
+ if ($key eq ')') {
+ $get = $seen_packages{$id};
+ } else {
+ ($get, $rest) = &thawString($rest);
+ $seen_packages{$id} = $get;
+ }
+ ($get, $rest);
+}
+
+# First argument: offset; Optional other: index in the @uninit array
+
+sub thawScalar {
+ my $key = substr($string,$_[0],1);
+ if ($key eq "\$") {&thawString}
+ elsif ($key eq '@') {&thawArray}
+ elsif ($key eq '%') {&thawHash}
+ elsif ($key eq '/') {&thawREx}
+ elsif ($key eq '\\') {
+ my ($out,$rest) = &thawScalar( $_[0]+1 ) ;
+ (\$out,$rest);
+ }
+ elsif ($key eq '_') { (undef, $_[0]+1) }
+ elsif ($key eq '&') {confess "Do not know how to thaw CODE"}
+ elsif ($key eq '*') {confess "Do not know how to thaw GLOB"}
+ elsif ($key eq '?') {
+ my ($address,$rest) = &thawScalar( $_[0]+1 ) ;
+ confess "The saved data accessed in unprotected thaw" unless $unsafe;
+ confess "The saved data disappeared somewhere"
+ unless defined $saved{$address};
+ ($saved{$address},$rest);
+ } elsif ($key eq '<') {
+ confess "Repeated data prohibited at this moment" unless $uninitOK;
+ my ($off,$end) = &thawNumber ($_[0]+1);
+ ($uninit[$off],$end);
+ } elsif ($key eq '>' or $key eq '{' or $key eq '}') {
+ my ($package,$rest) = &thawPackage( $_[0]+1 );
+ my $cooky = bless \$rest, 'FreezeThaw::TCooky';
+ local $uninitOK = $uninitOK;
+ local $unsafe = $unsafe;
+ if ($key eq '{') {
+ my $res = $package->Allocate($cooky);
+ ($res, $rest);
+ } elsif ($key eq '}') {
+ warn "Here it is undef!" unless defined $_[1];
+ $package->Instantiate($uninit[$_[1]],$cooky);
+ (undef, $rest);
+ } else {
+ ($package->Thaw($cooky),$rest);
+ }
+ } else {
+ confess "Do not know how to thaw data with code `$key'";
+ }
+}
+
+sub freezeEmpty { # Takes a type, freezes ref to empty object
+ my $e = $Empty{ref $_[0]};
+ if (ref $e) {
+ my $cache = &$e;
+ freezeScalar $cache;
+ $cache;
+ } elsif ($e) {
+ my $cache = shift;
+ freezeScalar($cache,1,1); # Atomic
+ $cache;
+ } else {
+ $string .= "{";
+ freezePackage ref $_[0];
+ $_[0]->FreezeEmpty($cooky);
+ }
+}
+
+sub freeze {
+ local @multiple;
+ local %seen_packages;
+ local $seen_packages = 0;
+ local %seen_packages;
+# local @seentypes;
+ local %count;
+ local %address;
+ local $string = 'FrT;';
+ local $unsafe;
+ local $noCache;
+ local $cooky = bless \$cooky, 'FreezeThaw::FCooky'; # Just something fake
+ local $secondpass;
+ freezeScalar(\@_);
+ if (@multiple) {
+ # Now repeated structures are enumerated with order of *second* time
+ # they appear in the what we freeze.
+ # What we want is to have them enumerated with respect to the first time
+#### $string = ''; # Start again
+#### @multiple = ();
+#### %address = ();
+#### for (keys %count) {
+#### $count{$_} = undef if $count{$_} <= 1; # As at start
+#### $count{$_} = 0 if $count{$_}; # As at start
+#### }
+#### $seen_packages = 0;
+#### %seen_packages = ();
+#### freezeScalar(\@_);
+ # Now repeated structures are enumerated with order of first time
+ # they appear in the what we freeze
+#### my $oldstring = substr $string, 4;
+ $string = 'FrT;!'; # Start again
+ $seen_packages = 0;
+ %seen_packages = (); # XXXX We reshuffle parts of the
+ # string, so the order of packages may
+ # be wrong...
+ freezeNumber($#multiple);
+ {
+ my @cache; # Force different values for different
+ # empty objects.
+ foreach (@multiple) {
+ push @cache, freezeEmpty $_;
+ }
+ }
+# for (keys %count) {
+# $count{$_} = undef
+# if !(defined $count{$_}) or $count{$_} <= 1; # As at start
+# }
+ # $string .= '@' . @multiple . '|';
+ $secondpass = 1;
+ for (@multiple) {
+ freezeScalar($_,0,1,1), next if $Empty{ref $_};
+ $string .= "}";
+ freezePackage ref $_;
+ $_->FreezeInstance($cooky);
+ }
+#### $string .= $oldstring;
+ freezeScalar(\@_);
+ }
+ return "FrT;?\$" . length($lock) . "|" . $lock . substr $string, 4
+ if $unsafe;
+ $string;
+}
+
+sub safeFreeze {
+ local $safe = 1;
+ &freeze;
+}
+
+sub copyContents { # Given two references, copies contents of the
+ # second one to the first one, provided they have
+ # the same basic type. The package is copied too.
+ my($first,$second) = @_;
+ my $ref = getref $second;
+ if ($ref eq 'SCALAR' or $ref eq 'REF') {
+ $$first = $$second;
+ } elsif ($ref eq 'ARRAY') {
+ @$first = @$second;
+ } elsif ($ref eq 'HASH') {
+ %$first = %$second;
+ } else {
+ croak "Don't know how to copyContents of type `$ref'";
+ }
+ if (ref $second ne ref $first) { # Rebless
+ # SvAMAGIC() is a property of a reference, not of a referent!
+ # Thus we cannot use $first here if $second was overloaded...
+ bless $_[0], ref $second;
+ }
+ $first;
+}
+
+sub thaw {
+ confess "thaw requires one argument" unless @_ ==1;
+ local $string = shift;
+ local %seen_packages;
+ my $initoff = 0;
+ #print STDERR "Thawing `$string'", substr ($string, 0, 4), "\n";
+ if (substr($string, 0, 4) ne 'FrT;') {
+ warn "Signature not present, continuing anyway" if $^W;
+ } else {
+ $initoff = 4;
+ }
+ local $unsafe = $initoff + (substr($string, $initoff, 1) eq "?" ? 1 : 0);
+ if ($unsafe != $initoff) {
+ my $key;
+ ($key,$unsafe) = thawScalar($unsafe);
+ confess "The lock in frozen data does not match the key"
+ unless $key eq $lock;
+ }
+ local @multiple;
+ local $uninitOK = 1; # The methods can change it.
+ my $repeated = substr($string,$unsafe,1) eq '!' ? 1 : 0;
+ my ($res, $off);
+ if ($repeated) {
+ ($res, $off) = thawNumber($repeated + $unsafe);
+ } else {
+ ($res, $off) = thawScalar($repeated + $unsafe);
+ }
+ my $cooky = bless \$off, 'FreezeThaw::TCooky';
+ if ($repeated) {
+ local @uninit;
+ my $lst = $res;
+ foreach (0..$lst) {
+ ($res, $off) = thawScalar($off, $_);
+ push(@uninit, $res);
+ }
+ my @init;
+ foreach (0..$lst) {
+ ($res, $off) = thawScalar($off, $_);
+ push(@init, $res);
+ }
+ #($init, $off) = thawScalar($off);
+ #print "Instantiating...\n";
+ #my $ref;
+ for (0..$#uninit) {
+ copyContents $uninit[$_], $init[$_] if ref $init[$_];
+ }
+ ($res, $off) = thawScalar($off);
+ }
+ croak "Extra elements in frozen structure: `" . substr($string,$off) . "'"
+ if $off != length $string;
+ return @$res;
+}
+
+sub cmpStr {
+ confess "Compare requires two arguments" unless @_ == 2;
+ freeze(shift) cmp freeze(shift);
+}
+
+sub cmpStrHard {
+ confess "Compare requires two arguments" unless @_ == 2;
+ local @multiple;
+# local @seentypes;
+ local %count;
+ local %address;
+ local $string = 'FrT;';
+ local $unsafe;
+ local $noCache;
+ local $cooky = bless \$cooky, 'FreezeThaw::FCooky'; # Just something fake
+ freezeScalar($_[0]);
+ my %cnt1 = %count;
+ freezeScalar($_[1]);
+ my %cnt2 = %count;
+ %count = ();
+ # Now all the caches are filled, delete the entries for guys which
+ # are in one argument only.
+ my ($elt, $val);
+ while (($elt, $val) = each %cnt1) {
+ $count{$elt}++ if $cnt2{$elt} > $cnt1{$elt};
+ }
+ $string = '';
+ freezeScalar($_[0]);
+ my $str1 = $string;
+ $string = '';
+ freezeScalar($_[1]);
+ $str1 cmp $string;
+}
+
+# local $string = freeze(shift,shift);
+# local $uninitOK = 1;
+# #print "$string\n";
+# my $off = 7; # Hardwired offset after @2|
+# if (substr($string,4,1) eq '!') {
+# $off = 5; # Hardwired offset after !
+# my ($uninit, $len);
+# ($len,$off) = thawScalar $off;
+# local @uninit;
+# foreach (0..$len) {
+# ($uninit,$off) = thawScalar $off, $_;
+# }
+# $off += 3; # Hardwired offset after @2|
+# }
+# croak "Unknown format of frozen array: " . substr($string,$off-3)
+# unless substr($string,$off-3,1) eq '@';
+# my ($first,$off2) = thawScalar $off;
+# my $off3;
+# ($first,$off3) = thawScalar $off2;
+# substr($string, $off, $off2-$off) cmp substr($string,$off2,$off3-$off2);
+# }
+
+sub FreezeThaw::FCooky::FreezeScalar {
+ shift;
+ &freezeScalar;
+}
+
+sub FreezeThaw::FCooky::isSafe {
+ $safe || $noCache;
+}
+
+sub FreezeThaw::FCooky::makeSafe {
+ $noCache = 1;
+}
+
+sub FreezeThaw::FCooky::repeatedOK {
+ !$norepeated;
+}
+
+sub FreezeThaw::FCooky::noRepeated {
+ $norepeated = 1;
+}
+
+sub FreezeThaw::TCooky::repeatedOK {
+ $uninitOK;
+}
+
+sub FreezeThaw::TCooky::noRepeated {
+ undef $uninitOK;
+}
+
+sub FreezeThaw::TCooky::isSafe {
+ !$unsafe;
+}
+
+sub FreezeThaw::TCooky::makeSafe {
+ undef $unsafe;
+}
+
+sub FreezeThaw::TCooky::ThawScalar {
+ my $self = shift;
+ my ($res,$off) = &thawScalar($$self);
+ $$self = $off;
+ $res;
+}
+
+sub UNIVERSAL::Freeze {
+ my ($obj, $cooky) = (shift, shift);
+ $cooky->FreezeScalar($obj,1,1);
+}
+
+sub UNIVERSAL::Thaw {
+ my ($package, $cooky) = (shift, shift);
+ my $obj = $cooky->ThawScalar;
+ bless $obj, $package;
+}
+
+sub UNIVERSAL::FreezeInstance {
+ my($obj,$cooky) = @_;
+ return if (ref $obj and ref $obj eq 'Regexp' and not defined $$obj); # Regexp
+ $obj->Freeze($cooky);
+}
+
+sub UNIVERSAL::Instantiate {
+ my($package,$pre,$cooky) = @_;
+ return if $package eq 'Regexp';
+ my $obj = $package->Thaw($cooky);
+ # SvAMAGIC() is a property of a reference, not of a referent!
+ # Thus we cannot use $pre here if $obj was overloaded...
+ copyContents $_[1], $obj;
+}
+
+sub UNIVERSAL::Allocate {
+ my($package,$cooky) = @_;
+ $cooky->ThawScalar;
+}
+
+sub UNIVERSAL::FreezeEmpty {
+ my $obj = shift;
+ my $type = getref $obj;
+ my $e = $Empty{$type};
+ if (ref $e) {
+ my $ref = &$e;
+ freezeScalar $ref;
+ $ref; # Put into cache.
+ } elsif ($e) {
+ freezeScalar($obj,1,1); # Atomic
+ undef;
+ } elsif (defined $e and not defined $$obj) { # Regexp
+ freezeREx($obj);
+ undef;
+ } else {
+ die "Do not know how to FreezeEmpty $type";
+ }
+}
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/lib/gpl.licence.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Binary file deprecated/buildtools/buildsystemtools/lib/src/DateManip-5.42a.tar.gz has changed
Binary file deprecated/buildtools/buildsystemtools/lib/src/FreezeThaw-0.43.tar.gz has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/removebuild.bat Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,17 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+@echo off
+perl -S removebuild.pl %1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/removebuild.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,175 @@
+#!/usr/bin/perl
+
+# Copyright (c) 2002-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:
+# removebuild.pl - prepares a drive for a clean licensee build by removing
+# all buildable files from the drive.
+#
+#
+
+my ($file) = readOpts(@ARGV);
+
+exit remove($file);
+
+sub readOpts(@)
+ {
+ my (@args) = @_;
+
+ my $path = undef;
+
+ foreach my $arg (@args)
+ {
+ if ($arg =~ /^-/)
+ {
+ if ((lc($arg) eq "--help")
+ ||(lc($arg) eq "-h")
+ )
+ {
+ showHelp();
+ exit 0;
+ }
+ else
+ {
+ print STDERR "Option '$arg' not recognised.\n\n";
+ print STDERR "Try 'removebuild --help' for help.\n";
+ exit 1;
+ }
+ }
+ else
+ {
+ if (defined($path))
+ {
+ print STDERR "Removebuild accepts only one argument.\n\n";
+ print STDERR "Try 'removebuild --help' for help.\n";
+ exit 1;
+ }
+ else
+ {
+ $path = $arg;
+ }
+ }
+ }
+
+ if (!defined($path))
+ {
+ print STDERR "Removebuild must be given a list of files to remove.\n\n";
+ print STDERR "Try 'removebuild --help' for help.\n";
+ exit 1;
+ }
+
+ return ($path);
+ }
+
+sub remove($)
+ {
+ my ($file) = @_;
+
+ open(FILE, $file);
+
+ my $dir = undef;
+ my $failed = 0;
+ my $worked = 0;
+ my $hasentries = 0;
+
+ foreach my $line (<FILE>)
+ {
+ chomp($line);
+ $hasentries = 1;
+
+ if ($line =~ /^\*/)
+ {
+ if ($line =~ /^\*DIR:/)
+ {
+ $dir = $line;
+ $dir =~ s/^\*DIR:\s*//;
+
+ $dir =~ s/[\/\\]*$//; # Remove trailing \/
+ }
+ else
+ {
+ close(FILE);
+ die "'$file' is not a valid input.\n('$line' not recognised)\n";
+ }
+ }
+ else
+ {
+ if (defined($dir))
+ {
+ $line =~ s/^[\/\\]*//; # Remove preceding \/
+
+ # Attempt to delete '$dir\$line'
+
+ $line = $dir."\\".$line;
+
+ if (-e $line)
+ {
+ if (-d $line)
+ {
+ $failed = 1;
+ print STDERR "ERROR: Could not remove file '$line' because $line is a directory\n";
+ }
+ else
+ {
+ if (!unlink($line))
+ {
+ $failed = 1;
+ print STDERR "ERROR: Could not remove file '$line'. Make sure it is not write protected.\n";
+ }
+ else
+ {
+ $worked = 1;
+
+ # Remove parent dirs if now empty
+ my $empty = 1;
+ while (($line =~ /[\/\\]/) && $empty)
+ {
+ $line =~ s/[\/\\][^\/\\]*$//; # Go to parent dir
+ if (!rmdir($line))
+ {
+ # If it fails, the dir can't be empty
+ $empty = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ close(FILE);
+ die "'$file' is not a valid input.\n(DIR must be set before '$line')\n";
+ }
+ }
+ }
+
+ close(FILE);
+
+ if ($hasentries && (!$worked))
+ {
+ print STDERR "WARNING: No files listed in '$file' were found. Is the current directory correct?\n";
+ }
+
+ return $failed;
+ }
+
+sub showHelp()
+ {
+ print "removebuild [options] Filename\n";
+ print " - prepares a drive for a 'build from clean' by removing\n";
+ print " all buildable files.\n\n";
+ print " Filename - The file listing the buildable files to be removed\n\n";
+ print "Options:\n";
+ print " --help or -h - Display this message\n\n";
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/scanlog/Scanlog.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,966 @@
+# 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:
+# summarise an automated build log
+# documentation available in generic\tools\e32toolp\docs\scanlog.txt
+# please update the documentation when modifying this file
+#
+#
+
+package Scanlog;
+
+use strict;
+use Carp;
+
+# CheckForErrors
+#
+# Inputs
+# $line - Line of text to check
+#
+# Outputs
+# Return true for presence of error in the line
+# Return false for no error found
+#
+# Description
+# This function matches the input against a known set of Error Strings
+sub CheckForErrors
+{
+ my ($line) = @_;
+
+ # FLEXlm license server errors
+ if ($line =~ /FLEXlm error:/)
+ {
+ return 1;
+ }
+
+ # BLDMAKE ERROR: Can't find "\INTERNET\GROUP\BLD.INF"
+ # ABLD ERROR: Project Bldmake directory "\EPOC32\BUILD\APP-FRAMEWORK\UIKLAF\GROUP\" does not exist
+
+ if ($line =~ /(ABLD|BLDMAKE) ERROR:/)
+ {
+ return 1;
+ }
+
+ # "\WAPENG\GROUP\BLD.INF" FATAL ERROR(S):
+
+ if ($line =~ /FATAL ERROR\(S\):/)
+ {
+ return 1;
+ }
+
+
+ # NMAKE : fatal error U1077: 'C:\apps\DevStudio\VC\BIN\NMAKE.EXE' : return code '0x2'
+
+ if ($line =~ /fatal error U1077/)
+ {
+ return 1;
+ }
+
+ # match all falal error
+ if ($line =~ /^fatal error/i)
+ {
+ return 1;
+ }
+
+ # NMAKE : warning U4010: 'FINALCOPYFXCM' : build failed; /K specified, continuing ...
+
+ if ($line =~ /warning U4010/)
+ {
+ return 1;
+ }
+
+ # make: *** [SAVESPACECONVTOOL] Error 2
+
+ if ($line =~ /make(\.exe)?(\[\d+\])?: \*\*\* /)
+ {
+ return 1;
+ }
+
+ # make: Target `SAVESPACE' not remade because of errors.
+
+ if ($line =~ /make(\.exe)?(\[\d+\])?: .* not remade /)
+ {
+ return 1;
+ }
+
+ # "..\UCRT\Ecrt0.cpp", line 24: Error: #390: function "main" may not be called or have its address taken
+ # "EUSER\\epoc\\arm\\Uc_i64.cia", line 16: Error: A1356W: Instruction not supported on targeted CPU
+
+ if ($line =~ /"(.*)", line (\d+): (Error: +(.\d+.*?):.*)$/)
+ {
+ return 1;
+ }
+
+ # Fatal error: Internal fault: 0x5c6e (200322) in _ZN17CContactLocalView20HandleDatabaseEventLE23TContactDbObserverEvent
+
+ if ($line =~ /error: ((Internal fault):.*)$/)
+ {
+ return 1;
+ }
+
+ # Exception: STATUS_ACCESS_VIOLATION
+ # networkPrim.c
+ # 0 [main] make 2020 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
+ # 265 [main] make 2020 open_stackdumpfile: Dumping stack trace to make.exe.stackdump
+ if ($line =~ /Exception: STATUS_ACCESS_VIOLATION/)
+ {
+ return 1;
+ }
+
+ # MSGBROWSER.WINSCW:3233: target `\EPOC32\RELEASE\WINSCW\UDEB\Z\System\Data' given more than once in the same rule.
+ if ($line =~ /target .* given more than once in the same rule/)
+ {
+ return 1;
+ }
+
+ # ERROR: <anything>
+ if ($line =~ /^ERROR: /m)
+ {
+ return 1;
+ }
+
+ # ERROR (for CDB errors)
+ if ($line =~ /^ERROR\t/)
+ {
+ return 1;
+ }
+
+ # elf2e32 : Error: E1035: Undefined Symbol blah blah blah
+ # elf2e32 : Error: E1036: Symbol blah blah blah
+ if ($line =~ /^\s*elf2e32\s*:\s*Error\s*:\s*/i)
+ {
+ return 1;
+ }
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForRemarks
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line according to the warning codes
+# defined in the checkList array
+# The list is the current known EABI warnings which are considered to be
+# Remarks
+# Return false for no Warning found
+#
+# Description
+# This function matches the input against a known set of Warning Strings defined
+# in the array CheckList
+my %RVCT_checklist=(
+
+
+# Warnings to be fixed if deemed safe
+
+ "#111-D" => "statement is unreachable",
+ "#186-D" => "pointless comparison of unsigned integer with zero",
+ "#236-D" => "controlling expression is constant",
+ "#494-D" => "declaring a void parameter list with a typedef is nonstandard",
+ "C2874W" => "xxx may be used before set",
+ "C3017W" => "xxx may be used before set",
+
+# Warnings not required to be fixed, too risky
+
+ "#1293-D" => "assignment in condition",
+
+# Warnings not required to be fixed, too big a workload
+
+ "#177-D" => "variable abc was declared but never referenced",
+ "#550-D" => "variable xxx was set but never used",
+ "#830-D" => "function \"XXX::operator new(xyz)\" has no corresponding operator delete (to be called if an exception is thrown during initialization of an allocated object)",
+ "L6331W" => "No eligible global symbol matches pattern _ll_cmpeq.",
+ );
+
+sub CheckForRemarks
+{
+ my ($line) = @_;
+
+ # "..\UCRT\Ecrt0.cpp", line 12: Warning: #335-D: linkage specification is not allowed
+ # "s16c.o(.directive)", line 70: Warning: L6331W: s16c.o(.directive)(line 70, col 14) No eligible global symbol matches pattern _fsqrt.
+ if ($line =~ /".*", line \d+: Warning: +(.\d+.*?):/)
+ {
+ # Some compiler warnings about about style rather than substance. The RVCT
+ # compiler warnings are easily identified, and the RVCT_checklist above
+ # classifies the warnings present in the Symbian OS source code which are
+ # not currently considered to be violations of the "zero warnings" policy.
+ # It is the responsibility of the Master Codeline Forum to manage this list,
+ # as part of the "zero warnings" policy.
+ return defined($RVCT_checklist{$1});
+ }
+
+ # Command line warning D4025 : overriding '/O1' with '/Od'
+ if ($line =~ /Command line warning D4025 : /)
+ {
+ # This could be fixed by more subtle code in cl_win.pm
+ # which avoids putting both /O1 and /Od on the command line
+ return 1;
+ }
+
+ # REMARK:
+ if( $line =~ /^REMARK: /m)
+ {
+ return 1;
+ }
+
+ # Windows Event log warning from GNU Make - Treat as remark for the time being.
+ if ($line =~ /^EventType:\s+Error\s+Source:\s+GNU\s+Make/)
+ {
+ return 1;
+ }
+
+ # This is used convert what would be picked up as warning in to a remark, as remarks are check for first
+ # It also returns an additional value of the number of lines to slurp up to get the so the multi line
+ # warning (remark) is only seen once.
+
+ # ..\SETEL\ET_PHONE.CPP:19: warning: cannot find matching deallocation function
+ # ..\SETEL\ET_PHONE.CPP:19: warning: for 'CReqEntry'
+ if ($line =~ /:\d+: warning: cannot find matching deallocation function/)
+ {
+ return 1,1;
+ }
+
+ # fix to get scanlog catch the output of #pragma message (...) as a remark
+ #Codewarrior 3.0 doesn't output line number for #pragma message, whereas 3.1.1 outputs line number.
+ #The regexp below matches both the cases
+ if( $line =~ /((:\d+)*: note: )/)
+ {
+ return 1;
+ }
+
+ # getrel failed.
+ # Error: testtools_stat_desktop DP00391_DeveloperProduct not found
+ if( $line =~ /^Error:.+not found/)
+ {
+ return 1;
+ }
+ # Not already returned so return false
+ return 0;
+
+}
+
+# CheckForWarnings
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line
+# Return false for no Warning found
+#
+# Description
+# This function matches the input against a known set of Warning Strings
+sub CheckForWarnings
+{
+ my ($line) = @_;
+
+ # linkfouraif.rss(25) : Warning: (047) the STRUCT that this resource is based on contains a
+
+ if ($line =~ /\\\\(.*?)\(\d+\)\s:\sWarning:\s\(\d+\)/)
+
+ {
+
+ return 1;
+ }
+
+
+ # RCOMP Warning: Unmatched enum name used as simple initialiser
+
+ if ($line =~ /Warning: Unmatched/i)
+ {
+ return 1;
+ }
+
+
+ # BLDMAKE WARNING: read-only ABLD.BAT will be overwritten
+
+ if ($line =~ /^BLDMAKE WARNING:/)
+ {
+ return 1;
+ }
+
+
+ # \FORM\GROUP\BLD.INF WARNING(S):
+ # \FORM\GROUP\BLD.INF(28) : Exported source file \form\group\tagma.rtf not found
+
+ if ($line =~ /WARNING\(S\)/)
+ {
+ return 1;
+ }
+
+ # WARNING: Can't find following headers in User or System Include Paths
+ # WARNING: Frozen .DEF file \CSTUBSHELL\BMARM\STUBRUNU.DEF not found - project not frozen
+ # WARNING: Not attempting to create any import libraries.
+ # WARNING: rls_string STRING_r_ssl_error_ssl_AlertNoRenegotiation; either has incorrect syntax or no value
+
+ if ($line =~ /^WARNING: /m)
+ {
+ return 1;
+ }
+
+ # \BIOMSG\BITSINC\BioTestUtils.inl(4) : warning C4100: 'iOperation' : unreferenced formal parameter
+
+ if ($line =~ /\(\d+\) : warning C/)
+ {
+ return 1;
+ }
+
+ # LINK : warning LNK4005: no objects used from library \EPOC32\RELEASE\WINS\UDEB\ESTOR.LIB
+
+ if ($line =~ /LINK : warning/)
+ {
+ return 1;
+ }
+
+ # ..\\..\\BAFL\\SRC\\Bacline.cpp:68: warning: value computed is not used
+
+ if ($line =~ /:\d+: warning:/)
+ {
+ return 1;
+ }
+
+ # "..\UCRT\Ecrt0.cpp", line 12: Warning: #335-D: linkage specification is not allowed
+ # "s16c.o(.directive)", line 70: Warning: L6331W: s16c.o(.directive)(line 70, col 14) No eligible global symbol matches pattern _fsqrt.
+
+ if ($line =~ /"(.*)", line (\d+): (Warning: +(.\d+.*?):.*)$/)
+ {
+ return 1;
+ }
+
+ # /../../kvm/VmEPOC/src/emuNetDebuggerTransport.c
+ # ### mwccsym2 Usage Warning:
+ # # Specified directory 'Z:/epoc32/include/libcnot' not found
+ # ... t_winscw_udeb_cw_obj_g/serialDebuggerTransport.o
+ # Linking lib ... winscw_udeb_cw_bin/tkmidp20_kvm.lib
+
+ if ($line =~ /Usage Warning:/)
+ {
+ return 1;
+ }
+ # mwld.exe: No symbols were exported
+
+ if ($line =~ /mwld.exe:/)
+ {
+ return 1;
+ }
+
+ # === target == tools\e32tools
+ # make -r -k -f "\EPOC32\BUILD\TOOLS\E32TOOLS\GROUP\TOOLS.make" SAVESPACE CFG=REL VERBOSE=-s KEEPGOING=-k
+ # nmake -nologo -x - -s -k -f "\EPOC32\BUILD\TOOLS\E32TOOLS\GROUP\ERUNTEST\TOOLS\ERUNTEST.TOOLS" REL CLEANBUILDREL
+ # Command line warning D4002 : ignoring unknown option '/Op'
+
+ if ($line =~ /^Command line warning/m)
+ {
+ return 1;
+ }
+
+ # MAKEDEF WARNING: 1 export(s) not yet Frozen:
+
+ if ($line =~ /^MAKEDEF WARNING:/m)
+ {
+ return 1;
+ }
+
+ # Comment from PETRAN which is actually a warning rather than an error
+ # ERROR: bad relocation: [00004f60] = 00000f68
+
+ if ($line =~ /ERROR: bad relocation:/)
+ {
+ return 1;
+ }
+
+ # 1 warning
+
+ if ($line =~ /^(\d+) warning/m)
+ {
+ return 1;
+ }
+
+ # Windows Event log warning from Sophos Antivirus Scan
+ if ($line =~ /^EventType:\s+Error\s+Source:\s+SweepNT/)
+ {
+ return 1;
+ }
+
+ # WARN (for CDB warnings)
+
+ if ($line =~ /^WARN\t/)
+ {
+ return 1;
+ }
+
+ #elf2e32 : Warning: W1041: Unsupported Target Type 'PLUGIN3'.
+ #Elf2e32: Warning: New Symbol _Z24ImplementationGroupProxyRi found, export(s) not yet Frozen
+ if ($line =~ /^\s*elf2e32\s*:\s*Warning\s*:\s*/i)
+ {
+ return 1;
+ }
+
+ #Can't locate FileRead.pm in @INC (@INC contains:.......
+ if ($line =~ /^Can't locate (.*) in \@INC/ )
+ {
+ return 1;
+ }
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForIgnore
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true if line can be ignored
+# Return false if line cannot be ignored
+#
+# Description
+# This function matches the input against a known set of Warning Strings which can be ignored
+sub CheckForIgnore
+{
+ my ($line) = @_;
+
+ # "..\\..\\..\\E32\\nkern\\arm\\Ncsched.cia", line 617: Warning: A1495E: Target of branch is a data address
+ if ($line =~ /"(.*)", line (\d+): Warning: A1495E: Target of branch is a data address/)
+ {
+ return 1;
+ }
+
+ # BLDMAKE WARNING: ARMV7 requires at least RVCT 3.1.674.
+ # It's not useful to heed this warning, as we're already on control of which platforms we're going to build
+ if ($line =~ /^BLDMAKE WARNING: ARMV\d requires at least RVCT /)
+ {
+ return 1;
+ }
+
+ # Not already returned so return false
+ return 0;
+}
+
+
+
+
+# CheckForNotBuilt
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line
+# Return false for no Warning found
+# $iNotBuilt - Name of thing not built
+#
+# Description
+# This function matches the input against a known set of Strings for things not built
+sub CheckForNotBuilt
+{
+ my ($line) = @_;
+
+ # MISSING COMPONENT alp2csh: can't find tools\sdk_eng\alp2csh\group\bld.inf
+
+ if ($line =~ /^MISSING COMPONENT (.*):.* find (.*)$/m)
+ {
+ return (1,$2);
+ }
+
+ # MISSING: \EPOC32\RELEASE\WINS\UDEB\OPLR.DLL
+
+ if ($line =~ /^MISSING: (\S+)/m)
+ {
+ return (1,$1);
+ }
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForMissing
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line
+# Return false for no Warning found
+# $iNotBuilt - Name of thing not built
+#
+# Description
+# This function matches the input against a known set of Strings for things not built
+sub CheckForMissing
+{
+ my ($line) = @_;
+
+ if ($line =~ /fatal error U1073: .* make '(.*)'/)
+ {
+ return (1,$1);
+ }
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForRealTimeErrors
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of a Real Time Error in the line
+# plus string detailing error (if available)
+# Return false for no Real Time Error found
+#
+# Description
+# This function matches the input against a known set of Error Strings
+# At the time of adding this subroutine, such error strings were only reported by P4GetSource.pm
+# Scripts calling this subroutine should note that, for example, lines beginning with "ERROR:" will
+# also be considered to be errors by subroutine CheckForErrors, above.
+sub CheckForRealTimeErrors
+{
+ my ($line) = @_;
+
+ if ($line =~ /^Error:\s*RealTimeBuild:\s*(.*)/mi)
+ {
+ return (1,$1); # Return True plus any other text on line
+ }
+
+ # Not already returned so return False
+ return 0;
+}
+
+
+
+# CheckForMigrationNotes
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Migration_Note in the line
+# Return false for no Migration_Note found
+#
+# Description
+# This function matches the input against a known set of Migration_Note Strings
+
+my %migration_list=(
+# Warnings to be fixed over longer period as they may indicate errors in code
+
+ "#61-D" => "integer operation result is out of range",
+ "#68-D" => "integer conversion resulted in a change of sign",
+ "#108-D" => "signed bit field of length 1",
+ "#128-D" => "loop is not reachable from preceding code",
+ "#191-D" => "type qualifier is meaningless on cast type",
+ "A1495E" => "Target of branch is a data address",
+ "A1608W" => "MOV pc,<rn> instruction used, but BX <rn> is preferred",
+ "A1745W" => "This register combination is DEPRECATED",
+ "A1764W" => "SWP instructions are deprecated in architecture ARMv6 and above",
+ "A1786W" => "This instruction using SP is deprecated in ARMv7",
+ "A1788W" => "Explicit use of PC in this instruction is deprecated",
+ "#1446-D" => "non-POD class type passed through ellipsis",
+ "#1559-D" => "dllexport/dllimport conflict with \"foo\"; dllexport assumed",
+ "#1566-D" => "dllexport/dllimport conflict with \"foo\"; dllimport/dllexport dropped"
+ );
+
+
+sub CheckForMigrationNotes
+{
+ my ($line) = @_;
+
+if ($line =~ /".*", line \d+: Warning: +(.\d+.*?):/)
+ {
+ # Some compiler warnings may indicate errors that should be fixed when a
+ # migration to a new compiler has occured. These may have been long standing
+ # issues in the OS and whilst not currently considered to be violations of the
+ #"zero warnings" policy should be fixed in any new development work.
+ # It is the responsibility of the Master Codeline Forum to manage this list.
+ return defined($migration_list{$1});
+ }
+
+
+if ($line =~ m/^MIGRATION_NOTE:\s*(.*)/i)
+ {
+ return (1,$1);
+ }
+
+if ($line =~ m/^WARNING: Working Directory: "(.*)\\sf\\app\\techview\\buildverification\\smoketest\\(.*)" Executing: "abld.bat (.*)":/i)
+ {
+ return 1;
+ }
+
+return 0;
+}
+
+
+# CheckForAdvisoryNotes
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true if the input matches against a known set of Advisory_Note strings defined in the advisory_list
+# Return false for no Advisory_Note found
+#
+# Description
+# This function matches the input against a known set of Advisory_Note Strings defined
+# in the array CheckList
+my %Advisory_checklist=(
+# Warnings categorized as advisory notes
+'M:/clean-src/os/unref/orphan/comtv\\toolkit ' => 0,
+'M:/clean-src/os/unref/orphan/comtv\\commsui ' => 0,
+'M:/clean-src/os/unref/orphan/comtv\\apps ' => 0,
+'M:/clean-src/os/unref/orphan/comtt/edg\\group ' => 0,
+'M:/clean-src/os/unref/orphan/comtt\\edg ' => 0,
+'M:/clean-src/os/unref/orphan/comgen/openenv/oetools/docs\\test ' => 0,
+'M:/clean-src/os/unref/orphan/comgen\\networking ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/tools\\baseline ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd\\tools ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/XSRproduct\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/XSRproduct\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/XSRproduct\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/XSRproduct/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/Wi-Fiproduct\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/Wi-Fiproduct\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/Wi-Fiproduct\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/Wi-Fiproduct/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard4cproduct\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard4cproduct\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard4cproduct\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard4cproduct/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard3cproduct\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard3cproduct\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard3cproduct\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/sdcard3cproduct/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/midp2.0product\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/midp2.0product\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/midp2.0product\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/midp2.0product/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/javaproduct\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/javaproduct\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/javaproduct\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/javaproduct/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchiproduct\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchiproduct\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchiproduct\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchiproduct/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchi1.1product\\pkgdef ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchi1.1product\\Messages ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchi1.1product\\group ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/SuppKit/cldchi1.1product/com/symbian/sdk/productinstaller\\graphics ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/DevKit\\SourceDefinitions ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd/DevKit\\PackageDefinitions ' => 0,
+'M:/clean-src/os/unref/orphan/cedprd\\DevKit ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT09_Test\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT09_Test\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT09_Test\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT08_Prototype\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT08_Prototype\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT08_Prototype\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT07_Deprecated\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT07_Deprecated\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT07_Deprecated\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT06_Released\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT06_Released\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT06_Released\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT05_PubAll\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT05_PubAll\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT05_PubAll\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT04_PubPartner\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT04_PubPartner\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT04_PubPartner\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT03_IntComp\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT03_IntComp\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT03_IntComp\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT02_IntTech\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT02_IntTech\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT02_IntTech\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT01_NoAPIs\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT01_NoAPIs\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/UnitTests/PCT01_NoAPIs\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/IntegrationTests/PCT10_Integration\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/IntegrationTests/PCT10_Integration\\results ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/IntegrationTests/PCT10_Integration\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T25_All_Test\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T25_All_Test\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T24_All_Prototype\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T24_All_Prototype\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T23_All_Deprecated\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T23_All_Deprecated\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T22_All_Released\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T22_All_Released\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T21_PubAll_Test\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T21_PubAll_Test\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T20_PubAll_Proto\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T20_PubAll_Proto\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T19_PubAll_Dep\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T19_PubAll_Dep\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T18_PubAll_Rel\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T18_PubAll_Rel\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T17_PubAll_All\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T17_PubAll_All\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T16_PubPartner_Test\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T16_PubPartner_Test\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T15_PubPartner_Proto\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T15_PubPartner_Proto\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T14_PubPartner_Dep\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T14_PubPartner_Dep\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T13_PubPartner_Rel\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T13_PubPartner_Rel\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T12_PubPartner_All\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T12_PubPartner_All\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T11_IntComp_Test\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T11_IntComp_Test\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T10_IntComp_Proto\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T10_IntComp_Proto\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T09_IntComp_Dep\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T09_IntComp_Dep\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T08_IntComp_Rel\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T08_IntComp_Rel\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T07_IntComp_All\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T07_IntComp_All\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T06_IntTech_Test\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T06_IntTech_Test\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T05_IntTech_Proto\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T05_IntTech_Proto\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T04_IntTech_Dep\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T04_IntTech_Dep\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T03_IntTech_Rel\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T03_IntTech_Rel\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T02_IntTech_All\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T02_IntTech_All\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T01_Unclassified\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/TestData/Components/T01_Unclassified\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker\\TestData ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker/src\\ProgramCheckerBase ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker\\docs ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/programchecker\\bin ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT_TestLib\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT_TestLib\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.3\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.3\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.1\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.1\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC4.1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC3\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC3\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC2.2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC2.2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC2.2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT08.TC2.1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT06.TC2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT06.TC2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC4\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC4\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC4\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC3\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC3\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC1\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC1\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT05.TC1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC5.2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC5.2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC5.1\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC5.1\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC5\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC4.2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC4.2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC4.2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC4.1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC3.2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC3.2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC3.2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC3.1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT04.TC1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT03.TC3\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT03.TC3\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT03.TC3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT03.TC2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT03.TC2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT03.TC2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT03.TC1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC3\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC3\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC1.3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT02.TC1.2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.3\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.3\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.1\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.1\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC5.1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC3.2\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC3.2\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC3.2\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC3.1\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC3.1\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC3.1\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC2.3\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC2.3\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/tests/TestData/RMT01.TC2.3\\data ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool\\tests ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/src\\XML ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool/src\\GCCBinUtils ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool\\src ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool\\sample ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool\\group ' => 0,
+'M:/clean-src/os/buildtools/srcanamdw_os/migrationtool\\docs ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os\\depcheck ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests/T_ImportsAnalyser\\TestData ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests\\T_ImportsAnalyser ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests/T_CapSearch\\TestData ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests\\T_CapSearch ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests/T_CapImportCheck\\TestData ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests\\T_CapImportCheck ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests/T_CapCheck\\TestData ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/tests\\T_CapCheck ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools\\src ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/sample\\ImportsAnalyser ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/sample\\CapSearch ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/sample\\CapImportCheck ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/sample/CapCheck\\Sample_XML_ECL ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/sample\\CapCheck ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools\\group ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools/docs\\Design ' => 0,
+'M:/clean-src/os/buildtools/binanamdw_os/captools\\data ' => 0,
+
+);
+
+sub CheckForAdvisoryNotes
+{
+ my ($line) = @_;
+
+ # "s16c.o(.directive)", line 70: Warning: L6331W: s16c.o(.directive)(line 70, col 14) No eligible global symbol matches pattern _fsqrt.
+ if ($line =~ /".*", line \d+: Warning: +(.\d+.*?):/)
+ {
+ # Some compiler warnings about about style rather than substance. The RVCT
+ # compiler warnings are easily identified, and the Advisory_checklist above
+ # classifies the warnings present in the Symbian OS source code which are
+ # not currently considered to be violations of the "zero warnings" policy.
+ # It is the responsibility of the Master Codeline Forum to manage this list,
+ # as part of the "zero warnings" policy.
+ return defined($Advisory_checklist{$1});
+ }
+
+ # ignore undesired codes in //EPOC/
+ if ($line =~ /ADVISORY NOTE: Missing distribution.policy.s60 file in (.*)/)
+ {
+ if (exists $Advisory_checklist{$1}){
+ return $Advisory_checklist{$1};
+ }
+ else{
+ return 1;
+ }
+ }
+
+ # Downgrade Kits errors and warnings
+ if (($line =~ /^WARNING: .+ matched against rule/i) ||
+ ($line =~ /^WARNING: .+ matched tests/i))
+ {
+ # Kits generation is not critical in MCL products and it
+ # should not be BRAG affecting.
+ return 1;
+ }
+
+ if ($line =~ /returning cat X/)
+ {
+ # Look for the phrase returning cat X. This is generated due to distribution policy file being remvoed
+
+ return 1;
+ }
+
+ if ($line =~ /ERROR.*Unable to perform a comparison using empty databases/i)
+ {
+ # Look for the phrase BC Comparision. Generates when base comparision is failed due to the unavailability of the base build.
+
+ return 1;
+ }
+
+ if ($line =~ /ERROR: Fatal exception \"execSpecialInstructions() failed with \d{1,} lines on stderr\"/i)
+ {
+ # Look for the Run variability warnings. Generates while processing the variabilities.
+
+ return 1;
+ }
+
+ if ($line =~ /WARN.*API Classifier load failed/i)
+ {
+ # Look for the classifier load warnings. Generates when unable to load the API's.
+
+ return 1;
+ }
+
+ if ($line =~ /WARNING: Envinfo overall status was not found/i)
+ {
+ # Look for the classifier load warnings. Generates when unable to load the API's.
+
+ return 1;
+ }
+
+ if ($line =~ /warning:\s*no newline at end of file/i && $line !~ /\.((rls)|(rsc)|(rss)|(rh)|(ra)|(hrh)|(rsg)|(loc)):\d{1,}:\d{1,}:\s*/i)
+ {
+ # no newline at end of file warnings are to be captured as it can create some issues with different compilers
+ # currently this will not work as remarks section is capturing this, which should not.
+ # Resource files should not be considered.
+
+ return 1;
+ }
+
+ if ($line =~ /^ADVISORY NOTE:/)
+ {
+ # For use by any advisory notes.
+
+ return 1;
+ }
+
+ if ($line =~ /^ERROR: Fatal exception \"ProcessVariability: Unable to copy .* \[Errno 13\] Permission denied: .*/)
+ {
+ # For buildrefdoc permission denied intermittent error
+
+ return 1;
+ }
+
+# This is used convert what would be picked up as warning in to a advisory note, as advisory notes are check for first
+ # It also returns an additional value of the number of lines to slurp up to get the so the multi line
+ # warning (advisorynote) is only seen once.
+
+
+
+# This is used convert what would be picked up as error in to a advisory note, as advisory notes are check for first
+ # It also returns an additional value of the number of lines to slurp up to get the so the multi line
+ # errors (advisorynote) is only seen once.
+
+}
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/scanlog/compare_summary.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,203 @@
+#
+# Copyright (c) 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:
+#
+# usage:
+# perl compare_summary.pl new_build.summary last_build.summary > summary.summary
+#
+
+sub usage
+ {
+ print "syntax: perl compare_summary.pl new_build.summary last_build.summary\n";
+ exit 1;
+ }
+
+sub showtable
+ {
+ my $f=$_[0];
+ my $s=$_[1];
+ my %first=%$f;
+ my %second=%$s;
+
+ my %comps;
+ my $key,$n,$n2,$temp;
+
+ while ($key = each %first) {
+ $comps{$key}++;}
+ while ($key = each %second){
+ $comps{$key}++;}
+
+ foreach $key (sort keys %comps)
+ {
+ $n=$first{$key}; if ($n==0) {$n="0";}
+ $n2=$second{$key}; if ($n2==0) {$n2="0";}
+ $d=$n-$n2;
+ if ($d==0) {$d="";}
+ if ($d > 0) { $d="+$d";}
+
+ $temp=sprintf "(%s)",$n2;
+ printf "%-24.24s %-5.5s%-7.7s\t\t%s\n", $key, $n, $temp, $d;
+ }
+ }
+
+
+
+$summaryfile1=$ARGV[0];
+$summaryfile2=$ARGV[1];
+
+if (($summaryfile1 eq "") or ($summaryfile2 eq "")) { usage() };
+
+open(FILE1, "< $summaryfile1") || die ("can't open summary file: $!");
+open(FILE2, "< $summaryfile2") || die ("can't open summary file: $!");
+
+# find the start of the error summary in file 1
+while (<FILE1>)
+ {
+ if (/Total+\s+(\S+)+\s+(\d+)+\s+(\d+)/)
+ {
+ $build1time=$1;
+ $build1errors=$2;
+ $build1warnings=$3;
+ last;
+ }
+ }
+# find the start of the error summary in file 2
+while (<FILE2>)
+ {
+ if (/Total+\s+(\S+)+\s+(\d+)+\s+(\d+)/)
+ {
+ $build2time=$1;
+ $build2errors=$2;
+ $build2warnings=$3;
+ last;
+ }
+ }
+
+print "Total\t\t$build1time($build2time)\t$build1errors($build2errors)\t$build1warnings($build2warnings)\n\n";
+
+# compare builds
+$build1haserrors=0;
+$build2haserrors=0;
+
+# find the "Fatal errors" line
+$dummy=<FILE1>;$dummy=<FILE1>;
+if ($dummy =~ /Fatal Errors by Component/) { $build1haserrors=1;}
+$dummy=<FILE2>;$dummy=<FILE2>;
+if ($dummy =~ /Fatal Errors by Component/) { $build2haserrors=1;}
+
+if ($build1haserrors)
+ {
+ while (<FILE1>)
+ {
+ if (/^(\S+)+\s+(\d+)/)
+ {
+ $theerrors1{$1}="$2";
+ }
+ else
+ {
+ last;
+ }
+ }
+ }
+if ($build2haserrors)
+ {
+ while (<FILE2>)
+ {
+ if (/^(\S+)+\s+(\d+)/)
+ {
+ $theerrors2{$1}="$2";
+ }
+ else
+ {
+ last;
+ }
+ }
+ }
+
+if ($build1haserrors || $build2haserrors)
+ {
+ print "Fatal Errors by Component\n";
+ showtable(\%theerrors1, \%theerrors2);
+ print;
+ }
+
+
+# do the warnings now
+$build1haswarnings=0;
+$build2haswarnings=0;
+seek FILE1,0,0;
+seek FILE2,0,0;
+while (<FILE1>)
+ {
+ if (/Warnings by Component/)
+ {
+ $build1haswarnings=1;
+ last;
+ }
+ }
+
+while (<FILE2>)
+ {
+ if (/Warnings by Component/)
+ {
+ $build2haswarnings=1;
+ last;
+ }
+ }
+
+# compare builds
+if ($build1haswarnings || $build2haswarnings)
+ {
+
+
+if ($build1haswarnings)
+ {
+ while (<FILE1>)
+ {
+ if (/^(\S+)\s+(\d+)/)
+ {
+ $thewarnings1{$1}=$2;
+ }
+ else
+ {
+ last;
+ }
+ }
+ }
+if ($build2haswarnings)
+ {
+ while (<FILE2>)
+ {
+ if (/^(\S+)\s+(\d+)/)
+ {
+ $thewarnings2{$1}=$2;
+ }
+ else
+ {
+ last;
+ }
+ }
+ }
+
+ print "Warnings by Component\n";
+ print " this (last)\n";
+ showtable(\%thewarnings1, \%thewarnings2);
+ }
+
+
+
+
+close FILE1;
+close FILE2;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/scanlog/complog.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,75 @@
+#
+# Copyright (c) 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:
+#
+# summarise an automated build log
+
+if (@ARGV < 1)
+ {
+#........1.........2.........3.........4.........5.........6.........7.....
+ print <<USAGE_EOF;
+
+Usage:
+ complog component [logfile] -- extract component info from log
+
+USAGE_EOF
+ exit 1;
+ }
+
+my $component = shift @ARGV;
+my $echoing = 0;
+my $line;
+my $command;
+my $phase;
+
+while ($line=<>)
+ {
+
+ # ===-------------------------------------------------
+ # === baseline_bldfiles
+ # ===-------------------------------------------------
+ # === bldfiles started Sat Jul 24 01:38:03 1999.
+
+ if ($line =~ /^===------/)
+ {
+ $line = <>;
+ $line =~ /=== (.*)$/;
+ $command = $1;
+ <>;
+ $line = <>;
+ $line =~ /^=== (\S+) started ... ... .. (..):(..):(..)/;
+ $phase = $1;
+ next;
+ }
+
+ # === resource == gdtran 036
+
+ if ($line =~ / == ($component .*$)/)
+ {
+ $echoing = 1;
+ print "\n== $1 === $command\n";
+ next;
+ }
+ if ($line =~ /^===/)
+ {
+ $echoing = 0;
+ next;
+ }
+ if ($echoing)
+ {
+ print $line;
+ }
+
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/scanlog/htmlscanlog.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1481 @@
+# 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:
+#
+
+# summarise an automated build log
+use strict;
+use Getopt::Long;
+use HTML::Entities;
+use Carp;
+use FindBin; # for FindBin::Bin
+
+# Add the directory contain this perl script into the path to find modules
+use lib $FindBin::Bin;
+use Scanlog;
+
+# For Date calculations
+use lib "$FindBin::Bin/../lib"; # For running in source
+use lib "$FindBin::Bin/build/lib"; # For running in epoc32\tools
+use Date::Manip;
+
+# Set TimeZone because Date:Manip needs it set and then tell it to IGNORE the TimeZone
+&Date_Init("TZ=GMT","ConvTZ=IGNORE");
+
+# Variables
+my $line;
+my $iSlurp;
+my $PhaseStartTime;
+my %Phases;
+my %Components;
+my %Commands;
+my $component;
+my $command;
+my $phase;
+my $match_phase='';
+my %errors;
+my %warnings;
+my %remarks;
+my %migrationNotes;
+my %AdvisoryNotes;
+my %CmdErrors;
+my %CmdWarnings;
+my %CmdRemarks;
+my %CmdMigrationNotes;
+my %CmdAdvisoryNotes;
+my %missing;
+my %not_built;
+my $starttime;
+my $duration;
+my $warningcount;
+my $errorcount;
+my $remarkcount;
+my $migrationNoteCount;
+my $AdvisoryNoteCount;
+my ($iStatus, $iName);
+my %htmlColours=(
+"errors" =>"#ff0000",
+"warnings" =>"#fff000",
+"remarks" =>"#ffccff",
+"migrationNotes" =>"#ffcc99",
+"AdvisoryNotes" => "#ffa500"
+);
+# Hires Timer Variables
+my %HiResComponents;
+my %HiResCommands;
+my $HiResStartTime;
+my $HiResErrorFlag; #True if one of the Clients has not reported HiRes timing info
+
+my $Dsec;
+
+# History Variables
+my ($hostname) = "N/A";
+my ($EndTime);
+
+# Main section
+
+my ($iOutput, $iTitle, $iVerbose, $iDiff, $iWhat, $iHistory, $iClass, @iLogs) =&ProcessCommandLine();
+
+# Open Output file
+ open (HTML, ">$iOutput") or die "Couldn't open $iOutput for writing: $!\n";
+
+# Open Diff file if specified
+if ($iDiff ne '')
+{
+ open (DIFF, ">$iDiff") or die "Couldn't open $iDiff for writing: $!\n";
+}
+
+# Print HTML Header
+&PrintHTMLHeader($iTitle);
+
+
+# Parse each log File
+foreach my $iLog (@iLogs) # parses through all logs
+{
+ # Open the Log file for reading
+ unless (open (LOG, "< $iLog"))
+ { # On error, warn rather than die. Then record a "pseudo-error", which will appear in summary output file.
+ $line = "Couldn't open $iLog for reading: $!";
+ warn "$line\n";
+ $command = 'HTMLScanLog';
+ $component = 'Log Summaries';
+ $Commands{$command} = 0; # Need to define these! So assume zero seconds
+ $HiResCommands{$command} = 0; # duration for each of four variables.
+ $Components{$component} = 0; # The fact the relevant time(s) are defined
+ $HiResComponents{$component} = 0; # triggers inclusion in the applicable table.
+ do_error($iLog);
+ next;
+ }
+ # Chop $iLog just to the filename
+ $iLog =~ s/^.*\\//;
+
+ # Process the logs
+ &ProcessLog($iLog);
+ close LOG;
+}
+
+&PrintResults($iTitle);
+
+# Print HTML Footer
+&PrintHTMLFooter();
+
+# Handle the History file
+if (defined $iHistory)
+{
+ # Work out the class
+ my ($mclass) = "N/A";
+ open (MC, "< $iClass");
+ while (<MC>)
+ {
+ chomp;
+ my (@columns) = split(/,/);
+ $mclass = $columns[0] if ($columns[1] eq $hostname);
+ }
+ close (MC);
+
+ # Open and Lock the csv file
+ open(FH, "+< $iHistory") or die "can't open $iHistory: $!";
+ flock(FH, 2) or die "can't flock iHistory: $!";
+ # Read the file
+ # Reader the headers
+ my $cline = <FH>;
+ chomp($cline);
+ my (@headers) = split(/,/,$cline);
+ # Read the data
+ my (@csvdata);
+ @csvdata = <FH>;
+ # Return to the begining
+ seek(FH,0,0) or die "Seeking: $!";
+ # Print the old and new data
+ # Work if new headers are needed
+ # Use LowRes component names because they are always available
+ foreach my $component (sort {lc $a cmp lc $b} keys %Components)
+ {
+ my $compexist = 0;
+ # Itterate through the header array to see if it already exists
+ foreach my $header (@headers)
+ {
+ if ($component eq $header)
+ {
+ $compexist = 1;
+ }
+ }
+ # This component not found in the headers
+ # put the new header at the end of the header array
+ push @headers, $component if ($compexist == 0);
+ }
+ # Print the headers back out
+ print FH join(',',@headers)."\n";
+ # Print the original data
+ print FH @csvdata;
+ # Print the new data
+ foreach my $header (@headers)
+ {
+ if ($header eq 'Machine Class')
+ {
+ print FH "$mclass";
+ } elsif ($header eq 'Machine Name') {
+ print FH "$hostname";
+ } elsif ($header eq 'Title') {
+ print FH "$iTitle";
+ } elsif ($header eq 'End Time') {
+ print FH "$EndTime";
+ } elsif ($header eq 'Total Time') {
+ print FH &ConvertSeconds($duration);
+ } else {
+ # If there is a complete set of HiRes data then use that instead of the LowRes data
+ if ((defined %HiResComponents) && !$HiResErrorFlag)
+ {
+ if (exists $HiResComponents{$header})
+ {
+ print FH &ConvertSeconds($HiResComponents{$header});
+ } else {
+ print FH "";
+ }
+ } else {
+ if (exists $Components{$header})
+ {
+ print FH &ConvertSeconds($Components{$header});
+ } else {
+ print FH "";
+ }
+ }
+ }
+ # Print the , for next entry
+ print FH ",";
+ }
+ # End the entry
+ print FH "\n";
+
+ # truncate just in case the file is shorter
+ truncate(FH,tell(FH)) or die "Truncating: $!";
+ close(FH) or die "Closing: $!";
+}
+
+# DiffLog
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function Outputs lines to the diff log
+sub DiffLog()
+{
+ # Write the line to diff file if specified and not a line with Build Time dependent infomation
+ if ($iDiff ne '')
+ {
+ # Check the line for Build Time dependent infomation
+ unless (($line =~ /^=== .+ started/) || ($line =~ /^=== .+ finished/) || ($line =~ /^---/) || ($line =~ /^\+\+/))
+ {
+ print DIFF $line;
+ }
+ }
+}
+
+
+# ProcessLog
+#
+# Inputs
+# $iLog - Logfile name
+#
+# Outputs
+#
+# Description
+# This function processes the commandline
+sub ProcessLog()
+{
+ my ($iLog) = @_;
+ print "Processing: $iLog\n";
+
+ while ($line=<LOG>)
+ {
+ &DiffLog;
+
+ # Hostname is
+ # capture the hostname if available
+ if ($line =~ /^Hostname is (.*)$/)
+ {
+ $hostname = $1;
+ }
+
+ # ===-------------------------------------------------
+ # === Stage=1
+ # ===-------------------------------------------------
+ # === Stage=1 started Wed Apr 30 23:09:38 2003
+
+ if ($line =~ /^===------/)
+ {
+ $line=<LOG>;
+ &DiffLog;
+ $line=<LOG>;
+ &DiffLog;
+ $line = <LOG>;
+ &DiffLog;
+ $line =~ /^=== (.+) started (.*)/;
+ $phase = $1;
+ $PhaseStartTime =$2;
+ $match_phase=$phase;
+ $match_phase=~s-\\-\\\\-go;
+ next;
+ }
+
+ # === bldfiles finished Sat Jul 24 01:38:56 1999.
+ if ($line =~ /^=== $match_phase finished (.*)/)
+ {
+ my ($TempTime) = $1;
+ # Calculate the difference in Date/Time and Total up for Phase
+ $Phases{$phase} += &DiffDateTime($PhaseStartTime, $TempTime) ;
+ # The check to see if phase end is later than current EndTime
+ my $err;
+ # The first time a phase end is seen set $EndTime
+ if (!defined $EndTime)
+ {
+ $EndTime = $TempTime;
+ } else {
+ # Check the delta to previous EndTime value is positive
+ # Need due to multiple log file processing might not be in time order
+ my ($delta) = &DateCalc($EndTime,$TempTime,\$err);
+ die "Date Manip error" if ($err);
+ # If the delta starts with a + symbol $TempTime is later or the same as the last EndTime so set the new EndTime.
+ if ($delta =~ /^\+/)
+ {
+ $EndTime = $TempTime;
+ }
+ }
+ next;
+ }
+
+
+ # === resource == gdtran 036
+
+ if ($line =~ /=== $match_phase == (.*)$/)
+ {
+ $component = $1;
+ next;
+ }
+
+ # Find Command
+ # -- bldmake bldfiles -keepgoing
+ if ($line =~ /^-- (.*)/)
+ {
+ $command = $1;
+ next;
+ }
+
+ # Find the Command's Start time
+ # ++ Started at Sat May 03 21:09:07 2003
+ if ($line =~ /^\+\+ Started at (.*)/)
+ {
+ $starttime = $1;
+ next;
+ }
+
+ # Find the Command's End time
+ # ++ Started at Sat May 03 21:09:07 2003
+ if ($line =~ /^\+\+ Finished at (.*)/)
+ {
+ # Calculate the difference in Date/Time and Total up for Command
+ $Dsec = &DiffDateTime($starttime, $1);
+ $Commands{$command} += $Dsec;
+ # Calculate the difference in Date/Time and Total up for Component
+ $Components{$component} += $Dsec;
+ next;
+ }
+
+ # Act on a HiRes Timer unavailable statement in the log
+ # +++ HiRes Time Unavailable
+ if (($line =~ /^\+\+\+ HiRes Time Unavailable/) && !$HiResErrorFlag)
+ {
+ $HiResErrorFlag = 1;
+ print "Warning one of the clients is not sending HiRes timer Data\n";
+ print "No HiRes timings will be available\n";
+ print "Reverting to LowRes timing Data\n";
+ # Clear out Current HiRes Data
+ undef %HiResCommands;
+ undef %HiResComponents;
+ next;
+ }
+
+
+ # Find the Command's HiRes Start time
+ # +++ HiRes Start 1051993130.602050
+ if (($line =~ /^\+\+\+ HiRes Start (\S+)/) && !$HiResErrorFlag)
+ {
+ $HiResStartTime = $1;
+ next;
+ }
+
+ # Find the Command's HiRes End time
+ # +++ HiRes End 1051993193.829650
+ if (($line =~ /^\+\+\+ HiRes End (\S+)/) && !$HiResErrorFlag)
+ {
+ # Calculate the difference in Date/Time and Total up for Command
+ $HiResCommands{$command} += ($1 - $HiResStartTime);
+ # Calculate the difference in Date/Time and Total up for Component
+ $HiResComponents{$component} += ($1 - $HiResStartTime);
+ next;
+ }
+
+ # Lines to Ignore
+ ($iStatus) =&Scanlog::CheckForIgnore($line);
+ if($iStatus)
+ {
+ next;
+ }
+
+ # Advisory Notes
+ ($iStatus) =&Scanlog::CheckForAdvisoryNotes($line);
+ if ($iStatus)
+ {
+ do_AdvisoryNotes($iLog);
+ do_slurp($iSlurp);
+ next;
+ }
+
+ # Migration Notes
+ ($iStatus) = &Scanlog::CheckForMigrationNotes($line);
+ if ($iStatus)
+ {
+ do_migrationNotes($iLog);
+ next;
+ }
+
+ # Remarks
+ ($iStatus, $iSlurp) =&Scanlog::CheckForRemarks($line);
+ if ($iStatus)
+ {
+ do_remarks($iLog);
+ do_slurp($iSlurp);
+ next;
+ }
+
+ # Errors
+ ($iStatus) =&Scanlog::CheckForErrors($line);
+ if ($iStatus)
+ {
+ do_error($iLog);
+ next;
+ }
+
+
+ # Warnings
+ ($iStatus) =&Scanlog::CheckForWarnings($line);
+ if ($iStatus)
+ {
+ do_warning($iLog);
+ next;
+ }
+
+
+ # Things Not Built
+ ($iStatus, $iName) =&Scanlog::CheckForNotBuilt($line);
+ if ($iStatus)
+ {
+ do_error($iLog); # record these along with the errors
+ $not_built{$iName} = "$component";
+ next;
+ }
+
+ # Things missing
+ ($iStatus, $iName) =&Scanlog::CheckForMissing($line);
+ if ($iStatus)
+ {
+ do_error($iLog);
+ $missing{$iName} += 1;
+ next;
+ }
+
+ }
+}
+
+
+# PrintResults
+#
+# Inputs
+# $iTitle (Title for Log file)
+#
+# Outputs
+#
+# Description
+# This function prints all the data as HTML
+sub PrintResults
+{
+ my ($iTitle) = @_;
+
+ my $title;
+
+ # Print Heading of Log File
+ my $heading ="Overall";
+ print HTML qq{<h1>$iTitle</h1>\n};
+ print HTML qq{<h2>$heading</h2>\n};
+
+ # Calculate the total number of remarks messages
+ $remarkcount = 0;
+ foreach $component (sort {lc $a cmp lc $b} keys %remarks)
+ {
+ $remarkcount += scalar(@{$remarks{$component}});
+ }
+ # Calculate the Total number of errors
+ $errorcount = 0;
+ foreach $component (sort {lc $a cmp lc $b} keys %errors)
+ {
+ $errorcount += scalar(@{$errors{$component}});
+ }
+ # Calculate the total number of warnings
+ $warningcount = 0;
+ foreach $component (sort {lc $a cmp lc $b} keys %warnings)
+ {
+ $warningcount += scalar(@{$warnings{$component}});
+ }
+
+ # Calculate the total number of migration notes
+ $migrationNoteCount=0;
+ foreach $component (sort {lc $a cmp lc $b} keys %migrationNotes)
+ {
+ $migrationNoteCount += scalar(@{$migrationNotes{$component}});
+ }
+
+ # Calculate the total number of Advisory notes
+ $AdvisoryNoteCount=0;
+ foreach $component (sort {lc $a cmp lc $b} keys %AdvisoryNotes)
+ {
+ $AdvisoryNoteCount += scalar(@{$AdvisoryNotes{$component}});
+ }
+
+ # Calculate the Total Duration from Phase Data
+ $duration = 0;
+ foreach $phase (sort {lc $a cmp lc $b} keys %Phases)
+ {
+ $duration += $Phases{$phase};
+ }
+ # Start the Table
+ &StartHTMLTable();
+
+ # Print the Totals
+ &HTMLTableRow($heading,"Total", $duration, $errorcount, $warningcount, $AdvisoryNoteCount, $remarkcount, $migrationNoteCount);
+
+ # End the Table
+ print HTML qq{</table>\n};
+
+
+
+ # By Component
+ print HTML qq{<h2>By Component</h2>\n};
+
+ # Start the Table
+ $title="Component";
+ &StartHTMLTable($title);
+
+ # Print the by Component Data
+ # If there is a complete set of HiRes data then use that instead of the LowRes data
+ if ((defined %HiResComponents) && !$HiResErrorFlag)
+ {
+ foreach $component (sort {lc $a cmp lc $b} keys %HiResComponents)
+ {
+ # Calculate the number errors,warnings,advisory notes and remarks
+ my $totalerrors;
+ my $totalwarnings;
+ my $totalremarks;
+ my $totalMigrationNotes;
+ my $totalAdvisoryNotes;
+ if (!defined $remarks{$component})
+ {
+ # No Remarks were recorded, set total to zero
+ $totalremarks = 0;
+ } else {
+ $totalremarks = scalar(@{$remarks{$component}});
+ }
+ if (!defined $errors{$component})
+ {
+ # No errors were recorded, set total to zero
+ $totalerrors = 0;
+ } else {
+ $totalerrors = scalar(@{$errors{$component}});
+ }
+ if (!defined $warnings{$component})
+ {
+ # No Warnings were recorded, set total to zero
+ $totalwarnings = 0;
+ } else {
+ $totalwarnings = scalar(@{$warnings{$component}});
+ }
+
+ if (!defined $migrationNotes{$component})
+ {
+ # No MigrationNotes were recorded, set total to zero
+ $totalMigrationNotes=0;
+ }
+ else
+ {
+ $totalMigrationNotes = scalar(@{$migrationNotes{$component}});
+ }
+ if (!defined $AdvisoryNotes{$component})
+ {
+ # No AdvisoryNotes were recorded, set total to zero
+ $totalAdvisoryNotes=0;
+ }
+ else
+ {
+ $totalAdvisoryNotes = scalar(@{$AdvisoryNotes{$component}});
+ }
+
+
+ # Print the Table Row
+ &HTMLTableRow($title,$component, $HiResComponents{$component}, $totalerrors, $totalwarnings, $totalAdvisoryNotes, $totalremarks, $totalMigrationNotes);
+
+ }
+ } else {
+ foreach $component (sort {lc $a cmp lc $b} keys %Components)
+ {
+ # Calculate the number errors,warnings,advisory notes and remarks
+ my $totalerrors;
+ my $totalwarnings;
+ my $totalremarks;
+ my $totalMigrationNotes;
+ my $totalAdvisoryNotes;
+ if (!defined $remarks{$component})
+ {
+ # No Remarks was recorded, set total to zero
+ $totalremarks = 0;
+ } else {
+ $totalremarks = scalar(@{$remarks{$component}});
+ }
+ if (!defined $errors{$component})
+ {
+ # No errors were recorded, set total to zero
+ $totalerrors = 0;
+ } else {
+ $totalerrors = scalar(@{$errors{$component}});
+ }
+ if (!defined $warnings{$component})
+ {
+ # No Warnings were recorded, set total to zero
+ $totalwarnings = 0;
+ } else {
+ $totalwarnings = scalar(@{$warnings{$component}});
+ }
+
+ if (!defined $migrationNotes{$component})
+ {
+ # No MigrationNotes were recorded, set total to zero
+ $totalMigrationNotes=0;
+ }
+ else
+ {
+ $totalMigrationNotes = scalar(@{$migrationNotes{$component}});
+ }
+
+ if (!defined $AdvisoryNotes{$component})
+ {
+ # No AdvisoryNotes were recorded, set total to zero
+ $totalAdvisoryNotes=0;
+ }
+ else
+ {
+ $totalAdvisoryNotes = scalar(@{$AdvisoryNotes{$component}});
+ }
+
+
+
+ # Print the Table Row
+ &HTMLTableRow($title,$component, $Components{$component}, $totalerrors, $totalwarnings, $totalAdvisoryNotes, $totalremarks, $totalMigrationNotes);
+ }
+ }
+
+ # End the Table
+ print HTML qq{</table>\n};
+
+ # By Command
+ print HTML qq{<h2>By Command</h2>\n};
+
+ # Start the Table
+ $title="Command";
+ &StartHTMLTable($title);
+
+ # Print the by Command Data
+ # If there is a complete set of HiRes data then use that instead of the LowRes data
+ if ((defined %HiResCommands) && !$HiResErrorFlag)
+ {
+ foreach $command (sort {lc $a cmp lc $b} keys %HiResCommands)
+ {
+ # Calculate the number errors, warnings, advisory notes and remarks
+ my $totalerrors;
+ my $totalwarnings;
+ my $totalremarks;
+ my $totalMigrationNotes;
+ my $totalAdvisoryNotes;
+ if (!defined $CmdRemarks{$command})
+ {
+ # No Remarks were recorded, set total to zero
+ $totalremarks = 0;
+ } else {
+ $totalremarks = scalar(@{$CmdRemarks{$command}});
+ }
+ if (!defined $CmdErrors{$command})
+ {
+ # No errors were recorded, set total to zero
+ $totalerrors = 0;
+ } else {
+ $totalerrors = scalar(@{$CmdErrors{$command}});
+ }
+ if (!defined $CmdWarnings{$command})
+ {
+ # No Warnings were recorded, set total to zero
+ $totalwarnings = 0;
+ } else {
+ $totalwarnings = scalar(@{$CmdWarnings{$command}});
+ }
+
+ if (!defined $CmdMigrationNotes{$command})
+ {
+ # No MigrationNotes were recorded, set total to zero
+ $totalMigrationNotes=0;
+ }
+ else
+ {
+ $totalMigrationNotes = scalar(@{$CmdMigrationNotes{$command}});
+ }
+
+ if (!defined $CmdAdvisoryNotes{$command})
+ {
+ # No AdvisoryNotes were recorded, set total to zero
+ $totalAdvisoryNotes=0;
+ }
+ else
+ {
+ $totalAdvisoryNotes = scalar(@{$CmdAdvisoryNotes{$command}});
+ }
+
+
+ # Print the Table Row
+ &HTMLTableRow($title,$command, $HiResCommands{$command}, $totalerrors, $totalwarnings, $totalAdvisoryNotes, $totalremarks, $totalMigrationNotes);
+ }
+ } else {
+ foreach $command (sort {lc $a cmp lc $b} keys %Commands)
+ {
+ # Calculate the number errors,warnings,advisory notes and remarks
+ my $totalerrors;
+ my $totalwarnings;
+ my $totalremarks;
+ my $totalMigrationNotes;
+ my $totalAdvisoryNotes;
+
+ if (!defined $CmdRemarks{$command})
+ {
+ # No Remarks were recorded, set total to zero
+ $totalremarks = 0;
+ } else {
+ $totalremarks = scalar(@{$CmdRemarks{$command}});
+ }
+ if (!defined $CmdErrors{$command})
+ {
+ # No errors were recorded, set total to zero
+ $totalerrors = 0;
+ } else {
+ $totalerrors = scalar(@{$CmdErrors{$command}});
+ }
+ if (!defined $CmdWarnings{$command})
+ {
+ # No Warnings were recorded, set total to zero
+ $totalwarnings = 0;
+ } else {
+ $totalwarnings = scalar(@{$CmdWarnings{$command}});
+ }
+
+ if (!defined $CmdMigrationNotes{$command})
+ {
+ # No MigrationNotes were recorded, set total to zero
+ $totalMigrationNotes=0;
+ }
+ else
+ {
+ $totalMigrationNotes = scalar(@{$CmdMigrationNotes{$command}});
+ }
+
+ if (!defined $CmdAdvisoryNotes{$command})
+ {
+ # No AdvisoryNotes were recorded, set total to zero
+ $totalAdvisoryNotes=0;
+ }
+ else
+ {
+ $totalAdvisoryNotes = scalar(@{$CmdAdvisoryNotes{$command}});
+ }
+
+ # Print the Table Row
+ &HTMLTableRow($title,$command, $Commands{$command}, $totalerrors, $totalwarnings, $totalAdvisoryNotes, $totalremarks, $totalMigrationNotes);
+ }
+ }
+
+ # End the Table
+ print HTML qq{</table>\n};
+
+ # Print Things Missing
+ if (scalar %missing)
+ {
+ my $count = scalar keys %missing;
+ print HTML qq{<h2>Things Missing ($count)</h2>\n};
+ print HTML "Don't know how to make...\n";
+ foreach my $file (sort {lc $a cmp lc $b} keys %missing)
+ {
+ printf HTML "%d\t%s</BR>\n", $missing{$file}, $file;
+ }
+ }
+ print HTML qq{</BR>\n};
+
+ # Print Things Not Built
+ if (scalar %not_built)
+ {
+ my $count = scalar keys %not_built;
+ print HTML qq{<h2>Things Not Built ($count)</h2>\n};
+ foreach my $file (sort {lc $a cmp lc $b} keys %not_built)
+ {
+ print HTML "MISSING: $file ($not_built{$file})</BR>\n";
+ }
+ }
+
+
+ # Print the Actual Errors by Component
+ if ($iVerbose > 0)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %errors))
+ {
+ print HTML qq{<h2><a name="errorsByOverall_Total">Error Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %errors)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$errors{$component}};
+ print HTML qq{<h3><a name="errorsByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$errors{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Warning by Component
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %warnings))
+ {
+ print HTML qq{<h2><a name="warningsByOverall_Total">Warning Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %warnings)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$warnings{$component}};
+ print HTML qq{<h3><a name="warningsByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$warnings{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Advisory Notes by Component
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %AdvisoryNotes))
+ {
+ print HTML qq{<h2><a name="AdvisoryNotesByOverall_Total">Advisory Note Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %AdvisoryNotes)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$AdvisoryNotes{$component}};
+ print HTML qq{<h3><a name="AdvisoryNotesByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$AdvisoryNotes{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Remarks by Component
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %remarks))
+ {
+ print HTML qq{<h2><a name="remarksByOverall_Total">Remarks Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %remarks)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$remarks{$component}};
+ print HTML qq{<h3><a name="remarksByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$remarks{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Migration Notes by Component
+if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %migrationNotes))
+ {
+ print HTML qq{<h2><a name="migrationNotesByOverall_Total">Migration Note Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %migrationNotes)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$migrationNotes{$component}};
+ print HTML qq{<h3><a name="migrationNotesByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$migrationNotes{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Errors by Command
+ if ($iVerbose > 0)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdErrors))
+ {
+ print HTML qq{<h2>Error Details by Command</h2>\n};
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdErrors)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="errorsByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdErrors{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Warning by Command
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %CmdWarnings))
+ {
+ print HTML qq{<h2>Warning Details by Command</h2>\n};
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdWarnings)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="warningsByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdWarnings{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Advisory Notes by Command
+ if ($iVerbose >1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdAdvisoryNotes))
+ {
+ print HTML qq{<h2>Advisory Note Details by Command</h2>\n};
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdAdvisoryNotes)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="AdvisoryNotesByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdAdvisoryNotes{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n}
+ }
+ }
+ }
+
+ # Print the Actual Remarks by Command
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdRemarks))
+ {
+ print HTML qq{<h2>Remarks Details by Command</h2>\n};
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdRemarks)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="remarksByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdRemarks{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Migration Notes by Command
+ if ($iVerbose >1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdMigrationNotes))
+ {
+ print HTML qq{<h2>Migration Note Details by Command</h2>\n};
+
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdMigrationNotes)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="migrationNotesByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdMigrationNotes{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n}
+ }
+ }
+ }
+
+}
+
+
+# StartHTMLTable
+#
+# Inputs
+# $iC1Title (Column 1 Title)
+#
+# Outputs
+#
+# Description
+# This function prints the start of the HTML Table
+sub StartHTMLTable
+{
+ my ($iC1Title) = @_;
+
+ if ($iC1Title eq '')
+ {
+ $iC1Title = " ";
+ } else {
+ encode_entities($iC1Title);
+ }
+
+ # Start the Table
+ print HTML qq{<table border="1" cellpadding="0" cellspacing="0" width="100%">\n};
+
+ # Print the Header Row
+ print HTML qq{\t<th width="50%">$iC1Title</th>\n};
+ print HTML qq{\t<th width="15%">Time</th>\n};
+ print HTML qq{\t<th width="8%">Errors</th>\n};
+ print HTML qq{\t<th width="8%">Warnings</th>\n};
+ print HTML qq{\t<th width="8%">Advisory Notes</th>\n};
+ print HTML qq{\t<th width="8%">Remarks</th>\n};
+ print HTML qq{\t<th width="8%">Migration Notes</th>\n};
+ print HTML qq{</tr>\n};
+}
+
+# HTMLTableCell
+#
+# Inputs
+# $iType (errors,warnings,remarks,migration_notes)
+# $iCount (number of errors)
+# $iLink (empty string or linktype)
+#
+# Outputs
+# Returns HTML table data element with appropriate link & background color
+#
+# Description
+# Constructs HTML table element - used by HTMLTableRow to handle the formatting
+# of the data cells, complete with colouring and links where appropriate.
+sub HTMLTableCell
+{
+ my ($iType,$iCount,$iLink)= @_;
+ my $td = qq{td width="8%" align="center"}; # implied by the TH elements already?
+ if ($iCount != 0)
+ {
+ $td = "$td BGCOLOR=$htmlColours{$iType}";
+ }
+ if ($iLink eq "" || $iCount == 0)
+ {
+ return qq{<$td>$iCount</td>};
+ }
+ $iLink = $iType."By".$iLink;
+ return qq{<$td><a href="#$iLink">$iCount</a></td>};
+}
+
+# HTMLTableRow
+#
+# Inputs
+# $iTitle (Need to differentiate between command and component to provide correct anchors)
+# $iC1Data(Column 1 Data)
+# $iC2Data(Column 2 Data) (Time in seconds)
+# $iC3Data(Column 3 Data) (Number of errors)
+# $iC4Data(Column 4 Data) (Number of warnings)
+# $iC5Data(Column 5 Data) (Number of Advisory notes )
+# $iC6Data(Column 6 Data) (Number of remarks )
+# $iC7Data(Column 7 Data) (Number of migration notes )
+#
+# Outputs
+#
+# Description
+# This function prints a line of the HTML Table
+sub HTMLTableRow
+{
+ my ($iTitle,$iC1Data, $iC2Data, $iC3Data, $iC4Data,$iC5Data, $iC6Data, $iC7Data) = @_;
+
+ #print "$iC2Data\n";
+
+ # Convert the seconds in hh:mm:ss format
+ $iC2Data = &ConvertSeconds($iC2Data);
+
+ # HTML encode the text
+ encode_entities($iC1Data);
+ encode_entities($iC2Data);
+ encode_entities($iC3Data);
+ encode_entities($iC4Data);
+ encode_entities($iC5Data);
+ encode_entities($iC6Data);
+ encode_entities($iC7Data);
+
+ my $linkname = "$iTitle"."_"."$iC1Data";
+
+ # Print the Row, including summary in a script comment
+ print HTML qq{<tr>\n};
+ print HTML qq{<!--\t$linkname\t$iC2Data\t$iC3Data\t$iC4Data\t$iC5Data\t$iC6Data\t$iC7Data\t-->\n};
+ print HTML qq{\t<td width="50%">$iC1Data</td>\n};
+ print HTML qq{\t<td width="15%" align="center">$iC2Data</td>\n};
+
+ print HTML "\t",&HTMLTableCell("errors", $iC3Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("warnings",$iC4Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("AdvisoryNotes", $iC5Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("remarks", $iC6Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("migrationNotes", $iC7Data,$linkname),"\n";
+
+ print HTML qq{</tr>\n};
+}
+
+# ConvertSeconds
+#
+# Inputs
+# $iSeconds
+#
+# Outputs
+# $iString (seconds in hh:mm:ss)
+#
+# Description
+# This function processes the commandline
+sub ConvertSeconds
+{
+ my ($iSeconds) = @_;
+
+ my ($iString);
+ my ($ih) = int($iSeconds/3600);
+ my ($im) = int(($iSeconds-($ih*3600))/60);
+ my ($is) = $iSeconds-($ih*3600)-($im*60);
+ # Print the correct format if the data is HiRes (has a decimal point in the string)
+ if ($is =~ /\d+\.\d+/)
+ {
+ $iString = sprintf "%d:%02d:%06.3f", $ih, $im, $is;
+ } else {
+ $iString = sprintf "%d:%02d:%02d", $ih, $im, $is;
+ }
+ return $iString;
+}
+
+# ProcessCommandLine
+#
+# Inputs
+#
+# Outputs
+# $iOutput (Output filename)
+# $iVerbose (Verbose Level)
+# $iLogs (Log files to process)
+#
+# Description
+# This function processes the commandline
+
+sub ProcessCommandLine {
+ my ($iHelp, @iLogs, $iOutput, $iTitle, $iVerbose, $iDiff, $iHistory, $iClass, $iHistoryHelp);
+ GetOptions('h' => \$iHelp, 'l=s' =>\@iLogs, 'o=s' => \$iOutput, 't=s' => \$iTitle, 'v+' => \$iVerbose, 'd=s' =>\$iDiff, 'c=s' =>\$iHistory, 'm=s' =>\$iClass, 'hh' => \$iHistoryHelp);
+
+ if ($iHistoryHelp)
+ {
+ &HistoryHelp();
+ }
+
+ if (($iHelp) || (!defined @iLogs) || (!defined $iOutput))
+ {
+ Usage();
+ } elsif (-e $iOutput) {
+ die "$iOutput already exists";
+ } elsif (-e $iDiff) {
+ die "$iDiff already exists";
+ } elsif (-e $iWhat) {
+ die "$iWhat already exists";
+ }
+ foreach my $iLog (@iLogs)
+ {
+ warn "$iLog does not exist" if (! -e $iLog);
+ }
+
+ # Check the history options
+ if (defined $iHistory)
+ {
+ if (! -e $iHistory)
+ {
+ warn "$iHistory does not exist";
+ undef $iHistory;
+ }
+
+ elsif (!defined $iClass)
+ {
+ warn "No machine name to class csv file specified with -m option";
+ undef $iHistory;
+ }
+ }
+
+ # Set default title
+ if ($iTitle eq '')
+ {
+ $iTitle = "Log File Summary";
+ }
+
+ return($iOutput, $iTitle, $iVerbose, $iDiff, $iWhat, $iHistory, $iClass, @iLogs);
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage {
+ print <<USAGE_EOF;
+
+ Usage: Scanlog.pl [options]
+
+ options:
+
+ -h help
+ -l Log file to scan [Multiple allowed]
+ -o Output file
+ -v Increments Verbose level [Maximum Level = 2]
+ -t Title to add to the Summary
+ -d Filename for Logfile with Time Information removed [Optional]
+
+ History options [Optional]
+ -hh More help on History options and file formats
+ -c History csv to add summary to
+ -m Machine name to class csv data file [required if using -c]
+
+USAGE_EOF
+ exit 1;
+}
+
+# HistoryHelp
+#
+# Output History Help Information.
+#
+sub HistoryHelp{
+ print <<HISTORY_EOF;
+
+ History Description:
+ The History function collates the timing summary information of the
+ components from multiple builds. As the timing data varies between
+ machines of different specifications, htmlscanlog tries to identify
+ the machines hostname from the logs so it can identify which class
+ of machine it belongs to (the machine class is used to group multiple
+ machines with identical specifications). If it is not able to identify
+ a machine name (and class) it uses the first entry in the Machine name
+ to class csv.
+
+ History csv file format:
+ The csv format is for easy loading into spreadsheet programs for
+ generating charts. The first line contains the column headings, the
+ first column headings is the machine class, machine name, Title,
+ the last time entry in all the logs processed, then the
+ component names. Removed components will cause empty entries, new
+ components will be added at the end.
+
+ Machine name to class csv data file format:
+ The csv format contains two columns with no headings, first column is
+ the class name, the second is the machine name.
+
+HISTORY_EOF
+ exit 1;
+}
+
+# PrintHTMLHeader
+#
+# Inputs
+# $iTitle (Title for Log file)
+#
+# Outputs
+#
+# Description
+# This function print the HTML Header
+
+sub PrintHTMLHeader {
+ my ($iTitle) = @_;
+
+ print HTML <<HTML_EOF;
+<HTML>
+<HEAD>
+<TITLE>$iTitle</TITLE>
+</HEAD>
+<BODY BGCOLOR="FFFFFF">
+<FONT FACE="Courier New">
+HTML_EOF
+}
+
+# PrintHTMLFooter
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function print the HTML Footer
+
+sub PrintHTMLFooter {
+ print HTML <<HTML_EOF;
+</FONT>
+</BODY>
+</HTML>
+HTML_EOF
+}
+
+# DiffDateTime
+#
+# Inputs
+# $StartDateTime (Start Date/Time String)
+# $EndDateTime (End Date/Time String)
+#
+# Outputs
+# $Duration (Difference in seconds bertween the two dates/Times)
+#
+# Description
+# This function calculate the difference between to dates and times
+
+sub DiffDateTime {
+ my ($String1, $String2) = @_;
+
+ my ($err, $delta);
+
+ $delta=&DateCalc($String1,$String2,\$err);
+ if ($err)
+ {
+ print "WARNING: DiffDateTime encountered and error\n";
+ return "0";
+ } else {
+ # Convert into seconds to aid additions
+ return &Delta_Format($delta,'0',"%sh");
+ }
+}
+
+sub do_remarks()
+{
+ my ($iLog) =@_;
+ # Store remarks by Command
+ if (!defined $CmdRemarks{$command})
+ {
+ $CmdRemarks{$command} = ();
+ }
+ push @{$CmdRemarks{$command}}, "$iLog:"."$.".">$line";
+
+ # Store remarks by Component
+ if (!defined $remarks{$component})
+ {
+ $remarks{$component} = ();
+ }
+ push @{$remarks{$component}}, "$iLog:"."$.".">$line";
+}
+
+sub do_warning()
+{
+ my ($iLog) =@_;
+ # Store warning by Command
+ if (!defined $CmdWarnings{$command})
+ {
+ $CmdWarnings{$command} = ();
+ }
+ push @{$CmdWarnings{$command}}, "$iLog:"."$.".">$line";
+
+ # Store warning by Component
+ if (!defined $warnings{$component})
+ {
+ $warnings{$component} = ();
+ }
+ push @{$warnings{$component}}, "$iLog:"."$.".">$line";
+}
+
+
+sub do_migrationNotes()
+ {
+ my ($iLog)= @_;
+ # Store Migration Notes by command
+ if (!defined $CmdMigrationNotes{$command})
+ {
+ $CmdMigrationNotes{$command} = ();
+ }
+ push @{$CmdMigrationNotes{$command}}, "$iLog:"."$.".">$line";
+
+ # Store Migration Notes by Componen
+ if (!defined $migrationNotes{$component})
+ {
+ $migrationNotes{$component} = ();
+ }
+ push @{$migrationNotes{$component}}, "$iLog:"."$.".">$line";
+
+ }
+
+sub do_AdvisoryNotes()
+ {
+ my ($iLog)= @_;
+ # Store Advisory Notes by command
+ if (!defined $CmdAdvisoryNotes{$command})
+ {
+ $CmdAdvisoryNotes{$command} = ();
+ }
+ push @{$CmdAdvisoryNotes{$command}}, "$iLog:"."$.".">$line";
+
+ # Store Advisory Notes by Component
+ if (!defined $AdvisoryNotes{$component})
+ {
+ $AdvisoryNotes{$component} = ();
+ }
+ push @{$AdvisoryNotes{$component}}, "$iLog:"."$.".">$line";
+
+}
+
+sub do_error()
+{
+ my ($iLog) =@_;
+ # Store Errors by Command
+ if (!defined $CmdErrors{$command})
+ {
+ $CmdErrors{$command} = ();
+ }
+ push @{$CmdErrors{$command}}, "$iLog:"."$.".">$line";
+
+ # Store Errors by Component
+ if (!defined $errors{$component})
+ {
+ $errors{$component} = ();
+ }
+ push @{$errors{$component}}, "$iLog:"."$.".">$line";
+}
+
+# Read a number of lines in the log ignoreing the content
+sub do_slurp()
+{
+ my ($num_lines) =@_;
+ for (my $i = 0; $i < $num_lines; $i++)
+ {
+ <LOG>;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/scanlog/scanlog.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,365 @@
+# 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:
+# summarise an automated build log
+# documentation available in generic\tools\e32toolp\docs\scanlog.txt
+# please update the documentation when modifying this file
+# RegEx's in Scanlog Module
+#
+#
+
+use strict;
+use FindBin; # for FindBin::Bin
+
+# Add the directory contain this perl script into the path to find modules
+use lib $FindBin::Bin;
+
+use Scanlog;
+
+my $line;
+my $iSlurp;
+my $phase;
+my $match_phase='';
+my $command='???';
+my $starttime;
+my $duration;
+my $errorcount=0;
+my $component='???';
+my %errors;
+my %missing;
+my %not_built;
+my $totalduration = 0;
+my $totalerrors = 0;
+my $warningcount=0;
+my %warnings;
+my $totalwarnings = 0;
+my $remarkscount=0;
+my %remarks;
+my $totalremarks = 0;
+my $migrationnotescount=0;
+my %migrationnotes;
+my $totalmigrationnotes = 0;
+my ($iStatus, $iName);
+
+my $verbose = 0;
+my $argc = scalar(@ARGV);
+if ($argc>0 and $ARGV[0]=~/^\s*\-v\s*$/)
+ {
+ $verbose = 1;
+ shift @ARGV;
+ }
+elsif ($argc>0 and $ARGV[0]=~/^\s*\-V\s*$/)
+ {
+ $verbose = 2;
+ shift @ARGV;
+ }
+
+sub do_remarks()
+ {
+ $remarkscount += 1;
+ if (!defined $remarks{$component})
+ {
+ $remarks{$component} = ();
+ }
+ push @{$remarks{$component}}, $line;
+ }
+
+sub do_migrationnotes()
+ {
+ $migrationnotescount += 1;
+ if (!defined $migrationnotes{$component})
+ {
+ $migrationnotes{$component} = ();
+ }
+ push @{$migrationnotes{$component}}, $line;
+ }
+
+sub do_warning()
+ {
+ $warningcount += 1;
+ if (!defined $warnings{$component})
+ {
+ $warnings{$component} = ();
+ }
+ push @{$warnings{$component}}, $line;
+ }
+
+sub do_error()
+ {
+ $errorcount += 1;
+ if (!defined $errors{$component})
+ {
+ $errors{$component} = ();
+ }
+ push @{$errors{$component}}, $line;
+ }
+
+# Read a number of lines in the log ignoreing the content
+sub do_slurp
+{
+ my ($num_lines) =@_;
+ for (my $i = 0; $i < $num_lines; $i++)
+ {
+ <>;
+ }
+}
+
+sub print_command_summary($;$)
+ {
+ my ($command, $duration) = @_;
+
+ return if ($command eq '???' && $errorcount==0 && $warningcount==0 && $remarkscount==0 && $migrationnotescount==0 );
+
+ my $elapsed = '??:??:??';
+ if (defined($duration))
+ {
+ $totalduration += $duration;
+ my ($sec,$min,$hour) = gmtime($duration);
+ $elapsed = sprintf("%02d:%02d:%02d", $hour, $min, $sec);
+ }
+
+ printf "%-28s\t%s\t%6d\t%6d\t%6d\t%6d\n", $command, $elapsed, $errorcount, $warningcount, $remarkscount, $migrationnotescount;
+ $totalerrors += $errorcount;
+ $totalwarnings += $warningcount;
+ $totalremarks += $remarkscount;
+ $totalmigrationnotes += $migrationnotescount;
+ $errorcount = 0;
+ $warningcount = 0;
+ $remarkscount = 0;
+ $migrationnotescount = 0;
+ }
+
+printf "%-28s\t%-8s\t%-6s\t%-6s\t%-6s\t%-6s %s\n", 'Command', 'Time', 'Errors', 'Warning','Remarks','Migration-Notes';
+
+while ($line=<>)
+ {
+
+ # ===-------------------------------------------------
+ # === baseline_bldfiles
+ # ===-------------------------------------------------
+ # === bldfiles started Sat Jul 24 01:38:03 1999.
+
+ if ($line =~ /^===------/)
+ {
+ print_command_summary($command);
+ $line = <>;
+ $line =~ /=== (.*)$/;
+ $command = $1;
+ <>;
+ $line = <>;
+ $line =~ /^=== (.+) started ... ... .. (..):(..):(..)/;
+ $phase = $1;
+ $starttime = ($2*60 + $3)*60 + $4;
+ $match_phase=$phase;
+ $match_phase=~s-\\-\\\\-go;
+ next;
+ }
+
+ # === bldfiles finished Sat Jul 24 01:38:56 1999.
+ if ($line =~ /^=== $match_phase finished ... ... .. (..):(..):(..)/)
+ {
+ $duration = ($1*60 + $2)*60 + $3 - $starttime;
+ if ($duration < 0)
+ {
+ $duration += 24*60*60;
+ }
+
+ print_command_summary($command,$duration);
+ $command = '???';
+ $component = '???';
+ next;
+ }
+
+ # === resource == gdtran 036
+
+ if ($line =~ /=== $match_phase == (\S+)/)
+ {
+ $component = $1;
+ $component =~ /(.*)[\\]$/;
+ $component = $1;
+ next;
+ }
+
+ # Lines to Ignore
+ ($iStatus) =&Scanlog::CheckForIgnore($line);
+ if($iStatus)
+ {
+ next;
+ }
+
+ # migrationnotes
+ ($iStatus, $iSlurp) =&Scanlog::CheckForMigrationNotes($line);
+ if ($iStatus)
+ {
+ do_migrationnotes();
+ do_slurp($iSlurp);
+ next;
+ }
+ # Remarks
+ ($iStatus, $iSlurp) =&Scanlog::CheckForRemarks($line);
+ if ($iStatus)
+ {
+ do_remarks();
+ do_slurp($iSlurp);
+ next;
+ }
+ # Errors
+ ($iStatus) =&Scanlog::CheckForErrors($line);
+ if ($iStatus)
+ {
+ do_error();
+ next;
+ }
+
+ # Warnings
+ ($iStatus) =&Scanlog::CheckForWarnings($line);
+ if ($iStatus)
+ {
+ do_warning();
+ next;
+ }
+
+ # Things Not Built
+ ($iStatus, $iName) =&Scanlog::CheckForNotBuilt($line);
+ if ($iStatus)
+ {
+ do_error();
+ $not_built{$iName} = "$component";
+ next;
+ }
+
+ # Things missing
+ ($iStatus, $iName) =&Scanlog::CheckForMissing($line);
+ if ($iStatus)
+ {
+ do_error();
+ $missing{$iName} += 1;
+ next;
+ }
+
+}
+
+print_command_summary($command);
+print "\n";
+my ($sec,$min,$hour, $mday) = gmtime($totalduration);
+$hour+=($mday-1)*24; # to allow for builds taking longer than 24 hours!
+
+printf "%-28s\t%02d:%02d:%02d\t%6d\t%6d\t%6d\t%6d\n\n", "Total", $hour, $min, $sec, $totalerrors, $totalwarnings, $totalremarks, $totalmigrationnotes;
+
+if (scalar %errors)
+ {
+ print "Fatal Errors by Component\n";
+ $errorcount = 0;
+ foreach $component (sort keys %errors)
+ {
+ printf "%-16s\t%6d\n", $component, scalar(@{$errors{$component}});
+ $errorcount += scalar(@{$errors{$component}});
+ }
+ if ($verbose>0)
+ {
+ print "\nError details";
+ foreach $component (sort keys %errors)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$errors{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+
+if (scalar %missing)
+ {
+ print "\nDon't know how to make...\n";
+ foreach my $file (sort keys %missing)
+ {
+ printf "%d\t%s\n", $missing{$file}, $file;
+ }
+ }
+
+if (scalar %not_built)
+ {
+ print "\nThings not built...\n";
+ foreach my $file (sort keys %not_built)
+ {
+ print "MISSING: $file ($not_built{$file})\n";
+ }
+ print "\n\n";
+ }
+
+if (scalar %warnings)
+ {
+ print "\nWarnings by Component\n";
+ $warningcount = 0;
+ foreach $component (sort keys %warnings)
+ {
+ printf "%-16s\t%6d\n", $component, scalar @{$warnings{$component}};
+ }
+ if ($verbose>1)
+ {
+ print "\nWarning details";
+ foreach $component (sort keys %warnings)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$warnings{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+if (scalar %remarks)
+ {
+ print "\nRemarks by Component\n";
+ $remarkscount = 0;
+ foreach $component (sort keys %remarks)
+ {
+ printf "%-16s\t%6d\n", $component, scalar @{$remarks{$component}};
+ }
+ if ($verbose>1)
+ {
+ print "\nRemarks details";
+ foreach $component (sort keys %remarks)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$remarks{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+
+if (scalar %migrationnotes)
+ {
+ print "\nMigration Notes by Component\n";
+ $migrationnotescount = 0;
+ foreach $component (sort keys %migrationnotes)
+ {
+ printf "%-16s\t%6d\n", $component, scalar @{$migrationnotes{$component}};
+ }
+ if ($verbose>1)
+ {
+ print "\nMigration Notes Details";
+ foreach $component (sort keys %migrationnotes)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$migrationnotes{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/validate_sch12_model.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,333 @@
+#
+# Copyright (c) 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:
+#
+#! perl
+
+# Read a Schedule12 file and check the system_model items
+# against a supplied System_Definition.xml
+
+use strict;
+
+use FindBin;
+use lib ".";
+use lib "./lib";
+use lib "$FindBin::Bin";
+use lib "$FindBin::Bin/lib";
+use XML::DOM;
+use XML::DOM::ValParser;
+
+# produces the "Use of uninitialized value in concatenation (.) or string" warning
+use XML::XQL;
+use XML::XQL::DOM;
+
+# Read the command line to get the filenames
+
+sub Usage($)
+ {
+ my ($reason) = @_;
+
+ print "Usage: $reason\n" if ($reason);
+ print <<USAGE_EOF;
+
+Usage: validate_sch12_model.pl <params> [options]
+
+params:
+-s <schedule12> XML version of Schedule 12
+-m <system_model> XML version of System Model
+
+options:
+-o <whats_left> XML file showing unreferenced
+ parts of the System Model
+-r Remove matched objects from -o output
+-c <cbr_mapping> Tab separated file showing the Schedule 12
+ component for each MRP file
+
+USAGE_EOF
+ exit(1);
+ }
+
+use Getopt::Long;
+
+my $schedule12file = "Symbian_OS_v9.1_Schedule12.xml";
+my $systemmodelfile = "System_Definition.xml";
+my $whatsleftfile = "";
+my $remove = 0;
+my $cbrmappingfile = "";
+
+Usage("Bad arguments") unless GetOptions(
+ 's=s' => \$schedule12file,
+ 'm=s' => \$systemmodelfile,
+ 'o=s' => \$whatsleftfile,
+ 'r' => \$remove,
+ 'c=s' => \$cbrmappingfile);
+
+Usage("Too many arguments") if (scalar @ARGV > 0);
+Usage("Cannot find $schedule12file") if (!-f $schedule12file);
+Usage("Cannot find $systemmodelfile") if (!-f $systemmodelfile);
+
+
+# Don't print info messages
+sub my_fail
+ {
+ my $code = shift;
+ if ($code < 300)
+ {
+ XML::Checker::print_error ($code, @_);
+ }
+ }
+$XML::Checker::FAIL = \&my_fail;
+
+# Load the XML documents
+my %expat_options =
+ (
+ KeepCDATA => 1,
+ Handlers => [],
+ );
+
+my $xmlParser = new XML::DOM::ValParser(%expat_options);
+XML::DOM::ignoreReadOnly(1);
+
+my $sch12path = ".";
+my $modelpath = ".";
+$sch12path = $1 if ($schedule12file =~ /^(.+)\\[^\\]+$/);
+$modelpath = $1 if ($systemmodelfile =~ /^(.+)\\[^\\]+$/);
+$xmlParser->set_sgml_search_path($sch12path, $modelpath);
+
+my $modelXML = $xmlParser->parsefile ($systemmodelfile);
+my $sch12XML = $xmlParser->parsefile ($schedule12file);
+
+# Collect the Schedule12 entries, checking for duplicates
+
+my %sch12refs;
+my %componenttype;
+my ($sch12) = $sch12XML->getElementsByTagName("Schedule12");
+Usage("No <Schedule12> in $schedule12file ?") if (!defined $sch12);
+
+my @children = $sch12->getChildNodes;
+foreach my $child (@children)
+ {
+ next if ($child->getNodeTypeName ne "ELEMENT_NODE");
+ my $tagname = $child->getTagName;
+ next if ($tagname eq "footnote");
+ my $component = $child->getAttribute("name");
+ $componenttype{$component} = $tagname;
+
+ my @entries = $child->getElementsByTagName("system_model");
+ if (scalar @entries == 0)
+ {
+ print STDERR "No system_model entries in $component\n";
+ next;
+ }
+
+ foreach my $entry (@entries)
+ {
+ my $name = $entry->getAttribute("entry");
+ if (defined $sch12refs{$name})
+ {
+ print STDERR "$name occurs in $sch12refs{$name} and $component\n";
+ }
+ else
+ {
+ $sch12refs{$name} = $component;
+ }
+ }
+ }
+
+# Find the Schedule12 entries in the XML file
+
+my %modelnames;
+sub match_names($); # declare the prototype for recursive call
+sub match_names($)
+ {
+ my ($node) = @_;
+
+ my @children = $node->getChildNodes;
+ foreach my $child (@children)
+ {
+ if ($child->getNodeTypeName ne "ELEMENT_NODE")
+ {
+ # text and comments don't count
+ next;
+ }
+ my $tagname = $child->getTagName;
+ if ($tagname eq "unit")
+ {
+ # units are detail inside the model, so they don't count
+ next;
+ }
+ my $name = $child->getAttribute("name");
+ if ($name)
+ {
+ if (defined $modelnames{$name})
+ {
+ print STDERR "Name $name occurs more than once in the System Model\n";
+ }
+ $modelnames{$name} = $tagname;
+
+ if (defined $sch12refs{$name})
+ {
+ $child->setAttribute("MATCHED", $sch12refs{$name});
+ $modelnames{$name} = "1";
+ }
+ }
+ match_names($child);
+ }
+ }
+
+my ($model) = $modelXML->getElementsByTagName("systemModel");
+
+match_names($model);
+
+# Report on the accuracy of Schedule 12
+print STDERR "\n";
+my @allnames = ();
+my $unmatched = 0;
+foreach my $name (sort keys %sch12refs)
+ {
+ next if (defined $modelnames{$name});
+ push @allnames, "$name\t(Sch12 $sch12refs{$name})\n";
+ print STDERR "No match for $name (associated with $sch12refs{$name})\n";
+ $unmatched += 1;
+ }
+if ($unmatched == 0)
+ {
+ print STDERR "All Schedule 12 entries matched in System Model\n";
+ }
+else
+ {
+ printf STDERR "%d Schedule 12 entry references not matched (from a total of %d)\n", $unmatched, scalar keys %sch12refs;
+ }
+
+# Remove the matched elements to leave the unmatched parts,
+# and accumulate the MRP files for each Sch12 component
+
+my %sch12bymrp;
+my %locationbymrp;
+
+sub list_mrps($$$); # declare the prototype for recursive call
+sub list_mrps($$$)
+ {
+ my ($node,$location,$sch12name) = @_;
+ my @children = $node->getChildNodes;
+ my $nodename = $node->getAttribute("name");
+
+ my $sublocation = $nodename;
+ $sublocation = "$location/$nodename" if ($location ne "");
+
+ foreach my $child (@children)
+ {
+ if ($child->getNodeTypeName ne "ELEMENT_NODE")
+ {
+ # text and comments don't count
+ next;
+ }
+ my $tagname = $child->getTagName;
+ if ($tagname eq "unit" || $tagname eq "package" || $tagname eq "prebuilt")
+ {
+ # these elements have the mrp information, but no substructure
+ my $mrp = $child->getAttribute("mrp");
+ $mrp = $1 if ($mrp =~ /\\([^\\]+)\.mrp$/i);
+ $sch12bymrp{$mrp} = $sch12name;
+ $locationbymrp{$mrp} = "$location\t$nodename";
+ next;
+ }
+ my $submatch = $child->getAttribute("MATCHED");
+ if ($submatch)
+ {
+ list_mrps($child,$sublocation,$submatch);
+ }
+ else
+ {
+ list_mrps($child,$sublocation,$sch12name);
+ }
+ }
+ }
+
+sub delete_matched($$); # declare the prototype for recursive call
+sub delete_matched($$)
+ {
+ my ($node, $location) = @_;
+ my $nodename = $node->getAttribute("name");
+
+ my $sublocation = $nodename;
+ $sublocation = "$location/$nodename" if ($location ne "");
+
+ my @children = $node->getChildNodes;
+ return 0 if (scalar @children == 0);
+ my $now_empty = 1;
+ foreach my $child (@children)
+ {
+ if ($child->getNodeTypeName ne "ELEMENT_NODE")
+ {
+ # text and comments don't count
+ next;
+ }
+ my $sch12name = $child->getAttribute("MATCHED");
+ if ($sch12name)
+ {
+ list_mrps($child, $sublocation, $sch12name);
+ $node->removeChild($child) if ($remove);
+ }
+ else
+ {
+ if (delete_matched($child,$sublocation) == 1)
+ {
+ # Child was empty and can be removed
+ $node->removeChild($child) if ($remove);
+ }
+ else
+ {
+ list_mrps($child, $sublocation, "*UNREFERENCED*");
+ $now_empty = 0; # something left in due to this child
+ }
+ }
+ }
+ return $now_empty;
+ }
+
+# scan the tagged model, recording various details as a side-effect
+
+my $allgone = delete_matched($model,"");
+
+if ($whatsleftfile ne "")
+ {
+ if ($allgone)
+ {
+ print STDERR "System Model is completely covered by Schedule 12\n";
+ }
+ else
+ {
+ $modelXML->normalize;
+ $modelXML->printToFile($whatsleftfile);
+ print STDERR "Remains of System Model written to $whatsleftfile\n";
+ }
+ }
+
+if ($cbrmappingfile ne "")
+ {
+ $componenttype{"*UNREFERENCED*"} = "??";
+ open CBRMAP, ">$cbrmappingfile" or die("Unable to write to $cbrmappingfile: $!\n");
+ foreach my $mrp (sort keys %sch12bymrp)
+ {
+ my $component = $sch12bymrp{$mrp};
+ my $comptype = $componenttype{$component};
+ my $location = $locationbymrp{$mrp};
+ print CBRMAP "$mrp\t$location\t$component\t$comptype\n";
+ }
+ close CBRMAP;
+ print STDERR "MRP -> Schedule 12 mapping written to $cbrmappingfile\n";
+ }
+
+exit 0;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/commonbldutils/group/bld.inf Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,23 @@
+// 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:
+//
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_EXPORTS
+
+..\sbsv2htmlscanlog\sbsv2htmlscanlog.pl \epoc32\tools\sbsv2htmlscanlog.pl
+..\sbsv2htmlscanlog\sbsv2scanlog.pm \epoc32\tools\sbsv2scanlog.pm
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/commonbldutils/group/tools_commonbldutils.mrp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 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:
+#
+
+component tools_commonbldutils
+
+source \sf\os\buildtools\bldsystemtools\commonbldutils\
+exports \sf\os\buildtools\bldsystemtools\commonbldutils\group
+
+ipr T
+
+notes_source \component_defs\release.src
+
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/commonbldutils/sbsv2htmlscanlog/sbsv2htmlscanlog.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,1367 @@
+# 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:
+#
+
+# summarise an automated build log
+use strict;
+use Getopt::Long;
+use HTML::Entities;
+use Carp;
+use File::stat;
+use FindBin; # for FindBin::Bin
+
+# Add the directory contain this perl script into the path to find modules
+use lib $FindBin::Bin;
+use sbsv2scanlog;
+
+# For Date calculations
+use lib "$FindBin::Bin/../lib"; # For running in source
+use lib "$FindBin::Bin/build/lib"; # For running in epoc32\tools
+
+use XML::Parser;
+
+# Variables
+my $line;
+my $iSlurp;
+my %Components;
+my %Commands;
+my $component;
+my $command;
+my %errors;
+my %warnings;
+my %remarks;
+my %migrationNotes;
+my %AdvisoryNotes;
+my %CmdErrors;
+my %CmdWarnings;
+my %CmdRemarks;
+my %CmdMigrationNotes;
+my %CmdAdvisoryNotes;
+my %missing;
+my %not_built;
+my $starttime;
+my $duration;
+my $currentfiletime;
+my $warningcount;
+my $errorcount;
+my $remarkcount;
+my $migrationNoteCount;
+my $AdvisoryNoteCount;
+my ($iStatus, $iName);
+my $warningmigrated;
+my %htmlColours=(
+"errors" =>"#ff0000",
+"warnings" =>"#fff000",
+"remarks" =>"#ffccff",
+"migrationNotes" =>"#ffcc99",
+"AdvisoryNotes" => "#ffa500"
+);
+my $MigrateNextExitCode = 0;
+my $inRecipe = 0;
+my $RetryInProgress = 0;
+
+# Package variables - these can also be accessed the from package "SubHandlers"
+use vars qw($component $command %Components %Commands);
+our $iLog;
+
+my $Dsec;
+
+# Main section
+
+my ($iOutput, $iTitle, $iVerbose, @iLogs) =&ProcessCommandLine();
+
+# Open Output file
+ open (HTML, ">$iOutput") or die "Couldn't open $iOutput for writing: $!\n";
+
+
+# Parse each log File
+foreach $iLog (@iLogs) # parses through all logs
+{
+ # Check the log file exists
+ if (-e $iLog)
+ {
+ # Process the logs
+ &ProcessLog();
+ } else {
+ print "WARNING: $iLog does not exist\n";
+ }
+
+
+}
+
+&PrintResults($iTitle);
+
+# Print HTML Footer
+&PrintHTMLFooter();
+
+
+# ProcessLog
+#
+# Inputs
+# $iLog - Logfile name
+#
+# Outputs
+#
+# Description
+# This function processes the commandline
+sub ProcessLog()
+{
+ #Clear current file time as starting processing a new log
+ $currentfiletime = 0;
+
+ print "Processing: $iLog\n";
+
+ my $iParser = XML::Parser->new(Style => 'Subs', Pkg => 'MySubs' , ErrorContext => 2,
+ Handlers => {Char => \&char_handler});
+
+ # Supply the XML Parser the data source
+ eval {
+ $iParser->parsefile($iLog);
+ };
+
+ #Set current component and command to special values to record log processing errors/warnings/etc
+ $component = 'sbsv2scanlog';
+ $command = 'sbsv2scanlog';
+
+ #Check for parse errors
+ if ($@)
+ {
+ #Generate error in log as the file time stamps are duff
+ &do_error($iLog, "No_linenumer", "XML Parse error:$@");
+ $Components{$component} = '0';
+ $Commands{$command} ='0';
+ }
+
+ # Calculate the Total Duration
+ # $currentfiletime is set from the info tags at the end of the log.
+ $duration += $currentfiletime;
+
+ #Clear current component and command
+ $component = '';
+ $command = '';
+}
+
+
+# PrintResults
+#
+# Inputs
+# $iTitle (Title for Log file)
+#
+# Outputs
+#
+# Description
+# This function prints all the data as HTML
+sub PrintResults
+{
+ my ($iTitle) = @_;
+
+ my $title;
+
+ # Print Heading of Log File
+ my $heading ="Overall";
+ print HTML qq{<h1>$iTitle</h1>\n};
+ print HTML qq{<h2>$heading</h2>\n};
+
+ # Calculate the total number of remarks messages
+ $remarkcount = 0;
+ foreach $component (sort {lc $a cmp lc $b} keys %remarks)
+ {
+ $remarkcount += scalar(@{$remarks{$component}});
+ }
+ # Calculate the Total number of errors
+ $errorcount = 0;
+ foreach $component (sort {lc $a cmp lc $b} keys %errors)
+ {
+ $errorcount += scalar(@{$errors{$component}});
+ }
+ # Calculate the total number of warnings
+ $warningcount = 0;
+ foreach $component (sort {lc $a cmp lc $b} keys %warnings)
+ {
+ $warningcount += scalar(@{$warnings{$component}});
+ }
+
+ # Calculate the total number of migration notes
+ $migrationNoteCount=0;
+ foreach $component (sort {lc $a cmp lc $b} keys %migrationNotes)
+ {
+ $migrationNoteCount += scalar(@{$migrationNotes{$component}});
+ }
+
+ # Calculate the total number of Advisory notes
+ $AdvisoryNoteCount=0;
+ foreach $component (sort {lc $a cmp lc $b} keys %AdvisoryNotes)
+ {
+ $AdvisoryNoteCount += scalar(@{$AdvisoryNotes{$component}});
+ }
+
+ # Start the Table
+ &StartHTMLTable();
+
+ # Print the Totals
+ &HTMLTableRow($heading,"Total", $duration, $errorcount, $warningcount, $AdvisoryNoteCount, $remarkcount, $migrationNoteCount);
+
+ # End the Table
+ print HTML qq{</table>\n};
+
+
+
+ # By Component
+ print HTML qq{<h2>By Component</h2>\n};
+
+ # Start the Table
+ $title="Component";
+ &StartHTMLTable($title);
+
+ # Print the by Component Data
+ foreach $component (sort {lc $a cmp lc $b} keys %Components)
+ {
+ # Calculate the number errors and warnings
+ my $totalerrors;
+ my $totalwarnings;
+ my $totalremarks;
+ my $totalMigrationNotes;
+ my $totalAdvisoryNotes;
+ if (!defined $remarks{$component})
+ {
+ # No Remarks were recorded, set total to zero
+ $totalremarks = 0;
+ } else {
+ $totalremarks = scalar(@{$remarks{$component}});
+ }
+ if (!defined $errors{$component})
+ {
+ # No errors were recorded, set total to zero
+ $totalerrors = 0;
+ } else {
+ $totalerrors = scalar(@{$errors{$component}});
+ }
+ if (!defined $warnings{$component})
+ {
+ # No Warnings were recorded, set total to zero
+ $totalwarnings = 0;
+ } else {
+ $totalwarnings = scalar(@{$warnings{$component}});
+ }
+
+ if (!defined $migrationNotes{$component})
+ {
+ # No MigrationNotes were recorded, set total to zero
+ $totalMigrationNotes=0;
+ }
+ else
+ {
+ $totalMigrationNotes = scalar(@{$migrationNotes{$component}});
+ }
+
+ if (!defined $AdvisoryNotes{$component})
+ {
+ # No AdvisoryNotes were recorded, set total to zero
+ $totalAdvisoryNotes=0;
+ }
+ else
+ {
+ $totalAdvisoryNotes = scalar(@{$AdvisoryNotes{$component}});
+ }
+
+
+
+ # Print the Table Row
+ &HTMLTableRow($title,$component, $Components{$component}, $totalerrors, $totalwarnings, $totalAdvisoryNotes,$totalremarks, $totalMigrationNotes);
+
+ }
+
+ # End the Table
+ print HTML qq{</table>\n};
+
+ # By Command
+ print HTML qq{<h2>By Command</h2>\n};
+
+ # Start the Table
+ $title="Command";
+ &StartHTMLTable($title);
+
+ # Print the by Command Data
+ foreach $command (sort {lc $a cmp lc $b} keys %Commands)
+ {
+ # Calculate the number errors, warnings and remarks
+ my $totalerrors;
+ my $totalwarnings;
+ my $totalremarks;
+ my $totalMigrationNotes;
+ my $totalAdvisoryNotes;
+ if (!defined $CmdRemarks{$command})
+ {
+ # No Remarks were recorded, set total to zero
+ $totalremarks = 0;
+ } else {
+ $totalremarks = scalar(@{$CmdRemarks{$command}});
+ }
+ if (!defined $CmdErrors{$command})
+ {
+ # No errors were recorded, set total to zero
+ $totalerrors = 0;
+ } else {
+ $totalerrors = scalar(@{$CmdErrors{$command}});
+ }
+ if (!defined $CmdWarnings{$command})
+ {
+ # No Warnings were recorded, set total to zero
+ $totalwarnings = 0;
+ } else {
+ $totalwarnings = scalar(@{$CmdWarnings{$command}});
+ }
+
+ if (!defined $CmdMigrationNotes{$command})
+ {
+ # No MigrationNotes were recorded, set total to zero
+ $totalMigrationNotes=0;
+ }
+ else
+ {
+ $totalMigrationNotes = scalar(@{$CmdMigrationNotes{$command}});
+ }
+
+ if (!defined $CmdAdvisoryNotes{$command})
+ {
+ # No AdvisoryNotes were recorded, set total to zero
+ $totalAdvisoryNotes=0;
+ }
+ else
+ {
+ $totalAdvisoryNotes = scalar(@{$CmdAdvisoryNotes{$command}});
+ }
+
+ # Print the Table Row
+ &HTMLTableRow($title,$command, $Commands{$command}, $totalerrors, $totalwarnings, $totalAdvisoryNotes, $totalremarks, $totalMigrationNotes);
+ }
+
+
+ # End the Table
+ print HTML qq{</table>\n};
+
+ # Print Things Missing
+ if (scalar %missing)
+ {
+ my $count = scalar keys %missing;
+ print HTML qq{<h2>Things Missing ($count)</h2>\n};
+ print HTML "Don't know how to make...\n";
+ foreach my $file (sort {lc $a cmp lc $b} keys %missing)
+ {
+ printf HTML "%d\t%s</BR>\n", $missing{$file}, $file;
+ }
+ }
+ print HTML qq{</BR>\n};
+
+ # Print Things Not Built
+ if (scalar %not_built)
+ {
+ my $count = scalar keys %not_built;
+ print HTML qq{<h2>Things Not Built ($count)</h2>\n};
+ foreach my $file (sort {lc $a cmp lc $b} keys %not_built)
+ {
+ print HTML "MISSING: $file ($not_built{$file})</BR>\n";
+ }
+ }
+
+
+ # Print the Actual Errors by Component
+ if ($iVerbose > 0)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %errors))
+ {
+ print HTML qq{<h2><a name="errorsByOverall_Total">Error Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %errors)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$errors{$component}};
+ print HTML qq{<h3><a name="errorsByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$errors{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Warning by Component
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %warnings))
+ {
+ print HTML qq{<h2><a name="warningsByOverall_Total">Warning Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %warnings)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$warnings{$component}};
+ print HTML qq{<h3><a name="warningsByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$warnings{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Advisory Notes by Component
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %AdvisoryNotes))
+ {
+ print HTML qq{<h2><a name="AdvisoryNotesByOverall_Total">Advisory Note Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %AdvisoryNotes)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$AdvisoryNotes{$component}};
+ print HTML qq{<h3><a name="AdvisoryNotesByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$AdvisoryNotes{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Remarks by Component
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %remarks))
+ {
+ print HTML qq{<h2><a name="remarksByOverall_Total">Remarks Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %remarks)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$remarks{$component}};
+ print HTML qq{<h3><a name="remarksByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$remarks{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Migration Notes by Component
+if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %migrationNotes))
+ {
+ print HTML qq{<h2><a name="migrationNotesByOverall_Total">Migration Note Details by Component</a></h2>\n};
+ foreach $component (sort {lc $a cmp lc $b} keys %migrationNotes)
+ {
+ my ($HTML) = $component;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ my $count = scalar @{$migrationNotes{$component}};
+ print HTML qq{<h3><a name="migrationNotesByComponent_$HTML">$HTML</a> ($count)</h3>\n};
+ foreach $line (@{$migrationNotes{$component}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Errors by Command
+ if ($iVerbose > 0)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdErrors))
+ {
+ print HTML qq{<h2>Error Details by Command</h2>\n};
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdErrors)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="errorsByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdErrors{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Warning by Command
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some warnings
+ if (scalar(keys %CmdWarnings))
+ {
+ print HTML qq{<h2>Warning Details by Command</h2>\n};
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdWarnings)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="warningsByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdWarnings{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Advisory Notes by Command
+ if ($iVerbose >1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdAdvisoryNotes))
+ {
+ print HTML qq{<h2>Advisory Note Details by Command</h2>\n};
+
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdAdvisoryNotes)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="AdvisoryNotesByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdAdvisoryNotes{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n}
+ }
+ }
+ }
+
+ # Print the Actual Remarks by Command
+ if ($iVerbose > 1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdRemarks))
+ {
+ print HTML qq{<h2>Remarks Details by Command</h2>\n};
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdRemarks)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="remarksByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdRemarks{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n};
+ }
+ }
+ }
+
+ # Print the Actual Migration Notes by Command
+ if ($iVerbose >1)
+ {
+ # Only Print the header if there are some errors
+ if (scalar(keys %CmdMigrationNotes))
+ {
+ print HTML qq{<h2>Migration Note Details by Command</h2>\n};
+
+ foreach $command (sort {lc $a cmp lc $b} keys %CmdMigrationNotes)
+ {
+ my ($HTML) = $command;
+ $HTML =~ s/\s+$//;
+ encode_entities($HTML);
+ print HTML qq{<h3><a name="migrationNotesByCommand_$HTML">$HTML</a></h3>\n};
+ foreach $line (@{$CmdMigrationNotes{$command}})
+ {
+ encode_entities($line);
+ print HTML $line.qq{</BR>};
+ }
+ print HTML qq{</BR>\n}
+ }
+ }
+ }
+
+
+}
+
+
+# StartHTMLTable
+#
+# Inputs
+# $iC1Title (Column 1 Title)
+#
+# Outputs
+#
+# Description
+# This function prints the start of the HTML Table
+sub StartHTMLTable
+{
+ my ($iC1Title) = @_;
+
+ if ($iC1Title eq '')
+ {
+ $iC1Title = " ";
+ } else {
+ encode_entities($iC1Title);
+ }
+
+ # Start the Table
+ print HTML qq{<table border="1" cellpadding="0" cellspacing="0" width="100%">\n};
+
+ # Print the Header Row
+ print HTML qq{<tr>\n};
+ print HTML qq{\t<th width="50%">$iC1Title</th>\n};
+ print HTML qq{\t<th width="15%">Time</th>\n};
+ print HTML qq{\t<th width="8%">Errors</th>\n};
+ print HTML qq{\t<th width="8%">Warnings</th>\n};
+ print HTML qq{\t<th width="8%">Advisory Notes</th>\n};
+ print HTML qq{\t<th width="8%">Remarks</th>\n};
+ print HTML qq{\t<th width="8%">Migration Notes</th>\n};
+
+ print HTML qq{</tr>\n};
+}
+
+# HTMLTableCell
+#
+# Inputs
+# $iType (errors,warnings,remarks,migration_notes)
+# $iCount (number of errors)
+# $iLink (empty string or linktype)
+#
+# Outputs
+# Returns HTML table data element with appropriate link & background color
+#
+# Description
+# Constructs HTML table element - used by HTMLTableRow to handle the formatting
+# of the data cells, complete with colouring and links where appropriate.
+sub HTMLTableCell
+{
+ my ($iType,$iCount,$iLink)= @_;
+ my $td = qq{td width="8%" align="center"}; # implied by the TH elements already?
+ if ($iCount != 0)
+ {
+ $td = "$td BGCOLOR=$htmlColours{$iType}";
+ }
+ if ($iLink eq "" || $iCount == 0)
+ {
+ return qq{<$td>$iCount</td>};
+ }
+ $iLink = $iType."By".$iLink;
+ return qq{<$td><a href="#$iLink">$iCount</a></td>};
+}
+
+# HTMLTableRow
+#
+# Inputs
+# $iTitle (Need to differentiate between command and component to provide correct anchors)
+# $iC1Data(Column 1 Data)
+# $iC2Data(Column 2 Data) (Time in seconds)
+# $iC3Data(Column 3 Data) (Number of errors)
+# $iC4Data(Column 4 Data) (Number of warnings)
+# $iC5Data(Column 5 Data) (Number of Advisory notes )
+# $iC6Data(Column 6 Data) (Number of remarks )
+# $iC7Data(Column 7 Data) (Number of migration notes )
+#
+# Outputs
+#
+# Description
+# This function prints a line of the HTML Table
+sub HTMLTableRow
+{
+ my ($iTitle,$iC1Data, $iC2Data, $iC3Data, $iC4Data,$iC5Data, $iC6Data, $iC7Data) = @_;
+
+ #print "$iC2Data\n";
+
+ # Convert the seconds in hh:mm:ss format
+ $iC2Data = &ConvertSeconds($iC2Data);
+
+ # HTML encode the text
+ encode_entities($iC1Data);
+ encode_entities($iC2Data);
+ encode_entities($iC3Data);
+ encode_entities($iC4Data);
+ encode_entities($iC5Data);
+ encode_entities($iC6Data);
+ encode_entities($iC7Data);
+
+ my $linkname = "$iTitle"."_"."$iC1Data";
+
+ # Print the Row, including summary in a script comment
+ print HTML qq{<tr>\n};
+ print HTML qq{<!--\t$linkname\t$iC2Data\t$iC3Data\t$iC4Data\t$iC5Data\t$iC6Data\t$iC7Data\t-->\n};
+ print HTML qq{\t<td width="50%">$iC1Data</td>\n};
+ print HTML qq{\t<td width="15%" align="center">$iC2Data</td>\n};
+
+ print HTML "\t",&HTMLTableCell("errors", $iC3Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("warnings",$iC4Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("AdvisoryNotes", $iC5Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("remarks", $iC6Data,$linkname),"\n";
+ print HTML "\t",&HTMLTableCell("migrationNotes", $iC7Data,$linkname),"\n";
+
+
+ print HTML qq{</tr>\n};
+}
+
+# ConvertSeconds
+#
+# Inputs
+# $iSeconds
+#
+# Outputs
+# $iString (seconds in hh:mm:ss)
+#
+# Description
+# This function processes the commandline
+sub ConvertSeconds
+{
+ my ($iSeconds) = @_;
+
+ my ($iString);
+ my ($ih) = int($iSeconds/3600);
+ my ($im) = int(($iSeconds-($ih*3600))/60);
+ my ($is) = $iSeconds-($ih*3600)-($im*60);
+ # Print the correct format if the data is HiRes (has a decimal point in the string)
+ if ($is =~ /\d+\.\d+/)
+ {
+ $iString = sprintf "%d:%02d:%06.3f", $ih, $im, $is;
+ } else {
+ $iString = sprintf "%d:%02d:%02d", $ih, $im, $is;
+ }
+ return $iString;
+}
+
+# ProcessCommandLine
+#
+# Inputs
+#
+# Outputs
+# $iOutput (Output filename)
+# $iVerbose (Verbose Level)
+# $iLogs (Log files to process)
+#
+# Description
+# This function processes the commandline
+
+sub ProcessCommandLine {
+ my ($iHelp, @iLogs, $iOutput, $iTitle, $iVerbose);
+ GetOptions('h' => \$iHelp, 'l=s' =>\@iLogs, 'o=s' => \$iOutput, 't=s' => \$iTitle, 'v+' => \$iVerbose);
+
+ if (($iHelp) || (!defined @iLogs) || (!defined $iOutput))
+ {
+ Usage();
+ } elsif (-e $iOutput) {
+ die "$iOutput already exists";
+ }
+
+ foreach my $iLog (@iLogs)
+ {
+ warn "$iLog does not exist" if (! -e $iLog);
+ }
+
+ # Set default title
+ if ($iTitle eq '')
+ {
+ $iTitle = "Log File Summary";
+ }
+
+ return($iOutput, $iTitle, $iVerbose, @iLogs);
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage {
+ print <<USAGE_EOF;
+
+ Usage: Scanlog.pl [options]
+
+ options:
+
+ -h help
+ -l Log file to scan [Multiple allowed]
+ -o Output file
+ -v Increments Verbose level [Maximum Level = 2]
+ -t Title to add to the Summary
+
+USAGE_EOF
+ exit 1;
+}
+
+# PrintHTMLHeader
+#
+# Inputs
+# $iTitle (Title for Log file)
+#
+# Outputs
+#
+# Description
+# This function print the HTML Header
+
+sub PrintHTMLHeader {
+ my ($iTitle) = @_;
+
+ print HTML <<HTML_EOF;
+<HTML>
+<HEAD>
+<TITLE>$iTitle</TITLE>
+</HEAD>
+<BODY BGCOLOR="FFFFFF">
+<FONT FACE="Courier New">
+HTML_EOF
+}
+
+# PrintHTMLFooter
+#
+# Inputs
+#
+# Outputs
+#
+# Description
+# This function print the HTML Footer
+
+sub PrintHTMLFooter {
+ print HTML <<HTML_EOF;
+</FONT>
+</BODY>
+</HTML>
+HTML_EOF
+}
+
+sub do_remarks()
+{
+ my ($iLog, $iLineNumber, $line)= @_;
+ # Store remarks by Command
+ if (!defined $CmdRemarks{$command})
+ {
+ $CmdRemarks{$command} = ();
+ }
+ push @{$CmdRemarks{$command}}, "$iLog:$iLineNumber>$line";
+
+ # Store remarks by Component
+ if (!defined $remarks{$component})
+ {
+ $remarks{$component} = ();
+ }
+ push @{$remarks{$component}}, "$iLog:$iLineNumber>$line";
+}
+
+sub do_warning()
+{
+ my ($iLog, $iLineNumber, $line)= @_;
+ # Store warning by Command
+ if (!defined $CmdWarnings{$command})
+ {
+ $CmdWarnings{$command} = ();
+ }
+ push @{$CmdWarnings{$command}}, "$iLog:$iLineNumber>$line";
+
+ # Store warning by Component
+ if (!defined $warnings{$component})
+ {
+ $warnings{$component} = ();
+ }
+ push @{$warnings{$component}}, "$iLog:$iLineNumber>$line";
+}
+
+
+sub do_migrationNotes()
+ {
+ my ($iLog, $iLineNumber, $line)= @_;
+ # Store Migration Notes by command
+ if (!defined $CmdMigrationNotes{$command})
+ {
+ $CmdMigrationNotes{$command} = ();
+ }
+ push @{$CmdMigrationNotes{$command}}, "$iLog:$iLineNumber>$line";
+
+ # Store Migration Notes by Component
+ if (!defined $migrationNotes{$component})
+ {
+ $migrationNotes{$component} = ();
+ }
+ push @{$migrationNotes{$component}}, "$iLog:$iLineNumber>$line";
+
+ }
+
+sub do_AdvisoryNotes()
+ {
+ my ($iLog, $iLineNumber, $line)= @_;
+ # Store Advisory Notes by command
+ if (!defined $CmdAdvisoryNotes{$command})
+ {
+ $CmdAdvisoryNotes{$command} = ();
+ }
+ push @{$CmdAdvisoryNotes{$command}}, "$iLog:$iLineNumber>$line";
+
+ # Store Advisory Notes by Component
+ if (!defined $AdvisoryNotes{$component})
+ {
+ $AdvisoryNotes{$component} = ();
+ }
+ push @{$AdvisoryNotes{$component}}, "$iLog:$iLineNumber>$line";
+
+}
+
+
+sub do_error()
+{
+ my ($iLog, $iLineNumber, $line)= @_;
+ # Store Errors by Command
+ if (!defined $CmdErrors{$command})
+ {
+ $CmdErrors{$command} = ();
+ }
+ push @{$CmdErrors{$command}}, "$iLog:$iLineNumber>$line";
+
+ # Store Errors by Component
+ if (!defined $errors{$component})
+ {
+ $errors{$component} = ();
+ }
+ push @{$errors{$component}}, "$iLog:$iLineNumber>$line";
+}
+
+# Read a number of lines in the log ignoreing the content
+sub do_slurp()
+{
+ my ($num_lines) =@_;
+ for (my $i = 0; $i < $num_lines; $i++)
+ {
+ ;
+ }
+}
+
+sub char_handler
+{
+ my ($iExpat, $data) = @_;
+ my ($iStatus);
+
+ # Now Buffer it up for context data
+ $iExpat->{cdata_buffer} .= $data;
+
+ #Delay parsing until end of line is found or close xml tag or end of recipe
+ return if ($inRecipe);
+ if (!($data =~ /\n$/))
+ {
+ #Put in the line buffer until the rest of the line comes in or an element end causes a parseline call
+ $iExpat->{line_buffer} .= $data;
+ return;
+ } else {
+ #line ends in a \n
+ #Add the $data to buffer(normally empty) and parse
+ &parseline($iExpat,$iExpat->{line_buffer}.$data);
+ #Empty the line buffer
+ $iExpat->{line_buffer} ='';
+ }
+}
+
+sub parseline
+{
+ my ($iExpat, $data,$iLineNumber) = @_;
+ if (!($iLineNumber =~ /\d+/))
+ {
+ #If no linenumber is passed the set to the current line in the parse
+ $iLineNumber = $iExpat->current_line;
+ }
+ my $CheckForComponentExitCodesToMigrate = 0;
+
+ #Set some defaults if $component and $command are empty
+ if ($component eq '')
+ {
+ $component = "anonymous component";
+ $Components{$component} = '0';
+
+ }
+ if ($command eq '')
+ {
+ $command = "anonymous command";
+ $Commands{$command} ='0';
+ }
+
+ # Lines to Ignore
+ $iStatus =&sbsv2scanlog::CheckForIgnore($data);
+ if($iStatus)
+ {
+ return;
+ }
+
+ # AdvisoryNotes
+ ($iStatus) =&sbsv2scanlog::CheckForAdvisoryNotes($data);
+ if ($iStatus)
+ {
+ if ($RetryInProgress)
+ {
+ #A retry is in progress so downgrade to a remark
+ &do_remarks($iLog, $iLineNumber, $data);
+ return;
+ } else {
+ &do_AdvisoryNotes($iLog, $iLineNumber, $data);
+ return;
+ }
+ }
+
+
+ #CheckForComponentExitCodesToMigrate
+ $CheckForComponentExitCodesToMigrate = &sbsv2scanlog::CheckForComponentExitCodesToMigrate($data,$component);
+ if ($CheckForComponentExitCodesToMigrate )
+ {
+ $MigrateNextExitCode = 1;
+ }
+
+ # Migration Notes
+ $iStatus = &sbsv2scanlog::CheckForMigrationNotes($data,$component);
+ if ($iStatus)
+ {
+ if ($RetryInProgress)
+ {
+ #A retry is in progress so downgrade to a remark
+ &do_remarks($iLog, $iLineNumber, $data);
+ return;
+ } else {
+ &do_migrationNotes($iLog, $iLineNumber, $data);
+ #Setup global $warningmigrated flag so warning_ function can ignore the warning element that this migration note was in
+ $warningmigrated = 1;
+ return;
+ }
+ }
+
+ # Remarks
+ ($iStatus) =&sbsv2scanlog::CheckForRemarks($data);
+ if ($iStatus)
+ {
+ &do_remarks($iLog, $iLineNumber, $data);
+ return;
+ }
+
+ # Errors
+ ($iStatus) =&sbsv2scanlog::CheckForErrors($data);
+ if ($iStatus)
+ {
+ if ($RetryInProgress)
+ {
+ #A retry is in progress so downgrade to a remark
+ &do_remarks($iLog, $iLineNumber, $data);
+ return;
+ } else {
+ &do_error($iLog, $iLineNumber, $data);
+ return;
+ }
+ }
+
+
+ # Warnings
+ ($iStatus) =&sbsv2scanlog::CheckForWarnings($data);
+ if ($iStatus)
+ {
+ if ($RetryInProgress)
+ {
+ #A retry is in progress so downgrade to a remark
+ &do_remarks($iLog, $iLineNumber, $data);
+ return;
+ } else {
+ &do_warning($iLog, $iLineNumber, $data);
+ return;
+ }
+ }
+ return;
+}
+
+{
+ package MySubs;
+ # recipe
+ #
+ # Inputs
+ #
+ # Outputs
+ #
+ # Description
+ # This function handles the recipe tag in the XML
+ sub recipe
+ {
+ my $iExpat = shift; my $iElement = shift;
+
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+
+ #Set global flag to change char data handling to the end of the recipe
+ #So that errors/warnings/migration notes can be down grade to remarks
+ #if a retry is signalled
+ $inRecipe = 1;
+
+ my (%iAttr);
+
+ # Read the attributes
+ while (@_) {
+ my $iAtt = shift;
+ my $iVal = shift;
+ $iAttr{$iAtt} = $iVal;
+ }
+
+ #print "recipe name =".$iAttr{'name'}."\n";
+ if ($iAttr{'component'} ne '')
+ {
+ $component = $iAttr{'component'};
+ } else {
+ #Try using the bld.inf as unique component identifier
+ $component = $iAttr{'bldinf'};
+ }
+
+ $command = $iAttr{'name'}." ".$iAttr{'platform'};
+ }
+
+ sub recipe_
+ {
+ my $iExpat = shift;
+
+ #Handle all recipe text that was inside this element
+
+ #Split the multiline cdata_buffer in to single lines
+ my @lines = split /\n/,$iExpat->{cdata_buffer};
+ for (my $buffnum = 0 ; $buffnum < scalar (@lines); $buffnum++)
+ {
+ #Parse each line
+
+ #Calculate the actual line number subtracking status and time element lines (2) and position in array from end
+ my $linenum = ($iExpat->current_line) - 2 - (scalar (@lines) - $buffnum);
+ &main::parseline($iExpat, $lines[$buffnum],$linenum);
+ }
+
+ #Clear $inRecipe flag
+ $inRecipe = 0;
+
+ #Clear $RetryInProgress flag as a retry cannot out live a recipe
+ $RetryInProgress = 0;
+
+ #Clear all data set by recipe start
+ $component = '';
+ $command = '';
+
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+ }
+
+ sub time
+ {
+ my $iExpat = shift; my $iElement = shift;
+
+ my (%iAttr);
+
+ # Read the attributes
+ while (@_) {
+ my $iAtt = shift;
+ my $iVal = shift;
+ $iAttr{$iAtt} = $iVal;
+ }
+
+ #Elapsed time and Total up for Command
+ $Commands{$command} += $iAttr{'elapsed'};
+ #Elapsed time and Total up for Component
+ $Components{$component} += $iAttr{'elapsed'};
+ }
+
+ sub time_
+ {
+ #Do nothing
+ }
+
+ sub info
+ {
+ my $iExpat = shift; my $iElement = shift;
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+
+ $component = 'SBS: Info';
+ $command = 'SBS: Info';
+ $Components{$component} = '0';
+ $Commands{$command} ='0';
+ }
+
+ sub info_
+ {
+ my $iExpat = shift; my $iElement = shift;
+
+ #Handle any unhandle text that was inside this element
+ if ($iExpat->{line_buffer} =~ /.+/)
+ {
+ &main::parseline($iExpat, $iExpat->{line_buffer});
+ $iExpat->{line_buffer} ='';
+ }
+
+ #Clear all data set by info start
+ $component = '';
+ $command = '';
+ if ($iExpat->{cdata_buffer} =~ /Run time (.*?) seconds/)
+ {
+ ($currentfiletime) =$1;
+ }
+
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+ }
+
+ sub warning
+ {
+ my $iExpat = shift; my $iElement = shift;
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+ #reset $warningmigrated flag
+ $warningmigrated = 0;
+
+ $component = 'SBS: Warning';
+ $command = 'SBS: Warning';
+ $Components{$component} = '0';
+ $Commands{$command} ='0';
+ }
+
+ sub warning_
+ {
+ my $iExpat = shift; my $iElement = shift;
+
+ #Handle any unhandle text that was inside this element
+ if ($iExpat->{line_buffer} =~ /.+/)
+ {
+ &main::parseline($iExpat, $iExpat->{line_buffer});
+ $iExpat->{line_buffer} ='';
+ }
+
+ my ($iLineNumber) = $iExpat->current_line;
+
+ if ($warningmigrated != 1)
+ {
+ #Record error in its own right for the error xml element
+ &main::do_warning($iLog, $iLineNumber, $iExpat->{cdata_buffer});
+ }
+
+ #Clear all data set by info start
+ $component = '';
+ $command = '';
+
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+ }
+
+ sub error
+ {
+ my $iExpat = shift; my $iElement = shift;
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+
+ #Set generic component and command names so that these don't get allocated to a empty component
+ $component = 'SBS: Error';
+ $command = 'SBS: Error';
+ $Components{$component} = '0';
+ $Commands{$command} ='0';
+ }
+
+ sub error_
+ {
+ my $iExpat = shift; my $iElement = shift;
+
+ #Handle any unhandle text that was inside this element
+ if ($iExpat->{line_buffer} =~ /.+/)
+ {
+ &main::parseline($iExpat, $iExpat->{line_buffer});
+ $iExpat->{line_buffer} ='';
+ }
+
+ my ($iLineNumber) = $iExpat->current_line;
+
+ #Record error in its own right for the error xml element
+ &main::do_error($iLog, $iLineNumber, $iExpat->{cdata_buffer});
+
+ #Clear all data set by info start
+ $component = '';
+ $command = '';
+
+ #empty cdata buffer
+ $iExpat->{cdata_buffer} = '';
+ }
+
+ sub status
+ {
+ my $iExpat = shift; my $iElement = shift;
+
+ my (%iAttr);
+
+ # Read the attributes
+ while (@_) {
+ my $iAtt = shift;
+ my $iVal = shift;
+ $iAttr{$iAtt} = $iVal;
+ }
+
+ my ($iLineNumber) = $iExpat->current_line;
+
+ if ($iAttr{'exit'} eq 'retry')
+ {
+ $RetryInProgress = 1;
+ #Record retry as a remark
+ &main::do_remarks($iLog, $iLineNumber, "$component retried on $command with ".$iAttr{'code'});
+ return;
+ } elsif ($iAttr{'exit'} ne 'ok') {
+ #Record as migration note for non ok exit because a previous line has triggered this flag
+ if ($MigrateNextExitCode)
+ {
+ &main::do_migrationNotes($iLog, $iLineNumber, "$component failed on $command with ".$iAttr{'code'});
+ } else {
+ #Record error in its own right for the non 'ok' exit status
+ &main::do_error($iLog, $iLineNumber, "$component failed on $command with ".$iAttr{'code'});
+ }
+ }
+
+ #Resest the Migrate exit code flag because a previous line has triggered this flag
+ $MigrateNextExitCode =0;
+ }
+
+ sub status_
+ {
+ my $iExpat = shift; my $iElement = shift;
+ # Nothing to do
+ }
+
+ sub debug
+ {
+ my $iExpat = shift; my $iElement = shift;
+ # Nothing to do
+ }
+
+ sub debug_
+ {
+ my $iExpat = shift; my $iElement = shift;
+ # Nothing to do
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/commonbldutils/sbsv2htmlscanlog/sbsv2scanlog.pm Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,320 @@
+#!perl -w
+# 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:
+# summarise an automated build log
+# documentation available in generic\tools\e32toolp\docs\scanlog.txt
+# please update the documentation when modifying this file
+#
+#
+
+package sbsv2scanlog;
+
+use strict;
+use Carp;
+use FindBin; # for FindBin::Bin
+
+use lib "$FindBin::Bin/../../tools/build/scanlog"; # For running in source
+use lib "$FindBin::Bin"; # For running in \tools
+
+use Scanlog;
+
+# CheckForErrors
+#
+# Inputs
+# $line - Line of text to check
+#
+# Outputs
+# Return true for presence of error in the line
+# Return false for no error found
+#
+# Description
+# This function matches the input against a known set of Error Strings
+sub CheckForErrors
+{
+ my ($line) = @_;
+
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForErrors($line);
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForRemarks
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line according to the warning codes
+# defined in the checkList array
+# The list is the current known EABI warnings which are considered to be
+# Remarks
+# Return false for no Warning found
+#
+# Description
+# This function matches the input against a known set of Warning Strings defined
+# in the array CheckList
+sub CheckForRemarks
+{
+ my ($line) = @_;
+
+ #/sf/app/messaging/email/pop3andsmtpmtm/clientmtms/group/imcm.rls:36:54: warning: no newline at end of file
+ if ($line =~ /:\d+:\d+: warning: no newline at end of file/)
+ {
+ return 1;
+ }
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForRemarks($line);
+
+
+ # Not already returned so return false
+ return 0;
+
+}
+
+# CheckForWarnings
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line
+# Return false for no Warning found
+#
+# Description
+# This function matches the input against a known set of Warning Strings
+sub CheckForWarnings
+{
+ my ($line) = @_;
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForWarnings($line);
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForIgnore
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true if line can be ignored
+# Return false if line cannot be ignored
+#
+# Description
+# This function matches the input against a known set of Warning Strings which can be ignored
+sub CheckForIgnore
+{
+ my ($line) = @_;
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForIgnore($line);
+
+ # Not already returned so return false
+ return 0;
+}
+
+
+
+
+# CheckForNotBuilt
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line
+# Return false for no Warning found
+# $iNotBuilt - Name of thing not built
+#
+# Description
+# This function matches the input against a known set of Strings for things not built
+sub CheckForNotBuilt
+{
+ my ($line) = @_;
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForNotBuilt($line);
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForMissing
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Warning in the line
+# Return false for no Warning found
+# $iNotBuilt - Name of thing not built
+#
+# Description
+# This function matches the input against a known set of Strings for things not built
+sub CheckForMissing
+{
+ my ($line) = @_;
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForMissing($line);
+
+ # Not already returned so return false
+ return 0;
+}
+
+# CheckForRealTimeErrors
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of a Real Time Error in the line
+# plus string detailing error (if available)
+# Return false for no Real Time Error found
+#
+# Description
+# This function matches the input against a known set of Error Strings
+# At the time of adding this subroutine, such error strings were only reported by P4GetSource.pm
+# Scripts calling this subroutine should note that, for example, lines beginning with "ERROR:" will
+# also be considered to be errors by subroutine CheckForErrors, above.
+sub CheckForRealTimeErrors
+{
+ my ($line) = @_;
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForRealTimeErrors($line);
+
+ # Not already returned so return False
+ return 0;
+}
+
+
+
+# CheckForMigrationNotes
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true for presence of Migration_Note in the line
+# Return false for no Migration_Note found
+#
+# Description
+# This function matches the input against a known set of Migration_Note Strings
+sub CheckForMigrationNotes
+{
+ my ($line,$component) = @_;
+
+ if ($component =~ /STLPORT/i)
+ {
+ # ../../src/iostream.cpp:164: warning: 'result' might be used uninitialized in this function
+ if ($line =~ /:\d+: warning:.*?might be used uninitialized in this function/)
+ {
+ return 1;
+ }
+ }
+
+ #cpp: file.h:48:8: warning: extra tokens at end of #endif directive
+ if ($line =~ /:\d+:\d+: warning: extra tokens at end of #endif directive/)
+ {
+ return 1;
+ }
+
+ #raptor/lib/flm/export.flm:56: warning: overriding commands for target `S:/epoc32/rom/include/midp20_installer.iby'
+ if ($line =~ /:\d+: warning: overriding commands for target/)
+ {
+ return 1;
+ }
+
+ #raptor/lib/flm/export.flm:56: warning: ignoring old commands for target `S:/epoc32/rom/include/midp20_installer.iby'
+ if ($line =~ /:\d+: warning: ignoring old commands for target/)
+ {
+ return 1;
+ }
+
+ #\sf\app\techview\techviewplat\techviewuiklaf\resource\eikcoctl.rls(38) : Warning: (003) rls item redefined.
+ if ($line =~ /\(\d+\)\s+: Warning: (003) rls item redefined/)
+ {
+ return 1;
+ }
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForMigrationNotes($line);
+
+ # Not already returned so return False
+ return 0;
+}
+
+# CheckForComponentExitCodesToMigrate
+#
+# Inputs
+# $iLine - Line of text to check
+# $component - Current Component
+#
+# Outputs
+# Return true for to ignore this special component error
+# Return false for to not ignore this special component error
+#
+# Description
+# This function matches the input against a known set of Components and Strings to ignore the later non zero exit code of.
+sub CheckForComponentExitCodesToMigrate
+{
+ my ($line,$component) = @_;
+
+ if ($component =~ /Integrator ARM1136 Core Module/ || $component =~ /OMAP H2 BSP|omaph2bsp/ )
+ {
+ # M://epoc32/tools/makefile_templates/base/bootstrap.mk:213: *** missing `endef', unterminated `define'. Stop.
+ # if ($line =~ /\/epoc32\/tools\/makefile_templates\/base\/bootstrap\.mk:\d+: \*\*\* missing `endef', unterminated `define'\. Stop\./)
+ if ($line =~ /\/epoc32\/tools\/makefile_templates\/base\/bootstrap\.mk:\d+: \*\*\* multiple target patterns\. Stop\./)
+ {
+ return 1;
+ }
+ #/bin/sh: make: command not found
+ if ($line =~ /\/bin\/sh: make: command not found/)
+ {
+ return 1;
+ }
+ } else {
+ return 0;
+ }
+}
+
+# CheckForAdvisoryNotes
+#
+# Inputs
+# $iLine - Line of text to check
+#
+# Outputs
+# Return true if line can be ignored
+# Return false if line cannot be ignored
+#
+# Description
+# This function matches the input against a known set of Strings
+sub CheckForAdvisoryNotes
+{
+ my ($line) = @_;
+
+ # Check Original scanlog rules
+ return &Scanlog::CheckForAdvisoryNotes($line);
+
+ # Not already returned so return false
+ return 0;
+}
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/group/bld.inf Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,26 @@
+// 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:
+//
+
+PRJ_PLATFORMS
+TOOLS
+
+PRJ_EXPORTS
+..\perl\epoc.bat \epoc32\tools\epoc.bat
+..\perl\epoc.pl \epoc32\tools\epoc.pl
+..\perl\eshell.bat \epoc32\tools\eshell.bat
+..\perl\eshell.pl \epoc32\tools\eshell.pl
+..\perl\console.ini \epoc32\data\console.ini
+..\perl\console.bmp \epoc32\data\console.bmp
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/group/location.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,6 @@
+The content of emulator_launcher is:
+
+perl Perl scripts and batch files for all tools.
+group Information and build files.
+test Sample build.info files.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/group/release.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,6 @@
+Made by JonC 14/05/01
+
+Introduction of emulator_launcher component for the 6.1 SDKs i.e. these are the stub launchers
+that were present on the 6.0 SDKs, together with a new launcher for pepoc.
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/group/todo.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,7 @@
+Todo for :
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/group/tools_sdk_eng_emulator_launcher.history.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="EMULATOR_LAUNCHER">
+ <purpose>
+ </purpose>
+</relnotes>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/group/tools_sdk_eng_emulator_launcher.mrp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 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:
+#
+
+component tools_sdk_eng_emulator_launcher
+source \sf\os\buildtools\misccomponents\emulatorlauncher
+binary \sf\os\buildtools\misccomponents\emulatorlauncher\group all
+exports \sf\os\buildtools\misccomponents\emulatorlauncher\group
+notes_source \component_defs\release.src
+
+#Intermediate files for tools target
+#binary \epoc32\release\tools\rel\pjava.exe
+#binary \epoc32\release\tools\rel\pjava_g.exe
+#binary \epoc32\release\tools\rel\pappletviewer.exe
+#binary \epoc32\release\tools\rel\pappletviewer_g.exe
+
+
+
+ipr T
+
Binary file deprecated/buildtools/emulatorlauncher/perl/console.bmp has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/perl/console.ini Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,31 @@
+# Copyright (c) 1997-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:
+#
+
+ScreenWidth 640
+ScreenHeight 240
+
+PhysicalScreenWidth 0
+PhysicalScreenHeight 0
+
+fasciabitmap console.bmp
+
+ScreenOffsetX 0
+ScreenOffsetY 0
+
+
+# could be decreased to reflect the amount of memory available on Brutus
+MegabytesOfFreeMemory 16
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/perl/epoc.bat Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+@echo off
+
+rem Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem Emulator Launcher
+rem
+rem
+
+perl -S epoc.pl %1 %2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/perl/epoc.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,256 @@
+# 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:
+# Launcher for the Symbian Emulator, including
+# functionality to read the $ENV{EPOCROOT}epoc32\data\BuildInfo.txt
+# file to find out information regarding the current Emulator.
+# Depends on the current working directory providing
+# the drive of the currently used SDK.
+#
+#
+
+use Cwd;
+
+#
+# Check the argument(s), if any.
+#
+$numArgs = $#ARGV + 1;
+
+if($numArgs == 0)
+ {
+ &launchEmulator("udeb","winscw");
+ exit(0);
+ }
+
+if($numArgs > 2)
+ {
+ &printHelp;
+ die "ERROR: Too many arguments.\n";
+ }
+
+if($numArgs == 1)
+ {
+ if(lc($ARGV[0]) eq "-rel")
+ {
+ &launchEmulator("urel","winscw");
+ exit(0);
+ }
+
+ if (lc($ARGV[0]) eq "-version")
+ {
+ &printVersion;
+ exit(0);
+ }
+
+ if(lc($ARGV[0]) eq "-wins")
+ {
+ &launchEmulator("udeb", "wins");
+ exit(0);
+ }
+
+ if(lc($ARGV[0]) eq "-winscw")
+ {
+ &launchEmulator("udeb", "winscw");
+ exit(0);
+ }
+
+ if(lc($ARGV[0]) eq "-help")
+ {
+ &printHelp;
+ exit(0);
+ }
+ }
+
+if ($numArgs == 2)
+ {
+ if(lc($ARGV[0]) eq "-rel")
+ {
+ if (lc($ARGV[1]) eq "-wins")
+ {
+ &launchEmulator("urel","wins");
+ exit(0);
+ }
+
+ if (lc($ARGV[1]) eq "-winscw")
+ {
+ &launchEmulator("urel","winscw");
+ exit(0);
+ }
+ }
+
+ if (lc($ARGV[0]) eq "-winscw")
+ {
+ if (lc($ARGV[1] eq "-rel"))
+ {
+ &launchEmulator("urel","winscw");
+ exit(0);
+ }
+ }
+
+ if (lc($ARGV[0]) eq "-wins")
+ {
+ if (lc($ARGV[1] eq "-rel"))
+ {
+ &launchEmulator("urel","wins");
+ exit(0);
+ }
+ }
+ }
+
+# Error, unknown argument.
+&printHelp;
+die "ERROR: Unknown argument " . "\"" . $ARGV[0] . "\".\n";
+
+sub launchEmulator
+{
+ my ($type,$win) = @_;
+
+ my $epocroot = &getEpocroot;
+ my $drive = &getDrive;
+ my $emu = $drive . $epocroot . "epoc32" . "\\"
+ . "release\\" . $win . "\\" . $type . "\\" . "epoc.exe";
+ -e $emu ||
+ die "ERROR: File \"$emu\" not found.\n\n" .
+ "The EPOCROOT environment variable does not identify\n" .
+ "a valid Symbian emulator installation on this drive.\n" .
+ "EPOCROOT must be an absolute path to an existing\n" .
+ "directory - it should have no drive qualifier and\n" .
+ "must end with a backslash.\n";
+ # If the execute is successful, this never returns.
+ exec("\"" . $emu . "\"") || die "Failed to execute the emulator \"$emu\": $!";
+}
+
+sub printHelp
+{
+ print "Symbian Platform Emulator Launcher\n";
+ print "Syntax :\tepoc [-rel] [-wins|-winscw] [-version] [-help]\n";
+ print "(no options)\tLaunch active winscw debug emulator\n";
+ print "-rel\t\tLaunch active release emulator\n";
+ print "-wins\t\tLaunch active wins emulator\n";
+ print "-winscw\t\tLaunch active winscw emulator\n";
+ print "-version\tDisplay active emulator details\n";
+ print "-help\tOutput this help message\n";
+}
+
+sub printVersion
+{
+ my $epocroot = &getEpocroot;
+ my $drive = &getDrive;
+
+ my $binfo = $drive . $epocroot . "epoc32" . "\\"
+ . "data" . "\\" . "BuildInfo.txt";
+
+ -e $binfo || die "ERROR: File \"" . $binfo . "\" does not exist.\n";
+ open(IFILE, $binfo) ||
+ die "ERROR: Failed to open file \"" . $binfo . "\": $!";
+
+ my $DeviceFamily = "";
+ my $DeviceFamilyRev = "";
+ my $ManufacturerSoftwareRev = "";
+ my $ManufacturerSoftwareBuild = "";
+
+ while(<IFILE>) {
+ if(/DeviceFamily\s+(.*\S)\s*$/i) {
+ $DeviceFamily = $1;
+ }
+ if(/DeviceFamilyRev\s+(.*\S)\s*$/i) {
+ $DeviceFamilyRev = $1;
+ }
+ if(/ManufacturerSoftwareRev\s+(.*\S)\s*$/i) {
+ $ManufacturerSoftwareRev = $1;
+ }
+ if(/ManufacturerSoftwareBuild\s+(.*\S)\s*$/i) {
+ $ManufacturerSoftwareBuild = $1;
+ }
+ }
+
+ close(IFILE);
+
+ #
+ # Verify that we got everything we should have.
+ #
+ $DeviceFamily ne "" ||
+ die "ERROR: Device family not specified in file \"" . $binfo .
+ "\".\n";
+ $DeviceFamilyRev ne "" ||
+ die "ERROR: Device family revision not specified in file \"" . $binfo .
+ "\".\n";
+ $ManufacturerSoftwareBuild ne "" ||
+ die "ERROR: Manufacturer software build not specified in file \"" .
+ $binfo . "\".\n";
+
+ $Revision = (($ManufacturerSoftwareRev eq "")?($DeviceFamilyRev):
+ ($ManufacturerSoftwareRev));
+
+ $DeviceFamily = getDFRDName($DeviceFamily);
+
+ #
+ # Make the standard revision representation prettier,
+ # but leave other representations untouched.
+ #
+ if($Revision =~ /^0x([0-9])([0-9][0-9])$/) {
+ $Revision = $1 . "." . $2;
+ }
+
+ print $DeviceFamily . " " .
+ "version " . $Revision . " " .
+ "build " . $ManufacturerSoftwareBuild . "\n";
+}
+
+#
+# Determines, validates, and returns EPOCROOT.
+#
+sub getEpocroot
+{
+ my $epocroot = $ENV{EPOCROOT};
+ die "ERROR: Must set the EPOCROOT environment variable.\n"
+ if (!defined($epocroot));
+ $epocroot =~ s-/-\\-go; # for those working with UNIX shells
+ die "ERROR: EPOCROOT must be an absolute path, " .
+ "not containing a drive letter.\n" if ($epocroot !~ /^\\/);
+ die "ERROR: EPOCROOT must not be a UNC path.\n" if ($epocroot =~ /^\\\\/);
+ die "ERROR: EPOCROOT must end with a backslash.\n" if ($epocroot !~ /\\$/);
+ die "ERROR: EPOCROOT must specify an existing directory.\n"
+ if (!-d $epocroot);
+ return $epocroot;
+}
+
+#
+# Determines and returns the current drive, if any.
+#
+sub getDrive
+{
+ my $wd = cwd;
+ my $drive;
+ if($wd =~ /^([a-zA-Z]:)/) {
+ $drive = $1;
+ } else {
+ # Perhaps we're on a machine that has no drives.
+ $drive = "";
+ }
+ return $drive;
+}
+
+#
+# The DFRD may be represented by a numeric value, as defined by HAL.
+# Changes known numeric values to the name of the DFRD,
+# and leaves all other values untouched.
+#
+sub getDFRDName
+{
+ my $dfrd = shift;
+ return "Crystal" if $dfrd eq "0";
+ return "Pearl" if $dfrd eq "1";
+ return "Quartz" if $dfrd eq "2";
+ return $dfrd; # as fallback
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/perl/eshell.bat Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+@echo off
+
+rem Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem Eshell Launcher
+rem
+rem
+
+perl -S eshell.pl %1 %2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/perl/eshell.pl Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,170 @@
+# 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:
+# Eshell Launcher
+# Depends on the current working directory providing
+# the drive of the currently used SDK.
+#
+#
+
+use Cwd;
+
+#
+# Check the argument(s), if any.
+#
+$numArgs = $#ARGV + 1;
+
+if($numArgs == 0)
+ {
+ &launchEshell("udeb","winscw");
+ exit(0);
+ }
+
+if($numArgs > 2)
+ {
+ &printHelp;
+ die "ERROR: Too many arguments.\n";
+ }
+
+if($numArgs == 1)
+ {
+ if(lc($ARGV[0]) eq "-rel")
+ {
+ &launchEshell("urel","winscw");
+ exit(0);
+ }
+
+ if(lc($ARGV[0]) eq "-wins")
+ {
+ &launchEshell("udeb", "wins");
+ exit(0);
+ }
+
+ if(lc($ARGV[0]) eq "-winscw")
+ {
+ &launchEshell("udeb", "winscw");
+ exit(0);
+ }
+
+ if(lc($ARGV[0]) eq "-help")
+ {
+ &printHelp;
+ exit(0);
+ }
+ }
+
+if ($numArgs == 2)
+ {
+ if(lc($ARGV[0]) eq "-rel")
+ {
+ if (lc($ARGV[1]) eq "-wins")
+ {
+ &launchEshell("urel","wins");
+ exit(0);
+ }
+
+ if (lc($ARGV[1]) eq "-winscw")
+ {
+ &launchEshell("urel","winscw");
+ exit(0);
+ }
+ }
+
+ if (lc($ARGV[0]) eq "-winscw")
+ {
+ if (lc($ARGV[1] eq "-rel"))
+ {
+ &launchEshell("urel","winscw");
+ exit(0);
+ }
+ }
+
+ if (lc($ARGV[0]) eq "-wins")
+ {
+ if (lc($ARGV[1] eq "-rel"))
+ {
+ &launchEshell("urel","wins");
+ exit(0);
+ }
+ }
+ }
+
+# Error, unknown argument.
+&printHelp;
+die "ERROR: Unknown argument " . "\"" . $ARGV[0] . "\".\n";
+
+sub launchEshell
+{
+ my ($type,$win) = @_;
+ $epocroot = &getEpocroot;
+ $drive = &getDrive;
+ $emu = $drive . $epocroot . "epoc32" . "\\"
+ . "release\\" . $win . "\\" . $type . "\\" . "eshell.exe";
+ -e $emu ||
+ die "ERROR: File \"$emu\" not found.\n\n" .
+ "The EPOCROOT environment variable does not identify\n" .
+ "a valid eshell installation on this drive.\n" .
+ "EPOCROOT must be an absolute path to an existing\n" .
+ "directory - it should have no drive qualifier and\n" .
+ "must end with a backslash.\n";
+
+ #add the stuff to use the console
+ $emu.=" -MConsole --";
+
+ # If the execute is successful, this never returns.
+ exec($emu) || die "Failed to execute eshell \"$emu\": $!";
+}
+
+sub printHelp
+{
+ print "Eshell Launcher\n";
+ print "Syntax :\teshell [-rel] [-wins|-winscw] [-help]\n";
+ print "(no options)\tLaunch active winscw debug eshell\n";
+ print "-rel\t\tLaunch active release eshell\n";
+ print "-wins\t\tLaunch active wins eshell\n";
+ print "-winscw\t\tLaunch active winscw eshell\n";
+ print "-help\t\tOutput this help message\n";
+}
+
+#
+# Determines, validates, and returns EPOCROOT.
+#
+sub getEpocroot
+{
+ my $epocroot = $ENV{EPOCROOT};
+ die "ERROR: Must set the EPOCROOT environment variable.\n"
+ if (!defined($epocroot));
+ $epocroot =~ s-/-\\-go; # for those working with UNIX shells
+ die "ERROR: EPOCROOT must be an absolute path, " .
+ "not containing a drive letter.\n" if ($epocroot !~ /^\\/);
+ die "ERROR: EPOCROOT must not be a UNC path.\n" if ($epocroot =~ /^\\\\/);
+ die "ERROR: EPOCROOT must end with a backslash.\n" if ($epocroot !~ /\\$/);
+ die "ERROR: EPOCROOT must specify an existing directory.\n"
+ if (!-d $epocroot);
+ return $epocroot;
+}
+
+#
+# Determines and returns the current drive, if any.
+#
+sub getDrive
+{
+ my $wd = cwd;
+ if($wd =~ /^([a-zA-Z]:)/) {
+ $drive = $1;
+ } else {
+ # Perhaps we're on a machine that has no drives.
+ $drive = "";
+ }
+ return $drive;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/src/RunPerl.cpp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,80 @@
+// 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:
+// RunPerl.cpp : Defines the entry point for the console application.
+//
+//
+
+
+#include <stdlib.h>
+#include <string.h>
+
+void main(int argc, char* argv[])
+ {
+
+ char** args = new char*[argc+3];
+ int index = 0;
+
+ char* p = argv[0];
+ int pl = strlen(p);
+ if((pl >= 4) &&
+ (*(p+pl-4)=='.') &&
+ (*(p+pl-3)=='e' || *(p+pl-3)=='E') &&
+ (*(p+pl-2)=='x' || *(p+pl-2)=='X') &&
+ (*(p+pl-1)=='e' || *(p+pl-1)=='E'))
+ *(p+pl-4)='\0';
+ char* cmd = new char[strlen(p)+4];
+ strcpy(cmd,p);
+ strcat(cmd,".pl");
+
+ args[index++] = "perl";
+ args[index++] = "-S";
+ args[index++] = cmd;
+
+ for(int i=1; i<argc; i++)
+ {
+ args[index++] = argv[i];
+ }
+
+ args[index] = NULL;
+
+ int sz = 0;
+
+ for(i=0; args[i]; i++)
+ {
+ sz += strlen(args[i]) + 3;
+ }
+
+ char *s = new char[sz];
+ strcpy(s,args[0]);
+ strcat(s," ");
+ strcat(s,args[1]);
+ strcat(s," ");
+ strcat(s,args[2]);
+
+ for(i=3; args[i]; i++)
+ {
+ strcat(s," \"");
+ strcat(s,args[i]);
+ strcat(s,"\"");
+ }
+
+ int r = system(s);
+
+ delete[] s;
+ delete[] args;
+ delete[] cmd;
+
+ exit (r);
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/test/BuildInfo.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,5 @@
+DeviceFamily Crystal
+DeviceFamilyRev 0x610
+ManufacturerSoftwareRev 0x620
+ManufacturerSoftwareBuild 123
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/test/BuildInfo1.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,3 @@
+DeviceFamily 2
+DeviceFamilyRev 0x600
+ManufacturerSoftwareBuild Quartz London_Candidate3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/test/BuildInfo2.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,3 @@
+DeviceFamily 0
+DeviceFamilyRev 0x600
+ManufacturerSoftwareBuild Crystal COAK
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/emulatorlauncher/test/BuildInfo3.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,3 @@
+DeviceFamily 0
+DeviceFamilyRev 0x600
+ManufacturerSoftwareBuild Crystal COAKGEN002
Binary file deprecated/buildtools/romkiteka2/config/featreg_default.cfg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/group/bld.inf Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+/**
+@file
+
+@SYMPurpose Tool for building ROMs
+*/
+
+PRJ_EXPORTS
+
+
+../include/DEBUG.IBY /epoc32/rom/include/ //
+../include/EPOCBASE.IBY /epoc32/rom/include/ //
+../include/HEADER.IBY /epoc32/rom/include/ //
+../include/MESON.IBY /epoc32/rom/include/ //
+../include/OBEYFILE.IBY /epoc32/rom/include/ //
+../include/ESHELL.IBY /epoc32/rom/include/ //
+
+../include/bldinfo.hby /epoc32/rom/include/ //
+
+../tools/configpaging/configpaging.cfg /epoc32/rom/configpaging/configpaging.cfg
+../tools/configpaging/configpaging_stressed.cfg /epoc32/rom/configpaging/configpaging_stressed.cfg
+../tools/configpaging/configpaging_recommended.cfg /epoc32/rom/configpaging/configpaging_recommended.cfg
+
+#if defined(SYMBIAN_FEATURE_MANAGER)
+../include/featuredatabase.xml /epoc32/rom/include/featuredatabase.xml
+../tools/featuredatabase.dtd /epoc32/tools/featuredatabase.dtd
+#else
+../include/feature.iby /epoc32/rom/include/
+../include/featureUIDs.h /epoc32/include/
+
+// file for setting default feature registry configuration
+../config/featreg_default.cfg /epoc32/data/config/ //
+
+// feature definitions for ROM building tools
+../include/featureUIDs.xml /epoc32/rom/include/ //
+#endif
+
+// OBY file that allows you to build a rom with useful kernel tracing enabled
+../include/kerneltrace.oby /epoc32/rom/include/ //
+
+// OBY(s) for configuring platsec
+../include/PlatSecDisabledCapsX.oby /epoc32/rom/include/ //
+../include/PlatSec.oby /epoc32/rom/include/ //
+
+// OBY(s) for configuring demand paging
+../include/pagedrom.oby /epoc32/rom/include/ //
+../include/pagedrom_stressed.oby /epoc32/rom/include/ //
+../include/pagedrom_functional.oby /epoc32/rom/include/ //
+
+// IBY file for setting all removable features
+../include/RemovableFeatures.iby /epoc32/rom/include/ //
+
+// DTD files
+../tools/imageContent.dtd /epoc32/tools/imagecontent.dtd
+../tools/cdf.dtd /epoc32/tools/cdf.dtd
+../tools/featureuids.dtd /epoc32/tools/featureuids.dtd
+
+// OBY file that builds a substantial Text Shell rom with no UI dependency
+../include/textshell.oby /epoc32/rom/include/textshell.oby
+
+// OBY file that builds a substantial Text Shell rom with no UI dependency and works with the Chassis build for BATS testing
+../include/textshell_Chassis_BATS.oby /epoc32/rom/include/textshell_Chassis_BATS.oby
+../include/textshell_naviengine_smp.oby /epoc32/rom/include/textshell_naviengine_smp.oby
+
+#if defined(SYMBIAN_FEATURE_MANAGER)
+PRJ_PLATFORMS
+TOOLS2
+
+// extension makefile for invoking features tool
+PRJ_EXTENSIONS
+
+start extension tools/features
+
+option FEAT_DATABASE $(EPOCROOT)epoc32/rom/include/featuredatabase.xml
+option FEAT_HEADER_PATH $(EPOCROOT)epoc32/include
+option FEAT_IBY_PATH $(EPOCROOT)epoc32/rom/include
+option FEAT_DAT_PATH $(EPOCROOT)epoc32/data/config
+
+end
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/group/release.txt Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,31 @@
+version 3.15.1
+================
+(Made by Marvin Shi 15/01/2010)
+ 1. DEF143368 Changes to omxilcompref.iby cause errors in rombuild for textshell roms.
+Version is unchanged
+================
+(Made by Zheng Shen, 24/08/2009)
+ 1. REQ12628 Tools codeline refactoring for SymTB9.2
+ Platform indenpendent tools are removed from MCL.
+
+Version 3.15.0
+================
+(Made by Zhi Dou, 31/07/2009)
+ 1. REQ12562 Byte-pair compression update
+
+Version 3.14.0
+================
+(Made by Zhi Dou, 23/07/2009)
+ 1. REQ12561 BUILDROM performance improvement
+
+Version 3.13.0
+================
+(Made by Zhi Dou, 20/07/2009)
+ 1. REQ13110 HCR file in ROM (ROMBUILD)
+ 2. REQ13111 HCR file in a separate NAND partition (ROFSBUILD)
+
+Version 3.12.38
+================
+(Made by Zhi Dou, 10/07/2009)
+ 1. PDEF139677 breaks textshell builds (RAM-ROM)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/group/tools_romkit.history.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="ROMKIT_EKA2">
+ <purpose>
+ </purpose>
+
+ <minorchange revision="022">
+ Product Usability: Add information needed by interpretsis to rofs logs (CR1296, MS3.6)
+ </minorchange>
+
+ <defect number="DEF116405" title="Buildrom has a new compulsory argument which breaks backwards compatibility" revision="021">
+ Buildrom has a new compulsory argument which breaks backwards compatibility
+ </defect>
+
+ <minorchange revision="039">
+ Rom Tools Usability enhancements (PREQ1858, MS3.2)
+ </minorchange>
+
+ <defect number="DEF117647" title="buildrom usage does not list '-I' option." revision="038">
+ buildrom usage does not list "-I" option.
+ </defect>
+
+ <defect number="DEF117023" title="features.pl generates featureuids.h header file in the wrong case." revision="037">
+ features.pl generates featureuids.h header file in the wrong case.
+ </defect>
+
+ <defect number="DEF116837" title="Component RomKit is not case-consistent on Linux filesystem." revision="036">
+ Component RomKit is not case-consistent on Linux filesystem.
+ </defect>
+
+ <defect number="DEF115977" title="Option -p doesnt work for buildrom" revision="035">
+ Option -p doesnt work for buildrom
+ </defect>
+
+ <defect number="DEF115640" title="Buildrom doesn't work when run in the root directory" revision="034">
+ Buildrom doesn't work when run in the root directory
+ </defect>
+
+ <defect number="PDEF115346" title="DP: Alias errors in efficient_rom_paging" revision="033">
+ DP: Alias errors in efficient_rom_paging
+ </defect>
+
+ <defect number="DEF113086" title="Obsolete XML attribute "support", in "defaultfeaturerange"element of FM XML" revision="032">
+ Obsolete XML attribute 'support', in 'defaultfeaturerange'element of FM XML
+ </defect>
+
+ <defect number="PDEF115145" title="Patchdata requires map file" revision="031">
+ Patchdata requires map file
+ </defect>
+
+ <defect number="PDEF114978" title="Symbian rompatching patches incorrect values if patchable data is not defined" revision="030">
+ Symbian rompatching patches incorrect values if patchable data is not defined
+ </defect>
+
+ <defect number="DEF115172" title="Buildrom should complain on not supplying "-fm" option" revision="029">
+ Buildrom should complain on not supplying "-fm" option
+ </defect>
+
+ <defect number="DEF113536" title="features.pl does not allow a feature to be excluded from a feature set's IBY" revision="028">
+ features.pl does not allow a feature to be excluded from a feature set's IBY
+ </defect>
+
+ <defect number="DEF114807" title="Features tool help information is displayed twice with error message" revision="027">
+ Features tool help information is displayed twice with error message
+ </defect>
+
+ <defect number="DEF113508" title="ROMBUILD getting invoked twice" revision="026">
+ ROMBUILD getting invoked twice
+ </defect>
+
+ <defect number="DEF113140" title="Buildrom fails with error 'Use the keyword 'romsize' ' for extension ROFS image" revision="025">
+ Buildrom fails with error 'Use the keyword 'romsize' ' for extension ROFS image
+ </defect>
+
+ <defect number="DEF111921" title="Invocation of the spi tool fails with -d option" revision="024">
+ Invocation of the spi tool fails with -d option
+ </defect>
+
+ <defect number="DEF113506" title="RomKit FeatReg generation incorrectly optimises feature entries out of CFG files" revision="023">
+ RomKit FeatReg generation incorrectly optimises feature entries out of CFG files
+ </defect>
+
+ <defect number="INC112458" title="buildrom.pm defect when compression type is not specified." revision="022">
+ buildrom.pm defect when compression type is not specified.
+ </defect>
+
+ <defect number="DEF112560" title="Two defects in buildrom UDA image creation." revision="021">
+ Two defects in buildrom UDA image creation.
+ </defect>
+
+ <defect number="DEF095016" title="Renaming default language files is in a conflict with the NearestLanguageFile()" revision="020">
+ Renaming default language files is in a conflict with the NearestLanguageFile()
+ </defect>
+
+ <defect number="PDEF109724" title="Rombuild/Rofsbuild should warn if dll or exe is located outside standard paths" revision="019">
+ Rombuild/Rofsbuild should warn if dll or exe is located outside standard paths
+ </defect>
+
+ <minorchange revision="018">
+ Feature Manager run-time enhancements (PREQ1645)
+ </minorchange>
+
+ <defect number="PDEF111221" title="ROM patching fails if ARMV5 is not specified in caps in ABI_DIR macro" revision="017">
+ ROM patching fails if ARMV5 is not specified in caps in ABI_DIR macro
+ </defect>
+
+ <defect number="DEF111787" title="Buildrom is failing if hide statement is specified in the iby/oby file" revision="016">
+ Buildrom is failing if hide statement is specified in the iby/oby file
+ </defect>
+
+ <defect number="DEF110497" title="buildrom doesn't work for ARMV6" revision="015">
+ buildrom doesn't work for ARMV6
+ </defect>
+
+ <minorchange revision="014">
+ Feature Manager supporting tool enhancements (PREQ1801, MS3.1)
+ </minorchange>
+
+ <defect number="PDEF110043" title="patchdata option handles incorrectly negative values" revision="013">
+ patchdata option handles incorrectly negative values
+ </defect>
+
+ <defect number="DEF111340" title="DP: Code paging is not used for ROFS code" revision="012">
+ Enabled the USE_CODE_PAGING and CODE_PAGING_FROM_ROFS flags and disabled the EFFICIENT_ROM_PAGING flag (which is not needed for mainly code paged ROMs).
+ </defect>
+
+ <defect number="DEF110618" title="Build rom command is failing to create the image with -f option " revision="011">
+ Build rom command is failing to create the image with -f option .
+ </defect>
+
+ <defect number="DEF106861" title="Specifying a compression method in buildrom doesn't work" revision="010">
+ Specifying a compression method in buildrom doesn't work.
+ </defect>
+
+ <defect number="DEF109247" title="Rombuild can ignore the compress option for the core image" revision="009">
+ Rombuild can ignore the compress option for the core image.
+ </defect>
+
+ <defect number="DEF108413" title="Not possible to have hierarchies of BSF files" revision="008">
+ Not possible to have hierarchies of BSF files.
+ </defect>
+
+ <minorchange revision="007">
+ Generation of data drive image (PREQ1230, MS3.1)
+ </minorchange>
+
+ <defect number="DEF100399" title="ABIV2: BSF files do not work properly for BPABI platforms" revision="006">
+ ABIV2: BSF files do not work properly for BPABI platforms.
+ </defect>
+
+ <minorchange revision="005">
+ EC021 changes to longeng have removed the static dependency on cntmodel, so textshell.oby
+ no longer needs workarounds to avoid pulling in cntmodel.
+ </minorchange>
+
+ <minorchange revision="004">
+ Add textshell.oby, which creates a text shell ROM that has no dependency on the UI layer, and is intended for testing hardware adaptation APIs.
+ </minorchange>
+
+ <defect number="PDEF098786" title="Symbol file is always generated" revision="003">
+ Adding a new option to buildrom so that Symbol file will not be generated if the new option is specified
+ </defect>
+
+ <defect number="DEF099432" title=""abld -checksource" should differentiate between USERINCLUDE and SYSTEMINCLUDE" revision="002">
+ "-I-" added between the USERINCLUDE and SYSTEMINCLUDE paths that are picked up from the MAKMAKE front-end and listed to CPP
+ </defect>
+
+ <defect number="DEF099989" title="DP: [TBAS] Duplication ERROR while building the Default DP ROM image on TBAS2589" revision="001">
+ Change efficient_rom_paing.pm so that ’hide’ and ’rename’ keywords are supported.
+ </defect>
+</relnotes>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/group/tools_romkit.mrp Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 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:
+#
+
+component tools_romkit
+source \sf\os\buildtools\imgtools_os\romkiteka2
+binary \sf\os\buildtools\imgtools_os\romkiteka2\group all
+exports \sf\os\buildtools\imgtools_os\romkiteka2\group
+
+notes_source \component_defs\release.src
+
+
+ipr T
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/DEBUG.IBY Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#ifndef __DEBUG_IBY__
+#define __DEBUG_IBY__
+
+REM Additional things in System\Samples
+REM Use "Re-install sample files" in the RefUI shell Tools menu
+
+
+#ifdef _DEBUG
+#include <obeyfile.iby> // top-level OBY file in \System\Samples
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/EPOCBASE.IBY Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#ifndef __EPOCBASE_IBY__
+#define __EPOCBASE_IBY__
+
+REM EPOCBASE.IBY Basic OS Support
+
+#include <header.iby> /* ROM header definitions */
+#include <base.iby> /* The lowest-level of the operating system */
+
+#include <c32.iby> /* standard Sockets components */
+#include <ecuart.iby> /* standard Sockets components */
+#include <esock.iby> /* standard Sockets components */
+#include <irda.iby> /* standard Sockets components */
+#include <bluetooth.iby> /* standard Sockets components */
+
+#include <gdi.iby> /* standard Graphics components */
+#include <fntstore.iby> /* standard Graphics components */
+#include <fbserv.iby> /* standard Graphics components */
+#include <bitgdi.iby> /* standard Graphics components */
+#include <wserv.iby> /* standard Graphics components */
+
+#include <apparc.iby> /* Application architecture DLLs */
+#include <emime.iby> /* Mime recognition */
+#include <meson.iby> /* standard Meson components */
+
+#include <fepbase.iby> /* Front end processor base classes */
+#include <printers.iby> /* Printer drivers */
+
+/* Generic Multimedia Components */
+#include <mmf.iby> /* Multimedia Framework */
+#include <mmcommon.iby> /* Shared multimedia components */
+#include <imageconversion.iby> /* Image conversion library */
+#include <mdf.iby> /* Media Device Framework */
+#include <devvideo.iby> /* devvideo generic */
+#include <asr.iby> /* speech recognition */
+#include <ecam.iby> /* Camera API */
+
+#include <sysagent.iby> /* System Agent client and server */
+
+#include <network.iby>
+
+#include <stdlib.iby> /* Standard C Library */
+
+#include <securitycommonutils.iby>
+#include <caf.iby>
+#include <ups.iby>
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#include <scr.iby>
+#endif
+
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+#include <ssma.iby> /*System State Management Architecture*/
+#include <ssplugins.iby> /*System State Management Plugins*/
+
+#else
+// System starter is included by default. To build a rom
+// which will use start.exe instead of sysstart.exe use the
+// -D_NOSYSSTART option with buildrom.
+
+#ifndef _NOSYSSTART
+#include <sysstart.iby> /* System Starter */
+#endif
+
+#endif // SYMBIAN_SYSTEM_STATE_MANAGEMENT
+
+
+
+#include <openenv.iby>
+#include <ezlib.iby>
+
+#include <sql.iby> /* SQL database*/
+#include <dbms.iby> /* Legacy Non-SQL database support */
+
+#ifdef SYMBIAN_EUSERHL
+#include <euserhl.iby> /*Generic usability library*/
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/ESHELL.IBY Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#ifndef __ESHELL_IBY__
+#define __ESHELL_IBY__
+
+file=ABI_DIR\DEBUG_DIR\eshell.exe \sys\bin\EShell.exe HEAPMAX(0x20000)
+
+REM For the benefit of base\f32\etshell
+data=ZPRIVATE\10003a3f\APPS\eshell_reg.rsc Private\10003a3f\Apps\eshell_reg.rsc
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/HEADER.IBY Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#ifndef __HEADER_IBY__
+#define __HEADER_IBY__
+
+unicode
+
+romsize=0x##ROMMEGS##00000
+time=ROMDATE 12:00:00
+
+#ifdef CDMA
+define CDMA_SUFFIX _cdma
+#else
+define CDMA_SUFFIX ## // nothing
+#endif
+
+#ifdef _NAND
+define NAND_SUFFIX .nand
+#else
+define NAND_SUFFIX ## // nothing
+#endif
+
+#if (defined _NAND2 || defined _ONENAND)
+define NAND_SUFFIX .nand
+#endif
+
+#ifdef SYMBIAN_FEATURE_MANAGER
+defaultfeaturedb = epoc32\rom\include\featuredatabase.xml
+#endif
+
+romname=##VARIANT##_##BUILDNO##LANGID##.##OBEYFILE##CDMA_SUFFIX##NAND_SUFFIX.IMG
+
+#ifdef _NAND
+ECHO Preparing NAND core image with associated ROFS image
+
+#ifndef _ROFS_SIZE
+#define _ROFS_SIZE 32000000 // 32 Meg default
+#endif
+define ROFS_SIZE _ROFS_SIZE
+
+compress
+rom_image 1 rofs size=ROFS_SIZE non-xip compress
+
+#endif
+
+
+#if (defined _NAND2 || defined _ONENAND)
+ECHO Preparing NAND core image with associated ROFS image
+
+#ifndef _ROFS_SIZE
+#define _ROFS_SIZE 32000000 // 32 Meg default
+#endif
+define ROFS_SIZE _ROFS_SIZE
+
+compress
+rom_image 1 rofs size=ROFS_SIZE non-xip compress
+
+#endif
+
+REM ROM version number
+
+version=##VERSION##(##BUILDNO##)
+
+#ifdef _FULL_DEBUG
+#ifndef _DEBUG
+#define _DEBUG // _FULL_DEBUG implies _DEBUG
+#endif
+define BUILD_DIR udeb
+#else
+define BUILD_DIR urel
+#endif
+
+#ifdef _DEBUG
+define DEBUG_DIR udeb
+#else
+define DEBUG_DIR urel
+#endif
+
+#ifndef _EABI
+# ifdef _ARM4
+# define _EABI ARM4
+ ECHO Defaulting to ARM4
+# elif defined(_ARMV5)
+# define _EABI ARMV5
+ ECHO Defaulting to ARMV5
+# elif defined _X86GCC
+# define _EABI x86gcc
+# endif
+#endif
+
+# ifdef _PLAT
+# undef _EABI
+# define _EABI _PLAT
+ ECHO Defaulting to _EABI
+# endif
+
+# ifdef _GCCE
+# undef _EABI
+# define _EABI GCCE
+# elif defined(ABIV2) || defined(ABIv2)
+# undef _EABI
+# define _EABI ARMV5_ABIV2
+# endif
+
+// This is to include ABIV2 specific runtime libraries. This inclusion
+// in other obey files depends on the definition of RVCT
+#ifdef _GCCE
+# define RVCT
+#endif
+
+define ABI_DIR EPOCROOT##epoc32\release\##_EABI
+
+#ifndef _KABI
+#define _KABI _EABI
+#endif
+
+define KERNEL_DIR EPOCROOT##epoc32\release\##_KABI
+
+define DATAZ_ EPOCROOT##epoc32\data\Z
+define ZSYSTEM DATAZ_\System
+define ZPRIVATE DATAZ_\Private
+define ZRESOURCE DATAZ_\Resource
+
+define DATAC_ EPOCROOT##epoc32\data\C
+define CSYSTEM DATAC_\System
+
+// default location of executables
+define SYSTEM_BINDIR System\Libs // will be Sys\Bin for Secure platform
+
+
+// Support for ECOM_PLUGIN
+// Format is ECOM_PLUGIN(<DLL Name>,<Resource File Name>)
+// e.g. ECOM_PLUGIN(foo.dll,12345abc.rsc)
+
+define ECOM_RSC_DIR Resource\Plugins
+define ECOM_BIN_DIR Sys\Bin
+
+
+// __ECOM_PLUGIN(emulator directory, file rom dir, dataz_, resource rom dir, filename, resource filename)
+#define ECOM_PLUGIN(file,resource) __ECOM_PLUGIN(ABI_DIR\BUILD_DIR,ECOM_BIN_DIR,DATAZ_,ECOM_RSC_DIR,file,file)
+#define ECOM_PLUGIN_UDEB(file,resource) __ECOM_PLUGIN(ABI_DIR\UDEB,ECOM_BIN_DIR,DATAZ_,ECOM_RSC_DIR,file,file)
+
+// Support for HIDE_ECOM_PLUGIN
+// Format is HIDE_ECOM_PLUGIN(<DLL Name>,<Resource File Name>)
+// e.g. HIDE_ECOM_PLUGIN(foo.dll,12345abc.rsc)
+
+// _HIDE__ECOM_PLUGIN(emulator directory, file rom dir, dataz_, resource rom dir, filename, resource filename)
+#define HIDE_ECOM_PLUGIN(file,resource) _HIDE__ECOM_PLUGIN(ABI_DIR\BUILD_DIR,ECOM_BIN_DIR,DATAZ_,ECOM_RSC_DIR,file,file)
+#define HIDE_ECOM_PLUGIN_UDEB(file,resource) _HIDE__ECOM_PLUGIN(ABI_DIR\UDEB,ECOM_BIN_DIR,DATAZ_,ECOM_RSC_DIR,file,file)
+
+#ifdef SYMBIAN_ROM_STATIC_PLUGIN_INFORMATION
+ enable_spi
+#else
+ disable_spi
+#endif
+
+// Secure platform setting - use PlatSec.oby to turn diagnostics on
+PlatSecDiagnostics OFF
+PlatSecEnforcement ON
+PlatSecEnforceSysBin ON
+PlatSecProcessIsolation ON
+
+#include <symbian_os_romdefs.hby>
+
+#include "feature.iby"
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/MESON.IBY Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#ifndef __MESON_IBY__
+#define __MESON_IBY__
+
+REM Store, Etext, Form, Grid, Clock, Print, AlarmServer, WorldServer, Bafl, Egul, Cone, Dial, BmpAnim
+
+/* Store */
+#include "Store.iby"
+
+/* Etext */
+#include "EText.iby"
+
+/* Form */
+#include "Form.iby"
+
+
+/* Clock */
+file=ABI_DIR\BUILD_DIR\clock.dll System\Libs\Clock.dll
+file=ABI_DIR\BUILD_DIR\clocka.dll System\Libs\ClockA.dll
+
+/* Pwrcli */
+#include "PwrCli.iby"
+
+/* Bafl */
+#include "Bafl.iby"
+
+/* Cone */
+#include "cone.iby"
+
+/* NumberConversion */
+#include "NumberConversion.iby"
+
+/* EGUL */
+#include <egul.iby>
+
+/* Dial */
+#include <dial.iby>
+
+/* BmpAnim */
+
+/* Feature Management run-time */
+#ifdef SYMBIAN_FEATURE_MANAGER
+
+// Include both old and new components when Feature Manager enabled
+#include "featmgr.iby"
+#include "featreg.iby"
+
+#else
+
+// Include only the original Feature Registry otherwise
+#include "featreg.iby"
+#ifndef ROM_FEATURE_MANAGEMENT
+/* Provide a default configuration file for the feature registry */
+data=EPOCROOT##epoc32\data\config\featreg_default.cfg private\102744CA\featreg.cfg
+#endif
+
+#endif
+
+/* Central Repository*/
+/* The inclusion of central repository in all Cedar ROMs is currently being
+ investigated by the Tech Lead for Symbian OS 9.0.
+
+ When the issue has been fully clarified it is likely that the inclusion
+ will be removed from 8.1b using an appropriate configuration macro */
+#include "centralrepository.iby"
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/OBEYFILE.IBY Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#ifndef __OBEYFILE_IBY__
+#define __OBEYFILE_IBY__
+
+REM Include the top-level OBY file in the ROM, as an audit trail...
+REM You do not want this in production ROMs!
+
+section2 data=EPOCROOT##epoc32\rom\include\##OBEYFILE##.oby System\Samples\DESIRED_ABI##_##OBEYFILE##
+
+REM Provides build number information to the emulator/ROM.
+data=EPOCROOT##epoc32\data\buildinfo.txt System\Data\buildinfo.txt
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/PlatSec.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+ROM_IMAGE[0] {
+PlatSecDiagnostics ON
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/PlatSecDisabledCapsX.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#ifndef __PLATSEC_DISABLED_CAPS__
+#error "__PLATSEC_DISABLED_CAPS__ must be defined"
+#endif
+PlatSecDisabledCaps __PLATSEC_DISABLED_CAPS__
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/RemovableFeatures.iby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,46 @@
+// Copyright (c) 2005-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:
+//
+
+#ifndef __REMOVABLEFEATURES_IBY__
+#define __REMOVABLEFEATURES_IBY__
+
+#define SYMBIAN_EXCLUDE_FAX
+#undef __UPNP_PRINT_FRAMEWORK
+#undef __MMC
+#define SYMBIAN_EXCLUDE_RTP_RTCP
+#define SYMBIAN_EXCLUDE_PC_CONNECTIVITY_EXCEPT_SECURE_BACKUP
+#undef __IRDA
+#undef __BT
+#define SYMBIAN_EXCLUDE_OBEX
+#undef __USB
+#define SYMBIAN_EXCLUDE_DRM_AGENT_PLUGINS
+#undef __IPSEC
+#define SYMBIAN_EXCLUDE_QOS_PROTPLUGINS
+#undef __DHCP
+#define SYMBIAN_EXCLUDE_MOBILEIP
+#define SYMBIAN_EXCLUDE_LOCATION
+#define SYMBIAN_EXCLUDE_SIP
+#define SYMBIAN_EXCLUDE_OFFLINE_MODE
+#undef __MTP_PROTOCOL_SUPPORT
+#undef __VIBRA
+#undef __SERIES60_AMBIENT_LIGHT_SENSOR
+#undef __COVER_DISPLAY
+#undef __SERIES60_KEYPAD_NO_SLIDER
+#define SYMBIAN_EXCLUDE_LOCATION_MANAGEMENT
+#undef __CS_VIDEO_TELEPHONY
+#undef __COMMON_TSY__EMERGENCY_CALLS_ENABLED_IN_OFFLINE_MODE
+#undef __DRIVE_MODE
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/bldinfo.hby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,7 @@
+REM bldinfo.hby
+REM
+REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+
+REM Build information data file
+
+data=EPOCROOT##epoc32\data\BuildInfo.txt System\Data\BuildInfo.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/feature.iby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#ifndef __FEATURE_IBY__
+#define __FEATURE_IBY__
+
+
+#ifdef SYMBIAN_EXCLUDE_FAX
+EXCLUDE_FEATURE Fax
+#else
+FEATURE Fax
+#endif
+
+#ifndef __UPNP_PRINT_FRAMEWORK
+EXCLUDE_FEATURE Print
+#else
+FEATURE Print
+#endif
+
+
+#ifndef __BT
+EXCLUDE_FEATURE Bluetooth
+#else
+FEATURE Bluetooth
+#endif
+
+
+#ifndef __IRDA
+EXCLUDE_FEATURE Infrared
+#else
+FEATURE Infrared
+#endif
+
+
+#ifndef __MMC
+EXCLUDE_FEATURE Mmc
+#else
+FEATURE Mmc
+#endif
+
+
+#ifndef __USB
+EXCLUDE_FEATURE Usb
+#else
+FEATURE Usb
+#endif
+
+
+#ifdef SYMBIAN_EXCLUDE_OBEX
+EXCLUDE_FEATURE Obex
+#else
+FEATURE Obex
+#endif
+
+
+#ifdef SYMBIAN_EXCLUDE_RTP_RTCP
+EXCLUDE_FEATURE RtpRtcp
+#else
+FEATURE RtpRtcp
+#endif
+
+
+#ifdef SYMBIAN_EXCLUDE_SIP
+EXCLUDE_FEATURE Sip
+#else
+FEATURE Sip
+#endif
+
+
+#ifdef SYMBIAN_EXCLUDE_QOS_PROTPLUGINS
+EXCLUDE_FEATURE IPQos
+EXCLUDE_FEATURE NetworkQos
+#else
+FEATURE IPQos
+FEATURE NetworkQos
+#endif
+
+
+#ifndef __IPSEC
+EXCLUDE_FEATURE IPSec
+#else
+FEATURE IPSec
+#endif
+
+
+
+#ifndef __DHCP
+EXCLUDE_FEATURE Dhcp
+#else
+FEATURE Dhcp
+#endif
+
+
+
+#ifdef SYMBIAN_EXCLUDE_PC_CONNECTIVITY_EXCEPT_SECURE_BACKUP
+EXCLUDE_FEATURE Connectivity
+#else
+FEATURE Connectivity
+#endif
+
+
+#ifndef __MTP_PROTOCOL_SUPPORT
+EXCLUDE_FEATURE MTP
+#else
+FEATURE MTP
+#endif
+
+
+#ifndef __VIBRA
+EXCLUDE_FEATURE Vibra
+#else
+FEATURE Vibra
+#endif
+
+#ifndef __SERIES60_AMBIENT_LIGHT_SENSOR
+EXCLUDE_FEATURE AmbientLightSensor
+#else
+FEATURE AmbientLightSensor
+#endif
+
+#ifndef __COVER_DISPLAY
+EXCLUDE_FEATURE CoverDisplay
+#else
+FEATURE CoverDisplay
+#endif
+
+#ifndef __SERIES60_KEYPAD_NO_SLIDER
+EXCLUDE_FEATURE KeypadNoSlider
+#else
+FEATURE KeypadNoSlider
+#endif
+
+#ifndef __CS_VIDEO_TELEPHONY
+EXCLUDE_FEATURE CsVideoTelephony
+#else
+FEATURE CsVideoTelephony
+#endif
+
+#ifndef __COMMON_TSY__EMERGENCY_CALLS_ENABLED_IN_OFFLINE_MODE
+EXCLUDE_FEATURE EmergencyCallsEnabledInOfflineMode
+#else
+FEATURE EmergencyCallsEnabledInOfflineMode
+#endif
+
+#ifndef __DRIVE_MODE
+EXCLUDE_FEATURE DriveModeCanRestrictMtCalls
+#else
+FEATURE DriveModeCanRestrictMtCalls
+#endif
+
+#endif // __FEATURE_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/featureUIDs.h Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,62 @@
+// Copyright (c) 2005-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:
+// Feature UID allocations for all Symbian OS platforms
+// This file is managed by the System Design Authority (sda@symbian.com)
+// To allocate a new feature UID, please email the SDA
+// The following UID ranges are allocated for features
+// that default to reporting "feature present"
+// 0x10279806 - 0x10281805
+// All other UIDs default to reporting "feature not present"
+//
+//
+
+/**
+ @publishedAll
+ @released
+*/
+namespace NFeature
+ {
+ // default present
+ const TUid KFax = {0x10279806};
+ const TUid KPrint = {0x10279807};
+ const TUid KBluetooth = {0x10279808};
+ const TUid KInfrared = {0x10279809};
+ const TUid KMmc = {0x1027980a};
+ const TUid KUsb = {0x1027980b};
+ const TUid KObex = {0x1027980c};
+ const TUid KRtpRtcp = {0x1027980d};
+ const TUid KSip = {0x1027980f};
+ const TUid KOmaDataSync = {0x10279810};
+ const TUid KOmaDeviceManagement = {0x10279811};
+ const TUid KIPQoS = {0x10279812};
+ const TUid KNetworkQoS = {0x10279813};
+ const TUid KIPSec = {0x10279814};
+ const TUid KDhcp = {0x10279815};
+ const TUid KConnectivity = {0x10279816}; // PC Connectivity
+ const TUid KMTP = {0x10279817};
+
+ // default not-present
+ const TUid KLocation = {0x10281818};
+ const TUid KMobileIP = {0x10281819};
+ const TUid KOfflineMode = {0x1028181A};
+ const TUid KDRM = {0x1028181B};
+ const TUid KOmaDsHostServers = {0x10282663};
+ const TUid KVibra = {0x102835AE};
+ const TUid KAmbientLightSensor = {0x102835AF};
+ const TUid KCoverDisplay = {0x102835B0};
+ const TUid KKeypadNoSlider = {0x102835B1};
+ const TUid KCsVideoTelephony = {0x10285A22};
+ const TUid KEmergencyCallsEnabledInOfflineMode = {0x10285A23};
+ const TUid KDriveModeCanRestrictMtCalls = {0x10285A24};
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/featureUIDs.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<!DOCTYPE featureuids SYSTEM "featureuids.dtd">
+
+<!--
+ Copyright (c) 2005-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:
+ This file is managed by the System Design Authority (sda@symbian.com)
+ To allocate a new feature UID, please email the SDA
+
+-->
+
+
+
+<featureuids>
+ <features>
+ <!-- default present -->
+ <feature name="Fax" uid="0x10279806"/>
+ <feature name="Print" uid="0x10279807"/>
+ <feature name="Bluetooth" uid="0x10279808"/>
+ <feature name="Infrared" uid="0x10279809"/>
+ <feature name="Mmc" uid="0x1027980A"/>
+ <feature name="Usb" uid="0x1027980B"/>
+ <feature name="Obex" uid="0x1027980C"/>
+ <feature name="RtpRtcp" uid="0x1027980D"/>
+ <feature name="Sip" uid="0x1027980F"/>
+ <feature name="IPQoS" uid="0x10279812"/>
+ <feature name="NetworkQoS" uid="0x10279813"/>
+ <feature name="IPSec" uid="0x10279814"/>
+ <feature name="Dhcp" uid="0x10279815"/>
+ <feature name="Connectivity" uid="0x10279816"/>
+ <feature name="MTP" uid="0x10279817"/>
+ <!-- default not present -->
+ <feature name="Location" uid="0x10281818"/>
+ <feature name="MobileIP" uid="0x10281819"/>
+ <feature name="OfflineMode" uid="0x1028181a"/>
+ <feature name="DRM" uid="0x1028181b"/>
+ <feature name="Vibra" uid="0x102835AE"/>
+ <feature name="AmbientLightSensor" uid="0x102835AF"/>
+ <feature name="CoverDisplay" uid="0x102835B0"/>
+ <feature name="KeypadNoSlider" uid="0x102835B1"/>
+ <feature name="CsVideoTelephony" uid="0x10285A22"/>
+ <feature name="EmergencyCallsEnabledInOfflineMode" uid="0x10285A23"/>
+ <feature name="DriveModeCanRestrictMtCalls" uid="0x10285A24"/>
+ </features>
+
+ <default>
+ <!-- The following UID range is reserved for default present features -->
+ <range min="0x10279806" max="0x10281805" support="include"/>
+ </default>
+</featureuids>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/featuredatabase.xml Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+<!DOCTYPE featuredatabase SYSTEM "featuredatabase.dtd">
+
+<!--
+ Copyright (c) 2005-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:
+ This file is managed by the System Design Authority (sda@symbian.com)
+ To allocate a new feature UID, please email the SDA
+
+-->
+
+
+
+<featuredatabase>
+ <featureset ibyname="feature.iby" hfilename="featureuids.h" namespace="NFeature">
+ <hfileheader interfacestatus="@released" interfacevisibility="@publishedAll">
+ // featureUIDs.h
+ //
+ // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
+ //
+ // Feature UID allocations for all Symbian OS platforms
+ //
+ // This file is managed by the System Design Authority (sda@symbian.com)
+ // To allocate a new feature UID, please email the SDA
+ //
+ // The following UID ranges are allocated for features
+ // that default to reporting "feature present"
+ // 0x10279806 - 0x10281805
+ //
+ // All other UIDs default to reporting "feature not present"
+ //
+ </hfileheader>
+
+ <feature name="Fax" statusflags="0x00000001" uid="0x10279806">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_FAX"/>
+ </feature>
+ <feature name="Print" statusflags="0x00000001" uid="0x000005FF">
+ <hrhmacro include="__UPNP_PRINT_FRAMEWORK"/>
+ </feature>
+ <feature name="Bluetooth" statusflags="0x00000001" uid="0x0000000C">
+ <hrhmacro include="__BT"/>
+ </feature>
+ <feature name="Infrared" statusflags="0x00000001" uid="0x0000000B">
+ <hrhmacro include="__IRDA"/>
+ </feature>
+ <feature name="Mmc" statusflags="0x00000001" uid="0x00000001">
+ <hrhmacro include="__MMC"/>
+ </feature>
+ <feature name="Usb" statusflags="0x00000001" uid="0x0000000D">
+ <hrhmacro include="__USB"/>
+ </feature>
+ <feature name="Obex" statusflags="0x00000001" uid="0x1027980C">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_OBEX"/>
+ </feature>
+ <feature name="RtpRtcp" statusflags="0x00000001" uid="0x1027980D">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_RTP_RTCP"/>
+ </feature>
+ <feature name="Sip" statusflags="0x00000001" uid="0x1027980F">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_SIP"/>
+ </feature>
+ <feature name="IPQoS" statusflags="0x00000001" uid="0x10279812">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_QOS_PROTPLUGINS"/>
+ </feature>
+ <feature name="NetworkQoS" statusflags="0x00000001" uid="0x10279813">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_QOS_PROTPLUGINS"/>
+ </feature>
+ <feature name="IPSec" statusflags="0x00000001" uid="0x00000066">
+ <hrhmacro include="__IPSEC"/>
+ </feature>
+ <feature name="Dhcp" statusflags="0x00000001" uid="0x0000006B">
+ <hrhmacro include="__DHCP"/>
+ </feature>
+ <feature name="Connectivity" statusflags="0x00000001" uid="0x10279816">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_PC_CONNECTIVITY_EXCEPT_SECURE_BACKUP"/>
+ </feature>
+ <feature name="MTP" statusflags="0x00000001" uid="0x000001F8">
+ <hrhmacro include="__MTP_PROTOCOL_SUPPORT"/>
+ </feature>
+ <feature name="Location" statusflags="0x00000001" uid="0x00000072"></feature>
+ <feature name="MobileIP" statusflags="0x00000001" uid="0x10281819"></feature>
+ <feature name="OfflineMode" statusflags="0x00000001" uid="0x00000007"></feature>
+ <feature name="DRM" statusflags="0x00000001" uid="0x0000005B"></feature>
+ <feature name="Vibra" statusflags="0x00000001" uid="0x0000019B">
+ <hrhmacro include="__VIBRA"/>
+ </feature>
+ <feature name="AmbientLightSensor" statusflags="0x00000001" uid="0x000005F9">
+ <hrhmacro include="__SERIES60_AMBIENT_LIGHT_SENSOR"/>
+ </feature>
+ <feature name="CoverDisplay" statusflags="0x00000001" uid="0x00000003">
+ <hrhmacro include="__COVER_DISPLAY"/>
+ </feature>
+ <feature name="KeypadNoSlider" statusflags="0x00000001" uid="0x000003F5">
+ <hrhmacro include="__SERIES60_KEYPAD_NO_SLIDER"/>
+ </feature>
+ <feature name="LocationManagement" statusflags="0x00000001" uid="0x10279818">
+ <hrhmacro exclude="SYMBIAN_EXCLUDE_LOCATION_MANAGEMENT"/>
+ </feature>
+ <feature name="LocationAPIVariant2" statusflags="0x00000000" uid="0x10285D69">
+ <hrhmacro include="SYMBIAN_INCLUDE_LOCATION_API_VARIANT2"/>
+ </feature>
+ <feature name="BluetoothGPSPositioningPlugin" statusflags="0x00000000" uid="0x0000007A">
+ <hrhmacro include="__BLUETOOTHGPSPSY"/>
+ </feature>
+ <feature name="DefaultPositioningPlugin" statusflags="0x00000000" uid="0x10285D6B">
+ <hrhmacro include="SYMBIAN_INCLUDE_DEFAULT_PM"/>
+ </feature>
+ <feature name="SimulationPositioningPlugin" statusflags="0x00000000" uid="0x10285D6C">
+ <hrhmacro include="SYMBIAN_INCLUDE_SIMULATION_PM"/>
+ </feature>
+ <feature name="LocationPrivacyRequestAPIs" statusflags="0x00000000" uid="0x102859F2">
+ <hrhmacro include="SYMBIAN_INCLUDE_LOCATION_PRIVACY_REQUEST_APIS"/>
+ </feature>
+ <feature name="LocationAdvancedDialog" statusflags="0x00000000" uid="0x102859F3">
+ <hrhmacro include="SYMBIAN_INCLUDE_LOCATION_ADVANCED_DIALOG"/>
+ </feature>
+ <feature name="CsVideoTelephony" statusflags="0x00000001" uid="0x00000059">
+ <hrhmacro include="__CS_VIDEO_TELEPHONY"/>
+ </feature>
+ <feature name="EmergencyCallsEnabledInOfflineMode" statusflags="0x00000001" uid="0x00000126">
+ <hrhmacro include="__COMMON_TSY__EMERGENCY_CALLS_ENABLED_IN_OFFLINE_MODE"/>
+ </feature>
+ <feature name="DriveModeCanRestrictMtCalls" statusflags="0x00000001" uid="0x00000584">
+ <hrhmacro include="__DRIVE_MODE"/>
+ </feature>
+ <feature name="FmTx" statusflags="0x00000001" uid="0x000006A9">
+ <hrhmacro include="FF_FMTX"/>
+ </feature>
+ <!-- PREQ 2051 - Variation Support - Start -->
+ <feature name="Libxml2" statusflags="0x00000001" uid="0x10286747">
+ <hrhmacro infeaturesetiby="no" exclude="SYMBIAN_EXCLUDE_LIBXML2"/>
+ </feature>
+ <feature name="Libxml2SAXParser" statusflags="0x00000001" uid="0x10286707">
+ <hrhmacro infeaturesetiby="no" exclude="SYMBIAN_EXCLUDE_LIBXML2_SAX_CPARSER_PLUGIN"/>
+ </feature>
+ <feature name="Libxml2DOMXPathAPI" statusflags="0x00000001" uid="0x10286727">
+ <hrhmacro infeaturesetiby="no" exclude="SYMBIAN_EXCLUDE_LIBXML2_DOM_XPATH_API"/>
+ </feature>
+ <!-- PREQ 2051 - Variation Support - End -->
+ </featureset>
+
+ <defaultfeaturerange higheruid="0x10281805" loweruid="0x10279806"></defaultfeaturerange>
+</featuredatabase>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/kerneltrace.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#define _DEBUG
+kerneltrace=0x00080000
+romname=##VARIANT##_##BUILDNO##LANGID##.kerneltrace.IMG
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/pagedrom.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#if !defined PAGED_ROM
+#define PAGED_ROM
+#endif
+
+#if !defined EFFICIENT_ROM_PAGING
+// Uncomment next line if efficient rom paging is wanted.
+//#define EFFICIENT_ROM_PAGING
+#endif
+
+#if !defined USE_CODE_PAGING
+// Uncomment next line if code paging is wanted
+#define USE_CODE_PAGING
+#endif
+
+#if !defined USE_DATA_PAGING
+// Uncomment next line if Writable Data Paging is wanted.
+//#define USE_DATA_PAGING
+#endif
+
+#if !defined CODE_PAGING_FROM_ROFS
+// Uncomment next line if code paging from primary rofs is wanted
+#define CODE_PAGING_FROM_ROFS
+#endif
+
+
+// uncomment next line if device DP configuration wanted
+externaltool=configpaging
+
+#if defined EFFICIENT_ROM_PAGING
+externaltool=efficient_rom_paging
+#endif
+
+ROM_IMAGE[0] {
+// Min Max Young/Old NAND page read NAND page read
+// live live page ratio delay CPU overhead
+// pages pages (microseconds) (microseconds)
+//
+demandpagingconfig 256 512 3 0 0
+
+pagingoverride defaultpaged
+
+#if defined USE_CODE_PAGING
+codepagingpolicy defaultpaged
+#endif
+
+#if defined USE_DATA_PAGING
+datapagingpolicy defaultpaged
+#endif
+}
+
+#if defined CODE_PAGING_FROM_ROFS
+ROM_IMAGE[1] {
+pagingoverride defaultpaged
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/pagedrom_functional.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#if !defined PAGED_ROM
+#define PAGED_ROM
+#endif
+
+#if !defined EFFICIENT_ROM_PAGING
+// Uncomment next line if efficient rom paging is wanted.
+//#define EFFICIENT_ROM_PAGING
+#endif
+
+#if !defined USE_CODE_PAGING
+// Uncomment next line if code paging is wanted
+#define USE_CODE_PAGING
+#endif
+
+#if !defined USE_DATA_PAGING
+// Uncomment next line if Writable Data Paging is wanted.
+//#define USE_DATA_PAGING
+#endif
+
+#if !defined CODE_PAGING_FROM_ROFS
+// Uncomment next line if code paging from primary rofs is wanted
+#define CODE_PAGING_FROM_ROFS
+#endif
+
+
+// uncomment next line if device DP configuration wanted
+//externaltool=configpaging
+
+#if defined EFFICIENT_ROM_PAGING
+externaltool=efficient_rom_paging
+#endif
+
+ROM_IMAGE[0] {
+// Min Max Young/Old NAND page read NAND page read
+// live live page ratio delay CPU overhead
+// pages pages (microseconds) (microseconds)
+//
+demandpagingconfig 64 128 3 0 0
+
+pagingoverride defaultpaged
+
+#if defined USE_CODE_PAGING
+codepagingpolicy defaultpaged
+#endif
+
+#if defined USE_DATA_PAGING
+datapagingpolicy defaultpaged
+#endif
+}
+
+#if defined CODE_PAGING_FROM_ROFS
+ROM_IMAGE[1] {
+pagingoverride defaultpaged
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/pagedrom_stressed.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 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:
+*
+*/
+#if !defined PAGED_ROM
+#define PAGED_ROM
+#endif
+
+#if !defined EFFICIENT_ROM_PAGING
+// Uncomment next line if efficient rom paging is wanted.
+//#define EFFICIENT_ROM_PAGING
+#endif
+
+#if !defined USE_CODE_PAGING
+// Uncomment next line if code paging is wanted
+#define USE_CODE_PAGING
+#endif
+
+#if !defined USE_DATA_PAGING
+// Uncomment next line if Writable Data Paging is wanted.
+//#define USE_DATA_PAGING
+#endif
+
+#if !defined CODE_PAGING_FROM_ROFS
+// Uncomment next line if code paging from primary rofs is wanted
+#define CODE_PAGING_FROM_ROFS
+#endif
+
+
+// uncomment next line if device DP configuration wanted
+externaltool=configpaging:configpaging_stressed.cfg
+
+#if defined EFFICIENT_ROM_PAGING
+externaltool=efficient_rom_paging
+#endif
+
+ROM_IMAGE[0] {
+// Min Max Young/Old NAND page read NAND page read
+// live live page ratio delay CPU overhead
+// pages pages (microseconds) (microseconds)
+//
+demandpagingconfig 128 128 3 0 0
+
+pagingoverride defaultpaged
+
+#if defined USE_CODE_PAGING
+codepagingpolicy defaultpaged
+#endif
+
+#if defined USE_DATA_PAGING
+datapagingpolicy defaultpaged
+#endif
+}
+
+#if defined CODE_PAGING_FROM_ROFS
+ROM_IMAGE[1] {
+pagingoverride defaultpaged
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/textshell.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,210 @@
+#ifndef __TEXTSHELL_OBY__
+#define __TEXTSHELL_OBY__
+
+// Copyright (c) 2007-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:
+// This OBY File is used to build Text Shell ROM Images.
+//
+//
+
+define OBEYFILE TextShell
+define ROMDATE ##TODAY##
+
+#define NO_METROTRK_APP // don't want metrotrk application
+#define HAS_ETHERNET // include etherDrv, ether802, DHCP
+#define SYMBIAN_EXCLUDE_FAX
+#undef __IPSEC
+#define SYMBIAN_EXCLUDE_OBEX
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+#define _SSMSTARTUPMODE 1 //for ssma boot up.
+#else
+#define _STARTUPMODE1 // for sysstart.iby
+#endif
+
+#define __MMC
+#define __COVER_DISPLAY
+#define __IRDA
+#define __BT
+#define __USB
+#define __CS_VIDEO_TELEPHONY
+#define __DHCP
+#define __COMMON_TSY__EMERGENCY_CALLS_ENABLED_IN_OFFLINE_MODE
+#define __VIBRA
+#define __MTP_PROTOCOL_SUPPORT
+#define __SERIES60_KEYPAD_NO_SLIDER
+#define __DRIVE_MODE
+#define __SERIES60_AMBIENT_LIGHT_SENSOR
+#define __UPNP_PRINT_FRAMEWORK
+#define FF_FMTX
+
+// The following 3 macros need to be removed once LibXML2 is depended
+// by any of the component in textshell image.
+#define SYMBIAN_EXCLUDE_LIBXML2
+#define SYMBIAN_EXCLUDE_LIBXML2_SAX_CPARSER_PLUGIN
+#define SYMBIAN_EXCLUDE_LIBXML2_DOM_XPATH_API
+
+// Various workarounds to avoid dependencies on UIKON
+
+#define __TLS_IBY__ // exclude TLS
+#define __TLSPROVIDER_IBY__ // exclude TLSPROVIDER
+#define __OBEXPROTOCOL_IBY__ // exclude obex.dll etc
+#define __WLANEAPMETHODS_IBY__ // exclude eap_tls.msy & friends
+//
+
+#include <header.iby> /* ROM header definitions */
+#include <base.iby> /* The lowest-level of the operating system */
+
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+
+#include <ssma.iby> /*System State Management Architecture*/
+#include <ssplugins.iby> /*System State Management Plugins*/
+
+//Include SSM optional components to enable teams to build a plain textshell rom (on the lines of DEF128306),
+//following removal of h4_textshell_rom.oby.
+#include <amastart.iby>
+#include <aplp.iby>
+#include <shma.iby>
+#include <ssrefplugins.iby>
+#else
+#include <sysstart.iby>
+#include <sysstartconfig.iby>
+#endif // SYMBIAN_SYSTEM_STATE_MANAGEMENT
+
+#include <debug.iby>
+file=ABI_DIR\DEBUG_DIR\RUNTESTS.EXE sys\bin\RUNTESTS.EXE
+
+
+file=ABI_DIR\DEBUG_DIR\EDISP.DLL sys\bin\EDISP.DLL
+
+
+#ifdef FULL_WINDOWSERVER
+ ERROR TextShell ROMs currently require the Text window server //#include <wserv.iby>
+#else
+ file=ABI_DIR\DEBUG_DIR\ewsrv.EXE sys\bin\EWSRV.EXE fixed
+ file=ABI_DIR\DEBUG_DIR\ECONS.DLL sys\bin\ECONS.DLL
+#endif
+
+#include <eshell.iby>
+
+#if !defined(FULL_WINDOWSERVER)
+#include <graphics_textshell.iby>
+#endif
+
+#include <centralrepository.iby>
+ file=ABI_DIR\BUILD_DIR\abclient.dll sys\bin\abclient.dll
+
+#include <crypto.iby>
+
+#include <c32.iby>
+#include <ecuart.iby>
+#include <irda.iby>
+#include <bluetooth.iby>
+#include <stdlib.iby>
+#include <gdi.iby>
+#include <fntstore.iby>
+#include <fbserv.iby>
+#include <bitgdi.iby>
+#include <iculayoutengine.iby>
+#include <freetype.iby>
+#include <opengles.iby>
+
+#include <printers.iby>
+
+// include enough multimedia components to keep cone happy. includes symbian optional, reference and replacable components
+#include <mmf.iby>
+#include <mmcommon.iby>
+#include <mdf.iby>
+#include <devvideo.iby>
+#include <devsound_pluginsupport.iby>
+#include <devsound_refplugin.iby>
+#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
+#include <acf.iby>
+#include <a3fdevsound.iby>
+#include <acl.iby>
+#include <devsoundadaptationinfo.iby>
+#include <refacladaptation.iby>
+#include <refmmrc.iby>
+#include <a3fserverstart.iby>
+#endif // SYMBIAN_MULTIMEDIA_A3FDEVSOUND
+
+#include <traces.iby>
+#include <mmf_plugin.iby>
+#include <omxilcompref.iby>
+#include <omxilcomp.iby>
+#include <omxilcore.iby>
+
+ #include <inetprotutil.iby> /* needed for mmfcontrollerframework.dll */
+ #include <caf.iby> /* needed for mediaclientutils.dll */
+
+
+#include <sysagent.iby>
+
+#include <network.iby>
+ #include <dial.iby> // needed by commsdat
+
+#include <etel.iby>
+#include <smsstack.iby>
+
+#include <etelmm.iby>
+#include <etelpckt.iby>
+#include <mmtsy.iby>
+#include <etelsat.iby>
+#include <sysawatcher.iby>
+
+#include <bafl.iby>
+#include <ecom.iby>
+#include <store.iby>
+#include <dbms.iby>
+#include <pwrcli.iby>
+#include <xml.iby>
+#include <ups.iby>
+#include <securitycommonutils.iby>
+
+/* Feature Management run-time */
+#ifdef SYMBIAN_FEATURE_MANAGER
+
+// Include both old and new components when Feature Manager enabled
+#include <featmgr.iby>
+#include <featreg.iby>
+
+#else
+
+// Include only the original Feature Registry otherwise
+#include <featreg.iby>
+#ifndef ROM_FEATURE_MANAGEMENT
+/* Provide a default configuration file for the feature registry */
+data=EPOCROOT##epoc32\data\config\featreg_default.cfg private\102744CA\featreg.cfg
+#endif
+#endif
+
+#include <testexecute.iby> // Test Execute framework
+
+// Major unwanted extras needed to make the image link correctly
+
+#ifndef __APPARC_IBY__
+REM Satisfy unwanted references to appgrfx.dll
+#include <apparc.iby> /* Application architecture DLLs */
+ #include <emime.iby> /* Mime recognition */
+#endif
+
+#ifndef __CONE_IBY__
+REM Satisfy unwanted reference to cone.dll, usually for CCoeEnv::Static()
+#include <cone.iby>
+ file=ABI_DIR\BUILD_DIR\viewcli.dll sys\bin\viewcli.dll
+ file=ABI_DIR\BUILD_DIR\viewsrv.dll sys\bin\viewsrv.dll
+ #include <egul.iby>
+ #include <numberconversion.iby>
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/textshell_Chassis_BATS.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,204 @@
+#ifndef __TEXTSHELL_OBY__
+#define __TEXTSHELL_OBY__
+
+// Copyright (c) 2007-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:
+// This OBY File is used to build Text Shell ROM Images.
+//
+//
+
+define OBEYFILE TextShell
+define ROMDATE ##TODAY##
+
+// Undefine things in global System Include that stops the SymTB textshell rom from working.
+#undef USE_CUSTOM_MMC_PARTITION
+#undef SYMBIAN_EXCLUDE_SCDV
+#undef SYMBIAN_EXCLUDE_KEYMAP
+
+// undef __BT to only get the client side dlls which should be present even if bluetooth hardware not present or not working.
+#undef __BT
+
+#define NO_METROTRK_APP // don't want metrotrk application
+#define HAS_ETHERNET // include etherDrv, ether802, DHCP
+#define SYMBIAN_EXCLUDE_FAX
+#undef __IPSEC
+#define SYMBIAN_EXCLUDE_OBEX
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+#define _SSMSTARTUPMODE 1 //for ssma boot up.
+#else
+#define _STARTUPMODE1 // for sysstart.iby
+#endif
+
+// The following 3 macros need to be removed once LibXML2 is depended
+// by any of the component in textshell image.
+#define SYMBIAN_EXCLUDE_LIBXML2
+#define SYMBIAN_EXCLUDE_LIBXML2_SAX_CPARSER_PLUGIN
+#define SYMBIAN_EXCLUDE_LIBXML2_DOM_XPATH_API
+
+// Various workarounds to avoid dependencies on UIKON
+
+#define __TLS_IBY__ // exclude TLS
+#define __TLSPROVIDER_IBY__ // exclude TLSPROVIDER
+#define __OBEXPROTOCOL_IBY__ // exclude obex.dll etc
+#define __WLANEAPMETHODS_IBY__ // exclude eap_tls.msy & friends
+//
+
+#include <header.iby> /* ROM header definitions */
+#include <base.iby> /* The lowest-level of the operating system */
+
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+
+#include <ssma.iby> /*System State Management Architecture*/
+#include <ssplugins.iby> /*System State Management Plugins*/
+
+//Include SSM optional components to enable teams to build a plain textshell rom (on the lines of DEF128306),
+//following removal of h4_textshell_rom.oby.
+#include <amastart.iby>
+#include <aplp.iby>
+#include <shma.iby>
+#include <ssrefplugins.iby>
+#include <core/os/platformenv.iby>
+#include <core/os/ssmmapperutility.iby>
+#else
+#include <sysstart.iby>
+#include <sysstartconfig.iby>
+#endif // SYMBIAN_SYSTEM_STATE_MANAGEMENT
+
+#include <debug.iby>
+file=ABI_DIR\DEBUG_DIR\RUNTESTS.EXE sys\bin\RUNTESTS.EXE
+
+
+file=ABI_DIR\DEBUG_DIR\EDISP.DLL sys\bin\EDISP.DLL
+
+
+#ifdef FULL_WINDOWSERVER
+ ERROR TextShell ROMs currently require the Text window server //#include <wserv.iby>
+#else
+ file=ABI_DIR\DEBUG_DIR\ewsrv.EXE sys\bin\EWSRV.EXE fixed
+ file=ABI_DIR\DEBUG_DIR\ECONS.DLL sys\bin\ECONS.DLL
+#endif
+
+#include <eshell.iby>
+
+#if !defined(FULL_WINDOWSERVER)
+#include <graphics_textshell.iby>
+#endif
+
+#include <centralrepository.iby>
+ file=ABI_DIR\BUILD_DIR\abclient.dll sys\bin\abclient.dll
+
+#include <crypto.iby>
+
+#include <c32.iby>
+#include <ecuart.iby>
+#include <irda.iby>
+#include <bluetooth.iby>
+#include <stdlib.iby>
+#include <gdi.iby>
+#include <fntstore.iby>
+#include <fbserv.iby>
+#include <bitgdi.iby>
+#include <iculayoutengine.iby>
+#include <freetype.iby>
+#include <opengles.iby>
+
+#include <printers.iby>
+
+// include enough multimedia components to keep cone happy. includes symbian optional, reference and replacable components
+//#include <mmf.iby>
+//#include <mmcommon.iby>
+//#include <mdf.iby>
+//#include <devvideo.iby>
+//#include <devsound_pluginsupport.iby>
+//#include <devsound_refplugin.iby>
+//#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
+//#include <acf.iby>
+//#include <a3fdevsound.iby>
+//#include <acl.iby>
+//#include <devsoundadaptationinfo.iby>
+//#include <refacladaptation.iby>
+//#include <refmmrc.iby>
+//#include <a3fserverstart.iby>
+//#endif // SYMBIAN_MULTIMEDIA_A3FDEVSOUND
+
+#include <traces.iby>
+//#include <mmf_plugin.iby>
+//#include <omxilcompref.iby>
+//#include <omxilcomp.iby>
+//#include <omxilcore.iby>
+
+ #include <inetprotutil.iby> /* needed for mmfcontrollerframework.dll */
+ #include <caf.iby> /* needed for mediaclientutils.dll */
+
+
+#include <sysagent.iby>
+
+#include <network.iby>
+ #include <dial.iby> // needed by commsdat
+
+#include <etel.iby>
+#include <smsstack.iby>
+
+#include <etelmm.iby>
+#include <etelpckt.iby>
+#include <mmtsy.iby>
+#include <etelsat.iby>
+#include <sysawatcher.iby>
+
+#include <bafl.iby>
+#include <ecom.iby>
+#include <store.iby>
+#include <dbms.iby>
+#include <pwrcli.iby>
+#include <xml.iby>
+#include <ups.iby>
+#include <securitycommonutils.iby>
+
+/* Feature Management run-time */
+#ifdef SYMBIAN_FEATURE_MANAGER
+
+// Include both old and new components when Feature Manager enabled
+#include <featmgr.iby>
+#include <featreg.iby>
+
+#else
+
+// Include only the original Feature Registry otherwise
+#include <featreg.iby>
+#ifndef ROM_FEATURE_MANAGEMENT
+/* Provide a default configuration file for the feature registry */
+data=EPOCROOT##epoc32\data\config\featreg_default.cfg private\102744CA\featreg.cfg
+#endif
+#endif
+
+#include <testexecute.iby> // Test Execute framework
+
+// Major unwanted extras needed to make the image link correctly
+
+#ifndef __APPARC_IBY__
+REM Satisfy unwanted references to appgrfx.dll
+#include <apparc.iby> /* Application architecture DLLs */
+ #include <emime.iby> /* Mime recognition */
+#endif
+
+//#ifndef __CONE_IBY__
+REM Satisfy unwanted reference to cone.dll, usually for CCoeEnv::Static()
+//#include <cone.iby>
+// file=ABI_DIR\BUILD_DIR\viewcli.dll sys\bin\viewcli.dll
+// file=ABI_DIR\BUILD_DIR\viewsrv.dll sys\bin\viewsrv.dll
+// #include <egul.iby>
+// #include <numberconversion.iby>
+//#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/include/textshell_naviengine_smp.oby Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,21 @@
+// Copyright (c) 2007-2010 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:
+// This OBY File is used to build Text Shell NaviEngine SMP ROM Images.
+//
+//
+
+#define SMP
+#include <naviengine.oby>
+#include <textshell_Chassis_bats.oby>
+#include <platsec.oby>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/tools/cdf.dtd Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,46 @@
+<!ELEMENT component (localisation?,file+)>
+<!ATTLIST component id CDATA #REQUIRED >
+
+<!ELEMENT file (source, destination,
+ localisation?, options? ,
+ features?, dynamicDependencies?)>
+<!ATTLIST file
+ id CDATA #REQUIRED
+ customisable (true|false) #IMPLIED
+ addressable (xip|nonxip|dontcare) #IMPLIED
+ compress (unchanged|compress|uncompress) #IMPLIED
+ type (normal|bitmap|compressedbitmap|autobitmap|aif|plugin) #IMPLIED
+ plugin_name CDATA #IMPLIED>
+
+<!ELEMENT source (#PCDATA)>
+<!ELEMENT destination (#PCDATA)>
+<!ELEMENT features (supports?,prevents?)>
+<!ELEMENT supports (feature+)>
+<!ELEMENT prevents (feature+)>
+
+<!ELEMENT feature EMPTY>
+<!ATTLIST feature uid CDATA #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT dynamicDependencies (depend+)>
+<!ELEMENT depend (#PCDATA)>
+<!ELEMENT localisation (default, language*)>
+<!ELEMENT default (#PCDATA)>
+<!ELEMENT language (#PCDATA)>
+<!ELEMENT options ((multilinguify | stack | heapmin |
+ heapmax | fixed | priority |
+ uid1 | uid2 | uid3 |
+ dll | dlldatatop )+)>
+
+<!ELEMENT multilinguify (#PCDATA)>
+
+<!ELEMENT stack (#PCDATA)>
+<!ELEMENT heapmin (#PCDATA)>
+<!ELEMENT heapmax (#PCDATA)>
+<!ELEMENT fixed (#PCDATA)>
+<!ELEMENT priority (#PCDATA)>
+<!ELEMENT uid1 (#PCDATA)>
+<!ELEMENT uid2 (#PCDATA)>
+<!ELEMENT uid3 (#PCDATA)>
+<!ELEMENT dll (#PCDATA)>
+<!ELEMENT dlldatatop (#PCDATA)>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/tools/configpaging/configpaging.cfg Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,27 @@
+#
+# System config v1.0
+#
+
+#
+# To set the default setting use:
+# defaultpaged
+# Or
+# defaultunpaged
+#
+# This will override the paged/unpaged flags in executables and any paged/unpaged attributes in iby files.
+# Do not use a default setting if the existing paged/unpaged flags/attributes are to be respected.
+#
+# To mark executables as not pageable use:
+# <executable regex> unpaged
+# Or
+# unpaged:
+# <executable regex>
+# <executable regex>
+#
+# To include other configuration files within this configuration file use:
+# include "<includefile>"
+#
+# Included files will be processed before the remaining lines of the parent file are processed. Included files
+# can themselves include other other files.
+
+include "configpaging_recommended.cfg"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/tools/configpaging/configpaging_recommended.cfg Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,144 @@
+#
+# This file contains those files that are recommended to be unpaged to maintain performance
+# in demand paging ROMs.
+#
+# unpaged - recommended
+#
+unpaged:
+animation.dll
+animationserver.dll
+animationshared.dll
+animators.dll
+bmpanim.dll
+bmpansrv.dll
+clocka.dll
+cone.dll
+gfxtrans.dll
+gfxtransadapter.dll
+domainpolicy2.dll
+sysstart.exe
+viewcli.dll
+viewsrv.dll
+domaincli.dll
+domainpolicy.dll
+domainsrv.exe
+exstart.dll
+e32strt.exe
+elocl.01
+elocl.02
+elocl.03
+elocl.04
+elocl.05
+elocl.10
+elocl.18
+elocl.19
+elocl.29
+elocl.31
+elocl.32
+elocl.sc
+elocl.loc
+_h4hrp_e32strt.exe
+_h4hrp_e32strt_me.exe
+remconavrcpstatusconverter.dll
+remconstatusapi.dll
+btcomm.csy
+btextnotifiers.dll
+hciproxy.dll
+btmanserver.exe
+bnep.drv
+panagt.agt
+panhelper.dll
+remconextapi1.dll
+sdpagent.dll
+sdpdatabase.dll
+sdpserver.exe
+mrouteragent.agt
+linebreak.dll
+iculayoutengine.dll
+libgles_cm.dll
+egldisplayproperty.dll
+remotegc.dll
+infra-red.prt
+ircomm.csy
+irda.dll
+irdialbca.dll
+irtranp.dll
+msgs.dll
+watcher.exe
+deflatecomp.dll
+sdpcodec.dll
+sigcomp.dll
+sipclient.dll
+sipcodec.dll
+sipdigest.dll
+sipgprsmon.dll
+siph2lanbearermonitor.dll
+sipietfagnt.dll
+sipimsagnt.dll
+sipipsec.dll
+sipprofile.dll
+sipprofilecli.dll
+sipprofilefsm.dll
+sipprofilesrv.exe
+sipproxyrsv.dll
+sipreqhand.dll
+sipresolver.dll
+siprsvclient.dll
+siprsvsrv.exe
+sipserver.exe
+sipsigcomp.dll
+siptls.dll
+sipcpr.dll
+sipdummyprt.prt
+sipparams.dll
+sipscpr.dll
+sipstatemachine.dll
+bitmaptransforms.dll
+bitmaptransformsrefplugin.dll
+imageconversion.dll
+jpegcodec.dll
+jpegexifplugin.dll
+jpegimageframeplugin.dll
+recicl.dll
+iclwrapperimagedisplay.dll
+imagedisplay.dll
+imagedisplayresolver.dll
+imagetransform.dll
+recmmf.dll
+mmruf.dll
+gsmu.dll
+smsprot.prt
+smsu.dll
+wapprot.prt
+cdmasms.prt
+cdmau.dll
+cdmawapprot.prt
+dhcpserv.exe
+netcfgextndhcp.dll
+obex.dll
+obexbtrfcommtransportcontroller.dll
+obexcommontransport.dll
+obexirdattptransportcontroller.dll
+obexusbtransportcontroller.dll
+obexextensionapis.dll
+randsvr.exe
+swtlstokentypeplugin.dll
+tlscacheclient.dll
+tlscacheserver.exe
+tlsprovider.dll
+acmclasscontroller.dll
+msclasscontroller.dll
+obexclasscontroller.dll
+usbclasscontroller.dll
+whcmclasscontroller.dll
+bafl.dll
+centralrepository.dll
+centralrepositorysrv.exe
+charconv.dll
+ecom.dll
+ecomserver.exe
+ecompatchdata.dll
+estlib.dll
+indicatorwatcher.dll
+signalstrengthwatcher.dll
+telwatcherbase.dll
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/tools/configpaging/configpaging_stressed.cfg Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Stressed paging configuration
+#
+
+#
+# To set the default setting use:
+# defaultpaged
+# Or
+# defaultunpaged
+#
+# This will override the paged/unpaged flags in executables and any paged/unpaged attributes in iby files.
+# Do not use a default setting if the existing paged/unpaged flags/attributes are to be respected.
+#
+# To mark executables as not pageable use:
+# <executable regex> unpaged
+# Or
+# unpaged:
+# <executable regex>
+# <executable regex>
+#
+# To include other configuration files within this configuration file use:
+# include "<includefile>"
+#
+# Included files will be processed before the remaining lines of the parent file are processed. Included files
+# can themselves include other other files.
+
+defaultpaged
+
+#
+# mandatory locked-down list. This should only contain executables that use realtime APIs and their
+# dependencies, which would otherwise panic if they took a page fault
+#
+#unpaged:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/tools/featuredatabase.dtd Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,38 @@
+<!ELEMENT hrhmacro EMPTY>
+<!ATTLIST hrhmacro
+ exclude CDATA #IMPLIED
+ include CDATA #IMPLIED
+ infeaturesetiby CDATA #IMPLIED>
+
+<!ELEMENT hfileheader (#PCDATA)>
+<!ATTLIST hfileheader
+ interfacestatus CDATA #REQUIRED
+ interfacevisibility CDATA #REQUIRED>
+
+<!ELEMENT featureset ((hfileheader?, (featureoverride|feature)+))>
+<!ATTLIST featureset
+ hfilename CDATA #IMPLIED
+ ibyname CDATA #IMPLIED
+ namespace CDATA #IMPLIED>
+
+<!ELEMENT featuredatabase ((featureset+, defaultfeaturerange*))>
+<!ELEMENT feature ((hrhmacro?, comment?))>
+<!ATTLIST feature
+ name CDATA #REQUIRED
+ statusflags CDATA #REQUIRED
+ uid CDATA #REQUIRED
+ userdata CDATA #IMPLIED>
+
+<!ELEMENT featureoverride ((hrhmacro?, comment?))>
+<!ATTLIST featureoverride
+ name CDATA #REQUIRED
+ statusflags CDATA #IMPLIED
+ uid CDATA #REQUIRED
+ userdata CDATA #IMPLIED>
+
+<!ELEMENT defaultfeaturerange ((comment?))>
+<!ATTLIST defaultfeaturerange
+ higheruid CDATA #REQUIRED
+ loweruid CDATA #REQUIRED>
+
+<!ELEMENT comment (#PCDATA)>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/tools/featureuids.dtd Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,16 @@
+<!ELEMENT featureuids (features,default)>
+<!ELEMENT features (feature+)>
+<!ELEMENT feature EMPTY>
+
+<!ATTLIST feature
+ name CDATA #REQUIRED
+ uid CDATA #REQUIRED
+ installable (true|false) #IMPLIED>
+
+<!ELEMENT default (range+)>
+<!ELEMENT range EMPTY>
+<!ATTLIST range
+ min CDATA #REQUIRED
+ max CDATA #REQUIRED
+ support (include|exclude) #REQUIRED>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/romkiteka2/tools/imageContent.dtd Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,73 @@
+<!ELEMENT imageContent (version?, romchecksum?, time?,
+ options?, romgeometry, romtarget, romscope?)+>
+
+<!ELEMENT version (#PCDATA)>
+<!ELEMENT romchecksum (#PCDATA)>
+<!ELEMENT time (#PCDATA)>
+<!ELEMENT romgeometry (image+)>
+<!ELEMENT romtarget (target+)>
+<!ELEMENT romscope ((obyFile|cdf)+)>
+
+<!ELEMENT options ((binaryselectionorder | trace | bootbinary |
+ dataaddress | debugport |
+ defaultstackreserve | device |
+ wrapper | kernel | primary+ |
+ secondary+ | romalign | romlinearbase |
+ variant | autosize | extension | coreimage)+)>
+
+<!ELEMENT binaryselectionorder (#PCDATA)>
+<!ELEMENT trace (#PCDATA)>
+<!ELEMENT bootbinary (#PCDATA)>
+<!ELEMENT wrapper (#PCDATA)>
+<!ATTLIST wrapper type (none|epoc|coff) #REQUIRED>
+
+<!ELEMENT kernel (dataaddress, heapmax, heapmin, name, trace?)>
+<!ATTLIST kernel number (single|multi) #IMPLIED>
+
+<!ELEMENT heapmax (#PCDATA)>
+<!ELEMENT heapmin (#PCDATA)>
+<!ELEMENT name (#PCDATA)>
+
+<!ELEMENT dataaddress (#PCDATA)>
+<!ELEMENT debugport (#PCDATA)>
+<!ELEMENT defaultstackreserve (#PCDATA)>
+<!ELEMENT device (file+)>
+<!ELEMENT primary (file+)>
+<!ELEMENT secondary (file+)>
+<!ELEMENT variant (file+)>
+<!ELEMENT extension (file+)>
+<!ELEMENT romalign (#PCDATA)>
+<!ELEMENT romlinearbase (#PCDATA)>
+<!ELEMENT autosize (#PCDATA)>
+<!ELEMENT coreimage (#PCDATA)>
+
+<!ELEMENT file (source,destination,fixed?)>
+<!ATTLIST file
+ id CDATA #REQUIRED>
+<!ELEMENT source (#PCDATA)>
+<!ELEMENT destination (#PCDATA)>
+<!ELEMENT fixed (#PCDATA)>
+
+
+<!ELEMENT image (partition?)>
+<!ATTLIST image
+ id CDATA #REQUIRED
+ name CDATA #REQUIRED
+ type (xip|nonxip) #REQUIRED
+ compression (compress|nocompress) #IMPLIED
+ extension (yes|no) "no"
+ size CDATA #REQUIRED>
+
+<!ELEMENT target (include,exclude?)>
+<!ATTLIST target imageid CDATA #REQUIRED>
+<!--- target imageid of any allowed where it there is no constraints on
+ which image the files should be placed. -->
+<!ELEMENT include ((feature|obyFile|cdf)+)>
+<!ELEMENT exclude (feature+)>
+<!ELEMENT partition (#PCDATA)>
+<!ELEMENT feature EMPTY>
+<!ATTLIST feature name CDATA #IMPLIED
+ uid CDATA #IMPLIED>
+<!ELEMENT obyFile (#PCDATA)>
+<!ELEMENT cdf (#PCDATA)>
+<!ATTLIST cdf type (file|dir) "file">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hostenv/unzip-5.40/group/unzip-5.40.mrp.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+#
+
+component dev_build_dist_unzip-5.40
+
+source \src\tools\build\dist\unzip-5.40
+exports \src\tools\build\dist\unzip-5.40\group
+
+notes_source \src\tools\build\dist\unzip-5.40\group\release.txt
+
+ipr T
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hostenv/zip-2.2/group/zip-2.2.mrp.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+#
+
+component dev_build_dist_zip-2.2
+
+source \src\tools\build\dist\zip-2.2
+exports \src\tools\build\dist\zip-2.2\group
+
+notes_source \src\tools\build\dist\zip-2.2\group\release.txt
+
+ipr T
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imgcheck/group/distribution.policy Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD: Reference/Test Tools
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javatoolsplat/j2re-1.3.1/group/j2re-1.3.1.mrp.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+#
+
+component dev_build_dist_j2re-1.3.1
+
+source \src\tools\build\dist\j2re-1.3.1
+exports \src\tools\build\dist\j2re-1.3.1\group
+
+notes_source \src\tools\build\dist\j2re-1.3.1\group\release.txt
+
+ipr T
\ No newline at end of file
--- a/metatools/sysdeftools/group/bld.inf Tue Oct 26 11:12:31 2010 +0800
+++ b/metatools/sysdeftools/group/bld.inf Wed Oct 27 19:35:19 2010 +0800
@@ -63,6 +63,10 @@
../joinsysdef.bat /epoc32/tools/sysdeftools/joinsysdef.bat
../rootsysdef.bat /epoc32/tools/sysdeftools/rootsysdef.bat
+unixperlcmd /epoc32/tools/sysdeftools/checklinks
+unixperlcmd /epoc32/tools/sysdeftools/joinsysdef
+unixperlcmd /epoc32/tools/sysdeftools/rootsysdef
+
// Xalan-calling .bat/unix files (identical, can export from single file)
../joinandparesysdef.bat /epoc32/tools/sysdeftools/joinandparesysdef.bat
../filtering.bat /epoc32/tools/sysdeftools/filtering.bat
--- a/metatools/sysdeftools/group/contents.xml Tue Oct 26 11:12:31 2010 +0800
+++ b/metatools/sysdeftools/group/contents.xml Wed Oct 27 19:35:19 2010 +0800
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ProductsDefinition schema="3.0.0">
<product name="BuildEnvironment" long-name="Build Environment">
- <tool name="sysdeftools" long-name="System Definition Tools" default-src="metatools/sysdeftools" default-dst="/" version="1.0.2">
+ <tool name="sysdeftools" long-name="System Definition Tools" default-src="metatools/sysdeftools" default-dst="/" version="1.0.4">
<!-- core functionality -->
<file filename="*.pl"/>
@@ -29,6 +29,10 @@
</windows>
<linux>
+ <file filename="unixperlcmd" src="metatools/sysdeftools/group/" dstFile="/checklinks"/>
+ <file filename="unixperlcmd" src="metatools/sysdeftools/group/" dstFile="/joinsysdef"/>
+ <file filename="unixperlcmd" src="metatools/sysdeftools/group/" dstFile="/rootsysdef"/>
+
<!-- Xalan-calling unix files -->
<file filename="unixxslcmd" src="metatools/sysdeftools/group/" dstFile="/joinandparesysdef"/>
<file filename="unixxslcmd" src="metatools/sysdeftools/group/" dstFile="/filtering"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metatools/sysdeftools/group/unixperlcmd Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright (c) 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".
+#
+# Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Description:
+# Perl wrapper for Unix
+
+BASEDIR=`dirname $0`
+exec perl $BASEDIR/$0.pl $@
--- a/metatools/sysdeftools/joinsysdef.pl Tue Oct 26 11:12:31 2010 +0800
+++ b/metatools/sysdeftools/joinsysdef.pl Wed Oct 27 19:35:19 2010 +0800
@@ -276,20 +276,26 @@
}
elsif($tag eq 'unit')
{
- foreach my $atr ('bldFile','mrp','base','proFile')
+ foreach my $atr ('bldFile','mrp','base')
{
my $link= $node->getAttribute($atr);
if($link && !($link=~/^\//))
{
$link= &abspath(File::Basename::dirname($file)."/$link");
- foreach my $a (keys %rootmap) {
+ foreach my $a (sort {length($b) - length($a)} keys(%rootmap)) {
$link=~s,^$a,$rootmap{$a},ie;
}
# remove leading ./ which is used to indicate that paths should remain relative
$link=~s,^\./([^/]),$1,;
+ # remove windows drive letter -- only allow paths on the same drive. Use root attribuite to build across drives / filesystems
+ $link=~s,^[a-z]:/,/,i;
$node->setAttribute($atr,$link);
}
}
+ if(scalar @{$node->getChildNodes()} && $maxschema=~/^3\.0/)
+ {
+ die "Error: Fatal syntax error in $file. Unit elements must be empty in schema $maxschema.\n";
+ }
}
elsif($tag eq 'meta')
{
@@ -488,7 +494,7 @@
{
# translate the ID to use the root doc's namespaces
my $node = shift;
- foreach my $id ('id','before')
+ foreach my $id ('id','before','replace')
{
&fixID($node,$id);
}
--- a/metatools/sysdeftools/lib/joinsysdef-module.xsl Tue Oct 26 11:12:31 2010 +0800
+++ b/metatools/sysdeftools/lib/joinsysdef-module.xsl Wed Oct 27 19:35:19 2010 +0800
@@ -136,7 +136,8 @@
<xsl:variable name="linked" select="document(@href,.)/*"/>
<xsl:for-each select="$linked">
<xsl:apply-templates select="//*[(self::component or self::collection or self::package or self::layer) and @href]" mode="scan-for-namespaces"/>
- <xsl:for-each select="//namespace::* | @id-namespace">
+ <xsl:for-each select="//namespace::*[.!='http://www.w3.org/XML/1998/namespace'] | @id-namespace">
+ <!-- ignore XML namespace -->
<xsl:value-of select="concat(name(),' ',.,'
')"/>
</xsl:for-each>
</xsl:for-each>
@@ -466,7 +467,7 @@
<xsl:variable name="prefix" select="name($namespaces[.=$ns])"/>
<xsl:attribute name="{name()}">
<xsl:choose>
- <xsl:when test="$prefix = 'id-namespace' or (not($namespaces[name()='id-namespace']) and $ns=$defaultns)"/> <!-- it's the default namespace, no prefix -->
+ <xsl:when test="$prefix = 'id-namespace' or $namespaces[name()='id-namespace']=$ns or (not($namespaces[name()='id-namespace']) and $ns=$defaultns)"/> <!-- it's the default namespace, no prefix -->
<xsl:when test="$prefix='' and contains(.,':')">
<!-- complex: copy id and copy namespace (namespace should be copied already)-->
<xsl:value-of select="."/>
--- a/metatools/sysdeftools/lib/mergesysdef-module.xsl Tue Oct 26 11:12:31 2010 +0800
+++ b/metatools/sysdeftools/lib/mergesysdef-module.xsl Wed Oct 27 19:35:19 2010 +0800
@@ -136,7 +136,7 @@
<xsl:if test="name(*) != name($other/*)">
<xsl:message terminate="yes">ERROR: Can only merge system models of the same rank</xsl:message>
</xsl:if>
-
+
<xsl:copy>
<xsl:attribute name="schema">
<xsl:call-template name="compare-versions">
@@ -213,7 +213,6 @@
<xsl:with-param name="replaces" select="$replaces"/>
</xsl:apply-templates>
-
<!-- tack on any remaining layers -->
<xsl:apply-templates mode="merge-copy-of" select="$other/systemModel/layer[not(@before) and not(following-sibling::*[@id=current()/layer/@id]) and not(@id=current()/layer/@id)]">
<xsl:with-param name="origin" select="$down"/>
@@ -221,9 +220,45 @@
<xsl:with-param name="replaces" select="$replaces"/>
</xsl:apply-templates>
+ <!-- and now check for error cases, and tack those on -->
+ <xsl:call-template name="check-and-add-out-of-order-items">
+ <xsl:with-param name="match" select="$other/systemModel"/>
+ <xsl:with-param name="down" select="$down"/>
+ <xsl:with-param name="replaces" select="$replaces"/>
+ </xsl:call-template>
</xsl:copy>
</xsl:template>
+<xsl:template name="check-and-add-out-of-order-items"><xsl:param name="match"/><xsl:param name="down"/><xsl:param name="replaces"/>
+ <xsl:if test="$match">
+ <!-- determine the order of the children in the upstream and downstream docs -->
+ <xsl:variable name="up-order">
+ <xsl:for-each select="*[@id=$match/*[not(@before)]/@id]"><xsl:value-of select="@id"/><xsl:text> </xsl:text></xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="down-order">
+ <xsl:for-each select="$match/*[@id = current()/*[not(@before)]/@id]"><xsl:value-of select="@id"/> <xsl:text> </xsl:text></xsl:for-each>
+ </xsl:variable>
+
+ <!-- check for error cases, and tack those on -->
+ <xsl:if test="$up-order != $down-order">
+ <xsl:variable name="down-final" select="$match/*[@id = current()/*[not(@before)]/@id][last()]/@id"/>
+ <!-- the last item in the downstream model that is also in the upstream one -->
+
+ <xsl:variable name="out-of-order" select="$match/*[@id][not(@before=current()/*/@id) and not(@id=current()/*/@id) and following-sibling::*[@id=$down-final]]"/>
+ <!-- contains all items in the downstream model that can't be put in order-->
+ <xsl:if test="$out-of-order">
+ <xsl:message>Warning: Order of <xsl:value-of select="name(*)"/>s in upstream document does not match order in downstream. The following <xsl:value-of select="name(*)"/>s will be appended to the end<xsl:if test="@id"> of <xsl:value-of select="@id"/></xsl:if>: <xsl:for-each select="$out-of-order"><xsl:value-of select="concat(@id,' ')"/></xsl:for-each></xsl:message>
+ </xsl:if>
+ <xsl:apply-templates mode="merge-copy-of" select="$out-of-order">
+ <xsl:with-param name="origin" select="$down"/>
+ <xsl:with-param name="root" select="current()/ancestor::SystemDefinition"/>
+ <xsl:with-param name="replaces" select="$replaces"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:if>
+</xsl:template>
+
+
<xsl:template match="@*|*|comment()" mode="merge-models"><xsl:copy-of select="."/></xsl:template>
@@ -273,67 +308,16 @@
<xsl:choose>
<xsl:when test="not($to-sort)"/> <!-- nothing left to copy. stop -->
<xsl:when test="not($base)"/> <!-- reached end. stop -->
- <xsl:when test="$base[1]/@id=$end/following-sibling::*[1]/@id"/> <!-- passed $end. Stop -->
- <xsl:when test="$base[1]/@id = $to-sort[1]/@id"> <!-- both lists start with same item -->
- <xsl:if test="$base[1]/@id!=$end/@id"> <!-- not at end, so keep going -->
- <xsl:call-template name="copy-sorted-content">
- <xsl:with-param name="base" select="$base[position() != 1]"/>
- <xsl:with-param name="to-sort" select="$to-sort[position() != 1]"/>
- <xsl:with-param name="remainder" select="$remainder"/>
- <xsl:with-param name="start" select="$start"/>
- <xsl:with-param name="end" select="$end"/>
- <xsl:with-param name="down" select="$down"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:when>
- <xsl:when test="$remainder[@id = $base[1]/@id]"> <!-- left over item is in $base -->
- <xsl:call-template name="copy-sorted-content">
- <xsl:with-param name="base" select="$base[position() != 1]"/>
- <xsl:with-param name="to-sort" select="$to-sort"/>
- <xsl:with-param name="remainder" select="$remainder[@id != $base[1]/@id]"/>
- <xsl:with-param name="start" select="$start"/>
- <xsl:with-param name="end" select="$end"/>
- <xsl:with-param name="down" select="$down"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="not($base[@id = $to-sort[1]/@id])"> <!-- in to-sort, but not base -->
- <xsl:if test="$base[1]/@id=$end/@id and not($base[@id=$to-sort[1]/@before])">
- <!-- if at end, then this needs to be copied
- don't copy if the before ID is found in $base -->
- <xsl:apply-templates mode="merge-copy-of" select="$to-sort[1]">
- <xsl:with-param name="origin" select="$down"/>
- <xsl:with-param name="root" select="$end/ancestor::SystemDefinition"/>
- </xsl:apply-templates>
- </xsl:if>
- <xsl:call-template name="copy-sorted-content">
- <xsl:with-param name="base" select="$base"/>
- <xsl:with-param name="to-sort" select="$to-sort[position() != 1]"/>
- <xsl:with-param name="remainder" select="$remainder"/>
- <xsl:with-param name="start" select="$start"/>
- <xsl:with-param name="end" select="$end"/>
- <xsl:with-param name="down" select="$down"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="not($to-sort[@id = $base[1]/@id])"> <!-- in base, but not to-sort -->
- <xsl:call-template name="copy-sorted-content">
- <xsl:with-param name="base" select="$base[position() != 1]"/>
- <xsl:with-param name="to-sort" select="$to-sort"/>
- <xsl:with-param name="remainder" select="$remainder"/>
- <xsl:with-param name="start" select="$start"/>
- <xsl:with-param name="end" select="$end"/>
- <xsl:with-param name="down" select="$down"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="$base[@id = $to-sort[1]/@id]"> <!-- is in base, but not 1st one-->
- <xsl:call-template name="copy-sorted-content">
- <xsl:with-param name="base" select="$base"/>
- <xsl:with-param name="to-sort" select="$to-sort[position() != 1] "/>
- <xsl:with-param name="remainder" select="$remainder | $to-sort[1]"/>
- <xsl:with-param name="start" select="$start"/>
- <xsl:with-param name="end" select="$end"/>
- <xsl:with-param name="down" select="$down"/>
- </xsl:call-template>
- </xsl:when>
+ <xsl:otherwise>
+ <xsl:for-each select="$to-sort">
+ <xsl:if test="((@before=$end/@id) or not(@before) or not($base/ancestor::SystemDefinition//*[@id=current()/@before])) and not($base[@id=current()/@id])">
+ <xsl:apply-templates mode="merge-copy-of" select=".">
+ <xsl:with-param name="origin" select="$down"/>
+ <xsl:with-param name="root" select="$end/ancestor::SystemDefinition"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:otherwise>
</xsl:choose>
</xsl:template>
@@ -374,6 +358,22 @@
</xsl:template>
+<xsl:template name="best-prev"><xsl:param name="cur" select="."/><xsl:param name="alt"/>
+<xsl:if test="$alt">
+<xsl:variable name="prev" select="$cur/preceding-sibling::*[@id][1]"/>
+<xsl:choose>
+ <xsl:when test="not($prev)"/>
+ <xsl:when test="$alt/preceding-sibling::*[@id=$prev/@id]"><xsl:value-of select="$prev/@id"/></xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="best-prev">
+ <xsl:with-param name="cur" select="$prev"/>
+ <xsl:with-param name="alt" select="$alt"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+</xsl:choose>
+</xsl:if>
+</xsl:template>
+
<xsl:template match="layer | package | collection | component" mode="merge-models">
<xsl:param name="other"/> <!-- the downstream item of the parent's rank that contains a potential items this is merged with -->
<xsl:param name="up"/>
@@ -386,9 +386,9 @@
<xsl:choose>
<xsl:when test="$replaces[.=$this/@id] or (self::component and $match)"> <!-- replace the item instead of merge -->
<xsl:message>Note: <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" in "<xsl:value-of select="../@id"/>" <xsl:choose>
- <xsl:when test="self::component and $match">overridden in downstream sysdef</xsl:when>
- <xsl:otherwise><xsl:for-each select="$replaces[.=$this/@id]/..">replaced by <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" in "<xsl:value-of select="../@id"/>"</xsl:for-each></xsl:otherwise>
- </xsl:choose>
+ <xsl:when test="self::component and $match">overridden in downstream sysdef</xsl:when>
+ <xsl:otherwise><xsl:for-each select="$replaces[.=$this/@id]/..">replaced by <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" in "<xsl:value-of select="../@id"/>"</xsl:for-each></xsl:otherwise>
+ </xsl:choose>
</xsl:message>
<!-- if the removed item is in the downstream doc, just copy that and ignore the upstream contents -->
<xsl:apply-templates mode="merge-copy-of" select="$match">
@@ -400,49 +400,77 @@
<xsl:otherwise>
<!-- remove this if it's in the list of stuff to be replaced-->
+<xsl:variable name="prev-id">
+ <xsl:call-template name="best-prev">
+ <xsl:with-param name="alt" select="$match"/>
+ </xsl:call-template>
+</xsl:variable>
+
+
+ <!-- check the order of the items in the upstream and downstream doc. If they don't match up, we can't merge them nicely -->
+ <xsl:variable name="up-order">
+ <xsl:for-each select="../*[@id=$match/../*[not(@before)]/@id]"><xsl:value-of select="@id"/><xsl:text> </xsl:text></xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="down-order">
+ <xsl:for-each select="$match/../*[@id = current()/../*[not(@before)]/@id]"><xsl:value-of select="@id"/> <xsl:text> </xsl:text></xsl:for-each>
+ </xsl:variable>
+
<!-- prev = the previous item before the current one (no metas, only named items)-->
- <xsl:variable name="prev" select="preceding-sibling::*[@id][1]"/>
+ <xsl:variable name="prev" select="preceding-sibling::*[@id=$prev-id]"/>
+
+
+ <!-- copy all items between this and prev that are solely in the downstream model -->
- <!-- copy all items between this and prev that are solely in the downstream model -->
+ <!-- <xsl:variable name="upstream-ids" select="ancestor::SystemDefinition//@id[parent::component or parent::collection or parent::package or parent::layer]"/> -->
+ <xsl:variable name="upstream-ids" select="../*/@id"/> <!-- this is much faster than using all IDs. before only currently works in the same parent anyway -->
+
+ <!-- $upstream-ids is used to avoid inserting an item that's being moved -->
<xsl:choose>
- <xsl:when test="$match and (not($prev) or $other/*[@id= $prev/@id] )">
+ <xsl:when test="$match and $up-order != $down-order">
+ <!-- if the contents are in a different order, there's no way to merge them together. Don't try. Tack them on to the end later -->
+ <xsl:message>Warning: Order of <xsl:value-of select="name()"/>s in upstream <xsl:value-of select="../@id"/>
+ <xsl:if test="not(../@id)">document</xsl:if> does not match the order of the <xsl:value-of select="name()"/>s in common in the downstream equivalent. Contents will not be properly merged: <xsl:value-of select="$up-order"/> != <xsl:value-of select="$down-order"/></xsl:message>
+ </xsl:when>
+
+ <xsl:when test="$match and $prev">
<xsl:call-template name="copy-sorted-content">
<xsl:with-param name="base" select="../*[@id]"/>
- <xsl:with-param name="to-sort" select="$other/*[@id]"/>
+ <xsl:with-param name="to-sort" select="$other/*[@id and not(@before=$upstream-ids)][following-sibling::*[@id=$match/@id]][preceding-sibling::*[@id=$prev/@id]]"/>
<xsl:with-param name="start" select="$prev"/>
<xsl:with-param name="end" select="."/>
<xsl:with-param name="down" select="$down"/>
</xsl:call-template>
</xsl:when>
- <xsl:when test="not($match/preceding-sibling::*[@id=$this/../*/@id]) and $other/*[@id= current()/@id]/preceding-sibling::*[@id and not(@before)]">
- <!-- if this is the first item in other that's also in this, then put all new items from other here -->
- <xsl:apply-templates mode="merge-copy-of" select="$match/preceding-sibling::*[@id and not(@before)]">
- <xsl:with-param name="origin" select="$down"/>
- <xsl:with-param name="root" select="$this/ancestor::SystemDefinition"/>
- <xsl:with-param name="replaces" select="$replaces"/>
- </xsl:apply-templates>
- </xsl:when>
+ <xsl:when test="$match and not($prev)">
+ <xsl:call-template name="copy-sorted-content">
+ <xsl:with-param name="base" select="../*[@id]"/>
+ <xsl:with-param name="to-sort" select="$other/*[@id and not(@before=$upstream-ids)][following-sibling::*[@id=$match/@id]]"/>
+ <xsl:with-param name="start" select="$prev"/>
+ <xsl:with-param name="end" select="."/>
+ <xsl:with-param name="down" select="$down"/>
+ </xsl:call-template>
+ </xsl:when>
</xsl:choose>
<!-- just copy anything identified as being before this, assume they're all ok -->
+
<xsl:apply-templates mode="merge-copy-of" select="$other/*[@before=current()/@id]">
<xsl:with-param name="remove-before" select="1"/>
<xsl:with-param name="origin" select="$down"/>
<xsl:with-param name="root" select="$this/ancestor::SystemDefinition"/>
<xsl:with-param name="replaces" select="$replaces"/>
</xsl:apply-templates>
-
<xsl:copy>
<xsl:apply-templates select="@*" mode="merge-models"> <!-- copy upstream attributes -->
<xsl:with-param name="other" select="$match"/>
</xsl:apply-templates>
-
- <xsl:if test="self::component and not(@origin-model) and $up/@name">
+ <xsl:if test="self::component and not(@origin-model) and ($up/@name or ancestor::systemModel/@name)">
<!-- insert origin-model and optional root for components only -->
<xsl:attribute name="origin-model">
<xsl:value-of select="$up/@name"/>
+ <xsl:if test="not($up/@name)"><xsl:value-of select="ancestor::systemModel/@name"/></xsl:if>
</xsl:attribute>
<xsl:if test="not(@root)">
<xsl:copy-of select="$up/@root"/>
@@ -495,9 +523,16 @@
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
- </xsl:copy>
- </xsl:otherwise>
+ <!-- and now check for error cases, and tack those on -->
+ <xsl:call-template name="check-and-add-out-of-order-items">
+ <xsl:with-param name="match" select="$match"/>
+ <xsl:with-param name="down" select="$down"/>
+ <xsl:with-param name="replaces" select="$replaces"/>
+ </xsl:call-template>
+
+ </xsl:copy>
+ </xsl:otherwise>
</xsl:choose>
</xsl:template>
@@ -583,9 +618,10 @@
<xsl:with-param name="remove-before" select="$remove-before"/>
<xsl:with-param name="root" select="$root"/>
</xsl:call-template>
- <xsl:if test="not(@origin-model) and $origin/@name">
+ <xsl:if test="not(@origin-model) and ($origin/@name or ancestor::systemModel/@name)">
<xsl:attribute name="origin-model">
<xsl:value-of select="$origin/@name"/>
+ <xsl:if test="not($origin/@name)"><xsl:value-of select="ancestor::systemModel/@name"/></xsl:if>
</xsl:attribute>
<xsl:if test="not(@root)">
<xsl:copy-of select="$origin/@root"/>
--- a/metatools/sysdeftools/lib/test-model.xsl Tue Oct 26 11:12:31 2010 +0800
+++ b/metatools/sysdeftools/lib/test-model.xsl Wed Oct 27 19:35:19 2010 +0800
@@ -1,4 +1,7 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <!DOCTYPE XSLT [
+ <!ENTITY AZ "ABCDEFGHIJKLMNOPQRSTUVWXYZ">
+ <!ENTITY az "abcdefghijklmnopqrstuvwxyz">
+ ]><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!--Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
All rights reserved.
This component and the accompanying materials are made available
@@ -20,6 +23,7 @@
<xsl:apply-templates select="document(/model/sysdef/@href)| SystemDefinition" mode="ids"/>
</xsl:variable>
+ <xsl:variable name="sf-ns">http://www.symbian.org/system-definition</xsl:variable>
<xsl:template match="/model" priority="-1">
<xsl:apply-templates select="." mode="check"/>
@@ -61,7 +65,7 @@
<xsl:param name="filename" select="$Filename"/>
<xsl:call-template name="Section">
<xsl:with-param name="text">System Definition: <xsl:value-of select="*/@name"/></xsl:with-param>
- <xsl:with-param name="sub"><xsl:value-of select="(string-length($all-ids) - string-length(translate($all-ids,' ',''))) div 2 "/> items</xsl:with-param>
+ <xsl:with-param name="sub"><xsl:value-of select="(string-length($all-ids) - string-length(translate($all-ids,' ','')) - 1) div 2 "/> items</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="*">
<xsl:with-param name="filename" select="$filename"/>
@@ -71,9 +75,10 @@
<xsl:template match="/SystemDefinition[starts-with(@schema,'3.0.')] | systemModel">
<xsl:param name="filename" select="$Filename"/>
-<xsl:if test="//unit">
+<xsl:if test="descendant::unit and not(self::systemModel)">
<xsl:call-template name="Section">
<xsl:with-param name="text"><xsl:value-of select="translate(substring(name(*),1,1),'clp','CLP')"/><xsl:value-of select="substring(name(*),2)"/> Definition: <xsl:value-of select="*/@name"/></xsl:with-param>
+ <xsl:with-param name="id"><xsl:value-of select="*/@id"/></xsl:with-param>
<xsl:with-param name="sub"><xsl:value-of select="count(//unit)"/> unit<xsl:if test="count(//unit)!=1">s</xsl:if></xsl:with-param>
</xsl:call-template>
</xsl:if>
@@ -83,6 +88,11 @@
<xsl:apply-templates select="*">
<xsl:with-param name="filename" select="$filename"/>
</xsl:apply-templates>
+ <xsl:for-each select="//text()[normalize-space(.)!='']">
+ <xsl:if test="not(ancestor::meta)">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Text content not valid in <xsl:value-of select="name(..)"/> (<xsl:value-of select="normalize-space(.)"/>)</xsl:with-param></xsl:call-template>
+ </xsl:if>
+ </xsl:for-each>
</xsl:template>
@@ -90,11 +100,81 @@
<xsl:call-template name="Error"><xsl:with-param name="text">Attribute <xsl:value-of select="name()"/>="<xsl:value-of select="."/>" is not valid for <xsl:value-of select="name(..)"/></xsl:with-param></xsl:call-template>
</xsl:template>
-<xsl:template match="@before|@id|package/@span|layer/@span|collection/@level|package/@level|package/@levels|layer/@levels" mode="valid"/> <!-- really should check syntax -->
+<xsl:template match="@before|package/@span|layer/@span|collection/@level|package/@level|package/@levels|layer/@levels" mode="valid"/> <!-- really should check syntax -->
+
+<xsl:template match="@href|@id|@filter|package/@version|unit/@version|unit/@prebuilt" mode="valid"/>
+
+<xsl:template match="component/@introduced" mode="valid"/>
+<xsl:template match="component/@deprecated" mode="valid">
+ <xsl:if test="../@purpose='mandatory'">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">Deprecated component <id><xsl:value-of select="../@id"/></id> should not be mandatory</xsl:with-param></xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="@name" mode="valid"> <!-- look for various naming troubles -->
+ <xsl:variable name="pre"><xsl:value-of select="name(..)"/> with name "<xsl:value-of select="."/>"</xsl:variable>
+ <xsl:if test="normalize-space(.)!=.">
+ <xsl:call-template name="Warning"><xsl:with-param name="text"><xsl:value-of select="$pre"/> has unexpected whitespace</xsl:with-param></xsl:call-template>
+ </xsl:if>
+
+ <xsl:choose> <!-- these are likely to all be the same error -->
+ <xsl:when test=".=../@id or .=substring-after(../@id,':')">
+ <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="$pre"/> is the same as the id</xsl:with-param></xsl:call-template>
+ </xsl:when>
+
+ <xsl:when test="contains(.,'_')">
+ <xsl:call-template name="Error"><xsl:with-param name="text">
+ <xsl:value-of select="$pre"/> must not contain the underscore character (_)</xsl:with-param></xsl:call-template>
+ </xsl:when>
+ <xsl:when test="translate(.,'&az;0123456789_ ','')=''">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">The human-readable name for <xsl:value-of select="name(..)"/> "<xsl:value-of select="."/>" cannot be entirely lowercase</xsl:with-param></xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:variable name="spaced" select="concat(' ',.,' ')"/>
+ <xsl:variable name="this" select="."/>
+ <xsl:variable name="terms" select="document('')/*/xsl:template[@name='bad-names']/*"/>
+ <xsl:variable name="std" select="document('')/*/xsl:template[@name='std-names']/*"/>
-<xsl:template match="@name|@href|@filter|package/@version|unit/@version|unit/@prebuilt" mode="valid"/>
+ <xsl:for-each select="$terms"> <!-- common errors in names -->
+ <xsl:if test="contains($spaced,concat(' ',.,' '))">
+ <xsl:choose>
+ <xsl:when test="name()='bad'">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">
+ <xsl:value-of select="$pre"/> should use "<xsl:value-of select="@ok"/>"</xsl:with-param></xsl:call-template>
+ </xsl:when>
+ <xsl:when test="name()='pref'">
+ <xsl:call-template name="Note"><xsl:with-param name="text">
+ <xsl:value-of select="$pre"/> should use "<xsl:value-of select="@ok"/>" instead of "<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:for-each>
-<xsl:template match="component/@introduced|component/@deprecated" mode="valid"/>
+ <xsl:if test="../self::component and
+ ( (substring(.,string-length(.) - string-length(' Plugin') + 1) = ' Plugin') or
+ (substring(.,string-length(.) - string-length(' Plugins') + 1) = ' Plugins') )
+ and not(contains(../@class,'plugin'))">
+ <xsl:call-template name="Note"><xsl:with-param name="text">
+ <xsl:value-of select="$pre"/> should have class "plugin"</xsl:with-param></xsl:call-template>
+ </xsl:if>
+
+ <xsl:for-each select="$std"> <!-- standard naming schemes -->
+ <xsl:choose>
+ <xsl:when test="name()='suffix' and substring($this/../@id,string-length($this/../@id) - string-length(.) + 1)=.
+ and not(substring($this,string-length($this) - string-length(@name) + 1) = @name or substring($this,string-length($this) - string-length(@or) + 1) = @or)">
+ <xsl:call-template name="Note"><xsl:with-param name="text">
+ <xsl:value-of select="$pre"/> should end with "...<xsl:value-of select="@name"/>"<xsl:if test="@or"> or "...<xsl:value-of select="@or"/>"</xsl:if></xsl:with-param></xsl:call-template>
+ </xsl:when>
+ <xsl:when test="name()='prefix' and starts-with($this/../@id,.) and not(starts-with($this,@name))">
+ <xsl:call-template name="Note"><xsl:with-param name="text">
+ <xsl:value-of select="$pre"/> should start with "<xsl:value-of select="@name"/>..."</xsl:with-param></xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:for-each>
+
+</xsl:template>
+
<xsl:template match="component/@origin-model" mode="valid"/>
@@ -110,8 +190,17 @@
<xsl:template match="@*[namespace-uri()='http://www.nokia.com/qt' and local-name()='proFile']" mode="valid"/>
+<xsl:template match="@*[namespace-uri()='http://www.nokia.com/qt' and local-name()='qmakeArgs' and not(../@*[local-name()='proFile'])]" mode="valid">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Extension attribute <code><xsl:value-of select="local-name()"/>="<xsl:value-of select="."/>"</code> in namespace <xsl:value-of select="namespace-uri()"/> cannot be used without a proFile extention attribute</xsl:with-param></xsl:call-template>
+</xsl:template>
+
+
<xsl:template match="@*[namespace-uri()='http://www.nokia.com/qt' and local-name()='qmakeArgs']" mode="valid">
- <xsl:call-template name="Note"><xsl:with-param name="text">Should avoid using extension attribute <xsl:value-of select="local-name()"/>="<xsl:value-of select="."/>" in namespace <xsl:value-of select="namespace-uri()"/></xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Note"><xsl:with-param name="text">Use of extension attribute <code><xsl:value-of select="local-name()"/>="<xsl:value-of select="."/>"</code> in namespace <xsl:value-of select="namespace-uri()"/> is deprecated. Put contents in the "<code>symbian: { ... }</code>" section of <xsl:value-of select="../@bldFile"/>/<xsl:value-of select="../@*[namespace-uri()='http://www.nokia.com/qt' and local-name()='proFile']"/></xsl:with-param></xsl:call-template>
+</xsl:template>
+
+<xsl:template match="@*[namespace-uri()='http://www.nokia.com/qt' and local-name()='qmakeArgs' and .='-r']" mode="valid">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">Extension attribute <code><xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</code> must be removed. The attribute is deprecated and that is the default behaviour</xsl:with-param></xsl:call-template>
</xsl:template>
@@ -122,6 +211,21 @@
</xsl:template>
+<xsl:template name="bad-names">
+ <bad ok="SHAI">shai</bad>
+ <bad ok="API">api</bad>
+ <pref ok="A-GPS">AGPS</pref>
+ <pref ok="APIs">Headers</pref>
+</xsl:template>
+
+<xsl:template name="std-names">
+ <suffix name=" API">_api</suffix>
+ <suffix name=" SHAI">_shai</suffix>
+ <suffix name=" Info">_info</suffix>
+ <suffix name=" Public Interfaces">_pub</suffix>
+ <suffix name=" Platform Interfaces">_plat</suffix>
+ <suffix name=" Test" or="Tests">test</suffix>
+</xsl:template>
<xsl:template name="validate-class">
<ok>plugin</ok>
@@ -198,9 +302,13 @@
<xsl:template match="package/@tech-domain|component/@purpose|component/@target" mode="valid">
<xsl:variable name="v" select="document('')/*/xsl:template[@name=concat('validate-',name(current()))]/*[.=current()]"/>
+ <xsl:variable name="ns"><xsl:apply-templates select="../@id" mode="namespace-for-id"/></xsl:variable>
<xsl:choose>
+ <xsl:when test="not($v) and $ns=$sf-ns">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Illegal <xsl:value-of select="name()"/> value <xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+ </xsl:when>
<xsl:when test="not($v)">
- <xsl:call-template name="Error"><xsl:with-param name="text">Illegal <xsl:value-of select="name()"/> value <xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Note"><xsl:with-param name="text">Non-standard <xsl:value-of select="name()"/> value <xsl:value-of select="name()"/>="<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
</xsl:when>
<xsl:when test="name($v)='ok'"/>
<xsl:when test="name($v)='w'">
@@ -214,26 +322,37 @@
<xsl:template match="*" priority="-2">
- <xsl:call-template name="Error"><xsl:with-param name="text">Element "<xsl:value-of select="name()"/>" is not valid in the context of "<xsl:value-of select="name(..)"/>"</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text">Element "<xsl:value-of select="name()"/>" is not valid in the context of "<xsl:value-of select="name(..)"/>"<xsl:if test="ancestor::meta"> in <xsl:value-of select="ancestor::meta/@rel"/> metadata section</xsl:if></xsl:with-param></xsl:call-template>
</xsl:template>
-<xsl:template match="component[not(parent::collection)] | collection[not(parent::package)] | package[not(parent::package or parent::layer or (parent::SystemDefinition and count(../*)=1))] | layer[not(parent::systemModel)] " priority="3">
- <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" has invalid parent <xsl:value-of select="name(..)"/> "<xsl:value-of select="../@id"/>"</xsl:with-param></xsl:call-template>
+<xsl:template match="component[not(parent::collection) or (parent::SystemDefinition and count(../*)=1)] |
+ collection[not(parent::package) or (parent::SystemDefinition and count(../*)=1)] |
+ package[not(parent::package or parent::layer or (parent::SystemDefinition and count(../*)=1))] |
+ layer[not(parent::systemModel)] " priority="3">
+ <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<id><xsl:value-of select="@id"/></id>" has invalid parent <xsl:value-of select="name(..)"/> "<id><xsl:value-of select="../@id"/></id>"</xsl:with-param></xsl:call-template>
</xsl:template>
<xsl:template match="layer | package | collection | component">
<xsl:param name="filename"/>
+<xsl:if test="self::package[not(@href)] and not(parent::SystemDefinition)">
+<xsl:call-template name="Section">
+ <xsl:with-param name="id"><xsl:value-of select="@id"/></xsl:with-param>
+ <xsl:with-param name="text"><xsl:value-of select="translate(substring(name(),1,1),'clp','CLP')"/><xsl:value-of select="substring(name(),2)"/>: <xsl:value-of select="@name"/></xsl:with-param>
+ <xsl:with-param name="sub"><xsl:value-of select="count(descendant::unit)"/> unit<xsl:if test="count(descendant::unit)!=1">s</xsl:if></xsl:with-param>
+</xsl:call-template>
+</xsl:if>
+
<xsl:apply-templates select="@*" mode="valid"/>
<xsl:apply-templates select="@id"/>
<xsl:if test="self::component">
<xsl:choose>
<xsl:when test="count(unit[not(@filter | @version)]) = 0 "/>
- <xsl:when test="count(unit[not(@version)]) > 1 and @filter='s60'">
- <xsl:call-template name="Warning"><xsl:with-param name="text">S60 Component "<xsl:value-of select="@id"/>" has <xsl:value-of select="count(unit)"/> units.</xsl:with-param></xsl:call-template>
+ <xsl:when test="count(unit[not(@version)]) > 1 and descendant-or-self::*[contains(@filter,'s60')]">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">S60 Component <id><xsl:value-of select="@id"/></id> has <xsl:value-of select="count(unit)"/> units.</xsl:with-param></xsl:call-template>
</xsl:when>
<xsl:when test="count(unit[not(@version)]) > 1">
- <xsl:call-template name="Error"><xsl:with-param name="text">Component "<xsl:value-of select="@id"/>" has <xsl:value-of select="count(unit)"/> units.</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text">Component "<id><xsl:value-of select="@id"/></id>" has <xsl:value-of select="count(unit)"/> units.</xsl:with-param></xsl:call-template>
</xsl:when>
</xsl:choose>
<xsl:choose>
@@ -250,22 +369,22 @@
<xsl:if test="@href">
<xsl:variable name="child" select="document(@href,.)/SystemDefinition"/>
<xsl:if test="@id!=$child/@id">
- <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" must match ID in linked file "<xsl:value-of select="@href"/>"</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<id><xsl:value-of select="@id"/></id>" must match ID in linked file "<xsl:value-of select="@href"/>"</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="$child/@href">
- <xsl:call-template name="Error"><xsl:with-param name="text">linked <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" cannot be a link</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text">linked <xsl:value-of select="name()"/> "<id><xsl:value-of select="@id"/></id>" cannot be a link</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:for-each select="@*[name()!='id']">
<xsl:if test="$child/@*[name()=name(current())]">
- <xsl:call-template name="Warning"><xsl:with-param name="text">linked <xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" has duplicate attribute to linking document. Duplicate ignored.</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Warning"><xsl:with-param name="text">linked <xsl:value-of select="name()"/> "<id><xsl:value-of select="@id"/></id>" has duplicate attribute to linking document. Duplicate ignored.</xsl:with-param></xsl:call-template>
</xsl:if>
</xsl:for-each>
<xsl:if test="*">
- <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" cannot have both link and content. Content ignored.</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<id><xsl:value-of select="@id"/></id>" cannot have both link and content. Content ignored.</xsl:with-param></xsl:call-template>
</xsl:if>
</xsl:if>
<xsl:if test="@href and name()!=name(document(@href,.)/SystemDefinition/*)">
- <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<xsl:value-of select="@id"/>" must match item in linked file "<xsl:value-of select="@href"/>"</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text"><xsl:value-of select="name()"/> "<id><xsl:value-of select="@id"/></id>" must match item in linked file "<xsl:value-of select="@href"/>"</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="not(@href)">
<xsl:apply-templates select="*">
@@ -288,6 +407,10 @@
</xsl:with-param>
</xsl:apply-templates>
</xsl:if>
+
+<xsl:if test="self::colleciton and not(@level) and ../@levels">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Collection <id><xsl:value-of select="@id"/></id> has no level, despite levels "<xsl:value-of select="../@levels"/>" being defined in <xsl:value-of select="name(..)"/> "<id><xsl:value-of select="../@id"/></id>"</xsl:with-param></xsl:call-template>
+</xsl:if>
</xsl:template>
@@ -304,11 +427,62 @@
</xsl:apply-templates>
</xsl:template>
+<!-- config metadata -->
+
+<xsl:template match="meta[@rel='config']"> <xsl:param name="filename"/>
+ <xsl:if test="@type!='auto'">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">Unrecognised configuration metadata type <xsl:value-of select="@type"/></xsl:with-param></xsl:call-template>
+ </xsl:if>
+ <xsl:for-each select="descendant::text()[normalize-space(.)!='']">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Text content not valid in <xsl:value-of select="name(..)"/> (<xsl:value-of select="normalize-space(.)"/>)</xsl:with-param></xsl:call-template>
+ </xsl:for-each>
+ <xsl:if test="pick">
+ <xsl:variable name="npicks" select="count(pick) +1"/>
+ <xsl:for-each select="../descendant-or-self::component">
+ <xsl:if test="count(unit) > $npicks">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">Configuration metadata should have at least one fewer pick elements (<xsl:value-of select="$npicks - 1"/>) than the number of units in <xsl:value-of select="name(..)"/> "<id><xsl:value-of select="../@id"/></id>" (<xsl:value-of select="count(unit)"/>)</xsl:with-param></xsl:call-template>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:apply-templates select="@* | *"/>
+</xsl:template>
+
+
+<xsl:template match="meta[@rel='config']/defined | meta[@rel='config']/not-defined | meta[@rel='config']/pick/defined | meta[@rel='config']/pick/not-defined">
+ <xsl:if test="node()">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Configuration metadata <xsl:value-of select="name()"/> must be empty</xsl:with-param></xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(@condition)">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Configuration metadata <xsl:value-of select="name()"/> must have a condition</xsl:with-param></xsl:call-template>
+ </xsl:if>
+ <xsl:apply-templates select="@*[name()!='condition']" mode="valid"/>
+</xsl:template>
+
+<xsl:template match="meta[@rel='config']/pick">
+ <xsl:choose>
+ <xsl:when test="not(@version)">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Configuration metadata <xsl:value-of select="name()"/> must have a version</xsl:with-param></xsl:call-template>
+ </xsl:when>
+ <xsl:when test="not(../../descendant::unit[@version=current()/@version])">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Configuration metadata <xsl:value-of select="name()"/> version="<xsl:value-of select="@version"/>" must match a unit within the containing <xsl:value-of select="name(../..)"/> "<xsl:value-of select="../../@id"/>"</xsl:with-param></xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="@*[name()!='version']" mode="valid"/>
+ <xsl:apply-templates select="*"/>
+</xsl:template>
+
+<!-- /config metadata -->
+
+
<xsl:template match="unit/@* | meta/@*" priority="-1">
<xsl:apply-templates select="." mode="valid"/>
</xsl:template>
+<xsl:template match="@*[.='']" mode="valid">
+ <xsl:call-template name="Error"><xsl:with-param name="text">Empty attribute "<xsl:value-of select="name()"/>" on <xsl:value-of select="name(..)"/><xsl:if test="../@id[.!='']"> "<id><xsl:value-of select="../@id"/></id>"</xsl:if></xsl:with-param></xsl:call-template>
+</xsl:template>
+
<xsl:template match="@id" mode="path">
<xsl:choose>
@@ -320,13 +494,45 @@
<xsl:template match="@id">
<xsl:if test="contains(concat(' ',substring-after($all-ids,concat(' ',.,' '))),concat(' ',.,' '))">
- <xsl:call-template name="Warning"><xsl:with-param name="text">Duplicate ID: <xsl:value-of select="name(..)"/> "<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text">Duplicate ID: <xsl:value-of select="name(..)"/> "<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
</xsl:if>
<xsl:if test="contains(.,':') and not(ancestor::*/namespace::*[name()=substring-before(current(),':')])">
- <xsl:call-template name="Error"><xsl:with-param name="text">Undefined namespace for ID "<xsl:value-of select="."/>"</xsl:with-param></xsl:call-template>
+ <xsl:call-template name="Error"><xsl:with-param name="text">Undefined namespace for ID "<id><xsl:value-of select="."/></id>"</xsl:with-param></xsl:call-template>
+</xsl:if>
+
+<xsl:if test="translate(.,'-','')!=.">
+ <xsl:call-template name="Error"><xsl:with-param name="text">ID "<id><xsl:value-of select="."/></id>" contains reserved character "-" </xsl:with-param></xsl:call-template>
+</xsl:if>
+
+<xsl:if test="contains(.,'.') and not(parent::package) and not(contains(ancestor::package/@id,'.'))">
+ <xsl:call-template name="Error"><xsl:with-param name="text">ID "<xsl:value-of select="."/>" contains reserved character "<code>.</code>" </xsl:with-param></xsl:call-template>
+</xsl:if>
+
+<xsl:if test="translate(substring(.,1,1),'0123456789','')=''">
+ <xsl:call-template name="Error"><xsl:with-param name="text">ID "<id><xsl:value-of select="."/></id>" cannot begin with a digit</xsl:with-param></xsl:call-template>
</xsl:if>
+
+<xsl:if test="translate(.,'&AZ;','')!=.">
+ <xsl:call-template name="Warning"><xsl:with-param name="text">IDs should be entirely in lowercase (<xsl:value-of select="."/>)</xsl:with-param></xsl:call-template>
+</xsl:if>
+
+
+<!-- should also test for outside the range of Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
+ see http://www.w3.org/TR/2000/WD-xml-2e-20000814#NT-Name
+ -->
+</xsl:template>
+
+
+<xsl:template match="@*" mode="namespace-for-id">
+<xsl:choose>
+ <xsl:when test="contains(.,':') and ancestor::*/namespace::*[name()=substring-before(current(),':')]">
+ <xsl:value-of select="ancestor::*/namespace::*[name()=substring-before(current(),':')]"/>
+ </xsl:when>
+ <xsl:when test="ancestor::SystemDefinition/@id-namespace"><xsl:value-of select="ancestor::SystemDefinition/@id-namespace"/></xsl:when>
+ <xsl:otherwise><xsl:value-of select="$sf-ns"/></xsl:otherwise>
+</xsl:choose>
</xsl:template>
@@ -344,6 +550,19 @@
<xsl:call-template name="Error"><xsl:with-param name="text"><code><xsl:value-of select="name()"/></code> path "<xsl:value-of select="."/>" must use only forward slashes</xsl:with-param></xsl:call-template>
</xsl:if>
+<xsl:if test="count(//unit[@bldFile=current()]/..) > 1">
+ <xsl:call-template name="Error"><xsl:with-param name="text"><code><xsl:value-of select="name()"/></code> path "<xsl:value-of select="."/>" appears in components <xsl:for-each select="//unit[@bldFile=current()]/..">
+ <id><xsl:value-of select="@id"/></id>
+ <xsl:choose>
+ <xsl:when test="position()=last() - 1"> and </xsl:when>
+ <xsl:when test="position()!=last()">, </xsl:when>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:with-param>
+ <xsl:with-param name="sub">Use filters or config metadata to control what kind of builds a component can appear in</xsl:with-param>
+ </xsl:call-template>
+</xsl:if>
+
<!-- this is a realtive path, so just check that it's the expected number of dirs down -->
<xsl:variable name="fullpath"><xsl:call-template name="normpath">
<xsl:with-param name="path">
--- a/metatools/sysdeftools/rootsysdef.pl Tue Oct 26 11:12:31 2010 +0800
+++ b/metatools/sysdeftools/rootsysdef.pl Wed Oct 27 19:35:19 2010 +0800
@@ -252,6 +252,10 @@
my ($name,$path) = fileparse($_[0]);
if($path eq '' && $name eq '') {return};
$path=~tr,\\,/,;
+ if ($path eq './')
+ {
+ return abs_path('.').$name;
+ }
if( -e $path)
{
return abs_path($path)."/$name";
--- a/package_definition.xml Tue Oct 26 11:12:31 2010 +0800
+++ b/package_definition.xml Wed Oct 27 19:35:19 2010 +0800
@@ -8,23 +8,18 @@
<component filter="build_SFPhase1" id="rcomp" name="Resource Compiler" >
<unit bldFile="bintools/rcomp/group" mrp="bintools/rcomp/group/rcomp.mrp"/>
</component>
- <component filter="build_SFPhase1" id="checklib" name="Checklib" >
+ <component filter="build_SFPhase1" id="checklib" name="checklib" >
<unit bldFile="bintools/checklib/group" mrp="bintools/checklib/group/checklib.mrp"/>
</component>
- <component filter="build_SFPhase1" id="elftools" name="ELF Tools" >
+ <component filter="build_SFPhase1" id="elftools" name="elftools" >
<unit bldFile="bintools/elftools/group" mrp="bintools/elftools/group/elftools.mrp"/>
</component>
</collection>
<collection id="srctools" level="middleware" name="Source Tools">
- <component filter="build_SFPhase1" id="tranasm" name="Translate ASM">
+ <component filter="build_SFPhase1" id="tranasm" name="tranasm" >
<unit bldFile="srctools/tranasm/group" mrp="srctools/tranasm/group/tranasm.mrp"/>
</component>
</collection>
- <collection id="metatools" level="middleware" name="Metadata Tools">
- <component filter="build_SFPhase1" id="sysdeftools" name="System Definition Tools" introduced="^1">
- <unit base="metatools/sysdeftools"/>
- </component>
- </collection>
<collection id="e32tools" level="middleware" name="E32 Tools">
<component filter="build_SFPhase1" id="elf2e32" name="elf2e32 (Postlinker)" >
<unit bldFile="e32tools/elf2e32/group" mrp="e32tools/elf2e32/group/elf2e32.mrp"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/perltoolsplat/activestate-perl-5.6.1/group/activestate-perl-5.6.1.mrp.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+#
+
+component dev_build_dist_activestate-perl-5.6.1
+
+source \src\tools\build\dist\activestate-perl-5.6.1
+exports \src\tools\build\dist\activestate-perl-5.6.1\group
+
+notes_source \src\tools\build\dist\activestate-perl-5.6.1\group\release.txt
+
+ipr T
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/cbrtools.mrp.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,24 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+#
+
+component dev_build_releasing_cbrtools
+
+source \src\tools\dev\build\releasing\cbrtools
+
+ipr T
+
+exports \src\tools\build\releasing\cbrtools\group
+
+notes_source \src\tools\build\releasing\cbrtools\group\release.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/group/makecbr.mrp.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,24 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+#
+
+component dev_build_releasing_makecbr
+
+source \src\tools\dev\build\releasing\makecbr
+
+ipr T
+
+exports \src\tools\dev\build\releasing\makecbr\group
+
+notes_source \src\tools\dev\build\releasing\makecbr\files\release.src
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/zdelta-2.1/group/zdelta-2.1.mrp.bak Wed Oct 27 19:35:19 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+#
+
+component dev_build_dist_zdelta-2.1
+
+source \src\tools\build\dist\zdelta-2.1
+exports \src\tools\build\dist\zdelta-2.1\group
+
+notes_source \src\tools\build\dist\zdelta-2.1\group\release.txt
+
+ipr T
\ No newline at end of file