Symbian port 0.3.0 as of blead@25911
authorJarkko Hietaniemi <jhi@iki.fi>
Mon, 31 Oct 2005 18:38:42 +0000 (20:38 +0200)
committerH.Merijn Brand <h.m.brand@xs4all.nl>
Mon, 31 Oct 2005 16:25:23 +0000 (16:25 +0000)
Message-ID: <B356D8F434D20B40A8CEDAEC305A1F24E7A6D6@esebe105.NOE.Nokia.com>

p4raw-id: //depot/perl@25933

14 files changed:
MANIFEST
README.symbian
symbian/PerlApp.cpp
symbian/PerlApp.h
symbian/PerlApp.hrh
symbian/PerlAppAif.rss
symbian/PerlAppUIQ.rss [new file with mode: 0644]
symbian/config.pl
symbian/port.pl
symbian/sanity.pl
symbian/sdk.pl
symbian/sisify.pl
symbian/symbian_utils.cpp
symbian/xsbuild.pl

index 1387853..0d22963 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -2648,12 +2648,13 @@ 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/PerlAppAif.rss         Symbian sample app code
-symbian/PerlApp.cpp            Symbian sample app code
-symbian/PerlApp.h              Symbian sample app header
-symbian/PerlApp.hrh            Symbian sample app resource header
-symbian/PerlAppS60.rss         Symbian sample app resource definition
-symbian/PerlAppS80.rss         Symbian sample app resource definition
+symbian/PerlAppAif.rss         Symbian app launcher code
+symbian/PerlApp.cpp            Symbian app launcher code
+symbian/PerlApp.h              Symbian app launcher header
+symbian/PerlApp.hrh            Symbian app launcher resource header
+symbian/PerlAppS60.rss         Symbian app launcher resource definition
+symbian/PerlAppS80.rss         Symbian app launcher resource definition
+symbian/PerlAppUIQ.rss         Symbian app launcher resource definition
 symbian/PerlBase.cpp           Symbian Perl base class
 symbian/PerlBase.h             Symbian Perl base class header
 symbian/PerlBase.pod           Symbian Perl base class documentation
index 635a7c1..5a1aa00 100644 (file)
@@ -18,8 +18,8 @@ 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
-or Series 80 bindings for Perl.
+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
@@ -33,7 +33,8 @@ mainly as demonstrations.
     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), and Series 80 2.0.  You can get the SDKs from
-    Forum Nokia (http://www.forum.nokia.com/).
+    Forum Nokia (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, http://www.activestate.com/Products/ActivePerl/
@@ -84,8 +85,8 @@ mainly as demonstrations.
     the VC6 makefiles and workspaces.  "make vc6" will compile for the VC6,
     and "make cw" for the CodeWarrior.
 
-    The following Series 60 and Series 80 SDK and compiler configurations
-    and Nokia phones that were tested at some point in time
+    The following Series 60, Series 80, and UIQ SDK and compiler
+    configurations and Nokia phones that were tested at some point in time
     (+ = compiled and PerlApp run, - = not),
     both for Perl 5.8.x and 5.9.x:
 
@@ -95,8 +96,10 @@ mainly as demonstrations.
         S60 2.0 | +  | +  | 6600
         S60 2.1 | -  | +  | 6670
         S60 2.6 | +  | +  | 6630    
+        S60 2.8 | -  | +  | (not tested in device)
+        S80 2.6 | -  | +  | 9300
+        UIQ 2.0 | -  | +  | (not tested in device)
 
-    Also S60 2.8 should work fine.
 
     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
@@ -378,6 +381,15 @@ time.
 
 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.
+
 =back
 
 =cut
index 819f13f..ee95c93 100644 (file)
 # include <cknconf.h>
 #endif /* #ifdef __SERIES80__ */
 
+#ifdef __UIQ__
+# include <qikon.hrh>
+# include <eikedwin.h>
+# include <eiklabel.h>
+#endif /* #ifdef __UIQ__ */
+
 #include <apparc.h>
 #include <e32base.h>
 #include <e32cons.h>
@@ -140,15 +146,6 @@ CPerlAppUi::~CPerlAppUi()
 
 #ifndef PerlAppMinimal
 
-#ifdef __SERIES60__
-
-static TBool DlgOk(CAknNoteDialog* dlg)
-{
-    return dlg && dlg->RunDlgLD() == EAknSoftkeyOk;
-}
-
-#endif /* #ifdef __SERIES60__ */
-
 static TBool OkCancelDialogL(TDesC& aMessage)
 {
 #ifdef __SERIES60__
@@ -156,11 +153,15 @@ static TBool OkCancelDialogL(TDesC& aMessage)
         new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
     dlg->PrepareLC(R_OK_CANCEL_DIALOG);
     dlg->SetTextL(aMessage);
-    return DlgOk(dlg);
+    return dlg->RunDlgLD() == EAknSoftkeyOk;
 #endif /* #ifdef __SERIES60__ */
 #ifdef __SERIES80__
     return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_CANCEL_OK);
 #endif /* #ifdef __SERIES80__ */
+#ifdef __UIQ__
+    CEikDialog* dlg = new (ELeave) CEikDialog();
+    return dlg->ExecuteLD(R_OK_CANCEL_DIALOG) == EEikBidOk;
+#endif /* #ifdef __UIQ__ */
 }
 
 static TBool YesNoDialogL(TDesC& aMessage)
@@ -170,11 +171,15 @@ static TBool YesNoDialogL(TDesC& aMessage)
         new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
     dlg->PrepareLC(R_YES_NO_DIALOG);
     dlg->SetTextL(aMessage);
-    return DlgOk(dlg);
+    return dlg->RunDlgLD() == EAknSoftkeyOk;
 #endif /* #ifdef __SERIES60__ */
 #ifdef __SERIES80__
     return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_NO_YES);
 #endif /* #ifdef __SERIES80__ */
+#ifdef __UIQ__
+    CEikDialog* dlg = new (ELeave) CEikDialog();
+    return dlg->ExecuteLD(R_YES_NO_DIALOG) == EEikBidOk;
+#endif /* #ifdef __UIQ__ */
 }
 
 static void InformationNoteL(TDesC& aMessage)
@@ -183,9 +188,9 @@ static void InformationNoteL(TDesC& aMessage)
     CAknInformationNote* note = new (ELeave) CAknInformationNote;
     note->ExecuteLD(aMessage);
 #endif /* #ifdef __SERIES60__ */
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
     CEikonEnv::Static()->InfoMsg(aMessage);
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
 }
 
 static TInt WarningNoteL(TDesC& aMessage)
@@ -194,13 +199,13 @@ static TInt WarningNoteL(TDesC& aMessage)
     CAknWarningNote* note = new (ELeave) CAknWarningNote;
     return note->ExecuteLD(aMessage);
 #endif /* #ifdef __SERIES60__ */
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
     CEikonEnv::Static()->AlertWin(aMessage);
     return ETrue;
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
 }
 
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
 
 CPerlAppTextQueryDialog::CPerlAppTextQueryDialog(HBufC*& aBuffer) :
   iData(aBuffer)
@@ -223,7 +228,7 @@ void CPerlAppTextQueryDialog::PreLayoutDynInitL()
 /* TODO: OfferKeyEventL() so that newline can be seen as 'OK'.
  * Or a hotkey for the button? */
 
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
 
 static TInt TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength)
 {
@@ -234,7 +239,7 @@ static TInt TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aD
     dlg->SetMaxLength(aMaxLength);
     return dlg->ExecuteLD(R_TEXT_QUERY_DIALOG);
 #endif /* #ifdef __SERIES60__ */
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
     HBufC* data = NULL;
     CPerlAppTextQueryDialog* dlg =
       new (ELeave) CPerlAppTextQueryDialog(data);
@@ -246,14 +251,14 @@ static TInt TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aD
       return ETrue;
     }
     return EFalse;
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
 }
 
 static TBool FileQueryDialogL(TDes& aFilename)
 {
 #ifdef __SERIES60__
-  return AknCommonDialogs::RunSelectLD(aFilename,
-                                      R_MEMORY_SELECTION_DIALOG);
+  return AknCommonDialogs::RunSelectDlgLD(aFilename,
+                                         R_MEMORY_SELECTION_DIALOG);
 #endif /* #ifdef __SERIES60__ */
 #ifdef __SERIES80__
   if (CCknOpenFileDialog::RunDlgLD(aFilename,
@@ -271,6 +276,9 @@ static TBool FileQueryDialogL(TDes& aFilename)
   }
   return EFalse;
 #endif /* #ifdef __SERIES80__ */
+#ifdef __UIQ__
+  return EFalse; // No filesystem access in UIQ 2.x!
+#endif /* #ifdef __UIQ__ */
 }
 
 // The isXXX() come from the Perl headers.
@@ -602,9 +610,9 @@ static void DoHandleCommandL(TInt aCommand) {
 #ifdef __SERIES60__
             _LIT(prompt, "Oneliner:");
 #endif /* #ifdef __SERIES60__ */
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
             _LIT(prompt, "Code:"); // The title has "Oneliner" already.
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
             CPerlAppUi* cAppUi =
               STATIC_CAST(CPerlAppUi*, CEikonEnv::Static()->EikAppUi());
             if (TextQueryDialogL(_L("Oneliner"),
@@ -681,7 +689,7 @@ void CPerlAppUi::HandleCommandL(TInt aCommand)
 
 #endif /* #ifdef __SERIES60__ */
 
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
 
 void CPerlAppView::HandleCommandL(TInt aCommand) {
     DoHandleCommandL(aCommand);
@@ -699,7 +707,7 @@ void CPerlAppUi::HandleCommandL(TInt aCommand) {
     }
 }
 
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
 
 CPerlAppView* CPerlAppView::NewL(const TRect& aRect)
 {
index 8782fa0..12131a4 100644 (file)
 # include <eikdialg.h>
 #endif /* #ifdef __SERIES60__ */
 
+#ifdef __UIQ__
+# include <qikapplication.h>
+# include <qikappui.h>
+# include <qikdocument.h>
+# include <eikdialg.h>
+#endif /* #ifdef __UIQ____ */
+
 #include <coecntrl.h>
 #include <f32file.h>
 
 # define CMyAppView     CEikBorderedControl
 #endif /* #ifdef __SERIES60__ */
 
+#ifdef __UIQ__
+# define CMyDocument    CEikDocument
+# define CMyApplication CQikApplication
+# define CMyAppUi       CQikAppUi
+# define CMyNoteDialog  CCknFlashingDialog
+# define CMyAppView     CCoeControl
+#endif /* #ifdef __UIQ__ */
+
 class CPerlAppDocument : public CMyDocument
 {
   public:
@@ -115,14 +130,14 @@ class CPerlAppView : public CMyAppView
     static CPerlAppView* NewLC(const TRect& aRect);
     ~CPerlAppView();
     void Draw(const TRect& aRect) const;
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
     void HandleCommandL(TInt aCommand);
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
   private:
     void ConstructL(const TRect& aRect);
 };
 
-#ifdef __SERIES80__
+#if defined(__SERIES80__) || defined(__UIQ__)
 
 class CPerlAppTextQueryDialog : public CEikDialog
 {
@@ -139,6 +154,6 @@ class CPerlAppTextQueryDialog : public CEikDialog
     TBool OkToExitL(TInt aKeycode);
 };
 
-#endif /* #ifdef __SERIES80__ */
+#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */
 
 #endif // __PerlApp_h__
index 3a510d4..b3969c5 100644 (file)
@@ -13,7 +13,8 @@ enum TPerlIds
     EPerlAppCommandOneLiner           = 1027,
     EPerlAppCommandCopyright          = 1028,
     EPerlAppCommandAboutCopyright     = 1029,
-    EPerlAppTextQueryInputField       = 1030   // no comma here
+    EPerlAppTextQueryInputField       = 1030,
+    EPerlAppLast                      = 1099   // no comma here
 };
 
 #endif // __PerlApp_HRH__
index fa4d42b..03e17cd 100644 (file)
@@ -18,4 +18,4 @@ RESOURCE AIF_DATA
             type = "x-application/x-perl";
             }
         };
- }
+}
diff --git a/symbian/PerlAppUIQ.rss b/symbian/PerlAppUIQ.rss
new file mode 100644 (file)
index 0000000..6e07312
--- /dev/null
@@ -0,0 +1,125 @@
+/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ 
+
+/* The PerlApp application is licensed under the same terms as Perl itself. */
+
+NAME PERL
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <qikon.rh>
+
+#include "PerlApp.hrh"
+
+RESOURCE RSS_SIGNATURE
+{
+}
+
+RESOURCE TBUF r_default_document_name
+{
+    buf = "";
+}
+
+RESOURCE EIK_APP_INFO
+{
+    menubar = r_Perl_menubar;
+    toolbar = r_Perl_menubar;
+}
+
+
+RESOURCE MENU_BAR r_Perl_menubar
+{
+    titles = {
+        MENU_TITLE
+            {
+            menu_pane = r_Perl_menu; txt = "Options";
+            }
+    };
+}
+
+
+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_Perl_oneliner_dialog
+{
+    title = "Title";
+    buttons = R_EIK_BUTTONS_CANCEL_OK;
+    flags = EEikDialogFlagWait;
+    items = {
+        DLG_LINE {
+            type = EEikCtEdwin;
+           prompt = "Prompt";
+            id = EPerlAppTextQueryInputField;
+            control = EDWIN {
+                width = 10;
+                maxlength = 128;
+            };
+        }
+    };
+}
+
+RESOURCE DIALOG r_ok_cancel_dialog
+{
+    title = "OK / Cancel ?";
+    buttons = r_ok_cancel_buttons;
+}
+
+RESOURCE DLG_BUTTONS r_ok_cancel_buttons
+{
+    buttons = {
+        DLG_BUTTON {
+            id = EEikBidOk;
+            button = CMBUT { txt = "Ok"; };
+        },
+        DLG_BUTTON {
+            id = EEikBidCancel;
+            button = CMBUT { txt = "Cancel"; };
+        }
+    };
+}
+
+RESOURCE DIALOG r_yes_no_dialog
+{
+    title = "Yes / No ?";
+    buttons = r_yes_no_buttons;
+}
+
+RESOURCE DLG_BUTTONS r_yes_no_buttons
+{
+    buttons = {
+        DLG_BUTTON {
+            id = EEikBidOk;
+            button = CMBUT { txt = "Yes"; };
+        },
+        DLG_BUTTON {
+            id = EEikBidCancel;
+            button = CMBUT { txt = "No"; };
+        }
+    };
+}
+
+
+
index 77538b2..eb47909 100644 (file)
@@ -31,6 +31,7 @@ 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)
 my $S80SDK = $ENV{S80SDK}; # qw(2.0) (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/;
