This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove Symbian port
authorDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Wed, 4 Mar 2020 00:28:00 +0000 (00:28 +0000)
committerDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Mon, 20 Jul 2020 22:28:12 +0000 (23:28 +0100)
Also eliminate USE_HEAP_INSTEAD_OF_STACK and
SETSOCKOPT_OPTION_VALUE_T, since Symbian was the only user of those.

81 files changed:
EXTERN.h
INTERN.h
MANIFEST
Porting/checkcfgvar.pl
Porting/corelist.pl
README.cygwin
README.symbian [deleted file]
XSUB.h
doio.c
embed.fnc
embed.h
ext/DynaLoader/DynaLoader_pm.PL
ext/DynaLoader/dl_symbian.xs [deleted file]
ext/Errno/Errno_pm.PL
perl.c
perl.h
perlio.c
pod/perl.pod
pod/perldiag.pod
pod/perlport.pod
pp_ctl.c
pp_sys.c
proto.h
sv.c
symbian/PerlApp.cpp [deleted file]
symbian/PerlApp.h [deleted file]
symbian/PerlApp.hrh [deleted file]
symbian/PerlAppAif.rss [deleted file]
symbian/PerlBase.cpp [deleted file]
symbian/PerlBase.h [deleted file]
symbian/PerlBase.pod [deleted file]
symbian/PerlRecog.cpp [deleted file]
symbian/PerlRecog.mmp [deleted file]
symbian/PerlUi.cpp [deleted file]
symbian/PerlUi.h [deleted file]
symbian/PerlUi.hrh [deleted file]
symbian/PerlUiS60.rss [deleted file]
symbian/PerlUiS80.rss [deleted file]
symbian/PerlUiS90.rss [deleted file]
symbian/PerlUiUIQ.rss [deleted file]
symbian/PerlUtil.cpp [deleted file]
symbian/PerlUtil.h [deleted file]
symbian/PerlUtil.pod [deleted file]
symbian/README [deleted file]
symbian/TODO [deleted file]
symbian/bld.inf [deleted file]
symbian/config.pl [deleted file]
symbian/config.sh [deleted file]
symbian/cwd.pl [deleted file]
symbian/demo_pl [deleted file]
symbian/ext/Moped/Msg/Msg.mmp [deleted file]
symbian/ext/Moped/Msg/Msg.pkg [deleted file]
symbian/ext/Moped/Msg/Msg.pm [deleted file]
symbian/ext/Moped/Msg/Msg.xs [deleted file]
symbian/ext/Moped/Msg/README [deleted file]
symbian/ext/Moped/Msg/bld.inf [deleted file]
symbian/ext/Moped/Msg/location.pl [deleted file]
symbian/find_writeable_data.pl [deleted file]
symbian/hexdump.pl [deleted file]
symbian/install.cfg [deleted file]
symbian/makesis.pl [deleted file]
symbian/port.pl [deleted file]
symbian/sanity.pl [deleted file]
symbian/sdk.pl [deleted file]
symbian/sisify.pl [deleted file]
symbian/symbian_dll.cpp [deleted file]
symbian/symbian_proto.h [deleted file]
symbian/symbian_stubs.c [deleted file]
symbian/symbian_stubs.h [deleted file]
symbian/symbian_utils.cpp [deleted file]
symbian/symbianish.h [deleted file]
symbian/uid.pl [deleted file]
symbian/version.pl [deleted file]
symbian/xsbuild.pl [deleted file]
t/op/local.t
t/op/magic.t
util.c
util.h
win32/GNUmakefile
win32/Makefile
win32/makefile.mk

index 4406b29..7946323 100644 (file)
--- a/EXTERN.h
+++ b/EXTERN.h
 #undef EXTCONST
 #undef dEXTCONST
 
-#  if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS)
+#  if defined(WIN32) && !defined(PERL_STATIC_SYMS)
     /* miniperl should not export anything */
 #    if defined(PERL_IS_MINIPERL)
 #      define EXT extern
 #      define dEXT 
 #      define EXTCONST extern const
 #      define dEXTCONST const
-#    elif defined(PERLDLL) || defined(__SYMBIAN32__)
+#    elif defined(PERLDLL)
 #      define EXT EXTERN_C __declspec(dllexport)
 #      define dEXT 
 #      define EXTCONST EXTERN_C __declspec(dllexport) const
index 35bb4ee..4305b6b 100644 (file)
--- a/INTERN.h
+++ b/INTERN.h
@@ -19,8 +19,7 @@
 #undef EXTCONST
 #undef dEXTCONST
 
-#  if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL)) \
-     || defined(__SYMBIAN32__)
+#  if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL))
 #    ifdef __cplusplus
 #      define EXT      __declspec(dllexport)
 #      define dEXT
index 12a9469..c058b45 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4139,7 +4139,6 @@ ext/DynaLoader/dl_dyld.xs NeXT/Apple dyld implementation
 ext/DynaLoader/dl_freemint.xs  GNU dld style implementation for FreeMINT
 ext/DynaLoader/dl_hpux.xs      HP-UX implementation
 ext/DynaLoader/dl_none.xs      Stub implementation
-ext/DynaLoader/dl_symbian.xs   Symbian implementation
 ext/DynaLoader/dl_vms.xs       VMS implementation
 ext/DynaLoader/dl_win32.xs     Win32 implementation
 ext/DynaLoader/dlutils.c       Dynamic loader utilities for dl_*.xs files
@@ -5415,7 +5414,6 @@ README.plan9                      Perl notes for Plan 9
 README.qnx                     Perl notes for QNX
 README.riscos                  Perl notes for RISC OS
 README.solaris                 Perl notes for Solaris
-README.symbian                 Perl notes for Symbian
 README.synology                        Perl notes for Synology
 README.tru64                   Perl notes for Tru64
 README.tw                      Perl for Traditional Chinese (in Big5)
@@ -5467,56 +5465,6 @@ SECURITY.md                      Add Security Policy for GitHub
 stadtx_hash.h                  StadtX hash code (64 Bit fast hash function)
 sv.c                           Scalar value code
 sv.h                           Scalar value header
-symbian/bld.inf                        Symbian sample app build config
-symbian/config.pl              Configuration script for Symbian
-symbian/config.sh              Configuration data for Symbian
-symbian/cwd.pl                 Helper code for config.pl
-symbian/demo_pl                        "Archive" of demo code
-symbian/ext/Moped/Msg/bld.inf  Demo extension build configuration
-symbian/ext/Moped/Msg/location.pl      Demo extension script
-symbian/ext/Moped/Msg/Msg.mmp  Demo extension building
-symbian/ext/Moped/Msg/Msg.pkg  Demo extension packaging
-symbian/ext/Moped/Msg/Msg.pm   Demo extension Perl glue
-symbian/ext/Moped/Msg/Msg.xs   Demo extension code
-symbian/ext/Moped/Msg/README   Demo extension documentation
-symbian/find_writeable_data.pl Development utility
-symbian/hexdump.pl             Helper for sisify.pl updating
-symbian/install.cfg            Installation instructions
-symbian/makesis.pl             Installation file creator
-symbian/PerlApp.cpp            Symbian app launcher code
-symbian/PerlApp.h              Symbian app launcher header
-symbian/PerlApp.hrh            Symbian app launcher resource header
-symbian/PerlAppAif.rss         Symbian app launcher code
-symbian/PerlBase.cpp           Symbian Perl base class
-symbian/PerlBase.h             Symbian Perl base class header
-symbian/PerlBase.pod           Symbian Perl base class documentation
-symbian/PerlRecog.cpp          Symbian recognizer code
-symbian/PerlRecog.mmp          Symbian recognizer build
-symbian/PerlUi.cpp             Symbian Perl UI class
-symbian/PerlUi.h               Symbian Perl UI class header
-symbian/PerlUi.hrh             Symbian Perl UI class resource header
-symbian/PerlUiS60.rss          Symbian app launcher resource definition
-symbian/PerlUiS80.rss          Symbian app launcher resource definition
-symbian/PerlUiS90.rss          Symbian app launcher resource definition
-symbian/PerlUiUIQ.rss          Symbian app launcher resource definition
-symbian/PerlUtil.cpp           Symbian Perl utility class
-symbian/PerlUtil.h             Symbian Perl utility class header
-symbian/PerlUtil.pod           Symbian Perl utility class documentation
-symbian/port.pl                        Helper code for config.pl
-symbian/README                 ReadMe for the Symbian files
-symbian/sanity.pl              Helper code for config.pl
-symbian/sdk.pl                 Helper code for config.pl
-symbian/sisify.pl              Packaging utility
-symbian/symbian_dll.cpp                The DLL stub for Symbian
-symbian/symbian_proto.h                Prototypes for Symbian
-symbian/symbian_stubs.c                Stub routines for Symbian
-symbian/symbian_stubs.h                Stub headers for Symbian
-symbian/symbian_utils.cpp      Helper routines for Symbian
-symbian/symbianish.h           Header for Symbian
-symbian/TODO                   Symbian things to do
-symbian/uid.pl                 Helper code for config.pl
-symbian/version.pl             Helper code for config.pl
-symbian/xsbuild.pl             Building extensions
 t/base/cond.t                  See if conditionals work
 t/base/if.t                    See if if works
 t/base/lex.t                   See if lexical items work
index 101f12d..e7eb58e 100755 (executable)
@@ -50,7 +50,6 @@ my @CFG = (
           "Cross/config.sh-arm-linux",
           "Cross/config.sh-arm-linux-n770",
           "NetWare/config.wc",
-          "symbian/config.sh",
           "uconfig.sh",
           "uconfig64.sh",
           "plan9/config_sh.sample",
index 2f2e61c..05393c0 100755 (executable)
@@ -105,7 +105,7 @@ find(
         $version =~ /\d/ and $version = "'$version'";
 
         # some heuristics to figure out the module name from the file name
-        $module =~ s{^(lib|cpan|dist|(?:symbian/)?ext|os2/OS2)/}{}
+        $module =~ s{^(lib|cpan|dist|ext|os2/OS2)/}{}
                        and $1 ne 'lib'
             and (
             $module =~ s{\b(\w+)/\1\b}{$1},
@@ -130,7 +130,6 @@ find(
         $module_to_file{$module} = $File::Find::name;
     },
     'os2/OS2',
-    'symbian/ext',
     'lib',
     'ext',
        'cpan',
index 5885ac5..6ad9fb5 100644 (file)
@@ -576,7 +576,6 @@ be kept as clean as possible.
  lib/ExtUtils/NOTES lib/ExtUtils/PATCHING lib/ExtUtils/README
  lib/Net/Ping/Changes lib/Test/Harness/Changes
  lib/Term/ANSIColor/ChangeLog lib/Term/ANSIColor/README
- README.symbian symbian/TODO
 
 =item Build, Configure, Make, Install
 
@@ -597,7 +596,6 @@ be kept as clean as possible.
 
  NetWare/Makefile
  plan9/mkfile
- symbian/sanity.pl symbian/sisify.pl
  hints/uwin.sh
  vms/descrip_mms.template
  win32/Makefile win32/makefile.mk
diff --git a/README.symbian b/README.symbian
deleted file mode 100644 (file)
index cb4a42f..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-If you read this file _as_is_, just ignore the funny characters you see.
-It is written in the POD format (see pod/perlpod.pod) which is specially
-designed to be readable as is.
-
-=head1 NAME
-
-perlsymbian - Perl version 5 on Symbian OS
-
-=head1 DESCRIPTION
-
-This document describes various features of the Symbian operating
-system that will affect how Perl version 5 (hereafter just Perl)
-is compiled and/or runs.
-
-B<NOTE: this port (as of 0.4.1) does not compile into a Symbian
-OS GUI application, but instead it results in a Symbian DLL.>
-The DLL includes a C++ class called CPerlBase, which one can then
-(derive from and) use to embed Perl into applications, see F<symbian/README>.
-
-The base port of Perl to Symbian only implements the basic POSIX-like
-functionality; it does not implement any further Symbian or Series 60,
-Series 80, or UIQ bindings for Perl.
-
-It is also possible to generate Symbian executables for "miniperl"
-and "perl", but since there is no standard command line interface
-for Symbian (nor full keyboards in the devices), these are useful
-mainly as demonstrations.
-
-=head2 Compiling Perl on Symbian
-
-(0) You need to have the appropriate Symbian SDK installed.
-
-These instructions have been tested under various Nokia Series 60
-Symbian SDKs (1.2 to 2.6, 2.8 should also work, 1.2 compiles but
-does not work), Series 80 2.0, and Nokia 7710 (Series 90) SDK.
-You can get the SDKs from Forum Nokia (L<http://www.forum.nokia.com/>).
-A very rough port ("it compiles") to UIQ 2.1 has also been made.
-
-A prerequisite for any of the SDKs is to install ActivePerl
-from ActiveState, L<http://www.activestate.com/Products/ActivePerl/>
-
-Having the SDK installed also means that you need to have either
-the Metrowerks CodeWarrior installed (2.8 and 3.0 were used in testing)
-or the Microsoft Visual C++ 6.0 installed (SP3 minimum, SP5 recommended).
-
-Note that for example the Series 60 2.0 VC SDK installation talks
-about ActivePerl build 518, which does no more (as of mid-2005) exist
-at the ActiveState website.  The ActivePerl 5.8.4 build 810 was
-used successfully for compiling Perl on Symbian.  The 5.6.x ActivePerls
-do not work.
-
-Other SDKs or compilers like Visual.NET, command-line-only
-Visual.NET, Borland, GnuPoc, or sdk2unix have not been tried.
-
-These instructions almost certainly won't work with older Symbian
-releases or other SDKs.  Patches to get this port running in other
-releases, SDKs, compilers, platforms, or devices are naturally welcome.
-
-(1) Get a Perl source code distribution (for example the file
-perl-5.9.2.tar.gz is fine) from L<http://www.cpan.org/src/>
-and unpack it in your the C:/Symbian directory of your Windows
-system.
-
-(2) Change to the perl source directory.
-
-    cd c:\Symbian\perl-5.x.x
-
-(3) Run the following script using the perl coming with the SDK
-
-    perl symbian\config.pl
-
-You must use the cmd.exe, the Cygwin shell will not work.
-The PATH must include the SDK tools, including a Perl,
-which should be the case under cmd.exe.  If you do not
-have that, see the end of symbian\sdk.pl for notes of
-how your environment should be set up for Symbian compiles.
-
-(4) Build the project, either by
-
-     make all
-
-in cmd.exe or by using either the Metrowerks CodeWarrior
-or the Visual C++ 6.0, or the Visual Studio 8 (the Visual C++
-2005 Express Edition works fine).
-
-If you use the VC IDE, you will have to run F<symbian\config.pl>
-first using the cmd.exe, and then run 'make win.mf vc6.mf' to generate
-the VC6 makefiles and workspaces.  "make vc6" will compile for the VC6,
-and "make cw" for the CodeWarrior.
-
-The following SDK and compiler configurations and Nokia phones were
-tested at some point in time (+ = compiled and PerlApp run, - = not),
-both for Perl 5.8.x and 5.9.x:
-
-     SDK     | VC | CW |
-     --------+----+----+---
-     S60 1.2 | +  | +  | 3650 (*)
-     S60 2.0 | +  | +  | 6600
-     S60 2.1 | -  | +  | 6670
-     S60 2.6 | +  | +  | 6630
-     S60 2.8 | +  | +  | (not tested in a device)
-     S80 2.6 | -  | +  | 9300
-     S90 1.1 | +  | -  | 7710
-     UIQ 2.1 | -  | +  | (not tested in a device)
-
- (*) Compiles but does not work, unfortunately, a problem with Symbian.
-
-If you are using the 'make' directly, it is the GNU make from the SDKs,
-and it will invoke the right make commands for the Windows emulator
-build and the Arm target builds ('thumb' by default) as necessary.
-
-The build scripts assume the 'absolute style' SDK installs under C:,
-the 'subst style' will not work.
-
-If using the VC IDE, to build use for example the File->Open Workspace->
-C:\Symbian\8.0a\S60_2nd_FP2\epoc32\build\symbian\perl\perl\wins\perl.dsw
-The emulator binaries will appear in the same directory.
-
-If using the VC IDE, you will a lot of warnings in the beginning of
-the build because a lot of headers mentioned by the source cannot
-be found, but this is not serious since those headers are not used.
-
-The Metrowerks will give a lot of warnings about unused variables and
-empty declarations, you can ignore those.
-
-When the Windows and Arm DLLs are built do not be scared by a very long
-messages whizzing by: it is the "export freeze" phase where the whole
-(rather large) API of Perl is listed.
-
-Once the build is completed you need to create the DLL SIS file by
-
-     make perldll.sis
-
-which will create the file perlXYZ.sis (the XYZ being the Perl version)
-which you can then install into your Symbian device: an easy way
-to do this is to send them via Bluetooth or infrared and just open
-the messages.
-
-Since the total size of all Perl SIS files once installed is
-over 2 MB, it is recommended to do the installation into a
-memory card (drive E:) instead of the C: drive.
-
-The size of the perlXYZ.SIS is about 370 kB but once it is in the
-device it is about one 750 kB (according to the application manager).
-
-The perlXYZ.sis includes only the Perl DLL: to create an additional
-SIS file which includes some of the standard (pure) Perl libraries,
-issue the command
-
-     make perllib.sis
-
-Some of the standard Perl libraries are included, but not all:
-see L</HISTORY> or F<symbian\install.cfg> for more details
-(250 kB -> 700 kB).
-
-Some of the standard Perl XS extensions (see L</HISTORY> are
-also available:
-
-     make perlext.sis
-
-which will create perlXYZext.sis (290 kB -> 770 kB).
-
-To compile the demonstration application PerlApp you need first to
-install the Perl headers under the SDK.
-
-To install the Perl headers and the class CPerlBase documentation
-so that you no more need the Perl sources around to compile Perl
-applications using the SDK:
-
-     make sdkinstall
-
-The destination directory is C:\Symbian\perl\X.Y.Z.  For more
-details, see F<symbian\PerlBase.pod>.
-
-Once the headers have been installed, you can create a SIS for
-the PerlApp:
-
-     make perlapp.sis
-
-The perlapp.sis (11 kB -> 16 kB) will be built in the symbian
-subdirectory, but a copy will also be made to the main directory.
-
-If you want to package the Perl DLLs (one for WINS, one for ARMI),
-the headers, and the documentation:
-
-     make perlsdk.zip
-
-which will create perlXYZsdk.zip that can be used in another
-Windows system with the SDK, without having to compile Perl in
-that system.
-
-If you want to package the PerlApp sources:
-
-     make perlapp.zip
-
-If you want to package the perl.exe and miniperl.exe, you
-can use the perlexe.sis and miniperlexe.sis make targets.
-You also probably want the perllib.sis for the libraries
-and maybe even the perlapp.sis for the recognizer.
-
-The make target 'allsis' combines all the above SIS targets.
-
-To clean up after compilation you can use either of
-
-     make clean
-     make distclean
-
-depending on how clean you want to be.
-
-=head2 Compilation problems
-
-If you see right after "make" this
-
-    cat makefile.sh >makefile
-    'cat' is not recognized as an internal or external command,
-    operable program or batch file.
-
-it means you need to (re)run the F<symbian\config.pl>.
-
-If you get the error
-
-        'perl' is not recognized as an internal or external command,
-        operable program or batch file.
-
-you may need to reinstall the ActivePerl.
-
-If you see this
-
-    ren makedef.pl nomakedef.pl
-    The system cannot find the file specified.
-    C:\Symbian\...\make.exe: [rename_makedef] Error 1 (ignored)
-
-please ignore it since it is nothing serious (the build process of
-renames the Perl makedef.pl as nomakedef.pl to avoid confusing it
-with a makedef.pl of the SDK).
-
-=head2 PerlApp
-
-The PerlApp application demonstrates how to embed Perl interpreters
-to a Symbian application.  The "Time" menu item runs the following
-Perl code: C<print "Running in ", $^O, "\n", scalar localtime>,
-the "Oneliner" allows one to type in Perl code, and the "Run"
-opens a file chooser for selecting a Perl file to run.
-
-The PerlApp also is started when the "Perl recognizer" (also included
-and installed) detects a Perl file being activated through the GUI,
-and offers either to install it under \Perl (if the Perl file is in
-the inbox of the messaging application) or to run it (if the Perl file
-is under \Perl).
-
-=head2 sisify.pl
-
-In the symbian subdirectory there is F<sisify.pl> utility which can be used
-to package Perl scripts and/or Perl library directories into SIS files,
-which can be installed to the device.  To run the sisify.pl utility,
-you will need to have the 'makesis' and 'uidcrc' utilities already
-installed.  If you don't have the Win32 SDKs, you may try for example
-L<http://gnupoc.sourceforge.net/> or L<http://symbianos.org/~andreh/>.
-
-=head2 Using Perl in Symbian
-
-First of all note that you have full access to the Symbian device
-when using Perl: you can do a lot of damage to your device (like
-removing system files) unless you are careful.  Please do take
-backups before doing anything.
-
-The Perl port has been done for the most part using the Symbian
-standard POSIX-ish STDLIB library. It is a reasonably complete
-library, but certain corners of such emulation libraries that tend
-to be left unimplemented on non-UNIX platforms have been left
-unimplemented also this time: fork(), signals(), user/group ids,
-select() working for sockets, non-blocking sockets, and so forth.
-See the file F<symbian/config.sh> and look for 'undef' to find the
-unsupported APIs (or from Perl use Config).
-
-The filesystem of Symbian devices uses DOSish syntax, "drives"
-separated from paths by a colon, and backslashes for the path.  The
-exact assignment of the drives probably varies between platforms, but
-for example in Series 60 you might see C: as the (flash) main memory,
-D: as the RAM drive, E: as the memory card (MMC), Z: as the ROM.  In
-Series 80 D: is the memory card.  As far the devices go the NUL: is
-the bit bucket, the COMx: are the serial lines, IRCOMx: are the IR
-ports, TMP: might be C:\System\Temp.  Remember to double those
-backslashes in doublequoted strings.
-
-The Perl DLL is installed in \System\Libs\.  The Perl libraries and
-extension DLLs are installed in \System\Libs\Perl\X.Y.Z\.  The PerlApp
-is installed in \System\Apps\, and the SIS also installs a couple of
-demo scripts in \Perl\ (C:\Mydocs\Perl\ on Nokia 7710).
-
-Note that the Symbian filesystem is very picky: it strongly prefers
-the \ instead of the /.
-
-When doing XS / Symbian C++ programming include first the Symbian
-headers, then any standard C/POSIX headers, then Perl headers, and finally
-any application headers.
-
-New() and Copy() are unfortunately used by both Symbian and Perl code
-so you'll have to play cpp games if you need them.  PerlBase.h undefines
-the Perl definitions and redefines them as PerlNew() and PerlCopy().
-
-=head1 TO DO
-
-Lots.  See F<symbian/TODO>.
-
-=head1 WARNING
-
-As of Perl Symbian port version 0.4.1 any part of Perl's standard
-regression test suite has not been run on a real Symbian device using
-the ported Perl, so innumerable bugs may lie in wait.  Therefore there
-is absolutely no warranty.
-
-=head1 NOTE
-
-When creating and extending application programming interfaces (APIs)
-for Symbian or Series 60 or Series 80 or Series 90 it is suggested
-that trademarks, registered trademarks, or trade names are not used in
-the API names.  Instead, developers should consider basing the API
-naming in the existing (C++, or maybe Java) public component and API
-naming, modified as appropriate by the rules of the programming
-language the new APIs are for.
-
-Nokia is a registered trademark of Nokia Corporation. Nokia's product
-names are trademarks or registered trademarks of Nokia.  Other product
-and company names mentioned herein may be trademarks or trade names of
-their respective owners.
-
-=head1 AUTHOR
-
-Jarkko Hietaniemi
-
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2005 Nokia.  All rights reserved.
-
-Copyright (c) 2006-2007 Jarkko Hietaniemi.
-
-=head1 LICENSE
-
-The Symbian port is licensed under the same terms as Perl itself.
-
-=head1 HISTORY
-
-=over 4
-
-=item *
-
-0.1.0: April 2005
-
-(This will show as "0.01" in the Symbian Installer.)
-
- - The console window is a very simple console indeed: one can
-   get the newline with "000" and the "C" button is a backspace.
-   Do not expect a terminal capable of vt100 or ANSI sequences.
-   The console is also "ASCII", you cannot input e.g. any accented
-   letters.  Because of obvious physical constraints the console is
-   also very small: (in Nokia 6600) 22 columns, 17 rows.
- - The following libraries are available:
-   AnyDBM_File AutoLoader base Carp Config Cwd constant
-   DynaLoader Exporter File::Spec integer lib strict Symbol
-   vars warnings XSLoader
- - The following extensions are available:
-   attributes Compress::Zlib Cwd Data::Dumper Devel::Peek
-   Digest::MD5 DynaLoader Fcntl File::Glob Filter::Util::Call
-   IO List::Util MIME::Base64
-   PerlIO::scalar PerlIO::via SDBM_File Socket Storable Time::HiRes
- - The following extensions are missing for various technical
-   reasons:
-   B ByteLoader Devel::DProf Devel::PPPort Encode GDBM_File
-   IPC::SysV NDBM_File Opcode PerlIO::encoding POSIX
-   re Safe Sys::Hostname Sys::Syslog
-   threads threads::shared Unicode::Normalize
- - Using MakeMaker or the Module::* to build and install modules
-   is not supported.
- - Building XS other than the ones in the core is not supported.
-
-Since this is 0.something release, any future releases are almost
-guaranteed to be binary incompatible.  As a sign of this the Symbian
-symbol exports are kept unfrozen and the .def files fully rebuilt
-every time.
-
-=item *
-
-0.2.0: October 2005
-
-  - Perl 5.9.3 (patch level 25741)
-  - Compress::Zlib and IO::Zlib supported
-  - sisify.pl added
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.3.0: October 2005
-
-  - Perl 5.9.3 (patch level 25911)
-  - Series 80 2.0 and UIQ 2.1 support
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.4.0: November 2005
-
-  - Perl 5.9.3 (patch level 26052)
-  - adding a sample Symbian extension
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.4.1: December 2006
-
-  - Perl 5.9.5-to-be (patch level 30002)
-  - added extensions: Compress/Raw/Zlib, Digest/SHA,
-    Hash/Util, Math/BigInt/FastCalc, Text/Soundex, Time/Piece
-  - port to S90 1.1 by alexander smishlajev
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.4.2: March 2007
-
-  - catchup with Perl 5.9.5-to-be (patch level 30812)
-  - tested to build with Microsoft Visual C++ 2005 Express Edition
-    (which uses Microsoft Visual C 8, instead of the old VC6),
-    SDK used for testing S60_2nd_FP3 aka 8.1a
-
-We maintain the binary incompatibility.
-
-=back
-
-=cut
diff --git a/XSUB.h b/XSUB.h
index 94e9dad..1ee94af 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
@@ -127,9 +127,6 @@ is a lexical C<$_> in scope.
 #if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
 #  define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
 #  define XS_INTERNAL(name) STATIC XSPROTO(name)
-#elif defined(__SYMBIAN32__)
-#  define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
-#  define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
 #elif defined(__cplusplus)
 #  define XS_EXTERNAL(name) extern "C" XSPROTO(name)
 #  define XS_INTERNAL(name) static XSPROTO(name)
diff --git a/doio.c b/doio.c
index 13d412a..994dc70 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -2299,7 +2299,7 @@ Perl_do_aexec5(pTHX_ SV *really, SV **mark, SV **sp,
 {
     dVAR;
     PERL_ARGS_ASSERT_DO_AEXEC5;
-#if defined(__SYMBIAN32__) || defined(__LIBCATAMOUNT__)
+#if defined(__LIBCATAMOUNT__)
     Perl_croak(aTHX_ "exec? I'm not *that* kind of operating system");
 #else
     assert(sp >= mark);
index 33ac029..a7fb3c7 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -684,7 +684,7 @@ pM  |bool|do_exec   |NN const char* cmd
 p      |bool|do_exec   |NN const char* cmd
 #endif
 
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 Ap     |int    |do_aspawn      |NULLOK SV* really|NN SV** mark|NN SV** sp
 Ap     |int    |do_spawn       |NN char* cmd
 Ap     |int    |do_spawn_nowait|NN char* cmd
diff --git a/embed.h b/embed.h
index 182b12a..29c0f24 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define PerlIO_unread(a,b,c)   Perl_PerlIO_unread(aTHX_ a,b,c)
 #define PerlIO_write(a,b,c)    Perl_PerlIO_write(aTHX_ a,b,c)
 #endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 #define do_aspawn(a,b,c)       Perl_do_aspawn(aTHX_ a,b,c)
 #define do_spawn(a)            Perl_do_spawn(aTHX_ a)
 #define do_spawn_nowait(a)     Perl_do_spawn_nowait(aTHX_ a)
index 5c14ccc..9609664 100644 (file)
@@ -486,14 +486,6 @@ sub dl_findfile {
             push(@names, $_);
         }
        my $dirsep = '/';
-       <<$^O-eq-symbian>>
-       $dirsep = '\\';
-       if ($0 =~ /^([a-z]):/i) {
-           my $drive = $1;
-           @dirs = map { "$drive:$_" } @dirs;
-           @dl_library_path = map { "$drive:$_" } @dl_library_path;
-       }
-       <</$^O-eq-symbian>>
         foreach $dir (@dirs, @dl_library_path) {
             next unless -d $dir;
            <<$^O-eq-VMS>>
diff --git a/ext/DynaLoader/dl_symbian.xs b/ext/DynaLoader/dl_symbian.xs
deleted file mode 100644 (file)
index c2d1094..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/* dl_symbian.xs
- * 
- * Platform:   Symbian 7.0s
- * Author:     Jarkko Hietaniemi <jarkko.hietaniemi@nokia.com>
- * Copyright:  2004, Nokia
- * License:    Artistic/GPL
- *
- */
-
-/*
- * In Symbian DLLs there is no name information, one can only access
- * the functions by their ordinals.  Perl, however, very much would like
- * to load functions by their names.  We fake this by having a special
- * setup function at the ordinal 1 (this is arranged by building the DLLs
- * in a special way).  The setup function builds a Perl hash mapping the
- * names to the ordinals, and the hash is then used by dlsym().
- *
- */
-
-#include <e32base.h>
-#include <eikdll.h>
-#include <utf.h>
-
-/* This is a useful pattern: first include the Symbian headers,
- * only after that the Perl ones.  Otherwise you will get a lot
- * trouble because of Symbian's New(), Copy(), etc definitions. */
-
-#define PERL_EXT
-#define PERL_IN_DL_SYMBIAN_XS
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-START_EXTERN_C
-
-void *dlopen(const char *filename, int flag);
-void *dlsym(void *handle, const char *symbol);
-int   dlclose(void *handle);
-const char *dlerror(void);
-
-extern void*  memset(void *s, int c, size_t n);
-extern size_t strlen(const char *s);
-
-END_EXTERN_C
-
-#include "dlutils.c"
-
-#define RTLD_LAZY   0x0001
-#define RTLD_NOW    0x0002
-#define RTLD_GLOBAL 0x0004
-
-#ifndef NULL
-#  define NULL 0
-#endif
-
-/* No need to pull in symbian_dll.cpp for this. */
-#define symbian_get_vars() ((void*)Dll::Tls())
-
-const TInt KPerlDllSetupFunction = 1;
-
-typedef struct {
-    RLibrary   handle;
-    TInt       error;
-    HV*                symbols;
-} PerlSymbianLibHandle;
-
-typedef void (*PerlSymbianLibInit)(void *);
-
-void* dlopen(const char *filename, int flags) {
-    TBuf16<KMaxFileName> utf16fn;
-    const TUint8* utf8fn = (const TUint8*)filename;
-    PerlSymbianLibHandle* h = NULL;
-    TInt error;
-
-    error =
-        CnvUtfConverter::ConvertToUnicodeFromUtf8(utf16fn, TPtrC8(utf8fn));
-    if (error == KErrNone) {
-        h = new PerlSymbianLibHandle;
-        if (h) {
-            h->error   = KErrNone;
-            h->symbols = (HV *)NULL;
-        } else
-            error = KErrNoMemory;
-    }
-
-    if (h && error == KErrNone) {
-        error = (h->handle).Load(utf16fn);
-        if (error == KErrNone) {
-            TLibraryFunction init = (h->handle).Lookup(KPerlDllSetupFunction);
-            ((PerlSymbianLibInit)init)(h);
-        } else {
-           free(h);
-            h = NULL;
-        }
-    }
-
-    if (h)
-        h->error = error;
-
-    return h;
-}
-
-void* dlsym(void *handle, const char *symbol) {
-    if (handle) {
-        dTHX;
-        PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle;
-        HV* symbols = h->symbols;
-        if (symbols) {
-            SV** svp = hv_fetch(symbols, symbol, strlen(symbol), FALSE);
-            if (svp && *svp && SvIOK(*svp)) {
-                IV ord = SvIV(*svp);
-                if (ord > 0)
-                    return (void*)((h->handle).Lookup(ord));
-            }
-        }
-    }
-    return NULL;
-}
-
-int dlclose(void *handle) {
-    PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle;
-    if (h) {
-        (h->handle).Close();
-        if (h->symbols) {
-            dTHX;
-            hv_undef(h->symbols);
-            h->symbols = NULL;
-        }
-        return 0;
-    } else
-        return 1;
-}
-
-const char* dlerror(void) {
-    return 0;  /* Bad interface: assumes static data. */
-}
-
-static void
-dl_private_init(pTHX)
-{
-    (void)dl_generic_private_init(aTHX);
-}
-MODULE = DynaLoader    PACKAGE = DynaLoader
-
-PROTOTYPES:  ENABLE
-
-BOOT:
-    (void)dl_private_init(aTHX);
-
-
-void
-dl_load_file(filename, flags=0)
-    char *     filename
-    int                flags
-  PREINIT:
-    PerlSymbianLibHandle* h;
-  CODE:
-{
-    ST(0) = sv_newmortal();
-    h = (PerlSymbianLibHandle*)dlopen(filename, flags);
-    if (h && h->error == KErrNone)
-       sv_setiv(ST(0), PTR2IV(h));
-    else
-        SaveError(aTHX_ "(dl_load_file %s %d)"
-                        filename, h ? h->error : -1);
-}
-
-
-int
-dl_unload_file(libhandle)
-    void *     libhandle
-  CODE:
-    RETVAL = (dlclose(libhandle) == 0 ? 1 : 0);
-  OUTPUT:
-    RETVAL
-
-
-void
-dl_find_symbol(libhandle, symbolname, ign_err=0)
-    void *     libhandle
-    char *     symbolname
-    int                ign_err
-    PREINIT:
-    void *sym;
-    CODE:
-    PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)libhandle;
-    sym = dlsym(libhandle, symbolname);
-    ST(0) = sv_newmortal();
-    if (sym) {
-       sv_setiv(ST(0), PTR2IV(sym));
-    } else {
-       if (!ign_err)
-           SaveError(aTHX_ "(dl_find_symbol %s %d)",
-                     symbolname, h ? h->error : -1);
-    }
-
-
-void
-dl_undef_symbols()
-    CODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
-    char *             perl_name
-    void *             symref 
-    const char *       filename
-    CODE:
-    ST(0) = sv_2mortal(newRV((SV*)newXS_flags(perl_name,
-                                             (void(*)(pTHX_ CV *))symref,
-                                             filename, NULL,
-                                             XS_DYNAMIC_FILENAME)));
-
-
-SV *
-dl_error()
-    CODE:
-    dMY_CXT;
-    RETVAL = newSVsv(MY_CXT.x_dl_last_error);
-    OUTPUT:
-    RETVAL
-
-#if defined(USE_ITHREADS)
-
-void
-CLONE(...)
-    CODE:
-    MY_CXT_CLONE;
-
-    PERL_UNUSED_VAR(items);
-
-    /* MY_CXT_CLONE just does a memcpy on the whole structure, so to avoid
-     * using Perl variables that belong to another thread, we create our 
-     * own for this thread.
-     */
-    MY_CXT.x_dl_last_error = newSVpvs("");
-
-#endif
-
-# end.
index 84fd151..4f8acfe 100644 (file)
@@ -2,14 +2,11 @@ use ExtUtils::MakeMaker;
 use Config;
 use strict;
 
-our $VERSION = "1.30";
+our $VERSION = "1.31";
 
 my %err = ();
 
-# Symbian cross-compiling environment.
-my $IsSymbian = exists $ENV{SDK} && -d "$ENV{SDK}\\epoc32";
-
-my $IsMSWin32 = $^O eq 'MSWin32' && !$IsSymbian;
+my $IsMSWin32 = $^O eq 'MSWin32';
 
 unlink "Errno.pm" if -f "Errno.pm";
 unlink "Errno.tmp" if -f "Errno.tmp";
@@ -148,10 +145,6 @@ sub get_files {
     } elsif ($^O eq 'vos') {
        # avoid problem where cpp returns non-POSIX pathnames
        $file{'/system/include_library/errno.h'} = 1;
-    } elsif ($IsSymbian) {
-        my $SDK = $ENV{SDK};
-        $SDK =~ s!\\!/!g;
-       $file{"$SDK/epoc32/include/libc/sys/errno.h"} = 1;
     } else {
        open(CPPI, '>', 'errno.c') or
            die "Cannot open errno.c";
@@ -244,12 +237,7 @@ sub write_errno_pm {
                $inhibit_linemarkers;
            open(CPPO,"$cpp errno.c |") or
                die "Cannot run '$cpp errno.c'";
-       } elsif ($IsSymbian) {
-            my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" .
-               $inhibit_linemarkers ." -";
-           open(CPPO,"$cpp < errno.c |")
-               or die "Cannot exec $cpp";
-        } else {
+       } else {
            my $cpp = default_cpp() . $inhibit_linemarkers;
            open(CPPO,"$cpp < errno.c |")
                or die "Cannot exec $cpp";
diff --git a/perl.c b/perl.c
index 2013a76..43fffaa 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2480,7 +2480,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
     if (xsinit)
        (*xsinit)(aTHX);        /* in case linked C routines want magical variables */
 #ifndef PERL_MICRO
-#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(SYMBIAN)
+#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__)
     init_os_extras();
 #endif
 #endif
@@ -2505,9 +2505,6 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
      * PL_utf8locale is conditionally turned on by
      * locale.c:Perl_init_i18nl10n() if the environment
      * look like the user wants to use UTF-8. */
-#if defined(__SYMBIAN32__)
-    PL_unicode = PERL_UNICODE_STD_FLAG; /* See PERL_SYMBIAN_CONSOLE_UTF8. */
-#endif
 #  ifndef PERL_IS_MINIPERL
     if (PL_unicode) {
         /* Requires init_predump_symbols(). */
@@ -3861,10 +3858,6 @@ S_minus_v(pTHX)
        PerlIO_printf(PIO_stdout,
                      "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
 #endif
-#ifdef __SYMBIAN32__
-       PerlIO_printf(PIO_stdout,
-                     "Symbian port by Nokia, 2004-2005\n");
-#endif
 #ifdef BINARY_BUILD_NOTICE
        BINARY_BUILD_NOTICE;
 #endif
@@ -4767,7 +4760,7 @@ S_init_perllib(pTHX)
     }
 }
 
-#if defined(DOSISH) || defined(__SYMBIAN32__)
+#if defined(DOSISH)
 #    define PERLLIB_SEP ';'
 #elif defined(__VMS)
 #    define PERLLIB_SEP PL_perllib_sep
diff --git a/perl.h b/perl.h
index d1ecd98..626af97 100644 (file)
--- a/perl.h
+++ b/perl.h
 #   undef _WIN32
 #endif
 
-#if defined(__SYMBIAN32__) || (defined(__VC32__) && defined(WINS))
-#   ifndef SYMBIAN
-#       define SYMBIAN
-#   endif
-#endif
-
-#ifdef __SYMBIAN32__
-#  include "symbian/symbian_proto.h"
-#endif
-
-/* Any stack-challenged places.  The limit varies (and often
- * is configurable), but using more than a kilobyte of stack
- * is usually dubious in these systems. */
-#if defined(__SYMBIAN32__)
-/* Symbian: need to work around the SDK features. *
- * On WINS: MS VC5 generates calls to _chkstk,         *
- * if a "large" stack frame is allocated.              *
- * gcc on MARM does not generate calls like these.     */
-#   define USE_HEAP_INSTEAD_OF_STACK
-#endif
-
 /* Use the reentrant APIs like localtime_r and getpwent_r */
 /* Win32 has naturally threadsafe libraries, no need to use any _r variants.
  * XXX KEEP makedef.pl copy of this code in sync */
@@ -999,10 +978,6 @@ extern char **myenviron;
 #   include <sys/wait.h>
 #endif
 
-#ifdef __SYMBIAN32__
-#   undef _SC_ARG_MAX /* Symbian has _SC_ARG_MAX but no sysconf() */
-#endif
-
 #if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO)
 EXTERN_C int syscall(int, ...);
 #endif
@@ -1176,7 +1151,7 @@ EXTERN_C int usleep(unsigned int);
 #define PERL_USES_PL_PIDSTATUS
 #endif
 
-#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) && !defined(__SYMBIAN32__)
+#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP)
 #define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
 #endif
 
@@ -1221,9 +1196,7 @@ EXTERN_C int usleep(unsigned int);
 #  define Ptrdiff_t SSize_t
 #endif
 
-#ifndef __SYMBIAN32__
 #  include <string.h>
-#endif
 
 /* This comes after <stdlib.h> so we don't try to change the standard
  * library prototypes; we'll use our own in proto.h instead. */
@@ -2869,8 +2842,6 @@ typedef struct padname PADNAME;
 #   else
 #     include "vos/vosish.h"
 #   endif
-#elif defined(__SYMBIAN32__)
-#   include "symbian/symbianish.h"
 #elif defined(__HAIKU__)
 #   include "haiku/haikuish.h"
 #else
@@ -4121,7 +4092,7 @@ my_swap16(const U16 x) {
 #endif
 
 #ifndef __cplusplus
-#if !(defined(WIN32) || defined(SYMBIAN))
+#if !defined(WIN32)
 Uid_t getuid (void);
 Uid_t geteuid (void);
 Gid_t getgid (void);
index 39481ee..4537a59 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -236,7 +236,7 @@ PerlIO_binmode(pTHX_ PerlIO *fp, int iotype, int mode, const char *names)
 PerlIO *
 PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags)
 {
-#if defined(PERL_MICRO) || defined(__SYMBIAN32__)
+#if defined(PERL_MICRO)
     return NULL;
 #elif defined(PERL_IMPLICIT_SYS)
     return PerlSIO_fdupopen(f);
index 0f99716..0aebd6a 100644 (file)
@@ -284,7 +284,6 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
     perlqnx            Perl notes for QNX
     perlriscos         Perl notes for RISC OS
     perlsolaris        Perl notes for Solaris
-    perlsymbian        Perl notes for Symbian
     perlsynology       Perl notes for Synology
     perltru64          Perl notes for Tru64
     perlvms            Perl notes for VMS
index 2b2df17..d7531e4 100644 (file)
@@ -2235,8 +2235,8 @@ variable and glob that.
 
 =item exec? I'm not *that* kind of operating system
 
-(F) The C<exec> function is not implemented on some systems, e.g., Symbian
-OS.  See L<perlport>.
+(F) The C<exec> function is not implemented on some systems, e.g.
+Catamount. See L<perlport>.
 
 =item %sExecution of %s aborted due to compilation errors.
 
index 1715eaf..a980980 100644 (file)
@@ -1655,9 +1655,6 @@ code.
 (SunOS, Solaris, HP-UX)
 Does not automatically flush output handles on some platforms.
 
-(Symbian OS)
-Not supported.
-
 =item exit
 
 (VMS)
@@ -2301,8 +2298,6 @@ F<ext/Win32CORE/t/win32core.t> - may fail on recent cygwin installs.
 
 =back
 
-=item Symbian
-
 =item NetBSD
 
 =item FreeBSD
@@ -2333,8 +2328,6 @@ Caveats:
 
 =back
 
-=item Symbian (Series 60 v3, 3.2 and 5 - what else?)
-
 =item Stratus VOS / OpenVOS
 
 =item AIX
index c53dced..a77d785 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -4145,18 +4145,6 @@ S_require_file(pTHX_ SV *sv)
                        continue;
                    sv_setpv(namesv, unixdir);
                    sv_catpv(namesv, unixname);
-#elif defined(__SYMBIAN32__)
-                   if (PL_origfilename[0] &&
-                       PL_origfilename[1] == ':' &&
-                       !(dir[0] && dir[1] == ':'))
-                       Perl_sv_setpvf(aTHX_ namesv,
-                                      "%c:%s\\%s",
-                                      PL_origfilename[0],
-                                      dir, name);
-                   else
-                       Perl_sv_setpvf(aTHX_ namesv,
-                                      "%s\\%s",
-                                      dir, name);
 #else
                    /* The equivalent of                    
                       Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
index a431bbe..9c153c8 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2705,30 +2705,16 @@ PP(pp_ssockopt)
        PUSHs(sv);
        break;
     case OP_SSOCKOPT: {
-#if defined(__SYMBIAN32__)
-# define SETSOCKOPT_OPTION_VALUE_T void *
-#else
-# define SETSOCKOPT_OPTION_VALUE_T const char *
-#endif
-       /* XXX TODO: We need to have a proper type (a Configure probe,
-        * etc.) for what the C headers think of the third argument of
-        * setsockopt(), the option_value read-only buffer: is it
-        * a "char *", or a "void *", const or not.  Some compilers
-        * don't take kindly to e.g. assuming that "char *" implicitly
-        * promotes to a "void *", or to explicitly promoting/demoting
-        * consts to non/vice versa.  The "const void *" is the SUS
-        * definition, but that does not fly everywhere for the above
-        * reasons. */
-           SETSOCKOPT_OPTION_VALUE_T buf;
+           const char *buf;
            int aint;
            if (SvPOKp(sv)) {
                STRLEN l;
-               buf = (SETSOCKOPT_OPTION_VALUE_T) SvPV_const(sv, l);
+               buf = SvPV_const(sv, l);
                len = l;
            }
            else {
                aint = (int)SvIV(sv);
-               buf = (SETSOCKOPT_OPTION_VALUE_T) &aint;
+               buf = (const char *) &aint;
                len = sizeof(int);
            }
            if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
@@ -4494,14 +4480,14 @@ PP(pp_system)
     result = 0;
     if (PL_op->op_flags & OPf_STACKED) {
        SV * const really = *++MARK;
-#  if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
+#  if defined(WIN32) || defined(OS2) || defined(__VMS)
        value = (I32)do_aspawn(really, MARK, SP);
 #  else
        value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
 #  endif
     }
     else if (SP - MARK != 1) {
-#  if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
+#  if defined(WIN32) || defined(OS2) || defined(__VMS)
        value = (I32)do_aspawn(NULL, MARK, SP);
 #  else
        value = (I32)do_aspawn(NULL, (void **)MARK, (void **)SP);
diff --git a/proto.h b/proto.h
index 02ef4ed..f0d916c 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -6894,7 +6894,7 @@ PERL_CALLCONV_NO_RET void win32_croak_not_implemented(const char * fname)
        assert(fname)
 
 #endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 PERL_CALLCONV int      Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_ASPAWN     \
        assert(mark); assert(sp)
diff --git a/sv.c b/sv.c
index 494b77c..25cc4e6 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -8854,13 +8854,7 @@ Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
    else
     {
        /*The big, slow, and stupid way. */
-#ifdef USE_HEAP_INSTEAD_OF_STACK       /* Even slower way. */
-       STDCHAR *buf = NULL;
-       Newx(buf, 8192, STDCHAR);
-       assert(buf);
-#else
        STDCHAR buf[8192];
-#endif
 
       screamer2:
        if (rslen) {
@@ -8909,9 +8903,6 @@ Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
                goto screamer2;
        }
 
-#ifdef USE_HEAP_INSTEAD_OF_STACK
-       Safefree(buf);
-#endif
     }
 
     if (rspara) {              /* have to do this both before and after */
diff --git a/symbian/PerlApp.cpp b/symbian/PerlApp.cpp
deleted file mode 100644 (file)
index ffca7af..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself.
- *
- * Note that this PerlApp is for Symbian/Series 60/80/UIQ smartphones
- * and it has nothing whatsoever to do with the ActiveState PerlApp. */
-
-#include "PerlApp.h"
-
-#include <apparc.h>
-#include <e32base.h>
-#include <e32cons.h>
-#include <eikenv.h>
-#include <bautils.h>
-#include <eikappui.h>
-#include <utf.h>
-#include <f32file.h>
-
-#include <coemain.h>
-
-#ifndef PerlAppMinimal
-
-#include "PerlApp.hrh"
-
-#endif //#ifndef PerlAppMinimal
-
-#define PERL_GLOBAL_STRUCT
-#define PERL_GLOBAL_STRUCT_PRIVATE
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "PerlBase.h"
-#include "PerlUtil.h"
-
-#define symbian_get_vars() Dll::Tls() // Not visible from perlXYZ.lib?
-
-const TUid KPerlAppUid = {
-#ifdef PerlAppMinimalUid
-  PerlAppMinimalUid
-#else
-  0x102015F6
-#endif
-};
-
-_LIT(KDefaultScript, "default.pl");
-
-#ifdef PerlAppMinimalName
-_LIT_NO_L(KAppName, PerlAppMinimalName);
-#else
-_LIT(KAppName, "PerlApp");
-#endif
-
-#ifndef PerlAppMinimal
-
-_LIT_NO_L(KFlavor, PERL_SYMBIANSDK_FLAVOR);
-_LIT(KAboutFormat,
-     "Perl %d.%d.%d, Symbian port %d.%d.%d, built for %S SDK %d.%d");
-_LIT(KCopyrightFormat,
-     "Copyright 1987-2005 Larry Wall and others, Symbian port Copyright Nokia 2004-2005");
-_LIT(KInboxPrefix, "\\System\\Mail\\");
-_LIT(KScriptPrefix, "\\Perl\\");
-
-_LIT8(KModulePrefix, SITELIB); // SITELIB from Perl config.h
-
-typedef TBuf<256>  TMessageBuffer;
-typedef TBuf8<256> TPeekBuffer;
-typedef TBuf8<256> TFileName8;
-
-#endif // #ifndef PerlAppMinimal
-
-static void DoRunScriptL(TFileName aScriptName);
-
-TUid CPerlAppApplication::AppDllUid() const
-{
-    return KPerlAppUid;
-}
-
-enum TPerlAppPanic
-{
-    EPerlAppCommandUnknown = 1
-};
-
-void Panic(TPerlAppPanic aReason)
-{
-    User::Panic(KAppName, aReason);
-}
-
-#ifndef PerlAppMinimal
-
-// The isXXX() come from the Perl headers.
-#define FILENAME_IS_ABSOLUTE(n) \
-        (isALPHA(((n)[0])) && ((n)[1]) == ':' && ((n)[2]) == '\\')
-
-static TBool IsInPerl(TFileName aFileName)
-{
-    TInt offset = aFileName.FindF(KScriptPrefix);
-    return ((offset == 0 && // \foo
-             aFileName[0] == '\\')
-            ||
-            (offset == 2 && // x:\foo
-             FILENAME_IS_ABSOLUTE(aFileName)));
-}
-
-static TBool IsInInbox(TFileName aFileName)
-{
-    TInt offset = aFileName.FindF(KInboxPrefix);
-    return ((offset == 0 && // \foo
-             aFileName[0] == '\\')
-            ||
-            (offset == 2 && // x:\foo
-             FILENAME_IS_ABSOLUTE(aFileName)));
-}
-
-static TBool IsPerlModule(TParsePtrC aParsed)
-{
-    return aParsed.Ext().CompareF(_L(".pm")) == 0;
-}
-
-static TBool IsPerlScript(TParsePtrC aParsed)
-{
-    return aParsed.Ext().CompareF(_L(".pl")) == 0;
-}
-
-static void CopyFromInboxL(RFs aFs, const TFileName& aSrc, const TFileName& aDst)
-{
-    TBool proceed = ETrue;
-    TMessageBuffer message;
-
-    message.Format(_L("%S is untrusted. Install only if you trust provider."), &aDst);
-    if (CPerlUi::OkCancelDialogL(message)) {
-        message.Format(_L("Install as %S?"), &aDst);
-        if (CPerlUi::OkCancelDialogL(message)) {
-            if (BaflUtils::FileExists(aFs, aDst)) {
-                message.Format(_L("Replace old %S?"), &aDst);
-                if (!CPerlUi::OkCancelDialogL(message))
-                    proceed = EFalse;
-            }
-            if (proceed) {
-                // Create directory?
-                TInt err = BaflUtils::CopyFile(aFs, aSrc, aDst);
-                if (err == KErrNone) {
-                    message.Format(_L("Installed %S"), &aDst);
-                    CPerlUi::InformationNoteL(message);
-                }
-                else {
-                    message.Format(_L("Failure %d installing %S"), err, &aDst);
-                    CPerlUi::WarningNoteL(message);
-                }
-            }
-        }
-    }
-}
-
-static TBool FindPerlPackageName(TPeekBuffer aPeekBuffer, TInt aOff, TFileName& aFn)
-{
-    aFn.SetMax();
-    TInt m = aFn.MaxLength();
-    TInt n = aPeekBuffer.Length();
-    TInt i = 0;
-    TInt j = aOff;
-
-    aFn.SetMax();
-    // The following is a little regular expression
-    // engine that matches Perl package names.
-    if (j < n && isSPACE(aPeekBuffer[j])) {
-        while (j < n && isSPACE(aPeekBuffer[j])) j++;
-        if (j < n && isALPHA(aPeekBuffer[j])) {
-            while (j < n && isALNUM(aPeekBuffer[j])) {
-                while (j < n &&
-                       isALNUM(aPeekBuffer[j]) &&
-                       i < m)
-                    aFn[i++] = aPeekBuffer[j++];
-                if (j + 1 < n &&
-                    aPeekBuffer[j    ] == ':' &&
-                    aPeekBuffer[j + 1] == ':' &&
-                    i < m) {
-                    aFn[i++] = '\\';
-                    j += 2;
-                    if (j < n &&
-                        isALPHA(aPeekBuffer[j])) {
-                        while (j < n &&
-                               isALNUM(aPeekBuffer[j]) &&
-                               i < m)
-                            aFn[i++] = aPeekBuffer[j++];
-                    }
-                }
-            }
-            while (j < n && isSPACE(aPeekBuffer[j])) j++;
-            if (j < n && aPeekBuffer[j] == ';' && i + 3 < m) {
-                aFn.SetLength(i);
-                aFn.Append(_L(".pm"));
-                return ETrue;
-            }
-        }
-    }
-    return EFalse;
-}
-
-static void GuessPerlModule(TFileName& aGuess, TPeekBuffer aPeekBuffer, TParse aDrive)
-{
-   TInt offset = aPeekBuffer.Find(_L8("package"));
-   if (offset != KErrNotFound) {
-       const TInt KPackageLen = 7;
-       TFileName q;
-
-       if (!FindPerlPackageName(aPeekBuffer, offset + KPackageLen, q))
-           return;
-
-       TFileName8 p;
-       p.Copy(aDrive.Drive());
-       p.Append(KModulePrefix);
-
-       aGuess.SetMax();
-       if (p.Length() + 1 + q.Length() < aGuess.MaxLength()) {
-           TInt i = 0, j;
-
-           for (j = 0; j < p.Length(); j++)
-               aGuess[i++] = p[j];
-           aGuess[i++] = '\\';
-           for (j = 0; j < q.Length(); j++)
-               aGuess[i++] = q[j];
-           aGuess.SetLength(i);
-       }
-       else
-           aGuess.SetLength(0);
-   }
-}
-
-static TBool LooksLikePerlL(TPeekBuffer aPeekBuffer)
-{
-    return aPeekBuffer.Left(2).Compare(_L8("#!")) == 0 &&
-           aPeekBuffer.Find(_L8("perl")) != KErrNotFound;
-}
-
-static TBool InstallStuffL(const TFileName &aSrc, TParse aDrive, TParse aFile, TPeekBuffer aPeekBuffer, RFs aFs)
-{
-    TFileName aDst;
-    TPtrC drive  = aDrive.Drive();
-    TPtrC namext = aFile.NameAndExt();
-
-    aDst.Format(_L("%S%S%S"), &drive, &KScriptPrefix, &namext);
-    if (!IsPerlScript(aDst) && !LooksLikePerlL(aPeekBuffer)) {
-        aDst.SetLength(0);
-        if (IsPerlModule(aDst))
-            GuessPerlModule(aDst, aPeekBuffer, aDrive);
-    }
-    if (aDst.Length() > 0) {
-        CopyFromInboxL(aFs, aSrc, aDst);
-        return ETrue;
-    }
-
-    return EFalse;
-}
-
-static TBool RunStuffL(const TFileName& aScriptName, TPeekBuffer aPeekBuffer)
-{
-    TBool isModule = EFalse;
-
-    if (IsInPerl(aScriptName) &&
-        (IsPerlScript(aScriptName) ||
-         (isModule = IsPerlModule(aScriptName)) ||
-         LooksLikePerlL(aPeekBuffer))) {
-        TMessageBuffer message;
-
-        if (isModule)
-            message.Format(_L("Really run module %S?"), &aScriptName);
-        else
-            message.Format(_L("Run %S?"), &aScriptName);
-        if (CPerlUi::YesNoDialogL(message))
-            DoRunScriptL(aScriptName);
-        return ETrue;
-    }
-
-    return EFalse;
-}
-
-void CPerlAppAppUi::InstallOrRunL(const TFileName& aFileName)
-{
-    TParse aFile;
-    TParse aDrive;
-    TMessageBuffer message;
-
-    aFile.Set(aFileName, NULL, NULL);
-    if (FILENAME_IS_ABSOLUTE(aFileName)) {
-        aDrive.Set(aFileName, NULL, NULL);
-    } else {
-        TFileName appName =
-          CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();
-        aDrive.Set(appName, NULL, NULL);
-    }
-    if (!iFs)
-        iFs = &CEikonEnv::Static()->FsSession();
-    RFile f;
-    TInt err = f.Open(*iFs, aFileName, EFileRead);
-    if (err == KErrNone) {
-        TPeekBuffer aPeekBuffer;
-        err = f.Read(aPeekBuffer);
-        f.Close();  // Release quickly.
-        if (err == KErrNone) {
-            if (!(IsInInbox(aFileName) ?
-                  InstallStuffL(aFileName, aDrive, aFile, aPeekBuffer, *iFs) :
-                  RunStuffL(aFileName, aPeekBuffer))) {
-                message.Format(_L("Failed for file %S"), &aFileName);
-                CPerlUi::WarningNoteL(message);
-            }
-        } else {
-            message.Format(_L("Error %d reading %S"), err, &aFileName);
-            CPerlUi::WarningNoteL(message);
-        }
-    } else {
-        message.Format(_L("Error %d opening %S"), err, &aFileName);
-        CPerlUi::WarningNoteL(message);
-    }
-    if (iDoorObserver)
-        delete CEikonEnv::Static()->EikAppUi();
-    else
-        Exit();
-}
-
-#endif /* #ifndef PerlAppMinimal */
-
-CPerlAppAppUi::~CPerlAppAppUi()
-{
-    if (iAppView) {
-        iEikonEnv->RemoveFromStack(iAppView);
-        delete iAppView;
-        iAppView = NULL;
-    }
-    if (iFs) {
-        delete iFs;
-        iFs = NULL;
-    }
-    if (iDoorObserver) // Otherwise the embedding application waits forever.
-        iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::EEmpty);
-}
-
-static void DoRunScriptL(TFileName aScriptName)
-{
-    CPerlBase* perl = CPerlBase::NewInterpreterLC();
-    TRAPD(error, perl->RunScriptL(aScriptName));
-#ifndef PerlAppMinimal
-    if (error != KErrNone) {
-        TMessageBuffer message;
-        message.Format(_L("Error %d"), error);
-        CPerlUi::YesNoDialogL(message);
-    }
-#endif // #ifndef PerlAppMinimal
-    CleanupStack::PopAndDestroy(perl);
-}
-
-#ifndef PerlAppMinimal
-
-void CPerlAppAppUi::OpenFileL(const TDesC& aFileName)
-{
-    InstallOrRunL(aFileName);
-    return;
-}
-
-#endif // #ifndef PerlAppMinimal
-
-TBool CPerlAppAppUi::ProcessCommandParametersL(TApaCommand aCommand, TFileName& /* aDocumentName */, const TDesC8& /* aTail */)
-{
-    if (aCommand == EApaCommandRun) {
-        TFileName appName = Application()->AppFullName();
-        TParse p;
-        p.Set(KDefaultScript, &appName, NULL);
-        TEntry aEntry;
-        RFs aFs;
-        aFs.Connect();
-        if (aFs.Entry(p.FullName(), aEntry) == KErrNone) {
-            DoRunScriptL(p.FullName());
-            Exit();
-        }
-    }
-    return aCommand == EApaCommandOpen ? ETrue : EFalse;
-}
-
-#ifndef PerlAppMinimal
-
-void CPerlAppAppUi::SetFs(const RFs& aFs)
-{
-    iFs = (RFs*) &aFs;
-}
-
-#endif // #ifndef PerlAppMinimal
-
-void CPerlAppAppUi::DoHandleCommandL(TInt aCommand) {
-#ifndef PerlAppMinimal
-    TMessageBuffer message;
-#endif // #ifndef PerlAppMinimal
-
-    switch(aCommand)
-    {
-#ifndef PerlAppMinimal
-    case EPerlAppCommandAbout:
-        {
-            message.Format(KAboutFormat,
-                           PERL_REVISION,
-                           PERL_VERSION,
-                           PERL_SUBVERSION,
-                           PERL_SYMBIANPORT_MAJOR,
-                           PERL_SYMBIANPORT_MINOR,
-                           PERL_SYMBIANPORT_PATCH,
-                           &KFlavor,
-                           PERL_SYMBIANSDK_MAJOR,
-                           PERL_SYMBIANSDK_MINOR
-                           );
-            CPerlUi::InformationNoteL(message);
-        }
-        break;
-    case EPerlAppCommandTime:
-        {
-            CPerlBase* perl = CPerlBase::NewInterpreterLC();
-            const char *const argv[] =
-              { "perl", "-le",
-                "print 'Running in ', $^O, \"\\n\", scalar localtime" };
-            perl->ParseAndRun(sizeof(argv)/sizeof(char*), (char **)argv, 0);
-            CleanupStack::PopAndDestroy(perl);
-        }
-        break;
-#ifndef __UIQ__
-     case EPerlAppCommandRunFile:
-        {
-            TFileName aScriptUtf16;
-            aScriptUtf16.Copy(_L("C:\\"));
-            if (CPerlUi::FileQueryDialogL(aScriptUtf16))
-              DoRunScriptL(aScriptUtf16);
-        }
-        break;
-#endif
-     case EPerlAppCommandOneLiner:
-        {
-#ifdef __SERIES60__
-            _LIT(prompt, "Oneliner:");
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-            _LIT(prompt, "Code:"); // The title has "Oneliner" already.
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-            CPerlAppAppUi* cAppUi =
-              static_cast<CPerlAppAppUi*>(CEikonEnv::Static()->EikAppUi());
-            if (CPerlUi::TextQueryDialogL(_L("Oneliner"),
-                                          prompt,
-                                          cAppUi->iOneLiner,
-                                          KPerlUiOneLinerSize)) {
-                const TUint KPerlUiUtf8Multi = 3; // Expansion multiplier.
-                TBuf8<KPerlUiUtf8Multi * KPerlUiOneLinerSize> utf8;
-
-                CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8,
-                                                          cAppUi->iOneLiner);
-                CPerlBase* perl = CPerlBase::NewInterpreterLC();
-#ifdef __SERIES90__
-               int argc = 5;
-#else
-               int argc = 3;
-#endif
-               char **argv = (char**) malloc(argc * sizeof(char *));
-                User::LeaveIfNull(argv);
-
-                TCleanupItem argvCleanupItem = TCleanupItem(free, argv);
-                CleanupStack::PushL(argvCleanupItem);
-                argv[0] = (char *) "perl";
-                argv[1] = (char *) "-le";
-#ifdef __SERIES90__
-                argv[2] = (char *) "unshift @INC, 'C:/Mydocs';";
-                argv[3] = (char *) "-e";
-                argv[4] = (char *) utf8.PtrZ();
-#else
-                argv[2] = (char *) utf8.PtrZ();
-#endif
-               perl->ParseAndRun(argc, argv);
-                CleanupStack::PopAndDestroy(2, perl);
-            }
-        }
-        break;
-     case EPerlAppCommandCopyright:
-        {
-            message.Format(KCopyrightFormat);
-            CPerlUi::InformationNoteL(message);
-        }
-        break;
-     case EPerlAppCommandAboutCopyright:
-        {
-            TMessageBuffer m1;
-            TMessageBuffer m2;
-            m1.Format(KAboutFormat,
-                      PERL_REVISION,
-                      PERL_VERSION,
-                      PERL_SUBVERSION,
-                      PERL_SYMBIANPORT_MAJOR,
-                      PERL_SYMBIANPORT_MINOR,
-                      PERL_SYMBIANPORT_PATCH,
-                      &KFlavor,
-                      PERL_SYMBIANSDK_MAJOR,
-                      PERL_SYMBIANSDK_MINOR
-                      );
-            CPerlUi::InformationNoteL(m1);
-            User::After((TTimeIntervalMicroSeconds32) (1000*1000)); // 1 sec.
-            m2.Format(KCopyrightFormat);
-            CPerlUi::InformationNoteL(m2);
-        }
-        break;
-#endif // #ifndef PerlAppMinimal
-    default:
-        Panic(EPerlAppCommandUnknown);
-    }
-}
-
-CApaDocument* CPerlAppApplication::CreateDocumentL()
-{
-    CPerlAppDocument* cDoc = new (ELeave) CPerlAppDocument(*this);
-    return cDoc;
-}
-
-CEikAppUi* CPerlAppDocument::CreateAppUiL()
-{
-    CPerlAppAppUi* cAppUi = new (ELeave) CPerlAppAppUi();
-    return cAppUi;
-}
-
-
-#ifndef PerlAppMinimal
-
-CFileStore* CPerlAppDocument::OpenFileL(TBool aDoOpen, const TDesC& aFileName, RFs& aFs)
-{
-    CPerlAppAppUi* cAppUi =
-      static_cast<CPerlAppAppUi*>(CEikonEnv::Static()->EikAppUi());
-    cAppUi->SetFs(aFs);
-    if (aDoOpen)
-        cAppUi->OpenFileL(aFileName);
-    return NULL;
-}
-
-#endif // #ifndef PerlAppMinimal
-
-EXPORT_C CApaApplication* NewApplication()
-{
-    return new CPerlAppApplication;
-}
-
-GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
-{
-    return KErrNone;
-}
-
diff --git a/symbian/PerlApp.h b/symbian/PerlApp.h
deleted file mode 100644 (file)
index cbf1963..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlApp_h__
-#define __PerlApp_h__
-
-#include "PerlUi.h"
-
-/* The source code can be compiled into "PerlApp" which is the simple
- * launchpad application/demonstrator, or into "PerlAppMinimal", which
- * is the minimal Perl launchpad application.  Define the cpp symbols
- * CreatePerlAppMinimal (a boolean), PerlAppMinimalUid (the Symbian
- * application uid in the 0x... format), and PerlAppMinimalName (a C
- * wide string, with the L prefix) to compile as "PerlAppMinimal". */
-
-// #define CreatePerlAppMinimal
-
-#ifdef CreatePerlAppMinimal
-# define PerlAppMinimal
-# ifndef PerlAppMinimalUid // PerlApp is ...F6, PerlRecog is ...F7
-#  define PerlAppMinimalUid 0x102015F8
-# endif
-# ifndef PerlAppMinimalName
-#  define PerlAppMinimalName L"PerlAppMinimal"
-# endif
-#endif
-
-#ifdef PerlAppMinimal
-# ifndef PerlAppMinimalUid
-#   error PerlAppMinimal defined but PerlAppMinimalUid undefined
-# endif
-# ifndef PerlAppMinimalName
-#  error PerlAppMinimal defined but PerlAppMinimalName undefined
-# endif
-#endif
-
-class CPerlAppDocument : public CgPerlUiDocument
-{
-  public:
-    CPerlAppDocument(CEikApplication& aApp) : CgPerlUiDocument(aApp) {;}
-#ifndef PerlAppMinimal
-    CFileStore* OpenFileL(TBool aDoOpen, const TDesC& aFilename, RFs& aFs);
-#endif // #ifndef PerlAppMinimal
-  private: // from CEikDocument
-    CEikAppUi* CreateAppUiL();
-};
-
-class CPerlAppApplication : public CPerlUiApplication
-{
-  private:
-    CApaDocument* CreateDocumentL();
-    TUid AppDllUid() const;
-};
-
-class CPerlAppAppView;
-
-class CPerlAppAppUi : public CPerlUiAppUi
-{
-  public:
-    TBool ProcessCommandParametersL(TApaCommand aCommand, TFileName& aDocumentName, const TDesC8& aTail);
-    void DoHandleCommandL(TInt aCommand);
-#ifndef PerlAppMinimal
-    void OpenFileL(const TDesC& aFileName);
-    void InstallOrRunL(const TFileName& aFileName);
-    void SetFs(const RFs& aFs);
-#endif // #ifndef PerlAppMinimal
-    ~CPerlAppAppUi();
-  private:
-    RFs* iFs;
-};
-
-class CPerlAppAppView : public CPerlUiAppView
-{
-  public:
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    void HandleCommandL(TInt aCommand);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-};
-
-#endif // __PerlApp_h__
diff --git a/symbian/PerlApp.hrh b/symbian/PerlApp.hrh
deleted file mode 100644 (file)
index fd37a96..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia.  All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlApp_HRH__
-#define __PerlApp_HRH__
-
-enum TPerlAppIds
-{
-    EPerlAppCommandAbout              = 1024,  // start value must not be 0
-    EPerlAppCommandTime               = 1025,
-    EPerlAppCommandRunFile            = 1026,
-    EPerlAppCommandOneLiner           = 1027,
-    EPerlAppCommandCopyright          = 1028,
-    EPerlAppCommandAboutCopyright     = 1029,
-    EPerlAppLast                      = 1099   // no comma here
-};
-
-#endif // __PerlApp_HRH__
diff --git a/symbian/PerlAppAif.rss b/symbian/PerlAppAif.rss
deleted file mode 100644 (file)
index 03e17cd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself. */
-
-#include <aiftool.rh>
-
-RESOURCE AIF_DATA
-{
-    app_uid = 0x102015F6;
-    embeddability = KAppEmbeddable;
-    hidden = KAppNotHidden;
-    launch = KAppLaunchInForeground;
-    newfile = KAppDoesNotSupportNewFile;
-    datatype_list = {
-        DATATYPE
-            {
-            priority = EDataTypePriorityNormal;
-            type = "x-application/x-perl";
-            }
-        };
-}
diff --git a/symbian/PerlBase.cpp b/symbian/PerlBase.cpp
deleted file mode 100644 (file)
index 9312abe..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The CPerlBase class is licensed under the same terms as Perl itself. */
-
-/* See PerlBase.pod for documentation. */
-
-#define PERLBASE_CPP
-
-#include <e32cons.h>
-#include <e32keys.h>
-#include <utf.h>
-
-#include "PerlBase.h"
-
-const TUint KPerlConsoleBufferMaxTChars = 0x0200;
-const TUint KPerlConsoleNoPos           = 0xffff;
-
-CPerlBase::CPerlBase()
-{
-}
-
-EXPORT_C void CPerlBase::Destruct()
-{
-    dTHX;
-    iState = EPerlDestroying;
-    if (iConsole) {
-        iConsole->Printf(_L("[Any key to continue]"));
-        iConsole->Getch();
-    }
-    if (iPerl)  {
-        (void)perl_destruct(iPerl);
-        perl_free(iPerl);
-        iPerl = NULL;
-        PERL_SYS_TERM();
-    }
-    if (iConsole) {
-        delete iConsole;
-        iConsole = NULL;
-    }
-    if (iConsoleBuffer) {
-        free(iConsoleBuffer);
-        iConsoleBuffer = NULL;
-    }
-#ifdef PERL_GLOBAL_STRUCT
-    if (iVars) {
-        PerlInterpreter* my_perl = NULL;
-        free_global_struct(iVars);
-        iVars = NULL;
-    }
-#endif
-}
-
-CPerlBase::~CPerlBase()
-{
-    Destruct();
-}
-
-EXPORT_C CPerlBase* CPerlBase::NewInterpreter(TBool aCloseStdlib,
-                                               void (*aStdioInitFunc)(void*),
-                                               void *aStdioInitCookie)
-{
-   CPerlBase* self = new (ELeave) CPerlBase;
-   self->iCloseStdlib     = aCloseStdlib;
-   self->iStdioInitFunc   = aStdioInitFunc;
-   self->iStdioInitCookie = aStdioInitCookie;
-   self->ConstructL();
-   PERL_APPCTX_SET(self);
-   return self;
-}
-
-EXPORT_C CPerlBase* CPerlBase::NewInterpreterL(TBool aCloseStdlib,
-                                               void (*aStdioInitFunc)(void*),
-                                               void *aStdioInitCookie)
-{
-    CPerlBase* self =
-      CPerlBase::NewInterpreterLC(aCloseStdlib,
-                                  aStdioInitFunc,
-                                  aStdioInitCookie);
-    CleanupStack::Pop(self);
-    return self;
-}
-
-EXPORT_C CPerlBase* CPerlBase::NewInterpreterLC(TBool aCloseStdlib,
-                                                void (*aStdioInitFunc)(void*),
-                                                void *aStdioInitCookie)
-{
-    CPerlBase* self = new (ELeave) CPerlBase;
-    CleanupStack::PushL(self);
-    self->iCloseStdlib     = aCloseStdlib;
-    self->iStdioInitFunc   = aStdioInitFunc;
-    self->iStdioInitCookie = aStdioInitCookie;
-    self->ConstructL();
-    PERL_APPCTX_SET(self);
-    return self;
-}
-
-static int _console_stdin(void* cookie, char* buf, int n)
-{
-    return ((CPerlBase*)cookie)->ConsoleRead(0, buf, n);
-}
-
-static int _console_stdout(void* cookie, const char* buf, int n)
-{
-    return ((CPerlBase*)cookie)->ConsoleWrite(1, buf, n);
-}
-
-static int _console_stderr(void* cookie, const char* buf, int n)
-{
-    return ((CPerlBase*)cookie)->ConsoleWrite(2, buf, n);
-}
-
-void CPerlBase::StdioRewire(void *arg) {
-    _REENT->_sf[0]._cookie = (void*)this;
-    _REENT->_sf[0]._read   = &_console_stdin;
-    _REENT->_sf[0]._write  = 0;
-    _REENT->_sf[0]._seek   = 0;
-    _REENT->_sf[0]._close  = 0;
-
-    _REENT->_sf[1]._cookie = (void*)this;
-    _REENT->_sf[1]._read   = 0;
-    _REENT->_sf[1]._write  = &_console_stdout;
-    _REENT->_sf[1]._seek   = 0;
-    _REENT->_sf[1]._close  = 0;
-
-    _REENT->_sf[2]._cookie = (void*)this;
-    _REENT->_sf[2]._read   = 0;
-    _REENT->_sf[2]._write  = &_console_stderr;
-    _REENT->_sf[2]._seek   = 0;
-    _REENT->_sf[2]._close  = 0;
-}
-
-void CPerlBase::ConstructL()
-{
-    iState = EPerlNone;
-#ifdef PERL_GLOBAL_STRUCT
-    PerlInterpreter *my_perl = 0;
-    iVars = init_global_struct();
-    User::LeaveIfNull(iVars);
-#endif
-    iPerl = perl_alloc();
-    User::LeaveIfNull(iPerl);
-    iState = EPerlAllocated;
-    perl_construct(iPerl); // returns void
-    if (!iStdioInitFunc) {
-        iConsole =
-          Console::NewL(_L("Perl Console"),
-                        TSize(KConsFullScreen, KConsFullScreen));
-        iConsoleBuffer =
-          (TUint16*)malloc(sizeof(TUint) *
-                           KPerlConsoleBufferMaxTChars);
-        User::LeaveIfNull(iConsoleBuffer);
-        iConsoleUsed = 0;
-#ifndef USE_PERLIO
-        iStdioInitFunc = &StdioRewire;
-#endif
-    }
-    if (iStdioInitFunc)
-        iStdioInitFunc(iStdioInitCookie);
-    iReadFunc  = NULL;
-    iWriteFunc = NULL;
-    iState = EPerlConstructed;
-}
-
-EXPORT_C PerlInterpreter* CPerlBase::GetInterpreter()
-{
-    return (PerlInterpreter*) iPerl;
-}
-
-#ifdef PERL_MINIPERL
-static void boot_DynaLoader(pTHX_ CV* cv) { }
-#else
-EXTERN_C void boot_DynaLoader(pTHX_ CV* cv);
-#endif
-
-static void xs_init(pTHX)
-{
-    dXSUB_SYS;
-    newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
-}
-
-EXPORT_C TInt CPerlBase::RunScriptL(const TDesC& aFileName,
-                                    int argc,
-                                    char **argv,
-                                    char *envp[]) {
-    TBuf8<KMaxFileName> scriptUtf8;
-    TInt error;
-    error = CnvUtfConverter::ConvertFromUnicodeToUtf8(scriptUtf8, aFileName);
-    User::LeaveIfError(error);
-    char *filename = (char*)scriptUtf8.PtrZ();
-    struct stat st;
-    if (stat(filename, &st) == -1)
-        return KErrNotFound;
-    if (argc < 2)
-        return KErrGeneral; /* Anything better? */
-    char **Argv = (char**)malloc(argc * sizeof(char*));
-    User::LeaveIfNull(Argv);
-    TCleanupItem ArgvCleanupItem = TCleanupItem(free, Argv);
-    CleanupStack::PushL(ArgvCleanupItem);
-    Argv[0] = "perl";
-    if (argv && argc > 2)
-        for (int i = 2; i < argc - 1; i++)
-            Argv[i] = argv[i];
-    Argv[argc - 1] = filename;
-    error = this->ParseAndRun(argc, Argv, envp);
-    CleanupStack::PopAndDestroy(Argv);
-    Argv = 0;
-    return error == 0 ? KErrNone : KErrGeneral;
-}
-
-
-EXPORT_C int CPerlBase::Parse(int argc, char *argv[], char *envp[])
-{
-    if (iState == EPerlConstructed) {
-        const char* const NullArgv[] = { "perl", "-e", "0" };
-        if (argc == 0 || argv == 0) {
-            argc = 3;
-            argv = (char**) NullArgv;
-        }
-        PERL_SYS_INIT(&argc, &argv);
-        int parsed = perl_parse(iPerl, xs_init, argc, argv, envp);
-        if (parsed == 0)
-            iState = EPerlParsed;
-        return parsed;
-    } else
-        return -1;
-}
-
-EXPORT_C void CPerlBase::SetupExit()
-{
-    if (iState == EPerlParsed) {
-        diTHX;
-        PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
-       // PL_perl_destruct level of 2 would be nice but
-       // it causes "Unbalanced scopes" for some reason.
-        PL_perl_destruct_level = 1;
-    }
-}
-
-EXPORT_C int CPerlBase::Run()
-{
-    if (iState == EPerlParsed) {
-        SetupExit();
-        iState = EPerlRunning;
-        int ran = perl_run(iPerl);
-        iState = (ran == 0) ? EPerlSuccess : EPerlFailure;
-        return ran;
-    } else
-        return -1;
-}
-
-EXPORT_C int CPerlBase::ParseAndRun(int argc, char *argv[], char *envp[])
-{
-    int parsed = Parse(argc, argv, envp);
-    int ran    = (parsed == 0) ? Run() : -1;
-    return ran;
-}
-
-int CPerlBase::ConsoleReadLine()
-{
-    if (!iConsole)
-        return -EIO;
-
-    TUint currX  = KPerlConsoleNoPos;
-    TUint currY  = KPerlConsoleNoPos;
-    TUint prevX  = KPerlConsoleNoPos;
-    TUint prevY  = KPerlConsoleNoPos;
-    TUint maxX   = KPerlConsoleNoPos;
-    TUint offset = 0;
-
-    for (;;) {
-        TKeyCode code = iConsole->Getch();
-
-        if (code == EKeyLineFeed || code == EKeyEnter) {
-            if (offset < KPerlConsoleBufferMaxTChars) {
-                iConsoleBuffer[offset++] = '\n';
-                iConsole->Printf(_L("\n"));
-                iConsoleBuffer[offset++] = 0;
-            }
-            break;
-        }
-        else {
-            TBool doBackward  = EFalse;
-            TBool doBackspace = EFalse;
-
-            prevX = currX;
-            prevY = currY;
-            if (code == EKeyBackspace) {
-                if (offset > 0) {
-                    iConsoleBuffer[--offset] = 0;
-                    doBackward  = ETrue;
-                    doBackspace = ETrue;
-                }
-            }
-            else if (offset < KPerlConsoleBufferMaxTChars) {
-                TChar ch = TChar(code);
-
-                if (ch.IsPrint()) {
-                    iConsoleBuffer[offset++] = (unsigned short)code;
-                    iConsole->Printf(_L("%c"), code);
-                }
-            }
-            currX = iConsole->WhereX();
-            currY = iConsole->WhereY();
-            if (maxX  == KPerlConsoleNoPos && prevX != KPerlConsoleNoPos &&
-                prevY != KPerlConsoleNoPos && currY == prevY + 1)
-                maxX = prevX;
-            if (doBackward) {
-                if (currX > 0)
-                    iConsole->SetPos(currX - 1);
-                else if (currY > 0)
-                    iConsole->SetPos(maxX, currY - 1);
-                if (doBackspace) {
-                    TUint nowX = iConsole->WhereX();
-                    TUint nowY = iConsole->WhereY();
-                    iConsole->Printf(_L(" ")); /* scrub */
-                    iConsole->SetPos(nowX, nowY);
-                }
-            }
-         }
-    }
-
-    return offset;
-}
-
-int CPerlBase::ConsoleRead(const int fd, char* buf, int n)
-{
-    if (iReadFunc)
-        return iReadFunc(fd, buf, n);
-
-    if (!iConsole) {
-        errno = EIO;
-        return -1;
-    }
-
-    if (n < 0) {
-        errno = EINVAL;
-        return -1;
-    }
-
-    if (n == 0)
-        return 0;
-
-    TBuf8<4 * KPerlConsoleBufferMaxTChars> aBufferUtf8;
-    TBuf16<KPerlConsoleBufferMaxTChars>    aBufferUtf16;
-    int length = ConsoleReadLine();
-    int i;
-
-    iConsoleUsed += length;
-
-    aBufferUtf16.SetLength(length);
-    for (i = 0; i < length; i++)
-        aBufferUtf16[i] = iConsoleBuffer[i];
-    aBufferUtf8.SetLength(4 * length);
-
-    CnvUtfConverter::ConvertFromUnicodeToUtf8(aBufferUtf8, aBufferUtf16);
-
-    char *pUtf8 = (char*)aBufferUtf8.PtrZ();
-    int nUtf8 = aBufferUtf8.Size();
-    if (nUtf8 > n)
-        nUtf8 = n; /* Potential data loss. */
-#ifdef PERL_SYMBIAN_CONSOLE_UTF8
-    for (i = 0; i < nUtf8; i++)
-        buf[i] = pUtf8[i];
-#else
-    dTHX;
-    for (i = 0; i < nUtf8; i+= UTF8SKIP(pUtf8 + i)) {
-        unsigned long u = utf8_to_uvchr_buf((U8*)(pUtf8 + i),
-                                            (U8*)(pUtf8 + nUtf8),
-                                            0);
-        if (u > 0xFF) {
-            iConsole->Printf(_L("(keycode > 0xFF)\n"));
-            buf[i] = 0;
-            return -1;
-        }
-        buf[i] = u;
-    }
-#endif
-    if (nUtf8 < n)
-        buf[nUtf8] = 0;
-    return nUtf8;
-}
-
-int CPerlBase::ConsoleWrite(const int fd, const char* buf, int n)
-{
-    if (iWriteFunc)
-        return iWriteFunc(fd, buf, n);
-
-    if (!iConsole) {
-        errno = EIO;
-        return -1;
-    }
-
-    if (n < 0) {
-        errno = EINVAL;
-        return -1;
-    }
-
-    if (n == 0)
-        return 0;
-
-    int wrote = 0;
-#ifdef PERL_SYMBIAN_CONSOLE_UTF8
-    dTHX;
-    if (is_utf8_string((U8*)buf, n)) {
-        for (int i = 0; i < n; i += UTF8SKIP(buf + i)) {
-            TChar u = valid_utf8_to_uvchr((U8*)(buf + i), 0);
-            iConsole->Printf(_L("%c"), u);
-            wrote++;
-        }
-    } else {
-        iConsole->Printf(_L("(malformed utf8: "));
-        for (int i = 0; i < n; i++)
-            iConsole->Printf(_L("%02x "), buf[i]);
-        iConsole->Printf(_L(")\n"));
-    }
-#else
-    for (int i = 0; i < n; i++) {
-        iConsole->Printf(_L("%c"), buf[i]);
-    }
-    wrote = n;
-#endif
-    iConsoleUsed += wrote;
-    return n;
-}
-
diff --git a/symbian/PerlBase.h b/symbian/PerlBase.h
deleted file mode 100644 (file)
index 769958d..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The CPerlBase class is licensed under the same terms as Perl itself. */
-
-/* See PerlBase.pod for documentation. */
-
-#ifndef __PerlBase_h__
-#define __PerlBase_h__
-
-#include <e32base.h>
-
-#if !defined(PERL_MINIPERL) && !defined(PERL_PERL)
-#  ifndef PERL_IMPLICIT_CONTEXT
-#    define PERL_IMPLICIT_CONTEXT
-#  endif
-#  ifndef PERL_MULTIPLICITY
-#    define PERL_MULTIPLICITY
-#  endif
-#  ifndef PERL_GLOBAL_STRUCT
-#    define PERL_GLOBAL_STRUCT
-#  endif
-#  ifndef PERL_GLOBAL_STRUCT_PRIVATE
-#    define PERL_GLOBAL_STRUCT_PRIVATE
-#  endif
-#endif
-
-#include "EXTERN.h"
-#include "perl.h"
-
-typedef enum {
-   EPerlNone,
-   EPerlAllocated,
-   EPerlConstructed,
-   EPerlParsed,
-   EPerlRunning,
-   EPerlTerminated,
-   EPerlPaused,
-   EPerlSuccess,
-   EPerlFailure,
-   EPerlDestroying
-} TPerlState;
-
-class PerlConsole;
-
-class CPerlBase : public CBase
-{
-  public:
-    CPerlBase();
-    IMPORT_C virtual ~CPerlBase();
-    IMPORT_C static CPerlBase* NewInterpreter(TBool aCloseStdlib = ETrue,
-                                               void (*aStdioInitFunc)(void*) = NULL,
-                                               void *aStdioInitCookie = NULL);
-    IMPORT_C static CPerlBase* NewInterpreterL(TBool aCloseStdlib = ETrue,
-                                               void (*aStdioInitFunc)(void*) = NULL,
-                                               void *aStdioInitCookie = NULL);
-    IMPORT_C static CPerlBase* NewInterpreterLC(TBool iCloseStdlib = ETrue,
-                                                void (*aStdioInitFunc)(void*) = NULL,
-                                                void *aStdioInitCookie = NULL);
-    IMPORT_C TInt RunScriptL(const TDesC& aFileName, int argc = 2, char **argv = NULL, char *envp[] = NULL);
-    IMPORT_C int  Parse(int argc = 0, char *argv[] = NULL, char *envp[] = NULL);
-    IMPORT_C void SetupExit();
-    IMPORT_C int  Run();
-    IMPORT_C int  ParseAndRun(int argc = 0, char *argv[] = 0, char *envp[] = 0);
-    IMPORT_C void Destruct();
-
-    IMPORT_C PerlInterpreter* GetInterpreter();
-
-    // These two really should be private but when not using PERLIO
-    // certain C callback functions of STDLIB need to be able to call
-    // these.  In general, all the console related functionality is
-    // intentionally hidden and underdocumented.
-    int               ConsoleRead(const int fd, char* buf, int n);
-    int               ConsoleWrite(const int fd, const char* buf, int n);
-
-    // Having these public does not feel right, but maybe someone needs
-    // to do creative things with them.
-    int               (*iReadFunc)(const int fd, char *buf, int n);
-    int               (*iWriteFunc)(const int fd, const char *buf, int n);
-
-   protected:
-    PerlInterpreter*  iPerl;
-#ifdef PERL_GLOBAL_STRUCT
-    struct perl_vars* iVars;
-#else
-    void*             iAppCtx;
-#endif
-    TPerlState        iState;
-
-   private:
-    void              ConstructL();
-    CConsoleBase*     iConsole;                /* The screen. */
-    TUint16*          iConsoleBuffer;  /* The UTF-16 characters. */
-    TUint             iConsoleUsed;    /* How many in iConsoleBuffer. */
-    TBool             iCloseStdlib;    /* Close STDLIB on exit? */
-
-    void              (*iStdioInitFunc)(void *);
-    void*             iStdioInitCookie;
-
-    int               ConsoleReadLine();
-    void              StdioRewire(void*);
-};
-
-#define diTHX PerlInterpreter*  my_perl = iPerl
-#define diVAR struct perl_vars* my_vars = iVars
-
-#ifdef PERL_GLOBAL_STRUCT
-#  define PERL_APPCTX_SET(c) ((c)->iVars->Gappctx = (c))
-#else
-#  define PERL_APPCTX_SET(c) (PL_appctx = (c))
-#endif
-
-#undef Copy
-#undef CopyD /* For symmetry, not for Symbian reasons. */
-#undef New
-#define PerlCopy(s,d,n,t)      (MEM_WRAP_CHECK(n,t), (void)memcpy((char*)(d),(char*)(s), (n) * sizeof(t)))
-#define PerlCopyD(s,d,n,t)     (MEM_WRAP_CHECK(n,t), memcpy((char*)(d),(char*)(s), (n) * sizeof(t)))
-#define PerlNew(x,v,n,t)       (v = (MEM_WRAP_CHECK(n,t), (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))))
-
-// This is like the Symbian _LIT() but without the embedded L prefix,
-// which enables using #defined constants (which need to carry their
-// own L prefix).
-#ifndef _LIT_NO_L
-# define _LIT_NO_L(n, s) static const TLitC<sizeof(s)/2> n={sizeof(s)/2-1,s}
-#endif // #ifndef _LIT_NO_L
-
-#endif /* #ifndef __PerlBase_h__ */
-
diff --git a/symbian/PerlBase.pod b/symbian/PerlBase.pod
deleted file mode 100644 (file)
index 70fc9af..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-=head1 NAME
-
-CPerlBase - a C++ base class encapsulating a Perl interpreter in Symbian
-
-=head1 SYNOPSIS
-
-       // in your App.mmp
-       USERINCLUDE     \symbian\perl\x.y.z\include
-       LIBRARY         perlXYZ.lib
-
-       // in your App
-       #include "PerlBase.h" // includes also EXTERN.h and perl.h
-       CPerlBase* perl = CPerlBase::NewInterpreterLC();
-       ...
-       delete perl;
-
-=head1 DESCRIPTION
-
-CPerlBase is a simple Symbian C++ class that wraps a Perl
-interpreter; its creation, use, and destroying.  To understand
-what this is doing, and how to use the interpreter, a fair knowledge
-of L<perlapi>, L<perlguts>, and L<perlembed> is recommended.
-
-One useful thing CPerlBase does compared with just using the raw
-Perl C API is that it redirects the "std streams" (STDOUT et alia)
-to a text console implementation which while being very basic
-is marginally more usable than the Symbian basic text console.
-
-=head2 The Basics
-
-=over 4
-
-=item *
-
-CPerlBase* NewInterpreterL();
-
-The constructor that does not keep the object in the Symbian "cleanup stack".
-perl_alloc() and perl_construct() are called behind the curtains.
-
-Accepts the same arguments as NewInterpreterLC().
-
-=item *
-
-CPerlBase* NewInterpreterLC();
-
-The constructor that keeps the object in the Symbian "cleanup stack".
-perl_alloc() and perl_construct() are called behind the curtains.
-
-Can have three arguments:
-
-=over 8
-
-=item *
-
-TBool aCloseStdlib = ETrue
-
-Should a CPerlBase close the Symbian POSIX STDLIB when closing down.
-Good for one-shot script execution, probably less good for longer term
-embedded interpreter.
-
-=item *
-
-void (*aStdioInitFunc)(void*) = NULL
-
-If set, called with aStdioInitCookie, and the default console is
-not created.  You may want to set the iReadFunc() and iWriteFunc().
-
-=item *
-
-void *aStdioInitCookie = NULL
-
-Used as the argument for aStdioInitFunc().
-
-=back
-
-=item *
-
-void Destroy();
-
-The destructor of the interpreter.  The class destructor calls
-first this and then the Symbian CloseSTDLIB().
-
-perl_destruct(), perl_free(), and PERL_SYS_TERM() are called
-behind the curtains.
-
-=back
-
-=head2 Utility functions
-
-=over 4
-
-=item *
-
-int Parse(int argc = 0, char *argv[] = 0, char *envp[] = 0);
-
-Prepare an interpreter for executing by parsing input as if a C main()
-had been called.  For example to parse a script, use argc of 2 and argv
-of { "perl", script_name }.
-
-All arguments are optional: in case either argc or argv are zero,
-argc of 3 and argv of { "perl", "-e", "0" } is assumed.
-
-PERL_SYS_INIT() and perl_parse() are called behind the curtains.
-
-Note that a call to Parse() is required before Run().
-
-Returns zero if parsing was successful, non-zero if not (and the stderr
-will get the error).
-
-=item *
-
-int Run()
-
-Start executing an interpreter.  A Parse() must have been called before
-a Run(): use 3 and { "", "-e", 0 } if you do not have an argv.
-
-Note that a call to Parse() is required before Run().
-
-perl_run() is called behind the curtains.
-
-Returns zero if execution was successful, non-zero if not (and the stderr
-will get the error).
-
-=item *
-
-int ParseAndRun(int argc, char *argv[], char *envp[]);
-
-Combined Parse() and Run().  The Run() is not run if the Parse() fails.
-
-Returns zero if parsing and execution were successful, non-zero if not.
-
-=item *
-
-TInt RunScriptL(TDesC& aFileName, int argc, char **argv, char *envp[])
-
-Like ParseAndRun() but works for Symbian filenames (UTF-16LE).
-The UTF-8 version of aFileName is always argv[argc-1], and argv[0]
-is always "perl".
-
-=back
-
-=head2 Macros
-
-=over 4
-
-=item *
-
-diTHX
-
-Set up my_perl from the current object (like dTHX).
-
-=item *
-
-diVAR
-
-Set up my_vars from the current object (like dVAR).
-
-=back
-
-=head2 Extending CPerlBase (subclassing, deriving from)
-
-Note that it probably isn't worth the trouble to try to wrap the
-whole, rather large, Perl C API into a C++ API.  Just use the C API.
-
-The protected members of the class are:
-
-=over 4
-
-=item *
-
-PerlInterpreter* iPerl
-
-The Perl interpreter.
-
-=item *
-
-struct perl_vars* iVars
-
-The global variables of the interpreter.
-
-=item *
-
-TPerlState iState
-
-The state of the Perl interpreter. TPerlState is one of EPerlNone,
-EPerlAllocated, EPerlConstructed, EPerlParsed, EPerlRunning,
-EPerlTerminated, EPerlPaused (these two are currently unused
-but in the future they might be used to indicate that the interpreter
-was stopped either non-resumably or resumably for some reason),
-EPerlSuccess (perl_run() succeeded), EPerlFailure (perl_run() failed),
-EPerlDestroying.
-
-=back
-
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2005 Nokia.  All rights reserved.
-
-=head1 LICENSE
-
-The CPerlBase class is licensed under the same terms as Perl itself.
-
-=cut
-
diff --git a/symbian/PerlRecog.cpp b/symbian/PerlRecog.cpp
deleted file mode 100644 (file)
index d2db544..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-/* The PerlRecog application is licensed under the same terms as Perl itself. */
-
-#include <apmrec.h>
-#include <apmstd.h>
-#include <f32file.h>
-
-const TUid KUidPerlRecog = { 0x102015F7 };
-_LIT8(KPerlMimeType, "x-application/x-perl");
-_LIT8(KPerlSig, "#!/usr/bin/perl");
-const TInt KPerlSigLen = 15;
-
-class CApaPerlRecognizer : public CApaDataRecognizerType {
-  public:
-    CApaPerlRecognizer():CApaDataRecognizerType(KUidPerlRecog, EHigh) {
-        iCountDataTypes = 1;
-    }
-    virtual TUint PreferredBufSize() { return KPerlSigLen; }
-    virtual TDataType SupportedDataTypeL(TInt /* aIndex */) const {
-        return TDataType(KPerlMimeType);
-    }
-  private:
-    virtual void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer);
-};
-
-void CApaPerlRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer)
-{
-    iConfidence = ENotRecognized;
-
-    if (aBuffer.Length() >= KPerlSigLen &&
-        aBuffer.Left(KPerlSigLen).Compare(KPerlSig) == 0) {
-        iConfidence = ECertain;
-        iDataType   = TDataType(KPerlMimeType);
-    } else {
-        TParsePtrC p(aName);
-
-        if ((p.Ext().CompareF(_L(".pl"))  == 0) ||
-            (p.Ext().CompareF(_L(".pm"))  == 0)) {
-            iConfidence = ECertain;
-            iDataType = TDataType(KPerlMimeType);
-        }
-    }
-}
-
-EXPORT_C CApaDataRecognizerType* CreateRecognizer()
-{
-    return new CApaPerlRecognizer;
-}
-
-GLDEF_C TInt E32Dll(TDllReason /* aReason */)
-{
-    return KErrNone;
-}
-
-
-    
diff --git a/symbian/PerlRecog.mmp b/symbian/PerlRecog.mmp
deleted file mode 100644 (file)
index 6850103..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-TARGET         PerlRecog.mdl
-TARGETTYPE     mdl
-UID            0x10003A19 0x102015F7
-TARGETPATH     \system\recogs
-SOURCE         PerlRecog.cpp
-USERINCLUDE    .
-SYSTEMINCLUDE  \epoc32\include
-LIBRARY                euser.lib efsrv.lib apmime.lib
-
diff --git a/symbian/PerlUi.cpp b/symbian/PerlUi.cpp
deleted file mode 100644 (file)
index 01be136..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/* Copyright (c) 2005 Nokia. All rights reserved. */
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-#include "PerlUi.h"
-
-#ifdef __SERIES60__
-# include <avkon.hrh>
-# include <aknnotewrappers.h> 
-# include <AknCommonDialogs.h>
-# ifndef __SERIES60_1X__
-#  include <CAknFileSelectionDialog.h>
-# endif
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-# include <eikon.hrh>
-# include <cknflash.h>
-# include <ckndgopn.h>
-# include <ckndgfob.h>
-# include <eiklabel.h>
-# include <cknconf.h>
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#ifdef __UIQ__
-# include <qikon.hrh>
-# include <eikedwin.h>
-# include <eiklabel.h>
-#endif /* #ifdef __UIQ__ */
-
-#include <apparc.h>
-#include <e32base.h>
-#include <e32cons.h>
-#include <eikenv.h>
-#include <bautils.h>
-#include <eikappui.h>
-#include <utf.h>
-#include <f32file.h>
-
-#include <coemain.h>
-
-#include "PerlUi.hrh"
-#include "PerlUi.rsg"
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-#include "Eikon.rsg"
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "PerlBase.h"
-#include "PerlUtil.h"
-
-#define symbian_get_vars() Dll::Tls() // Not visible from perlXYZ.lib?
-
-_LIT(KDefaultScript, "default.pl");
-
-EXPORT_C void CPerlUiAppUi::ConstructL()
-{
-    BaseConstructL();
-    iAppView = CPerlUiAppView::NewL(ClientRect());
-    AddToStackL(iAppView);
-    CEikonEnv::Static()->DisableExitChecks(ETrue); // Symbian FAQ-0577.
-}
-
-EXPORT_C TBool CPerlUi::OkCancelDialogL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknNoteDialog* dlg =
-        new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
-    dlg->PrepareLC(R_PERLUI_OK_CANCEL_DIALOG);
-    dlg->SetTextL(aMessage);
-    return dlg->RunDlgLD() == EAknSoftkeyOk;
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__)
-    return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_CANCEL_OK);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-#ifdef __UIQ__
-    CEikDialog* dlg = new (ELeave) CEikDialog();
-    return dlg->ExecuteLD(R_PERLUI_OK_CANCEL_DIALOG) == EEikBidOk;
-#endif /* #ifdef __UIQ__ */
-}
-
-EXPORT_C TBool CPerlUi::YesNoDialogL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknNoteDialog* dlg =
-        new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
-    dlg->PrepareLC(R_PERLUI_YES_NO_DIALOG);
-    dlg->SetTextL(aMessage);
-    return dlg->RunDlgLD() == EAknSoftkeyOk;
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__)
-    return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_NO_YES);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-#ifdef __UIQ__
-    CEikDialog* dlg = new (ELeave) CEikDialog();
-    return dlg->ExecuteLD(R_PERLUI_YES_NO_DIALOG) == EEikBidOk;
-#endif /* #ifdef __UIQ__ */
-}
-
-EXPORT_C void CPerlUi::InformationNoteL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknInformationNote* note = new (ELeave) CAknInformationNote;
-    note->ExecuteLD(aMessage);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    CEikonEnv::Static()->InfoMsg(aMessage);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-}
-
-EXPORT_C TInt CPerlUi::WarningNoteL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknWarningNote* note = new (ELeave) CAknWarningNote;
-    return note->ExecuteLD(aMessage);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    CEikonEnv::Static()->AlertWin(aMessage);
-    return ETrue;
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-}
-
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-
-CPerlUiTextQueryDialog::CPerlUiTextQueryDialog(HBufC*& aBuffer) :
-  iData(aBuffer)
-{
-}
-
-TBool CPerlUiTextQueryDialog::OkToExitL(TInt /* aKeycode */)
-{
-  iData = static_cast<CEikEdwin*>(Control(EPerlUiTextQueryInputField))->GetTextInHBufL();
-  return ETrue;
-}
-
-void CPerlUiTextQueryDialog::PreLayoutDynInitL()
-{
-  SetTitleL(iTitle);
-  CEikLabel* promptLabel = ControlCaption(EPerlUiTextQueryInputField);
-  promptLabel->SetTextL(iPrompt);
-}
-
-/* TODO: OfferKeyEventL() so that newline can be seen as 'OK'.
- * Or a hotkey for the button? */
-
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-
-EXPORT_C TBool CPerlUi::TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength)
-{
-#ifdef __SERIES60__
-    CAknTextQueryDialog* dlg =
-        new (ELeave) CAknTextQueryDialog(aData);
-    dlg->SetPromptL(aPrompt);
-    dlg->SetMaxLength(aMaxLength);
-    return dlg->ExecuteLD(R_PERLUI_TEXT_QUERY_DIALOG);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    HBufC* data = NULL;
-    CPerlUiTextQueryDialog* dlg =
-      new (ELeave) CPerlUiTextQueryDialog(data);
-    dlg->iTitle.Set(aTitle);
-    dlg->iPrompt.Set(aPrompt);
-    dlg->iMaxLength = aMaxLength;
-    if (dlg->ExecuteLD(R_PERLUI_ONELINER_DIALOG)) {
-        aData.Copy(*data);
-        return ETrue;
-    }
-    return EFalse;
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-}
-
-EXPORT_C TBool CPerlUi::FileQueryDialogL(TDes& aFilename)
-{
-#ifdef __SERIES60__
-  return AknCommonDialogs::RunSelectDlgLD(aFilename,
-                                          R_PERLUI_FILE_SELECTION_DIALOG);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__)
-  if (CCknOpenFileDialog::RunDlgLD(aFilename,
-                                    CCknFileListDialogBase::EShowAllDrives
-                                   |CCknFileListDialogBase::EShowSystemFilesAndFolders
-                                   |CCknFileListDialogBase::EShowBothFilesAndFolders
-                                   )) {
-    TEntry aEntry; // Be paranoid and check that the file is there.
-    RFs aFs;
-    aFs.Connect();
-    if (aFs.Entry(aFilename, aEntry) == KErrNone)
-      return ETrue;
-    else
-      CEikonEnv::Static()->InfoMsg(_L("File not found"));
-  }
-  return EFalse;
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-#ifdef __UIQ__
-  return EFalse; // No filesystem access in UIQ 2.x!
-#endif /* #ifdef __UIQ__ */
-}
-
-#ifdef __SERIES60__
-
-EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand)
-{
-    switch(aCommand)
-    {
-    case EEikCmdExit:
-    case EAknSoftkeyExit:
-        Exit();
-        break;
-    default:
-        DoHandleCommandL(aCommand);
-        break;
-    }
-}
-
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-
-EXPORT_C void CPerlUiAppView::HandleCommandL(TInt aCommand, CPerlUiAppUi* aAppUi) {
-    aAppUi->DoHandleCommandL(aCommand);
-}
-
-EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand) {
-    switch(aCommand)
-    {
-    case EEikCmdExit:
-        Exit();
-        break;
-    default:
-        iAppView->HandleCommandL(aCommand, this);
-        break;
-    }
-}
-
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-
-CPerlUiAppView* CPerlUiAppView::NewL(const TRect& aRect)
-{
-    CPerlUiAppView* self = CPerlUiAppView::NewLC(aRect);
-    CleanupStack::Pop(self);
-    return self;
-}
-
-CPerlUiAppView* CPerlUiAppView::NewLC(const TRect& aRect)
-{
-    CPerlUiAppView* self = new (ELeave) CPerlUiAppView;
-    CleanupStack::PushL(self);
-    self->ConstructL(aRect);
-    return self;
-}
-
-void CPerlUiAppView::ConstructL(const TRect& aRect)
-{
-    CreateWindowL();
-    SetRect(aRect);
-    ActivateL();
-}
-
-CPerlUiAppView::~CPerlUiAppView()
-{
-}
-
-void CPerlUiAppView::Draw(const TRect& /*aRect*/) const
-{
-    CWindowGc& gc = SystemGc();
-    TRect rect = Rect();
-    gc.Clear(rect);
-}
-
diff --git a/symbian/PerlUi.h b/symbian/PerlUi.h
deleted file mode 100644 (file)
index 9a50020..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (c) 2005 Nokia. All rights reserved. */
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlUi_h__
-#define __PerlUi_h__
-
-#ifdef __SERIES60__
-# include <aknapp.h>
-# include <aknappui.h>
-# include <akndoc.h>
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-# include <eikapp.h>
-# include <eikappui.h>
-# include <eikdoc.h>
-# include <eikbctrl.h>
-# include <eikgted.h>
-# include <eikdialg.h>
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#ifdef __UIQ__
-# include <qikapplication.h>
-# include <qikappui.h>
-# include <qikdocument.h>
-# include <eikdialg.h>
-#endif /* #ifdef __UIQ____ */
-
-#include <coecntrl.h>
-#include <f32file.h>
-
-#ifdef __SERIES60__
-# define CgPerlUiDocument    CAknDocument
-# define CgPerlUiApplication CAknApplication
-# define CgPerlUiAppUi       CAknAppUi
-# define CgPerlUiNoteDialog  CAknNoteDialog
-# define CgPerlUiAppView     CCoeControl
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-# define CgPerlUiDocument    CEikDocument
-# define CgPerlUiApplication CEikApplication
-# define CgPerlUiAppUi       CEikAppUi
-# define CgPerlUiNoteDialog  CCknFlashingDialog
-# define CgPerlUiAppView     CEikBorderedControl
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#ifdef __UIQ__
-# define CgPerlUiDocument    CEikDocument
-# define CgPerlUiApplication CQikApplication
-# define CgPerlUiAppUi       CQikAppUi
-# define CgPerlUiNoteDialog  CCknFlashingDialog
-# define CgPerlUiAppView     CCoeControl
-#endif /* #ifdef __UIQ__ */
-
-class CPerlUiApplication : public CgPerlUiApplication
-{
-};
-
-const TUint KPerlUiPromptSize   = 20;
-const TUint KPerlUiOneLinerSize = 128;
-
-class CPerlUiAppView;
-
-class CPerlUiAppUi : public CgPerlUiAppUi
-{
-  public:
-    IMPORT_C void ConstructL();
-    void virtual DoHandleCommandL(TInt aCommand) = 0;
-    IMPORT_C void HandleCommandL(TInt aCommand);
-    TBuf<KPerlUiOneLinerSize> iOneLiner; // Perl code to evaluate.
-    CPerlUiAppView* iAppView;
-};
-
-class CPerlUiAppView : public CgPerlUiAppView
-{
-  public:
-    static CPerlUiAppView* NewL(const TRect& aRect);
-    static CPerlUiAppView* NewLC(const TRect& aRect);
-    ~CPerlUiAppView();
-    void Draw(const TRect& aRect) const;
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    IMPORT_C void HandleCommandL(TInt aCommand, CPerlUiAppUi* aAppUi);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-  private:
-    void ConstructL(const TRect& aRect);
-};
-
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-
-class CPerlUiTextQueryDialog : public CEikDialog
-{
-  public:
-    CPerlUiTextQueryDialog(HBufC*& aBuffer);
-    /* TODO: OfferKeyEventL() so that newline can be seen as 'OK'. */
-    HBufC*& iData;
-    TPtrC iTitle;  // used in S80 but not in S60
-    TPtrC iPrompt; // used in S60 and S80
-    TInt iMaxLength;
-  protected:
-    void PreLayoutDynInitL();
-  private:
-    TBool OkToExitL(TInt aKeycode);
-};
-
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-
-class CPerlUi : public CgPerlUiAppUi
-{
-  public:
-    IMPORT_C static TBool OkCancelDialogL(TDesC& aMessage);
-    IMPORT_C static TBool YesNoDialogL(TDesC& aMessage);
-    IMPORT_C static void  InformationNoteL(TDesC& aMessage);
-    IMPORT_C static TInt  WarningNoteL(TDesC& aMessage);
-    IMPORT_C static TBool TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength);
-    IMPORT_C static TBool FileQueryDialogL(TDes& aFilename);
-};
-
-#endif // __PerlUi_h__
diff --git a/symbian/PerlUi.hrh b/symbian/PerlUi.hrh
deleted file mode 100644 (file)
index edb657d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Copyright (c) 2005 Nokia.  All rights reserved. */
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlUi_HRH__
-#define __PerlUi_HRH__
-
-enum TPerlUiIds
-{
-    EPerlUiTextQueryInputField        = 2048,
-    EPerlUiLast                       = 2099  // no comma here
-};
-
-#endif // __PerlUi_HRH__
diff --git a/symbian/PerlUiS60.rss b/symbian/PerlUiS60.rss
deleted file mode 100644 (file)
index 757fb33..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The S60 definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <avkon.rh>
-#include <avkon.rsg>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_Perl_menubar;
-    cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
-}
-
-
-RESOURCE MENU_BAR r_Perl_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_Perl_menu;
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_Perl_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandRunFile;
-            txt = "Run";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_ok_cancel_dialog
-{
-    flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons;
-    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtNote;
-            id = EGeneralNote;
-            control = AVKON_NOTE
-            {
-                layout = EGeneralLayout;
-            };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_yes_no_dialog
-{
-    flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons;
-    buttons = R_AVKON_SOFTKEYS_YES_NO;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtNote;
-            id = EGeneralNote;
-            control = AVKON_NOTE
-            {
-                layout = EGeneralLayout;
-            };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_text_query_dialog
-{
-    flags = EGeneralQueryFlags;
-    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtQuery;
-            id = EGeneralQuery;
-            control = AVKON_DATA_QUERY
-            {
-                layout = EDataLayout;
-                control = EDWIN {};
-            };
-        }
-    }; 
-}
-
-RESOURCE AVKON_LIST_QUERY r_perlui_list_query_dialog
-{
-    flags = EGeneralQueryFlags;
-    softkeys = R_AVKON_SOFTKEYS_OK_CANCEL;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtListQueryControl;
-            id = EListQueryControl;
-            control = AVKON_LIST_QUERY_CONTROL
-            {
-                listtype = EAknCtSinglePopupMenuListBox;
-            };
-        }
-    };
-}
-
-#include <CommonDialogs.hrh>
-#include <CommonDialogs.rh>
-
-RESOURCE MEMORYSELECTIONDIALOG r_perlui_file_selection_dialog
-{
-}
-
diff --git a/symbian/PerlUiS80.rss b/symbian/PerlUiS80.rss
deleted file mode 100644 (file)
index 8028311..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The S80 definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <eikon.rsg>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_perlui_menubar;
-    cba = r_perlui_cba;
-}
-
-RESOURCE CBA r_perlui_cba
-{
-    buttons = {
-        CBA_BUTTON { id = EPerlAppCommandRunFile;        txt = "Run"; },
-        CBA_BUTTON { id = EPerlAppCommandOneLiner;       txt = "Oneliner"; },
-        CBA_BUTTON { id = EPerlAppCommandAboutCopyright; txt = "About"; },
-        CBA_BUTTON { id = EEikCmdExit;                   txt = "Exit"; }
-    };
-}
-
-
-RESOURCE MENU_BAR r_perlui_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_perlui_menu; txt = "Options";
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_perlui_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandRunFile;
-            txt = "Run";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_oneliner_dialog
-{
-    title = "Title";
-    buttons = R_EIK_BUTTONS_CANCEL_OK;
-    flags = EEikDialogFlagWait;
-    items = {
-        DLG_LINE {
-            type = EEikCtEdwin;
-           prompt = "Prompt";
-            id = EPerlUiTextQueryInputField;
-            control = EDWIN {
-                width = 10;
-                maxlength = 128;
-            };
-        }
-    };
-}
-
diff --git a/symbian/PerlUiS90.rss b/symbian/PerlUiS90.rss
deleted file mode 100644 (file)
index 28f71dd..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (c) 2006 Alexander Smishlajev. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The S90 definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <eikon.rsg>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_perlui_menubar;
-    cba = r_perlui_cba;
-}
-
-RESOURCE CBA r_perlui_cba
-{
-    buttons = {
-        CBA_BUTTON { id = EPerlAppCommandRunFile;        txt = "Run"; },
-        CBA_BUTTON { id = EPerlAppCommandOneLiner;       txt = "Oneliner"; },
-        CBA_BUTTON { id = EPerlAppCommandAboutCopyright; txt = "About"; },
-        CBA_BUTTON { id = EEikCmdExit;                   txt = "Exit"; }
-    };
-}
-
-
-RESOURCE MENU_BAR r_perlui_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_perlui_menu; txt = "Options";
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_perlui_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandRunFile;
-            txt = "Run";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_oneliner_dialog
-{
-    title = "Title";
-    buttons = R_EIK_BUTTONS_CANCEL_OK;
-    flags = EEikDialogFlagWait;
-    items = {
-        DLG_LINE {
-            type = EEikCtEdwin;
-           prompt = "Prompt";
-            id = EPerlUiTextQueryInputField;
-            control = EDWIN {
-                width = 10;
-                maxlength = 128;
-            };
-        }
-    };
-}
-
diff --git a/symbian/PerlUiUIQ.rss b/symbian/PerlUiUIQ.rss
deleted file mode 100644 (file)
index 55362a9..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Copyright (c) 200-2005 Nokia. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The UIQ definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <eikcore.rsg>
-#include <qikon.rh>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_perlui_menubar;
-    toolbar = r_perlui_menubar;
-}
-
-
-RESOURCE MENU_BAR r_perlui_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_perlui_menu; txt = "Options";
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_perlui_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_oneliner_dialog
-{
-    title = "Title";
-    buttons = R_EIK_BUTTONS_CANCEL_OK;
-    flags = EEikDialogFlagWait;
-    items = {
-        DLG_LINE {
-            type = EEikCtEdwin;
-           prompt = "Prompt";
-            id = EPerlUiTextQueryInputField;
-            control = EDWIN {
-                width = 10;
-                maxlength = 128;
-            };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_ok_cancel_dialog
-{
-    title = "OK / Cancel ?";
-    buttons = r_perlui_ok_cancel_buttons;
-}
-
-RESOURCE DLG_BUTTONS r_perlui_ok_cancel_buttons
-{
-    buttons = {
-        DLG_BUTTON {
-            id = EEikBidOk;
-            button = CMBUT { txt = "Ok"; };
-        },
-        DLG_BUTTON {
-            id = EEikBidCancel;
-            button = CMBUT { txt = "Cancel"; };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_yes_no_dialog
-{
-    title = "Yes / No ?";
-    buttons = r_perlui_yes_no_buttons;
-}
-
-RESOURCE DLG_BUTTONS r_perlui_yes_no_buttons
-{
-    buttons = {
-        DLG_BUTTON {
-            id = EEikBidOk;
-            button = CMBUT { txt = "Yes"; };
-        },
-        DLG_BUTTON {
-            id = EEikBidCancel;
-            button = CMBUT { txt = "No"; };
-        }
-    };
-}
-
-
-
diff --git a/symbian/PerlUtil.cpp b/symbian/PerlUtil.cpp
deleted file mode 100644 (file)
index b979072..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-/* The PerlUtil class is licensed under the same terms as Perl itself. */
-
-/* See PerlUtil.pod for documentation. */
-
-#define PERLUTIL_CPP
-
-#include "PerlUtil.h"
-
-#include <utf.h>
-
-#undef Copy
-#undef New
-
-EXPORT_C SV* PerlUtil::newSvPVfromTDesC8(const TDesC8& aDesC8) {
-  dTHX;
-  return newSVpvn((const char *)aDesC8.Ptr(), aDesC8.Size());
-}
-
-EXPORT_C void PerlUtil::setSvPVfromTDesC8(SV* sv, const TDesC8& aDesC8) {
-  dTHX;
-  sv_setpvn(sv, (const char *)aDesC8.Ptr(), aDesC8.Size());
-}
-
-EXPORT_C HBufC8* PerlUtil::newHBufC8fromSvPV(SV* sv) {
-  dTHX;
-  return PerlUtil::newHBufC8fromPVn((const U8 *)SvPV_nolen(sv), SvLEN(sv));
-}
-
-EXPORT_C void PerlUtil::setTDes8fromSvPV(TDes8& aDes8, SV* sv) {
-  dTHX;
-  PerlUtil::setTDes8fromPVn(aDes8, (const U8 *)SvPV_nolen(sv), SvLEN(sv));
-}
-
-EXPORT_C SV* PerlUtil::newSvPVfromTDesC16(const TDesC16& aDesC16) {
-  dTHX;
-  SV* sv = NULL;
-  HBufC8* hBuf8 = HBufC8::New(aDesC16.Length() * 3);
-
-  if (hBuf8) {
-    TPtr8 aPtr8(hBuf8->Des());
-    CnvUtfConverter::ConvertFromUnicodeToUtf8(aPtr8, aDesC16);
-    sv = newSVpvn((const char *)(hBuf8->Ptr()), hBuf8->Size());
-    delete hBuf8;
-    hBuf8 = NULL;
-    SvUTF8_on(sv);
-  }
-
-  return sv;
-}
-
-EXPORT_C void PerlUtil::setSvPVfromTDesC16(SV* sv, const TDesC16& aDesC16) {
-  dTHX;
-  HBufC8* hBuf8 = HBufC8::New(aDesC16.Length() * 3);
-
-  if (hBuf8) {
-    TPtr8 aPtr8(hBuf8->Des());
-    CnvUtfConverter::ConvertFromUnicodeToUtf8(aPtr8, aDesC16);
-    sv_setpvn(sv, (const char *)(hBuf8->Ptr()), hBuf8->Size());
-    delete hBuf8;
-    hBuf8 = NULL;
-    SvUTF8_on(sv);
-  }
-}
-
-EXPORT_C HBufC16* PerlUtil::newHBufC16fromSvPV(SV* sv) {
-  dTHX;
-  return PerlUtil::newHBufC16fromPVn((const U8 *)SvPV_nolen(sv), SvLEN(sv), SvUTF8(sv));
-}
-
-void PerlUtil::setTDes16fromSvPV(TDes16& aDes16, SV* sv) {
-  dTHX;
-  PerlUtil::setTDes16fromPVn(aDes16, (const U8 *)SvPV_nolen(sv), SvLEN(sv), SvUTF8(sv));
-}
-
-EXPORT_C HBufC8* PerlUtil::newHBufC8fromPVn(const U8* s, STRLEN n) {
-  HBufC8* aBuf8 = HBufC8::New(n);
-  if (aBuf8) {
-    TPtr8 ptr8 = aBuf8->Des();
-    ptr8.Copy(s, n);
-  }
-  return aBuf8;
-}
-
-EXPORT_C void PerlUtil::setTDes8fromPVn(TDes8& aDes8, const U8* s, STRLEN n) {
-  // TODO: grow aDes8 if needed
-  aDes8.Copy(s, n);
-}
-
-EXPORT_C HBufC16* PerlUtil::newHBufC16fromPVn(const U8 *s, STRLEN n, bool utf8) {
-  HBufC16 *hBuf16 = HBufC16::New(n); // overallocate
-
-  if (hBuf16) {
-    if (utf8) {
-      TPtr16 aPtr16(hBuf16->Des());
-      TPtrC8 aPtrC8(s, n);
-      CnvUtfConverter::ConvertToUnicodeFromUtf8(aPtr16, aPtrC8);
-    } else {
-      TPtrC8 aPtrC8(s, n);
-      hBuf16->Des().Copy(aPtrC8);
-    }
-  }
-
-  return hBuf16;
-}
-
-EXPORT_C void PerlUtil::setTDes16fromPVn(TDes16& aDes16, const U8 *s, STRLEN n, bool utf8) {
-  // TODO: grow aDes16 if needed
-  if (utf8) {
-    TPtrC8 aPtrC8(s, n);
-    CnvUtfConverter::ConvertToUnicodeFromUtf8(aDes16, aPtrC8);
-  } else {
-    TPtrC8 aPtrC8(s, n);
-    aDes16.Copy(aPtrC8);
-  }
-}
diff --git a/symbian/PerlUtil.h b/symbian/PerlUtil.h
deleted file mode 100644 (file)
index 1e7d292..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlUtil class is licensed under the same terms as Perl itself. */
-
-/* See PerlUtil.pod for documentation. */
-
-#ifndef __PerlUtil_h__
-#define __PerlUtil_h__
-
-#include <e32base.h>
-
-#include "EXTERN.h"
-#include "perl.h"
-
-class PerlUtil {
- public:
-
-  IMPORT_C static SV*       newSvPVfromTDesC8(const TDesC8& aDes);
-  IMPORT_C static void      setSvPVfromTDesC8(SV* sv, const TDesC8& aDes);
-  IMPORT_C static HBufC8*   newHBufC8fromSvPV(SV* sv);
-  IMPORT_C static void      setTDes8fromSvPV(TDes8& aDes8, SV* sv);
-
-  IMPORT_C static SV*       newSvPVfromTDesC16(const TDesC16& aDes);
-  IMPORT_C static void      setSvPVfromTDesC16(SV* sv, const TDesC16& aDes);
-  IMPORT_C static HBufC16*  newHBufC16fromSvPV(SV* sv);
-  IMPORT_C static void      setTDes16fromSvPV(TDes16& aDes16, SV* sv);
-
-  IMPORT_C static HBufC8*   newHBufC8fromPVn(const U8* s, STRLEN n);
-  IMPORT_C static void      setTDes8fromPVn(TDes8& aDes8, const U8* s, STRLEN n);
-  IMPORT_C static HBufC16*  newHBufC16fromPVn(const U8* s, STRLEN n, bool utf8);
-  IMPORT_C static void      setTDes16fromPVn(TDes16& aDes16, const U8* s, STRLEN n, bool utf8);
-};
-
-#endif /* #ifndef __PerlUtil_h__ */
-
-
diff --git a/symbian/PerlUtil.pod b/symbian/PerlUtil.pod
deleted file mode 100644 (file)
index 3215d19..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-=head1 NAME
-
-PerlUtil - a C++ utility class for Perl/Symbian
-
-=head1 SYNOPSIS
-
-   // in your App.mmp
-   USERINCLUDE \symbian\perl\x.y.z\include
-   LIBRARY     perlXYZ.lib
-
-   // in your App
-   #include "PerlUtil.h" // includes also EXTERN.h and perl.h
-
-   // Static methods for moving between Perl strings (SvPV)
-   // and Symbian strings (HBufC and TDes).
-
-   static SV*      newSvPVfromTDesC8(const TDesC8& aDes);
-   static void     setSvPVfromTDesC8(SV* sv, const TDesC8& aDes);
-   static HBufC8*  newHBufC8fromSvPV(SV* sv);
-   static void     setTDes8fromSvPV(TDes8* aDes8, SV* sv);
-
-   static SV*      newSvPVfromTDesC16(const TDesC16& aDes);
-   static void     setSvPVfromTDesC16(SV* sv, const TDesC16& aDes);
-   static HBufC16* newHBufC16fromSvPV(SV* sv);
-   static void     setTDes16fromSvPV(TDes16* aDes16, SV* sv);
-
-   static HBufC8*  newHBufC8fromPVn(const U8* s, STRLEN n);
-   static void     setTDes8fromPVn(TDes8* aDes8, const U8* s, STRLEN n);
-   static HBufC16* newHBufC16fromPVn(const U8* s, STRLEN n, bool utf8);
-   static void  setTDes16fromPVn(TDes16* aDes16, const U8* s, STRLEN n);
-
-   // An example
-
-   const U8* s = (const U8 *)"foo";
-   HBufC16* b = PerlUtil::newHBufC16fromPVn(s, 3, 0);
-   someCallWithConstTDesCRefArgument(*b);
-   delete b;
-
-=cut
-
-
-
diff --git a/symbian/README b/symbian/README
deleted file mode 100644 (file)
index 95ed303..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-The PerlApp* files are a demonstration application for the CPerlBase
-class, which is defined and implemented by the PerlBase* files. 
-The rest of the files are part of the Symbian base port.
-
-All files are Copyright (c) Nokia, 2004-2005, all rights reserved,
-and licensed under the same terms as Perl itself.
-
-Once the 'sdkinstall' make target has been run in the top level,
-the PerlApp can be built using the standard Symbian way:
-
-       bldmake bldfiles
-       abld build wins udeb
-       abld build thumb urel
-
-and then packaged into a SIS by:
-
-       makesis PerlApp.pkg
-
--- 
-
diff --git a/symbian/TODO b/symbian/TODO
deleted file mode 100644 (file)
index ac8ee3d..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-=encoding utf8
-
-=head1 BASE PORT
-
-=head2 Console
-
-- The Console only does "ASCII" input: e.g. pressing the "2"
-  key five times, "aaaaa", does not produce "ä" ("a diaeresis"),
-  but instead the "2" key rotates through "abc2abc2...".
-  This is a pity because the Console is actually capable of full
-  Unicode input and output (if you have the fonts, that is).  You
-  can verify this by entering e.g. the euro character, which is
-  U+20AC, well beyond U+00FF.  I don't know why the full repertoire
-  of the keyboard is not available.
-- Enhance the console? (line editing, full x-y movement, history)
-- The role of the console needs to be rethought: the best way
-  would be to have the console visible in the same screen as
-  the GUI elements (an "embedded console"?)
-
-=head2 Core Language
-
-- the $^E does not work
-- select() does not work (not our fault)
-- starting external application: what now (0.1.0) works is:
-  - system("app");
-  - system("app&");
-  - and those with arguments:
-    - system("app arg1 arg2")
-    - system("app arg1 arg2 &")
-    but remember that a Symbian process does get only argv[0]
-    and argv[1]: all the arguments of the application are passed
-    in as a single argument, the second one ("arg1 arg2" in the above)
-  What does not work:
-  - I/O redirection
-  - piped open, in either direction
-  - qx/backtick/`
-  - fork/wait (these unlikely to ever work as in POSIX)
-  - IO redirection or filename globbing in system()
-    (since there is no POSIX shell beneath)
-  What might work in future:
-  - some I/O redirection
-  - exec() might be made to work
-  - Symbian::spawn("cmd args") returning a process id (what does Win32 do?) 
-  - Symbian::waitpid($spawned_pid)
-
-=head2 Platform
-
-- in S60 1.2 (at least in 3650 Nokia 3650 v3.11) setjmp/longjmp is
-  fragile (see Symbian FAQ-0929), intensive debugging and fix needed
-
-=head2 Unicode
-
-- Symbian has Unicode filenames, and Unicode all over the place.
-- Encode and the use of Symbian Unicode in general
-  tie into the overall usefulness of PerlIO.
-
-=head2 Portability
-
-- Slash versus Backslash: where does one need to use "\\"?
-  writing Perl applications, where can one get away with using "/" ?
-
-=head2 Build
-
-- make xsbuild.pl much more robust (for building external extensions)
-  (see symbian\ext\README and symbian\ext\Moped\Msg\README)
-- now the .mmp functions both as input and as output - bad
-- MakeMaker?  Pure PM, PM + XS?
-- currently the PerlApp UID is in both config.pl (hardwired) and
-  in makesis.pl (computed), this is quite error prone
-- Enable building also under Cygwin? (could be really hard,
-  the Symbian SDKs pretty much assume cmd.exe)
-
-=head1 PACKAGING
-
-- subdivide perlext.sis?
-- pm-stripper: strip pod and comments, while inserting the appropriate
-  #line commands to keep linenumbers in sync.  Shaves off easily 50%
-  of the code, making install packages smaller.
-- Get MakeMaker to create SIS packages?  In non-Win32?
-- Symbian has APIs for opening .zip files
-- Investigate Autrijus Tang's PAR format
-  http://www.autrijus.org/par-intro/
-
-=head1 PerlBase
-
-- review for proper Symbian coding practices
-
-=head1 PerlApp
-
-- In "Run" see how one could show also the file extensions.
-- How to allow passing command line options to scripts being run?
-- Terminate/Pause menu entries (to be used while the script is running)?
-- review for proper Symbian coding practices
-
-=head2 All UIs
-
-- Make it possible to call UI elements (or any other Symbianic
-  asynchronous services) from Perl.
-
-  There is now a sample of enabling calling CPerlUi::TextQueryDialogL()
-  from Perl as PerlApp::TextQuery(), see symbian_utils.c.  This, however,
-  does not work: calling the dialog code blocks so that the screen is not
-  redrawn at all.  Perl should do both: "yield" so that the GUI framework
-  can redraw, but in the meanwhile Perl should wait for the completion
-  (OK or Cancel) of the dialog, but Perl must not exit the current PL_op.
-  Welcome to the wonderful world of cooperative multitasking.  The right
-  solution surely involves Active Objects.  The problem may require having
-  a different Perl op dispatch loop than the standard and debug ones in
-  run.c and dump.c.
-
-- menu/toolbar support
-- selection lists (single cf multi cf radio)
-- on/off (special case of two-item radio selection list)
-- forms (multicontrols)
-- "secret editor" (special case of text query)
-
-=head2 Series 60
-
-- in S60 2.6 (at least in Nokia 6630 v4.03.11) launching scripts via
-  FExplorer does not open up the console
-
-=head2 Series 80
-
-- On exit "PerlApp" gets Symbian USER Panic 44: "This panic is raised
-  by the Free() and FreeZ() member functions of an RHeap. It is caused
-  when the cell being freed overlaps the next cell on the free list
-  (i.e. the first cell on the free list with an address higher than the
-  one being freed)."  Reason unknown.
-- Hotkey Newline so that it functions as 'OK' in dialogs
-
-=head2 UIQ
-
-- UIQ 3.0? UIQ 2.0? (now only tried in UIQ 2.1)
-- UIQ, at least UIQ 2.1, does not have "file select dialogs" since
-  "files" are supposed to be hidden from the user.  Therefore, no
-  "Run" in PerlApp.  (For similar stylistic reasons there is no "Exit".)
-- Long notes (e.g. the EPerlAppCommandAbout) are shown badly truncated.
-
-=head1 CPAN LIBRARIES
-
-- Include/Package more modules (or work harder on getting CPAN.pm working?)
-  (but note that lib/**/*.pm is 3.5 megabytes, probably not worth including
-   all of it, even after pm-stripping):
-       - libnet
-       - Bundle::CPAN
-               - Archive::Tar (now included in 5.9.x)
-               - Term::ReadKey (useless?)
-               - Term::ReadLine (useless?)
-       - Bundle::LWP
-               - URI
-               - HTML::TagSet
-               - HTML::Parser
-                       - HTML::Entities
-               - HTML::HeadParser
-               - LWP
-       - Crypt::SSLeay? (ssl?)
-       - IMAP?
-       - Net::Telnet?
-       - Archive::Zip?
-       - Mail::Send?
-       - Date::Calc?
-       - XML? XML::Simple? (expat?) (there is builtin xml support)
-       - RSS?
-       - DBI (DBD::???)
-       - DBD::SQLite? (sqlite?)
-       - SOAP? XML-RPC?
-
-=head1 CORE LIBRARIES
-
-- Fix Devel::PPPort (worth it?) (Note that there is D::PPP 3.x out by now)
-- Fix Encode to not to have writeable data: seems to be tricky indeed
-  because of copious global non-const data.
-- Verify that the modified File::Spec::Win32 does work in Symbian.
-  (File::Spec::Epoc does not seem to be relevant?)
-- What does Cwd really do since the concept of cwd is a bit fuzzy in Symbian.
-- What should Sys::Hostname return?  GPRS? BT? WLAN?
-- ByteLoader problem: byterun.c does not see VERSION and XS_VERSION.
-- POSIX problem: STDLIB POSIX is not that POSIX.
-
-=head1 REGRESSION SUITE
-
-- how to run the standard test suite on a Symbian device?
-
-=head1 FUTURE POSSIBILITIES
-
-- GUI support (problematic that the MVC model enforces an "application")
-  (name suggestion: Moped::Gui)
-  (see above for the need of sorting out the Active Objectedness)
-- Messaging support (sms:, mms:, mailto:, irdaobex:, btobex:,
-  cell location, WLAN)
-  (name suggestion: Moped::Msg)
-- PDA support (address book)
-  (name suggestion: Moped::PDA)
-- Device support (memory, camera)
-  (name suggestion: Moped::Dev::Memory, Moped::Dev::Drives, Moped::Dev::Camera)
-- Phone APIs (e.g. how to catch an incoming call: BIO messaging)
-- Remote console (Bluetooth/IR/USB?)
-
diff --git a/symbian/bld.inf b/symbian/bld.inf
deleted file mode 100644 (file)
index c448967..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PRJ_MMPFILES
-PerlApp.mmp
-PerlRecog.mmp
-
diff --git a/symbian/config.pl b/symbian/config.pl
deleted file mode 100644 (file)
index 2671df6..0000000
+++ /dev/null
@@ -1,994 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright (c) 2004-2005 Nokia.  All rights reserved.
-# This utility is licensed under the same terms as Perl itself.
-
-use strict;
-use lib "symbian";
-
-print "Configuring...\n";
-print "Configuring with: Perl version $] ($^X)\n";
-
-do "sanity.pl" or die $@;
-
-my %VERSION = %{ do "version.pl" or die $@ };
-
-printf "Configuring for:  Perl version $VERSION{REVISION}.%03d%03d\n",
-  $VERSION{VERSION}, $VERSION{SUBVERSION};
-
-my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
-my $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
-
-my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
-    @{ do "sdk.pl" or die $@ };
-my %PORT = %{ do "port.pl" or die $@ };
-
-if ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') {
-    ( $SYMBIAN_VERSION, $SDK_VERSION ) = qw(6.1 1.2);
-}
-
-my $WIN = $ENV{WIN} ; # 'wins', 'winscw' (from sdk.pl)
-my $ARM = 'thumb';    # 'thumb', 'armv5'
-my $S60SDK = $ENV{S60SDK}; # qw(1.2 2.0 2.1 2.6) (from sdk.pl)
-    if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
-        $ARM = 'armv5';    # 'thumb', 'armv5' # Configuration for S60 5th Edition SDK v1.0
-    }
-my $S80SDK = $ENV{S80SDK}; # qw(2.0) (from sdk.pl)
-my $S90SDK = $ENV{S90SDK}; # qw(1.1) (from sdk.pl)
-my $UIQSDK = $ENV{UIQSDK}; # qw(2.0 2.1) (from sdk.pl)
-
-my $UREL = $ENV{UREL}; # from sdk.pl
-$UREL =~ s/-ARM-/$ARM/;
-my $UARM = $ENV{UARM}; # from sdk.pl
-
-die "$0: SDK not recognized\n"
-  if !defined($SYMBIAN_VERSION) ||
-     !defined($SDK_VERSION) ||
-     (!defined($S60SDK) && !defined($S80SDK) && !defined($S90SDK) && !defined($UIQSDK));
-
-die "$0: does not know which Windows compiler to use\n"
-    unless defined $WIN;
-
-print "Symbian $SYMBIAN_VERSION SDK $SDK_VARIANT $SDK_VERSION ($WIN) installed at $SYMBIAN_ROOT\n";
-
-my $CWD = do "cwd.pl" or die $@;
-print "Build directory $CWD\n";
-
-die "$0: '+' in cwd does not work with Series 60 SDK 1.2\n"
-    if defined $S60SDK && $S60SDK eq '1.2' && $CWD =~ /\+/;
-
-my @unclean;
-my @mmp;
-
-sub create_mmp {
-    my ( $target, $type, @x ) = @_;
-    my $miniperl = $target eq 'miniperl';
-    my $perl     = $target eq 'perl';
-    my $mmp        = "$target.mmp";
-    my $targetpath = $miniperl
-      || $perl ? "TARGETPATH\t\\System\\Apps\\Perl" : "";
-    if ( open( my $fh, '>', $mmp ) ) {
-        print "\t$mmp\n";
-        push @mmp,     $mmp;
-        push @unclean, $mmp;
-        print $fh <<__EOF__;
-TARGET         $target.$type
-TARGETTYPE     $type
-__EOF__
-        if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
-            print $fh "UID\t0 0xEA3E9181\n" if $miniperl;
-            print $fh "UID\t0 0xED04DD86\n" if $perl;
-            print $fh "UID\t0x1000008d 0xE8667302\n" unless $miniperl || $perl; 
-            print $fh "CAPABILITY\tNONE\n";
-        } else {
-            print $targetpath; 
-            print $fh "EPOCHEAPSIZE\t1024 8388608"; 
-            print $fh "EPOCSTACKSIZE\t65536"; 
-        }
-        print $fh <<__EOF__;
-EXPORTUNFROZEN
-SRCDBG
-__EOF__
-        if ($SDK_VARIANT eq 'S60') {
-            print $fh "MACRO\t__SERIES60__\n";
-            print $fh "MACRO\t__SERIES60_1X__\n" if $S60SDK =~ /^1\./;
-            print $fh "MACRO\t__SERIES60_2X__\n" if $S60SDK =~ /^2\./;
-            print $fh "MACRO\t__SERIES60_3X__\n" if $S60SDK =~ /^5\./; 
-       }
-        if ($SDK_VARIANT eq 'S80') {
-           print $fh "MACRO\t__SERIES80__\n";
-           print $fh "MACRO\t__SERIES80_1X__\n" if $S80SDK =~ /^1\./;
-           print $fh "MACRO\t__SERIES80_2X__\n" if $S80SDK =~ /^2\./;
-       }
-        if ($SDK_VARIANT eq 'S90') {
-           print $fh "MACRO\t__SERIES90__\n";
-       }
-        if ($SDK_VARIANT eq 'UIQ') {
-           print $fh "MACRO\t__UIQ__\n";
-           print $fh "MACRO\t__UIQ_1X__\n" if $UIQSDK =~ /^1\./;
-           print $fh "MACRO\t__UIQ_2X__\n" if $UIQSDK =~ /^2\./;
-       }
-        my ( @c, %c );
-        @c = map  { glob } qw(*.c);       # Find the .c files.
-        @c = map  { lc } @c;              # Lowercase the names.
-        @c = grep { !/malloc\.c/ } @c;    # Use the system malloc.
-        @c = grep { !/main\.c/ } @c;      # main.c must be explicit.
-        push @c, map { lc } @x;
-        @c = map { s:^\.\./::; $_ } @c;    # Remove the leading ../
-        @c = map { $c{$_}++ } @c;          # Uniquefy.
-        @c = sort keys %c;                 # Beautify.
-
-        for (@c) {
-            print $fh "SOURCE\t\t$_\n";
-        }
-        print $fh <<__EOF__;
-SOURCEPATH     $CWD
-USERINCLUDE    $CWD
-USERINCLUDE    $CWD\\ext\\DynaLoader
-USERINCLUDE    $CWD\\symbian
-SYSTEMINCLUDE  \\epoc32\\include\\libc
-SYSTEMINCLUDE  \\epoc32\\include
-LIBRARY                euser.lib
-LIBRARY                estlib.lib
-LIBRARY                eikcore.lib
-LIBRARY                cone.lib
-LIBRARY                efsrv.lib
-__EOF__
-        if ( $miniperl || $perl || $type eq 'dll' ) {
-            print $fh <<__EOF__;
-LIBRARY                charconv.lib
-LIBRARY                hal.lib
-LIBRARY                estor.lib
-__EOF__
-        }
-       if ($SDK_VARIANT =~ /^S[689]0$/) {
-            print $fh <<__EOF__;
-LIBRARY                commonengine.lib
-__EOF__
-       }
-       if (defined $S60SDK) {
-           print $fh <<__EOF__;
-LIBRARY                avkon.lib
-LIBRARY                commondialogs.lib 
-__EOF__
-        }
-       if ((defined $S80SDK) or (defined $S90SDK)) {
-           print $fh <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                ckndlg.lib
-__EOF__
-        }
-       if (defined $UIQSDK) {
-           print $fh <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                qikctl.lib
-__EOF__
-        }
-        if ( $type eq 'exe' ) {
-            print $fh <<__EOF__;
-STATICLIBRARY  ecrt0.lib
-__EOF__
-        }
-        if ($miniperl) {
-            print $fh <<__EOF__;
-MACRO          PERL_MINIPERL
-__EOF__
-        }
-        if ($perl) {
-            print $fh <<__EOF__;
-MACRO          PERL_PERL
-__EOF__
-        }
-        print $fh <<__EOF__;
-MACRO          PERL_CORE
-MACRO          MULTIPLICITY
-MACRO          PERL_IMPLICIT_CONTEXT
-__EOF__
-        unless ( $miniperl || $perl ) {
-            print $fh <<__EOF__;
-MACRO          PERL_GLOBAL_STRUCT
-MACRO          PERL_GLOBAL_STRUCT_PRIVATE
-__EOF__
-    }
-        unless ($miniperl || $perl ) {
-            if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
-                print $fh "START RESOURCE\tsymbian\\PerlUi.rss\nEND\n";
-            } else {
-                print $fh "RESOURCE\tsymbian\\PerlUi.rss";
-            }
-       }
-        close $fh;
-    }
-    else {
-        warn "$0: failed to open $mmp for writing: $!\n";
-    }
-}
-
-sub create_bld_inf {
-    if ( open( BLD_INF, '>', 'bld.inf' ) ) {
-        print "\tbld.inf\n";
-        push @unclean, "bld.inf";
-        print BLD_INF <<__EOF__;
-PRJ_PLATFORMS
-${WIN} ${ARM}
-PRJ_MMPFILES
-__EOF__
-        for (@mmp) { print BLD_INF $_, "\n" }
-        close BLD_INF;
-    }
-    else {
-        warn "$0: failed to open bld.inf for writing: $!\n";
-    }
-}
-
-my %config;
-
-sub load_config_sh {
-    if ( open( CONFIG_SH, '<', 'symbian/config.sh' ) ) {
-        while (<CONFIG_SH>) {
-            if (/^(\w+)=['"]?(.*?)["']?$/) {
-                my ( $var, $val ) = ( $1, $2 );
-                $val =~ s/x.y.z/$R_V_SV/gi;
-                $val =~ s/thumb/$ARM/gi;
-               $val = "C:$val" if (defined($S90SDK) and ($val =~ /^(\/|\\\\)system[\/\\]/i));
-                $val = "'$SYMBIAN_VERSION'" if $var eq 'osvers';
-                $val = "'$SDK_VERSION'"     if $var eq 'sdkvers';
-                $config{$var} = $val;
-            }
-        }
-        close CONFIG_SH;
-    }
-    else {
-        warn "$0: failed to open symbian\\config.sh for reading: $!\n";
-    }
-}
-
-sub create_config_h {
-    load_config_sh();
-    if ( open( CONFIG_H, '>', 'config.h' ) ) {
-        print "\tconfig.h\n";
-        push @unclean, "config.h";
-        if ( open( CONFIG_H_SH, '<', 'config_h.SH' ) ) {
-            while (<CONFIG_H_SH>) {
-                last if /\#ifndef _config_h_/;
-            }
-            print CONFIG_H <<__EOF__;
-/*
- * Package name      : perl
- * Source directory  : .
- * Configuration time: 
- * Configured by     : 
- * Target system     : symbian
- */
-
-#ifndef _config_h_
-__EOF__
-            while (<CONFIG_H_SH>) {
-                last if /!GROK!THIS/;
-                s/\$(\w+)/exists $config{$1} ? $config{$1} : (warn "$0: config.sh missing '$1'\n", "")/eg;
-                s/^#undef\s+(\S+).+/#undef $1/g;
-                s:\Q/**/::;
-                print CONFIG_H;
-            }
-            close CONFIG_H_SH;
-        }
-        else {
-            warn "$0: failed to open ../config_h.SH for reading: $!\n";
-        }
-        close CONFIG_H;
-    }
-    else {
-        warn "$0: failed to open config.h for writing: $!\n";
-    }
-}
-
-sub create_DynaLoader_cpp {
-    print "\text\\DynaLoader\\DynaLoader.cpp\n";
-    system(
-q[xsubpp ext\DynaLoader\dl_symbian.xs >ext\DynaLoader\DynaLoader.cpp]
-      ) == 0
-      or die "$0: creating DynaLoader.cpp failed: $!\n";
-    push @unclean, 'ext\DynaLoader\DynaLoader.cpp';
-
-}
-
-sub create_symbian_port_h {
-    print "\tsymbian\\symbian_port.h\n";
-    if ( open( SYMBIAN_PORT_H, '>', 'symbian/symbian_port.h' ) ) {
-       my ($sdkmajor, $sdkminor);
-        if ($SDK_VARIANT eq 'S60') {
-           $S60SDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        if ($SDK_VARIANT eq 'S80') {
-           $S80SDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        if ($SDK_VARIANT eq 'S90') {
-           $S90SDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        if ($SDK_VARIANT eq 'UIQ') {
-           $UIQSDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        print SYMBIAN_PORT_H <<__EOF__;
-/* Copyright (c) 2004-2005, Nokia.  All rights reserved. */
-
-#ifndef __symbian_port_h__
-#define __symbian_port_h__
-
-#define PERL_SYMBIANPORT_MAJOR $PORT{dll}->{MAJOR}
-#define PERL_SYMBIANPORT_MINOR $PORT{dll}->{MINOR}
-#define PERL_SYMBIANPORT_PATCH $PORT{dll}->{PATCH}
-
-#define PERL_SYMBIANSDK_FLAVOR L"$SDK_VARIANT"
-#define PERL_SYMBIANSDK_MAJOR  $sdkmajor
-#define PERL_SYMBIANSDK_MINOR  $sdkminor
-
-#endif /* #ifndef __symbian_port_h__ */
-__EOF__
-        close(SYMBIAN_PORT_H);
-       push @unclean, 'symbian\symbian_port.h';
-    }
-    else {
-        warn "$0: failed to open symbian/symbian_port.h for writing: $!\n";
-    }
-}
-
-sub create_perlmain_c {
-    print "\tperlmain.c\n";
-    system(
-q[perl -ne "print qq[    char *file = __FILE__;\n] if /dXSUB_SYS/;print unless /PERL_UNUSED_CONTEXT/;print qq[    newXS(\"DynaLoader::boot_DynaLoader\", boot_DynaLoader, file);\n] if /dXSUB_SYS/;print qq[EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);\n] if /Do not delete this line/" miniperlmain.c > perlmain.c]
-      ) == 0
-      or die "$0: Creating perlmain.c failed: $!\n";
-    push @unclean, 'perlmain.c';
-}
-
-sub create_PerlApp_pkg {
-    print "\tsymbian\\PerlApp.pkg\n";
-    if ( open( PERLAPP_PKG, '>', 'symbian\\PerlApp.pkg' ) ) {
-       my $ProductId =
-           defined $S60SDK ?
-qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
-            defined $S80SDK ?
-qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
-            defined $S90SDK ?
-qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] :
-            defined $UIQSDK && $SDK_VERSION =~  /^(\d)\.(\d)$/ ?
-qq[;Supports UIQ v2.1\n(0x101F617B), $1, $2, 0, {"UIQ21ProductID"}\n] :
-            ";Supports Series NN";
-       my $APPS = $UREL;
-       if (($SDK_VARIANT eq 'S60' && $SDK_VERSION ne '1.2' || $WIN eq 'winscw') || defined $S80SDK || defined $S90SDK) { # Do only if not in S60 1.2 VC.
-           $APPS =~ s!\\epoc32\\release\\(.+)\\$UARM$!\\epoc32\\data\\z\\system\\apps\\PerlApp!i;
-       }
-       # TODO: in S60 3.0 there will be no more recognizers.
-       my $mdl = qq["$UREL\\PerlRecog.mdl"-"!:\\system\\recogs\\PerlRecog.mdl";];
-       my $AIF = $SDK_VARIANT =~ /^S[689]0/ ? qq["$APPS\\PerlApp.aif"-"!:\\system\\apps\\PerlApp\\PerlApp.aif"] : "";
-        print PERLAPP_PKG <<__EOF__;
-; !!!!!!   DO NOT EDIT THIS FILE   !!!!!!
-; This file is built by symbian\\config.pl.
-; Any changes made here will be lost!
-;
-; PerlApp.pkg
-;
-; Note that the demo_pl needs to be run to create the demo .pl scripts.
-;
-; Languages
-&EN;
-
-; Standard SIS file header
-#{"PerlApp"},(0x102015F6),0,2,0
-
-$ProductId
-
-; Files
-"$UREL\\PerlApp.APP"-"!:\\system\\apps\\PerlApp\\PerlApp.app"
-$mdl
-"$APPS\\PerlApp.rsc"-"!:\\system\\apps\\PerlApp\\PerlApp.rsc"
-$AIF
-__EOF__
-        if ( open( DEMOS, '-|', "perl symbian\\demo_pl list" ) ) {
-            while (<DEMOS>) {
-                chomp;
-               if (defined $S90SDK) {
-                    print PERLAPP_PKG qq["$_"-"!:\\Mydocs\\Perl\\$_"\n];
-               } else {
-                    print PERLAPP_PKG qq["$_"-"!:\\Perl\\$_"\n];
-               }
-            }
-            close(DEMOS);
-        }
-        close(PERLAPP_PKG);
-    }
-    else {
-        die "$0: symbian\\PerlApp.pkg: $!\n";
-    }
-    push @unclean, 'symbian\PerlApp.pkg';
-}
-
-print "Creating...\n";
-create_mmp(
-    'miniperl',             'exe',
-    'miniperlmain.c',       'symbian\symbian_stubs.c',
-    'symbian\PerlBase.cpp',
-    'symbian\PerlUi.cpp',
-    'symbian\PerlUtil.cpp',
-    'symbian\symbian_utils.cpp',
-);
-create_mmp(
-    "perl",                      'exe',
-    'perlmain.c',                'symbian\symbian_stubs.c',
-    'symbian\symbian_utils.cpp',
-    'symbian\PerlBase.cpp',
-    'symbian\PerlUi.cpp',
-    'symbian\PerlUtil.cpp',
-    'ext\DynaLoader\DynaLoader.cpp',
-);
-
-create_mmp(
-    "perl$VERSION",              'dll',
-    'symbian\symbian_dll.cpp',   'symbian\symbian_stubs.c',
-    'symbian\symbian_utils.cpp',
-    'symbian\PerlBase.cpp',
-    'symbian\PerlUi.cpp',
-    'symbian\PerlUtil.cpp',
-    'ext\DynaLoader\DynaLoader.cpp',
-);
-
-create_bld_inf();
-create_config_h();
-create_perlmain_c();
-create_symbian_port_h();
-create_DynaLoader_cpp();
-create_PerlApp_pkg();
-
-if ( open( PERLAPP_MMP, '>', 'symbian/PerlApp.mmp' ) ) {
-    my @MACRO;
-    my @LIB;
-    push @MACRO, 'PERL_IMPLICIT_CONTEXT';
-    push @MACRO, 'MULTIPLICITY';
-    if (defined $S60SDK) {
-        push @MACRO, '__SERIES60__';
-        push @MACRO, '__SERIES60_1X__' if $S60SDK =~ /^1\./;
-        push @MACRO, '__SERIES60_2X__' if $S60SDK =~ /^2\./;
-       push @LIB, <<__EOF__;
-LIBRARY                avkon.lib
-LIBRARY                commondialogs.lib 
-__EOF__
-    }
-    if (defined $S80SDK) {
-        push @MACRO, '__SERIES80__';
-        push @MACRO, '__SERIES80_1X__' if $S80SDK =~ /^1\./;
-        push @MACRO, '__SERIES80_2X__' if $S80SDK =~ /^2\./;
-       push @LIB, <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                ckndlg.lib
-__EOF__
-    }
-    if (defined $S90SDK) {
-        push @MACRO, '__SERIES90__';
-       push @LIB, <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                ckndlg.lib
-__EOF__
-    }
-    if (defined $UIQSDK) {
-        push @MACRO, '__UIQ__';
-        push @MACRO, '__UIQ_1X__' if $UIQSDK =~ /^1\./;
-        push @MACRO, '__UIQ_2X__' if $UIQSDK =~ /^2\./;
-       push @LIB, <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                qikctl.lib
-__EOF__
-    }
-    print PERLAPP_MMP <<__EOF__;
-// !!!!!!   DO NOT EDIT THIS FILE   !!!!!!
-// This file is built by symbian\\config.pl.
-// Any changes made here will be lost!
-TARGET            PerlApp.app
-TARGETTYPE        app
-UID               0x100039CE 0x102015F6
-TARGETPATH        \\system\\apps\\PerlApp
-SRCDBG
-EXPORTUNFROZEN
-SOURCEPATH        .
-SOURCE            PerlApp.cpp 
-
-USERINCLUDE       .
-USERINCLUDE       ..
-USERINCLUDE       \\symbian\\perl\\$R_V_SV\\include
-
-SYSTEMINCLUDE     \\epoc32\\include
-SYSTEMINCLUDE     \\epoc32\\include\\libc
-
-LIBRARY           apparc.lib
-LIBRARY           bafl.lib
-LIBRARY           charconv.lib 
-LIBRARY           cone.lib
-LIBRARY           efsrv.lib
-LIBRARY           eikcore.lib
-LIBRARY           estlib.lib 
-LIBRARY           euser.lib
-LIBRARY           perl$VERSION.lib
-@LIB
-RESOURCE          perlapp.rss
-__EOF__
-    if (@MACRO) {
-       for my $macro (@MACRO) {
-           print PERLAPP_MMP <<__EOF__;
-MACRO             $macro
-__EOF__
-        }
-    }
-    if ($SDK_VARIANT =~ /^S[689]0$/) {
-        print PERLAPP_MMP <<__EOF__;
-AIF               PerlApp.aif . PerlAppAif.rss 
-__EOF__
-    }
-    close(PERLAPP_MMP);
-    push @unclean, 'symbian\PerlApp.mmp';
-}
-else {
-    warn "$0: failed to create symbian\\PerlApp.mmp";
-}
-
-if ( open( MAKEFILE, '>', 'Makefile' ) ) {
-    my $perl = "perl$VERSION";
-    my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$WIN\\$perl.def";
-    my $windef2 = "..\\BWINS\\${perl}u.def";
-    my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$ARM\\$perl.def";
-    my $armdef2 = "..\\BMARM\\${perl}u.def";
-    my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN";
-    print "\tMakefile\n";
-    print MAKEFILE <<__EOF__;
-help:
-       \@echo === Perl for Symbian ===
-       \@echo Useful targets:
-       \@echo all win arm clean
-       \@echo perldll.sis perlext.sis perlsdk.zip
-
-WIN    = ${WIN}
-ARM    = ${ARM}
-
-all:   build
-
-build: rename_makedef build_${WIN} build_arm
-
-@unclean: symbian\\config.pl
-       perl symbian\\config.pl
-
-build_${WIN}:  abld.bat perldll_${WIN}
-
-build_vc6:     abld.bat perldll_wins
-
-build_vc7:     abld.bat perldll_wins
-
-build_cw:      abld.bat perldll_winscw
-
-build_arm:     abld.bat perl_arm miniperl_arm perldll_arm
-
-miniperl_win miniperl_${WIN}:  miniperl.mmp abld.bat rename_makedef
-       abld build ${WIN} udeb miniperl
-
-miniperl_arm:  miniperl.mmp abld.bat rename_makedef
-       abld build \$(ARM) $UARM miniperl
-
-miniperl:      miniperl_${WIN} miniperl_arm
-
-perl:  perl_${WIN} perl_arm
-
-perl_win perl_${WIN}:  perl.mmp abld.bat rename_makedef
-       abld build ${WIN} perl
-
-perl_arm:      perl.mmp abld.bat rename_makedef
-       abld build \$(ARM) $UARM perl
-
-perldll_win perldll_${WIN}: perl${VERSION}_${WIN} freeze_${WIN} perl${VERSION}_${WIN}
-
-perl${VERSION}_win perl${VERSION}_${WIN}:      perl$VERSION.mmp abld.bat rename_makedef
-       abld build ${WIN} perl$VERSION
-
-perldll_arm: perl${VERSION}_arm freeze_arm perl${VERSION}_arm
-
-perl${VERSION}_arm:    perl$VERSION.mmp abld.bat rename_makedef
-       abld build \$(ARM) $UARM perl$VERSION
-
-perldll perl$VERSION:  perldll_${WIN} perldll_arm
-
-win ${WIN}:    miniperl_${WIN} perl_${WIN} perldll_${WIN}
-
-thumb arm:     miniperl_arm perl_arm perldll_arm
-
-rename_makedef:
-       -ren makedef.pl nomakedef.pl
-
-# Symbian SDK has a makedef.pl of its own,
-# and we don't need Perl's.
-rerename_makedef:
-       -ren nomakedef.pl makedef.pl
-
-symbian\\PerlUi.rss: symbian\\PerlUi$SDK_VARIANT.rss
-       copy symbian\\PerlUi$SDK_VARIANT.rss symbian\\PerlUi.rss
-
-abld.bat abld: bld.inf symbian\\PerlUi.rss
-       bldmake bldfiles
-
-vc6:   win.mf vc6.mf build_vc6
-
-vc7:   win.mf vc7.mf build_vc7
-
-cw:    win.mf cw.mf build_cw
-
-${WIN}_miniperl.mf: abld.bat symbian\\config.pl
-       abld makefile ${MF} miniperl
-       echo > ${WIN}_miniperl.mf
-
-${WIN}_perl.mf: abld.bat symbian\\config.pl
-       abld makefile ${MF} perl
-       echo > ${WIN}_perl.mf
-
-${WIN}_${VERSION}.mf: abld.bat symbian\\config.pl
-       abld makefile ${MF} perl${VERSION}
-       echo > ${WIN}_${VERSION}.mf
-
-symbian\\${WIN}.mf:
-       cd symbian; make ${WIN}.mf
-
-${WIN}.mf: ${WIN}_miniperl.mf ${WIN}_perl.mf ${WIN}_${VERSION}.mf symbian\\${WIN}.mf
-
-arm_miniperl.mf: abld.bat symbian\\config.pl
-       echo > arm_miniperl.mf
-
-arm_perl.mf: abld.bat symbian\\config.pl
-       echo > arm_perl.mf
-
-arm_${VERSION}.mf: abld.bat symbian\\config.pl
-       echo > arm_${VERSION}.mf
-
-arm.mf: arm_miniperl.mf arm_perl.mf arm_${VERSION}.mf
-
-win.mf:  vc6.mf cw.mf
-       echo > win.mf
-
-vc6.mf: abld.bat symbian\\config.pl
-       abld makefile vc6
-       echo > vc6.mf
-
-vc7.mf: abld.bat symbian\\config.pl
-       abld makefile vc7
-       echo > vc7.mf
-
-cw.mf: abld.bat symbian\\config.pl
-       abld makefile cw_ide
-       echo > cw.mf
-
-PM  = lib\\Config.pm lib\\Cross.pm lib\\lib.pm ext\\DynaLoader\\DynaLoader.pm ext\\DynaLoader\\XSLoader.pm ext\\Errno\\Errno.pm
-POD = lib\\Config.pod
-
-pm:    \$(PM)
-
-XLIB   = -Ixlib\\symbian
-
-XSBOPT = --win=\$(WIN) --arm=\$(ARM)
-
-lib\\Config.pm:
-       copy symbian\\config.sh config.sh
-__EOF__
-    if (defined $S90SDK) {
-        print MAKEFILE <<__EOF__;
-       perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g; s!='(\\\\\\\\system)!='C:\\1!" config.sh
-__EOF__
-    } else {
-        print MAKEFILE <<__EOF__;
-       perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g" config.sh
-__EOF__
-    };
-    print MAKEFILE <<__EOF__;
-       perl \$(XLIB) configpm --cross=symbian
-       copy xlib\\symbian\\Config.pm lib\\Config.pm
-       perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" lib\\Config.pm
-       perl -pi.bak -e "s:5\\.\\d+\\.\\d+:$R_V_SV:g" lib\\Config.pm
-       -perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" xlib\\symbian\\Config_heavy.pl
-
-lib\\lib.pm:
-       perl lib\\lib_pm.PL
-
-ext\\DynaLoader\\DynaLoader.pm:
-       -del /f ext\\DynaLoader\\DynaLoader.pm
-       perl -Ixlib\\symbian ext\\DynaLoader\\DynaLoader_pm.PL
-       perl -pi.bak -e "s/__END__//" DynaLoader.pm
-       copy /y DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm
-       -del /f DynaLoader.pm DynaLoader.pm.bak
-
-ext\\DynaLoader\\XSLoader.pm:
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) XSLoader
-
-ext\\Errno\\Errno.pm:
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) Errno
-
-miniperlexe.sis:       miniperl_arm symbian\\makesis.pl
-       perl \$(XLIB) symbian\\makesis.pl miniperl
-
-perlexe.sis:   perl_arm symbian\\makesis.pl
-       perl \$(XLIB) symbian\\makesis.pl perl
-
-
-allsis: all miniperlexe.sis perlexe.sis perldll.sis perllib.sis perlext.sis perlapp.sis
-
-perldll.sis perl$VERSION.sis:  perldll_arm pm symbian\\makesis.pl
-       perl \$(XLIB) symbian\\makesis.pl perl${VERSION}dll
-
-perl${VERSION}lib.sis perllib.sis:     \$(PM)
-       perl \$(XLIB) symbian\\makesis.pl perl${VERSION}lib
-
-perl${VERSION}ext.sis perlext.sis:     perldll_arm buildext_sis
-       perl symbian\\makesis.pl perl${VERSION}ext
-
-EXT =  Compress::Raw::Zlib Cwd Data::Dumper Devel::Peek Digest::MD5 Errno Fcntl File::Glob Filter::Util::Call IO List::Util MIME::Base64 PerlIO::scalar PerlIO::via SDBM_File Socket Storable Time::HiRes XSLoader attributes
-
-buildext: perldll symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) \$(EXT)
-
-buildextcpp: perldll symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) \$(EXT)
-
-buildext_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --sis \$(EXT)
-
-buildextcpp_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) --sis \$(EXT)
-
-cleanext: symbian\\xsbuild.pl
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT)
-
-distcleanext: symbian\\xsbuild.pl
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT)
-
-sis makesis:   miniperl perl perldll pm buildext perlapp.sis
-       perl \$(XLIB) symbian\\makesis.pl
-
-APIDIR = \\Symbian\\perl\\$R_V_SV
-
-sdkinstall:
-       -mkdir \\Symbian\\perl
-       -mkdir \\Symbian\\perl\\$R_V_SV
-       -mkdir \$(APIDIR)\\include
-       -mkdir \$(APIDIR)\\include\\symbian
-       -mkdir \$(APIDIR)\\lib
-       -mkdir \$(APIDIR)\\lib\\ExtUtils
-       -mkdir \$(APIDIR)\\pod
-       -mkdir \$(APIDIR)\\bin
-       -mkdir \$(BINDIR)
-       copy /y *.h   \$(APIDIR)\\include
-       -copy /y *.inc \$(APIDIR)\\include
-       copy /y lib\\ExtUtils\\xsubpp  \$(APIDIR)\\lib\\ExtUtils
-       copy /y lib\\ExtUtils\\typemap \$(APIDIR)\\lib\\ExtUtils
-       copy /y lib\\ExtUtils\\ParseXS.pm \$(APIDIR)\\lib\\ExtUtils
-       copy /y symbian\\xsbuild.pl    \$(APIDIR)\\bin
-       copy /y symbian\\sisify.pl     \$(APIDIR)\\bin
-       copy /y symbian\\PerlBase.h    \$(APIDIR)\\include
-       copy /y symbian\\PerlUi.h      \$(APIDIR)\\include
-       copy /y symbian\\PerlUtil.h    \$(APIDIR)\\include
-       copy /y symbian\\symbian*.h    \$(APIDIR)\\include\\symbian
-       copy /y symbian\\PerlBase.pod  \$(APIDIR)\\pod
-       copy /y symbian\\PerlUtil.pod  \$(APIDIR)\\pod
-
-RELDIR  = $SYMBIAN_ROOT\\epoc32\\release
-RELWIN = \$(RELDIR)\\\$(WIN)\\udeb
-RELARM = \$(RELDIR)\\\$(ARM)\\$UARM
-SDKZIP = perl${VERSION}sdk.zip
-
-
-\$(SDKZIP) perlsdk.zip: perldll sdkinstall
-       -del /f perl${VERSION}sdk.zip
-       zip -r perl${VERSION}sdk.zip \$(RELWIN)\\perl$VERSION.* \$(RELARM)\\perl$VERSION.* \$(APIDIR)
-       \@echo perl${VERSION}sdk.zip created.
-
-PERLSIS = perl${VERSION}.SIS perl${VERSION}lib.SIS perl${VERSION}ext.SIS
-ALLSIS  = \$(PERLSIS) perlapp.sis
-ETC     = README.symbian symbian\\PerlBase.pod symbian\\PerlUtil.pod symbian\\sisify.pl symbian\\TODO
-
-perl${VERSION}dist.zip perldist.zip: \$(ALLSIS) \$(SDKZIP) \$(ETC)
-       -del /f perl${VERSION}dist.zip
-       zip -r perl${VERSION}dist.zip \$(ALLSIS) \$(SDKZIP) \$(ETC)
-
-perlapp:       sdkinstall perlapp_${WIN} perlapp_arm
-
-perlapp_arm_minimal sisify_hex perlappmin.hex perlrscmin.hex:  sdkinstall config.h
-       cd symbian; make perlapp_arm USERDEFS=-DCreatePerlAppMinimal
-       perl symbian\\hexdump.pl
-
-perlapp_win perlapp_${WIN}: config.h
-       cd symbian; make perlapp_${WIN}
-
-perlapp_arm: config.h
-       cd symbian; make perlapp_arm
-
-perlapp_arm_clean:
-       cd symbian; make clean
-
-perlapp_demo_extract:
-       cd symbian; make perlapp_demo_extract
-
-perlapp.sis: perlapp_arm
-       cd symbian; make perlapp.sis
-
-perlapp.zip:
-       cd symbian; zip perlapp.zip PerlApp.* PerlRecog.* PerlBase.* PerlUtil.* demo_pl
-
-zip:   perlsdk.zip perlapp.zip
-
-freeze:        freeze_${WIN} freeze_arm
-
-freeze_${WIN}:
-       abld freeze ${WIN} perl$VERSION
-
-freeze_arm:
-       abld freeze \$(ARM) perl$VERSION
-
-defrost:       defrost_${WIN} defrost_arm
-
-defrost_${WIN}:
-       -del /f $windef1
-       -del /f $windef2
-
-defrost_arm:
-       -del /f $armdef1
-       -del /f $armdef2
-
-clean_${WIN}: abld.bat
-       abld clean ${WIN}
-
-clean_arm: abld.bat
-       abld clean \$(ARM)
-
-clean: clean_${WIN} clean_arm rerename_makedef
-       -del /f \$(PM)
-       -del /f \$(POD)
-       -del /f lib\\Config.pm.bak
-       -del /f xlib\\symbian\\Config_heavy.pl
-       -rmdir /s /q xlib
-       -del /f config.sh
-       -del /f DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm
-       -del /f ext\\DynaLoader\\Makefile
-       -del /f ext\\SDBM_File\\sdbm\\Makefile
-       -del /f symbian\\*.lst
-       -del /f abld.bat @unclean *.pkg *.sis *.zip
-       -del /f symbian\\abld.bat symbian\\*.sis symbian\\*.zip
-       -del /f symbian\\perl5*.pkg symbian\\miniperl.pkg
-       -del arm_*.mf ${WIN}_*.mf vc*.mf cw*.mf
-       -del symbian\\Makefile
-       -del symbian\\PerlUi.rss symbian\\PerlApp.rss
-       -del perlappmin.hex perlrscmin.hex
-       -perl symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT)
-       -rmdir /s /q perl${VERSION}_Data
-       -cd symbian; make clean
-
-reallyclean: abld.bat
-       abld reallyclean
-
-distclean: defrost reallyclean clean
-       -perl symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT)
-       -del /f config.h config.sh.bak symbian\\symbian_port.h
-       -del /f Makefile symbian\\PerlApp.mmp
-       -del /f BMARM\\*.def
-       -del /f *.cwlink *.resources *.pref
-       -del /f perl${VERSION}.xml perl${VERSION}.mcp uid.cpp
-       -rmdir /s /q BMARM
-       cd symbian; make distclean
-       -del /f symbian\\Makefile
-__EOF__
-    close MAKEFILE;
-}
-else {
-    warn "$0: failed to create Makefile: $!\n";
-}
-
-if ( open( MAKEFILE, '>', 'symbian/Makefile')) {
-    my $wrap = defined $S60SDK && $S60SDK eq '1.2' && $WIN ne '${WIN}cw';
-    my $ABLD = $wrap ? 'perl b.pl': 'abld';
-    print "\tsymbian/Makefile\n";
-    my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN";
-    print MAKEFILE <<__EOF__;
-WIN = $WIN
-ARM = $ARM
-ABLD = $ABLD
-MF = $MF
-
-abld.bat:
-       bldmake bldfiles
-
-perlapp_${WIN}: abld.bat ..\\config.h PerlApp.h PerlApp.cpp
-       copy PerlUi$SDK_VARIANT.rss PerlApp.rss
-       bldmake bldfiles
-       \$(ABLD) build ${WIN} udeb
-
-perlapp_arm: ..\\config.h PerlApp.h PerlApp.cpp
-       copy PerlUi$SDK_VARIANT.rss PerlApp.rss
-       bldmake bldfiles
-       \$(ABLD) build ${ARM} $UARM
-
-$MF:
-       abld makefile $MF
-
-win.mf:
-       bldmake bldfiles
-       abld makefile $MF
-
-perlapp_demo_extract:
-       perl demo_pl extract
-
-perlapp.sis: perlapp_arm perlapp_demo_extract
-       -del /f perlapp.SIS
-       makesis perlapp.pkg
-       copy /y perlapp.SIS ..\\perlapp.SIS
-
-clean:
-       -perl demo_pl cleanup
-       -del /f perlapp.sis
-       -del /f b.pl
-       -del PerlApp.rss
-       abld clean $WIN
-       abld clean thumb
-       -del Makefile
-
-distclean: clean
-       -del /f *.cwlink *.resources *.pref
-       -del /f PerlApp.xml PerlApp.mcp uid.cpp
-       -rmdir /s /q PerlApp_Data
-       -del /f abld.bat
-__EOF__
-    close(MAKEFILE);
-    if ($wrap) {
-       if ( open( B_PL, '>', 'symbian/b.pl')) {
-           print B_PL <<'__EOF__';
-# abld.pl wrapper.
-
-# nmake doesn't like MFLAGS and MAKEFLAGS being set to -w and w.
-delete $ENV{MFLAGS};
-delete $ENV{MAKEFLAGS};
-
-system("abld @ARGV");
-__EOF__
-           close(B_PL);
-       } else {
-           warn "$0: failed to create symbian/b.pl: $!\n";
-       }
-    }
-} else {
-    warn "$0: failed to create symbian/Makefile: $!\n";
-}
-
-print "Deleting...\n";
-for my $config (
-               # Do not delete config.h here.
-               "config.sh",
-               "lib\\Config.pm",
-               "xlib\\symbian\\Config.pm",
-               "xlib\\symbian\\Config_heavy.pl",
-               "symbian\\PerlUi.rss",
-               "symbian\\PerlApp.rss",
-               ) {
-    print "\t$config\n";
-    unlink($config);
-}
-
-print <<__EOM__;
-Configuring done.
-Now you can run:
-    make all
-    make allsis
-__EOM__
-
-1;    # Happy End.
diff --git a/symbian/config.sh b/symbian/config.sh
deleted file mode 100644 (file)
index b5260d7..0000000
+++ /dev/null
@@ -1,961 +0,0 @@
-#!\\bin\\sh
-Author=''
-_a='.a'
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-aphostname='localhost'
-apiversion='5.005'
-ar=':'
-archlib='\\system\\libs\\perl\\x.y.z\\thumb-symbian'
-archlibexp='\\system\\libs\\perl\\x.y.z\\thumb-symbian'
-archname='thumb-symbian'
-asctime_r_proto='0'
-bin='\\system\\apps\\perl'
-bincompat5005='n'
-binexp='\\system\\apps\\perl'
-bootstrap_charset='undef'
-byteorder='1234'
-castflags='0'
-cc='gcc'
-cccdlflags=''
-ccdlflags=''
-cf_by='root@localhost'
-cf_time='Thu Jan  1 00:00:00 GMT 1970'
-charbits='8'
-clocktype='clock_t'
-cpp_stuff='42'
-cpplast=''
-cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
-crypt_r_proto='0'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEUldbl='undef'
-d_PRIFUldbl='undef'
-d_PRIGUldbl='undef'
-d_PRIXU64='undef'
-d_PRId64='undef'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='undef'
-d_PRIo64='undef'
-d_PRIu64='undef'
-d_PRIx64='undef'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_accept4='undef'
-d_access='undef'
-d_accessx='undef'
-d_acosh='undef'
-d_aintl='undef'
-d_alarm='undef'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_asinh='undef'
-d_atanh='undef'
-d_atolf='undef'
-d_atoll='undef'
-d_attribute_always_inline='undef'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_backtrace='undef'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_add_overflow='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_builtin_mul_overflow='undef'
-d_builtin_sub_overflow='undef'
-d_c99_variadic_macros='undef'
-d_casti32='undef'
-d_castneg='undef'
-d_cbrt='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='undef'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='undef'
-d_cmsghdr_s='undef'
-d_copysign='undef'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='undef'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='undef'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='undef'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dladdr='undef'
-d_dlerror='undef'
-d_dlopen='undef'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_double_has_inf='define'
-d_double_has_nan='define'
-d_double_has_negative_zero='define'
-d_double_has_subnormals='define'
-d_double_style_cray='undef'
-d_double_style_ibm='undef'
-d_double_style_ieee='define'
-d_double_style_vax='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='undef'
-d_dup3='undef'
-d_duplocale='undef'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_eofnblk='undef'
-d_erf='undef'
-d_erfc='undef'
-d_eunice='undef'
-d_exp2='undef'
-d_expm1='undef'
-d_faststdio='undef'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchmodat='undef'
-d_fchown='undef'
-d_fcntl='undef'
-d_fcntl_can_lock='undef'
-d_fd_macros='undef'
-d_fd_set='undef'
-d_fdclose='undef'
-d_fdim='undef'
-d_fds_bits='undef'
-d_fegetround='undef'
-d_fgetpos='undef'
-d_finite='undef'
-d_finitel='undef'
-d_flexfnam='define'
-d_flock='undef'
-d_flockproto='undef'
-d_fma='undef'
-d_fmax='undef'
-d_fmin='undef'
-d_fork='undef'
-d_fp_class='undef'
-d_fp_classify='undef'
-d_fp_classl='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpgetround='undef'
-d_fpos64_t='undef'
-d_freelocale='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='undef'
-d_futimes='undef'
-d_futimesat='undef'
-d_gai_strerror='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='undef'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspent='undef'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_hypot='undef'
-d_ilogb='undef'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_ip_mreq='undef'
-d_ip_mreq_source='undef'
-d_ipv6_mreq='undef'
-d_ipv6_mreq_source='undef'
-d_isascii='undef'
-d_isblank='undef'
-d_isfinite='undef'
-d_isfinitel='undef'
-d_isinf='undef'
-d_isinfl='undef'
-d_isless='undef'
-d_isnan='undef'
-d_isnanl='undef'
-d_isnormal='undef'
-d_j0='undef'
-d_j0l='undef'
-d_killpg='undef'
-d_lc_monetary_2008='undef'
-d_lchown='undef'
-d_ldbl_dig='undef'
-d_ldexpl='undef'
-d_lgamma='undef'
-d_lgamma_r='undef'
-d_libm_lib_version='undef'
-d_link='undef'
-d_linkat='undef'
-d_llrint='undef'
-d_llrintl='undef'
-d_llround='undef'
-d_llroundl='undef'
-d_localeconv_l='undef'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='undef'
-d_lockf='undef'
-d_log1p='undef'
-d_log2='undef'
-d_logb='undef'
-d_long_double_style_ieee='undef'
-d_long_double_style_ieee_doubledouble='undef'
-d_long_double_style_ieee_extended='undef'
-d_long_double_style_ieee_std='undef'
-d_long_double_style_vax='undef'
-d_longdbl='undef'
-d_longlong='undef'
-d_lrint='undef'
-d_lrintl='undef'
-d_lround='undef'
-d_lroundl='undef'
-d_lseekproto='undef'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='undef'
-d_mbrlen='undef'
-d_mbrtowc='undef'
-d_mbstowcs='undef'
-d_mbtowc='undef'
-d_memmem='undef'
-d_memrchr='undef'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkostemp='undef'
-d_mkstemp='undef'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='undef'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msg='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgctl='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='undef'
-d_nan='undef'
-d_nanosleep='undef'
-d_ndbm_h_uses_prototypes='undef'
-d_nearbyint='undef'
-d_newlocale='undef'
-d_nextafter='undef'
-d_nexttoward='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='undef'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_openat='undef'
-d_pathconf='undef'
-d_pause='undef'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe2='undef'
-d_pipe='undef'
-d_poll='undef'
-d_portable='undef'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_ptrdiff_t='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='undef'
-d_querylocale='undef'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_regcomp='undef'
-d_remainder='undef'
-d_remquo='undef'
-d_rename='define'
-d_renameat='undef'
-d_rewinddir='define'
-d_rint='undef'
-d_rmdir='define'
-d_round='undef'
-d_sbrkproto='undef'
-d_scalbn='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='undef'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='undef'
-d_setlocale_accepts_any_locale_name='undef'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_siginfo_si_addr='undef'
-d_siginfo_si_band='undef'
-d_siginfo_si_errno='undef'
-d_siginfo_si_pid='undef'
-d_siginfo_si_status='undef'
-d_siginfo_si_uid='undef'
-d_siginfo_si_value='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='undef'
-d_sitearch='define'
-d_sitecustomize='undef'
-d_sitecustomize='undef'
-d_snprintf='undef'
-d_sockaddr_in6='undef'
-d_sockaddr_sa_len='undef'
-d_sockaddr_storage='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_stat='define'
-d_statblks='undef'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_static_inline='undef'
-d_statvfs='undef'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strcoll='undef'
-d_strerror_l='undef'
-d_strerror_r='undef'
-d_strftime='undef'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strnlen='undef'
-d_strtod='define'
-d_strtod_l='undef'
-d_strtol='define'
-d_strtold='undef'
-d_strtold_l='undef'
-d_strtoll='undef'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='undef'
-d_strtouq='undef'
-d_strxfrm='undef'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='undef'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_tgamma='undef'
-d_thread_safe_nl_langinfo_l='undef'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_towlower='undef'
-d_towupper='undef'
-d_trunc='undef'
-d_truncate='undef'
-d_truncl='undef'
-d_ttyname_r='undef'
-d_tzname='undef'
-d_u32align='define'
-d_ualarm='undef'
-d_umask='undef'
-d_uname='undef'
-d_union_semun='undef'
-d_unlinkat='undef'
-d_unordered='undef'
-d_unsetenv='undef'
-d_uselocale='undef'
-d_usleep='define'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='undef'
-d_voidtty=''
-d_vsnprintf='undef'
-d_wait4='undef'
-d_waitpid='undef'
-d_wcrtomb='undef'
-d_wcscmp='undef'
-d_wcstombs='undef'
-d_wcsxfrm='undef'
-d_wctomb='undef'
-d_writev='undef'
-d_xenix='undef'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-default_inc_excludes_dot='undef'
-direntrytype='struct dirent'
-dlext='dll'
-dlsrc='dl_symbian.xs'
-doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
-doublekind='4'
-doublemantbits='52'
-doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f'
-doublesize='8'
-drand01="((rand() & 0x7FFF) / (double) ((unsigned long)1 << 15))"
-drand48_r_proto='0'
-dtrace=''
-eagain='EAGAIN'
-ebcdic='undef'
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-fflushNULL='undef'
-fflushall='undef'
-firstmakefile='makefile'
-fpossize='4'
-fpostype=fpos_t
-freetype=void
-full_ar=':'
-full_csh=':'
-full_sed=':'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype=int
-gmtime_r_proto='0'
-groupstype=int
-h_fcntl='false'
-h_sysfile='true'
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='int64_t'
-i8size='1'
-i8type='char'
-i_arpainet='undef'
-i_bfd='undef'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dlfcn='undef'
-i_execinfo='undef'
-i_fcntl='define'
-i_fenv='undef'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='undef'
-i_mallocmalloc='undef'
-i_mntent='undef'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='define'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='define'
-i_quadmath='undef'
-i_rpcsvcdbm='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stdbool='undef'
-i_stdint='undef'
-i_stdlib='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='define'
-i_unistd='define'
-i_ustat='undef'
-i_utime='undef'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-i_wchar='undef'
-i_wctype='undef'
-i_xlocale='undef'
-ignore_versioned_solibs='y'
-inc_version_list=''
-inc_version_list_init='0'
-installprefix='\\system'
-installprefixexp='\\system'
-installsitearch='\\system\\libs\\perl\\siteperl\\x.y.z\\thumb-symbian'
-installsitelib='\\system\\libs\\perl\\siteperl\\x.y.z'
-installstyle='lib\\perl5'
-installusrbinperl='undef'
-intsize='4'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-ld=':'
-lddlflags=''
-ldflags=''
-lib_ext='.a'
-libc='stdlib'
-libm_lib_version='0'
-libperl='libperl.a'
-localtime_r_proto='0'
-longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
-longdblkind=0
-longdblmantbits='64'
-longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
-longdblsize=8
-longlongsize=8
-longsize='4'
-lseeksize=4
-lseektype=int
-mad='undef'
-make='make'
-malloctype='int*'
-malloctype='void *'
-mmaptype='void *'
-modetype='mode_t'
-modetype=int
-multiarch='undef'
-myarchname='thumb-symbian'
-myuname='symbian'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='const char *'
-netdb_name_type='const char *'
-netdb_net_type='unsigned long'
-nroff='nroff'
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='0'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvmantbits='52'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='symbian'
-osvers='7.0s'
-otherlibdirs=''
-package=''
-path_sep=';'
-perl_static_inline='static'
-phostname='hostname'
-pidtype='int'
-pm_apiversion='5.005'
-privlib='\\system\\libs\\perl\\x.y.z'
-privlibexp='\\system\\libs\\perl\\x.y.z'
-procselfexe=''
-prototype='define'
-ptrsize='4'
-quadkind='4'
-quadtype='int64_t'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='int'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-sGMTIME_max='2147483647'
-sGMTIME_min='0'
-sLOCALTIME_max='2147483647'
-sLOCALTIME_min='0'
-sPRIEUldbl='"llE"'
-sPRIFUldbl='"llF"'
-sPRIGUldbl='"llG"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl=''
-sPRIfldbl=''
-sPRIgldbl=''
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl=''
-sched_yield='sched_yield()'
-scriptdir='\\system\\apps\\perl'
-scriptdirexp='\\system\\apps\\perl'
-sdkvers=''
-seedfunc='srand'
-selectminbits='32'
-selecttype=int
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh=':'
-shmattype='void *'
-shortsize=2
-sig_name_init='0'
-sig_num_init='0'
-sig_size='1'
-signal_t=void
-sitearch='\\system\\libs\\perl\\siteperl\\x.y.z\\thumb-symbian'
-sitearchexp='\\system\\libs\\perl\\siteperl\\x.y.z\\thumb-symbian'
-sitelib='\\system\\libs\\perl\\siteperl\\x.y.z'
-sitelib_stem='\\system\\libs\\perl'
-sitelibexp='\\system\\libs\\perl\\siteperl\\x.y.z'
-siteprefix='\\system'
-siteprefixexp='\\system'
-sizesize=4
-sizetype=size_t
-so='o'
-socksizetype='unsigned int'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype=int
-st_ino_sign='1'
-st_ino_size='4'
-startperl=''
-stdchar=char
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-targetarch='thumb-symbian'
-targetsh=':'
-timetype=time_t
-tmpnam_r_proto='0'
-touch='touch'
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='uint64_t'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype=int
-uquadtype='uint64_t'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecbacktrace='undef'
-usecrosscompile='undef'
-usedevel='undef'
-usedl='undef'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='undef'
-usekernprocpathname='undef'
-uselargefiles='undef'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-usensgetexecutablepath='undef'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usequadmath='undef'
-usereentrant='undef'
-userelocatableinc='undef'
-useshrplib='false'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='n'
-usevfork='false'
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorprefix=''
-vendorprefixexp=''
-version='x.y.z'
-versiononly='undef'
-xs_apiversion='5.008'
-zip=''
-PERL_CONFIG_SH='true'
diff --git a/symbian/cwd.pl b/symbian/cwd.pl
deleted file mode 100644 (file)
index 3ee402b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-use strict;
-use Cwd;
-my $CWD = getcwd();
-$CWD =~ s!^[a-z]:!!i;
-$CWD =~ s!/!\\!g;
-$CWD;
diff --git a/symbian/demo_pl b/symbian/demo_pl
deleted file mode 100644 (file)
index 9759347..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/perl -w
-
-#
-# demo_pl
-#
-# A "self-extracting archive" for some demo scripts.
-#
-# hello                - the classic
-# helloyou     - advanced classic
-# httpget1     - simple sockets
-# httpget2     - simple sockets done complex
-# md5          - core extension
-# time         - system call
-# times                - more system calls
-#
-
-use strict;
-
-unless (@ARGV && $ARGV[0] =~ /^(?:list|extract|cleanup)$/) {
-   die "$0: Usage: $0 [list|extract|cleanup]\n";
-}
-
-my $action = shift;
-my $list    = $action eq 'list';
-my $extract = $action eq 'extract';
-my $cleanup = $action eq 'cleanup';
-
-my $fh;
-while (<DATA>) {
-   if (/^-- (.+\.pl)$/) {
-      if ($cleanup) {
-         print "Deleting $1\n";
-         unlink $1 or warn "$0: $1: $!\n";
-      } elsif ($extract) {
-        defined $fh && close($fh);
-        open($fh, ">", $1) or die "$0: '$1': $!\n";
-        print "Extracting $1\n";
-      } elsif ($list) {
-        print "$1\n";
-      }
-   } else {
-      print $fh $_ if $extract;
-   }
-}
-defined $fh && close($fh);
-exit(0);
-__END__
--- hello.pl
-print "hello world!\n";
--- helloyou.pl
-print "What is your name?\n";
-chomp(my $name = <STDIN>);
-print "Hello, $name!\n";
-print "Amazing fact #1:\n";
-printf "Your name has\n%d character%s!\n",
-       length($name), length($name) == 1 ? "" : "s";
-print "Amazing fact #2:\n";
-printf "Your name is\n%s backwards!\n", scalar reverse $name;
--- httpget1.pl
-print "(Using plain sockets)\n";
-use Socket;
-print "Host? ";
-my $host = <STDIN>;
-chomp($host);
-$host = 'www.nokia.com' unless length $host;
-my $port    = 80;
-my $iaddr   = inet_aton($host)           || die "no host: $host";
-my $paddr   = sockaddr_in($port, $iaddr);
-my $proto   = getprotobyname("tcp");
-socket(S, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";
-connect(S, $paddr)                       || die "connect: $!";
-print "$host:$port:\nConnected.\n";
-select(S); $| = 1; select(STDOUT);
-print S "GET / HTTP/1.0\012\012"         || die "GET /: $!";
-my @line;
-print "Receiving...\n";
-while (my $line = <S>) {
-    push @line, $line; 
-}
-close(S)                                 || die "close: $!";
-printf "Got %d lines.\n", scalar @line;
--- httpget2.pl
-use IO::Socket;
-print "(Using IO::Socket)\n";
-print "Host? ";
-my $host = <STDIN>;
-chomp($host);
-$host = 'www.nokia.com' unless length $host;
-my $port = 80;
-my $remote =
-    IO::Socket::INET->new(Proto    => "tcp",
-                          PeerAddr => $host,
-                          PeerPort => $port);
-print "$host:$port:\nConnected.\n";
-select($remote); $| = 1; select(STDOUT);
-print $remote "GET / HTTP/1.0\012\012" || die "GET /: $!";
-my @line;
-print "Receiving...\n";
-while (my $line = <$remote>) {
-    push @line, $line; 
-}
-close($remote)                         || die "close: $!";
-printf "Got %d lines.\n", scalar @line;
--- md5.pl
-use Digest::MD5 'md5_hex';
-print "(Using Digest::MD5)\nMD5 of 'Perl' is:\n";
-print md5_hex('Perl'), "\n";
--- time.pl
-print "Running in $^O\n";
-print scalar localtime, "\n";
--- times.pl
-use Time::HiRes qw(time sleep);
-print CORE::time(), "\n";
-print "Hires\n";
-print time(), "\n";
-print "Sleep 1.5 s...\n";
-sleep(1.5);
-print time(), "\n";
-print "To one million...\n";
-my $t0 = time();
-print $t0, "\n";
-print "Cpu  ", scalar times(), "\n";
-for(my $i = 0; $i < 1e6; $i++) {}
-print "Cpu  ", scalar times(), "\n";
-my $t1 = time();
-print $t1, "\n";
-print "Wall ", $t1 - $t0, "\n";
-
diff --git a/symbian/ext/Moped/Msg/Msg.mmp b/symbian/ext/Moped/Msg/Msg.mmp
deleted file mode 100644 (file)
index 7736d2a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-LIBRARY                etel.lib gsmbas.lib\r
diff --git a/symbian/ext/Moped/Msg/Msg.pkg b/symbian/ext/Moped/Msg/Msg.pkg
deleted file mode 100644 (file)
index eb7aed0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-; MoDev::Msg installation script\r
-;\r
-; The supported languages\r
-&EN;\r
-;\r
-; The installation name and header data\r
-;\r
-#{"MoDev::Msg"},(0x0FFFFFFF),0,1,0\r
-;\r
-; Platform supported is Series 60\r
-;\r
-(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\r
-; The files to install\r
-;\r
-"Msg.pm"-"!:\System\Libs\Perl\5.9.3\MoDev\Msg.pm"\r
-"\epoc32\release\thumb\urel\Msg.dll"-"!:\System\Libs\Perl\5.9.3\thumb-symbian\Msg.dll"\r
diff --git a/symbian/ext/Moped/Msg/Msg.pm b/symbian/ext/Moped/Msg/Msg.pm
deleted file mode 100644 (file)
index e1aaef8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package Moped::Msg;
-use strict;
-use vars qw(@ISA $VERSION);
-require DynaLoader;
-@ISA = qw(DynaLoader);
-$VERSION = '0.01';
-bootstrap Moped::Msg;
-1;
-
diff --git a/symbian/ext/Moped/Msg/Msg.xs b/symbian/ext/Moped/Msg/Msg.xs
deleted file mode 100644 (file)
index ae47e0a..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <eikenv.h>
-#include <e32std.h>
-
-#include "etelbgsm.h" // From Symbian 6.1 SDK (the Communicator SDK)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include "PerlBase.h"
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#ifdef __cplusplus
-}
-#endif
-
-_LIT(KTsyName, "phonetsy.tsy");
-
-#define XS_SYMBIAN_OR_EMPTY(e, c) errno = (e) = (c); if ((e) != KErrNone) XSRETURN_EMPTY
-
-MODULE = Moped::Msg    PACKAGE = Moped::Msg
-
-PROTOTYPES: ENABLE
-
-extern "C" void
-get_gsm_network_info()
-    PREINIT:
-       TInt                    error;
-       TInt                    enumphone;
-       RTelServer              server;
-       RBasicGsmPhone          phone;
-       RTelServer::TPhoneInfo  info;
-       MBasicGsmPhoneNetwork::TCurrentNetworkInfo networkinfo;
-    PPCODE:
-       if (GIMME != G_ARRAY)
-           XSRETURN_UNDEF;
-       XS_SYMBIAN_OR_EMPTY(error, server.Connect());
-       XS_SYMBIAN_OR_EMPTY(error, server.LoadPhoneModule(KTsyName));
-       XS_SYMBIAN_OR_EMPTY(error, server.EnumeratePhones(enumphone));
-       if (enumphone < 1)
-           XSRETURN_EMPTY;
-       XS_SYMBIAN_OR_EMPTY(error, server.GetPhoneInfo(0, info));
-       XS_SYMBIAN_OR_EMPTY(error, phone.Open(server, info.iName));
-       XS_SYMBIAN_OR_EMPTY(error, phone.GetCurrentNetworkInfo(networkinfo));
-       EXTEND(SP, 4);
-       PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMCC)));
-       PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMNC)));
-       PUSHs(sv_2mortal(newSViv(networkinfo.iLocationAreaCode)));
-       PUSHs(sv_2mortal(newSViv(networkinfo.iCellId)));
-
-
diff --git a/symbian/ext/Moped/Msg/README b/symbian/ext/Moped/Msg/README
deleted file mode 100644 (file)
index 2d31c29..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-NOTE: this is just a sample of how building Symbian specific
-extensions COULD work.  This is most probably far from the best
-or final way of doing things.
-
-The Moped::Msg currently defines just a single static method,
-get_gsm_network_info(), which returns the GSM network and cell id.
-
-The extension code is in Msg.xs (which gets translated by xsubpp into
-Msg.cpp), the Perl glue code is in Msg.pm.  To understand the .xs
-syntax studying perlxstut and perlxs is recommended.
-
-The prerequisites for compiling this extension are:
-
-(1) The Perl for Symbian SDK installed (either done "make sdkinstall",
-    or separately installed the perlXYZsdk.zip).
-
-(2) The etelbgsm.h header, which is available for example from
-    the Symbian 6.1 SDK (the Communicator SDK). This must be
-    copied to ...\epoc32\include.
-
-(3) The etel.lib and the gsmbas.lib, they should come both
-    with the 6.1 and 7.0s SDK.  The WINS udeb and THUMB urel
-    versions of these must be copied to the directories
-    ...\epoc32\release\wins\udeb and ...\epoc32\release\thumb\urel,
-    respectively.
-
-To compile (assuming Perl 5.9.3 and Series 60 SDK 2.6 for Visual C):
-
-  perl \symbian\perl\5.9.3\bin\xsbuild.pl --cpp --extversion=0.1 ext\symbian\Moped\Msg
-
-The --symbian indicates the Symbian and SDK version, the --cplusplus
-indicates that one should generate a .cpp file instead of a .c file.
-
-The xsbuild.pl both configures and builds the extension.
-To clean do "make clean" or "make distclean".
-
-The location.pl demonstrates using the extension.
-
-To create a SIS:
-
-  makesis -d%EPOCROOT% ext\Moped\Msg\Msg.pkg
-
-TODO: automate the determination of the EXTVERSION (from .pkg?)
-and of creation of .pkg (the location of the .dll in the build
-and in the target).
-
-
-
-
diff --git a/symbian/ext/Moped/Msg/bld.inf b/symbian/ext/Moped/Msg/bld.inf
deleted file mode 100644 (file)
index 121a66a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PRJ_MMPFILES\r
-Msg.mmp\r
-PRJ_PLATFORMS\r
-wins thumb\r
diff --git a/symbian/ext/Moped/Msg/location.pl b/symbian/ext/Moped/Msg/location.pl
deleted file mode 100644 (file)
index 50df335..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-use Moped::Msg;
-my ($MCC, $MNC, $LAC, $Cell) =
-  Moped::Msg::get_gsm_network_info();
-print "MCC  = $MCC\n";
-print "MNC  = $MNC\n";
-print "LAC  = $LAC\n";
-print "Cell = $Cell\n";
-
diff --git a/symbian/find_writeable_data.pl b/symbian/find_writeable_data.pl
deleted file mode 100644 (file)
index bdb5790..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/perl -w
-
-#
-# find_writeable_data - find non-const data in Symbian object files
-#
-# Use this when PETRAN tells you "dll has (un)initialised data".
-# Expects to find the Symbian (GNU) nm in the executable path.
-#
-# Copyright (c) 2004-2005 Nokia.  All rights reserved.
-#
-# This utility is licensed under the same terms as Perl itself.
-#
-
-use strict;
-
-BEGIN {
-  unless (exists $ENV{EPOCROOT}) {
-    die "$0: EPOCROOT unset\n";
-  }
-  if (open(my $fh, "nm --version |")) {
-    unless (<$fh> =~ /^GNU nm .*-psion-.*/) {
-      die "$0: Cannot find the GNU nm from Symbian\n";
-    }
-    close($fh);
-  } else {
-      die "$0: Cannot find any nm in the executable path: $!\n";
-  }
-  unless (@ARGV && $ARGV[0] =~ /\.mmp$/i) {
-    die "$0: Must specify target mmp as the first argument\n";
-  }
-}
-
-use Cwd;
-use File::Basename;
-
-my $dir = lc(getcwd());
-my $tgt = basename(shift(@ARGV), ".mmp");
-
-$dir =~ s!/!\\!g;
-$dir =~ s!^c:!c:$ENV{EPOCROOT}epoc32\\build!;
-$dir .= "\\$tgt\\thumb\\urel";
-
-print $dir, "\n";
-
-unless (-d $dir) {
-  die "$0: No directory $dir\n";
-}
-
-my @o = glob("$dir\\*.o");
-
-unless (@o) {
-  die "$0: No objects in $dir\n";
-}
-
-for my $o (@o) {
-  if (open(my $fh, "nm $o |")) {
-    my @d;
-    while (<$fh>) {
-      next if / [TURtr] /;
-      push @d, $_;
-    }
-    close($fh);
-    if (@d) {
-      $o =~ s!^\Q$dir\E\\!!;
-      print "$o:\n";
-      print @d;
-    }
-  } else {
-    warn "$0: nm $o failed: $!\n";
-  }
-} 
-
-exit(0);
diff --git a/symbian/hexdump.pl b/symbian/hexdump.pl
deleted file mode 100644 (file)
index d1741f8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-die "$0: EPOCROOT unset\n" unless exists $ENV{EPOCROOT};
-die "$0: EPOCROOT directory does exists\n" unless -d $ENV{EPOCROOT};
-
-my $EPOC32 = "$ENV{EPOCROOT}epoc32";
-my $EXE = "$EPOC32\\release\\thumb\\urel\\perlapp.app";
-my $RSC = "$EPOC32\\data\\z\\system\\apps\\perlapp\\perlapp.rsc";
-
-use Fcntl qw(O_RDONLY);
-
-my %new = ($EXE => 'perlappmin.hex',
-          $RSC => 'perlrscmin.hex');
-
-for my $fn ($EXE, $RSC) {
-    if (sysopen(my $fh, $fn, O_RDONLY)) {
-       my $buffer;
-       my $size = -s $fn;
-       my $read;
-       my $newfn = $new{$fn};
-       unlink($newfn);
-       if (($read = sysread($fh, $buffer, $size)) == $size) {
-           if (open(my $newfh, '>', $newfn)) {
-               binmode($newfh);
-               print $newfh unpack("H*", $buffer);
-               close($newfh);
-               print "Created $newfn\n";
-           } else {
-               die qq[$0: open ">$newfn" failed: $!\n];
-           }
-       } else {
-           die qq[$0: sysread $size returned $read\n];
-       }
-       close($fh);
-    } else {
-       die qq[$0: sysopen "$fn": $!\n];
-    }
-}
-
diff --git a/symbian/install.cfg b/symbian/install.cfg
deleted file mode 100644 (file)
index 918d300..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-# install.cfg
-#
-# Copyright (c) 2004-2005 Nokia.  All Rights Reserved.
-#
-# This file details what library files to include in the perlXYZlib.sis,
-# and what extensions to build for the perlXYZext.sis.
-# The lines beginning with "lib" are # included as-is from the lib/.
-# The lines beginning with "ext" tell either how to build and package
-# the extensions - or not.
-
-#
-# Libraries.
-#
-lib    AnyDBM_File.pm
-lib    AutoLoader.pm
-lib    base.pm
-lib    Benchmark.pm
-lib    Carp.pm
-lib    Carp/Heavy.pm
-lib    Cwd.pm
-lib    constant.pm
-lib    DBM_Filter.pm
-lib    Digest/base.pm
-lib    DirHandle.pm
-lib    Exporter.pm
-lib    Exporter/Heavy.pm
-lib    File/Basename.pm
-lib    File/Compare.pm
-lib    File/Copy.pm
-lib    File/DosGlob.pm
-lib    File/Find.pm
-lib    File/Path.pm
-lib    File/Spec.pm
-lib    File/Spec/Unix.pm
-lib    File/Spec/Win32.pm
-lib    File/Temp.pm
-lib    FileHandle.pm
-lib    Filter/Simple.pm
-lib    if.pm
-lib    integer.pm
-lib    IO/Zlib.pm
-lib    lib.pm
-lib    Net/Cmd.pm
-lib    Net/Config.pm
-lib    Net/Domain.pm
-lib    Net/FTP.pm
-lib    Net/FTP/A.pm
-lib    Net/FTP/E.pm
-lib    Net/FTP/I.pm
-lib    Net/FTP/L.pm
-lib    Net/FTP/dataconn.pm
-lib    Net/NNTP.pm
-lib    Net/Netrc.pm
-lib    Net/Ping.pm
-lib    Net/POP3.pm
-lib    Net/SMTP.pm
-lib    Net/Time.pm
-lib    NEXT.pm
-lib    overload.pm
-lib    SelectSaver.pm
-lib    strict.pm
-lib    Symbol.pm
-lib    UNIVERSAL.pm
-# lib  utf8.pm
-# lib  utf8_heavy.pl
-lib    vars.pm
-lib    warnings.pm
-lib    warnings/register.pm
-# 
-# Extensions.
-#
-ext    attributes
-ext    Compress/Raw/Zlib       -zlib-src
-ext    Cwd
-ext    Data/Dumper
-ext    Devel/Peek
-ext    Digest/MD5
-ext    Digest/SHA
-ext    Errno
-ext    Fcntl                   CONST
-ext    File/Glob               CONST
-ext    Filter/Util/Call
-ext    Hash/Util
-ext    IO
-ext    List/Util
-ext    Math/BigInt/FastCalc
-ext    MIME/Base64
-ext    PerlIO/scalar
-ext    PerlIO/via
-ext    SDBM_File               -sdbm/db?.c -sdbm/util.c
-ext    Socket                  CONST
-ext    Storable
-ext    Text/Soundex
-ext    Time/HiRes              CONST
-ext    Time/Piece              
-ext    XSLoader
-# ext  B                       ERROR
-# ext  ByteLoader              byterun.c ERROR VERSION
-# ext  Devel/DProf             nonconst
-# ext  Devel/PPPort            PORT
-# ext  Encode                  nonconst Encode/encode.h def_t.c encengine.c
-ext    I18N/Langinfo           PORT
-# ext  IPC/SysV                PORT
-# ext  NDBM_File               PORT
-# ext  ODBM_File               PORT
-# ext  Opcode                  ERROR
-# ext  PerlIO/encoding         Encode
-# ext  POSIX                   CONST USELESS
-# ext  re                      ERROR
-# ext  Sys/Hostname            PORT
-# ext  Sys/Syslog              PORT
-# ext  threads                 PORT
-# ext  threads/shared          PORT
-# ext  Unicode/Normalize       nonconst
-# ext  Unicode/Collate nonconst
-# ext  Win32                   USELESS
-# ext  XS/APItest              USELESS
-# ext  XS/Typemap              nonconst USELESS
-
diff --git a/symbian/makesis.pl b/symbian/makesis.pl
deleted file mode 100644 (file)
index 58199ce..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright (c) 2004-2005 Nokia.  All rights reserved.
-
-use strict;
-use lib "symbian";
-
-do "sanity.pl" or die $@;
-
-my %VERSION = %{ do "version.pl" or die $@ };
-my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
-my $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
-
-my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
-    @{ do "sdk.pl" or die $@ };
-my $UID  = do "uid.pl" or die $@;
-my %PORT = %{ do "port.pl" or die $@ };
-
-my $ARM = 'armv5';#'thumb'; # TODO
-my $S60SDK = $ENV{S60SDK}; # from sdk.pl
-my $S80SDK = $ENV{S80SDK}; # from sdk.pl
-my $S90SDK = $ENV{S90SDK}; # from sdk.pl
-
-my $UREL = $ENV{UREL}; # from sdk.pl
-$UREL =~ s/-ARM-/$ARM/;
-
-my $app = '!:\System\Apps\Perl';
-my $lib = '!:\System\Libs';
-
-my @target = @ARGV
-  ? @ARGV
-  : (
-    "miniperl",          "perl",
-    "perl${VERSION}dll", "perl${VERSION}lib",
-    "perl${VERSION}ext"
-  );
-
-my %suffix;
-@suffix{ "miniperl", "perl", "perl$VERSION" } = ( "exe", "exe", "dll", );
-
-for my $target (@target) {
-    $target = "perl${VERSION}" if $target eq "perl${VERSION}dll";
-
-    my %copy;
-    my $pkg = "$target.pkg";
-    print "\nCreating $pkg...\n";
-
-    my $suffix = $suffix{$target} || "";
-    my $dst = $suffix eq "dll" ? $lib : $app;
-
-    my $srctarget = "$UREL\\$target.$suffix";
-
-    if ( $target =~ /^(miniperl|perl|perl${VERSION}(?:dll)?)$/ ) {
-        $copy{$srctarget} = "$dst\\$target.$suffix";
-        print "\t$target.$suffix\n";
-    }
-    if ( $target eq "perl${VERSION}lib" ) {
-        print "Libraries...\n";
-
-        print "\tConfig.pm\n";
-        $copy{"lib\\Config.pm"} =
-          "$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config.pm";
-
-        print "\tConfig_heavy.pl\n";
-        $copy{"xlib\\symbian\\Config_heavy.pl"} =
-          "$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config_heavy.pl";
-
-        print "\tDynaLoader.pm\n";
-        $copy{"ext\\DynaLoader\\DynaLoader.pm"} =
-          "$lib\\Perl\\$R_V_SV\\DynaLoader.pm";
-
-        print "\tErrno.pm\n";
-        $copy{"ext\\Errno\\Errno.pm"} = "$lib\\Perl\\$R_V_SV\\Errno.pm";
-
-        open( my $cfg, '<', "symbian/install.cfg" )
-          or die "$!: symbian/install.cfg: $!\n";
-        while (<$cfg>) {
-            next unless /^lib\s+(.+)/;
-            chomp;
-            my $f = $1;
-           unless (-f "lib/$f") {
-               warn qq[$0: No "lib/$f", skipping...\n];
-               next;
-           }
-            $f =~ s:/:\\:g;
-            $copy{"lib\\$f"} = "$lib\\Perl\\$R_V_SV\\$f";
-            print "\t$f\n";
-        }
-        close($cfg);
-    }
-
-    if ( $target eq "perl${VERSION}ext" ) {
-        my @lst = glob("symbian/*.lst");
-        print "Extensions...\n";
-        print "\t(none found)\n" unless @lst;
-        for my $lst (@lst) {
-            $lst =~ m:^symbian/(.+)\.:;
-            my $ext = $1;
-            $ext =~ s!-!::!g;
-            print "\t$ext\n";
-            if ( open( my $pkg, '<', $lst ) ) {
-                while (<$pkg>) {
-                    if (m!^"(.+)"-"(.+)"$!) {
-                        my ( $src, $dst ) = ( $1, $2 );
-                        $copy{$src} = $dst;
-                    }
-                    else {
-                        warn "$0: $lst: $.: unknown syntax\n";
-                    }
-                }
-                close($pkg);
-            }
-            else {
-                warn "$0: $lst: $!\n";
-            }
-        }
-    }
-
-    for my $file ( keys %copy ) {
-        warn "$0: $file does not exist\n" unless -f $file;
-    }
-
-    my @copy = map { qq["$_"-"$copy{$_}"] } sort keys %copy;
-    my $copy = join( "\n", @copy );
-
-    my %UID = (
-        "miniperl"          => 0,
-        "perl"              => 0,
-        "perl${VERSION}"    => $UID + 0,
-        "perl${VERSION}dll" => $UID + 0,
-        "perl${VERSION}ext" => $UID + 1,
-        "perl${VERSION}lib" => $UID + 2,
-        "perlapp"           => $UID + 3,
-        "perlrecog"         => $UID + 4,
-        "perlappmin"        => $UID + 5,
-    );
-
-    die "$0: target has no UID\n" unless defined $UID{$target};
-
-    my $uid = sprintf( "0x%08X", $UID{$target} );
-
-    my ( $MAJOR, $MINOR, $PATCH ) = ( 0, 0, 0 );
-
-    if ( $target =~ m:^perl$VERSION(dll|ext|lib)?$: ) {
-        my $pkg = defined $1 ? $1 : "dll";
-        $MAJOR = $PORT{$pkg}->{MAJOR};
-        $MINOR = $PORT{$pkg}->{MINOR};
-        $PATCH = $PORT{$pkg}->{PATCH};
-    }
-
-    die "$0: Bad version for $target\n"
-      unless defined $MAJOR
-      && ( $MAJOR eq 0 || $MAJOR > 0 )
-      && defined $MINOR
-      && ( $MINOR eq 0 || $MINOR > 0 )
-      && defined $PATCH
-      && ( $PATCH eq 0 || $PATCH > 0 );
-
-     my $ProductId =
-         defined $S60SDK ?
-qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
-         defined $S80SDK ?
-qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
-         defined $S90SDK ?
-qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] :
-         ";Supports Series NN";
-
-    open PKG, '>', $pkg or die "$0: failed to create $pkg: $!\n";
-    print PKG <<__EOF__;
-; \u$target installation script
-;
-; The supported languages
-&EN;
-;
-; The installation name and header data
-;
-#{"\u$target"},($uid),$MAJOR,$MINOR,$PATCH
-;
-;Localised Vendor name
-%{"Vendor-EN"}
-;
-; Private key and certificate (unused)
-;
-;* "\u$target.key", "\u$target.cer"
-;
-$ProductId
-; The files to install
-;
-$copy
-__EOF__
-    close PKG;
-
-    print "Created $pkg\n";
-
-    print "Running makesis...\n";
-
-    unlink("$target.sis");
-
-    system("makesis $pkg") == 0
-      || die "$0: makesis $pkg failed: $!\n";
-}
-
-exit(0);
diff --git a/symbian/port.pl b/symbian/port.pl
deleted file mode 100644 (file)
index 599321d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  dll => { MAJOR => 0, MINOR => 4, PATCH => 2 },
-  ext => { MAJOR => 0, MINOR => 4, PATCH => 2 }, 
-  lib => { MAJOR => 0, MINOR => 4, PATCH => 2 }, 
-}
-
diff --git a/symbian/sanity.pl b/symbian/sanity.pl
deleted file mode 100644 (file)
index 6487c57..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-use strict;
-
-if (exists $ENV{'!C:'}) {
-  print "You are running this under Cygwin, aren't you? (found '!C' in %ENV)\n";
-  print "Are you perhaps using Cygwin Perl? (\$^O is '$^O')\n" if $^O =~ /cygwin/;
-  print "I'm sorry but only cmd.exe with e.g. the ActivePerl will work.\n";
-  exit(1);
-}
-
-unless(# S60 2.x
-       $ENV{PATH} =~ m!\\program files\\common files\\symbian\\tools!i
-       ||
-       # S60 1.2
-       $ENV{PATH} =~ m!\\symbian\\6.1\\shared\\epoc32\\tools!i
-       ||
-       # S80
-       $ENV{PATH} =~ m!\\s80_.+?\\epoc32\\!i
-       ||
-       # UIQ
-       $ENV{PATH} =~ m!\\uiq_.+?\\epoc32\\!i
-       ) {
-    print "I do not think you have installed a Symbian SDK, your PATH is:\n$ENV{PATH}\n";
-    exit(1);
-}
-
-unless (-f "symbian/symbianish.h") {
-  print "You must run this in the top level directory.\n";
-  exit(1);
-}
-
-if ($] < 5.008) {
-  print "You must configure with Perl 5.8 or later.\n";
-  exit(1);
-}
-
-1;
diff --git a/symbian/sdk.pl b/symbian/sdk.pl
deleted file mode 100644 (file)
index c8845e8..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-use strict;
-
-my $SYMBIAN_VERSION;
-my $SYMBIAN_ROOT;
-my $SDK_NAME;
-my $SDK_VARIANT;
-my $SDK_VERSION;
-my $WIN;
-
-if ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\(.+?)\\Epoc32\\gcc\\bin!i) {
-    $SYMBIAN_VERSION = $1;
-    $SDK_NAME = $2;
-    $WIN = ($SDK_NAME =~ m!_CW!i || $SDK_NAME eq '8.1a') ?
-       'winscw' : 'wins';
-    $ENV{WIN} = $WIN;
-    if ($SDK_NAME =~ m!Series60_v20!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.0';
-    } elsif ($SDK_NAME =~ m!Series60_v21!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.1';
-    } elsif ($SDK_NAME =~ m!S60_2nd_FP2!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.6';
-    } elsif ($SDK_NAME =~ m!S60_2nd_FP3!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.8';
-    } elsif ($SDK_NAME =~ m!S80_DP2_0_SDK!) {
-       $SDK_VARIANT = 'S80';
-       $SDK_VERSION = $ENV{S80SDK} = '2.0';
-    } elsif ($SDK_NAME =~ m!Nokia_7710_SDK!) {
-       $SDK_VARIANT = 'S90';
-       $SDK_VERSION = $ENV{S90SDK} = '1.1';
-    }
-} elsif ($ENV{PATH} =~ m!\\S60\\devices\\(.+?)\\epoc32\\gcc\\bin!i) {
-       $SDK_VARIANT = 'S60';
-       $SDK_NAME = $1;
-       $WIN = $ENV{WIN} = 'winscw';
-       $SYMBIAN_VERSION = '9.4';
-       $SDK_VERSION = $ENV{S60SDK} = '5.0';
-       $SYMBIAN_ROOT = $ENV{EPOCROOT};
-} elsif ($ENV{PATH} =~ m!\\Symbian\\UIQ_(\d)(\d)\\Epoc32\\gcc\\bin!i) {
-    $SDK_NAME    = 'UIQ';
-    $SDK_VARIANT = 'UIQ';
-    $SDK_VERSION = $ENV{UIQSDK} = "$1.$2";
-    if ($SDK_VERSION =~ /^2\./) {
-       $SYMBIAN_VERSION = '7.0s';
-    } else {
-       die "$0: Unknown UIQ version '$SDK_VERSION'\n";
-    }
-    $WIN = 'winscw'; # This is CodeWarrior, how about Borland?
-    $ENV{WIN} = $WIN;
-}
-
-if (open(GCC, "gcc -v 2>&1 |")) {
-   while (<GCC>) {
-     # print;
-     if (/Reading specs from (.+?)\\Epoc32\\/i) {
-       $SYMBIAN_ROOT = $1;
-       # The S60SDK tells the Series 60 SDK version.
-       if ($ENV{S60SDK}) {
-          if ($SYMBIAN_ROOT eq 'C:\Symbian\6.1\Shared') { # Visual C.
-              $SYMBIAN_ROOT = 'C:\Symbian\6.1\Series60';
-              $SDK_VERSION = $ENV{S60SDK} = '1.2';
-          } elsif ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') { # CodeWarrior.
-              $SDK_VERSION = $ENV{S60SDK} = '1.2';
-          }
-       }
-       last;
-     }
-   }
-   close GCC;
-} else {
-  die "$0: failed to run gcc: $!\n";
-}
-
-die "$0: failed to locate the Symbian SDK\n" unless defined $SYMBIAN_ROOT;
-
-my $UARM = $ENV{UARM} ? $ENV{UARM} : "urel";
-my $UREL = "$SYMBIAN_ROOT\\epoc32\\release\\-ARM-\\$UARM";
-if ($SYMBIAN_ROOT eq 'C:\Symbian\6.1\Series60' && $ENV{WIN} eq 'winscw') {
-    $UREL = "C:\\Symbian\\Series60_1_2_CW\\epoc32\\release\\-ARM-\\urel";
-}
-$ENV{UREL} = $UREL;
-$ENV{UARM} = $UARM;
-
-[ $SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION ];
-
-# The following is a cheat sheet for the right S60/S80 SDK settings.
-#
-# symbiancommon.bat:
-# set EPOC_BIN=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\Tools
-# set MWCW=C:\Program Files\Metrowerks\CodeWarrior for Symbian OEM v2.8
-# set MSVC=C:\Program Files\Microsoft Visual Studio
-# set MSVC_BIN=%MSVC%\VC98\Bin;%MSVC%\Aux\MSDev98\Bin
-# set MSVC_INC=%MSVC%\VC98\atl\include;%MSVC%\VC98\include;%MSVC%\mfc\include;%MSVC%\include
-# set MSVC_LIB=%MSVC%\mfc\lib;%MSVC%\lib
-#
-# Note that if you are using Microsoft Visual Studio 8
-# (for example because you are using the Microsoft Visual C++
-#  2005 Express Edition), the MSVC settings will be different:
-# set MSVC=C:\Program Files\Microsoft Visual Studio 8\VC
-# set MSVC_BIN=%MSVC%\bin
-# set MSVC_INC=%MSVC%\include
-# set MSVC_LIB=%MSVC%\lib
-#
-# s60-1.2-cw:
-#
-# set EPOCROOT=\Symbian\Series60_1_2_CW\
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_12__ -D__SERIES60_MAJOR__=1 -D__SERIES60_MINOR__=2 -D__SERIES60_1X__
-#
-# s60-1.2-vc:
-#
-# set EPOCROOT=\Symbian\6.1\Series60\
-# symbiancommon
-# set PATH=\Symbian\6.1\Shared\Epoc32\gcc\bin;\Symbian\6.1\Shared\Epoc32\Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set INCLUDE=%MSVC_INC%
-# set LIB=%MSVC_LIB%
-# set USERDEFS=%USERDEFS% -D__SERIES60_12__ -D__SERIES60_MAJOR__=1 -D__SERIES60_MINOR__=2 -D__SERIES60_1X__
-#
-# s60-2.0-cw:
-#
-# set EPOCROOT=\Symbian\7.0s\Series60_v20_CW\
-# set EPOCDEVICE=Series60_2_0_CW:com.Nokia.Series60_2_0_CW
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_20__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=0 -D__SERIES60_2X__
-#
-# s60-2.0-vc:
-#
-# set EPOCROOT=\Symbian\7.0s\Series60_v20\
-# set EPOCDEVICE=Series60_v20:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set INCLUDE=%MSVC_INC%
-# set LIB=%MSVC_LIB%
-# set USERDEFS=%USERDEFS% -D__SERIES60_20__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=0 -D__SERIES60_2X__
-#
-# s60-2.1-cw:
-#
-# set EPOCROOT=\Symbian\7.0s\Series60_v21_CW\
-# set EPOCDEVICE=Series60_v21_CW:com.Nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_21__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=1 -D__SERIES60_2X__
-#
-# s60-2.6-cw:
-#
-# set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2_CW\
-# set EPOCDEVICE=S60_2nd_FP2_CW:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_26__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=6 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-2.6-vc:
-#
-# set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2\
-# set EPOCDEVICE=S60_2nd_FP2:com.nokia.Series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set INCLUDE=%MSVC_INC%
-# set LIB=%MSVC_LIB%
-# set USERDEFS=%USERDEFS% -D__SERIES60_26__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=6 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-2.8-cw:
-#
-# set EPOCROOT=\Symbian\8.1a\S60_2nd_FP3\
-# set EPOCDEVICE=S60_2nd_FP3:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_28__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=8 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-2.8-vc:
-#
-# set EPOCROOT=\Symbian\8.1a\S60_2nd_FP3\
-# set EPOCDEVICE=S60_2nd_FP3:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_28__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=8 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-5.0  - S60 5th Edition SDK v1.0:
-#
-# set EPOCROOT=\S60\devices\S60_5th_Edition_SDK_v1.0\
-# set PATH=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\tools;%PATH%
-#
-# s80-2.0-cw:
-#
-# set EPOCROOT=\Symbian\7.0s\S80_DP2_0_SDK_CW\
-# set EPOCDEVICE=Series80_DP2_0_SDK_CW:com.nokia.Series80
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__
-#
-# s80-2.0-vc:
-#
-# set EPOCROOT=\Symbian\7.0s\S80_DP2_0_SDK\
-# set EPOCDEVICE=Series80_DP2_0_SDK:com.nokia.Series80
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__
-#
-# UIQ-2.1-vc:
-# set EPOCROOT=\Symbian\UIQ_21\
-# set EPOCDEVICE=
-# set EPOC_BIN=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\Tools
-# set MWCW=C:\APPS\codewarrior_3.0
-# set MSVC=C:\Program Files\Microsoft Visual Studio
-# set MSVC_BIN=%MSVC%;%MSVC%\Common\MSDev98\Bin
-# set MSVC_INC=%MSVC%\VC98\atl\include;%MSVC%\mfc\include;%MSVC%\include
-# set MSVC_LIB=%MSVC%\mfc\lib;%MSVC%\lib
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__UIQ_21__ -D__UIQ_MAJOR__=2 -D__UIQ_MINOR__=1 -D__UIQ_2X__
-#
-# EOF
diff --git a/symbian/sisify.pl b/symbian/sisify.pl
deleted file mode 100644 (file)
index 7b5506c..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#!/usr/bin/perl -w
-
-#
-# sisify.pl - package Perl scripts or Perl libraries into SIS files
-#
-# Copyright (c) 2004-2005 Nokia. All rights reserved.
-# The sisify.pl utility is licensed under the same terms as Perl itself.
-#
-
-require 5.008;
-
-use strict;
-
-use vars qw($VERSION);
-
-$VERSION = '0.2';
-
-use Getopt::Long;
-use File::Temp qw/tempdir/;
-use File::Find;
-use File::Basename qw/basename dirname/;
-use Cwd qw/getcwd/;
-
-BEGIN {
-  # This utility has been developed in Windows under cmd.exe with
-  # the Series 60 2.6 SDK installed, but for the makesis utility
-  # in UNIX/Linux, try e.g. one of the following:
-  # http://gnupoc.sourceforge.net/
-  # http://symbianos.org/~andreh/ You
-  # will also need the 'uidcrc' utility.
-  die "$0: Looks like Cygwin, aborting.\n" if exists $ENV{'!C:'};
-}
-
-sub die_with_usage {
-  if (@_) {
-    warn "$0: $_\n" for @_;
-  }
-  die <<__USAGE__;
-$0: Usage:
-$0 [--variant=S60|S80|UIQ] [ --uid=hhhhhhhh ] [ --version=a.b.c ] [ --library=x.y.z ] [ some.pl | Some.pm | somefile | dir ... ]
-The uid is the Symbian app uid for the SIS.
-The version is the version of the SIS.
-The library is the version of Perl under which to install.  If using this,
-only specify directories for packaging.
-__USAGE__
-}
-
-my $SisUid;
-my $SisVersion;
-my $Library;
-my @SisPl;
-my @SisPm;
-my @SisDir;
-my @SisOther;
-my $AppName;
-my $Debug;
-my $ShowPkg;
-my $Variant;
-
-my $SisUidDefault     = 0x0acebabe;
-my $SisVersionDefault = '0.0.0';
-my $VariantDefault    = 'S60';
-
-my %Variant = qw(S60 1 S80 1 UIQ 1);
-
-die_with_usage()
-  unless GetOptions(
-                   'variant=s'         => \$Variant,
-                   'uid=s'             => \$SisUid,
-                   'version=s'         => \$SisVersion,
-                   'debug'             => \$Debug,
-                   'showpkg'           => \$ShowPkg,
-                   'library=s'         => \$Library,
-                   'appname=s'         => \$AppName,
-                  );
-die_with_usage("Need to specify what to sisify")
-  unless @ARGV;
-
-unless (defined $Variant) {
-  warn "$0: Defaulting to $VariantDefault\n";
-  $Variant = $VariantDefault;
-}
-
-unless (exists $Variant{$Variant}) {
-  die "$0: Unknown variant '$Variant'\n";
-}
-
-for my $i (@ARGV) {
-  if ($i =~ /\.pl$/i) {
-    push @SisPl, $i;
-  } elsif ($i =~ /\.pm$/i) {
-    push @SisPm, $i;
-  } elsif (-f $i) {
-    push @SisOther, $i;
-  } elsif (-d $i) {
-    push @SisDir, $i;
-  } else {
-    die_with_usage("Unknown sisifiable '$i'");
-  }
-}
-
-sub do_system {
-    my $cwd = getcwd();
-    print qq{\# system("@_") [cwd "$cwd"]\n};
-    return system("@_") == 0;
-}
-
-die_with_usage("Must specify something to sisify")
-  unless @SisPl || @SisPm || @SisOther || @SisDir;
-
-die_with_usage("With the lib option set, specify only directories")
-  if defined $Library && ((@SisPl || @SisPm || @SisOther) || @SisDir == 0);
-
-die_with_usage("Lib must define the Perl 5 version as 5.x.y")
-  if defined $Library && $Library !~ /^5.\d+\.\d+$/;
-
-die_with_usage("With the lib option unset, specify at least one .pl file")
-  if (! defined $Library && @SisPl == 0);
-
-if (!defined $AppName) {
-  if (defined $Library) {
-    $AppName = $SisDir[0];
-    $AppName =~ tr!/!-!;
-  } elsif (@SisPl > 0 && $SisPl[0] =~ /^(.+)\.pl$/i) {
-    $AppName = basename($1);
-  }
-}
-
-die_with_usage("Must either specify appname or at least one .pl file or the lib option")
-  unless defined $AppName || defined $Library;
-
-print "[app name '$AppName']\n" if $Debug;
-
-unless (defined $SisUid) {
-  $SisUid = $SisUidDefault;
-  printf "[default app uid '0x%08x']\n", $SisUid;
-} elsif ($SisUid =~ /^(?:0x)?([0-9a-f]{8})$/i) {
-  $SisUid = hex($1);
-} else {
-  die_with_usage("Bad uid '$SisUid'");
-}
-$SisUid = sprintf "0x%08x", $SisUid;
-
-die_with_usage("Bad uid '$SisUid'")
-  if $SisUid !~ /^0x[0-9a-f]{8}$/i;
-
-unless (defined $SisVersion) {
-  $SisVersion = $SisVersionDefault;
-  print "[default app version '$SisVersionDefault']\n";
-} elsif ($SisVersion !~ /^\d+\.\d+\.\d+$/) {
-  die_with_usage("Bad version '$SisVersion'")
-}
-
-my $tempdir = tempdir( CLEANUP => 1 );
-
-print "[temp directory '$tempdir']\n" if $Debug;
-
-for my $file (@SisPl, @SisPm, @SisOther) {
-  print "[copying file '$file']\n" if $Debug;
-  die_with_usage("$0: File '$file': $!") unless -f $file;
-  my $dir = dirname($file);
-  do_system("mkdir $tempdir\\$dir") unless $dir eq '.';
-  do_system("copy $file $tempdir");
-}
-if (@SisPl) {
-    do_system("copy $SisPl[0] $tempdir\\default.pl")
-       unless $SisPl[0] eq "default.pl";
-}
-for my $dir (@SisDir) {
-  print "[copying directory '$dir']\n" if $Debug;
-  do_system("copy $dir $tempdir");
-}
-
-my $SisVersionCommas = $SisVersion;
-
-$SisVersionCommas =~ s/\./\,/g;
-
-my @pkg;
-
-push @pkg, qq[&EN;];
-push @pkg, qq[#{"$AppName"},($SisUid),$SisVersionCommas];
-push @pkg, qq[(0x101F6F88), 0, 0, 0, {"Series60ProductID"}];
-
-my $OWD = getcwd();
-
-$OWD =~ s!/!\\!g;
-
-chdir($tempdir) or die "$0: chdir('$tempdir')\n";
-
-if (@SisPl) {
-  if (open(my $fi, "<", "default.pl")) {
-    my $fn = "default.pl.new";
-    if (open(my $fo, ">", $fn)) {
-      while (<$fi>) {
-       last unless /^\#/;
-       print $fo $_;
-      }
-      print $fo "use lib qw(\\system\\apps\\$AppName \\system\\apps\\$AppName\\lib);\n";
-      printf $fo qq[# %d "$SisPl[0]"\n], $.;
-      print $fo $_;
-      while (<$fi>) {
-       print $fo $_;
-      }
-      close($fo);
-    } else {
-      die "$0: open '>$fn': $!\n";
-    }
-    close($fi);
-    rename($fn, "default.pl") or die "$0: rename $fn default.pl: $!\n";
-    # system("cat -nvet default.pl");
-  } else {
-    die "$0: open 'default.pl': $!\n";
-  }
-}
-
-
-my @c;
-find(
-     sub {
-       if (-f $_) {
-        $File::Find::name =~ s!^\./!!;
-        push @c, $File::Find::name;
-       }
-     }
-     ,
-     ".");
-
-for my $i (sort @c) {
-  my $j = $i;
-  $j =~ s!/!\\!g;
-  push @pkg, defined $Library ? qq["$j"-"!:\\System\\Libs\\Perl\\siteperl\\$Library\\$j"] : qq["$j"-"!:\\system\\apps\\$AppName\\$j"];
-}
-
-sub hex2data {
-  pack("H*", shift); # symbian\hexdump.pl to create the hexdumps.
-}
-
-my $APPHEX;
-my $RSCHEX;
-
-unless ($Library) {
-  # If we package an application we will need both a launching native
-  # Symbian application and a resource file for it.  The resource file
-  # we can get easily from a stub but for the native app we need to
-  # patch in the right Symbian app uids and executable checksums.
-
-  &init_hex; # Initialized $APPHEX and $RSCHEX.
-
-  die "$0: No app template found\n" unless defined $APPHEX && defined $RSCHEX;
-
-  my $app = hex2data($APPHEX);
-  my $uidcrc;
-  my $uids = "0x10000079 0x100039CE $SisUid";
-
-  my $cmd = "uidcrc $uids |";
-
-  if (open(my $fh, '<', $cmd)) {
-    my $line = <$fh>;
-    close($fh);
-    # 0x10000079 0x100039ce 0x0acebabe 0xc82b1900
-    $line =~ s/\r?\n$//;
-    if ($line =~ /^$uids (0x[0-9a-f]{8})$/i) {
-      $uidcrc = hex($1);
-    } else {
-      die "$0: uidcrc returned '$line'\n";
-    }
-  } else {
-    die qq[$0: open '$cmd' failed: $!\n];
-  }
-
-  my $uid    = hex($SisUid);
-
-  my $oldchk = unpack('V', substr($app, 24, 4));
-  my $newchk = ($uid + $oldchk) & 0xFFFFFFFF;
-
-  # printf "# uid    = 0x%08x\n", $uid;
-  # printf "# uidcrc = 0x%08x\n", $uidcrc;
-  # printf "# oldchk = 0x%08x\n", $oldchk;
-  # printf "# newchk = 0x%08x\n", $newchk;
-
-  substr($app,  8, 4) = pack('V', $uid);
-  substr($app, 12, 4) = pack('V', $uidcrc);
-  substr($app, 24, 4) = pack('V', $newchk);
-  
-  my $UID_OFFSET = 0x0C7C; # This is where the uid is in the $app.
-  substr($app, $UID_OFFSET, 4) = substr($app, 8, 4); # Copy the uid also here.
-
-  if (open(my $fh, '>', "$AppName.app")) {
-    binmode($fh);
-    print $fh $app;
-    close($fh);
-  } else {
-    die qq[$0: open '>$AppName.app' failed: $!\n];
-  }
-
-  push @pkg, qq["$AppName.app"-"!:\\system\\apps\\$AppName\\$AppName.app"];
-
-  if (open(my $fh, '>', "$AppName.rsc")) {
-    binmode($fh);
-    print $fh hex2data($RSCHEX);
-    close($fh);
-  } else {
-    die qq[$0: open '>$AppName.rsc' failed: $!\n];
-  }
-  push @pkg, qq["$AppName.rsc"-"!:\\system\\apps\\$AppName\\$AppName.rsc"];
-}
-
-if ($ShowPkg) {
-  for my $l (@pkg) {
-    print $l, "\r\n";
-  }
-} else {
-  my $fn = "$AppName.pkg";
-  if (open(my $fh, '>', $fn)) {
-    for my $l (@pkg) {
-      print $fh "$l\r\n"; # Note CRLF!
-    }
-    close($fh);
-  } else {
-    die qq[$0: Failed to open "$fn" for writing: $!\n];
-  }
-  my $sis = "$AppName.SIS";
-  unlink($sis);
-  do_system("dir");
-  do_system("makesis $fn");
-  unless (-f $sis) {
-    die qq[$0: failed to create "$sis"\n];
-  }
-  do_system("copy $AppName.sis $OWD");
-  chdir($OWD);
-  system("dir $sis");
-  print "\n=== Now transfer $sis to your device ===\n";
-}
-
-exit(0);
-
-# To create the hex: print unpack("H*", $data);
-
-sub init_hex {
-  # This is Symbian application executable skeleton.
-  # You can create the ...\epoc32\release\thumb\urel\foo.app
-  # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
-  # The following executable has been compiled using the Series 60 SDK 2.6
-  # for Visual C.
-  # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
-  if ($Variant eq 'S60') {
-      $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f4300200000b6b005db000000000100bf00c025ed22d7e2e000030000019828000000000000001000000000100000200000000000000100000000000010000000000a0000001029000001000000402600007c0000000000000014290000802c0000000000005e01000000b501f0bbfa02bc0847000001480068704700004421001000b5011c024801f0f5fc01bc004700006421001084b030b50390049105920693204903a801f0ecfc041c0025002c06d103a8002101f0eafc00885c282bd0022c2ad103a8002101f0e1fc0088402806d903a8002101f0dafc00885a280dd903a8002101f0d3fc0088602815d903a8002101f0ccfc00887a280ed803a8012101f0c5fc00883a2807d103a8022101f0befc00885c2800d10125281c30bc08bc04b018470000cc22001084b030b50390049105920693204903a801f0a2fc041c0025002c06d103a8002101f0a0fc00885c282bd0022c2ad103a8002101f097fc0088402806d903a8002101f090fc00885a280dd903a8002101f089fc0088602815d903a8002101f082fc00887a280ed803a8012101f07bfc00883a2807d103a8022101f074fc00885c2800d10125281c30bc08bc04b018470000ac22001030b584b001f096fa009001916d4602ac0849201c01f062fc281c211c01f064fc0021002800d10121081c04b030bc02bc08470000d81d001030b584b001f07afa009001916d4602ac0849201c01f046fc281c211c01f048fc0021002800d10121081c04b030bc02bc08470000e41d0010f0b52c4ca54486ab18600f1c151c012668468021490001f035fc82ac2649201c01f024fc6846211c2a1c01f031fc684601f0d4fc002855d084ac2049201c01f015fc6846211c2a1c01f022fc684601f0c5fc002846d086a8291c01f0e3f900280fd087ac1649201c01f000fc6846211c2a1c01f00dfc684601f0b0fc002800d10026002e2ed086a8391c2a1c012301f0cff9061c002e17d189ac0a49201c01f0e5fb6846211c2a1c01f0f2fb684601f09bfc17e0ccfdfffff01d00105c1e00107c1e00109c1e00108bac0949201c01f0cdfb6846211c321c2b1c01f0d9fb684601f088fc8d239b009d44f0bc01bc0047b81e001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f0c3fb4c466468a0460c980001070900264e9c0294484601f0b7fbbc4200dbc1e10ca8029901f0b6fb007820281cd00ca8029901f0affb0078092815d00ca8029901f0a8fb00780a280ed00ca8029901f0a1fb00780d2807d00ca8029901f09afb00780c2800d09de1029cbc4200db99e10ca8211c01f08efb007820281bd00ca8029901f087fb0078092814d00ca8029901f080fb00780a280dd00ca8029901f079fb00780d2806d00ca8029901f072fb00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f063fb0078402806d90ca8029901f05cfb00785a280fd90ca8029901f055fb0078602800d858e10ca8029901f04dfb00787a2800d950e1029cbc4200db04e10ca8211c01f041fb0078402806d90ca8029901f03afb00785a2823d90ca8029901f033fb0078602806d90ca8029901f02cfb00787a2815d90ca8029901f025fb00782f2806d90ca8029901f01efb0078392807d90ca8029901f017fb00785f2800d0d2e0029cbc4243da0ca8211c01f00cfb0078402806d90ca8029901f005fb00785a2822d90ca8029901f0fefa0078602806d90ca8029901f0f7fa00787a2814d90ca8029901f0f0fa00782f2806d90ca8029901f0e9fa0078392806d90ca8029901f0e2fa00785f2812d1464510da311c0136484601f0b2fa039002990c1c013402940ca801f0d0fa0078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f0c2fa00783a2800d074e70ca8514601f0bafa00783a2800d06ce7464500db69e7311c0136484601f088fa5c210180029c02340294bc4266da0ca8211c01f0a3fa0078402806d90ca8029901f09cfa00785a280fd90ca8029901f095fa0078602800d847e70ca8029901f08dfa00787a2800d93fe7029cbc4245da0ca8211c01f082fa0078402806d90ca8029901f07bfa00785a2823d90ca8029901f074fa0078602806d90ca8029901f06dfa00787a2815d90ca8029901f066fa00782f2806d90ca8029901f05ffa0078392807d90ca8029901f058fa00785f2800d00ae7464500db07e7311c0136484601f026fa039002990c1c013402940ca801f044fa0078039c2080b6e7029cbc4244da0ca8211c01f039fa007820281bd00ca8029901f032fa0078092814d00ca8029901f02bfa00780a280dd00ca8029901f024fa00780d2806d00ca8029901f01dfa00780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f00ffa00783b2813d1f01c404510da4846311c01f00bfa6c460449201c01f0e0f94846211c01f008fa012002e0d81d0010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f0def98820c00068448424e4006c44216801f0dbf9814601204c46c44200d1a1e040a88021490001f0a4f9c224a4006c44a0468422520040468821c900694401f0caf9484607303e9040ac3f94c6a96846f82201f0c0f944462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f0b5f9301c00f0a0ff8322d2006a44106051608321c9006944404601f0adf91d49404601f0aff9381c01f076f9216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f03af98424e4006c442060c2a8494601f058f900788424e4006c44256828800124a144e3e70000dcfbffff44040000041f0010e0220010311c0136381c01f01bf95c2101800024a146409800010009814515da311c0136381c01f00df98424e4006c44206040a8494601f005f900888424e4006c44256828800124a144e4e7381c311c01e0381c002101f021f9044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f03af9009001916d4602ac0e49201c01f00ef9281c211c01f034f900280cd104ac0a49201c01f003f90aa8211c01f005f90121c84200d00126301c06b070bc08bc04b018470000141f0010181f001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490001f0b0f8301c00f0d3fecb22d2006a4410605160cd24e4006c44206800f0cefecc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206801f086f84c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216801f088f80024a146c225ad006d44cd24e4006c442560206840a900f0a7fecd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694401f096f8cea96846f82201f091f82068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002101f064f8c2ac201c40a900f077fe201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920001f04ff8c2ac84225200201cd121c900694401f046f88620c00068443f90c5a96846fc2201f03df82168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffff281f0010cc220010082300103404000040250010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c00f0f6ff82a96846fc22520000f0f0ff7e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f0e0fd4046fff74dfb00282ad14046291c00f0d7fd4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f0c6ff8621c90069446846f82200f0bfff20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f075ff002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c040000481f0010e724e4006c441749201c00f051ff7ea8211c2a1c00f05eff7ea801f013f800281dd0a524e4006c4482229200201c291c00f07cffa721c90069446846fc22520000f074ff2068084969440968a622d2006a441268054b6b441b6800f01ffa012007e00000741f00102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f050fd8320c000684400f04bfdc720c00068448021490000f00cff7ea8391c0022002300f044fd381c002100f0f0fe0088402806d9381c002100f0e9fe00885a280dd9381c002100f0e2fe008860281cd9381c002100f0dbfe00887a2815d8381c012100f0d4fe00883a280ed1381c022100f0cdfe00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f0b3fc806900f04afd011c0a68201c126a00f066fc8320c0006844211c0022002300f0fcfcb6256d0045442868002803d100f09afc1c302860574d6d4400215648684401606960b620400040440168281c3a1c002300f0eafc061c002e00d0fde08420000168448021490000f0d1fe842109016944281c00f0e1fc061c281c00f0e3fc002e00d0dde0444c6c4482229200201c391c00f0b6fe414969446846fc22520000f0affe20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f07efee7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f05bfec5252d016d44e72636016e44842109016944194c6c4484225200201c00f04bfeb620400040440068006841901449694468468222520000f03efe2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000008230010540c00001c04000040250010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f00ffe134969446846fc2200f009fe2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f0b0fd201c291c3a1c00f0bdfd22e05c0c0000540c0000580c00008c1f0010c724e4006c44024d6d4402490ae00000a8110000b41f0010c724e4006c440f4d6d440f49281c00f08dfd201c291c321c3b1c00f099fd201c00f048fe4446a06a00280fd000f06efb816900290dd008688268081c032100f021fb06e0b0110000dc1f0010404600f0fdfb034b9d4408bc9846f0bc01bc0047b8110000f0b5071c0e1c244878612448b8612448f8612448b8642448f86424483860b42464003d192968002910d0786800f0e2fb2968002905d008688268081c032100f0effab4246400391900200860b62464003d192868002803d000f098fd00202860b96a002905d008688268081c032100f0d7fa094878610948b8610948f8610948b8640948f8640a483860381c311c00f01bfef0bc01bc0047c82500102c2600101c260010fc25001008260010942300101823001084b030b51d4ca5449c909d919e929f9301200021002200f0cdfd041c96a901a800f060fd002808d10090201c9ca90222002300f0c5fd00f05bfd96a80068002813d014a88021490000f0f0fc14ad97ac0b49201c00f0defc96a80268281c211c00f0eafc281c00f09ffd00f047fd99239b009d4430bc08bc04b018479cfdffff3420001010b5094ca544041c68468022520000f039fd201c6946fff7a5fd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f031fb011c0a687ea8126a00f04dfa8026f6006e44301c00f0dffa2949301c7eaa002300f0dffac425ed006d44281c00f0f5fa244c6c440021224868440160201c042100f0f1fa301c00f0f4fa011c201c2a1c00f0f5fa002824d1301c00f0eafa011c8420000168448022520000f0eafc8521090169446846fc22520000f0a6fc84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f0e6fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff48210010480a000044080000480800004c0800004c0a000010b5b62464000019016010bc01bc0047f0b50b4ca5440b4c6c4421607ea88021490000f035fc074c6c442468064d6019052800d92ce180000449401800688746c8f7ffff3408000000fcffff0812001020120010501200107c12001000130010b8130010cc13001009490a4b0320009000220192042002900392049302200590062006907ea80522092300f007fcbbe0842100107821001001200021002200f0bbfc8022d2006a44131c054970c970c30321002300f0befc00f052fcebe00000882000101a4868448021490000f0e0fb174f6f44174c6c441749201c00f0ccfb381c211c00f048fc381c00f0abfc002800d1d0e0114c6c4482229200201c391c00f0f8fb0e4969446846fc22520000f0f1fb2068c321c90069440968094a6a441268c423db006b441b68fff79bfeb2e00c0400001c0800009420001014060000240600001c06000000f086f98569254c6c442549201c00f08ffb24492f1c6037201c3a1c802300f073fc002800d192e08020c0006844c021490000f0c1fb8025ed006d44281c391c00f060f901200021002200f041fc061c0c2000f055fb041c00f0f0fb124a6a44124911486844016054600f4868444168006800f0e9fb0e4820600e486060281c00f0eafba060301c0321221c002300f02dfc022000f0e6fb59e0000024080000b42000109c2000102c080000f5190010181f00105020001003497ea800f04afb7ea800f0f3fb42e0042200108020c00068448021490000f037fbc120c00068448021490000f030fb1349144b8024e4006c44032000900022019204200290039204930220059006200690201c0522092300f020fb201c00f0c9fb094800f0a8fbc124e4006c440749201c00f013fb201c00f0bcfb0be00000842100107821001040420f00042200100120fef7e5fd024b9d44f0bc01bc00473808000030b5051c242000f08bfb041c002c04d0291c00f0e5fb03482060201c30bc02bc084700004c240010f0b54f464646c0b4b820400000f074fb071c002f2ad000f065f91848b8641848f864184ca1467c61174ca046bc61174efe61174dbd64174cfc64174838604c467c614446bc61134cfc6414483860381c6030802100f0b6fa4c467c614446bc61fe61bd640b4cfc640d483860381c18bc9846a146f0bc02bc08470000202500102c250010c82500102c2600101c260010fc25001008260010502500101823001094230010f0b50d1c171c1c1c00f06ef88669301c211cfff73dfe002d05d03068426d301c391c00f01df80020f0bc02bc0847000010b58b20800000f013fb041c002c03d000f004f902482060201c10bc02bc0847e4240010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c04640260010014b1b681847c04648260010014b1b681847c0464c260010014b1b681847c04644260010014b1b681847c0468c26001040b4024e3668b44640bc604788260010014b1b681847c04690260010014b1b681847c046a8260010014b1b681847c046a0260010014b1b681847c04694260010014b1b681847c04698260010014b1b681847c046a4260010014b1b681847c0469c260010014b1b681847c046b4260010014b1b681847c046b8260010014b1b681847c046ac260010014b1b681847c046b0260010014b1b681847c046cc260010014b1b681847c046c4260010014b1b681847c046d4260010014b1b681847c046ec260010014b1b681847c046f426001040b4024e3668b44640bc6047e826001040b4024e3668b44640bc6047e0260010014b1b681847c046e4260010014b1b681847c046bc260010014b1b681847c046f0260010014b1b681847c046c0260010014b1b681847c046d0260010014b1b681847c046c8260010014b1b681847c046dc260010014b1b681847c046d8260010014b1b681847c046f8260010014b1b681847c04628270010014b1b681847c04674270010014b1b681847c046c0270010014b1b681847c046bc270010014b1b681847c046d4270010014b1b681847c04684270010014b1b681847c04634270010014b1b681847c04644270010014b1b681847c046a4270010014b1b681847c04670270010014b1b681847c04614270010014b1b681847c04648270010014b1b681847c046b0270010014b1b681847c04688270010014b1b681847c0468c270010014b1b681847c04610270010014b1b681847c04660270010014b1b681847c04600270010014b1b681847c0467c270010014b1b681847c04630270010014b1b681847c046fc260010014b1b681847c04690270010014b1b681847c04658270010014b1b681847c04618270010014b1b681847c04624270010014b1b681847c04668270010014b1b681847c0469c270010014b1b681847c046a8270010014b1b681847c04694270010014b1b681847c0462c270010014b1b681847c04654270010014b1b681847c04650270010014b1b681847c04678270010014b1b681847c04680270010014b1b681847c046ac270010014b1b681847c046c827001040b4024e3668b44640bc60476c270010014b1b681847c0466427001040b4024e3668b44640bc60474c270010014b1b681847c046a0270010014b1b681847c0460c270010014b1b681847c04638270010014b1b681847c0460427001040b4024e3668b44640bc604798270010014b1b681847c04620270010014b1b681847c0461c270010014b1b681847c0465c270010014b1b681847c046c4270010014b1b681847c04608270010014b1b681847c0463c270010014b1b681847c046cc270010014b1b681847c046d027001040b4024e3668b44640bc604740270010014b1b681847c046b8270010014b1b681847c046b4270010014b1b681847c046dc270010014b1b681847c046d8270010014b1b681847c04620280010014b1b681847c0460c280010014b1b681847c046f8270010014b1b681847c04650280010014b1b681847c046fc270010014b1b681847c0464828001040b4024e3668b44640bc604714280010014b1b681847c04638280010014b1b681847c046f4270010014b1b681847c04634280010014b1b681847c046f0270010014b1b681847c0464c280010014b1b681847c04610280010014b1b681847c046e0270010014b1b681847c04654280010014b1b681847c04604280010014b1b681847c046ec270010014b1b681847c0461c280010014b1b681847c04600280010014b1b681847c04658280010014b1b681847c0463c280010014b1b681847c04640280010014b1b681847c04624280010014b1b681847c04644280010014b1b681847c04608280010014b1b681847c0461828001040b4024e3668b44640bc604730280010014b1b681847c0462c280010014b1b681847c04628280010014b1b681847c046e8270010014b1b681847c046e4270010014b1b681847c0465c280010014b1b681847c04660280010014b1b681847c04674280010014b1b681847c0466c280010014b1b681847c04684280010014b1b681847c04688280010014b1b681847c0467028001040b4024e3668b44640bc60477c28001040b4024e3668b44640bc604778280010014b1b681847c0466428001040b4024e3668b44640bc604780280010014b1b681847c0468c280010014b1b681847c04668280010014b1b681847c04680260010014b1b681847c04684260010014b1b681847c04664260010014b1b681847c04670260010014b1b681847c04654260010014b1b681847c0465c26001040b4024e3668b44640bc604750260010014b1b681847c0467c260010014b1b681847c04678260010014b1b681847c0466c260010014b1b681847c04668260010014b1b681847c04658260010014b1b681847c04660260010014b1b681847c046742600107047000000b5084a4261084a8261084ac261084a8264084ac264084a0260fff799ff01bc00470000c82500102c2600101c260010fc250010082600101823001000b5fff75dfe01bc0047000000b5fff75dfe01bc0047000000b5fff751fe01bc0047000000b5fff74bfe01bc0047000010b581b0039c14380094fff7e1fd01b010bc01bc0047000000b51438fff7b2ff01bc004700b51438fff7dafd01bc004700b51838fff724fe02bc084700b51c38fff718fe02bc084700b51c38fff70cfe02bc084700b54838fff788ff01bc004700b54c38fff788ff01bc0047ffffffff00000000ffffffff000000004421001064210010cc220010ac2200102e0070006d000000d81d00102e0070006c000000e41d001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e00670020002500530000000000f01d00105c1e00107c1e00109c1e0010b81e0010d81d00107061636b61676500041f0010e0220010232100007065726c00000000141f0010181f001025005300250053002500530000000000281f0010cc22001008230010402500105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f000000481f0010741f00104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e006700200025005300000008230010402500108c1f0010b41f0010dc1f0010c82500102c2600101c260010fc2500100826001018230010942300104500720072006f0072002000250064000000000034200010482100102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d6500000000181f0010502000105420001043003a005c000000090000004f006e0065006c0069006e00650072003a0000004f006e0065006c0069006e00650072000000000084210010782100108820001094200010b42000109c200010f5190010181f00105020001004220010081200104c240010202500102c250010c82500102c2600101c260010fc2500100826001050250010182300109423001010240010a8240010e4240010c82500102c2600101c260010fc2500100826001018230010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000053003600300000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e33000000000000000000000000951b0010951b00100000000000000000e11c0010491c0010551c0010811700108d1700101d16001029160010611c0010351600106d1c001099170010411600104d160010191c0010a517001001190010b1170010251c0010bd17001011190010c9170010791c0010d5170010e1170010ed170010f9170010891c0010951c0010951b00100000000000000000690f0010491c0010551c0010811700108d1700101d16001029160010611c0010351600106d1c001099170010411600104d160010191c0010a5170010cd100010b1170010251c0010bd170010a1100010c9170010791c0010d5170010e1170010ed170010f9170010891c0010951c0010c911001000000000000000001d1d0010a11c001005180010951b0010ad1c001011180010b91500101d1800102918001035180010411800104d180010951b00100000000000000000291d00105918001065180010c5150010711800107d1800108918001095180010a1180010dd1c0010ad180010b9180010d1150010dd150010c5180010d1180010dd1800108514001029150010e9180010f51800100000000000000000351d0010a11c001005180010951b0010ad1c001011180010b91500101d1800102918001035180010411800104d180010951b00100000000000000000411d0010a11c0010051800100d000010ad1c001011180010b91500101d1800102918001035180010411800104d1800105d1400100000000000000000951b00100000000000000000951b0010591600106516001000000000000000002d170010391700100000000000000000311c0010491c0010551c0010811700108d1700101d16001029160010611c0010351600106d1c001099170010411600104d1600109d190010a517001001190010b1170010a9190010bd17001011190010c9170010791c0010d5170010e1170010ed170010f9170010891c0010951c0010ecffffff00000000651d00103919001045190010511900105d1900106d190010791900104d1d001085190010711d001091190010b8ffffff00000000a11d0010b4ffffff00000000ad1d00105916001065160010e4ffffff00000000951d0010891d0010e8ffffff000000007d1d0010711600107d16001003000000060000001b00000047000000ee020000f502000022030000230300002503000028030000b6040000d2040000e6040000f304000044050000480500000008000005080000110000002900000004000000520000005a0000006000000065000000bb000000df000000ff0000000001000024010000250100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e600000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd0000000801000022010000280100000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b060000040000000600000007000000080000000a0000004b0000007f0500008205000083050000af050000d005000000000000591500006c030000a40200000400000003000000060000001b00000047000000b90200000e000000ee020000f502000022030000230300002503000028030000b6040000d2040000e6040000f304000044050000480500000008000005080000cd020000020000001100000029000000e00200000100000004000000f70200000a000000520000005a0000006000000065000000bb000000df000000ff0000000001000024010000250100000a0300000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e60000001e0300003800000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000340300000200000003000000060000004903000021000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b0600005d0300000b000000040000000600000007000000080000000a0000004b0000007f0500008205000083050000af050000d00500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c00000000c0030000d2010000000000004000000014302830bc3050318831c0317c32803284328832b4327c36dc37e037ac38b038543a583a5c3a643a7c3be43b543e603ee83e003f4c3f000000100000bc0100000030043008300c301030143018309c30a031043208320c321032143218321c3248324c327832f032a033a433ac33b033b433c83338343c34443480340035043508350c351035143518351c35203524357835c035cc35d835e435f03500360c361836243630363c364836543660366c367836843690369c36a836b436c036d036e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38a838b438c038cc38d838e438f038fc380c3918392839343940394c3958396839743980398c399839a439b039bc39c839d839e439f039fc39083a143a203a2c3a383a443a503a603a6c3a783a843a903a9c3aa83ab43ac03acc3ad83ae43af03afc3a083b143b203b2c3b383b443b543b603b6c3b783b843b903b9c3ba83bb43bc03bcc3bd83be83bf83b043c143c203c2c3c383c443c503c5c3c683c743c843c903c9c3ca83cb43cc03ccc3cd83c043d083d0c3d103d143d183dc83dcc3dd03dd43de03dec3dec3ef03ef43ef83efc3e003f0c3f103f203f243f383f3c3f403f443f843f883f000000200000c4010000043008300c301030143018301c302030243028302c30303048304c3088308c309030c830cc30d030d430d830dc30e030e430e830ec30f030f430f830fc300031043108310c311031143118311c312031243128312c313031343138313c314031103314332033243328332c333033343338333c334033443348334c335033543358335c336033643368336c337033743378337c338033843388338c3390339c33a033a433a833ac33b033b433b833bc33c033c433c833cc33d033d433d833dc33e033e433e833ec33f033f433f833fc330034043408340c3418341c342034243428342c343034343438343c34403444344834543458345c346034643468346c347034743478347c348034843488348c349034943498349c34a034a434b034b434b834bc34c034c434c834cc34d034d434d834dc34e034ec34f034f434f834fc340035043508350c351035143518351c352835343538353c3548354c3558355c356035643568356c357035743578357c358035843588358c359035943598359c35a035a435a835ac35b035b435b835bc35c035c435d035d435d835dc35e035e435e835ec35f035f435f835043610361436183624362836343638363c36
-__APP__
-  }
-
-  # This is Symbian application resource skeleton.
-  # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
-  # by compiling the PerlApp.cpp.
-  # The following resource has been compiled using the Series 60 SDK 2.6
-  # for Visual C.
-  # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
-  if ($Variant eq 'S60') {
-    $RSCHEX = <<__RSC__;
-6b4a1f10000000005fde04001ca360de01b80010000400000001f0e54d0000000004f0e54d00000000000000001a00cc0800000000010005f0e54d000000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000120000000000000001400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000000120000000000000002400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000004122000000000000001400cc08010069160000050000000001000000000000000001000000040007000800ff020100ffffffff00000000000000000000ffff000000000000004122000000000000001400cc08010074160007000000000054160000ffffffff000000000000ffff00000000000000000000000015001d001d0035004d00ef0026015d01a301d201d701
-__RSC__
-  }
-
-  # This is Symbian application executable skeleton.
-  # You can create the ...\epoc32\release\thumb\urel\foo.app
-  # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
-  # The following executable has been compiled using the Series 80 SDK 2.0
-  # for Visual C.
-  # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
-  if ($Variant eq 'S80') {
-      $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f4300200000b088df82000000000100bb00806c8dc7d6e2e00003000001bc2500000000000000100000000010000020000000000000010000000000001000000000090000003426000001000000902300007c00000000000000382600005c290000000000005e01000000b501f07bfa02bc084700000148006870470000b01f001000b5011c024801f0c9fc01bc00470000d01f001084b030b50390049105920693204903a801f0c0fc041c0025002c06d103a8002101f0befc00885c282bd0022c2ad103a8002101f0b5fc0088402806d903a8002101f0aefc00885a280dd903a8002101f0a7fc0088602815d903a8002101f0a0fc00887a280ed803a8012101f099fc00883a2807d103a8022101f092fc00885c2800d10125281c30bc08bc04b0184700003821001084b030b50390049105920693204903a801f076fc041c0025002c06d103a8002101f074fc00885c282bd0022c2ad103a8002101f06bfc0088402806d903a8002101f064fc00885a280dd903a8002101f05dfc0088602815d903a8002101f056fc00887a280ed803a8012101f04ffc00883a2807d103a8022101f048fc00885c2800d10125281c30bc08bc04b0184700001821001030b584b001f04afa009001916d4602ac0849201c01f036fc281c211c01f038fc0021002800d10121081c04b030bc02bc08470000801c001030b584b001f02efa009001916d4602ac0849201c01f01afc281c211c01f01cfc0021002800d10121081c04b030bc02bc084700008c1c0010f0b52c4ca54486ab18600f1c151c012668468021490001f009fc82ac2649201c01f0f8fb6846211c2a1c01f005fc684601f0a8fc002855d084ac2049201c01f0e9fb6846211c2a1c01f0f6fb684601f099fc002846d086a8291c01f0a3f900280fd087ac1649201c01f0d4fb6846211c2a1c01f0e1fb684601f084fc002800d10026002e2ed086a8391c2a1c012301f08ff9061c002e17d189ac0a49201c01f0b9fb6846211c2a1c01f0c6fb684601f06ffc17e0ccfdffff981c0010041d0010241d0010441d00108bac0949201c01f0a1fb6846211c321c2b1c01f0adfb684601f05cfc8d239b009d44f0bc01bc0047601d001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f097fb4c466468a0460c980001070900264e9c0294484601f08bfbbc4200dbc1e10ca8029901f08afb007820281cd00ca8029901f083fb0078092815d00ca8029901f07cfb00780a280ed00ca8029901f075fb00780d2807d00ca8029901f06efb00780c2800d09de1029cbc4200db99e10ca8211c01f062fb007820281bd00ca8029901f05bfb0078092814d00ca8029901f054fb00780a280dd00ca8029901f04dfb00780d2806d00ca8029901f046fb00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f037fb0078402806d90ca8029901f030fb00785a280fd90ca8029901f029fb0078602800d858e10ca8029901f021fb00787a2800d950e1029cbc4200db04e10ca8211c01f015fb0078402806d90ca8029901f00efb00785a2823d90ca8029901f007fb0078602806d90ca8029901f000fb00787a2815d90ca8029901f0f9fa00782f2806d90ca8029901f0f2fa0078392807d90ca8029901f0ebfa00785f2800d0d2e0029cbc4243da0ca8211c01f0e0fa0078402806d90ca8029901f0d9fa00785a2822d90ca8029901f0d2fa0078602806d90ca8029901f0cbfa00787a2814d90ca8029901f0c4fa00782f2806d90ca8029901f0bdfa0078392806d90ca8029901f0b6fa00785f2812d1464510da311c0136484601f086fa039002990c1c013402940ca801f0a4fa0078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f096fa00783a2800d074e70ca8514601f08efa00783a2800d06ce7464500db69e7311c0136484601f05cfa5c210180029c02340294bc4266da0ca8211c01f077fa0078402806d90ca8029901f070fa00785a280fd90ca8029901f069fa0078602800d847e70ca8029901f061fa00787a2800d93fe7029cbc4245da0ca8211c01f056fa0078402806d90ca8029901f04ffa00785a2823d90ca8029901f048fa0078602806d90ca8029901f041fa00787a2815d90ca8029901f03afa00782f2806d90ca8029901f033fa0078392807d90ca8029901f02cfa00785f2800d00ae7464500db07e7311c0136484601f0faf9039002990c1c013402940ca801f018fa0078039c2080b6e7029cbc4244da0ca8211c01f00dfa007820281bd00ca8029901f006fa0078092814d00ca8029901f0fff900780a280dd00ca8029901f0f8f900780d2806d00ca8029901f0f1f900780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f0e3f900783b2813d1f01c404510da4846311c01f0dff96c460449201c01f0b4f94846211c01f0dcf9012002e0801c0010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f0b2f98820c00068448424e4006c44216801f0aff9814601204c46c44200d1a1e040a88021490001f078f9c224a4006c44a0468422520040468821c900694401f09ef9484607303e9040ac3f94c6a96846f82201f094f944462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f089f9301c00f054ff8322d2006a44106051608321c9006944404601f081f91d49404601f083f9381c01f04af9216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f00ef98424e4006c442060c2a8494601f02cf900788424e4006c44256828800124a144e3e70000dcfbffff44040000ac1d00104c210010311c0136381c01f0eff85c2101800024a146409800010009814515da311c0136381c01f0e1f88424e4006c44206040a8494601f0d9f800888424e4006c44256828800124a144e4e7381c311c01e0381c002101f0f5f8044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f00ef9009001916d4602ac0e49201c01f0e2f8281c211c01f008f900280cd104ac0a49201c01f0d7f80aa8211c01f0d9f80121c84200d00126301c06b070bc08bc04b018470000bc1d0010c01d001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490001f084f8301c00f087fecb22d2006a4410605160cd24e4006c44206800f082fecc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206801f05af84c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216801f05cf80024a146c225ad006d44cd24e4006c442560206840a900f05bfecd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694401f06af8cea96846f82201f065f82068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002101f038f8c2ac201c40a900f02bfe201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920001f023f8c2ac84225200201cd121c900694401f01af88620c00068443f90c5a96846fc2201f011f82168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffffd01d001038210010742100103404000038230010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c00f0caff82a96846fc22520000f0c4ff7e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f094fd4046fff74dfb00282ad14046291c00f08bfd4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f09aff8621c90069446846f82200f093ff20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f049ff002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c040000f01d0010e724e4006c441749201c00f025ff7ea8211c2a1c00f032ff7ea800f0e7ff00281dd0a524e4006c4482229200201c291c00f050ffa721c90069446846fc22520000f048ff2068084969440968a622d2006a441268054b6b441b6800f00dfa012007e000001c1e00102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f004fd8320c000684400f0fffcc720c00068448021490000f0e0fe7ea8391c0022002300f0f8fc381c002100f0c4fe0088402806d9381c002100f0bdfe00885a280dd9381c002100f0b6fe008860281cd9381c002100f0affe00887a2815d8381c012100f0a8fe00883a280ed1381c022100f0a1fe00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f073fc806900f0fefc011c0a68201c126a00f026fc8320c0006844211c0022002300f0b0fca0256d0045442868002803d100f05afc1c302860574d6d4400215648684401606960a020400040440168281c3a1c002300f09efc061c002e00d0fde08420000168448021490000f0a5fe842109016944281c00f095fc061c281c00f097fc002e00d0dde0444c6c4482229200201c391c00f08afe414969446846fc22520000f083fe20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f052fee7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f02ffec5252d016d44e72636016e44842109016944194c6c4484225200201c00f01ffea020400040440068006841901449694468468222520000f012fe2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000074210010540c00001c04000038230010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f0e3fd134969446846fc2200f0ddfd2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f084fd201c291c3a1c00f091fd22e05c0c0000540c0000580c0000341e0010c724e4006c44024d6d4402490ae00000a81100005c1e0010c724e4006c440f4d6d440f49281c00f061fd201c291c321c3b1c00f06dfd201c00f01cfe4446606a00280fd000f02efb816900290dd008688268081c032100f0e1fa06e0b0110000841e0010404600f0b1fb034b9d4408bc9846f0bc01bc0047b8110000f0b5071c0e1c1e4878611e48b8611e4838609e2464003d192968002910d0786800f09cfb2968002905d008688268081c032100f0b5fa9e246400391900200860a02464003d192868002803d000f072fd00202860796a002905d008688268081c032100f09dfa064878610648b86107483860381c311c00f077fbf0bc01bc0047482300107c230010f42100108421001084b030b51d4ca5449c909d919e929f9301200021002200f0b3fd041c96a901a800f046fd002808d10090201c9ca90222002300f0abfd00f041fd96a80068002813d014a88021490000f0d6fc14ad97ac0b49201c00f0c4fc96a80268281c211c00f0d0fc281c00f085fd00f02dfd99239b009d4430bc08bc04b018479cfdffffd01e001010b5094ca544041c68468022520000f01ffd201c6946fff7b7fd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f0f7fa011c0a687ea8126a00f01ffa8026f6006e44301c00f0a5fa2949301c7eaa002300f0a5fac425ed006d44281c00f0bbfa244c6c440021224868440160201c042100f0b7fa301c00f0bafa011c201c2a1c00f0bbfa002824d1301c00f0b0fa011c8420000168448022520000f0d0fc8521090169446846fc22520000f08cfc84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f0acfa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffb41f0010480a000044080000480800004c0800004c0a000010b5a02464000019016010bc01bc0047f0b50b4ca5440b4c6c4421607ea88021490000f01bfc074c6c442468064d6019052800d92ae180000449401800688746c8f7ffff3408000000fcffffe4110010fc1100102c12001058120010dc12001094130010a813001009490a4b032000900022019204200290039204930220059006927ea80522092300f0eefbbce00000f01f0010e41f001001200021002200f0a1fc8022d2006a44131c054970c970c30321002300f0a4fc00f038fce9e00000241f00101a4868448021490000f0c6fb174f6f44174c6c441749201c00f0b2fb381c211c00f02efc381c00f091fc002800d1cee0114c6c4482229200201c391c00f0defb0e4969446846fc22520000f0d7fb2068c321c90069440968094a6a441268c423db006b441b68fff79bfeb0e00c0400001c080000301f001014060000240600001c06000000f058f98569254c6c442549201c00f075fb24492f1c3437201c3a1c802300f059fc002800d190e08020c0006844c021490000f0a7fb8025ed006d44281c391c00f032f901200021002200f027fc061c0c2000f03bfb041c00f0d6fb124a6a44124911486844016054600f4868444168006800f0cffb0e4820600e486060281c00f0d0fba060301c0321221c002300f013fc022000f0ccfb57e0000024080000481f0010381f00102c0800009d190010c01d0010ec1e001003497ea800f030fb7ea800f0d9fb40e0702000108020c00068448021490000f01dfbc120c00068448021490000f016fb1249134b8024e4006c4403200090002201920420029003920493022005900692201c0522092300f007fb201c00f0b0fb084800f08ffbc124e4006c440649201c00f0fafa201c00f0a3fb0ae0f01f0010e41f001040420f00702000100120fef7f9fd024b9d44f0bc01bc00473808000030b5051c242000f073fb041c002c04d0291c00f049f903482060201c30bc02bc084700006422001070b5a220400000f05ffb061c002e10d000f03cf9094d7561094cb46109483060301c3430802100f0b5fa7561b46106483060301c70bc02bc08470000482300107c23001084210010f4210010f0b50d1c171c1c1c00f06ef88669301c211cfff76bfe002d05d03068026d301c391c00f01df80020f0bc02bc0847000010b58b20800000f027fb041c002c03d000f004f902482060201c10bc02bc0847fc220010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c04690230010014b1b681847c04698230010014b1b681847c0469c230010014b1b681847c04694230010014b1b681847c046a423001040b4024e3668b44640bc6047a0230010014b1b681847c046a8230010014b1b681847c046c0230010014b1b681847c046b8230010014b1b681847c046ac230010014b1b681847c046b0230010014b1b681847c046bc230010014b1b681847c046b4230010014b1b681847c046c4230010014b1b681847c046c8230010014b1b681847c046dc230010014b1b681847c046d4230010014b1b681847c046e4230010014b1b681847c046fc230010014b1b681847c0460424001040b4024e3668b44640bc6047f823001040b4024e3668b44640bc6047f0230010014b1b681847c046f4230010014b1b681847c046cc230010014b1b681847c04600240010014b1b681847c046d0230010014b1b681847c046e0230010014b1b681847c046d8230010014b1b681847c046ec230010014b1b681847c046e8230010014b1b681847c04608240010014b1b681847c04634240010014b1b681847c04690240010014b1b681847c046d8240010014b1b681847c046dc240010014b1b681847c046e4240010014b1b681847c046e0240010014b1b681847c046f0240010014b1b681847c046f8240010014b1b681847c0469c240010014b1b681847c046a4240010014b1b681847c046ec240010014b1b681847c0465c240010014b1b681847c04640240010014b1b681847c04650240010014b1b681847c0468c240010014b1b681847c0462024001040b4024e3668b44640bc604748240010014b1b681847c04654240010014b1b681847c046cc240010014b1b681847c046a8240010014b1b681847c046ac240010014b1b681847c0467c240010014b1b681847c0461c240010014b1b681847c04678240010014b1b681847c04670240010014b1b681847c04610240010014b1b681847c04698240010014b1b681847c0463c240010014b1b681847c0460c240010014b1b681847c046b0240010014b1b681847c04668240010014b1b681847c04624240010014b1b681847c04630240010014b1b681847c04680240010014b1b681847c046bc240010014b1b681847c046c4240010014b1b681847c046b4240010014b1b681847c04638240010014b1b681847c04664240010014b1b681847c04660240010014b1b681847c04694240010014b1b681847c046a0240010014b1b681847c046c8240010014b1b681847c046f424001040b4024e3668b44640bc604788240010014b1b681847c0467424001040b4024e3668b44640bc60474c240010014b1b681847c0468424001040b4024e3668b44640bc604758240010014b1b681847c046c0240010014b1b681847c04618240010014b1b681847c04644240010014b1b681847c0461424001040b4024e3668b44640bc6047b8240010014b1b681847c0462c240010014b1b681847c04628240010014b1b681847c0466c240010014b1b681847c046e8240010014b1b681847c046d4240010014b1b681847c046d0240010014b1b681847c04600250010014b1b681847c046fc240010014b1b681847c04644250010014b1b681847c04630250010014b1b681847c0461c250010014b1b681847c04674250010014b1b681847c04620250010014b1b681847c0466c25001040b4024e3668b44640bc604738250010014b1b681847c0465c250010014b1b681847c04618250010014b1b681847c04658250010014b1b681847c04614250010014b1b681847c04670250010014b1b681847c04634250010014b1b681847c04604250010014b1b681847c04678250010014b1b681847c04628250010014b1b681847c04610250010014b1b681847c04640250010014b1b681847c04624250010014b1b681847c0467c250010014b1b681847c04660250010014b1b681847c04664250010014b1b681847c04648250010014b1b681847c04668250010014b1b681847c0462c250010014b1b681847c0463c25001040b4024e3668b44640bc604754250010014b1b681847c04650250010014b1b681847c0464c250010014b1b681847c0460c250010014b1b681847c04608250010014b1b681847c04680250010014b1b681847c04684250010014b1b681847c04698250010014b1b681847c04690250010014b1b681847c046a8250010014b1b681847c046ac250010014b1b681847c0469425001040b4024e3668b44640bc6047a025001040b4024e3668b44640bc60479c250010014b1b681847c0468825001040b4024e3668b44640bc6047a4250010014b1b681847c046b0250010014b1b681847c0468c2500107047000000b5054a4261054a8261054a0260fff771fd01bc00470000482300107c2300108421001000b5fff7c5fe01bc0047000000b5fff7b9fe01bc0047000000b5fff7b3fe01bc0047000010b581b0039c14380094fff769fe01b010bc01bc0047000000b51438fff75afe01bc004700b51438fff762fe01bc004700b51838fff746fe02bc0847ffffffff00000000ffffffff00000000b01f0010d01f001038210010182100102e0070006d000000801c00102e0070006c0000008c1c001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e00670020002500530000000000981c0010041d0010241d0010441d0010601d0010801c00107061636b61676500ac1d00104c210010232100007065726c00000000bc1d0010c01d001025005300250053002500530000000000d01d00103821001074210010382300105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f000000f01d00101c1e00104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e00670020002500530000007421001038230010341e00105c1e0010841e0010482300107c23001084210010f42100104500720072006f00720020002500640000000000d01e0010b41f00102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d6500000000c01d0010ec1e0010f01e001043003a005c0000000500000043006f00640065003a0000004f006e0065006c0069006e006500720000000000f01f0010e41f0010241f0010301f0010481f0010381f00109d190010c01d0010ec1e001070200010e411001064220010482300107c23001084210010f4210010c0220010fc220010482300107c23001084210010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000053003800300000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e330000000000000000000000003d1b00103d1b00100000000000000000dd1b0010011700100d17001019170010251700109d150010a915001031170010b51500103d17001049170010c1150010cd150010c11b001055170010cd180010cd1b001061170010dd1800106d170010791700108917001095170010a1170010ad1700103d1b00100000000000000000690f0010011700100d17001019170010251700109d150010a915001031170010b51500103d17001049170010c1150010cd150010c11b001055170010a9100010cd1b0010611700107d1000106d170010791700108917001095170010a1170010ad170010a51100100000000000000000011c00102518001031180010451500103d1800104918001055180010611800106d180010d91b00107918001085180010511500105d150010911800109d180010a91800105d140010a9140010b5180010c118001000000000000000000d1c0010b9170010c51700103d1b0010d1170010dd17001039150010e9170010f5170010011800100d180010191800103d1b00100000000000000000191c0010b9170010c51700100d000010d1170010dd17001039150010e9170010f5170010011800100d1800101918001035140010000000000000000095160010a1160010ecffffff000000003d1c0010211900102d19001039190010451900105519001061190010251c00106d190010491c001079190010e8ffffff00000000551c0010d9150010e515001003000000060000001b00000047000000110000002900000004000000520000005a0000006000000065000000bb000000df000000ff000000000100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e600000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b060000040000000600000008000000090000000b0000004c000000800500008305000084050000b0050000d105000000000000d914000024030000700200000400000003000000060000001b0000004700000085020000020000001100000029000000980200000100000004000000af02000008000000520000005a0000006000000065000000bb000000df000000ff00000000010000c20200000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e6000000d60200003d00000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe000000ec0200000200000003000000060000000103000021000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b060000150300000b000000040000000600000008000000090000000b0000004c000000800500008305000084050000b0050000d10500004150504152435b31303030336133645d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000000803000075010000000000004800000014302830bc3050318831c0317c32803284328832b4327c36dc37e037ac38b038543a583a5c3a643a7c3be43b543e603ee83e003f4c3fe83fec3ff03ff43f000000100000cc01000078307c31e031e431e831ec31f031f431f831243228325432cc327c33803388338c339033a433103414341c34583498349c34a034a434f83440354c3558356435703580358c359835a435b035bc35c835d435e035ec35f835043610361c36283638364836543660366c367836843690369c36a836b436c036cc36d836e436f036fc360837143720372c373837443750375c3768377437843790379c37a837b437c037cc37d837e437f037fc370838143820382c383838443850385c386838743880388c389838a438b038bc38c838d838e438f438003910391c3928393439403950395c396839743980398c399839a439b039bc39c839d439e039ec39f839083a143a203a2c3a383a443a503a5c3a683a743a803a8c3a983aa43ab03abc3ac83ad43ae03aec3afc3a083b143b203b2c3b383b443b503b5c3b683b743b803b903ba03bac3bbc3bc83bd43bf43bf83bfc3b703c743c783c7c3c883c943c943d983d9c3da03da43da83db43db83dc83dcc3de03de43de83dec3d2c3e303eac3eb03eb43eb83ebc3ec03ec43ec83ecc3ee43ee83e243f283f2c3f5c3f603f643f683f6c3f703f743f783f7c3f803f843f883f8c3f903f943f983f9c3fa03fa43fa83fac3f000000200000f40000007c3180318c319031943198319c31a031a431a831ac31b031b431b831bc31c031c431c831cc31d031d431d831dc31e031e431e831ec31f031fc310032043208320c321032143218321c322032243228322c323032343238323c324032443248324c325032543258325c3260326c327032743278327c328032843288328c329032943298329c32a032a432a832ac32b032b432b832bc32c832cc32d032d432d832dc32e032e432e832ec32f032f432f832043308330c331033143318331c332033243328332c3330333433403344335033543358335c336033643368336c33703374337833843388338c330000__APP__
-  }
-
-  # This is Symbian application resource skeleton.
-  # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
-  # by compiling the PerlApp.cpp.
-  # The following resource has been compiled using the Series 80 SDK 2.0
-  # for Visual C.
-  # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
-  if ($Variant eq 'S80') {
-    $RSCHEX = <<__RSC__;
-6b4a1f10000000005fde04001ca360de01b800780400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000003010005055469746c65110000000064b0f3000000000001000200060650726f6d70740f00080000000000000a00010080000014001c001c0034008200a50047017b01
-__RSC__
-  }
-
-  # This is Symbian application executable skeleton.
-  # You can create the ...\epoc32\release\thumb\urel\foo.app
-  # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
-  # The following executable has been compiled using the UIQ SDK 2.1
-  # for CodeWarrior.
-  # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
-  if ($Variant eq 'UIQ') {
-      $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f4300200000cb7c2694000000000100af004044957dd6e2e000030000008c25000000000000001000000000100000200000000000000100000000000010000000000a0000000426000001000000502300007c000000000000000826000058290000000000005e01000000b501f031fa02bc084700000148006870470000401f001000b5011c024801f0c7fb01bc00470000601f001084b030b50390049105920693204903a801f0befb041c0025002c06d103a8002101f0bcfb00885c282bd0022c2ad103a8002101f0b3fb0088402806d903a8002101f0acfb00885a280dd903a8002101f0a5fb0088602815d903a8002101f09efb00887a280ed803a8012101f097fb00883a2807d103a8022101f090fb00885c2800d10125281c30bc08bc04b018470000c820001084b030b50390049105920693204903a801f074fb041c0025002c06d103a8002101f072fb00885c282bd0022c2ad103a8002101f069fb0088402806d903a8002101f062fb00885a280dd903a8002101f05bfb0088602815d903a8002101f054fb00887a280ed803a8012101f04dfb00883a2807d103a8022101f046fb00885c2800d10125281c30bc08bc04b018470000a820001030b584b001f0eef9009001916d4602ac0849201c01f034fb281c211c01f036fb0021002800d10121081c04b030bc02bc084700001c1c001030b584b001f0d2f9009001916d4602ac0849201c01f018fb281c211c01f01afb0021002800d10121081c04b030bc02bc08470000281c0010f0b52c4ca54486ab18600f1c151c012668468021490001f007fb82ac2649201c01f0f6fa6846211c2a1c01f003fb684601f0a0fb002855d084ac2049201c01f0e7fa6846211c2a1c01f0f4fa684601f091fb002846d086a8291c01f053f900280fd087ac1649201c01f0d2fa6846211c2a1c01f0dffa684601f07cfb002800d10026002e2ed086a8391c2a1c012301f03ff9061c002e17d189ac0a49201c01f0b7fa6846211c2a1c01f0c4fa684601f067fb17e0ccfdffff341c0010a01c0010c01c0010e01c00108bac0949201c01f09ffa6846211c321c2b1c01f0abfa684601f054fb8d239b009d44f0bc01bc0047fc1c001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f095fa4c466468a0460c980001070900264e9c0294484601f089fabc4200dbc1e10ca8029901f088fa007820281cd00ca8029901f081fa0078092815d00ca8029901f07afa00780a280ed00ca8029901f073fa00780d2807d00ca8029901f06cfa00780c2800d09de1029cbc4200db99e10ca8211c01f060fa007820281bd00ca8029901f059fa0078092814d00ca8029901f052fa00780a280dd00ca8029901f04bfa00780d2806d00ca8029901f044fa00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f035fa0078402806d90ca8029901f02efa00785a280fd90ca8029901f027fa0078602800d858e10ca8029901f01ffa00787a2800d950e1029cbc4200db04e10ca8211c01f013fa0078402806d90ca8029901f00cfa00785a2823d90ca8029901f005fa0078602806d90ca8029901f0fef900787a2815d90ca8029901f0f7f900782f2806d90ca8029901f0f0f90078392807d90ca8029901f0e9f900785f2800d0d2e0029cbc4243da0ca8211c01f0def90078402806d90ca8029901f0d7f900785a2822d90ca8029901f0d0f90078602806d90ca8029901f0c9f900787a2814d90ca8029901f0c2f900782f2806d90ca8029901f0bbf90078392806d90ca8029901f0b4f900785f2812d1464510da311c0136484601f084f9039002990c1c013402940ca801f0a2f90078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f094f900783a2800d074e70ca8514601f08cf900783a2800d06ce7464500db69e7311c0136484601f05af95c210180029c02340294bc4266da0ca8211c01f075f90078402806d90ca8029901f06ef900785a280fd90ca8029901f067f90078602800d847e70ca8029901f05ff900787a2800d93fe7029cbc4245da0ca8211c01f054f90078402806d90ca8029901f04df900785a2823d90ca8029901f046f90078602806d90ca8029901f03ff900787a2815d90ca8029901f038f900782f2806d90ca8029901f031f90078392807d90ca8029901f02af900785f2800d00ae7464500db07e7311c0136484601f0f8f8039002990c1c013402940ca801f016f90078039c2080b6e7029cbc4244da0ca8211c01f00bf9007820281bd00ca8029901f004f90078092814d00ca8029901f0fdf800780a280dd00ca8029901f0f6f800780d2806d00ca8029901f0eff800780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f0e1f800783b2813d1f01c404510da4846311c01f0ddf86c460449201c01f0b2f84846211c01f0daf8012002e01c1c0010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f0b0f88820c00068448424e4006c44216801f0adf8814601204c46c44200d1a1e040a88021490001f076f8c224a4006c44a0468422520040468821c900694401f09cf8484607303e9040ac3f94c6a96846f82201f092f844462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f087f8301c00f0f8fe8322d2006a44106051608321c9006944404601f07ff81d49404601f081f8381c01f048f8216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f00cf88424e4006c442060c2a8494601f02af800788424e4006c44256828800124a144e3e70000dcfbffff44040000481d0010dc200010311c0136381c00f0edff5c2101800024a146409800010009814515da311c0136381c00f0dfff8424e4006c44206040a8494600f0d7ff00888424e4006c44256828800124a144e4e7381c311c01e0381c002100f0f3ff044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f00cf8009001916d4602ac0e49201c00f0e0ff281c211c01f006f800280cd104ac0a49201c00f0d5ff0aa8211c00f0d7ff0121c84200d00126301c06b070bc08bc04b018470000581d00105c1d001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490000f082ff301c00f02bfecb22d2006a4410605160cd24e4006c44206800f026fecc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206800f058ff4c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216800f05aff0024a146c225ad006d44cd24e4006c442560206840a900f0fffdcd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694400f068ffcea96846f82200f063ff2068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002100f036ffc2ac201c40a900f0cffd201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920000f021ffc2ac84225200201cd121c900694400f018ff8620c00068443f90c5a96846fc2200f00fff2168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffff6c1d0010c82000100421001034040000f8220010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c00f0c8fe82a96846fc22520000f0c2fe7e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f038fd4046fff74dfb00282ad14046291c00f02ffd4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f098fe8621c90069446846f82200f091fe20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f047fe002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c0400008c1d0010e724e4006c441749201c00f023fe7ea8211c2a1c00f030fe7ea800f0dffe00281dd0a524e4006c4482229200201c291c00f04efea721c90069446846fc22520000f046fe2068084969440968a622d2006a441268054b6b441b6800f00dfa012007e00000b81d00102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f0a8fc8320c000684400f0a3fcc720c00068448021490000f0defd7ea8391c0022002300f09cfc381c002100f0c2fd0088402806d9381c002100f0bbfd00885a280dd9381c002100f0b4fd008860281cd9381c002100f0adfd00887a2815d8381c012100f0a6fd00883a280ed1381c022100f09ffd00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f023fc806900f0a2fc011c0a68201c126a00f0dcfb8320c0006844211c0022002300f054fca6256d0045442868002803d100f00afc1c302860574d6d4400215648684401606960a620400040440168281c3a1c002300f042fc061c002e00d0fde08420000168448021490000f0a3fd842109016944281c00f039fc061c281c00f03bfc002e00d0dde0444c6c4482229200201c391c00f088fd414969446846fc22520000f081fd20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f050fde7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f02dfdc5252d016d44e72636016e44842109016944194c6c4484225200201c00f01dfda620400040440068006841901449694468468222520000f010fd2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000004210010540c00001c040000f8220010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f0e1fc134969446846fc2200f0dbfc2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f082fc201c291c3a1c00f08ffc22e05c0c0000540c0000580c0000d01d0010c724e4006c44024d6d4402490ae00000a8110000f81d0010c724e4006c440f4d6d440f49281c00f05ffc201c291c321c3b1c00f06bfc201c00f014fd4446606a00280fd000f0defa816900290dd008688268081c032100f097fa06e0b0110000201e0010404600f055fb034b9d4408bc9846f0bc01bc0047b8110000f0b5071c0e1c1e4878611e48b8611e483860a42464003d192968002910d0786800f040fb2968002905d008688268081c032100f06bfaa4246400391900200860a62464003d192868002803d000f070fc00202860796a002905d008688268081c032100f053fa064878610648b86107483860381c311c00f0edfcf0bc01bc0047082300103c230010942100101421001084b030b51d4ca5449c909d919e929f9301200021002200f0abfc041c96a901a800f044fc002808d10090201c9ca90222002300f0a3fc00f03ffc96a80068002813d014a88021490000f0d4fb14ad97ac0b49201c00f0c2fb96a80268281c211c00f0cefb281c00f07dfc00f02bfc99239b009d4430bc08bc04b018479cfdffff6c1e001010b5094ca544041c68468022520000f01dfc201c6946fff7b7fd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f09bfa011c0a687ea8126a00f0d5f98026f6006e44301c00f049fa2949301c7eaa002300f049fac425ed006d44281c00f05ffa244c6c440021224868440160201c042100f05bfa301c00f05efa011c201c2a1c00f05ffa002824d1301c00f054fa011c8420000168448022520000f0cefb8521090169446846fc22520000f08afb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f050fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff441f0010480a000044080000480800004c0800004c0a000010b5a62464000019016010bc01bc0047f0b50c4ca544fb24e4006c44216007a88021490000f018fbfb24e4006c442468054d6019052800d9dee08000034940180068874624f8ffff00fcffffe4110010fc1100102c1200108c13001054120010041300101813001009490a4b03200090002201920420029003920493022005900120069007a80522092300f0ebfa73e0801f0010741f001001200021002200f099fb89aa131c054970c970c30321002300f09efb00f038fba1e00000c01e001000f04cf98569f924e4006c442349201c00f0b6fa22492f1c4037201c3a1c802300f08efb002800d189e08ca8c021490000f0eafa8cad281c391c00f029f901200021002200f066fb061c0c2000f080fa041c00f015fbfa22d2006a441149fa20c000684401605460fa20c00068444168006800f00bfb0c4820600c486060281c00f00cfba060301c0321221c002300f04ffb022000f008fb51e00000dc1e0010cc1e0010991700105c1d0010881e0010034907a800f076fa07a800f019fb3ee000200010eea88021490000f065fab820c00068448021490000f05efa1249134beeac032000900022019204200290039204930220059001200690201c0522092300f050fa201c00f0f3fa094800f0d2fab824e4006c440749201c00f043fa201c00f0e6fa0be00000801f0010741f001040420f00002000100120fef743fe024b9d44f0bc01bc0047dc07000030b5051c242000f0b5fa041c002c04d0291c00f031f903482060201c30bc02bc084700001422001070b5a820400000f0a1fa061c002e10d000f0f6fa094d7561094cb46109483060301c4030802100f0fdf97561b46106483060301c70bc02bc08470000082300103c2300101421001094210010f0b50d1c171c1c1c00f068f88669301c211cfff7b5fe002d05d03068026d301c391c00f01df80020f0bc02bc0847000010b58c20800000f069fa041c002c03d000f0befa02482060201c10bc02bc0847b4220010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c04654230010014b1b681847c04658230010014b1b681847c04650230010014b1b681847c0466023001040b4024e3668b44640bc60475c230010014b1b681847c04664230010014b1b681847c04674230010014b1b681847c04670230010014b1b681847c04668230010014b1b681847c0466c230010014b1b681847c04678230010014b1b681847c0467c230010014b1b681847c04690230010014b1b681847c04688230010014b1b681847c04698230010014b1b681847c046b0230010014b1b681847c046b823001040b4024e3668b44640bc6047ac23001040b4024e3668b44640bc6047a4230010014b1b681847c046a8230010014b1b681847c04680230010014b1b681847c046b4230010014b1b681847c04684230010014b1b681847c04694230010014b1b681847c0468c230010014b1b681847c046a0230010014b1b681847c0469c230010014b1b681847c046bc230010014b1b681847c046dc230010014b1b681847c0460c240010014b1b681847c04638240010014b1b681847c046e8230010014b1b681847c046c8230010014b1b681847c04630240010014b1b681847c046f8230010014b1b681847c046cc230010014b1b681847c046d8230010014b1b681847c04604240010014b1b681847c04620240010014b1b681847c04628240010014b1b681847c04618240010014b1b681847c046e0230010014b1b681847c046f4230010014b1b681847c046f0230010014b1b681847c04610240010014b1b681847c04614240010014b1b681847c0462c240010014b1b681847c0464024001040b4024e3668b44640bc604708240010014b1b681847c0460024001040b4024e3668b44640bc6047ec230010014b1b681847c04624240010014b1b681847c046c4230010014b1b681847c046e4230010014b1b681847c046c023001040b4024e3668b44640bc60471c240010014b1b681847c046d4230010014b1b681847c046d0230010014b1b681847c046fc230010014b1b681847c0463c240010014b1b681847c04634240010014b1b681847c04648240010014b1b681847c04644240010014b1b681847c04688240010014b1b681847c04674240010014b1b681847c04664240010014b1b681847c046b8240010014b1b681847c04668240010014b1b681847c046b024001040b4024e3668b44640bc60477c240010014b1b681847c046a0240010014b1b681847c04660240010014b1b681847c0469c240010014b1b681847c0465c240010014b1b681847c046b4240010014b1b681847c04678240010014b1b681847c0464c240010014b1b681847c046bc240010014b1b681847c04670240010014b1b681847c04658240010014b1b681847c04684240010014b1b681847c0466c240010014b1b681847c046c0240010014b1b681847c046a4240010014b1b681847c046a8240010014b1b681847c0468c240010014b1b681847c046ac240010014b1b681847c0468024001040b4024e3668b44640bc604798240010014b1b681847c04694240010014b1b681847c04690240010014b1b681847c04654240010014b1b681847c04650240010014b1b681847c046c4240010014b1b681847c046c8240010014b1b681847c046d8240010014b1b681847c046d0240010014b1b681847c046e8240010014b1b681847c046ec240010014b1b681847c046d424001040b4024e3668b44640bc6047e024001040b4024e3668b44640bc6047dc24001040b4024e3668b44640bc6047e4240010014b1b681847c046f0240010014b1b681847c046cc240010014b1b681847c0464c250010014b1b681847c046f4240010014b1b681847c04604250010014b1b681847c04628250010014b1b681847c04634250010014b1b681847c0463c250010014b1b681847c04640250010014b1b681847c04618250010014b1b681847c04608250010014b1b681847c04624250010014b1b681847c04610250010014b1b681847c04630250010014b1b681847c0462c25001040b4024e3668b44640bc604720250010014b1b681847c0461c250010014b1b681847c04644250010014b1b681847c04648250010014b1b681847c04614250010014b1b681847c046f8240010014b1b681847c046fc240010014b1b681847c04600250010014b1b681847c04674250010014b1b681847c04664250010014b1b681847c04670250010014b1b681847c0466c250010014b1b681847c04650250010014b1b681847c04660250010014b1b681847c04678250010014b1b681847c04668250010014b1b681847c04654250010014b1b681847c0467c250010014b1b681847c04658250010014b1b681847c0465c250010014b1b681847c0463825001040b4024e3668b44640bc60470c250010014b1b681847c046802500107047000000b5054a4261054a8261054a0260fff719ff01bc00470000082300103c2300101421001000b5fff7f5fd01bc0047000000b5fff7ddff01bc0047000000b5fff7d7ff01bc0047000010b581b0039c14380094fff79ffd01b010bc01bc0047000000b51438fff7b6ff01bc004700b51438fff798fd01bc004700b51838fff7b0ff02bc0847ffffffff00000000ffffffff00000000401f0010601f0010c8200010a82000102e0070006d0000001c1c00102e0070006c000000281c001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e00670020002500530000000000341c0010a01c0010c01c0010e01c0010fc1c00101c1c00107061636b61676500481d0010dc200010232100007065726c00000000581d00105c1d0010250053002500530025005300000000006c1d0010c820001004210010f82200105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f0000008c1d0010b81d00104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e006700200025005300000004210010f8220010d01d0010f81d0010201e0010082300103c23001014210010942100104500720072006f007200200025006400000000006c1e0010441f00102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d65000000005c1d0010881e00108c1e00100500000043006f00640065003a0000004f006e0065006c0069006e006500720000000000801f0010741f0010c01e0010dc1e0010cc1e0010991700105c1d0010881e001000200010e411001014220010082300103c230010142100109421001070220010b4220010082300103c23001014210010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000055004900510000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e330000000000000000000000002d1900102d1900100000000000000000791b0010e1190010ed190010f9190010051a0010fd14001009150010111a00101d1a0010291a0010351a0010411a001015150010a519001025160010f1160010b11900104d1a00100117001031160010591a0010691a00103d160010751a0010811a00108d1a0010991a0010a51a0010b11a00102d1900100000000000000000690f0010e1190010ed190010f9190010051a0010fd14001009150010111a00101d1a0010291a0010351a0010411a001015150010a519001025160010a9100010b11900104d1a00107d10001031160010591a0010691a00103d160010751a0010811a00108d1a0010991a0010a51a0010b11a0010a511001000000000000000009d1b00104916001055160010a5140010611600106d160010791600108516001091160010751b00109d160010a9160010b1140010bd140010b5160010c1160010cd160010c913001015140010d9160010e51600100000000000000000a91b0010bd1a0010c91a00102d190010d51a0010e11a0010ed1a0010f91a0010051b0010111b00101d1b0010291b00102d190010351b0010411b00100000000000000000b51b0010bd1a0010c91a00100d000010d51a0010e11a0010ed1a0010f91a0010051b0010111b00101d1b0010291b0010a1130010351b0010411b00100000000000000000dd150010e9150010ecffffff00000000d91b00102917001035170010411700104d1700105d17001069170010c11b001075170010e51b001081170010e8ffffff00000000f11b0010211500102d150010060000001b00000047000000110000002900000004000000520000006000000065000000df000000ff000000000100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e6000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd0000000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b0600000600000008000000090000000b0000004c000000800500008305000084050000b0050000d1050000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a80100000000000045140000500300008802000003000000060000001b000000470000009d020000020000001100000029000000b00200000100000004000000c702000006000000520000006000000065000000df000000ff00000000010000da0200000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e6000000ee02000022000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd000000040300000200000003000000060000001903000020000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b0600002d0300000a0000000600000008000000090000000b0000004c000000800500008305000084050000b0050000d10500003903000024000000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a80100004150504152435b31303030336133645d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0051494b43544c5b31303030356663395d2e444c4c0000002403000083010000000000004800000014302830bc3050318831c0317c32803284328832b4327c36dc37e037ac38b038543a583a5c3a643a7c3be43b543e603ee83e003f4c3fe83fec3ff03ff43f000000100000d001000078307c31e031e431e831ec31f031f431f831243228325032f032f432f832fc32003314337c3380338833c433043408340c3410346434ac34b834c434d034e034ec34f834043510351c352835343540354c35583564357035803590359c35a835b435c035cc35d835e435f035fc350836143620362c363836443650365c366836743680368c369836a436b036bc36c836d436e036ec36fc3608371837243730373c3748375837643770377c3788379437a037ac37b837c437d037dc37e837f437043810381c382838343840384c385838643870387c3888389438a038ac38b838c438d038dc38ec38f838043910391c392839343940394c3958396439703980399039a039ac39b839c439d039dc39e839f439003a0c3a183a243a303a3c3a483a543a643a703a7c3a883a943aa03aac3ab83ac43ad03adc3ae83af43a003b0c3b183b243b303b3c3b483b543b643b703b903b943b983b0c3c103c143c183c243c303c303d343d383d3c3d403d443d503d543d643d683d7c3d803d843d883dc83dcc3d483e4c3e503e543e583e5c3e603e643e683e803e843ec03ec43ec83ef03ef43ef83efc3e003f043f083f0c3f103f143f183f1c3f203f243f283f2c3f303f343f383f3c3f0000002000000c0100000c3110311c312031243128312c313031343138313c314031443148314c315031543158315c316031643168316c317031743178317c318031843188318c3190319c31a031a431a831ac31b031b431b831bc31c031c431c831cc31d031d431d831dc31e031e431e831ec31f031f431f831fc310032043208320c3210321c322032243228322c323032343238323c324032443248324c325032543258325c326032643268326c3278327c328032843288328c329032943298329c32a032a432a832ac32b032bc32c032c432c832cc32d032d432d832dc32e032e432e832ec32f032f432003304331033143318331c332033243328332c33303334333833443348334c330000
-__APP__
-  }
-
-  # This is Symbian application resource skeleton.
-  # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
-  # by compiling the PerlApp.cpp.
-  # The following resource has been compiled using the UIQ 2.1 SDK
-  # for CodeWarrior.
-  # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
-  if ($Variant eq 'UIQ') {
-    $RSCHEX = <<__RSC__;
-6b4a1f10000000005fde04001ca360de019a00f8030400000001f0e54d0000000004f0e54d04f0e54d0000000000000000000000000007010005f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0400000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000000050100000005055469746c6511460014000000000064b0f30001000200060650726f6d707411000800000000000000000a0001008000000005000000000d0d4f4b202f2043616e63656c203f0e460014000000000008f0e54d00000015010000000200feff00000000000000000000000002024f6b1a00ffffffff000000000101ffff000000000000000000000000060643616e63656c0b00ffffffff0000000001010005000000000a0a596573202f204e6f203f0e46001400000000000af0e54d00000015010000000200feff00000000000000000000000003035965732900ffffffff000000000101ffff000000000000000000000000024e006f0000ffffffff00000000010115001d001d0035005800de0016013a018201a301e801
-__RSC__
-  }
-}
diff --git a/symbian/symbian_dll.cpp b/symbian/symbian_dll.cpp
deleted file mode 100644 (file)
index a1e61a4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *     symbian_dll.cpp
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#define SYMBIAN_DLL_CPP
-#include <e32base.h>
-#include "PerlBase.h"
-
-#ifdef __SERIES60_3X__ 
-EXPORT_C GLDEF_C TInt E32Dll(/*TDllReason aReason*/) { return KErrNone; }
-#else
-EXPORT_C GLDEF_C TInt E32Dll(TDllReason /*aReason*/) { return KErrNone; }
-#endif
-
-extern "C" {
-    EXPORT_C void* symbian_get_vars(void)         { return Dll::Tls(); }
-    EXPORT_C void  symbian_set_vars(const void *p) { Dll::SetTls((TAny*)p); }
-    EXPORT_C void  symbian_unset_vars(void)       { Dll::SetTls(0); }
-}
-
diff --git a/symbian/symbian_proto.h b/symbian/symbian_proto.h
deleted file mode 100644 (file)
index 7226663..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *     symbian_proto.h
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#ifndef SYMBIAN_PROTO_H
-#define SYMBIAN_PROTO_H
-
-#include <sys/types.h>
-#include <sys/times.h>
-
-#if defined(PERL_CORE) || defined(PERL_EXT)
-
-/* We can't include the <string.h> unconditionally
- * since it has prototypes conflicting with the gcc builtins. */
-extern void  *memchr(const void *s, int c, size_t n);
-#ifndef PERL_IN_DL_SYMBIAN_XS
-/* dl_symbian.xs needs to see the C++ prototype of memset() instead */
-extern void  *memset(void *s, int c, size_t n);
-extern size_t strlen(const char *s);
-#endif
-extern void  *memmove(void *dst, const void *src, size_t n);
-extern char  *strcat(char *dst, const char *src);
-extern char  *strchr(const char *s, int c);
-extern char  *strerror(int errnum);
-extern int    strncmp(const char *s1, const char *s2, size_t n);
-extern char  *strrchr(const char *s, int c);
-
-extern int setmode(int fd, long flags);
-
-#ifndef __GNUC__
-#define memcpy _e32memcpy /* GCC intrinsic */
-extern void  *memcpy(const void *s1, const void *s2, size_t n);
-extern int    strcmp(const char *s1, const char *s2);
-extern char*  strcpy(char *dst, const char *src);
-extern char*  strncpy(char *dst, const char *src, size_t n);
-#endif
-
-#endif /* PERL_CORE || PERL_EXT */
-
-#if defined(SYMBIAN_DLL_CPP) || defined(SYMBIAN_UTILS_CPP) || defined(PERLBASE_CPP) || defined(PERLUTIL_CPP)
-#  define PERL_SYMBIAN_START_EXTERN_C extern "C" {
-#  define PERL_SYMBIAN_IMPORT_C       IMPORT_C /* Declarations have IMPORT_C, definitions have EXPORT_C. */
-#  define PERL_SYMBIAN_END_EXTERN_C   }
-#else
-#  define PERL_SYMBIAN_START_EXTERN_C
-#  define PERL_SYMBIAN_IMPORT_C
-#  define PERL_SYMBIAN_END_EXTERN_C
-#endif
-
-PERL_SYMBIAN_START_EXTERN_C
-PERL_SYMBIAN_IMPORT_C int   symbian_sys_init(int *argcp, char ***argvp);
-PERL_SYMBIAN_IMPORT_C void  init_os_extras(void);
-PERL_SYMBIAN_IMPORT_C void* symbian_get_vars(void);
-PERL_SYMBIAN_IMPORT_C void  symbian_set_vars(const void *);
-PERL_SYMBIAN_IMPORT_C void  symbian_unset_vars(void);
-PERL_SYMBIAN_IMPORT_C SSize_t symbian_read_stdin(const int fd, char *b, int n);
-PERL_SYMBIAN_IMPORT_C SSize_t symbian_write_stdout(const int fd, const char *b, int n);
-PERL_SYMBIAN_IMPORT_C char* symbian_get_error_string(const int error);
-PERL_SYMBIAN_IMPORT_C void symbian_sleep_usec(const long usec);
-PERL_SYMBIAN_IMPORT_C int symbian_get_cpu_time(long* sec, long* usec);
-PERL_SYMBIAN_IMPORT_C clock_t symbian_times(struct tms* buf);
-PERL_SYMBIAN_IMPORT_C int symbian_usleep(unsigned int usec);
-PERL_SYMBIAN_IMPORT_C int symbian_do_aspawn(void* vreally, void *vmark, void* sp);
-PERL_SYMBIAN_IMPORT_C int symbian_do_spawn(const char* command);
-PERL_SYMBIAN_IMPORT_C int symbian_do_spawn_nowait(const char* command);
-PERL_SYMBIAN_END_EXTERN_C
-
-#endif /* !SYMBIAN_PROTO_H */
-
diff --git a/symbian/symbian_stubs.c b/symbian/symbian_stubs.c
deleted file mode 100644 (file)
index 314bd57..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *     symbian_stubs.c
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "symbian_stubs.h"
-
-static int   setENOSYS(void)     { errno = ENOSYS; return -1; }
-
-uid_t getuid(void)       { return setENOSYS(); }
-gid_t getgid(void)       { return setENOSYS(); }
-uid_t geteuid(void)      { return setENOSYS(); }
-gid_t getegid(void)      { return setENOSYS(); }
-
-int setuid(uid_t uid)  { return setENOSYS(); }
-int setgid(gid_t gid)  { return setENOSYS(); }
-int seteuid(uid_t uid) { return setENOSYS(); }
-int setegid(gid_t gid) { return setENOSYS(); }
-
-int execv(const char* path, char* const argv [])  { return setENOSYS(); }
-int execvp(const char* path, char* const argv []) { return setENOSYS(); }
-
-#ifndef USE_PERLIO
-FILE *popen(const char *command, const char *mode) { return 0; }
-int   pclose(FILE *stream) { return setENOSYS(); }
-#endif
-int   pipe(int fd[2]) { return setENOSYS(); }
-
-int setmode(int fd, long flags) { return -1; }
-
-_sig_func_ptr signal(int signum, _sig_func_ptr handler) { return (_sig_func_ptr)setENOSYS(); }
-int   kill(pid_t pid, int signum) { return setENOSYS(); }
-pid_t wait(int *status) { return setENOSYS(); }
-
-#if PERL_VERSION <= 8
-void Perl_my_setenv(pTHX_ char *var, char *val) { }
-#else
-void Perl_my_setenv(pTHX_ const char *var, const char *val) { }
-#endif
-
-bool Perl_do_exec(pTHX_ const char *cmd) { return FALSE; }
-bool Perl_do_exec3(pTHX_ const char *cmd, int fd, int flag) { return FALSE; }
-
-int Perl_do_spawn(pTHX_ char *cmd) { return symbian_do_spawn(cmd); }
-int Perl_do_aspawn(pTHX_ SV *really, SV** mark, SV **sp) { return symbian_do_aspawn(really, mark, sp); }
-
-static const struct protoent protocols[] = {
-    { "tcp",   0,       6 },
-    { "udp",   0,      17 }
-};
-
-/* The protocol field (the last) is left empty to save both space
- * and time because practically all services have both tcp and udp
- * allocations in IANA. */
-static const struct servent services[] = {
-    { "http",          0,        80,   0 }, /* Optimization. */
-    { "https",         0,       443,   0 },
-    { "imap",          0,       143,   0 },
-    { "imaps",         0,       993,   0 },
-    { "smtp",          0,        25,   0 },
-    { "irc",           0,       194,   0 },
-
-    { "ftp",           0,        21,   0 },
-    { "ssh",           0,        22,   0 },
-    { "tftp",          0,        69,   0 },
-    { "pop3",          0,       110,   0 },
-    { "sftp",          0,       115,   0 },
-    { "nntp",          0,       119,   0 },
-    { "ntp",           0,       123,   0 },
-    { "snmp",          0,       161,   0 },
-    { "ldap",          0,       389,   0 },
-    { "rsync",         0,       873,   0 },
-    { "socks",         0,      1080,   0 }
-};
-
-struct protoent* getprotobynumber(int number) {
-    int i;
-    for (i = 0; i < sizeof(protocols)/sizeof(struct protoent); i++)
-        if (protocols[i].p_proto == number)
-            return (struct protoent*)(&(protocols[i]));
-    return 0;
-}
-
-struct protoent* getprotobyname(const char* name) {
-    int i;
-    for (i = 0; i < sizeof(protocols)/sizeof(struct protoent); i++)
-        if (strEQ(name, protocols[i].p_name))
-            return (struct protoent*)(&(protocols[i]));
-    return 0;
-}
-    
-struct servent* getservbyname(const char* name, const char* proto) {
-    int i;
-    for (i = 0; i < sizeof(services)/sizeof(struct servent); i++)
-        if (strEQ(name, services[i].s_name))
-            return (struct servent*)(&(services[i]));
-    return 0;
-}
-
-struct servent* getservbyport(int port, const char* proto) {
-    int i;
-    for (i = 0; i < sizeof(services)/sizeof(struct servent); i++)
-        if (services[i].s_port == port)
-            return (struct servent*)(&(services[i]));
-    return 0;
-}
-
diff --git a/symbian/symbian_stubs.h b/symbian/symbian_stubs.h
deleted file mode 100644 (file)
index ab6b961..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- *     symbian_stubs.h
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#ifndef PERL_SYMBIAN_STUBS_H
-#define PERL_SYMBIAN_STUBS_H
-
-int execv(const char* path, char* const argv []);
-int execvp(const char* path, char* const argv []);
-
-#ifndef USE_PERLIO
-FILE *popen(const char *command, const char *mode);
-int   pclose(FILE *stream);
-#endif
-int   pipe(int fd[2]);
-
-#endif /* PERL_SYMBIAN_STUBS_H */
-
diff --git a/symbian/symbian_utils.cpp b/symbian/symbian_utils.cpp
deleted file mode 100644 (file)
index 9749361..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- *      symbian_utils.cpp
- *
- *      Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#define SYMBIAN_UTILS_CPP
-#include <e32base.h>
-#include <e32std.h>
-#include <utf.h>
-#include <hal.h>
-
-#include <eikenv.h>
-
-#include <string.h>
-#include <ctype.h>
-
-#include "PerlUi.h"
-#include "PerlBase.h"
-#include "PerlUtil.h"
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-extern "C" {
-    EXPORT_C int symbian_sys_init(int *argcp, char ***argvp)
-    {
-#ifdef PERL_GLOBAL_STRUCT /* Avoid unused variable warning. */
-        dVAR;
-#endif
-        (void)times(&PL_timesbase);
-        return 0;
-    }
-    XS(XS_PerlApp_TextQuery) // Can't be made static because of XS().
-    {
-        dXSARGS;
-       if (items != 0)
-           Perl_croak(aTHX_ "PerlApp::TextQuery: no arguments, please");
-       SP -= items;
-       // TODO: parse arguments for title, prompt, and maxsize.
-       // Suggested syntax:
-       // TextQuery(title => ..., prompt => ..., maxsize => ...)
-       // For an example see e.g. universal.c:XS_PerlIO_get_layers().
-       _LIT(KTitle,  "Title");
-       _LIT(KPrompt, "Prompt");
-        HBufC* cData = HBufC::New(KPerlUiOneLinerSize);
-       TBool cSuccess = EFalse;
-       if (cData) {
-           TPtr cPtr(cData->Des());
-           if (CPerlUi::TextQueryDialogL(KTitle,
-                                         KPrompt,
-                                         cPtr,
-                                         KPerlUiOneLinerSize)) {
-               ST(0) = sv_2mortal(PerlUtil::newSvPVfromTDesC16(*cData));
-               cSuccess = ETrue;
-           }
-           delete cData;
-       }
-       if (cSuccess)
-           XSRETURN(1);
-       else
-           XSRETURN_UNDEF;
-    }
-    EXPORT_C void init_os_extras(void)
-    {
-        dTHX;
-       char *file = __FILE__;
-       dXSUB_SYS;
-       newXS("PerlApp::TextQuery", XS_PerlApp_TextQuery, file);
-    }
-    EXPORT_C SSize_t symbian_read_stdin(const int fd, char *b, int n)
-    {
-#ifdef PERL_GLOBAL_STRUCT /* Avoid unused variable warning. */
-        dVAR;
-#endif
-        if(!PL_appctx)
-               ((CPerlBase*)PL_appctx) = CPerlBase::NewInterpreter();
-        return ((CPerlBase*)PL_appctx)->ConsoleRead(fd, b, n);
-    }
-    EXPORT_C SSize_t symbian_write_stdout(const int fd, const char *b, int n)
-    {
-#ifdef PERL_GLOBAL_STRUCT /* Avoid unused variable warning. */
-        dVAR;
-#endif
-        if(!PL_appctx)
-               ((CPerlBase*)PL_appctx) = CPerlBase::NewInterpreter();
-        return ((CPerlBase*)PL_appctx)->ConsoleWrite(fd, b, n);
-    }
-    static const char NullErr[] = "";
-    EXPORT_C char* symbian_get_error_string(TInt error)
-    {
-       // CTextResolver seems to be unreliable, so we roll our own
-        // at least for the basic Symbian errors (this does not cover
-        // the various subsystems).
-        dTHX;
-        if (error >= 0)
-            return strerror(error);
-       error = -error; // flip
-       const TInt KErrStringMax = 256;
-       typedef struct {
-         const char* kerr;
-         const char* desc;
-       } kerritem;
-       static const kerritem kerrtable[] = {
-         { "None",           /*    0 */ "No error"},
-         { "NotFound",       /*   -1 */ "Unable to find the specified object"},
-         { "General",        /*   -2 */ "General (unspecified) error"},
-         { "Cancel",         /*   -3 */ "The operation was cancelled"},
-         { "NoMemory",       /*   -4 */ "Not enough memory"},
-         { "NotSupported",   /*   -5 */ "The operation requested is not supported"},
-         { "Argument",       /*   -6 */ "Bad request"},
-         { "TotalLossOfPrecision",
-                             /*   -7 */ "Total loss of precision"},
-         { "BadHandle",      /*   -8 */ "Bad object"},
-         { "Overflow",       /*   -9 */ "Overflow"},
-         { "Underflow",      /*  -10 */ "Underflow"},
-         { "AlreadyExists",  /*  -11 */ "Already exists"},
-         { "PathNotFound",   /*  -12 */ "Unable to find the specified folder"},
-         { "Died",           /*  -13 */ "Closed"},
-         { "InUse",          /*  -14 */
-           "The specified object is currently in use by another program"},
-         { "ServerTerminated",       /*  -15 */ "Server has closed"},
-         { "ServerBusy",     /*  -16 */ "Server busy"},
-         { "Completion",     /*  -17 */ "Completion error"},
-         { "NotReady",       /*  -18 */ "Not ready"},
-         { "Unknown",        /*  -19 */ "Unknown error"},
-         { "Corrupt",        /*  -20 */ "Corrupt"},
-         { "AccessDenied",   /*  -21 */ "Access denied"},
-         { "Locked",         /*  -22 */ "Locked"},
-         { "Write",          /*  -23 */ "Failed to write"},
-         { "DisMounted",     /*  -24 */ "Wrong disk present"},
-         { "Eof",            /*  -25 */ "Unexpected end of file"},
-         { "DiskFull",       /*  -26 */ "Disk full"},
-         { "BadDriver",      /*  -27 */ "Bad device driver"},
-         { "BadName",        /*  -28 */ "Bad name"},
-         { "CommsLineFail",  /*  -29 */ "Comms line failed"},
-         { "CommsFrame",     /*  -30 */ "Comms frame error"},
-         { "CommsOverrun",   /*  -31 */ "Comms overrun error"},
-         { "CommsParity",    /*  -32 */ "Comms parity error"},
-         { "TimedOut",       /*  -33 */ "Timed out"},
-         { "CouldNotConnect",/*  -34 */ "Failed to connect"},
-         { "CouldNotDisconnect",
-                             /* -35 */ "Failed to disconnect"},
-         { "Disconnected",   /* -36 */ "Disconnected"},
-         { "BadLibraryEntryPoint",
-                             /*  -37 */ "Bad library entry point"},
-         { "BadDescriptor",  /*  -38 */ "Bad descriptor"},
-         { "Abort",          /*  -39 */ "Interrupted"},
-         { "TooBig",         /*  -40 */ "Too big"},
-         { "DivideByZero",   /*  -41 */ "Divide by zero"},
-         { "BadPower",       /*  -42 */ "Batteries too low"},
-         { "DirFull",        /*  -43 */ "Folder full"},
-         { "KErrHardwareNotAvailable",
-                             /*  -44 */ "Hardware is not available"},
-         { "SessionClosed",  /*  -45 */ "Session was closed"},
-         { "PermissionDenied",
-                             /*  -46 */ "Permission denied"}
-       };
-       const TInt n = sizeof(kerrtable) / sizeof(kerritem *);
-       TBuf8<KErrStringMax> buf8;
-       if (error >= 0 && error < n) {
-         const char *kerr = kerrtable[error].kerr;
-         const char *desc = kerrtable[error].desc;
-         const TPtrC8 kerrp((const unsigned char *)kerr, strlen(kerr));
-         const TPtrC8 descp((const unsigned char *)desc, strlen(desc));
-         TBuf8<KErrStringMax> ckerr;
-         TBuf8<KErrStringMax> cdesc;
-         ckerr.Copy(kerrp);
-         cdesc.Copy(descp);
-         buf8.Format(_L8("K%S (%d) %S"), &ckerr, error, &cdesc);
-                    
-       } else {
-         buf8.Format(_L8("Symbian error %d"), error);
-       }
-        SV* sv = Perl_get_sv(aTHX_ "\005", TRUE); /* $^E or ${^OS_ERROR} */
-        if (!sv)
-            return (char*)NullErr;
-        sv_setpv(sv, (const char *)buf8.PtrZ());
-        return SvPV_nolen(sv);
-    }
-    EXPORT_C void symbian_sleep_usec(const long usec)
-    {
-        User::After((TTimeIntervalMicroSeconds32) usec);
-    }
-#define PERL_SYMBIAN_CLK_TCK 100
-    EXPORT_C int symbian_get_cpu_time(long* sec, long* usec)
-    {
-        // The RThread().GetCpuTime() does not seem to work?
-        // (it always returns KErrNotSupported)
-        // TTimeIntervalMicroSeconds ti;
-        // TInt err = me.GetCpuTime(ti);
-        dTHX;
-        TInt periodus; /* tick period in microseconds */
-        if (HAL::Get(HALData::ESystemTickPeriod, periodus) != KErrNone)
-            return -1;
-        TUint  tick   = User::TickCount();
-        if (PL_timesbase.tms_utime == 0) {
-            PL_timesbase.tms_utime = tick;
-            PL_clocktick = PERL_SYMBIAN_CLK_TCK;
-        }
-        tick -= PL_timesbase.tms_utime;
-        TInt64 tickus = TInt64(tick) * TInt64(periodus);
-        TInt64 tmps   = tickus / 1000000;
-#ifdef __SERIES60_3X__
-        if (sec)  *sec  = I64LOW(tmps);
-        if (usec) *usec = I64LOW(tickus) - I64LOW(tmps) * 1000000;
-#else
-        if (sec)  *sec  = tmps.Low();
-        if (usec) *usec = tickus.Low() - tmps.Low() * 1000000;
-#endif //__SERIES60_3X__
-        return 0;
-    }
-    EXPORT_C int symbian_usleep(unsigned int usec)
-    {
-        if (usec >= 1000000) {
-            errno = EINVAL;
-            return -1;
-        }
-        symbian_sleep_usec((const long) usec);
-        return 0;
-    }
-#define SEC_USEC_TO_CLK_TCK(s, u) \
-        (((s) * PERL_SYMBIAN_CLK_TCK) + (u / (1000000 / PERL_SYMBIAN_CLK_TCK)))
-    EXPORT_C clock_t symbian_times(struct tms *tmsbuf) 
-    {
-        long s, u;
-        if (symbian_get_cpu_time(&s, &u) == -1) {
-            errno = EINVAL;
-            return -1;
-        } else {
-            tmsbuf->tms_utime  = SEC_USEC_TO_CLK_TCK(s, u);
-            tmsbuf->tms_stime  = 0;
-            tmsbuf->tms_cutime = 0;
-            tmsbuf->tms_cstime = 0;
-            return tmsbuf->tms_utime;
-        }
-    }
-    class CProcessWait : public CActive
-    {
-    public:
-        CProcessWait() : CActive(EPriorityStandard) {
-          CActiveScheduler::Add(this);
-        }
-#ifdef __WINS__
-        TInt Wait(RThread& aProcess)
-#else
-        TInt Wait(RProcess& aProcess)
-#endif
-        {
-            aProcess.Logon(iStatus);
-            aProcess.Resume();
-            SetActive();
-            CActiveScheduler::Start();
-            return iStatus.Int();
-        }
-    private:
-      void DoCancel() {;}
-      void RunL() {
-          CActiveScheduler::Stop();
-      }
-    };
-    class CSpawnIoRedirect : public CBase
-    {
-    public:
-        CSpawnIoRedirect();
-        // NOTE: there is no real implementation of I/O redirection yet.
-    protected:
-    private:
-    };
-    CSpawnIoRedirect::CSpawnIoRedirect()
-    {
-    }
-    typedef enum {
-        ESpawnNone = 0x00000000,
-        ESpawnWait = 0x00000001
-    } TSpawnFlag;
-    static int symbian_spawn(const TDesC& aFilename,
-                             const TDesC& aCommand,
-                             const TSpawnFlag aFlag,
-                             const CSpawnIoRedirect& aIoRedirect) {
-        TInt error = KErrNone;
-#ifdef __WINS__
-        const TInt KStackSize = 0x1000;
-        const TInt KHeapMin   = 0x1000;
-        const TInt KHeapMax   = 0x100000;
-        RThread proc;
-        RLibrary lib;
-        HBufC* command = aCommand.Alloc();
-        error = lib.Load(aFilename);
-        if (error == KErrNone) {
-            TThreadFunction func = (TThreadFunction)(lib.Lookup(1));
-            if (func)
-                error = proc.Create(aFilename,
-                                    func,
-                                    KStackSize,
-#ifdef __SERIES60_3X__                                    
-                                    KHeapMin,
-                                    KHeapMax,
-                                    (TAny*)command,
-#else
-                                    (TAny*)command,
-                                    &lib,
-                                    RThread().Heap(),
-                                    KHeapMin,
-                                    KHeapMax,
-#endif                                    
-                                    EOwnerProcess);
-            else
-                error = KErrNotFound;
-            lib.Close();
-        }
-        else
-            delete command;
-#else
-        RProcess proc;
-        error = proc.Create(aFilename, aCommand);
-#endif
-        if (error == KErrNone) {
-            if ((TInt)aFlag & (TInt)ESpawnWait) {
-              CProcessWait* w = new CProcessWait();
-              if (w) {
-                  error = w->Wait(proc);
-                  delete w;
-              } else
-                  error = KErrNoMemory;
-            } else
-                proc.Resume();
-            proc.Close();
-        }
-        return error;
-    }
-    static int symbian_spawner(const char *command, TSpawnFlag aFlags)
-     {
-        TBuf<KMaxFileName> aFilename;
-        TBuf<KMaxFileName> aCommand;
-        TSpawnFlag aSpawnFlags = ESpawnWait;
-        CSpawnIoRedirect iord;
-        char *p = (char*)command;
-
-        // The recognized syntax is: "cmd [args] [&]".  Since one
-        // cannot pass more than (an argv[0] and) an argv[1] to a
-        // Symbian process anyway, not much is done to the cmd or
-        // the args, only backslash quoting.
-
-        // Strip leading whitespace.
-        while (*p && isspace(*p)) p++;
-        if (*p) {
-            // Build argv[0].
-            while (*p && !isspace(*p) && *p != '&') {
-                if (*p == '\\') {
-                    if (p[1]) {
-                        aFilename.Append(p[1]);
-                        p++;
-                    }
-                    
-                }
-                else
-                    aFilename.Append(*p);
-                p++;
-            }
-
-            if (*p) {
-                // Skip whitespace between argv[0] and argv[1].
-                while(*p && isspace(*p)) p++;
-                // Build argv[1].
-                if (*p) {
-                    char *a = p;
-                    char *b = p + 1;
-
-                    while (*b) b++;
-                    if (isspace(b[-1])) {
-                        b--;
-                        while (b > a && isspace(*b)) b--;
-                        b++;
-                    }
-                    if (b > a && b[-1] == '&') {
-                        // Parse backgrounding in any case,
-                        // but turn it off only if wanted.
-                        if ((aFlags & ESpawnWait))
-                          aSpawnFlags =
-                            (TSpawnFlag) (aSpawnFlags & ~ESpawnWait);
-                        b--;
-                        if (isspace(b[-1])) {
-                            b--;
-                            while (b > a && isspace(*b)) b--;
-                            b++;
-                        }
-                    }
-                    for (p = a; p < b; p++) {
-                        if (*p == '\\') {
-                            if (p[1])
-                                aCommand.Append(p[1]);
-                            p++;
-                        }
-                        else
-                            aCommand.Append(*p);
-                    }
-                }
-                // NOTE: I/O redirection is not yet done.
-                // Implementing that may require a separate server.
-            }
-        }
-        int spawned = symbian_spawn(aFilename, aCommand, aSpawnFlags, iord);
-        return spawned == KErrNone ? 0 : -1;
-    }
-    EXPORT_C int symbian_do_spawn(const char *command)
-    {
-        return symbian_spawner(command, ESpawnWait);
-    }
-    EXPORT_C int symbian_do_spawn_nowait(const char *command)
-    {
-        return symbian_spawner(command, ESpawnNone);
-    }
-    EXPORT_C int symbian_do_aspawn(void* vreally, void* vmark, void* sp)
-    {
-        return -1;
-    }
-}
-
diff --git a/symbian/symbianish.h b/symbian/symbianish.h
deleted file mode 100644 (file)
index 3b0ddb3..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- *     symbianish.h
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#include "symbian/symbian_port.h"
-
-/*
- * The following symbols are defined if your operating system supports
- * functions by that name.  All Unixes I know of support them, thus they
- * are not checked by the configuration script, but are directly defined
- * here.
- */
-
-#ifndef PERL_MICRO
-
-/* HAS_IOCTL:
- *     This symbol, if defined, indicates that the ioctl() routine is
- *     available to set I/O characteristics
- */
-#define        HAS_IOCTL               / **/
-
-/* HAS_UTIME:
- *     This symbol, if defined, indicates that the routine utime() is
- *     available to update the access and modification times of files.
- */
-/* #define HAS_UTIME           / **/
-
-/* HAS_GROUP
- *     This symbol, if defined, indicates that the getgrnam() and
- *     getgrgid() routines are available to get group entries.
- *     The getgrent() has a separate definition, HAS_GETGRENT.
- */
-#undef HAS_GROUP               /**/
-
-/* HAS_PASSWD
- *     This symbol, if defined, indicates that the getpwnam() and
- *     getpwuid() routines are available to get password entries.
- *     The getpwent() has a separate definition, HAS_GETPWENT.
- */
-#undef HAS_PASSWD              /**/
-
-#undef HAS_KILL
-#undef HAS_WAIT
-
-#endif /* !PERL_MICRO */
-
-/* USEMYBINMODE
- *     This symbol, if defined, indicates that the program should
- *     use the routine my_binmode(FILE *fp, char iotype) to insure
- *     that a file is in "binary" mode -- that is, that no translation
- *     of bytes occurs on read or write operations.
- */
-#undef USEMYBINMODE
-
-/* Stat_t:
- *     This symbol holds the type used to declare buffers for information
- *     returned by stat().  It's usually just struct stat.  It may be necessary
- *     to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
- *     information.
- */
-#define Stat_t struct stat
-
-/* USE_STAT_RDEV:
- *     This symbol is defined if this system has a stat structure declaring
- *     st_rdev
- */
-#define USE_STAT_RDEV  /**/
-
-/* ACME_MESS:
- *     This symbol, if defined, indicates that error messages should be
- *     should be generated in a format that allows the use of the Acme
- *     GUI/editor's autofind feature.
- */
-#undef ACME_MESS       /**/
-
-/* UNLINK_ALL_VERSIONS:
- *     This symbol, if defined, indicates that the program should arrange
- *     to remove all versions of a file if unlink() is called.  This is
- *     probably only relevant for VMS.
- */
-/* #define UNLINK_ALL_VERSIONS         / **/
-
-/* VMS:
- *     This symbol, if defined, indicates that the program is running under
- *     VMS.  It is currently automatically set by cpps running under VMS,
- *     and is included here for completeness only.
- */
-/* #define VMS         / **/
-
-/* ALTERNATE_SHEBANG:
- *     This symbol, if defined, contains a "magic" string which may be used
- *     as the first line of a Perl program designed to be executed directly
- *     by name, instead of the standard Unix #!.  If ALTERNATE_SHEBANG
- *     begins with a character other then #, then Perl will only treat
- *     it as a command line if it finds the string "perl" in the first
- *     word; otherwise it's treated as the first line of code in the script.
- *     (IOW, Perl won't hand off to another interpreter via an alternate
- *     shebang sequence that might be legal Perl code.)
- */
-/* #define ALTERNATE_SHEBANG "#!" / **/
-
-#include <signal.h>
-#define ABORT() abort()
-
-/*
- * fwrite1() should be a routine with the same calling sequence as fwrite(),
- * but which outputs all of the bytes requested as a single stream (unlike
- * fwrite() itself, which on some systems outputs several distinct records
- * if the number_of_items parameter is >1).
- */
-#define fwrite1 fwrite
-
-#define Stat(fname,bufptr) stat((fname),(bufptr))
-#define Fstat(fd,bufptr)   fstat((fd),(bufptr))
-#define Fflush(fp)         fflush(fp)
-#define Mkdir(path,mode)   mkdir((path),(mode))
-
-#ifndef PERL_SYS_TERM_BODY
-#define PERL_SYS_TERM_BODY()   HINTS_REFCNT_TERM; OP_REFCNT_TERM;          \
-                               PERLIO_TERM; MALLOC_TERM; CloseSTDLIB();    \
-                                LOCALE_TERM; ENV_TERM;
-
-#endif
-
-#define BIT_BUCKET "NUL:"
-
-#define dXSUB_SYS dNOOP
-
-#define NO_ENVIRON_ARRAY
-
-int kill(pid_t pid, int signo);
-pid_t wait(int *status);
-
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#  undef PERL_GET_VARS
-#  undef PERL_SET_VARS
-#  undef PERL_UNSET_VARS
-#  define PERL_GET_VARS()    symbian_get_vars()
-#  define PERL_SET_VARS(v)   symbian_set_vars(v)
-#  define PERL_UNSET_VARS(v) symbian_unset_vars()
-#endif /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */
-
-#define PERL_CALLCONV EXPORT_C /* for proto.h */
-
-#ifndef PERL_CORE
-#define PERL_CORE /* for WINS builds under VC */
-#endif
-
-#ifdef USE_PERLIO
-#define PERL_NEED_APPCTX /* need storing the PerlBase* */
-#define PERLIO_STD_SPECIAL
-#define PERLIO_STD_IN(f, b, n)  symbian_read_stdin(f, b, n)
-#define PERLIO_STD_OUT(f, b, n) symbian_write_stdout(f, b, n)
-/* The console (the STD*) streams are seen by Perl in UTF-8. */
-#define PERL_SYMBIAN_CONSOLE_UTF8
-
-#endif
-
-#undef Strerror
-#undef strerror
-#define Strerror(eno) ((eno) < 0 ? symbian_get_error_string(eno) : strerror(eno))
-
-#define PERL_NEED_TIMESBASE
-
-#define times(b)  symbian_times(b)
-#define usleep(u) symbian_usleep(u)
-
-#define PERL_SYS_INIT_BODY(c, v) symbian_sys_init(c, v)
-
-#ifdef __SERIES60_1X__
-#  error "Unfortunately Perl does not work in S60 1.2 (see FAQ-0929)"
-#endif
-
-#ifdef _MSC_VER
-
-/* The Symbian SDK insists on the /W4 flag for Visual C.
- * The Perl sources are not _that_ clean (Perl builds for Win32 use
- * the /W3 flag, and gcc builds always use -Wall, so the sources are
- * quite clean).  To avoid a flood of warnings let's shut up most
- * (for VC 6.0 SP 5). */
-
-#pragma warning(disable: 4054) /* function pointer to data pointer */
-#pragma warning(disable: 4055) /* data pointer to function pointer */
-#pragma warning(disable: 4100) /* unreferenced formal parameter */
-#pragma warning(disable: 4101) /* unreferenced local variable */
-#pragma warning(disable: 4102) /* unreferenced label */
-#pragma warning(disable: 4113) /* prototype difference */
-#pragma warning(disable: 4127) /* conditional expression is constant */
-#pragma warning(disable: 4132) /* const object should be initialized */
-#pragma warning(disable: 4133) /* incompatible types */
-#pragma warning(disable: 4189) /* initialized but not referenced */
-#pragma warning(disable: 4244) /* conversion from ... possible loss ... */
-#pragma warning(disable: 4245) /* signed/unsigned char */
-#pragma warning(disable: 4310) /* cast truncates constant value */
-#pragma warning(disable: 4505) /* function has been removed */
-#pragma warning(disable: 4510) /* default constructor could not ... */
-#pragma warning(disable: 4610) /* struct ... can never be instantiated */
-#pragma warning(disable: 4701) /* used without having been initialized */
-#pragma warning(disable: 4702) /* unreachable code */
-#pragma warning(disable: 4706) /* assignment within conditional */
-#pragma warning(disable: 4761) /* integral size mismatch */
-
-#endif /* _MSC_VER */
-
-#ifdef __MWERKS__
-/* No good way of using the CodeWarrior #pragma unused(varname) with Perl
- * source code (e.g. PERL_UNUSED_DECL doesn't work with the pragma syntax).
- * Therefore we brutally  turn off these particular warnings since there
- * is a lot of this in Perl code (pTHX, for example).  TOther compilers
- * will have to detect these naughty bits. */
-#pragma warn_unusedarg off
-#pragma warn_unusedvar off
-#pragma warn_emptydecl off
-#endif
diff --git a/symbian/uid.pl b/symbian/uid.pl
deleted file mode 100644 (file)
index 6eae8a9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-0x102015F3
diff --git a/symbian/version.pl b/symbian/version.pl
deleted file mode 100644 (file)
index f4208f8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-use strict;
-
-my %VERSION;
-
-if (open(PATCHLEVEL_H, "<", "patchlevel.h")) {
-  while (<PATCHLEVEL_H>) {
-     if (/#define\s+PERL_(REVISION|VERSION|SUBVERSION)\s+(\d+)/) {
-         $VERSION{$1} = $2;
-     }
-  }
-  close PATCHLEVEL_H;
-} else {
-  die "$0: patchlevel.h: $!\n";
-}
-
-die "$0: Perl release looks funny.\n"
-  unless (defined $VERSION{REVISION} && $VERSION{REVISION} == 5 &&
-          defined $VERSION{VERSION}  && $VERSION{VERSION}  >= 8 &&
-          defined $VERSION{SUBVERSION});
-
-
-\%VERSION;
diff --git a/symbian/xsbuild.pl b/symbian/xsbuild.pl
deleted file mode 100644 (file)
index 5ccd7c3..0000000
+++ /dev/null
@@ -1,976 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-use Getopt::Long;
-use File::Basename;
-use Cwd;
-
-unshift @INC, dirname $0 || '.';
-do "sanity.pl" or die $@;
-
-my $CoreBuild = -d "ext" && -f "perl.h" && -d "symbian" && -f "perl.c";
-
-my $SymbianVersion;
-
-if (exists $ENV{EPOCROOT}) {
-    if ($ENV{EPOCROOT} =~ m!\\Symbian\\UIQ_21\\$!i) {
-       $SymbianVersion = '7.0s'; # TODO: other UIQ versions
-    } elsif ($ENV{EPOCROOT} =~ m!\\Symbian\\(.+?)\\!i) {
-       $SymbianVersion = $1;
-    }
-}
-
-$SymbianVersion = $ENV{XSBUILD_SYMBIAN_VERSION}
-  if exists $ENV{XSBUILD_SYMBIAN_VERSION};
-
-my $PerlVersion    = $ENV{XSBUILD_PERL_VERSION};
-my $CSuffix        = '.c';
-my $CPlusPlus;
-my $Config;
-my $Build;
-my $Clean;
-my $DistClean;
-my $Sis;
-
-sub usage {
-    die <<__EOF__;
-$0: Usage: $0 [--symbian=version] [--perl=version]
-              [--extversion=x.y]
-              [--csuffix=csuffix] [--cplusplus|--cpp]
-              [--win=win] [--arm=arm]
-              [--config|--build|--clean|--distclean|--sis] ext
-__EOF__
-}
-
-my $CWD;
-my $SDK;
-my $VERSION;
-my $R_V_SV;
-my $PERLSDK;
-my $WIN = 'wins';
-my $ARM = 'thumb';
-my $BUILDROOT = getcwd();
-
-if ( !defined $PerlVersion && $0 =~ m:\\symbian\\perl\\(.+)\\bin\\xsbuild.pl:i )
-{
-    $PerlVersion = $1;
-}
-
-if ( !defined $SymbianVersion) {
-    ($SymbianVersion) = ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\!i);
-}
-
-my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION);
-
-if ($CoreBuild) {
-    do "sanity.pl" or die $@;
-    my %VERSION = %{ do "version.pl" or die $@ };
-    ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
-      @{ do "sdk.pl" or die $@ };
-    $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
-    $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
-    $BUILDROOT    = do "cwd.pl" or die $@;
-    $PerlVersion    = $R_V_SV;
-}
-
-my %CONF;
-
-usage()
-  unless GetOptions(
-    'symbian=s'     => \$SymbianVersion,
-    'perl=s'        => \$PerlVersion,
-    'extversion=s'  => \$CONF{EXTVERSION},
-    'csuffix=s'     => \$CSuffix,
-    'cplusplus|cpp' => \$CPlusPlus,
-    'win=s'         => \$WIN,
-    'arm=s'         => \$ARM,
-    'config'        => \$Config,
-    'build'         => \$Build,
-    'clean'         => \$Clean,
-    'distclean'     => \$DistClean,
-    'sis'           => \$Sis
-  );
-
-usage() unless @ARGV;
-
-$CSuffix = '.cpp' if $CPlusPlus;
-$Build = !( $Config || $Clean || $DistClean ) || $Sis unless defined $Build;
-
-die "$0: Symbian version undefined\n" unless defined $SymbianVersion;
-
-$SymbianVersion =~ s:/:\\:g;
-
-#die "$0: Symbian version '$SymbianVersion' not found\n"
-#  unless -d "\\Symbian\\$SymbianVersion";
-
-die "$0: Perl version undefined\n" unless defined $PerlVersion;
-
-$PERLSDK = "$SYMBIAN_ROOT\\Perl\\$PerlVersion";
-
-die "$0: Perl version '$PerlVersion' not found\n"
-  if !$CoreBuild && !-d $PERLSDK;
-
-print "Configuring with Symbian $SymbianVersion and Perl $PerlVersion...\n";
-
-$R_V_SV = $PerlVersion;
-
-$VERSION = $PerlVersion unless defined $VERSION;
-
-$VERSION =~ tr/.//d if defined $VERSION;
-
-$ENV{SDK}   = $SYMBIAN_ROOT;    # For the Errno extension
-$ENV{CROSS} = 1;                # For the Encode extension (unbuilt now)
-
-my $UARM = 'urel';
-my $UREL = "$SYMBIAN_ROOT\\epoc32\\release\\-ARM-\\$UARM";
-my $SRCDBG;
-if (exists $ENV{UREL}) {
-    $UREL = $ENV{UREL}; # from sdk.pl
-    $UREL =~ s/-ARM-/$ARM/;
-    $UARM = $ENV{UARM}; # from sdk.pl
-    $SRCDBG = $UARM eq 'udeb' ? "SRCDBG" : "";
-}
-
-my %EXTCFG;
-
-sub write_bld_inf {
-    my ($base) = @_;
-    print "\tbld.inf\n";
-    open( BLD_INF, '>', 'bld.inf' ) or die "$0: bld.inf: $!\n";
-    print BLD_INF <<__EOF__;
-PRJ_MMPFILES
-$base.mmp
-PRJ_PLATFORMS
-$WIN $ARM
-__EOF__
-    close(BLD_INF);
-}
-
-sub system_echo {
-    my $cmd = shift;
-    print "xsbuild: ", $cmd, "\n";
-    return system($cmd);
-}
-
-sub run_PL {
-    my ( $PL, $dir, $file ) = @_;
-    if ( defined $file ) {
-        print "\t(Running $dir\\$PL to create $file)\n";
-        unlink($file);
-    }
-    else {
-        print "\t(Running $dir\\$PL)\n";
-    }
-    my $cmd;
-    $ENV{PERL_CORE} = 1 if $CoreBuild;
-    system_echo("perl -I$BUILDROOT\\lib -I$BUILDROOT\\xlib\\symbian -I$BUILDROOT\\t\\lib $PL") == 0
-      or warn "$0: $PL failed.\n";
-    if ( defined $file ) { -s $file or die "$0: No $file created.\n" }
-}
-
-sub read_old_multi {
-    my ( $conf, $k ) = @_;
-    push @{ $conf->{$k} }, split( ' ', $1 ) if /^$k\s(.+)$/;
-}
-
-sub uniquefy_filenames {
-    my $b = [];
-    my %c = ();
-    for my $i (@{$_[0]}) {
-        $i =~ s!/!\\!g;
-        $i = lc $i if $i =~ m!\\!;
-        $i =~ s!^c:!!;
-        push @$b, $i unless $c{$i}++;
-    }
-    return $b;
-}
-
-sub read_mmp {
-    my ( $conf, $mmp ) = @_;
-    if ( -r $mmp && open( MMP, '<', $mmp ) ) {
-        print "\tReading $mmp...\n";
-        while (<MMP>) {
-            chomp;
-            $conf->{TARGET}     = $1 if /^TARGET\s+(.+)$/;
-            $conf->{TARGETPATH} = $1 if /^TARGETPATH\s+(.+)$/;
-            $conf->{EXTVERSION} = $1 if /^EXTVERSION\s+(.+)$/;
-            read_old_multi( $conf, "SOURCE" );
-            read_old_multi( $conf, "SOURCEPATH" );
-            read_old_multi( $conf, "USERINCLUDE" );
-            read_old_multi( $conf, "SYSTEMINCLUDE" );
-            read_old_multi( $conf, "LIBRARY" );
-            read_old_multi( $conf, "MACRO" );
-        }
-        close(MMP);
-    }
-}
-
-sub write_mmp {
-    my ( $ext, $base, $userinclude, @src ) = @_;
-
-    my $extdash = $ext; $extdash =~ s!\\!-!g;
-
-    print "\t$base.mmp\n";
-    $CONF{TARGET}        = "perl$VERSION-$extdash.dll";
-    $CONF{TARGETPATH}    = "\\System\\Libs\\Perl\\$R_V_SV";
-    $CONF{SOURCE}        = [@src];
-    $CONF{SOURCEPATH}    = [ $CWD, $BUILDROOT ];
-    $CONF{USERINCLUDE}   = [ $CWD, $BUILDROOT ];
-    $CONF{SYSTEMINCLUDE} = ["$PERLSDK\\include"] unless $CoreBuild;
-    $CONF{SYSTEMINCLUDE} = [ $BUILDROOT, "$BUILDROOT\\symbian" ] if $CoreBuild;
-    $CONF{LIBRARY}       = [];
-    $CONF{MACRO}         = [];
-    read_mmp( \%CONF, "_init.mmp" );
-    read_mmp( \%CONF, "$base.mmp" );
-
-    if ($base eq 'Zlib') {
-       push @{$CONF{USERINCLUDE}}, "$CWD\\zlib-src";
-    }
-
-    for my $ui ( @{$userinclude} ) {
-        $ui =~ s!/!\\!g;
-        if ( $ui =~ m!^(?:[CD]:)?\\! ) {
-            push @{ $CONF{USERINCLUDE} }, $ui;
-        }
-        else {
-            push @{ $CONF{USERINCLUDE} }, "$BUILDROOT\\$ui";
-        }
-    }
-    push @{ $CONF{SYSTEMINCLUDE} }, "\\epoc32\\include";
-    push @{ $CONF{SYSTEMINCLUDE} }, "\\epoc32\\include\\libc";
-    push @{ $CONF{LIBRARY} },       "euser.lib";
-    push @{ $CONF{LIBRARY} },       "estlib.lib";
-    push @{ $CONF{LIBRARY} },       "perl$VERSION.lib";
-    push @{ $CONF{MACRO} },         "SYMBIAN" unless $CoreBuild;
-    push @{ $CONF{MACRO} },         "PERL_EXT" if $CoreBuild;
-    push @{ $CONF{MACRO} },         "MULTIPLICITY";
-    push @{ $CONF{MACRO} },         "PERL_IMPLICIT_CONTEXT";
-    push @{ $CONF{MACRO} },         "PERL_GLOBAL_STRUCT";
-    push @{ $CONF{MACRO} },         "PERL_GLOBAL_STRUCT_PRIVATE";
-
-    if ($SDK_VARIANT eq 'S60') {
-      push @{ $CONF{MACRO} }, '__SERIES60__'
-       unless grep { $_ eq '__SERIES60__' } @{ $CONF{MACRO} };
-    }
-    if ($SDK_VARIANT eq 'S80') {
-      push @{ $CONF{MACRO} }, '__SERIES80__'
-       unless grep { $_ eq '__SERIES80__' } @{ $CONF{MACRO} };
-    }
-    if ($SDK_VARIANT eq 'S90') {
-      push @{ $CONF{MACRO} }, '__SERIES90__'
-       unless grep { $_ eq '__SERIES90__' } @{ $CONF{MACRO} };
-    }
-    if ($SDK_VARIANT eq 'UIQ') {
-      push @{ $CONF{MACRO} }, '__UIQ__'
-       unless grep { $_ eq '__UIQ__' } @{ $CONF{MACRO} };
-    }
-
-    for my $u (qw(SOURCE SOURCEPATH SYSTEMINCLUDE USERINCLUDE LIBRARY MACRO)) {
-        $CONF{$u} = uniquefy_filenames( $CONF{$u} );
-    }
-    open( BASE_MMP, '>', "$base.mmp" ) or die "$0: $base.mmp: $!\n";
-
-    print BASE_MMP <<__EOF__;
-TARGET         $CONF{TARGET}
-TARGETTYPE     dll
-TARGETPATH     $CONF{TARGETPATH}
-SOURCE         @{$CONF{SOURCE}}
-$SRCDBG
-__EOF__
-    for my $u (qw(SOURCEPATH SYSTEMINCLUDE USERINCLUDE)) {
-        for my $v ( @{ $CONF{$u} } ) {
-            print BASE_MMP "$u\t$v\n";
-        }
-    }
-    # OPTION does not work in MMPs for pre-2.0 SDKs?
-    print BASE_MMP <<__EOF__;
-LIBRARY                @{$CONF{LIBRARY}}
-MACRO          @{$CONF{MACRO}}
-// OPTION      MSVC /P // Uncomment for creating .i (cpp'ed .cpp)
-// OPTION      GCC -E  // Uncomment for creating .i (cpp'ed .cpp)
-__EOF__
-#    if (-f "$base.rss") {
-#        print BASE_MMP "RESOURCE\t$base.rss\n";
-#    }
-    close(BASE_MMP);
-
-}
-
-sub write_makefile {
-    my ( $base, $build ) = @_;
-
-    print "\tMakefile\n";
-
-    my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\$WIN\\$base.def";
-    my $windef2 = "..\\BWINS\\${base}u.def";
-    my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\$ARM\\$base.def";
-    my $armdef2 = "..\\BMARM\\${base}u.def";
-
-    my $wrap = $SYMBIAN_ROOT && defined $SDK_VARIANT eq 'S60' && $SDK_VERSION eq '1.2' && $SYMBIAN_ROOT !~ /_CW$/;
-    my $ABLD = $wrap ? 'perl b.pl' : 'abld';
-
-    open( MAKEFILE, '>', 'Makefile' ) or die "$0: Makefile: $!\n";
-    print MAKEFILE <<__EOF__;
-WIN = $WIN
-ARM = $ARM
-ABLD = $ABLD
-
-all:   build freeze
-
-sis:   build_arm freeze_arm
-
-build: abld.bat build_win build_arm
-
-abld.bat:
-       bldmake bldfiles
-
-build_win: abld.bat
-       bldmake bldfiles
-       \$(ABLD) build \$(WIN) udeb
-
-build_arm: abld.bat
-       bldmake bldfiles
-       \$(ABLD) build \$(ARM) $UARM
-
-win:   build_win freeze_win
-
-arm:   build_arm freeze_arm
-
-freeze:        freeze_win freeze_arm
-
-freeze_win:
-       bldmake bldfiles
-       \$(ABLD) freeze \$(WIN) $base
-
-freeze_arm:
-       bldmake bldfiles
-       \$(ABLD) freeze \$(ARM) $base
-
-defrost:       defrost_win defrost_arm
-
-defrost_win:
-       -del /f $windef1
-       -del /f $windef2
-
-defrost_arm:
-       -del /f $armdef1
-       -del /f $armdef2
-
-clean: clean_win clean_arm
-
-clean_win:
-       \$(ABLD) clean \$(WIN)
-
-clean_arm:
-       \$(ABLD) clean \$(ARM)
-
-realclean:     clean realclean_win realclean_arm
-       -del /f _init.c b.pl
-       -del /f $base.c $base.mmp
-
-realclean_win:
-       \$(ABLD) reallyclean \$(WIN)
-
-realclean_arm:
-       \$(ABLD) reallyclean \$(ARM)
-
-distclean:     defrost realclean
-       -rmdir ..\\BWINS ..\\BMARM
-       -del /f const-c.inc const-xs.inc
-       -del /f Makefile abld.bat bld.inf
-__EOF__
-    close(MAKEFILE);
-    if ($wrap) {
-       if(open(B, '>', 'b.pl')) {
-           print B <<'__EOF__';
-# abld.pl wrapper.
-
-# nmake doesn't like MFLAGS and MAKEFLAGS being set to -w and w.
-delete $ENV{MFLAGS};
-delete $ENV{MAKEFLAGS};
-
-print "abld @ARGV\n";
-system_echo("abld @ARGV");
-__EOF__
-            close(B);
-       } else {
-           warn "$0: failed to create b.pl: $!\n";
-       }
-    }
-}
-
-sub update_dir {
-    print "[chdir from ", getcwd(), " to ";
-    chdir(shift) or return;
-    update_cwd();
-    print getcwd(), "]\n";
-}
-
-sub patch_config {
-    # Problem: the Config.pm we have in $BUILDROOT\\lib carries the
-    # version number of the Perl we are building, while the Perl
-    # we are running might have some other version.  Solution:
-    # temporarily replace the Config.pm with a patched version.
-    #
-    # Reverse patch will be done with this special script
-    my $config_restore_script = "$BUILDROOT\\lib\\symbian_config_restore.pl";
-    # make sure the patch script was not left from previous run
-    unlink $config_restore_script;
-    return unless $CoreBuild;
-    my $V = sprintf "%vd", $^V;
-    # create reverse patch script
-    if (open(RSCRIPT, '>', $config_restore_script)) {
-        print RSCRIPT <<__EOF__;
-#!perl -pi.bak
-s:\\Q$V:$R_V_SV:
-__EOF__
-        close RSCRIPT;
-    } else {
-        die "$0: Cannot create $config_restore_script: $!";
-    }
-    # patch the config
-    unlink("$BUILDROOT\\lib\\Config.pm.bak");
-    print "(patching $BUILDROOT\\lib\\Config.pm)\n";
-    system_echo("perl -pi.bak -e \"s:\\Q$R_V_SV:$V:\" $BUILDROOT\\lib\\Config.pm");
-}
-
-sub restore_config {
-    my $config_restore_script = "$BUILDROOT\\lib\\symbian_config_restore.pl";
-    # this function should always return True
-    # because it's commonly used in error handling blocks as
-    #   &restore_config and die
-    return 1 unless -f $config_restore_script;
-    unlink("$BUILDROOT\\lib\\Config.pm.bak");
-    print "(restoring $BUILDROOT\\lib\\Config.pm)\n";
-    system_echo("perl -pi.bak $config_restore_script $BUILDROOT\\lib\\Config.pm");
-    unlink "$BUILDROOT\\lib\\Config.pm.bak", $config_restore_script;
-    # above command should always return 2 already,
-    # but i want to be absolutely sure that return value is True
-    return 1;
-}
-
-sub xsconfig {
-    my ( $ext, $dir ) = @_;
-    print "Configuring for $ext, directory '$dir'...\n";
-    my $extu = $CoreBuild ? "$BUILDROOT\\lib\\ExtUtils" : "$PERLSDK\\lib\\ExtUtils";
-    update_dir($dir) or die "$0: chdir '$dir': $!\n";
-    &patch_config;
-
-    my $build  = dirname($ext);
-    my $base   = basename($ext);
-    my $basexs = "$base.xs";
-    my $basepm = "$base.pm";
-    my $basec  = "$base$CSuffix";
-    my $extdir = ".";
-    if ( $dir =~ m:^ext\\(.+): ) {
-        $extdir = $1;
-    }
-    elsif ( $dir ne "." ) {
-        $extdir = $dir;
-    }
-    my $extdirdir  = dirname($extdir);
-    my $targetroot = "\\System\\Libs\\Perl\\$R_V_SV";
-    write_bld_inf($base) if -f $basexs;
-
-    my %src;
-    $src{$basec}++;
-
-    $extdirdir = $extdirdir eq "." ? "" : "$extdirdir\\";
-
-    my $extdash = $ext; $extdash =~ s!\\!-!g;
-
-    my %lst;
-    $lst{"$UREL\\perl$VERSION-$extdash.dll"} =
-      "$targetroot\\$ARM-symbian\\$base.dll"
-      if -f $basexs;
-    $lst{"$dir\\$base.pm"} = "$targetroot\\$extdirdir$base.pm"
-      if -f $basepm && $base ne 'XSLoader';
-
-    my %incdir;
-    my $ran_PL;
-    if ( -d 'lib' ) {
-        use File::Find;
-        my @found;
-        find( sub { push @found, $File::Find::name if -f $_ }, 'lib' );
-        for my $found (@found) {
-           next if $found =~ /\.bak$/i; # Zlib
-            my ($short) = ( $found =~ m/^lib.(.+)/ );
-            $short =~ s!/!\\!g;
-            $found =~ s!/!\\!g;
-            $lst{"$dir\\$found"} = "$targetroot\\$short";
-        }
-    }
-    if ( my @pm = glob("*.pm */*.pm") ) {
-        for my $pm (@pm) {
-            next if $pm =~ m:^t/:;
-            $pm =~ s:/:\\:g;
-            $lst{"$dir\\$pm"} = "$targetroot\\$extdirdir$pm";
-        }
-    }
-    if ( my @c = glob("*.c *.cpp */*.c */*.cpp") ) {
-       map { s:^zlib-src/:: } @c if $ext eq 'ext\Compress\Raw\Zlib';
-        for my $c (@c) {
-            $c =~ s:/:\\:g;
-            $src{$c}++;
-        }
-    }
-    if ( my @h = glob("*.h */*.h") ) {
-        map { s:^zlib-src/:: } @h if $ext eq 'ext\Compress\Raw\Zlib';
-        for my $h (@h) {
-            $h =~ s:/:\\:g;
-            $h = dirname($h);
-            $incdir{"$dir\\$h"}++ unless $h eq ".";
-        }
-    }
-    if ( exists $EXTCFG{$ext} ) {
-        for my $cfg ( @{ $EXTCFG{$ext} } ) {
-            if ( $cfg =~ /^([-+])?(.+\.(c|cpp|h))$/ ) {
-                my $o = defined $1 ? $1 : '+';
-                my $f = $2;
-                $f =~ s:/:\\:g;
-                for my $f ( glob($f) ) {
-                    if ( $o eq '+' ) {
-                        warn "$0: no source file $dir\\$f\n" unless -f $f;
-                        $src{$f}++ unless $cfg =~ /\.h$/;
-                        if ( $f =~ m:^(.+)\\[^\\]+$: ) {
-                            $incdir{$1}++;
-                        }
-                    }
-                    elsif ( $o eq '-' ) {
-                        delete $src{$f};
-                    }
-                }
-            }
-            if ( $cfg =~ /^([-+])?(.+\.(pm|pl|inc))$/ ) {
-                my $o = defined $1 ? $1 : '+';
-                my $f = $2;
-                $f =~ s:/:\\:g;
-                for my $f ( glob($f) ) {
-                    if ( $o eq '+' ) {
-                        warn "$0: no Perl file $dir\\$f\n" unless -f $f;
-                        $lst{"$dir\\$f"} = "$targetroot\\$extdir\\$f";
-                    }
-                    elsif ( $o eq '-' ) {
-                        delete $lst{"$dir\\$f"};
-                    }
-                }
-            }
-            if ( $cfg eq 'CONST' && !$ran_PL++ ) {
-                run_PL( "Makefile.PL", $dir, "const-xs.inc" );
-            }
-        }
-    }
-    unless ( $ran_PL++ ) {
-        run_PL( "Makefile.PL", $dir ) if -f "Makefile.PL";
-    }
-    if ( $dir eq "ext\\Errno" ) {
-        run_PL( "Errno_pm.PL", $dir, "Errno.pm" );
-        $lst{"$dir\\Errno.pm"} = "$targetroot\\Errno.pm";
-    }
-    elsif ( $dir eq "ext\\Devel\\PPPort" ) {
-        run_PL( "ppport_h.PL", $dir, "ppport.h" );
-    }
-    elsif ( $dir eq "ext\\DynaLoader" ) {
-        run_PL( "XSLoader_pm.PL", $dir, "XSLoader.pm" );
-        $lst{"ext\\DynaLoader\\XSLoader.pm"} = "$targetroot\\XSLoader.pm";
-    }
-    elsif ( $dir eq "ext\\Encode" ) {
-        system_echo("perl bin\\enc2xs -Q -O -o def_t.c -f def_t.fnm") == 0
-          or &restore_config and die "$0: running enc2xs failed: $!\n";
-    }
-
-    my @lst = sort keys %lst;
-
-    read_mmp( \%CONF, "_init.mmp" );
-    read_mmp( \%CONF, "$base.mmp" );
-
-    if ( -f $basexs ) {
-        my %MM;    # MakeMaker results
-        my @MM = qw(VERSION XS_VERSION);
-        if ( -f "Makefile" ) {
-            print "\tReading MakeMaker Makefile...\n";
-            if ( open( MAKEFILE, '<', 'Makefile' ) ) {
-                while (<MAKEFILE>) {
-                    for my $m (@MM) {
-                        if (m!^$m = (.+)!) {
-                            $MM{$m} = $1;
-                            print "\t$m = $1\n";
-                        }
-                    }
-                }
-                close(MAKEFILE);
-            }
-            else {
-                warn "$0: Makefile: $!";
-            }
-            print "\tDeleting MakeMaker Makefile.\n";
-            unlink("Makefile");
-        }
-
-        unlink($basec);
-        print "\t$basec\n";
-        if ( defined $CONF{EXTVERSION} ) {
-            my $EXTVERSION = $CONF{EXTVERSION};
-            print "\tUsing $EXTVERSION for version...\n";
-            $MM{VERSION} = $MM{XS_VERSION} = $EXTVERSION;
-        }
-        (&restore_config and die "$0: VERSION or XS_VERSION undefined\n")
-          unless defined $MM{VERSION} && defined $MM{XS_VERSION};
-        if ( open( BASE_C, '>', $basec ) ) {
-            print BASE_C <<__EOF__;
-#ifndef VERSION
-#define VERSION "$MM{VERSION}"
-#endif
-#ifndef XS_VERSION
-#define XS_VERSION "$MM{XS_VERSION}"
-#endif
-__EOF__
-            close(BASE_C);
-        }
-        else {
-            warn "$0: $basec: $!";
-        }
-        unless (
-            system_echo(
-"perl -I$BUILDROOT\\lib -I$PERLSDK\\lib $extu\\xsubpp -csuffix .cpp -typemap $extu\\typemap -noprototypes $basexs >> $basec"
-            ) == 0
-            && -s $basec
-          )
-        {
-            &restore_config;
-            die "$0: perl xsubpp failed: $!\n";
-        }
-
-        print "\t_init.c\n";
-        open( _INIT_C, '>', '_init.c' )
-            or &restore_config and die "$!: _init.c: $!\n";
-        print _INIT_C <<__EOF__;
-    #include "EXTERN.h"
-    #include "perl.h"
-    EXPORT_C void _init(void *handle) {
-    }
-__EOF__
-        close(_INIT_C);
-
-        my @src = ( "_init.c", sort keys %src );
-
-        if ( $base eq "Encode" ) {    # Currently unused.
-            for my $submf ( glob("*/Makefile") ) {
-                my $d = dirname($submf);
-                print "Configuring Encode::$d...\n";
-                if ( open( SUBMF, '<', $submf ) ) {
-                    if ( update_dir($d) ) {
-                        my @subsrc;
-                        while (<SUBMF>) {
-                            next if 1 .. /postamble/;
-                            if (m!^(\w+_t)\.c : !) {
-                                system_echo(
-                                    "perl ..\\bin\\enc2xs -Q -o $1.c -f $1.fnm")
-                                  == 0
-                                  or warn "$0: enc2xs: $!\n";
-                                push @subsrc, "$1.c";
-                            }
-                        }
-                        close(SUBMF);
-                        unlink($submf);
-                        my $subbase = $d;
-                        $subbase =~ s!/!::!g;
-                        write_mmp( $ext, $subbase, ["..\\Encode"], "$subbase.c",
-                            @subsrc );
-                        write_makefile( $subbase, $build );
-                        write_bld_inf($subbase);
-
-                        unless (
-                            system_echo(
-"perl -I$BUILDROOT\\lib ..\\$extu\\xsubpp -csuffix .cpp -typemap ..\\$extu\\typemap -noprototypes $subbase.xs > $subbase.c"
-                            ) == 0
-                            && -s "$subbase.c"
-                          )
-                        {
-                            &restore_config;
-                            die "$0: perl xsubpp failed: $!\n";
-                        }
-                        update_dir("..");
-                    }
-                    else {
-                        warn "$0: chdir $d: $!\n";
-                    }
-                }
-                else {
-                    warn "$0: $submf: $!";
-                }
-            }
-            print "Configuring Encode...\n";
-        }
-
-        write_mmp( $ext, $base, [ keys %incdir ], @src );
-        write_makefile( $base, $build );
-    }
-    &restore_config;
-
-    my $lstname = $ext;
-    $lstname =~ s:^ext\\::;
-    $lstname =~ s:\\:-:g;
-    print "\t$lstname.lst\n";
-    my $lstout =
-      $CoreBuild ? "$BUILDROOT/symbian/$lstname.lst" : "$BUILDROOT/$lstname.lst";
-    if ( open( my $lst, '>', $lstout ) ) {
-        for my $f (@lst) { print $lst qq["$f"-"!:$lst{$f}"\n] }
-        close($lst);
-    }
-    else {
-        die "$0: $lstout: $!\n";
-    }
-    update_dir($BUILDROOT);
-}
-
-sub update_cwd {
-    $CWD = getcwd();
-    $CWD =~ s!^[A-Z]:!!i;
-    $CWD =~ s!/!\\!g;
-}
-
-if (grep /^(Compress::Raw::Zlib|Cwd|Data::Dumper|Digest::SHA|Sys::Syslog|Time::HiRes)$/, @ARGV) {
-    &patch_config;
-    system_echo("perl -I$BUILDROOT\\lib -I$PERLSDK\\lib $BUILDROOT\\mkppport");
-    &restore_config;
-}
-
-for my $ext (@ARGV) {
-
-    $ext =~ s!::!\\!g;
-    my $extdash = $ext =~ /ext\\/ ? $ext : "ext\\$ext"; $extdash =~ s!\\!-!g;
-    $ext =~ s!/!\\!g;
-
-    my $cfg;
-
-    $cfg = $2 if $ext =~ s/(.+?),(.+)/$1/;
-
-    my $dir;
-
-    unless ( -e $ext ) {
-        if ( $ext =~ /\.xs$/ && !-f $ext ) {
-            if ( -f "ext\\$ext" ) {
-                $ext = "ext\\$ext";
-                $dir = dirname($ext);
-            }
-        }
-        elsif ( !-d $ext ) {
-            if ( -d "ext\\$ext" ) {
-                $ext = "ext\\$ext";
-                $dir = $ext;
-            }
-        }
-        $dir = "." unless defined $dir;
-    }
-    else {
-        if ( $ext =~ /\.xs$/ && -f $ext ) {
-            $ext = dirname($ext);
-            $dir = $ext;
-        }
-        elsif ( -d $ext ) {
-            $dir = $ext;
-        }
-    }
-
-    if ( $ext eq "XSLoader" ) {
-        $ext = "ext\\XSLoader";
-    }
-    if ( $ext eq "ext\\XSLoader" ) {
-        $dir = "ext\\DynaLoader";
-    }
-
-    $EXTCFG{$ext} = [ split( /,/, $cfg ) ] if defined $cfg;
-
-    die "$0: no lib\\Config.pm\n"
-      if $CoreBuild && $Build && !-f "lib\\Config.pm";
-
-    if ($CoreBuild) {
-        open( my $cfg, '<', 'symbian/install.cfg' )
-          or die "$0: symbian/install.cfg: $!\n";
-        my $extdir = $dir;
-        $extdir =~ s:^ext\\::;
-        while (<$cfg>) {
-            next unless /^ext\s+(.+)/;
-            chomp;
-            my $ext = $1;
-            my @ext = split( ' ', $ext );
-            $EXTCFG{"ext\\$ext[0]"} = [@ext];
-        }
-        close($cfg);
-    }
-
-    if ( $Config || $Build ) {
-        xsconfig( $ext, $dir ) or die "$0: xsconfig '$ext' failed\n";
-        next if $Config;
-    }
-
-    if ($dir eq ".") {
-       warn "$0: No directory for $ext, skipping...\n";
-       next;
-    }
-
-    my $chdir = $ext eq "ext\\XSLoader" ? "ext\\DynaLoader" : $dir;
-    die "$0: no directory '$chdir'\n" unless -d $chdir;
-    update_dir($chdir) or die "$0: chdir '$chdir' failed: $!\n";
-
-    my %CONF;
-
-    my @ext   = split( /\\/, $ext );
-    my $base  = $ext[-1];
-
-    if ( $Clean || $DistClean ) {
-        print "Cleaning $ext...\n";
-        unlink("bld.inf");
-        unlink("$base.mmp");
-        unlink("_init.c");
-        unlink("const-c.inc");
-        unlink("const-xs.inc");
-        rmdir("..\\bmarm");
-    }
-
-    if ( $Build && $ext ne "ext\\XSLoader" && $ext ne "ext\\Errno" ) {
-
-     # We compile the extension three (3) times.
-     # (1) Only the _init.c to get _init() as the ordinal 1 function in the DLL.
-     # (2) With the rest and the _init.c to get ordinals for the rest.
-     # (3) With an updated _init.c that carries the symbols from step (2).
-
-        system_echo("make clean");
-        system_echo("make defrost") == 0 or warn "$0: make defrost failed\n";
-
-        my @TARGET;
-
-        push @TARGET, 'sis' if $Sis;
-
-        # Compile #1.
-        # Hide all but the _init.c.
-        print "\n*** $ext - Compile 1 of 3.\n\n";
-       print "(patching $base.mmp)\n";
-        system(
-"perl -pi.bak -e \"s:^SOURCE\\s+_init.c:SOURCE\\t_init.c // :\" $base.mmp"
-        );
-       system_echo("bldmake bldfiles");
-        system_echo("make @TARGET") == 0 or die "$0: make #1 failed\n";
-
-        # Compile #2.
-        # Reveal the rest again.
-        print "\n*** $ext - Compile 2 of 3.\n\n";
-       print "(patching $base.mmp)\n";
-        system(
-"perl -pi.bak -e \"s:^SOURCE\\t_init.c // :SOURCE\\t_init.c :\" $base.mmp"
-        );
-        system_echo("make @TARGET") == 0 or die "$0: make #2 failed\n";
-        unlink("$base.mmp.bak");
-
-        open( _INIT_C, '>', '_init.c' ) or die "$0: _init.c: $!\n";
-        print _INIT_C <<'__EOF__';
-#include "EXTERN.h"
-#include "perl.h"
-
-/* This is a different but matching definition from in dl_symbian.xs. */
-typedef struct {
-    void*      handle;
-    int                error;
-    HV*                symbols;
-} PerlSymbianLibHandle;
-
-EXPORT_C void _init(void* handle) {
-__EOF__
-
-        my %symbol;
-       my $def;
-       my $basef;
-        for my $f ("$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\WINS\\perl$VERSION-$extdash.def",
-                  "..\\BMARM\\perl$VERSION-${extdash}u.def") {
-           print "\t($f - ";
-           if ( open( $def, '<', $f ) ) {
-               print "OK)\n";
-               $basef = $f;
-               last;
-           } else {
-               print "no)\n";
-           }
-       }
-       unless (defined $basef) {
-           die "$0: failed to find .def for $base\n";
-       }
-        while (<$def>) {
-            next while 1 .. /^EXPORTS/;
-            if (/^\s*(\w+) \@ (\d+) /) {
-                $symbol{$1} = $2;
-            }
-        }
-        close($def);
-        my @symbol = sort keys %symbol;
-        if (@symbol) {
-            print _INIT_C <<'__EOF__';
-    dTHX;
-    PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle;
-    if (!h->symbols)
-        h->symbols = newHV();
-    if (h->symbols) {
-__EOF__
-            for my $sym (@symbol) {
-                my $len = length($sym);
-                print _INIT_C <<__EOF__;
-        hv_store(h->symbols, "$sym", $len, newSViv($symbol{$sym}), 0);
-__EOF__
-            }
-        }
-        else {
-            die "$0: $basef: no exports found\n";
-        }
-
-        print _INIT_C <<'__EOF__';
-    }
-}
-__EOF__
-        close(_INIT_C);
-
-        # Compile #3.  This is for real.
-        print "\n*** $ext - Compile 3 of 3.\n\n";
-        system_echo("make @TARGET") == 0 or die "$0: make #3 failed\n";
-
-    }
-    elsif ( $Clean || $DistClean ) {
-        if ( $ext eq "ext\\Errno" ) {
-            unlink( "Errno.pm", "Makefile" );
-        }
-        else {
-            if ( -f "Makefile" ) {
-                if ($Clean) {
-                    system_echo("make clean") == 0 or die "$0: make clean failed\n";
-                }
-                elsif ($DistClean) {
-                    system_echo("make distclean") == 0
-                      or die "$0: make distclean failed\n";
-                }
-            }
-           if ( $ext eq "ext\\Compress\\Raw\\Zlib" ) {
-               my @bak;
-               find( sub { push @bak, $File::Find::name if /\.bak$/ }, "." );
-               unlink(@bak) if @bak;
-               my @src;
-               find( sub { push @src, $_ if -f $_ }, "zlib-src" );
-               unlink(@src) if @src;
-               unlink("constants.xs");
-           }
-            if ( $ext eq "ext\\Devel\\PPPort" ) {
-                unlink("ppport.h");
-            }
-        }
-       my @D = glob("../BMARM/*.def ../BWINS/*.def");
-       unlink(@D) if @D;
-        my @B = glob("ext/BWINS ext/BMARM ext/*/BWINS ext/*/BMARM Makefile");
-        rmdir(@B) if @B;
-    }
-
-    update_dir($BUILDROOT);
-
-}    # for my $ext
-
-exit(0);
-
index 32142e3..00dd31a 100644 (file)
@@ -9,7 +9,7 @@ plan tests => 319;
 
 my $list_assignment_supported = 1;
 
-#mg.c says list assignment not supported on VMS and SYMBIAN.
+#mg.c says list assignment not supported on VMS
 $list_assignment_supported = 0 if ($^O eq 'VMS');
 
 
index e0dfcf9..6283df5 100644 (file)
@@ -541,7 +541,7 @@ is "@+", "10 1 6 10";
 }
 
 # Test for bug [perl #36434]
-# Can not do this test on VMS, and SYMBIAN according to comments
+# Can not do this test on VMS according to comments
 # in mg.c/Perl_magic_clear_all_env()
 SKIP: {
     skip('Can\'t make assignment to \%ENV on this system', 3) if $Is_VMS;
diff --git a/util.c b/util.c
index d0e8afe..d4e2537 100644 (file)
--- a/util.c
+++ b/util.c
@@ -2083,7 +2083,7 @@ Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const char *const bits,
  * For Solaris, setenv() and unsetenv() were introduced in Solaris 9, so
  * testing for HAS UNSETENV is sufficient.
  */
-#  if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV)) || defined(PERL_DARWIN)
+#  if defined(__CYGWIN__)|| defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV)) || defined(PERL_DARWIN)
 #    define MY_HAS_SETENV
 #  endif
 
@@ -4338,7 +4338,7 @@ Perl_my_socketpair (int family, int type, int protocol, int fd[2]) {
 #ifdef ECONNABORTED
   errno = ECONNABORTED;        /* This would be the standard thing to do. */
 #elif defined(ECONNREFUSED)
-  errno = ECONNREFUSED;        /* E.g. Symbian does not have ECONNABORTED. */
+  errno = ECONNREFUSED;        /* some OSes might not have ECONNABORTED. */
 #else
   errno = ETIMEDOUT;   /* Desperation time. */
 #endif
diff --git a/util.h b/util.h
index 6294e59..6bf7d9e 100644 (file)
--- a/util.h
+++ b/util.h
        (((f)[0] && (f)[1] == ':')              /* drive name */        \
         || ((f)[0] == '\\' && (f)[1] == '\\')  /* UNC path */  \
         ||     ((f)[3] == ':'))                                /* volume name, currently only sys */
-#elif defined(DOSISH) || defined(__SYMBIAN32__)
+#elif defined(DOSISH)
 #  define PERL_FILE_IS_ABSOLUTE(f) \
        (*(f) == '/'