@@ -39,7 +40,7 @@ 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($S60SDK) && !defined($S80SDK) && !defined($UIQSDK));
 
 die "$0: does not know which Windows compiler to use\n"
     unless defined $WIN;
@@ -85,6 +86,11 @@ __EOF__
            print $fh "MACRO\t__SERIES80_1X__\n" if $S80SDK =~ /^1\./;
            print $fh "MACRO\t__SERIES80_2X__\n" if $S80SDK =~ /^2\./;
        }
+        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.
@@ -111,11 +117,15 @@ __EOF__
         if ( $miniperl || $perl || $type eq 'dll' ) {
             print $fh <<__EOF__;
 LIBRARY                charconv.lib
-LIBRARY                commonengine.lib
 LIBRARY                hal.lib
 LIBRARY                estor.lib
 __EOF__
         }
+       if ($SDK_VARIANT =~ /^S[68]0$/) {
+            print $fh <<__EOF__;
+LIBRARY                commonengine.lib
+__EOF__
+       }
         if ( $type eq 'exe' ) {
             print $fh <<__EOF__;
 STATICLIBRARY  ecrt0.lib
@@ -248,6 +258,10 @@ sub create_symbian_port_h {
            $S80SDK =~ /^(\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. */
 
@@ -289,6 +303,8 @@ sub create_PerlApp_pkg {
 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 $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) { # Do only if not in S60 1.2 VC.
@@ -388,6 +404,17 @@ 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.
@@ -421,7 +448,6 @@ LIBRARY           euser.lib
 LIBRARY           perl$VERSION.lib
 @LIB
 
-AIF               PerlApp.aif . PerlAppAif.rss 
 __EOF__
     if (@MACRO) {
        for my $macro (@MACRO) {
@@ -430,6 +456,11 @@ MACRO             $macro
 __EOF__
         }
     }
+    if ($SDK_VARIANT =~ /^S[68]0$/) {
+        print PERLAPP_MMP <<__EOF__;
+AIF               PerlApp.aif . PerlAppAif.rss 
+__EOF__
+    }
     close(PERLAPP_MMP);
     push @unclean, 'symbian\PerlApp.mmp';
 }
@@ -625,9 +656,15 @@ EXT =      Compress::Zlib Cwd Data::Dumper Devel::Peek Digest::MD5 Errno Fcntl File:
 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)
 
@@ -650,7 +687,7 @@ sdkinstall:
        -mkdir \$(APIDIR)\\bin
        -mkdir \$(BINDIR)
        copy /y *.h   \$(APIDIR)\\include
-       - copy /y *.inc \$(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
index 0ddae5f..bf30557 100644 (file)
@@ -1,6 +1,6 @@
 {
-  dll => { MAJOR => 0, MINOR => 2, PATCH => 0 },
-  ext => { MAJOR => 0, MINOR => 2, PATCH => 0 }, 
-  lib => { MAJOR => 0, MINOR => 2, PATCH => 0 }, 
+  dll => { MAJOR => 0, MINOR => 3, PATCH => 0 },
+  ext => { MAJOR => 0, MINOR => 3, PATCH => 0 }, 
+  lib => { MAJOR => 0, MINOR => 3, PATCH => 0 }, 
 }
 
index eb50244..4d00ac0 100644 (file)
@@ -1,17 +1,22 @@
 use strict;
 
 if (exists $ENV{'!C:'}) {
-  print "You are running this under Cygwin, aren't you?\n";
+  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 will work.\n";
   exit(1);
 }
 
-if (# SDK 2.x
-    $ENV{PATH} !~ m!c:\\program files\\common files\\symbian\\tools!i
+if (# S60 2.x or S80 2.x
+    $ENV{PATH} !~ m!\\program files\\common files\\symbian\\tools!i
     &&
-    # SDK 1.2
-    $ENV{PATH} !~ m!c:\\symbian\\6.1\\shared\\epoc32\\tools!i) {
-  print "I think you have not installed the Symbian SDK.\n";
+    # S60 1.2
+    $ENV{PATH} !~ m!\\symbian\\6.1\\shared\\epoc32\\tools!i
+    &&
+    # UIQ
+    $ENV{PATH} !~ m!\\symbian\\uiq.+?\\epoc32!i
+    ) {
+  print "I do not think you have installed the Symbian SDK.\n";
   exit(1);
 }
 
index f8eb9c2..6ba8d9b 100644 (file)
@@ -29,13 +29,24 @@ if ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\(.+?)\\Epoc32\\gcc\\bin!i) {
        $SDK_VARIANT = 'S80';
        $SDK_VERSION = $ENV{S80SDK} = '2.0';
     }
+} 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|")) {
+if (open(GCC, "gcc -v 2>&1 |")) {
    while (<GCC>) {
      if (/Reading specs from ((?:C:)?\\Symbian.+?)\\Epoc32\\/i) {
        $SYMBIAN_ROOT = $1;
-       # The S60SDK/S60SDK tells the Series 60 SDK version.
+       # 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';
index 9f8172f..67f6d32 100644 (file)
@@ -37,7 +37,7 @@ sub die_with_usage {
   }
   die <<__USAGE__;
 $0: Usage:
-$0 [--variant=S60|S80] [ --uid=hhhhhhhh ] [ --version=a.b.c ] [ --library=x.y.z ] [ some.pl | Some.pm | somefile | dir ... ]
+$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,
@@ -61,7 +61,7 @@ my $SisUidDefault     = 0x0acebabe;
 my $SisVersionDefault = '0.0.0';
 my $VariantDefault    = 'S60';
 
-my %Variant = qw(S60 1 S80 1);
+my %Variant = qw(S60 1 S80 1 UIQ 1);
 
 die_with_usage()
   unless GetOptions(
@@ -345,7 +345,7 @@ sub init_hex {
   # Use symbian\hexdump.pl to create the perlappmin.hex for this hexdump.
   if ($Variant eq 'S60') {
       $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f430020000056176fa5000000000100bf00803e2bde56e1e0000300000180110000000000000010000000001000002000000000000001000000000000100000000007000000f8110000010000003c0f00007c00000000000000fc110000fc140000000000005e01000000b500f0f7f902bc084700000148006870470000280c001000b5011c024800f0b3fc01bc00470000480c001030b585b00490002100f004fd6846049900f046fb684600f01bf9011c049cb4256d006019016004980022002300f002fab6256d0065190020286000f003fa012100f006fa05b030bc01bc0047f0b5071c0e1c1e4878611e48b8611e48f8611e48b8641e48f8641e483860b42464003d192968002910d0786800f018fb2968002905d008688268081c032100f0a3f9b4246400391900200860b62464003d192868002803d000f060fc00202860b96a002905d008688268081c032100f08bf9381c311c00f0adfcf0bc01bc0047c40e0010280f0010180f0010f80e0010040f00105c0c001084b010b595b01790189119921a9301200021002200f07efc041c14a901a800f037fc002808d10090201c17a90222002300f076fc00f032fc00f036fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f0bbfa011c0a687ea8126a00f043f98026f6006e44301c00f07dfa2949301c7eaa002300f07dfac425ed006d44281c00f07ffa244c6c440021224868440160201c042100f07bfa301c00f07efa011c201c2a1c00f07ffa002824d1301c00f074fa011c8420000168448022520000f0f4fb8521090169446846fc22520000f0f2fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f070fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff2c0c0010480a000044080000480800004c0800004c0a000000b50120fff7e6fe01bc004700b5021c80204000814202d00348814206d1101c00f044fa05e00000c10b0000081cfff7e7ff01bc0047000010b500f007f8041c00f0aafb201c10bc02bc084730b5051c302000f0a7fb041c002c05d000f0f2f80748606007482060201c00f0a1fb201c291c00f009f8201c30bc02bc08470000d40c0010e40c001030b5041c0d1c00f0dff8201c291c00f0e1f82068016a201c00f08af830bc01bc0047000000b5044a4260044a026000f0d7f801bc00470000d40c0010e40c001030b584b0041c00f0d1f8051c6846211c00f0d2f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f053fb041c002c04d0291c00f085fb03482060201c30bc02bc08470000940d001070b5b820400000f03ffb061c002e18d000f0c4f90d48b0640d48f0640d4d75610d4cb4610d4bf3610d4ab2640d49f1640d4830600d483060301c6030802100f02ffb301c70bc02bc084700002c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c001010b58b20800000f019fb041c002c03d000f092f902482060201c10bc02bc0847f00d0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c0463c0f0010014b1b681847c046440f0010014b1b681847c046480f0010014b1b681847c046400f001040b4024e3668b44640bc6047900f0010014b1b681847c04610100010014b1b681847c0462c100010014b1b681847c0461c100010014b1b681847c046a00f0010014b1b681847c04608100010014b1b681847c04618100010014b1b681847c04614100010014b1b681847c046e80f0010014b1b681847c046dc0f0010014b1b681847c046d40f0010014b1b681847c04600100010014b1b681847c046fc0f0010014b1b681847c046980f0010014b1b681847c0468c0f0010014b1b681847c046e40f0010014b1b681847c04628100010014b1b681847c046f40f0010014b1b681847c04604100010014b1b681847c046c40f0010014b1b681847c046d80f0010014b1b681847c046bc0f0010014b1b681847c046a80f0010014b1b681847c046ac0f0010014b1b681847c046cc0f0010014b1b681847c046b80f0010014b1b681847c046b40f0010014b1b681847c046a40f0010014b1b681847c0460c100010014b1b681847c046e00f0010014b1b681847c0469c0f0010014b1b681847c046940f0010014b1b681847c046ec0f0010014b1b681847c046f00f0010014b1b681847c046d00f0010014b1b681847c046b00f0010014b1b681847c046c00f0010014b1b681847c046f80f0010014b1b681847c046c80f0010014b1b681847c04630100010014b1b681847c04634100010014b1b681847c04620100010014b1b681847c04624100010014b1b681847c0463c100010014b1b681847c04638100010014b1b681847c0465410001040b4024e3668b44640bc60474c100010014b1b681847c04650100010014b1b681847c04640100010014b1b681847c04648100010014b1b681847c04644100010014b1b681847c04668100010014b1b681847c046d8100010014b1b681847c04658100010014b1b681847c0468c100010014b1b681847c04624110010014b1b681847c04620110010014b1b681847c04638110010014b1b681847c046e8100010014b1b681847c04698100010014b1b681847c046a8100010014b1b681847c04608110010014b1b681847c046d4100010014b1b681847c046c8100010014b1b681847c04678100010014b1b681847c046ac100010014b1b681847c04614110010014b1b681847c046ec100010014b1b681847c046f0100010014b1b681847c04674100010014b1b681847c046c4100010014b1b681847c04660100010014b1b681847c046e0100010014b1b681847c04694100010014b1b681847c0465c100010014b1b681847c046f4100010014b1b681847c046bc100010014b1b681847c0467c100010014b1b681847c04688100010014b1b681847c046cc100010014b1b681847c04600110010014b1b681847c0460c110010014b1b681847c046f8100010014b1b681847c04690100010014b1b681847c046b8100010014b1b681847c046b4100010014b1b681847c046dc100010014b1b681847c046e4100010014b1b681847c04610110010014b1b681847c0462c11001040b4024e3668b44640bc6047b0100010014b1b681847c04604110010014b1b681847c04670100010014b1b681847c0469c100010014b1b681847c0466410001040b4024e3668b44640bc6047fc100010014b1b681847c04684100010014b1b681847c04680100010014b1b681847c046c0100010014b1b681847c04628110010014b1b681847c0466c10001040b4024e3668b44640bc6047d0100010014b1b681847c046a0100010014b1b681847c04630110010014b1b681847c0463411001040b4024e3668b44640bc6047a4100010014b1b681847c0461c110010014b1b681847c04618110010014b1b681847c04644110010014b1b681847c04664110010014b1b681847c04654110010014b1b681847c04658110010014b1b681847c04648110010014b1b681847c0465c110010014b1b681847c0463c110010014b1b681847c0464c110010014b1b681847c04640110010014b1b681847c04650110010014b1b681847c04660110010014b1b681847c04668110010014b1b681847c0466c110010014b1b681847c0467011001040b4024e3668b44640bc604774110010014b1b681847c0464c0f0010014b1b681847c046840f0010014b1b681847c046880f0010014b1b681847c046640f0010014b1b681847c046740f0010014b1b681847c046540f0010014b1b681847c0465c0f001040b4024e3668b44640bc6047500f0010014b1b681847c046800f0010014b1b681847c0467c0f0010014b1b681847c046700f0010014b1b681847c0466c0f001040b4024e3668b44640bc6047680f0010014b1b681847c046580f0010014b1b681847c046600f0010014b1b681847c046780f00107047000000b5fff72fff01bc0047000000b5fff72fff01bc0047000000b5fff723ff01bc0047000010b581b0039c14380094fff7b1fe01b010bc01bc0047000000b51438fff7d6ff01bc004700b51438fff7aafe01bc004700b51838fff7fcfe02bc084700b51c38fff7f0fe02bc084700b51c38fff7e4fe02bc084700b50438fff774fd02bc084700b50438fff768fd02bc084700b54838fff7a0ff01bc004700b54c38fff7a0ff01bc0047ffffffff00000000ffffffff00000000280c0010480c0010c40e0010280f0010180f0010f80e0010040f00105c0c00102c0c0010d40c0010e40c0010d40c0010e40c0010940d00102c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c0010580d0010f00d0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d0600102d00001039070010590100104507001051020010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010fcffffff00000000910b0010850b00100000000000000000f1020010d1040010dd040010e9040010f5040010010500100d0500101905001025050010310500103d0500104905001055050010610500106d0500107905001085050010910500109d050010a9050010b5050010c1050010cd050010d90500100d030010e5050010f105001000000000000000000d0b0010bd0a0010a5070010190a0010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010190a00100000000000000000190b0010f9070010050800103d040010110800101d080010290800103508001041080010090b00104d08001059080010490400105504001065080010710800107d08001061030010d50a001089080010950800100000000000000000250b0010bd0a0010a50700100d000010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010390300100000000000000000190a00100000000000000000190a0010390600104506001000000000000000004d0a0010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d06001021090010390700102d090010450700103d090010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010ecffffff00000000490b0010bd080010c9080010d5080010e1080010f1080010fd080010310b001009090010550b001015090010b8ffffff000000009d0b0010b4ffffff00000000a90b00103906001045060010e4ffffff00000000790b00106d0b0010e8ffffff00000000610b0010510600105d06001003000000060000001b000000470000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000040000008905000000000000d103000000030000780200000400000003000000060000001b000000470000008d020000100000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000a10200002d000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000b402000006000000120000002700000033000000b7000000e3000000e6000000c80200003900000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000de0200000d000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000f20200000200000004000000890500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000c00200005c01000000000000c002000014302830f830fc300031043108310c312c32c432c832043308335c33ac33b033b433b833bc33c033c433c833cc33f0333834443450345c346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f835043610361c362836343640364c365836643670367c3688369836a436b036bc36c836d436e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38ac38b838c438d038dc38ec38f838043910391c3928393839443950395c396c397839843990399c39a839b439c039cc39d839e439f039fc39083a143a203a2c3a3c3a483a543a603a6c3a783a843a903aa03aac3ab83ac43ad03ae03aec3af83a043bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c1c3c203c243c643c683c6c3c703c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca03ca43ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cdc3ce03cec3cf03cf43cf83cfc3c003d043d083d0c3d103d143d183d1c3d203d243d283d2c3d303d343d383d3c3d403d443d483d4c3d503d543d603d643d683d6c3d703d743d783d7c3d803d843d883d8c3d903d9c3da03da43da83dac3db03db43db83dbc3dc03dc43dc83dcc3dd03dd43dd83ddc3de03de43de83dec3df83dfc3d003e043e083e0c3e103e143e183e1c3e203e243e283e343e403e443e483e543e583e5c3e603e643e683e6c3e703e743e783e7c3e803e843e883e8c3e903e943e983e9c3ea03ea43ea83eac3eb03eb43eb83ebc3ec03ecc3ed03ed43ed83edc3ee03ee43ee83eec3ef03ef43e003f0c3f103f143f203f243f303f343f383f
+79000010ce390010f61520108581107645504f430020000017240aa7000000000100bf0000641e2823e2e000030000019011000000000000001000000000100000200000000000000100000000000010000000000700000008120000010000004c0f00007c000000000000000c1200000c150000000000005e01000000b500f0f7f902bc084700000148006870470000280c001000b5011c024800f0b3fc01bc00470000480c001030b585b00490002100f004fd6846049900f046fb684600f01bf9011c049cb4256d006019016004980022002300f002fab6256d0065190020286000f003fa012100f006fa05b030bc01bc0047f0b5071c0e1c1e4878611e48b8611e48f8611e48b8641e48f8641e483860b42464003d192968002910d0786800f018fb2968002905d008688268081c032100f0a3f9b4246400391900200860b62464003d192868002803d000f060fc00202860b96a002905d008688268081c032100f08bf9381c311c00f0adfcf0bc01bc0047d40e0010380f0010280f0010080f0010140f00106c0c001084b010b595b01790189119921a9301200021002200f07efc041c14a901a800f037fc002808d10090201c17a90222002300f076fc00f032fc00f036fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f0bbfa011c0a687ea8126a00f043f98026f6006e44301c00f07dfa2949301c7eaa002300f07dfac425ed006d44281c00f07ffa244c6c440021224868440160201c042100f07bfa301c00f07efa011c201c2a1c00f07ffa002824d1301c00f074fa011c8420000168448022520000f0f4fb8521090169446846fc22520000f0f2fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f070fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff2c0c0010480a000044080000480800004c0800004c0a000000b50120fff7e6fe01bc004700b5021c80204000814202d00348814206d1101c00f044fa05e00000c10b0000081cfff7e7ff01bc0047000010b500f007f8041c00f0aafb201c10bc02bc084730b5051c302000f0a7fb041c002c05d000f0f2f80748606007482060201c00f0a1fb201c291c00f009f8201c30bc02bc08470000e40c0010f40c001030b5041c0d1c00f0dff8201c291c00f0e1f82068016a201c00f08af830bc01bc0047000000b5044a4260044a026000f0d7f801bc00470000e40c0010f40c001030b584b0041c00f0d1f8051c6846211c00f0d2f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f053fb041c002c04d0291c00f085fb03482060201c30bc02bc08470000a40d001070b5b820400000f03ffb061c002e18d000f0c4f90d48b0640d48f0640d4d75610d4cb4610d4bf3610d4ab2640d49f1640d4830600d483060301c6030802100f02ffb301c70bc02bc084700003c0e0010480e0010d40e0010380f0010280f0010080f0010140f00105c0e00106c0c001010b58b20800000f019fb041c002c03d000f092f902482060201c10bc02bc0847000e0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c0464c0f0010014b1b681847c046540f0010014b1b681847c046580f0010014b1b681847c046500f001040b4024e3668b44640bc6047a00f0010014b1b681847c04620100010014b1b681847c0463c100010014b1b681847c0462c100010014b1b681847c046b00f0010014b1b681847c04618100010014b1b681847c04628100010014b1b681847c04624100010014b1b681847c046f80f0010014b1b681847c046ec0f0010014b1b681847c046e40f0010014b1b681847c04610100010014b1b681847c0460c100010014b1b681847c046a80f0010014b1b681847c0469c0f0010014b1b681847c046f40f0010014b1b681847c04638100010014b1b681847c04604100010014b1b681847c04614100010014b1b681847c046d40f0010014b1b681847c046e80f0010014b1b681847c046cc0f0010014b1b681847c046b80f0010014b1b681847c046bc0f0010014b1b681847c046dc0f0010014b1b681847c046c80f0010014b1b681847c046c40f0010014b1b681847c046b40f0010014b1b681847c0461c100010014b1b681847c046f00f0010014b1b681847c046ac0f0010014b1b681847c046a40f0010014b1b681847c046fc0f0010014b1b681847c04600100010014b1b681847c046e00f0010014b1b681847c046c00f0010014b1b681847c046d00f0010014b1b681847c04608100010014b1b681847c046d80f0010014b1b681847c04640100010014b1b681847c04644100010014b1b681847c04630100010014b1b681847c04634100010014b1b681847c0464c100010014b1b681847c04648100010014b1b681847c0466410001040b4024e3668b44640bc60475c100010014b1b681847c04660100010014b1b681847c04650100010014b1b681847c04658100010014b1b681847c04654100010014b1b681847c04678100010014b1b681847c046e8100010014b1b681847c04668100010014b1b681847c0469c100010014b1b681847c04634110010014b1b681847c04630110010014b1b681847c04648110010014b1b681847c046f8100010014b1b681847c046a8100010014b1b681847c046b8100010014b1b681847c04618110010014b1b681847c046e4100010014b1b681847c046d8100010014b1b681847c04688100010014b1b681847c046bc100010014b1b681847c04624110010014b1b681847c046fc100010014b1b681847c04600110010014b1b681847c04684100010014b1b681847c046d4100010014b1b681847c04670100010014b1b681847c046f0100010014b1b681847c046a4100010014b1b681847c0466c100010014b1b681847c04604110010014b1b681847c046cc100010014b1b681847c0468c100010014b1b681847c04698100010014b1b681847c046dc100010014b1b681847c04610110010014b1b681847c0461c110010014b1b681847c04608110010014b1b681847c046a0100010014b1b681847c046c8100010014b1b681847c046c4100010014b1b681847c046ec100010014b1b681847c046f4100010014b1b681847c04620110010014b1b681847c0463c11001040b4024e3668b44640bc6047c0100010014b1b681847c04614110010014b1b681847c04680100010014b1b681847c046ac100010014b1b681847c0467410001040b4024e3668b44640bc60470c110010014b1b681847c04694100010014b1b681847c04690100010014b1b681847c046d0100010014b1b681847c04638110010014b1b681847c0467c10001040b4024e3668b44640bc6047e0100010014b1b681847c046b0100010014b1b681847c04640110010014b1b681847c0464411001040b4024e3668b44640bc6047b4100010014b1b681847c0462c110010014b1b681847c04628110010014b1b681847c04654110010014b1b681847c04674110010014b1b681847c04664110010014b1b681847c04668110010014b1b681847c04658110010014b1b681847c0466c110010014b1b681847c0464c110010014b1b681847c0465c110010014b1b681847c04650110010014b1b681847c04660110010014b1b681847c04670110010014b1b681847c04678110010014b1b681847c0467c110010014b1b681847c0468011001040b4024e3668b44640bc604784110010014b1b681847c0465c0f0010014b1b681847c046940f0010014b1b681847c046980f0010014b1b681847c046740f0010014b1b681847c046840f0010014b1b681847c046640f0010014b1b681847c0466c0f001040b4024e3668b44640bc6047600f0010014b1b681847c046900f0010014b1b681847c0468c0f0010014b1b681847c046800f0010014b1b681847c0467c0f001040b4024e3668b44640bc6047780f0010014b1b681847c046680f0010014b1b681847c046700f0010014b1b681847c046880f00107047000000b5fff72fff01bc0047000000b5fff72fff01bc0047000000b5fff723ff01bc0047000010b581b0039c14380094fff7b1fe01b010bc01bc0047000000b51438fff7d6ff01bc004700b51438fff7aafe01bc004700b51838fff7fcfe02bc084700b51c38fff7f0fe02bc084700b51c38fff7e4fe02bc084700b50438fff774fd02bc084700b50438fff768fd02bc084700b54838fff7a0ff01bc004700b54c38fff7a0ff01bc0047ffffffff00000000ffffffff00000000280c0010480c0010d40e0010380f0010280f0010080f0010140f00106c0c00102c0c0010e40c0010f40c0010e40c0010f40c0010a40d00103c0e0010480e0010d40e0010380f0010280f0010080f0010140f00105c0e00106c0c0010680d0010000e0010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c0000000000000000000000000079000010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d0600102d00001039070010590100104507001051020010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010fcffffff00000000910b0010850b00100000000000000000f1020010d1040010dd040010e9040010f5040010010500100d0500101905001025050010310500103d0500104905001055050010610500106d0500107905001085050010910500109d050010a9050010b5050010c1050010cd050010d90500100d030010e5050010f105001000000000000000000d0b0010bd0a0010a5070010190a0010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010190a00100000000000000000190b0010f9070010050800103d040010110800101d080010290800103508001041080010090b00104d08001059080010490400105504001065080010710800107d08001061030010d50a001089080010950800100000000000000000250b0010bd0a0010a50700100d000010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010390300100000000000000000190a00100000000000000000190a0010390600104506001000000000000000004d0a0010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d06001021090010390700102d090010450700103d090010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010ecffffff00000000490b0010bd080010c9080010d5080010e1080010f1080010fd080010310b001009090010550b001015090010b8ffffff000000009d0b0010b4ffffff00000000a90b00103906001045060010e4ffffff00000000790b00106d0b0010e8ffffff00000000610b0010510600105d06001003000000060000001b000000470000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000040000007805000000000000d103000000030000780200000400000003000000060000001b000000470000008d020000100000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000a10200002d000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000b402000006000000120000002700000033000000b7000000e3000000e6000000c80200003900000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000de0200000d000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000f20200000200000004000000780500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000c00200005c01000000000000c002000014302830f830fc300031043108310c312c32c432c832043308335c33ac33b033b433b833bc33c033c433c833cc33f0333834443450345c346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f835043610361c362836343640364c365836643670367c3688369836a436b036bc36c836d436e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38ac38b838c438d038dc38ec38f838043910391c3928393839443950395c396c397839843990399c39a839b439c039cc39d839e439f039fc39083a143a203a2c3a3c3a483a543a603a6c3a783a843a903aa03aac3ab83ac43ad03ae03aec3af83a043bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c1c3c203c243c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca03ca43ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cd43cd83cdc3ce03cec3cf03cfc3c003d043d083d0c3d103d143d183d1c3d203d243d283d2c3d303d343d383d3c3d403d443d483d4c3d503d543d583d5c3d603d643d703d743d783d7c3d803d843d883d8c3d903d943d983d9c3da03dac3db03db43db83dbc3dc03dc43dc83dcc3dd03dd43dd83ddc3de03de43de83dec3df03df43df83dfc3d083e0c3e103e143e183e1c3e203e243e283e2c3e303e343e383e443e503e543e583e643e683e6c3e703e743e783e7c3e803e843e883e8c3e903e943e983e9c3ea03ea43ea83eac3eb03eb43eb83ebc3ec03ec43ec83ecc3ed03edc3ee03ee43ee83eec3ef03ef43ef83efc3e003f043f103f1c3f203f243f303f343f403f443f483f
 __APP__
   }
 
@@ -369,7 +369,8 @@ __RSC__
   # Use symbian\hexdump.pl to create the perlappmin.hex for this hexdump.
   if ($Variant eq 'S80') {
       $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f43002000009f6ac520000000000100bb00401aaa8157e1e00003000001980e0000000000000010000000001000002000000000000001000000000000100000000007000000100f000001000000900c00007c00000000000000140f0000dc110000000000005e01000000b500f0cff902bc0847000001480068704700009c0a001000b5011c024800f075fc01bc00470000bc0a001030b585b00490002100f0e6fa6846049900f0e8fa684600f013f9011c049c9e256d006019016004980022002300f0daf9a0256d0065190020286000f0dbf9012100f0def905b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b4838609e2464003d192968002910d0786800f0c0fa2968002905d008688268081c032100f081f99e246400391900200860a02464003d192868002803d000f028fc00202860796a002905d008688268081c032100f069f9381c311c00f0a1faf0bc01bc0047480c00107c0c0010d00a001084b010b595b01790189119921a9301200021002200f046fc041c14a901a800f005fc002808d10090201c17a90222002300f03efc00f000fc00f004fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f06ffa011c0a687ea8126a00f027f98026f6006e44301c00f025fa2949301c7eaa002300f025fac425ed006d44281c00f027fa244c6c440021224868440160201c042100f023fa301c00f026fa011c201c2a1c00f027fa002824d1301c00f01cfa011c8420000168448022520000f0c2fb8521090169446846fc22520000f0c0fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f024fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa00a0010480a000044080000480800004c0800004c0a000000b50120fff7f2fe01bc004700b5081cfff7f6ff01bc004710b5021c80204000814203d1101c00f0f5f905e09e24640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f074fb201c10bc02bc084730b5051c2c2000f071fb041c002c03d000f092fb06482060201c00f06dfb201c291c00f007f8201c30bc02bc084700003c0b001030b5041c0d1c00f0bdf8201c291c00f0bff82068016a201c00f06ef830bc01bc0047000000b5034a026000f0b7f801bc004700003c0b001030b584b0041c00f0b3f8051c6846211c00f0b4f82868b8300268281c694600f051f804b030bc01bc0047000030b5051c242000f025fb041c002c04d0291c00f08ff903482060201c30bc02bc08470000b00b001010b5a220400000f011fb041c002c0cd000f082f9074860610748a06107482060201c3430802100f00dfb201c10bc02bc08470000480c00107c0c0010d00a001010b58b20800000f003fb041c002c03d000f068f902482060201c10bc02bc08470c0c0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046900c0010014b1b681847c046980c0010014b1b681847c0469c0c0010014b1b681847c046940c001040b4024e3668b44640bc6047a40c0010014b1b681847c046100d0010014b1b681847c046280d0010014b1b681847c046b40c0010014b1b681847c046080d0010014b1b681847c046180d0010014b1b681847c046140d0010014b1b681847c046f00c0010014b1b681847c046e40c0010014b1b681847c046dc0c0010014b1b681847c046000d0010014b1b681847c046fc0c0010014b1b681847c046ac0c0010014b1b681847c046a00c0010014b1b681847c046ec0c0010014b1b681847c046240d0010014b1b681847c046040d0010014b1b681847c046e00c0010014b1b681847c046bc0c0010014b1b681847c046d40c0010014b1b681847c046c80c0010014b1b681847c046c40c0010014b1b681847c046b80c0010014b1b681847c0460c0d0010014b1b681847c046e80c0010014b1b681847c046b00c0010014b1b681847c046a80c0010014b1b681847c046f40c0010014b1b681847c046d80c0010014b1b681847c046c00c0010014b1b681847c046cc0c0010014b1b681847c046f80c0010014b1b681847c046d00c0010014b1b681847c0461c0d0010014b1b681847c046200d0010014b1b681847c046400d001040b4024e3668b44640bc6047380d0010014b1b681847c0463c0d0010014b1b681847c0462c0d0010014b1b681847c046340d0010014b1b681847c046300d0010014b1b681847c046540e0010014b1b681847c0466c0d0010014b1b681847c046e80d0010014b1b681847c046300e0010014b1b681847c0465c0d0010014b1b681847c0468c0d0010014b1b681847c046340e0010014b1b681847c0463c0e0010014b1b681847c046380e0010014b1b681847c046480e0010014b1b681847c046500e0010014b1b681847c046f40d0010014b1b681847c046fc0d0010014b1b681847c046440e0010014b1b681847c046b40d0010014b1b681847c046980d0010014b1b681847c046a80d0010014b1b681847c046e40d0010014b1b681847c046d00d0010014b1b681847c046780d001040b4024e3668b44640bc6047a00d0010014b1b681847c046ac0d0010014b1b681847c046240e0010014b1b681847c046000e0010014b1b681847c046040e0010014b1b681847c046d80d0010014b1b681847c046740d0010014b1b681847c046d40d0010014b1b681847c046c80d0010014b1b681847c046640d0010014b1b681847c046f00d0010014b1b681847c046940d0010014b1b681847c046600d0010014b1b681847c046080e0010014b1b681847c046c00d0010014b1b681847c0467c0d0010014b1b681847c046880d0010014b1b681847c046dc0d0010014b1b681847c046140e0010014b1b681847c0461c0e0010014b1b681847c0460c0e0010014b1b681847c046900d0010014b1b681847c046bc0d0010014b1b681847c046b80d0010014b1b681847c046ec0d0010014b1b681847c046f80d001040b4024e3668b44640bc6047cc0d0010014b1b681847c046200e0010014b1b681847c0464c0e001040b4024e3668b44640bc6047a40d0010014b1b681847c046e00d001040b4024e3668b44640bc6047b00d0010014b1b681847c046180e0010014b1b681847c046700d0010014b1b681847c0469c0d0010014b1b681847c046680d001040b4024e3668b44640bc6047100e0010014b1b681847c046840d0010014b1b681847c046800d0010014b1b681847c046c40d0010014b1b681847c046400e0010014b1b681847c0462c0e0010014b1b681847c046280e0010014b1b681847c046600e0010014b1b681847c046800e0010014b1b681847c046700e0010014b1b681847c046740e0010014b1b681847c046640e0010014b1b681847c046780e0010014b1b681847c046580e0010014b1b681847c046680e0010014b1b681847c0465c0e0010014b1b681847c0466c0e0010014b1b681847c0467c0e0010014b1b681847c046840e0010014b1b681847c046880e001040b4024e3668b44640bc60478c0e0010014b1b681847c046540d0010014b1b681847c046500d0010014b1b681847c0464c0d0010014b1b681847c046480d0010014b1b681847c046440d0010014b1b681847c046580d00107047000000b5fff77bff01bc0047000000b5fff76fff01bc0047000010b581b0039c14380094fff725ff01b010bc01bc0047000000b51438fff716ff01bc004700b51438fff71eff01bc004700b51838fff702ff02bc0847ffffffff00000000ffffffff000000009c0a0010bc0a0010480c00107c0c0010d00a0010a00a00103c0b00103c0b0010b00b0010480c00107c0c0010d00a00100c0c0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010710600107d06001089060010950600106505001071050010a10600107d050010ad060010b906001089050010950500102d000010c50600104101001045020010d1060010dd060010e9060010f506001005070010110700101d070010290700100000000000000000d902001075040010810400108d04001099040010a5040010b1040010bd040010c9040010c5090010d5040010d1090010e1040010dd090010e9090010ed040010f904001005050010110500101d0500102905001035050010410500104d050010ed020010f5090010590500100000000000000000050a0010a1070010ad070010ed030010b9070010c5070010d1070010dd070010e9070010010a0010f507001001080010f9030010050400100d08001019080010250800104103001031080010410800104d0800100000000000000000110a001035070010410700100d0000104d07001059070010e103001065070010710700107d070010890700109507001019030010ecffffff00000000350a0010910800109d080010a9080010b5080010c5080010d10800101d0a0010dd080010410a0010e9080010e8ffffff000000004d0a0010a1050010ad05001003000000060000001b00000047000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff000000000100001401000015010000120000002700000033000000b7000000e3000000e6000000260100005601000065010000800200000a040000af04000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e06000004000000890500000000000081030000c80200003c0200000400000003000000060000001b000000470000005102000023000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff0000000001000014010000150100006402000006000000120000002700000033000000b7000000e3000000e60000007802000006000000260100005601000065010000800200000a040000af0400008f0200003f00000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000a50200000c000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e060000b90200000200000004000000890500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0000000004020000fe000000000000000402000014302830ec30f030f4301432b032e8323c33743378337c33a033e833f43300340c341c342834343440344c345834643470347c3488349434a034ac34b834c434d034dc34e834f43400350c351835243530353c354835543560356c357835843590359c35a835b435c035d035dc35e835f43500360c361836243630363c364836543660366c367836843690369c36a836b436c036cc36d836e436f03600370c371837243730373c374837543760376c377837843790379c37a837b437c037cc37d837e437f037fc370838143820382c383c38483854386438703880388c389838a438b038c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b439c039cc39d839e439f039fc39683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983ad83adc3ae03ae43ae83aec3af03af43af83afc3a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b343b383b443b483b4c3b503b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b903b943b983b9c3ba03ba43ba83bac3bb83bbc3bc03bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c143c183c1c3c203c243c283c2c3c303c343c383c3c3c403c443c503c543c583c5c3c603c643c683c6c3c703c743c783c843c883c8c3c__APP__
+79000010ce390010f61520108581107645504f430020000000756022000000000100bb0080ac4d1223e2e00003000001a80e0000000000000010000000001000002000000000000001000000000000100000000007000000200f000001000000a00c00007c00000000000000240f0000ec110000000000005e01000000b500f0cff902bc0847000001480068704700009c0a001000b5011c024800f075fc01bc00470000bc0a001030b585b00490002100f0e6fa6846049900f0e8fa684600f013f9011c049c9e256d006019016004980022002300f0daf9a0256d0065190020286000f0dbf9012100f0def905b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b4838609e2464003d192968002910d0786800f0c0fa2968002905d008688268081c032100f081f99e246400391900200860a02464003d192868002803d000f028fc00202860796a002905d008688268081c032100f069f9381c311c00f0a1faf0bc01bc0047580c00108c0c0010e00a001084b010b595b01790189119921a9301200021002200f046fc041c14a901a800f005fc002808d10090201c17a90222002300f03efc00f000fc00f004fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f06ffa011c0a687ea8126a00f027f98026f6006e44301c00f025fa2949301c7eaa002300f025fac425ed006d44281c00f027fa244c6c440021224868440160201c042100f023fa301c00f026fa011c201c2a1c00f027fa002824d1301c00f01cfa011c8420000168448022520000f0c2fb8521090169446846fc22520000f0c0fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f024fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa00a0010480a000044080000480800004c0800004c0a000000b50120fff7f2fe01bc004700b5081cfff7f6ff01bc004710b5021c80204000814203d1101c00f0f5f905e09e24640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f074fb201c10bc02bc084730b5051c2c2000f071fb041c002c03d000f092fb06482060201c00f06dfb201c291c00f007f8201c30bc02bc084700004c0b001030b5041c0d1c00f0bdf8201c291c00f0bff82068016a201c00f06ef830bc01bc0047000000b5034a026000f0b7f801bc004700004c0b001030b584b0041c00f0b3f8051c6846211c00f0b4f82868b8300268281c694600f051f804b030bc01bc0047000030b5051c242000f025fb041c002c04d0291c00f08ff903482060201c30bc02bc08470000c00b001010b5a220400000f011fb041c002c0cd000f082f9074860610748a06107482060201c3430802100f00dfb201c10bc02bc08470000580c00108c0c0010e00a001010b58b20800000f003fb041c002c03d000f068f902482060201c10bc02bc08471c0c0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046a00c0010014b1b681847c046a80c0010014b1b681847c046ac0c0010014b1b681847c046a40c001040b4024e3668b44640bc6047b40c0010014b1b681847c046200d0010014b1b681847c046380d0010014b1b681847c046c40c0010014b1b681847c046180d0010014b1b681847c046280d0010014b1b681847c046240d0010014b1b681847c046000d0010014b1b681847c046f40c0010014b1b681847c046ec0c0010014b1b681847c046100d0010014b1b681847c0460c0d0010014b1b681847c046bc0c0010014b1b681847c046b00c0010014b1b681847c046fc0c0010014b1b681847c046340d0010014b1b681847c046140d0010014b1b681847c046f00c0010014b1b681847c046cc0c0010014b1b681847c046e40c0010014b1b681847c046d80c0010014b1b681847c046d40c0010014b1b681847c046c80c0010014b1b681847c0461c0d0010014b1b681847c046f80c0010014b1b681847c046c00c0010014b1b681847c046b80c0010014b1b681847c046040d0010014b1b681847c046e80c0010014b1b681847c046d00c0010014b1b681847c046dc0c0010014b1b681847c046080d0010014b1b681847c046e00c0010014b1b681847c0462c0d0010014b1b681847c046300d0010014b1b681847c046500d001040b4024e3668b44640bc6047480d0010014b1b681847c0464c0d0010014b1b681847c0463c0d0010014b1b681847c046440d0010014b1b681847c046400d0010014b1b681847c046640e0010014b1b681847c0467c0d0010014b1b681847c046f80d0010014b1b681847c046400e0010014b1b681847c0466c0d0010014b1b681847c0469c0d0010014b1b681847c046440e0010014b1b681847c0464c0e0010014b1b681847c046480e0010014b1b681847c046580e0010014b1b681847c046600e0010014b1b681847c046040e0010014b1b681847c0460c0e0010014b1b681847c046540e0010014b1b681847c046c40d0010014b1b681847c046a80d0010014b1b681847c046b80d0010014b1b681847c046f40d0010014b1b681847c046e00d0010014b1b681847c046880d001040b4024e3668b44640bc6047b00d0010014b1b681847c046bc0d0010014b1b681847c046340e0010014b1b681847c046100e0010014b1b681847c046140e0010014b1b681847c046e80d0010014b1b681847c046840d0010014b1b681847c046e40d0010014b1b681847c046d80d0010014b1b681847c046740d0010014b1b681847c046000e0010014b1b681847c046a40d0010014b1b681847c046700d0010014b1b681847c046180e0010014b1b681847c046d00d0010014b1b681847c0468c0d0010014b1b681847c046980d0010014b1b681847c046ec0d0010014b1b681847c046240e0010014b1b681847c0462c0e0010014b1b681847c0461c0e0010014b1b681847c046a00d0010014b1b681847c046cc0d0010014b1b681847c046c80d0010014b1b681847c046fc0d0010014b1b681847c046080e001040b4024e3668b44640bc6047dc0d0010014b1b681847c046300e0010014b1b681847c0465c0e001040b4024e3668b44640bc6047b40d0010014b1b681847c046f00d001040b4024e3668b44640bc6047c00d0010014b1b681847c046280e0010014b1b681847c046800d0010014b1b681847c046ac0d0010014b1b681847c046780d001040b4024e3668b44640bc6047200e0010014b1b681847c046940d0010014b1b681847c046900d0010014b1b681847c046d40d0010014b1b681847c046500e0010014b1b681847c0463c0e0010014b1b681847c046380e0010014b1b681847c046700e0010014b1b681847c046900e0010014b1b681847c046800e0010014b1b681847c046840e0010014b1b681847c046740e0010014b1b681847c046880e0010014b1b681847c046680e0010014b1b681847c046780e0010014b1b681847c0466c0e0010014b1b681847c0467c0e0010014b1b681847c0468c0e0010014b1b681847c046940e0010014b1b681847c046980e001040b4024e3668b44640bc60479c0e0010014b1b681847c046640d0010014b1b681847c046600d0010014b1b681847c0465c0d0010014b1b681847c046580d0010014b1b681847c046540d0010014b1b681847c046680d00107047000000b5fff77bff01bc0047000000b5fff76fff01bc0047000010b581b0039c14380094fff725ff01b010bc01bc0047000000b51438fff716ff01bc004700b51438fff71eff01bc004700b51838fff702ff02bc0847ffffffff00000000ffffffff000000009c0a0010bc0a0010580c00108c0c0010e00a0010a00a00104c0b00104c0b0010c00b0010580c00108c0c0010e00a00101c0c0010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c0000000000000000000000000079000010710600107d06001089060010950600106505001071050010a10600107d050010ad060010b906001089050010950500102d000010c50600104101001045020010d1060010dd060010e9060010f506001005070010110700101d070010290700100000000000000000d902001075040010810400108d04001099040010a5040010b1040010bd040010c9040010c5090010d5040010d1090010e1040010dd090010e9090010ed040010f904001005050010110500101d0500102905001035050010410500104d050010ed020010f5090010590500100000000000000000050a0010a1070010ad070010ed030010b9070010c5070010d1070010dd070010e9070010010a0010f507001001080010f9030010050400100d08001019080010250800104103001031080010410800104d0800100000000000000000110a001035070010410700100d0000104d07001059070010e103001065070010710700107d070010890700109507001019030010ecffffff00000000350a0010910800109d080010a9080010b5080010c5080010d10800101d0a0010dd080010410a0010e9080010e8ffffff000000004d0a0010a1050010ad05001003000000060000001b00000047000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff000000000100001401000015010000120000002700000033000000b7000000e3000000e6000000260100005601000065010000800200000a040000af04000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e06000004000000780500000000000081030000c80200003c0200000400000003000000060000001b000000470000005102000023000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff0000000001000014010000150100006402000006000000120000002700000033000000b7000000e3000000e60000007802000006000000260100005601000065010000800200000a040000af0400008f0200003f00000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000a50200000c000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e060000b90200000200000004000000780500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0000000004020000fe000000000000000402000014302830ec30f030f4301432b032e8323c33743378337c33a033e833f43300340c341c342834343440344c345834643470347c3488349434a034ac34b834c434d034dc34e834f43400350c351835243530353c354835543560356c357835843590359c35a835b435c035d035dc35e835f43500360c361836243630363c364836543660366c367836843690369c36a836b436c036cc36d836e436f03600370c371837243730373c374837543760376c377837843790379c37a837b437c037cc37d837e437f037fc370838143820382c383c38483854386438703880388c389838a438b038c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b439c039cc39d839e439f039fc39683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983ae83aec3af03af43af83afc3a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b343b383b3c3b403b443b483b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b903b943b983b9c3ba03ba43ba83bac3bb03bb43bb83bbc3bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c243c283c2c3c303c343c383c3c3c403c443c483c4c3c503c543c603c643c683c6c3c703c743c783c7c3c803c843c883c943c983c9c3c
+__APP__
   }
 
   # This is Symbian application resource skeleton.
@@ -380,6 +381,31 @@ __RSC__
   # Use symbian\hexdump.pl to create the perlrscmin.hex for this hexdump.
   if ($Variant eq 'S80') {
     $RSCHEX = <<__RSC__;
-6b4a1f10000000005fde04001ca360de01b800380400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000014001c001c0034008200a5004701__RSC__
+6b4a1f10000000005fde04001ca360de01b800780400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000003010005055469746c65110000000064b0f3000000000001000200060650726f6d70740f06040000000000000a00010080000014001c001c0034008200a50047017b01
+__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.
+  # Use symbian\hexdump.pl to create the perlappmin.hex for this hexdump.
+  if ($Variant eq 'UIQ') {
+      $APPHEX = <<__APP__;
+79000010ce390010f61520108581107645504f43002000001c2ae529000000000100af00c0f9bef022e2e00003000000ac2e000000000000001000000000100000200000000000000100000000000010000000000c000000242f000001000000442b00007c00000000000000282f0000e0330000000000005e01000000b501f0cbfb02bc0847000001480068704700009c26001000b5011c024801f039fe01bc00470000bc26001030b585b00490002102f016f86846049901f048fd684601f0f7fa011c049ca4256d006019016004980022002301f0e4fba6256d0065190020286001f0e5fb012101f0e8fb05b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b483860a42464003d192968002910d0786801f020fd2968002905d008688268081c032101f07dfba4246400391900200860a62464003d192868002803d001f0ecfd00202860796a002905d008688268081c032101f065fb381c311c01f0c5fff0bc01bc0047fc2a0010302b00109c28001000b5682001f0d6fd002801d001f0d6fe054901f0d9fe00220221c84200d10122101c02bc0847000007f0e54d00b5682001f0c0fd002801d001f0c0fe054901f0c3fe00220221c84200d10122101c02bc0847000009f0e54d10b5041c01f06efb211c01f0c5fc10bc01bc004710b5041c01f064fb211c01f0c1fc012010bc02bc0847000030b5041c0d1c01f097fe0b48e0620b4820630b4860630b48a0630b482060a566201c6c3001f08afd201c743001f086fd201c30bc02bc0847742800108028001060280010d82a00103c2a001010b5041c054901f07dfe01f057fea16e0860012010bc02bc084700000604000010b5041c211c6c3101f072fe0549201c01f074fe7434211c01f046fe10bc01bc0047000006040000f0b5474680b481b0051c0e1c90461f1c00200090802001f041fd041c002c03d06946fff7a3ff041c201c6c30002802d0291c01f03ffd201c7430002802d0311c01f038fde7670449201c01f031fe002804d1002007e0000006f0e54d0099404601f02efd012001b008bc9846f0bc02bc084700000020704784b030b50390049105920693204903a801f020fd041c0025002c06d103a8002101f01efd00885c282bd0022c2ad103a8002101f015fd0088402806d903a8002101f00efd00885a280dd903a8002101f007fd0088602815d903a8002101f000fd00887a280ed803a8012101f0f9fc00883a2807d103a8022101f0f2fc00885c2800d10125281c30bc08bc04b0184700002428001084b030b50390049105920693204903a801f0d6fc041c0025002c06d103a8002101f0d4fc00885c282bd0022c2ad103a8002101f0cbfc0088402806d903a8002101f0c4fc00885a280dd903a8002101f0bdfc0088602815d903a8002101f0b6fc00887a280ed803a8012101f0affc00883a2807d103a8022101f0a8fc00885c2800d10125281c30bc08bc04b0184700000428001030b584b001f02efb009001916d4602ac0849201c01f096fc281c211c01f098fc0021002800d10121081c04b030bc02bc084700007423001030b584b001f012fb009001916d4602ac0849201c01f07afc281c211c01f07cfc0021002800d10121081c04b030bc02bc0847000080230010f0b52c4ca54486ab18600f1c151c012668468021490001f069fc82ac2649201c01f058fc6846211c2a1c01f065fc6846fff752fe002855d084ac2049201c01f049fc6846211c2a1c01f056fc6846fff743fe002846d086a8291c01f0bff900280fd087ac1649201c01f034fc6846211c2a1c01f041fc6846fff72efe002800d10026002e2ed086a8391c2a1c012301f0abf9061c002e17d189ac0a49201c01f019fc6846211c2a1c01f026fc6846fff73ffe17e0ccfdffff8c230010f823001018240010382400108bac0949201c01f001fc6846211c321c2b1c01f00dfc6846fff730fe8d239b009d44f0bc01bc00475424001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f0f7fb4c466468a0460c980001070900264e9c0294484601f0ebfbbc4200dbc1e10ca8029901f0eafb007820281cd00ca8029901f0e3fb0078092815d00ca8029901f0dcfb00780a280ed00ca8029901f0d5fb00780d2807d00ca8029901f0cefb00780c2800d09de1029cbc4200db99e10ca8211c01f0c2fb007820281bd00ca8029901f0bbfb0078092814d00ca8029901f0b4fb00780a280dd00ca8029901f0adfb00780d2806d00ca8029901f0a6fb00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f097fb0078402806d90ca8029901f090fb00785a280fd90ca8029901f089fb0078602800d858e10ca8029901f081fb00787a2800d950e1029cbc4200db04e10ca8211c01f075fb0078402806d90ca8029901f06efb00785a2823d90ca8029901f067fb0078602806d90ca8029901f060fb00787a2815d90ca8029901f059fb00782f2806d90ca8029901f052fb0078392807d90ca8029901f04bfb00785f2800d0d2e0029cbc4243da0ca8211c01f040fb0078402806d90ca8029901f039fb00785a2822d90ca8029901f032fb0078602806d90ca8029901f02bfb00787a2814d90ca8029901f024fb00782f2806d90ca8029901f01dfb0078392806d90ca8029901f016fb00785f2812d1464510da311c0136484601f0e6fa039002990c1c013402940ca801f004fb0078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f0f6fa00783a2800d074e70ca8514601f0eefa00783a2800d06ce7464500db69e7311c0136484601f0bcfa5c210180029c02340294bc4266da0ca8211c01f0d7fa0078402806d90ca8029901f0d0fa00785a280fd90ca8029901f0c9fa0078602800d847e70ca8029901f0c1fa00787a2800d93fe7029cbc4245da0ca8211c01f0b6fa0078402806d90ca8029901f0affa00785a2823d90ca8029901f0a8fa0078602806d90ca8029901f0a1fa00787a2815d90ca8029901f09afa00782f2806d90ca8029901f093fa0078392807d90ca8029901f08cfa00785f2800d00ae7464500db07e7311c0136484601f05afa039002990c1c013402940ca801f078fa0078039c2080b6e7029cbc4244da0ca8211c01f06dfa007820281bd00ca8029901f066fa0078092814d00ca8029901f05ffa00780a280dd00ca8029901f058fa00780d2806d00ca8029901f051fa00780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f043fa00783b2813d1f01c404510da4846311c01f03ffa6c460449201c01f014fa4846211c01f03cfa012002e074230010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f012fa8820c00068448424e4006c44216801f00ffa814601204c46c44200d1a1e040a88021490001f0d8f9c224a4006c44a0468422520040468821c900694401f0fef9484607303e9040ac3f94c6a96846f82201f0f4f944462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f0e9f9301c01f038f88322d2006a44106051608321c9006944404601f0e1f91d49404601f0e3f9381c01f0aaf9216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f06ef98424e4006c442060c2a8494601f08cf900788424e4006c44256828800124a144e3e70000dcfbffff44040000a024001038280010311c0136381c01f04ff95c2101800024a146409800010009814515da311c0136381c01f041f98424e4006c44206040a8494601f039f900888424e4006c44256828800124a144e4e7381c311c01e0381c002101f055f9044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f06ef9009001916d4602ac0e49201c01f042f9281c211c01f068f900280cd104ac0a49201c01f037f90aa8211c01f039f90121c84200d00126301c06b070bc08bc04b018470000b0240010b424001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490001f0e4f8301c00f06bffcb22d2006a4410605160cd24e4006c44206800f066ffcc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206801f0baf84c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216801f0bcf80024a146c225ad006d44cd24e4006c442560206840a900f03fffcd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694401f0caf8cea96846f82201f0c5f82068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002101f098f8c2ac201c40a900f00fff201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920001f083f8c2ac84225200201cd121c900694401f07af88620c00068443f90c5a96846fc2201f071f82168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffffc4240010242800101829001034040000ec2a0010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c01f02af882a96846fc22520001f024f87e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f078fe4046fff74dfb00282ad14046291c00f06ffe4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f0faff8621c90069446846f82200f0f3ff20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f0a9ff002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c040000e4240010e724e4006c441749201c00f085ff7ea8211c2a1c00f092ff7ea8fff795f900281dd0a524e4006c4482229200201c291c00f0b0ffa721c90069446846fc22520000f0a8ff2068084969440968a622d2006a441268054b6b441b6800f0c5f9012007e00000102500102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f0e8fd8320c000684400f0e3fdc720c00068448021490000f040ff7ea8391c0022002300f0dcfd381c002100f024ff0088402806d9381c002100f01dff00885a280dd9381c002100f016ff008860281cd9381c002100f00fff00887a2815d8381c012100f008ff00883a280ed1381c022100f001ff00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f097fc806900f0fafd011c0a68201c126a00f048fc8320c0006844211c0022002300f094fda6256d0045442868002803d100f07efc1c302860574d6d4400215648684401606960a620400040440168281c3a1c002300f082fd061c002e00d0fde08420000168448021490000f005ff842109016944281c00f079fd061c281c00f07bfd002e00d0dde0444c6c4482229200201c391c00f0eafe414969446846fc22520000f0e3fe20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f0b2fee7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f08ffec5252d016d44e72636016e44842109016944194c6c4484225200201c00f07ffea620400040440068006841901449694468468222520000f072fe2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000018290010540c00001c040000ec2a0010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f043fe134969446846fc2200f03dfe2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f0e4fd201c291c3a1c00f0f1fd22e05c0c0000540c0000580c000028250010c724e4006c44024d6d4402490ae00000a811000050250010c724e4006c440f4d6d440f49281c00f0c1fd201c291c321c3b1c00f0cdfd201cfef7f0ff4446606a00280fd000f052fb816900290dd008688268081c032100f003fb06e0b011000078250010404600f0adfc034b9d4408bc9846f0bc01bc0047b811000084b030b51d4ca5449c909d919e929f9301200021002200f03dfe041c96a901a800f0e8fd002808d10090201c9ca90222002300f035fe00f0e3fd96a80068002813d014a88021490000f07efd14ad97ac0b49201c00f06cfd96a80268281c211c00f078fd281cfef77bff00f0cffd99239b009d4430bc08bc04b018479cfdffffb425001010b5094ca544041c68468022520000f0c1fd201c6946fff7fffd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f03bfc011c0a687ea8126a00f089fa8026f6006e44301c00f0d1fb2949301c7eaa002300f0d1fbc425ed006d44281c00f0e7fb244c6c440021224868440160201c042100f0e3fb301c00f0e6fb011c201c2a1c00f0e7fb002824d1301c00f0dcfb011c8420000168448022520000f072fd8521090169446846fc22520000f034fd84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f0f0fb00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa0260010480a000044080000480800004c0800004c0a000010b5a62464000019016010bc01bc0047f0b50b4ca5440b4c6c4420607ea88021490000f0c3fc074c6c442468064d6019052800d92ae180000449401800688746c8f7ffff3408000000fcffffb0130010c8130010f813001024140010a8140010601500107415001009490a4b032000900020019002220292039004930592012006907ea80522092300f096fcbce00000dc260010d026001001200021002200f02bfd8022d2006a44131c054970c970c30321002300f02efd00f0dafce9e00000082600101a4868448021490000f06efc174f6f44174c6c441749201c00f05afc381c211c00f044fc381cfef71bff002800d1cee0114c6c4482229200201c391c00f086fc0e4969446846fc22520000f07ffc2068c321c90069440968094a6a441268c423db006b441b68fff79bfeb0e00c0400001c0800001426001014060000240600001c06000000f0c4f98569254c6c442549201c00f01dfc24492f1c4037201c3a1c8023fef7a3fe002800d190e08020c0006844c021490000f04ffc8025ed006d44281c391c00f096f901200021002200f0b1fc061c0c2000f0c5fb041c00f072fc124a6a44124911486844016054600f4868444168006800f06bfc0e4820600e486060281c00f06cfca060301c0321221c002300f09dfc022000f068fc57e00000240800002c2600101c2600102c0800007d1c0010b4240010d025001003497ea800f0d8fb7ea8fef7f1fd40e05c2700108020c00068448021490000f0c5fbc120c00068448021490000f0befb1249134b8024e4006c4403200090002001900222029203900493059201200690201c0522092300f0affb201cfef7c8fd084800f02bfcc124e4006c440649201c00f0a2fb201cfef7bbfd0ae0dc260010d026001040420f005c2700100120fef713fd024b9d44f0bc01bc00473808000000b5081cfff7b4fe01bc004710b5021c80204000814203d1101c00f077fa05e0a424640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f0f4fb201c10bc02bc084730b5051c282000f02dfb041c002c03d000f0f8f806482060201c00f0e7fb201c291c00f007f8201c30bc02bc084700002829001030b5041c0d1c00f0e9f8201c291c00f0ebf82068016a201c00f086f830bc01bc0047000000b5034a026000f0e3f801bc004700002829001030b584b0041c00f0dff8051c6846211c00f0e0f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f0e1fa041c002c04d0291c00f011fa03482060201c30bc02bc084700009c29001010b5a820400000f0cdfa041c002c0cd000f0b0fc074860610748a06107482060201c4030802100f0edfa201c10bc02bc08470000fc2a0010302b00109c280010f0b50d1c171c1c1c00f070f88669301c211cfff701fe002d05d03068026d301c391c00f01df80020f0bc02bc0847000010b58c20800000f05ffb041c002c03d000f07efc02482060201c10bc02bc0847f8290010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046482b0010014b1b681847c0464c2b0010014b1b681847c046442b0010014b1b681847c046542b001040b4024e3668b44640bc6047502b0010014b1b681847c046582b001040b4024e3668b44640bc6047602b0010014b1b681847c046dc2b0010014b1b681847c046fc2b0010014b1b681847c046e82b0010014b1b681847c046702b0010014b1b681847c046d42b0010014b1b681847c046e42b0010014b1b681847c046e02b0010014b1b681847c046b42b0010014b1b681847c046a02b0010014b1b681847c046cc2b0010014b1b681847c046c82b0010014b1b681847c0465c2b0010014b1b681847c046b02b0010014b1b681847c046f82b0010014b1b681847c046d02b0010014b1b681847c046882b0010014b1b681847c046842b0010014b1b681847c046742b0010014b1b681847c046ac2b0010014b1b681847c046a82b0010014b1b681847c046682b0010014b1b681847c046c42b0010014b1b681847c046902b0010014b1b681847c046a42b0010014b1b681847c0468c2b0010014b1b681847c046782b0010014b1b681847c0467c2b0010014b1b681847c046982b0010014b1b681847c046d82b0010014b1b681847c0466c2b0010014b1b681847c046642b0010014b1b681847c046b82b0010014b1b681847c046bc2b0010014b1b681847c0469c2b0010014b1b681847c046802b0010014b1b681847c046942b0010014b1b681847c046ec2b0010014b1b681847c046c02b0010014b1b681847c046f02b0010014b1b681847c046f42b0010014b1b681847c046102c0010014b1b681847c046082c0010014b1b681847c046182c0010014b1b681847c046302c0010014b1b681847c046382c001040b4024e3668b44640bc60472c2c001040b4024e3668b44640bc6047242c0010014b1b681847c046282c0010014b1b681847c046002c0010014b1b681847c046342c0010014b1b681847c046042c0010014b1b681847c046142c0010014b1b681847c0460c2c0010014b1b681847c046202c0010014b1b681847c0461c2c0010014b1b681847c046582c0010014b1b681847c046a02c0010014b1b681847c0468c2c0010014b1b681847c0464c2c0010014b1b681847c046502c0010014b1b681847c046742c0010014b1b681847c046cc2c0010014b1b681847c046802c0010014b1b681847c046602c0010014b1b681847c046c42c0010014b1b681847c046942c0010014b1b681847c046642c0010014b1b681847c046702c0010014b1b681847c0469c2c0010014b1b681847c046b42c0010014b1b681847c046bc2c0010014b1b681847c046ac2c0010014b1b681847c046782c0010014b1b681847c046902c0010014b1b681847c046882c0010014b1b681847c046a42c0010014b1b681847c046a82c0010014b1b681847c046c02c0010014b1b681847c046d42c001040b4024e3668b44640bc6047842c0010014b1b681847c046b82c0010014b1b681847c0465c2c0010014b1b681847c0467c2c0010014b1b681847c046542c001040b4024e3668b44640bc6047b02c0010014b1b681847c0466c2c0010014b1b681847c046682c0010014b1b681847c046982c0010014b1b681847c046d02c0010014b1b681847c046c82c0010014b1b681847c0466c2d0010014b1b681847c046682d0010014b1b681847c046b02d0010014b1b681847c046f82d0010014b1b681847c046742d0010014b1b681847c046e82d0010014b1b681847c046f02d0010014b1b681847c046982d0010014b1b681847c0469c2d0010014b1b681847c046882d0010014b1b681847c046ec2d0010014b1b681847c0468c2d0010014b1b681847c046e02d001040b4024e3668b44640bc6047a42d0010014b1b681847c046d02d0010014b1b681847c046842d0010014b1b681847c046cc2d0010014b1b681847c046802d0010014b1b681847c046e42d0010014b1b681847c046a02d0010014b1b681847c046702d0010014b1b681847c046f42d0010014b1b681847c046942d0010014b1b681847c0467c2d0010014b1b681847c046ac2d0010014b1b681847c046902d0010014b1b681847c046d42d0010014b1b681847c046d82d0010014b1b681847c046b42d0010014b1b681847c046dc2d0010014b1b681847c046a82d001040b4024e3668b44640bc6047c42d0010014b1b681847c046c02d0010014b1b681847c046b82d0010014b1b681847c046782d0010014b1b681847c046bc2d0010014b1b681847c046c82d0010014b1b681847c046fc2d0010014b1b681847c046002e0010014b1b681847c046042e001040b4024e3668b44640bc60470c2e001040b4024e3668b44640bc6047082e0010014b1b681847c0463c2c0010014b1b681847c046482c0010014b1b681847c046442c0010014b1b681847c046402c0010014b1b681847c046582d0010014b1b681847c046f42c0010014b1b681847c046e42c0010014b1b681847c0464c2d0010014b1b681847c046e02c0010014b1b681847c0465c2d0010014b1b681847c046602d0010014b1b681847c0461c2d0010014b1b681847c046dc2c0010014b1b681847c046182d0010014b1b681847c0460c2d0010014b1b681847c046f82c0010014b1b681847c046fc2c0010014b1b681847c046102d0010014b1b681847c046502d0010014b1b681847c046e82c0010014b1b681847c046d82c0010014b1b681847c046f02c0010014b1b681847c046342d0010014b1b681847c046382d0010014b1b681847c046302d0010014b1b681847c046242d0010014b1b681847c046442d0010014b1b681847c046042d0010014b1b681847c046082d0010014b1b681847c046482d0010014b1b681847c0463c2d0010014b1b681847c046402d0010014b1b681847c046002d0010014b1b681847c046282d0010014b1b681847c0462c2d0010014b1b681847c046202d0010014b1b681847c046142d0010014b1b681847c046ec2c0010014b1b681847c046642d0010014b1b681847c046542d0010014b1b681847c046a02e0010014b1b681847c046682e0010014b1b681847c046102e0010014b1b681847c046202e0010014b1b681847c046442e0010014b1b681847c046502e0010014b1b681847c046582e0010014b1b681847c0465c2e0010014b1b681847c046342e0010014b1b681847c046242e0010014b1b681847c046402e0010014b1b681847c0462c2e0010014b1b681847c0464c2e0010014b1b681847c046482e001040b4024e3668b44640bc60473c2e0010014b1b681847c046382e0010014b1b681847c046602e0010014b1b681847c046642e0010014b1b681847c046302e0010014b1b681847c046142e0010014b1b681847c046182e0010014b1b681847c0461c2e0010014b1b681847c046902e0010014b1b681847c046802e0010014b1b681847c0468c2e0010014b1b681847c046882e0010014b1b681847c0466c2e0010014b1b681847c0467c2e0010014b1b681847c046942e0010014b1b681847c046842e0010014b1b681847c046702e0010014b1b681847c046982e0010014b1b681847c046742e0010014b1b681847c046782e0010014b1b681847c046542e001040b4024e3668b44640bc6047282e0010014b1b681847c0469c2e00107047000000b5fff71ffd01bc0047000000b5fff7efff01bc0047000000b5074ac262074a0263074a4263074a8263074a0260fff7fdfe01bc00470000742800108028001060280010d82a00103c2a001010b581b0039c14380094fff7b5fc01b010bc01bc0047000000b51438fff7b4ff01bc004700b51438fff7aefc01bc004700b51838fff7aeff02bc084700b52c38fff7a4fe01bc004710b5041c3039fff7bbfe201c10bc02bc0847000000b53038fff7acfe01bc004700b53038fff7a0fe01bc004700b53038fff794fe01bc004700b53038fff7a6fe01bc004700b53438fff782fe01bc004700b53838fff7f2fd02bc084700b53838fff7e6fd02bc084700b53838fff78aff01bc0047ffffffff00000000ffffffff000000009c260010bc260010fc2a0010302b00109c280010742800108028001060280010d82a00103c2a001024280010042800102e0070006d000000742300102e0070006c0000008023001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e006700200025005300000000008c230010f8230010182400103824001054240010742300107061636b61676500a024001038280010232100007065726c00000000b0240010b424001025005300250053002500530000000000c42400102428001018290010ec2a00105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f000000e4240010102500104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e006700200025005300000018290010ec2a00102825001050250010782500104500720072006f00720020002500640000000000b4250010a02600102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d6500000000b4240010d0250010d425001043003a005c0000000500000043006f00640065003a0000004f006e0065006c0069006e006500720000000000dc260010d026001008260010142600102c2600101c2600107d1c0010b4240010d02500105c270010b013001028290010282900109c290010fc2a0010302b00109c280010f8290010742800108028001060280010d82a00103c2a0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000055004900510000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e3300000000ccffffff00000000e5190010f119001005230010d4ffffff00000000b5220010d0ffffff00000000ed220010e1220010d5220010c1220010f922001000000000000000007900001095200010a1200010ad200010b9200010c1190010cd190010c5200010d1200010dd200010e9200010f5200010d91900102d000010251b0010751200100d1600100121001049120010311b00100d2100101d2100103d1b00102921001035210010412100104d210010592100106521001000000000000000004d1e00104d1e00100000000000000000a11600101919001095180010a1180010ad18001025190010b9180010c5180010d118001031190010dd1800103d1900104919001055190010611900106d19001079190010e9180010f518001001190010851900100d190010911900109d190010b5160010a9190010b519001000000000000000002d220010491b0010551b0010d9170010611b00106d1b0010791b0010851b0010911b0010292200109d1b0010a91b0010e5170010f1170010b51b0010c11b0010cd1b00100917001049170010d91b0010e51b0010000000000000000039220010712100107d2100100d0000108921001095210010a1210010ad210010b9210010c5210010d1210010dd210010e1160010e9210010f5210010000000000000000045220010091f001095180010a1180010ad180010151f0010b9180010c5180010d11800109d1e0010dd180010a91e0010211f00102d1f0010391f0010451f0010511f0010e9180010f5180010011900105d1f00100d190010691f0010751f0010811f00108d1f0010991f0010c9010010a51f0010e9010010b11f0010bd1f0010c91f0010d51f0010e11f0010ed1f0010f91f0010c8ffffff00000000292300101d230010112300100000000000000000b91a0010c51a0010ecffffff00000000912200100d1c0010191c0010251c0010311c0010411c00104d1c001079220010591c00109d220010651c0010e8ffffff00000000a9220010fd190010091a0010060000001b00000047000000110000002900000004000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b5000000b9000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000f4000000ff0000000001000014010000150100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e60000002e01000065010000800200004d03000009000000110000001f0000002000000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000005c000000640000007400000079000000820000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd0000000a0000000e0000001400000017000000180000001b00000022000000250000002b0000002e0000002f000000310000003200000035000000390000003f000000470000004c0000004f00000050000000530000005500000056000000580000005b0000005e0000005f000000730000007c00000081000000860000008f000000930000009500000096000000970000000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300003c03000053030000590300005a030000e7030000ea0300007c0400008c0400000205000003050000690500007e0500007f0500008105000097050000e00500002e0600004b060000040000004600000078050000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000ad0100000000000079170000b8040000c403000003000000060000001b00000047000000d9030000020000001100000029000000ec03000001000000040000000304000029000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b5000000b9000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000f4000000ff000000000100001401000015010000160400000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e60000002a040000040000002e01000065010000800200004d030000410400002300000009000000110000001f0000002000000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000005c000000640000007400000079000000820000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd00000057040000240000000a0000000e0000001400000017000000180000001b00000022000000250000002b0000002e0000002f000000310000003200000035000000390000003f000000470000004c0000004f00000050000000530000005500000056000000580000005b0000005e0000005f000000730000007c00000081000000860000008f000000930000009500000096000000970000006c0400000200000003000000060000008104000025000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300003c03000053030000590300005a030000e7030000ea0300007c0400008c0400000205000003050000690500007e0500007f0500008105000097050000e00500002e0600004b0600009504000003000000040000004600000078050000a104000025000000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000ad0100004150504152435b31303030336133645d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045494b444c475b31303030343839385d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0051494b43544c5b31303030356663395d2e444c4c00000010040000fb010000000000004400000014302830ec30f030f430b431b831bc31c031c4311833ac33e4331c34d834dc34e034e4341035d838383a3c3a083b0c3bb03cb43cb83cc03cd83d403e00100000a0010000b030bc3044315c31a83144324833ac33b033b433b833bc33c033c433f033f4332034983448354c35543558355c357035dc35e035e8357836b03604373c37403744379837e037ec37f83704381438203830383c384838543860386c387838843890389c38a838b438c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b039bc39c839d439e039ec39f839043a103a1c3a283a343a403a4c3a5c3a6c3a783a843a903a9c3aa83ab43ac03acc3ad83ae43af03afc3a083b143b203b2c3b383b443b503b5c3b683b743b803b8c3b983ba43bb03bbc3bc83bd43be03bec3bfc3b083c143c203c2c3c3c3c483c543c603c6c3c783c843c903c9c3ca83cb43cc03ccc3cd83ce43cf03cfc3c083d143d243d303d3c3d483d543d603d6c3d783d843d903d9c3da83db43dc03dcc3dd83de43df03d003e0c3e183e243e303e3c3e483e543e603e703e803e8c3e983ea43eb03ebc3ec83ed43ee03eec3ef83e043f103f1c3f283f343f403f4c3f583f643f703f7c3f883f943fa03fac3fb83fc43fd03fdc3fe83ff43f002000002c02000000300c301830243030303c304830543060306c307830843090309c30a830b430c030cc30d830e430f030fc3008311831243130313c314831543160316c317831843190319c31a831b431c031cc31d831e431f031fc31083218322432643268326c3270327432443348334c335033543358335c336033643368336c3370337c33883388348c349034943498349c34a834ac34bc34c034d434d834dc34e03420352435a035a435a835ac35b035c835cc3508360c3610364036443648364c365036543658365c366036643668366c367036743678367c368036843688368c3690369436983668386c3870387c3888388c38903894389838a438a838ac38b038b438b838bc38c038c438c838cc38d038d438d838dc38e038e438e838ec38f038f438f838fc380039043908390c3910391439203924393039343938393c394039443948394c395039543958395c396039643968396c397039743978397c398039843988398c39903994399839a439a839ac39b039b439b839bc39c039c439c839cc39d039d439d839dc39e039e439e839ec39f039f439003a043a083a0c3a103a143a183a1c3a203a243a283a2c3a303a343a383a443a483a4c3a503a543a583a5c3a603a643a683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983a9c3aa03aa43aa83aac3ab03ab43ab83abc3ac03ac43ac83acc3ad03ad43ae03ae43ae83af43af83a043b083b0c3b103b143b183b1c3b203b243b283b2c3b383b3c3b403b0000
+__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.
+  # Use symbian\hexdump.pl to create the perlrscmin.hex for this hexdump.
+  if ($Variant eq 'UIQ') {
+    $RSCHEX = <<__RSC__;
+6b4a1f10000000005fde04001ca360de01b800f8030400000001f0e54d0000000004f0e54d04f0e54d0000000000000000000000000007010005f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000000050100000005055469746c6511460014000000000064b0f30001000200060650726f6d707411060400000000000000000a0001008000000005000000000d0d4f4b202f2043616e63656c203f0e460014000000000008f0e54d00000015010000000200feff00000000000000000000000002024f6b1a00ffffffff000000000101ffff000000000000000000000000060643616e63656c0b00ffffffff0000000001010005000000000a0a596573202f204e6f203f0e46001400000000000af0e54d00000015010000000200feff00000000000000000000000003035965732900ffffffff000000000101ffff000000000000000000000000024e006f0000ffffffff00000000010115001d001d0035005800fa00320156019e01bf010402
+__RSC__
   }
 }
index a1a0422..4fb13ac 100644 (file)
@@ -9,7 +9,7 @@
 #define SYMBIAN_UTILS_CPP
 #include <e32base.h>
 #include <e32std.h>
-#include <textresolver.h>
+// #include <textresolver.h> // textresolver not used since seems not to work
 #include <utf.h>
 #include <hal.h>
 
@@ -45,8 +45,8 @@ extern "C" {
     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 (but does not work
-        // for the various subsystems).
+        // at least for the basic Symbian errors (this does not cover
+        // the various subsystems).
         dTHX;
         if (error >= 0)
             return strerror(error);
index 344f7ee..adde60e 100644 (file)
@@ -10,7 +10,19 @@ do "sanity.pl";
 
 my $CoreBuild = -d "ext" && -f "perl.h" && -d "symbian" && -f "perl.c";
 
-my $SymbianVersion = $ENV{XSBUILD_SYMBIAN_VERSION};
+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;
@@ -44,11 +56,9 @@ if ( !defined $PerlVersion && $0 =~ m:\\symbian\\perl\\(.+)\\bin\\xsbuild.pl:i )
 }
 
 if ( !defined $SymbianVersion) {
-    ($SymbianVersion) = ($ENV{PATH} =~ m!C:\\Symbian\\(.+?)\\!i);
+    ($SymbianVersion) = ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\!i);
 }
 
-my $S60SDK;
-
 my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION);
 
 if ($CoreBuild) {
@@ -61,7 +71,6 @@ if ($CoreBuild) {
     $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
     $BUILDROOT    = do "cwd.pl";
     $PerlVersion    = $R_V_SV;
-    $S60SDK = $ENV{S60SDK}; # from sdk.pl
 }
 
 usage()
@@ -218,7 +227,7 @@ sub write_mmp {
     $CONF{SOURCEPATH}    = [ $CWD, $BUILDROOT ];
     $CONF{USERINCLUDE}   = [ $CWD, $BUILDROOT ];
     $CONF{SYSTEMINCLUDE} = ["$PERLSDK\\include"] unless $CoreBuild;
-    $CONF{SYSTEMINCLUDE} = [ $BUILDROOT ] if $CoreBuild;
+    $CONF{SYSTEMINCLUDE} = [ $BUILDROOT, "$BUILDROOT\\symbian" ] if $CoreBuild;
     $CONF{LIBRARY}       = [];
     $CONF{MACRO}         = [];
     read_mmp( \%CONF, "_init.mmp" );
@@ -249,6 +258,19 @@ sub write_mmp {
     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 '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} );
     }
@@ -270,9 +292,12 @@ __EOF__
     print BASE_MMP <<__EOF__;
 LIBRARY                @{$CONF{LIBRARY}}
 MACRO          @{$CONF{MACRO}}
-// OPTION      MSVC /P
-// OPTION      GCC -E
+// 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);
 
 }
@@ -287,7 +312,7 @@ sub write_makefile {
     my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\$ARM\\$base.def";
     my $armdef2 = "..\\BMARM\\${base}u.def";
 
-    my $wrap = $SYMBIAN_ROOT && $S60SDK eq '1.2' && $SYMBIAN_ROOT !~ /_CW$/;
+    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";
@@ -550,7 +575,7 @@ sub xsconfig {
             print "\tUsing $EXTVERSION for version...\n";
             $MM{VERSION} = $MM{XS_VERSION} = $EXTVERSION;
         }
-        die "VERSION or XS_VERSION undefined\n"
+        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__;