Symbian/beginnings of Series 80 support
authorJarkko Hietaniemi <jhi@iki.fi>
Fri, 21 Oct 2005 17:15:23 +0000 (20:15 +0300)
committerH.Merijn Brand <h.m.brand@xs4all.nl>
Fri, 21 Oct 2005 14:12:10 +0000 (14:12 +0000)
Message-ID: <B356D8F434D20B40A8CEDAEC305A1F24E7A67E@esebe105.NOE.Nokia.com>

p4raw-id: //depot/perl@25814

MANIFEST
README.symbian
symbian/PerlApp.cpp
symbian/PerlApp.h
symbian/PerlApp.hrh
symbian/config.pl
symbian/makesis.pl
symbian/sdk.pl
symbian/sisify.pl
symbian/xsbuild.pl

index 6f3ea5b..e40df80 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -2651,7 +2651,8 @@ 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/PerlApp.rss            Symbian sample app resource definition
+symbian/PerlAppS60.rss         Symbian sample app resource definition
+symbian/PerlAppS80.rss         Symbian sample app 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 f3e565b..635a7c1 100644 (file)
@@ -19,7 +19,7 @@ The DLL includes a C++ class called CPerlBase, which one can then
 
 The base port of Perl to Symbian only implements the basic POSIX-like
 functionality; it does not implement any further Symbian or Series 60
-bindings for Perl.
+or Series 80 bindings for Perl.
 
 It is also possible to generate Symbian executables for "miniperl"
 and "perl", but since there is no standard command line interface
@@ -32,7 +32,7 @@ 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).  You can get the SDKs from
+    does not work), and Series 80 2.0.  You can get the SDKs from
     Forum Nokia (http://www.forum.nokia.com/).
 
     A prerequisite for any of the SDKs is to install ActivePerl
@@ -81,20 +81,22 @@ mainly as demonstrations.
 
     If you use the VC IDE, you will have to run F<symbian\config.pl>
     first using the cmd.exe, and then run 'make win.mf vc6.mf' to generate
-    the VC6 makefiles and workspaces.
+    the VC6 makefiles and workspaces.  "make vc6" will compile for the VC6,
+    and "make cw" for the CodeWarrior.
 
-    The following Series 60 SDK and compiler configurations and Nokia
-    phones that were tested (+ = compiled and PerlApp run, - = not),
+    The following Series 60 and Series 80 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:
 
-        SDK | VC | CW |
-        ----+----+----+---
-        1.2 | +  | +  | 3650 (*)
-        2.0 | +  | +  | 6600
-        2.1 | -  | +  | 6670
-        2.6 | +  | +  | 6630    
+        SDK     | VC | CW |
+        --------+----+----+---
+        S60 1.2 | +  | +  | 3650 (*)
+        S60 2.0 | +  | +  | 6600
+        S60 2.1 | -  | +  | 6670
+        S60 2.6 | +  | +  | 6630    
 
-    Also 2.8 should work fine.
+    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
@@ -105,7 +107,7 @@ mainly as demonstrations.
     the 'subst style' will not work.
 
     If using the VC IDE, to build use for example the File->Open Workspace->
-    C:\Symbian\8.as\S60_2nd_FP2\epoc32\build\symbian\perl\perl\wins\perl.dsw
+    C:\Symbian\8.0a\S60_2nd_FP2\epoc32\build\symbian\perl\perl\wins\perl.dsw
     The emulator binaries will appear in the same directory.
 
     If using the VC IDE, you will a lot of warnings in the beginning of
@@ -246,7 +248,7 @@ In the symbian subdirectory there is sisify.pl utility which can be
 used to package Perl scripts and/or Perl library directories into SIS
 files, which can be installed to the device.  To run the sisify.pl
 utility, you will need to have the 'makesis' and 'uidcrc' utilities
-already installed.  If you don't have the S60 Win32 SDKs, you may try
+already installed.  If you don't have the Win32 SDKs, you may try
 for example http://gnupoc.sourceforge.net/ or http://symbianos.org/~andreh/.
 
 =head2 Using Perl in Symbian
@@ -266,13 +268,14 @@ See the file symbian/config.sh and look for 'undef' to find the
 unsupported APIs (or from Perl use Config).
   
 The filesystem of Symbian devices uses DOSish syntax, "drives"
-separated from paths by a colon, and backslashes for the path.
-The exact assignment of the drives probably varies between platforms,
-but you might for example see C: as the flash main memory, D: as the
-RAM drive, E: as the memory card (MMC), Z: as the ROM.  As far the
-devices go the NUL: is the bit bucket, the COMx: are the serial lines,
-IRCOMx: are the IR ports, TMP: might be C:\System\Temp.  Remember to
-double those backslashes in doublequoted strings.
+separated from paths by a colon, and backslashes for the path.  The
+exact assignment of the drives probably varies between platforms, but
+for example in Series 60 you might see C: as the (flash) main memory,
+D: as the RAM drive, E: as the memory card (MMC), Z: as the ROM.  In
+Series 80 D: is the memory card.  As far the devices go the NUL: is
+the bit bucket, the COMx: are the serial lines, IRCOMx: are the IR
+ports, TMP: might be C:\System\Temp.  Remember to double those
+backslashes in doublequoted strings.
 
 The Perl DLL is installed in \System\Libs\.  The Perl libraries and
 extension DLLs are installed in \System\Libs\Perl\X.Y.Z\.  The PerlApp
@@ -304,10 +307,10 @@ is absolutely no warranty.
 =head1 NOTE
 
 When creating and extending application programming interfaces (APIs)
-for Symbian or Series 60 it is suggested that trademarks, registered
-trademarks, or trade names are not used in the API names.  Instead,
-developers should consider basing the API naming in the existing (C++)
-public component and API naming, modified as appropriate by the rules
+for Symbian or Series 60 or Series 80 it is suggested that trademarks,
+registered trademarks, or trade names are not used in the API names.
+Instead, developers should consider basing the API naming in the existing
+(C++) public component and API naming, modified as appropriate by the rules
 of the programming language the new APIs are for.
   
 Nokia is a registered trademark of Nokia Corporation. Nokia's product
index dbcdd8c..f5fa29e 100644 (file)
@@ -1,13 +1,26 @@
 /* Copyright (c) 2004-2005 Nokia. All rights reserved. */
 
 /* The PerlApp application is licensed under the same terms as Perl itself.
- * Note that this PerlApp is for Symbian/Series 60 smartphones and has nothing
- * whatsoever to do with the ActiveState PerlApp. */
+ * Note that this PerlApp is for Symbian/Series 60/80 smartphones and it has
+ * nothing whatsoever to do with the ActiveState PerlApp. */
 
 #include "PerlApp.h"
 
-#include <avkon.hrh>
-#include <aknnotewrappers.h> 
+#ifdef __SERIES60__
+# include <avkon.hrh>
+# include <aknnotewrappers.h> 
+# include <AknCommonDialogs.h>
+# ifndef __SERIES60_1X__
+#  include <CAknFileSelectionDialog.h>
+# endif
+#endif /* #ifdef __SERIES60__ */
+
+#ifdef __SERIES80__
+# include <eikon.hrh>
+# include <cknflash.h>
+# include <ckndgopn.h>
+#endif /* #ifdef __SERIES80__ */
+
 #include <apparc.h>
 #include <e32base.h>
 #include <e32cons.h>
 #include <utf.h>
 #include <f32file.h>
 
-#include <AknCommonDialogs.h>
-
-#ifndef __SERIES60_1X__
-#include <CAknFileSelectionDialog.h>
-#endif
-
 #include <coemain.h>
 
 #ifndef PerlMin
 
 #include "PerlApp.hrh"
+
 #include "PerlApp.rsg"
 
 #endif //#ifndef PerlMin
@@ -125,54 +133,98 @@ CPerlAppUi::~CPerlAppUi()
 
 #ifndef PerlMin
 
+#ifdef __SERIES60__
+
 static TBool DlgOk(CAknNoteDialog* dlg)
 {
     return dlg && dlg->RunDlgLD() == EAknSoftkeyOk;
 }
 
+#endif /* #ifdef __SERIES60__ */
+
 static TBool OkCancelDialogL(TDesC& aMessage)
 {
+#ifdef __SERIES60__
     CAknNoteDialog* dlg =
         new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
     dlg->PrepareLC(R_OK_CANCEL_DIALOG);
     dlg->SetTextL(aMessage);
     return DlgOk(dlg);
+#endif /* #ifdef __SERIES60__ */
+#ifdef __SERIES80__
+    return CCknFlashingDialog::RunDlgLD(_L("OK/Cancel"), aMessage, NULL,
+                                        CCknFlashingDialog::EShort,
+                                        NULL);
+#endif /* #ifdef __SERIES80__ */
 }
 
 static TBool YesNoDialogL(TDesC& aMessage)
 {
+#ifdef __SERIES60__
     CAknNoteDialog* dlg =
         new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
     dlg->PrepareLC(R_YES_NO_DIALOG);
     dlg->SetTextL(aMessage);
     return DlgOk(dlg);
+#endif /* #ifdef __SERIES60__ */
+#ifdef __SERIES80__
+    return CCknFlashingDialog::RunDlgLD(_L("Yes/No"), aMessage, NULL,
+                                        CCknFlashingDialog::EShort,
+                                        NULL);
+#endif /* #ifdef __SERIES80__ */
 }
 
 static TInt InformationNoteL(TDesC& aMessage)
 {
+#ifdef __SERIES60__
     CAknInformationNote* note = new (ELeave) CAknInformationNote;
     return note->ExecuteLD(aMessage);
+#endif /* #ifdef __SERIES60__ */
+#ifdef __SERIES80__
+    return CCknFlashingDialog::RunDlgLD(_L("Info"), aMessage, NULL,
+                                        CCknFlashingDialog::ENormal,
+                                        NULL);
+#endif /* #ifdef __SERIES80__ */
 }
 
 static TInt ConfirmationNoteL(TDesC& aMessage)
 {
+#ifdef __SERIES60__
     CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote;
     return note->ExecuteLD(aMessage);
+#endif /* #ifdef __SERIES60__ */
+#ifdef __SERIES80__
+    return CCknFlashingDialog::RunDlgLD(_L("Confirmation"), aMessage, NULL,
+                                        CCknFlashingDialog::ENormal,
+                                        NULL);
+#endif /* #ifdef __SERIES80__ */
 }
 
 static TInt WarningNoteL(TDesC& aMessage)
 {
+#ifdef __SERIES60__
     CAknWarningNote* note = new (ELeave) CAknWarningNote;
     return note->ExecuteLD(aMessage);
+#endif /* #ifdef __SERIES60__ */
+#ifdef __SERIES80__
+    CEikonEnv::Static()->AlertWin(aMessage);
+    return ETrue;
+#endif /* #ifdef __SERIES80__ */
 }
 
 static TInt TextQueryDialogL(const TDesC& aPrompt, TDes& aData, const TInt aMaxLength)
 {
+#ifdef __SERIES60__
     CAknTextQueryDialog* dlg =
         new (ELeave) CAknTextQueryDialog(aData);
     dlg->SetPromptL(aPrompt);
     dlg->SetMaxLength(aMaxLength);
     return dlg->ExecuteLD(R_TEXT_QUERY_DIALOG);
+#endif /* #ifdef __SERIES60__ */
+#ifdef __SERIES80__
+    /* TODO */
+    return ETrue;
+#endif
 }
 
 // The isXXX() come from the Perl headers.
@@ -436,15 +488,15 @@ TBool CPerlAppUi::ProcessCommandParametersL(TApaCommand aCommand, TFileName& /*
 {
     if (aCommand == EApaCommandRun) {
         TFileName appName = Application()->AppFullName();
-       TParse p;
-       p.Set(KDefaultScript, &appName, NULL);
-       TEntry aEntry;
-       RFs aFs;
-       aFs.Connect();
-       if (aFs.Entry(p.FullName(), aEntry) == KErrNone) {
-           DoRunScriptL(p.FullName());
-           Exit();
-       }
+        TParse p;
+        p.Set(KDefaultScript, &appName, NULL);
+        TEntry aEntry;
+        RFs aFs;
+        aFs.Connect();
+        if (aFs.Entry(p.FullName(), aEntry) == KErrNone) {
+            DoRunScriptL(p.FullName());
+            Exit();
+        }
     }
     return aCommand == EApaCommandOpen ? ETrue : EFalse;
 }
@@ -458,18 +510,13 @@ void CPerlAppUi::SetFs(const RFs& aFs)
 
 #endif // #ifndef PerlMin
 
-void CPerlAppUi::HandleCommandL(TInt aCommand)
-{
+static void DoHandleCommandL(TInt aCommand) {
 #ifndef PerlMin
     TMessageBuffer message;
 #endif // #ifndef PerlMin
 
     switch(aCommand)
     {
-    case EEikCmdExit:
-    case EAknSoftkeyExit:
-        Exit();
-        break;
 #ifndef PerlMin
     case EPerlAppCommandAbout:
         {
@@ -499,21 +546,44 @@ void CPerlAppUi::HandleCommandL(TInt aCommand)
         break;
      case EPerlAppCommandRunFile:
         {
-            InformationNoteL(message);
             TFileName aScriptUtf16;
+#ifdef __SERIES60__
             if (AknCommonDialogs::RunSelectDlgLD(aScriptUtf16,
                                                  R_MEMORY_SELECTION_DIALOG))
                 DoRunScriptL(aScriptUtf16);
-        }
+#endif /* #ifdef __SERIES60__ */
+#ifdef __SERIES80__
+           aScriptUtf16.Copy(_L("C:\\"));
+           if (CCknOpenFileDialog::RunDlgLD(aScriptUtf16,
+               CCknOpenFileDialog::EShowSystemFilesAndFolders |
+               CCknOpenFileDialog::EShowHiddenFilesAndFolders |
+               CCknOpenFileDialog::EShowAllDrives             |
+               CCknOpenFileDialog::EShowExtendedView          |
+               CCknOpenFileDialog::EShowNoFilesText) {
+             /* TODO: despite all the above flags still does not seem
+              * to allow navigating outside the default directory. */
+             TEntry aEntry;
+             RFs aFs;
+             aFs.Connect();
+             if (aFs.Entry(aScriptUtf16, aEntry) == KErrNone)
+                DoRunScriptL(aScriptUtf16);
+             /* else show error message? */
+           }
+#endif /* #ifdef __SERIES80__ */
+       }
         break;
      case EPerlAppCommandOneLiner:
         {
             _LIT(prompt, "Oneliner:");
-            if (TextQueryDialogL(prompt, iOneLiner, KPerlAppOneLinerSize)) {
-                const TUint KPerlAppUtf8Multi = 3;
+            CPerlAppUi* cAppUi =
+              STATIC_CAST(CPerlAppUi*, CEikonEnv::Static()->EikAppUi());
+            if (TextQueryDialogL(prompt,
+                                cAppUi->iOneLiner,
+                                 KPerlAppOneLinerSize)) {
+               const TUint KPerlAppUtf8Multi = 3;
                 TBuf8<KPerlAppUtf8Multi * KPerlAppOneLinerSize> utf8;
 
-                CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8, iOneLiner);
+                CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8, cAppUi->iOneLiner);
                 CPerlBase* perl = CPerlBase::NewInterpreterLC();
                 int argc = 3;
                 char **argv = (char**) malloc(argc * sizeof(char *));
@@ -535,13 +605,71 @@ void CPerlAppUi::HandleCommandL(TInt aCommand)
             InformationNoteL(message);
         }
         break;
+     case EPerlAppCommandAboutCopyright:
+        {
+           TMessageBuffer m1;
+           TMessageBuffer m2;
+            m1.Format(KAboutFormat,
+                     PERL_REVISION,
+                     PERL_VERSION,
+                     PERL_SUBVERSION,
+                     PERL_SYMBIANPORT_MAJOR,
+                     PERL_SYMBIANPORT_MINOR,
+                     PERL_SYMBIANPORT_PATCH,
+                     &KFlavor,
+                     PERL_SYMBIANSDK_MAJOR,
+                     PERL_SYMBIANSDK_MINOR
+                     );
+            InformationNoteL(message);
+            m2.Format(KCopyrightFormat);
+           message.Format(_L("%S %S"), &m1, &m2);
+            InformationNoteL(message);
+        }
+        break;
 #endif // #ifndef PerlMin
     default:
         Panic(EPerlAppCommandUnknown);
+    }
+}
+
+#ifdef __SERIES60__
+
+void CPerlAppUi::HandleCommandL(TInt aCommand)
+{
+    switch(aCommand)
+    {
+    case EEikCmdExit:
+    case EAknSoftkeyExit:
+        Exit();
+        break;
+    default:
+        DoHandleCommandL(aCommand);
+        break;
+    }
+}
+
+#endif /* #ifdef __SERIES60__ */
+
+#ifdef __SERIES80__
+
+void CPerlAppView::HandleCommandL(TInt aCommand) {
+    DoHandleCommandL(aCommand);
+}
+
+void CPerlAppUi::HandleCommandL(TInt aCommand) {
+    switch(aCommand)
+    {
+    case EEikCmdExit:
+        Exit();
+        break;
+    default:
+        iAppView->HandleCommandL(aCommand);
         break;
     }
 }
 
+#endif /* #ifdef __SERIES80__ */
+
 CPerlAppView* CPerlAppView::NewL(const TRect& aRect)
 {
     CPerlAppView* self = CPerlAppView::NewLC(aRect);
@@ -564,6 +692,10 @@ void CPerlAppView::ConstructL(const TRect& aRect)
     ActivateL();
 }
 
+CPerlAppView::~CPerlAppView()
+{
+}
+
 void CPerlAppView::Draw(const TRect& /*aRect*/) const
 {
     CWindowGc& gc = SystemGc();
@@ -586,12 +718,13 @@ CEikAppUi* CPerlAppDocument::CreateAppUiL()
 
 #ifndef PerlMin
 
-CFileStore* CPerlAppDocument::OpenFileL(TBool /* aDoOpen */, const TDesC& aFileName, RFs& aFs)
+CFileStore* CPerlAppDocument::OpenFileL(TBool aDoOpen, const TDesC& aFileName, RFs& aFs)
 {
     CPerlAppUi* appui =
       STATIC_CAST(CPerlAppUi*, CEikonEnv::Static()->EikAppUi());
     appui->SetFs(aFs);
-    appui->OpenFileL(aFileName);
+    if (aDoOpen)
+        appui->OpenFileL(aFileName);
     return NULL;
 }
 
index c76d963..04cc0c7 100644 (file)
@@ -5,20 +5,31 @@
 #ifndef __PerlApp_h__
 #define __PerlApp_h__
 
-#include <aknapp.h>
-#include <aknappui.h>
-#include <akndoc.h>
+#ifdef __SERIES60__
+# include <aknapp.h>
+# include <aknappui.h>
+# include <akndoc.h>
+#endif /* #ifdef __SERIES60__ */
+
+#ifdef __SERIES80__
+# include <eikapp.h>
+# include <eikappui.h>
+# include <eikdoc.h>
+# include <eikbctrl.h>
+# include <eikgted.h>
+#endif /* #ifdef __SERIES60__ */
+
 #include <coecntrl.h>
 #include <f32file.h>
 
 /* The source code can be compiled into "PerlApp" which is the simple
  * launchpad application/demonstrator, or into "PerlMin", which is the
- * minimal Perl-on-Series-60 application.  Define the cpp symbols
+ * minimal Perl launchpad application.  Define the cpp symbols
  * PerlMin (a boolean), PerlMinUid (the Symbian application uid in
  * the 0x... format), and PerlMinName (a C wide string, with the L prefix)
  * to compile as "PerlMin". */
 
-// #define PerlMinSample
+#define PerlMinSample
 
 #ifdef PerlMinSample
 # define PerlMin
 # endif
 #endif
 
-class CPerlAppDocument : public CAknDocument
+#ifdef __SERIES60__
+# define CMyDocument    CAknDocument
+# define CMyApplication CAknApplication
+# define CMyAppUi       CAknAppUi
+# define CMyNoteDialog  CAknNoteDialog
+# define CMyAppView     CCoeControl
+#endif /* #ifdef __SERIES60__ */
+
+#ifdef __SERIES80__
+# define CMyDocument    CEikDocument
+# define CMyApplication CEikApplication
+# define CMyAppUi       CEikAppUi
+# define CMyNoteDialog  CCknFlashingDialog
+# define CMyAppView     CEikBorderedControl
+#endif /* #ifdef __SERIES60__ */
+
+class CPerlAppDocument : public CMyDocument
 {
   public:
-    CPerlAppDocument(CEikApplication& aApp):CAknDocument(aApp) {;}
+    CPerlAppDocument(CEikApplication& aApp):CMyDocument(aApp) {;}
 #ifndef PerlMin
     CFileStore* OpenFileL(TBool aDoOpen, const TDesC& aFilename, RFs& aFs);
 #endif // #ifndef PerlMin
@@ -46,18 +73,19 @@ class CPerlAppDocument : public CAknDocument
     CEikAppUi* CreateAppUiL();
 };
 
-class CPerlAppApplication : public CAknApplication
+class CPerlAppApplication : public CMyApplication
 {
   private:
     CApaDocument* CreateDocumentL();
     TUid AppDllUid() const;
 };
 
-const TUint KPerlAppOneLinerSize = 80;
+const TUint KPerlAppPromptSize   = 20;
+const TUint KPerlAppOneLinerSize = 128;
 
 class CPerlAppView;
 
-class CPerlAppUi : public CAknAppUi
+class CPerlAppUi : public CMyAppUi
 {
   public:
     void ConstructL();
@@ -69,18 +97,22 @@ class CPerlAppUi : public CAknAppUi
     void InstallOrRunL(const TFileName& aFileName);
     void SetFs(const RFs& aFs);
 #endif // #ifndef PerlMin
-  private:
+    TBuf<KPerlAppOneLinerSize> iOneLiner; // Perl source code to evaluate.
     CPerlAppView* iAppView;
+  private:
     RFs* iFs;
-    TBuf<KPerlAppOneLinerSize> iOneLiner;
 };
 
-class CPerlAppView : public CCoeControl
+class CPerlAppView : public CMyAppView
 {
   public:
     static CPerlAppView* NewL(const TRect& aRect);
     static CPerlAppView* NewLC(const TRect& aRect);
+    ~CPerlAppView();
     void Draw(const TRect& aRect) const;
+#ifdef __SERIES80__
+    void HandleCommandL(TInt aCommand);
+#endif /* #ifdef __SERIES80__ */
   private:
     void ConstructL(const TRect& aRect);
 };
index 3b0f23d..3a510d4 100644 (file)
@@ -11,7 +11,9 @@ enum TPerlIds
     EPerlAppCommandTime               = 1025,
     EPerlAppCommandRunFile            = 1026,
     EPerlAppCommandOneLiner           = 1027,
-    EPerlAppCommandCopyright          = 1028   // no comma here
+    EPerlAppCommandCopyright          = 1028,
+    EPerlAppCommandAboutCopyright     = 1029,
+    EPerlAppTextQueryInputField       = 1030   // no comma here
 };
 
 #endif // __PerlApp_HRH__
index 21e9b28..b45e84d 100644 (file)
@@ -19,36 +19,38 @@ printf "Configuring for:  Perl version $VERSION{REVISION}.%03d%03d\n",
 my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
 my $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
 
-my $SDK  = do "sdk.pl";
+my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
+    @{ do "sdk.pl" };
 my %PORT = %{ do "port.pl" };
 
-my ( $SYMBIAN_VERSION, $SDK_VERSION ) = ( $SDK =~ m!\\Symbian\\(.+?)\\(.+)$! );
-
-if ($SDK eq 'C:\Symbian\Series60_1_2_CW') {
+if ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') {
     ( $SYMBIAN_VERSION, $SDK_VERSION ) = qw(6.1 1.2);
 }
 
 my $WIN = $ENV{WIN} ; # 'wins', 'winscw' (from sdk.pl)
-my $ARM = 'thumb';    # 'thumb', 'armi'
+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 $UREL = $ENV{UREL}; # from sdk.pl
 $UREL =~ s/-ARM-/$ARM/;
 my $UARM = $ENV{UARM}; # from sdk.pl
 
 die "$0: SDK not recognized\n"
-  if !defined($SYMBIAN_VERSION) || !defined($SDK_VERSION) || !defined($S60SDK);
+  if !defined($SYMBIAN_VERSION) ||
+     !defined($SDK_VERSION) ||
+     (!defined($S60SDK) && !defined($S80SDK));
 
 die "$0: does not know which Windows compiler to use\n"
     unless defined $WIN;
 
-print "Symbian $SYMBIAN_VERSION SDK $S60SDK ($WIN) installed at $SDK\n";
+print "Symbian $SYMBIAN_VERSION SDK $SDK_VARIANT $SDK_VERSION ($WIN) installed at $SYMBIAN_ROOT\n";
 
 my $CWD = do "cwd.pl";
 print "Build directory $CWD\n";
 
-die "$0: '+' in cwd does not work with SDK 1.2\n"
-    if $S60SDK eq '1.2' && $CWD =~ /\+/;
+die "$0: '+' in cwd does not work with Series 60 SDK 1.2\n"
+    if defined $S60SDK && $S60SDK eq '1.2' && $CWD =~ /\+/;
 
 my @unclean;
 my @mmp;
@@ -73,8 +75,16 @@ EPOCSTACKSIZE        65536
 EXPORTUNFROZEN
 SRCDBG
 __EOF__
-        print $fh "MACRO\t__SERIES60_1X__\n" if $S60SDK =~ /^1\./;
-        print $fh "MACRO\t__SERIES60_2X__\n" if $S60SDK =~ /^2\./;
+        if ($SDK_VARIANT eq 'S60') {
+           print $fh "MACRO\t__SERIES60__\n";
+           print $fh "MACRO\t__SERIES60_1X__\n" if $S60SDK =~ /^1\./;
+           print $fh "MACRO\t__SERIES60_2X__\n" if $S60SDK =~ /^2\./;
+       }
+        if ($SDK_VARIANT eq 'S80') {
+           print $fh "MACRO\t__SERIES80__\n";
+           print $fh "MACRO\t__SERIES80_1X__\n" if $S80SDK =~ /^1\./;
+           print $fh "MACRO\t__SERIES80_2X__\n" if $S80SDK =~ /^2\./;
+       }
         my ( @c, %c );
         @c = map  { glob } qw(*.c);       # Find the .c files.
         @c = map  { lc } @c;              # Lowercase the names.
@@ -229,8 +239,15 @@ q[perl -Ilib lib\ExtUtils\xsubpp ext\DynaLoader\dl_symbian.xs >ext\DynaLoader\Dy
 sub create_symbian_port_h {
     print "\tsymbian\\symbian_port.h\n";
     if ( open( SYMBIAN_PORT_H, ">symbian/symbian_port.h" ) ) {
-       $S60SDK =~ /^(\d+)\.(\d+)$/;
-       my ($sdkmajor, $sdkminor) = ($1, $2);
+       my ($sdkmajor, $sdkminor);
+        if ($SDK_VARIANT eq 'S60') {
+           $S60SDK =~ /^(\d+)\.(\d+)$/;
+           ($sdkmajor, $sdkminor) = ($1, $2);
+       }
+        if ($SDK_VARIANT eq 'S80') {
+           $S80SDK =~ /^(\d+)\.(\d+)$/;
+           ($sdkmajor, $sdkminor) = ($1, $2);
+       }
         print SYMBIAN_PORT_H <<__EOF__;
 /* Copyright (c) 2004-2005, Nokia.  All rights reserved. */
 
@@ -241,7 +258,7 @@ sub create_symbian_port_h {
 #define PERL_SYMBIANPORT_MINOR $PORT{dll}->{MINOR}
 #define PERL_SYMBIANPORT_PATCH $PORT{dll}->{PATCH}
 
-#define PERL_SYMBIANSDK_FLAVOR L"Series 60"
+#define PERL_SYMBIANSDK_FLAVOR L"$SDK_VARIANT"
 #define PERL_SYMBIANSDK_MAJOR  $sdkmajor
 #define PERL_SYMBIANSDK_MINOR  $sdkminor
 
@@ -267,10 +284,18 @@ q[perl -ne "print qq[    char *file = __FILE__;\n] if /dXSUB_SYS/;print;print qq
 sub create_PerlApp_pkg {
     print "\tsymbian\\PerlApp.pkg\n";
     if ( open( PERLAPP_PKG, ">symbian\\PerlApp.pkg" ) ) {
+       my $ProductId =
+           defined $S60SDK ?
+qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
+            defined $S80SDK ?
+qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
+            ";Supports Series NN";
        my $APPS = $UREL;
-       if ($S60SDK ne '1.2' || $SDK =~ m/_CW$/) { # Do only if not in 1.2 VC.
+       if (($SDK_VARIANT eq 'S60' && $SDK_VERSION ne '1.2' || $WIN eq 'winscw') || defined $S80SDK) { # Do only if not in S60 1.2 VC.
            $APPS =~ s!\\epoc32\\release\\(.+)\\$UARM$!\\epoc32\\data\\z\\system\\apps\\PerlApp!i;
        }
+       # In S60 3.0 there will be no more recognizers.
+       my $mdl = qq["$UREL\\PerlRecog.mdl"-"!:\\system\\recogs\\PerlRecog.mdl";];
         print PERLAPP_PKG <<__EOF__;
 ; !!!!!!   DO NOT EDIT THIS FILE   !!!!!!
 ; This file is built by symbian\\config.pl.
@@ -286,12 +311,11 @@ sub create_PerlApp_pkg {
 ; Standard SIS file header
 #{"PerlApp"},(0x102015F6),0,2,0
 
-; Supports Series 60 v0.9
-(0x101F6F88), 0, 0, 0, {"Series60ProductID"}
+$ProductId
 
 ; Files
 "$UREL\\PerlApp.APP"-"!:\\system\\apps\\PerlApp\\PerlApp.app"
-"$UREL\\PerlRecog.mdl"-"!:\\system\\recogs\\PerlRecog.mdl"
+$mdl
 "$APPS\\PerlApp.rsc"-"!:\\system\\apps\\PerlApp\\PerlApp.rsc"
 "$APPS\\PerlApp.aif"-"!:\\system\\apps\\PerlApp\\PerlApp.aif"
 __EOF__
@@ -343,8 +367,26 @@ create_PerlApp_pkg();
 
 if ( open( PERLAPP_MMP, ">symbian/PerlApp.mmp" ) ) {
     my @MACRO;
-    push @MACRO, '__SERIES60_1X__' if $S60SDK =~ /^1\./;
-    push @MACRO, '__SERIES60_2X__' if $S60SDK =~ /^2\./;
+    my @LIB;
+    if (defined $S60SDK) {
+        push @MACRO, '__SERIES60__';
+        push @MACRO, '__SERIES60_1X__' if $S60SDK =~ /^1\./;
+        push @MACRO, '__SERIES60_2X__' if $S60SDK =~ /^2\./;
+       push @LIB, <<__EOF__;
+LIBRARY                avkon.lib
+LIBRARY                commondialogs.lib 
+__EOF__
+    }
+    if (defined $S80SDK) {
+        push @MACRO, '__SERIES80__';
+        push @MACRO, '__SERIES80_1X__' if $S80SDK =~ /^1\./;
+        push @MACRO, '__SERIES80_2X__' if $S80SDK =~ /^2\./;
+       push @LIB, <<__EOF__;
+LIBRARY                eikctl.lib
+LIBRARY                eikcoctl.lib
+LIBRARY                ckndlg.lib
+__EOF__
+    }
     print PERLAPP_MMP <<__EOF__;
 // !!!!!!   DO NOT EDIT THIS FILE   !!!!!!
 // This file is built by symbian\\config.pl.
@@ -368,16 +410,15 @@ SYSTEMINCLUDE     \\epoc32\\include
 SYSTEMINCLUDE     \\epoc32\\include\\libc
 
 LIBRARY           apparc.lib
-LIBRARY           avkon.lib 
 LIBRARY           bafl.lib
 LIBRARY           charconv.lib 
-LIBRARY           commondialogs.lib 
 LIBRARY           cone.lib 
 LIBRARY           efsrv.lib
 LIBRARY           eikcore.lib 
 LIBRARY           estlib.lib 
 LIBRARY           euser.lib
 LIBRARY           perl$VERSION.lib
+@LIB
 
 AIF               PerlApp.aif . PerlAppAif.rss 
 __EOF__
@@ -397,9 +438,9 @@ else {
 
 if ( open( MAKEFILE, ">Makefile" ) ) {
     my $perl = "perl$VERSION";
-    my $windef1 = "$SDK\\Epoc32\\Build$CWD\\$perl\\$WIN\\$perl.def";
+    my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$WIN\\$perl.def";
     my $windef2 = "..\\BWINS\\${perl}u.def";
-    my $armdef1 = "$SDK\\Epoc32\\Build$CWD\\$perl\\$ARM\\$perl.def";
+    my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$ARM\\$perl.def";
     my $armdef2 = "..\\BMARM\\${perl}u.def";
     print "\tMakefile\n";
     print MAKEFILE <<__EOF__;
@@ -414,48 +455,50 @@ ARM       = ${ARM}
 
 all:   build
 
-build: rename_makedef build_win build_arm
+build: rename_makedef build_${WIN} build_arm
 
 @unclean: symbian\\config.pl
        perl symbian\\config.pl
 
-build_win:     abld.bat win_perl.mf win_miniperl.mf win_${VERSION}.mf perldll_win
+build_${WIN}:  abld.bat ${WIN}_perl.mf ${WIN}_miniperl.mf ${WIN}_${VERSION}.mf perldll_${WIN}
+
+build_vc6:     abld.bat ${WIN}_perl.mf ${WIN}_miniperl.mf ${WIN}_${VERSION}.mf vc6.mf perldll_wins
 
-build_vc6:     abld.bat win_perl.mf win_miniperl.mf win_${VERSION}.mf vc6.mf perldll_win
+build_cw:      abld.bat ${WIN}_perl.mf ${WIN}_miniperl.mf ${WIN}_${VERSION}.mf cw.mf perldll_winscw
 
 build_arm:     abld.bat perl_arm miniperl_arm arm_${VERSION}.mf perldll_arm
 
-miniperl_win:  miniperl.mmp abld.bat win_miniperl.mf rename_makedef
-       abld build \$(WIN) udeb miniperl
+miniperl_win miniperl_${WIN}:  miniperl.mmp abld.bat ${WIN}_miniperl.mf rename_makedef
+       abld build ${WIN} udeb miniperl
 
 miniperl_arm:  miniperl.mmp abld.bat arm_miniperl.mf rename_makedef
        abld build \$(ARM) $UARM miniperl
 
-miniperl:      miniperl_win miniperl_arm
+miniperl:      miniperl_${WIN} miniperl_arm
 
-perl:  perl_win perl_arm
+perl:  perl_${WIN} perl_arm
 
-perl_win:      perl.mmp abld.bat win_perl.mf rename_makedef
-       abld build \$(WIN) perl
+perl_win perl_${WIN}:  perl.mmp abld.bat ${WIN}_perl.mf rename_makedef
+       abld build ${WIN} perl
 
 perl_arm:      perl.mmp abld.bat arm_perl.mf rename_makedef
        abld build \$(ARM) $UARM perl
 
-perldll_win: perl${VERSION}_win freeze_win perl${VERSION}_win
+perldll_win perldll_${WIN}: perl${VERSION}_${WIN} freeze_${WIN} perl${VERSION}_${WIN}
 
-perl${VERSION}_win:    perl$VERSION.mmp abld.bat rename_makedef
-       abld build \$(WIN) perl$VERSION
+perl${VERSION}_win perl${VERSION}_${WIN}:      perl$VERSION.mmp abld.bat rename_makedef
+       abld build ${WIN} perl$VERSION
 
 perldll_arm: perl${VERSION}_arm freeze_arm perl${VERSION}_arm
 
 perl${VERSION}_arm:    perl$VERSION.mmp arm_${VERSION}.mf abld.bat rename_makedef
        abld build \$(ARM) $UARM perl$VERSION
 
-perldll perl$VERSION:  perldll_win perldll_arm
+perldll perl$VERSION:  perldll_${WIN} perldll_arm
 
-win:   miniperl_win perl_win perldll_win
+win ${WIN}:    miniperl_${WIN} perl_${WIN} perldll_${WIN}
 
-arm:   miniperl_arm perl_arm perldll_arm
+thumb arm:     miniperl_arm perl_arm perldll_arm
 
 rename_makedef:
        -ren makedef.pl nomakedef.pl
@@ -468,26 +511,28 @@ rerename_makedef:
 abld.bat abld: bld.inf
        bldmake bldfiles
 
-makefiles: win.mf arm.mf vc6.mf
+makefiles: win.mf arm.mf vc6.mf cw.mf
 
 vc6:   win.mf vc6.mf build_vc6
 
-win_miniperl.mf: abld.bat symbian\\config.pl
-       abld makefile \$(WIN) miniperl
-       echo > win_miniperl.mf
+cw:    win.mf cw.mf build_cw
 
-win_perl.mf: abld.bat symbian\\config.pl
-       abld makefile \$(WIN) perl
-       echo > win_perl.mf
+${WIN}_miniperl.mf: abld.bat symbian\\config.pl
+       abld makefile ${WIN} miniperl
+       echo > ${WIN}_miniperl.mf
 
-win_${VERSION}.mf: abld.bat symbian\\config.pl
-       abld makefile \$(WIN) perl${VERSION}
-       echo > win_${VERSION}.mf
+${WIN}_perl.mf: abld.bat symbian\\config.pl
+       abld makefile ${WIN} perl
+       echo > ${WIN}_perl.mf
 
-symbian\\win.mf:
-       cd symbian; make win.mf
+${WIN}_${VERSION}.mf: abld.bat symbian\\config.pl
+       abld makefile ${WIN} perl${VERSION}
+       echo > ${WIN}_${VERSION}.mf
 
-win.mf: win_miniperl.mf win_perl.mf win_${VERSION}.mf symbian\\win.mf
+symbian\\${WIN}.mf:
+       cd symbian; make ${WIN}.mf
+
+${WIN}.mf: ${WIN}_miniperl.mf ${WIN}_perl.mf ${WIN}_${VERSION}.mf symbian\\${WIN}.mf
 
 arm_miniperl.mf: abld.bat symbian\\config.pl
        abld makefile \$(ARM) miniperl
@@ -503,10 +548,17 @@ arm_${VERSION}.mf: abld.bat symbian\\config.pl
 
 arm.mf: arm_miniperl.mf arm_perl.mf arm_${VERSION}.mf
 
+win.mf:  vc6.mf cw.mf
+       echo > win.mf
+
 vc6.mf: abld.bat symbian\\config.pl
        abld makefile vc6
        echo > vc6.mf
 
+cw.mf: abld.bat symbian\\config.pl
+       abld makefile cw_ide
+       echo > cw.mf
+
 PM  = lib\\Config.pm lib\\Cross.pm lib\\lib.pm ext\\DynaLoader\\DynaLoader.pm ext\\DynaLoader\\XSLoader.pm ext\\Errno\\Errno.pm
 POD = lib\\Config.pod
 
@@ -601,7 +653,7 @@ sdkinstall:
        copy /y symbian\\PerlBase.pod  \$(APIDIR)\\pod
        copy /y symbian\\PerlUtil.pod  \$(APIDIR)\\pod
 
-RELDIR  = $SDK\\epoc32\\release
+RELDIR  = $SYMBIAN_ROOT\\epoc32\\release
 RELWIN = \$(RELDIR)\\\$(WIN)\\udeb
 RELARM = \$(RELDIR)\\\$(ARM)\\$UARM
 SDKZIP = perl${VERSION}sdk.zip
@@ -620,10 +672,10 @@ perl${VERSION}dist.zip perldist.zip: \$(ALLSIS) \$(SDKZIP) \$(ETC)
        -del /f perl${VERSION}dist.zip
        zip -r perl${VERSION}dist.zip \$(ALLSIS) \$(SDKZIP) \$(ETC)
 
-perlapp:       sdkinstall perlapp_win perlapp_arm
+perlapp:       sdkinstall perlapp_${WIN} perlapp_arm
 
-perlapp_win: config.h
-       cd symbian; make perlapp_win
+perlapp_win perlapp_${WIN}: config.h
+       cd symbian; make perlapp_${WIN}
 
 perlapp_arm: config.h
        cd symbian; make perlapp_arm
@@ -639,17 +691,17 @@ perlapp.zip:
 
 zip:   perlsdk.zip perlapp.zip
 
-freeze:        freeze_win freeze_arm
+freeze:        freeze_${WIN} freeze_arm
 
-freeze_win:
-       abld freeze \$(WIN) perl$VERSION
+freeze_${WIN}:
+       abld freeze ${WIN} perl$VERSION
 
 freeze_arm:
        abld freeze \$(ARM) perl$VERSION
 
-defrost:       defrost_win defrost_arm
+defrost:       defrost_${WIN} defrost_arm
 
-defrost_win:
+defrost_${WIN}:
        -del /f $windef1
        -del /f $windef2
 
@@ -657,13 +709,13 @@ defrost_arm:
        -del /f $armdef1
        -del /f $armdef2
 
-clean_win: abld.bat
-       abld clean \$(WIN)
+clean_${WIN}: abld.bat
+       abld clean ${WIN}
 
 clean_arm: abld.bat
        abld clean \$(ARM)
 
-clean: clean_win clean_arm rerename_makedef
+clean: clean_${WIN} clean_arm rerename_makedef
        -del /f \$(PM)
        -del /f \$(POD)
        -del /f lib\\Config.pm.bak
@@ -677,7 +729,8 @@ clean:      clean_win clean_arm rerename_makedef
        -del /f abld.bat @unclean *.pkg *.sis *.zip
        -del /f symbian\\abld.bat symbian\\*.sis symbian\\*.zip
        -del /f symbian\\perl5*.pkg symbian\\miniperl.pkg
-       -del arm_*.mf win_*.mf vc6*.mf
+       -del /f symbian\\PerlApp.rss
+       -del arm_*.mf ${WIN}_*.mf vc6*.mf cw*.mf
        -perl symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT)
        -rmdir /s /q perl${VERSION}_Data
        -cd symbian; make clean
@@ -703,7 +756,7 @@ else {
 }
 
 if ( open( MAKEFILE, ">symbian/Makefile")) {
-    my $wrap = $S60SDK eq '1.2' && $SDK !~ /_CW$/;
+    my $wrap = defined $S60SDK && $S60SDK eq '1.2' && $WIN ne '${WIN}cw';
     my $ABLD = $wrap ? 'perl b.pl': 'abld';
     print "\tsymbian/Makefile\n";
     print MAKEFILE <<__EOF__;
@@ -714,17 +767,20 @@ ABLD = $ABLD
 abld.bat:
        bldmake bldfiles
 
-perlapp_win: abld.bat ..\\config.h PerlApp.h PerlApp.cpp
+perlapp_${WIN}: abld.bat ..\\config.h PerlApp.h PerlApp.cpp
        bldmake bldfiles
-       \$(ABLD) build \$(WIN) udeb
+       copy PerlApp$SDK_VARIANT.rss PerlApp.rss
+       \$(ABLD) build ${WIN} udeb
 
 perlapp_arm: ..\\config.h PerlApp.h PerlApp.cpp
        bldmake bldfiles
-       \$(ABLD) build \$(ARM) $UARM
+       copy PerlApp$SDK_VARIANT.rss PerlApp.rss
+       \$(ABLD) build ${ARM} $UARM
 
 win.mf:
        bldmake bldfiles
        abld makefile vc6
+       abld makefile cw_ide
 
 perlapp_demo_extract:
        perl demo_pl extract
index 3c20ced..d570310 100644 (file)
@@ -11,12 +11,14 @@ my %VERSION = %{ do "version.pl" };
 my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
 my $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
 
-my $SDK  = do "sdk.pl";
+my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
+    @{ do "sdk.pl" };
 my $UID  = do "uid.pl";
 my %PORT = %{ do "port.pl" };
 
 my $ARM = 'thumb'; # TODO
-my $S60SK = $ENV{S60SDK}; # from sdk.pl
+my $S60SDK = $ENV{S60SDK}; # from sdk.pl
+my $S80SDK = $ENV{S80SDK}; # from sdk.pl
 
 my $UREL = $ENV{UREL}; # from sdk.pl
 $UREL =~ s/-ARM-/$ARM/;
@@ -153,6 +155,13 @@ for my $target (@target) {
       && defined $PATCH
       && ( $PATCH eq 0 || $PATCH > 0 );
 
+     my $ProductId =
+         defined $S60SDK ?
+qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
+         defined $S80SDK ?
+qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
+         ";Supports Series NN";
+
     open PKG, ">$pkg" or die "$0: failed to create $pkg: $!\n";
     print PKG <<__EOF__;
 ; \u$target installation script
@@ -168,8 +177,7 @@ for my $target (@target) {
 ;
 ;* "\u$target.key", "\u$target.cer"
 ;
-; Supports Series60 v0.9
-(0x101F6F88), 0, 0, 0, {"Series60ProductID"}
+$ProductId
 ; The files to install
 ;
 $copy
index 8054c50..f8eb9c2 100644 (file)
@@ -1,31 +1,48 @@
 use strict;
 
-my $SDK;
+my $SYMBIAN_VERSION;
+my $SYMBIAN_ROOT;
+my $SDK_NAME;
+my $SDK_VARIANT;
+my $SDK_VERSION;
 my $WIN;
 
-if ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\gcc\\bin!) {
-    my $cc = $1;
-    $WIN = $cc =~ m!_CW!i ? 'winscw' : 'wins';
+if ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\(.+?)\\Epoc32\\gcc\\bin!i) {
+    $SYMBIAN_VERSION = $1;
+    $SDK_NAME = $2;
+    $WIN = ($SDK_NAME =~ m!_CW!i || $SDK_NAME eq '8.1a') ?
+       'winscw' : 'wins';
     $ENV{WIN} = $WIN; 
-    if ($cc =~ m!Series60_v20!) {
+    if ($SDK_NAME =~ m!Series60_v20!) {
+       $SDK_VARIANT = 'S60';
        $ENV{S60SDK} = '2.0';
-    } elsif ($cc =~ m!Series60_v21!) {
-       $ENV{S60SDK} = '2.1';
-    } elsif ($cc =~ m!S60_2nd_FP2!) {
-       $ENV{S60SDK} = '2.6';
+    } elsif ($SDK_NAME =~ m!Series60_v21!) {
+       $SDK_VARIANT = 'S60';
+       $SDK_VERSION = $ENV{S60SDK} = '2.1';
+    } elsif ($SDK_NAME =~ m!S60_2nd_FP2!) {
+       $SDK_VARIANT = 'S60';
+       $SDK_VERSION = $ENV{S60SDK} = '2.6';
+    } elsif ($SDK_NAME =~ m!S60_2nd_FP3!) {
+       $SDK_VARIANT = 'S60';
+       $SDK_VERSION = $ENV{S60SDK} = '2.8';
+    } elsif ($SDK_NAME =~ m!S80_DP2_0_SDK!) {
+       $SDK_VARIANT = 'S80';
+       $SDK_VERSION = $ENV{S80SDK} = '2.0';
     }
 }
 
 if (open(GCC, "gcc -v 2>&1|")) {
    while (<GCC>) {
      if (/Reading specs from ((?:C:)?\\Symbian.+?)\\Epoc32\\/i) {
-       $SDK = $1;
-       # The S60SDK tells the Series 60 SDK version.
-       if ($SDK eq 'C:\Symbian\6.1\Shared') { # Visual C. 
-          $SDK = 'C:\Symbian\6.1\Series60';
-          $ENV{S60SDK} = '1.2';
-       } elsif ($SDK eq 'C:\Symbian\Series60_1_2_CW') { # CodeWarrior.
-          $ENV{S60SDK} = '1.2';
+       $SYMBIAN_ROOT = $1;
+       # The S60SDK/S60SDK tells the Series 60 SDK version.
+       if ($ENV{S60SDK}) {
+          if ($SYMBIAN_ROOT eq 'C:\Symbian\6.1\Shared') { # Visual C. 
+              $SYMBIAN_ROOT = 'C:\Symbian\6.1\Series60';
+              $SDK_VERSION = $ENV{S60SDK} = '1.2';
+          } elsif ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') { # CodeWarrior.
+              $SDK_VERSION = $ENV{S60SDK} = '1.2';
+          }
        }
        last;
      }
@@ -35,20 +52,21 @@ if (open(GCC, "gcc -v 2>&1|")) {
   die "$0: failed to run gcc: $!\n";
 }
 
+die "$0: failed to locate the Symbian SDK\n" unless defined $SYMBIAN_ROOT;
+
 my $UARM = $ENV{UARM} ? $ENV{UARM} : "urel";
-my $UREL = "$SDK\\epoc32\\release\\-ARM-\\$UARM";
-if ($SDK eq 'C:\Symbian\6.1\Series60' && $ENV{WIN} eq 'winscw') {
+my $UREL = "$SYMBIAN_ROOT\\epoc32\\release\\-ARM-\\$UARM";
+if ($SYMBIAN_ROOT eq 'C:\Symbian\6.1\Series60' && $ENV{WIN} eq 'winscw') {
     $UREL = "C:\\Symbian\\Series60_1_2_CW\\epoc32\\release\\-ARM-\\urel";
 }
 $ENV{UREL} = $UREL;
 $ENV{UARM} = $UARM;
 
-die "$0: failed to locate the Symbian SDK\n" unless defined $SDK;
-
-$SDK;
+[ $SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION ];
 
 # The following is a cheat sheet for the right S60/S80 SDK settings.
 #
+# macro.bat:
 # set EPOC_BIN=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\Tools
 # set MWCW=C:\Program Files\Metrowerks\CodeWarrior for Symbian OEM v2.8
 # set MSVC=C:\Program Files\Microsoft Visual Studio
@@ -59,12 +77,14 @@ $SDK;
 # s60-1.2-cw:
 #
 # set EPOCROOT=\Symbian\Series60_1_2_CW\
+# macro
 # set PATH=%EPOC_BIN%;%MSVC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH%
 # set USERDEFS=%USERDEFS% -D__SERIES60_12__ -D__SERIES60_MAJOR__=1 -D__SERIES60_MINOR__=2 -D__SERIES60_1X__
 #
 # s60-1.2-vc:
 #
 # set EPOCROOT=\Symbian\6.1\Series60\
+# macro
 # set PATH=\Symbian\6.1\Shared\Epoc32\gcc\bin;\Symbian\6.1\Shared\Epoc32\Tools;%MSVC_BIN%;%PATH%
 # set INCLUDE=%MSVC_INC%
 # set LIB=%MSVC_LIB%
@@ -74,6 +94,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\7.0s\Series60_v20_CW\
 # set EPOCDEVICE=Series60_2_0_CW:com.Nokia.Series60_2_0_CW
+# macro
 # set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH%
 # set USERDEFS=%USERDEFS% -D__SERIES60_20__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=0 -D__SERIES60_2X__
 # 
@@ -81,6 +102,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\7.0s\Series60_v20\
 # set EPOCDEVICE=Series60_v20:com.nokia.series60
+# macro
 # set PATH=%EPOC_BIN%;%MSVC_BIN%;%PATH%
 # set INCLUDE=%MSVC_INC%
 # set LIB=%MSVC_LIB%
@@ -90,6 +112,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\7.0s\Series60_v21_CW\
 # set EPOCDEVICE=Series60_v21_CW:com.Nokia.series60
+# macro
 # set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH%
 # set USERDEFS=%USERDEFS% -D__SERIES60_21__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=1 -D__SERIES60_2X__
 # 
@@ -97,6 +120,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2_CW\
 # set EPOCDEVICE=S60_2nd_FP2_CW:com.nokia.series60
+# macro
 # set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH%
 # set USERDEFS=%USERDEFS% -D__SERIES60_26__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=6 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
 # 
@@ -104,6 +128,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2\
 # set EPOCDEVICE=S60_2nd_FP2:com.nokia.Series60
+# macro
 # set PATH=%EPOC_BIN%;%MSVC_BIN%;%PATH%
 # set INCLUDE=%MSVC_INC%
 # set LIB=%MSVC_LIB%
@@ -113,6 +138,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\8.1a\S60_2nd_FP3\
 # set EPOCDEVICE=S60_2nd_FP3:com.nokia.series60
+# macro
 # set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH%
 # set USERDEFS=%USERDEFS% -D__SERIES60_28__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=8 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
 # 
@@ -120,6 +146,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\7.0s\S80_DP2_0_SDK_CW\
 # set EPOCDEVICE=Series80_DP2_0_SDK_CW:com.nokia.Series80
+# macro
 # set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH%
 # set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__
 #
@@ -127,6 +154,7 @@ $SDK;
 #
 # set EPOCROOT=\Symbian\7.0s\S80_DP2_0_SDK\
 # set EPOCDEVICE=Series80_DP2_0_SDK:com.nokia.Series80
+# macro
 # set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH%
 # set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__
 #
index 9a65d85..ae0b0e6 100644 (file)
@@ -37,7 +37,7 @@ sub die_with_usage {
   }
   die <<__USAGE__;
 $0: Usage:
-$0 [ --uid=hhhhhhhh ] [ --version=a.b.c ] [ --library=x.y.z ] [ some.pl | Some.pm | somefile | dir ... ]
+$0 [--variant=S60|S80] [ --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,
@@ -55,12 +55,17 @@ my @SisOther;
 my $AppName;
 my $Debug;
 my $ShowPkg;
+my $Variant;
 
 my $SisUidDefault     = 0x0acebabe;
 my $SisVersionDefault = '0.0.0';
+my $VariantDefault    = 'S60';
+
+my %Variant = qw(S60 1 S80 1);
 
 die_with_usage()
   unless GetOptions(
+                   'variant=s'         => \$Variant,
                    'uid=s'             => \$SisUid,
                    'version=s'         => \$SisVersion,
                    'debug'             => \$Debug,
@@ -71,6 +76,15 @@ die_with_usage()
 die_with_usage("Need to specify what to sisify")
   unless @ARGV;
 
+unless (defined $Variant) {
+  warn "$0: Defaulting to $VariantDefault\n";
+  $Variant = $VariantDefault;
+}
+
+unless (exists $Variant{$Variant}) {
+  die "$0: Unknown variant '$Variant'\n";
+}
+
 for my $i (@ARGV) {
   if ($i =~ /\.pl$/i) {
     push @SisPl, $i;
@@ -218,12 +232,7 @@ for my $i (sort @c) {
 }
 
 sub hex2data {
-  local $_ = shift;
-  my $data; 
-  while (/([0-9a-f]{2})/ig) {
-    $data .= chr(hex($1));
-  }
-  return $data;
+  pack("H*", shift); # unpack("H*", $data) for the hex creation.
 }
 
 my $APPHEX;
@@ -237,6 +246,8 @@ unless ($Library) {
 
   &init_hex; # Initialized $APPHEX and $RSCHEX.
 
+  die "$0: No app template found\n" unless defined $APPHEX && defined $RSCHEX;
+
   my $app = hex2data($APPHEX);
   my $uidcrc;
   my $uids = "0x10000079 0x100039CE $SisUid";
@@ -323,429 +334,48 @@ if ($ShowPkg) {
 
 exit(0);
 
+# To create the hex: print unpack("H*", $data);
+
 sub init_hex {
   # This is Symbian application executable skeleton.
   # You can create the ...\epoc32\release\thumb\urel\foo.app
   # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
   # The following executable has been compiled using the Series 60 SDK 2.6
   # for Visual C.
-  $APPHEX = <<__APP__;
-7900 0010 ce39 0010 f615 2010 8581 1076
-4550 4f43 0020 0000 05fc d15d 0000 0000
-0100 bf00 0048 827a 9ee0 e000 0300 0001
-5811 0000 0000 0000 0010 0000 0000 1000
-0020 0000 0000 0000 0100 0000 0000 0010
-0000 0000 0700 0000 d011 0000 0100 0000
-140f 0000 7c00 0000 0000 0000 d411 0000
-d414 0000 0000 0000 5e01 0000 00b5 00f0
-d5f9 02bc 0847 0000 0148 0068 7047 0000
-000c 0010 00b5 011c 0248 00f0 f5fc 01bc
-0047 0000 200c 0010 10b5 84b0 041c 0021
-00f0 f2f9 6846 211c 00f0 88fb 6846 00f0
-07f9 011c 2166 201c 0022 0023 00f0 48fa
-0020 6066 00f0 4cfa 0121 00f0 4ffa 04b0
-10bc 01bc 0047 0000 30b5 041c 0d1c 1a48
-6061 1a48 a061 1a48 e061 1a48 a064 1a48
-e064 1a48 2060 216e 0029 0dd0 6068 00f0
-63fb 216e 0029 05d0 0868 8268 081c 0321
-00f0 8af9 0020 2066 606e 0028 03d0 00f0
-b1fc 0020 6066 a16a 0029 05d0 0868 8268
-081c 0321 00f0 78f9 201c 291c 00f0 aaf9
-30bc 01bc 0047 0000 9c0e 0010 000f 0010
-f00e 0010 d00e 0010 dc0e 0010 340c 0010
-84b0 10b5 95b0 1790 1891 1992 1a93 0120
-0021 0022 00f0 cefc 041c 14a9 01a8 00f0
-87fc 0028 08d1 0090 201c 17a9 0222 0023
-00f0 c6fc 00f0 82fc 00f0 86fc 15b0 10bc
-08bc 04b0 1847 0000 f0b5 4746 80b4 324c
-a544 071c 8846 0229 52d1 00f0 0bfb 011c
-0a68 7ea8 126a 00f0 2ff9 8026 f600 6e44
-301c 00f0 cdfa 2949 301c 7eaa 0023 00f0
-cdfa c425 ed00 6d44 281c 00f0 cffa 244c
-6c44 0021 2248 6844 0160 201c 0421 00f0
-cbfa 301c 00f0 cefa 011c 201c 2a1c 00f0
-cffa 0028 24d1 301c 00f0 c4fa 011c 8420
-0001 6844 8022 5200 00f0 44fc 8521 0901
-6944 6846 fc22 5200 00f0 42fc 8420 0001
-6844 0068 0f49 6944 0968 0f4a 6a44 1268
-0e4b 6b44 1b68 fff7 83ff 381c 00f0 c0fa
-0020 4446 002c 00d1 0120 094b 9d44 08bc
-9846 f0bc 02bc 0847 b4f5 ffff 040c 0010
-480a 0000 4408 0000 4808 0000 4c08 0000
-4c0a 0000 00b5 021c 8020 4000 8142 02d0
-0348 8142 06d1 101c 00f0 9afa 05e0 0000
-c10b 0000 0120 fff7 e5fe 01bc 0047 0000
-10b5 00f0 07f8 041c 00f0 00fc 201c 10bc
-02bc 0847 30b5 051c 3020 00f0 fdfb 041c
-002c 05d0 00f0 48f9 0748 6060 0748 2060
-201c 00f0 f7fb 201c 291c 00f0 09f8 201c
-30bc 02bc 0847 0000 ac0c 0010 bc0c 0010
-30b5 041c 0d1c 00f0 35f9 201c 291c 00f0
-37f9 2068 016a 201c 00f0 7cf8 30bc 01bc
-0047 0000 30b5 84b0 041c 00f0 2ff9 051c
-6846 211c 00f0 30f9 2868 b830 0268 281c
-6946 00f0 69f8 04b0 30bc 01bc 0047 0000
-30b5 051c 2420 00f0 b7fb 041c 002c 04d0
-291c 00f0 95f8 0348 2060 201c 30bc 02bc
-0847 0000 6c0d 0010 70b5 8820 4000 00f0
-a3fb 061c 002e 18d0 00f0 28fa 0d48 b064
-0d48 f064 0d4d 7561 0d4c b461 0d4b f361
-0d4a b264 0d49 f164 0d48 3060 0d48 3060
-301c 6830 5021 00f0 93fb 301c 70bc 02bc
-0847 0000 040e 0010 100e 0010 9c0e 0010
-000f 0010 f00e 0010 d00e 0010 dc0e 0010
-240e 0010 340c 0010 10b5 8b20 8000 00f0
-7dfb 041c 002c 03d0 00f0 f6f9 0248 2060
-201c 10bc 02bc 0847 c80d 0010 0020 7047
-0047 7047 0847 7047 1047 7047 1847 7047
-2047 7047 2847 7047 3047 7047 3847 7047
-4047 7047 4847 7047 5047 7047 5847 7047
-6047 7047 7047 7047 014b 1b68 1847 c046
-140f 0010 014b 1b68 1847 c046 1c0f 0010
-014b 1b68 1847 c046 200f 0010 014b 1b68
-1847 c046 180f 0010 014b 1b68 1847 c046
-240f 0010 014b 1b68 1847 c046 5c0f 0010
-014b 1b68 1847 c046 600f 0010 014b 1b68
-1847 c046 3c0f 0010 014b 1b68 1847 c046
-4c0f 0010 014b 1b68 1847 c046 2c0f 0010
-014b 1b68 1847 c046 340f 0010 40b4 024e
-3668 b446 40bc 6047 280f 0010 014b 1b68
-1847 c046 580f 0010 014b 1b68 1847 c046
-540f 0010 014b 1b68 1847 c046 480f 0010
-014b 1b68 1847 c046 440f 0010 40b4 024e
-3668 b446 40bc 6047 400f 0010 014b 1b68
-1847 c046 300f 0010 014b 1b68 1847 c046
-380f 0010 014b 1b68 1847 c046 500f 0010
-40b4 024e 3668 b446 40bc 6047 680f 0010
-014b 1b68 1847 c046 e80f 0010 014b 1b68
-1847 c046 0410 0010 014b 1b68 1847 c046
-f40f 0010 014b 1b68 1847 c046 780f 0010
-014b 1b68 1847 c046 e00f 0010 014b 1b68
-1847 c046 ec0f 0010 014b 1b68 1847 c046
-c00f 0010 014b 1b68 1847 c046 b40f 0010
-014b 1b68 1847 c046 ac0f 0010 014b 1b68
-1847 c046 d80f 0010 014b 1b68 1847 c046
-d40f 0010 014b 1b68 1847 c046 700f 0010
-014b 1b68 1847 c046 640f 0010 014b 1b68
-1847 c046 bc0f 0010 014b 1b68 1847 c046
-0010 0010 014b 1b68 1847 c046 cc0f 0010
-014b 1b68 1847 c046 dc0f 0010 014b 1b68
-1847 c046 9c0f 0010 014b 1b68 1847 c046
-b00f 0010 014b 1b68 1847 c046 940f 0010
-014b 1b68 1847 c046 800f 0010 014b 1b68
-1847 c046 840f 0010 014b 1b68 1847 c046
-a40f 0010 014b 1b68 1847 c046 900f 0010
-014b 1b68 1847 c046 8c0f 0010 014b 1b68
-1847 c046 7c0f 0010 014b 1b68 1847 c046
-e40f 0010 014b 1b68 1847 c046 b80f 0010
-014b 1b68 1847 c046 740f 0010 014b 1b68
-1847 c046 6c0f 0010 014b 1b68 1847 c046
-c40f 0010 014b 1b68 1847 c046 c80f 0010
-014b 1b68 1847 c046 a80f 0010 014b 1b68
-1847 c046 880f 0010 014b 1b68 1847 c046
-980f 0010 014b 1b68 1847 c046 d00f 0010
-014b 1b68 1847 c046 a00f 0010 014b 1b68
-1847 c046 0810 0010 014b 1b68 1847 c046
-0c10 0010 014b 1b68 1847 c046 f80f 0010
-014b 1b68 1847 c046 fc0f 0010 014b 1b68
-1847 c046 1410 0010 014b 1b68 1847 c046
-1010 0010 014b 1b68 1847 c046 f00f 0010
-014b 1b68 1847 c046 2c10 0010 40b4 024e
-3668 b446 40bc 6047 2410 0010 014b 1b68
-1847 c046 2810 0010 014b 1b68 1847 c046
-1810 0010 014b 1b68 1847 c046 2010 0010
-014b 1b68 1847 c046 1c10 0010 014b 1b68
-1847 c046 4010 0010 014b 1b68 1847 c046
-b010 0010 014b 1b68 1847 c046 3010 0010
-014b 1b68 1847 c046 6410 0010 014b 1b68
-1847 c046 fc10 0010 014b 1b68 1847 c046
-f810 0010 014b 1b68 1847 c046 1011 0010
-014b 1b68 1847 c046 c010 0010 014b 1b68
-1847 c046 7010 0010 014b 1b68 1847 c046
-8010 0010 014b 1b68 1847 c046 e010 0010
-014b 1b68 1847 c046 ac10 0010 014b 1b68
-1847 c046 a010 0010 014b 1b68 1847 c046
-5010 0010 014b 1b68 1847 c046 8410 0010
-014b 1b68 1847 c046 ec10 0010 014b 1b68
-1847 c046 c410 0010 014b 1b68 1847 c046
-c810 0010 014b 1b68 1847 c046 4c10 0010
-014b 1b68 1847 c046 9c10 0010 014b 1b68
-1847 c046 3810 0010 014b 1b68 1847 c046
-b810 0010 014b 1b68 1847 c046 6c10 0010
-014b 1b68 1847 c046 3410 0010 014b 1b68
-1847 c046 cc10 0010 014b 1b68 1847 c046
-9410 0010 014b 1b68 1847 c046 5410 0010
-014b 1b68 1847 c046 6010 0010 014b 1b68
-1847 c046 a410 0010 014b 1b68 1847 c046
-d810 0010 014b 1b68 1847 c046 e410 0010
-014b 1b68 1847 c046 d010 0010 014b 1b68
-1847 c046 6810 0010 014b 1b68 1847 c046
-9010 0010 014b 1b68 1847 c046 8c10 0010
-014b 1b68 1847 c046 b410 0010 014b 1b68
-1847 c046 bc10 0010 014b 1b68 1847 c046
-e810 0010 014b 1b68 1847 c046 0411 0010
-40b4 024e 3668 b446 40bc 6047 8810 0010
-014b 1b68 1847 c046 dc10 0010 014b 1b68
-1847 c046 4810 0010 014b 1b68 1847 c046
-7410 0010 014b 1b68 1847 c046 3c10 0010
-40b4 024e 3668 b446 40bc 6047 d410 0010
-014b 1b68 1847 c046 5c10 0010 014b 1b68
-1847 c046 5810 0010 014b 1b68 1847 c046
-9810 0010 014b 1b68 1847 c046 0011 0010
-014b 1b68 1847 c046 4410 0010 40b4 024e
-3668 b446 40bc 6047 a810 0010 014b 1b68
-1847 c046 7810 0010 014b 1b68 1847 c046
-0811 0010 014b 1b68 1847 c046 0c11 0010
-40b4 024e 3668 b446 40bc 6047 7c10 0010
-014b 1b68 1847 c046 f410 0010 014b 1b68
-1847 c046 f010 0010 014b 1b68 1847 c046
-1c11 0010 014b 1b68 1847 c046 3c11 0010
-014b 1b68 1847 c046 2c11 0010 014b 1b68
-1847 c046 3011 0010 014b 1b68 1847 c046
-2011 0010 014b 1b68 1847 c046 3411 0010
-014b 1b68 1847 c046 1411 0010 014b 1b68
-1847 c046 2411 0010 014b 1b68 1847 c046
-1811 0010 014b 1b68 1847 c046 2811 0010
-014b 1b68 1847 c046 3811 0010 014b 1b68
-1847 c046 4011 0010 014b 1b68 1847 c046
-4411 0010 014b 1b68 1847 c046 4811 0010
-40b4 024e 3668 b446 40bc 6047 4c11 0010
-7047 0000 00b5 044a 4260 044a 0260 fff7
-11fe 01bc 0047 0000 ac0c 0010 bc0c 0010
-00b5 fff7 85ff 01bc 0047 0000 00b5 fff7
-85ff 01bc 0047 0000 00b5 fff7 79ff 01bc
-0047 0000 10b5 81b0 039c 1438 0094 fff7
-07ff 01b0 10bc 01bc 0047 0000 00b5 1438
-fff7 d8fc 01bc 0047 00b5 1438 fff7 00ff
-01bc 0047 00b5 1838 fff7 52ff 02bc 0847
-00b5 1c38 fff7 46ff 02bc 0847 00b5 1c38
-fff7 3aff 02bc 0847 00b5 0438 fff7 c4fd
-02bc 0847 00b5 0438 fff7 b8fd 02bc 0847
-00b5 4838 fff7 a2fc 01bc 0047 00b5 4c38
-fff7 a2fc 01bc 0047 ffff ffff 0000 0000
-ffff ffff 0000 0000 000c 0010 200c 0010
-9c0e 0010 000f 0010 f00e 0010 d00e 0010
-dc0e 0010 340c 0010 040c 0010 ac0c 0010
-bc0c 0010 6c0d 0010 040e 0010 100e 0010
-9c0e 0010 000f 0010 f00e 0010 d00e 0010
-dc0e 0010 240e 0010 340c 0010 300d 0010
-c80d 0010 ac0c 0010 bc0c 0010 f615 2010
-0a00 0000 6400 6500 6600 6100 7500 6c00
-7400 2e00 7000 6c00 0000 0000 0700 0000
-5000 6500 7200 6c00 4d00 6900 6e00 0000
-0000 0000 0000 0000 6d00 0010 4104 0010
-4d04 0010 9907 0010 a507 0010 7506 0010
-8106 0010 5904 0010 8d06 0010 6504 0010
-b107 0010 9906 0010 a506 0010 2d00 0010
-bd07 0010 3d01 0010 c907 0010 2902 0010
-d507 0010 e107 0010 ed07 0010 7104 0010
-f907 0010 0508 0010 1108 0010 1d08 0010
-8104 0010 8d04 0010 fcff ffff 0000 0000
-690b 0010 5d0b 0010 0000 0000 0000 0000
-c90a 0010 4905 0010 5505 0010 6105 0010
-6d05 0010 7905 0010 8505 0010 9105 0010
-9d05 0010 a905 0010 b505 0010 c105 0010
-cd05 0010 d905 0010 e505 0010 f105 0010
-fd05 0010 0906 0010 1506 0010 2106 0010
-2d06 0010 3906 0010 4506 0010 5106 0010
-c902 0010 5d06 0010 6906 0010 0000 0000
-0000 0000 e50a 0010 9904 0010 2908 0010
-9d0a 0010 a504 0010 3508 0010 ed03 0010
-4108 0010 4d08 0010 5908 0010 6508 0010
-7108 0010 9d0a 0010 0000 0000 0000 0000
-f10a 0010 7d08 0010 8908 0010 f903 0010
-9508 0010 a108 0010 ad08 0010 b908 0010
-c508 0010 c50a 0010 d108 0010 dd08 0010
-0504 0010 1104 0010 e908 0010 f508 0010
-0109 0010 1d03 0010 b104 0010 0d09 0010
-1909 0010 0000 0000 0000 0000 fd0a 0010
-9904 0010 2908 0010 0d00 0010 a504 0010
-3508 0010 ed03 0010 4108 0010 4d08 0010
-5908 0010 6508 0010 7108 0010 f502 0010
-0000 0000 0000 0000 9d0a 0010 0000 0000
-0000 0000 9d0a 0010 b106 0010 bd06 0010
-0000 0000 0000 0000 2904 0010 4104 0010
-4d04 0010 9907 0010 a507 0010 7506 0010
-8106 0010 5904 0010 8d06 0010 6504 0010
-b107 0010 9906 0010 a506 0010 a509 0010
-bd07 0010 b109 0010 c907 0010 c109 0010
-d507 0010 e107 0010 ed07 0010 7104 0010
-f907 0010 0508 0010 1108 0010 1d08 0010
-8104 0010 8d04 0010 ecff ffff 0000 0000
-210b 0010 4109 0010 4d09 0010 5909 0010
-6509 0010 7509 0010 8109 0010 090b 0010
-8d09 0010 2d0b 0010 9909 0010 b8ff ffff
-0000 0000 750b 0010 b4ff ffff 0000 0000
-810b 0010 b106 0010 bd06 0010 e4ff ffff
-0000 0000 510b 0010 450b 0010 e8ff ffff
-0000 0000 390b 0010 c906 0010 d506 0010
-0300 0000 0600 0000 1b00 0000 4700 0000
-3f00 0000 ee02 0000 f502 0000 2203 0000
-2303 0000 2503 0000 2803 0000 b504 0000
-b604 0000 d204 0000 e604 0000 f304 0000
-4405 0000 4805 0000 0008 0000 0508 0000
-0300 0000 0c00 0000 1c00 0000 1d00 0000
-2100 0000 2800 0000 4200 0000 4800 0000
-4a00 0000 5200 0000 5400 0000 5500 0000
-5700 0000 5a00 0000 5f00 0000 6000 0000
-6400 0000 6500 0000 8a00 0000 8b00 0000
-8f00 0000 9300 0000 9900 0000 a000 0000
-ad00 0000 b100 0000 b900 0000 bb00 0000
-c500 0000 c800 0000 d000 0000 d600 0000
-dd00 0000 df00 0000 e200 0000 e800 0000
-ec00 0000 ff00 0000 0001 0000 1401 0000
-1501 0000 2401 0000 2501 0000 3801 0000
-3a01 0000 1200 0000 2700 0000 3300 0000
-b700 0000 e300 0000 e600 0000 1100 0000
-1400 0000 1e00 0000 1f00 0000 2000 0000
-2800 0000 3000 0000 3100 0000 3300 0000
-3400 0000 4000 0000 4100 0000 4200 0000
-4300 0000 4400 0000 4700 0000 4a00 0000
-4b00 0000 4c00 0000 5000 0000 5100 0000
-5200 0000 5400 0000 5600 0000 6400 0000
-7400 0000 7900 0000 7a00 0000 7c00 0000
-8200 0000 8500 0000 8600 0000 8c00 0000
-8e00 0000 8f00 0000 9200 0000 9300 0000
-9500 0000 9600 0000 9700 0000 9b00 0000
-9d00 0000 a100 0000 b300 0000 c600 0000
-c800 0000 cc00 0000 ce00 0000 d500 0000
-d600 0000 de00 0000 e000 0000 e200 0000
-fd00 0000 0801 0000 2201 0000 2801 0000
-0200 0000 0300 0000 2903 0000 3803 0000
-3c03 0000 5a03 0000 7c04 0000 8c04 0000
-0205 0000 0305 0000 e005 0000 2e06 0000
-4b06 0000 0400 0000 8905 0000 0000 0000
-8d03 0000 0003 0000 7802 0000 0400 0000
-0300 0000 0600 0000 1b00 0000 4700 0000
-8d02 0000 1000 0000 3f00 0000 ee02 0000
-f502 0000 2203 0000 2303 0000 2503 0000
-2803 0000 b504 0000 b604 0000 d204 0000
-e604 0000 f304 0000 4405 0000 4805 0000
-0008 0000 0508 0000 a102 0000 2d00 0000
-0300 0000 0c00 0000 1c00 0000 1d00 0000
-2100 0000 2800 0000 4200 0000 4800 0000
-4a00 0000 5200 0000 5400 0000 5500 0000
-5700 0000 5a00 0000 5f00 0000 6000 0000
-6400 0000 6500 0000 8a00 0000 8b00 0000
-8f00 0000 9300 0000 9900 0000 a000 0000
-ad00 0000 b100 0000 b900 0000 bb00 0000
-c500 0000 c800 0000 d000 0000 d600 0000
-dd00 0000 df00 0000 e200 0000 e800 0000
-ec00 0000 ff00 0000 0001 0000 1401 0000
-1501 0000 2401 0000 2501 0000 3801 0000
-3a01 0000 b402 0000 0600 0000 1200 0000
-2700 0000 3300 0000 b700 0000 e300 0000
-e600 0000 c802 0000 3900 0000 1100 0000
-1400 0000 1e00 0000 1f00 0000 2000 0000
-2800 0000 3000 0000 3100 0000 3300 0000
-3400 0000 4000 0000 4100 0000 4200 0000
-4300 0000 4400 0000 4700 0000 4a00 0000
-4b00 0000 4c00 0000 5000 0000 5100 0000
-5200 0000 5400 0000 5600 0000 6400 0000
-7400 0000 7900 0000 7a00 0000 7c00 0000
-8200 0000 8500 0000 8600 0000 8c00 0000
-8e00 0000 8f00 0000 9200 0000 9300 0000
-9500 0000 9600 0000 9700 0000 9b00 0000
-9d00 0000 a100 0000 b300 0000 c600 0000
-c800 0000 cc00 0000 ce00 0000 d500 0000
-d600 0000 de00 0000 e000 0000 e200 0000
-fd00 0000 0801 0000 2201 0000 2801 0000
-de02 0000 0d00 0000 0200 0000 0300 0000
-2903 0000 3803 0000 3c03 0000 5a03 0000
-7c04 0000 8c04 0000 0205 0000 0305 0000
-e005 0000 2e06 0000 4b06 0000 f202 0000
-0200 0000 0400 0000 8905 0000 4150 5041
-5243 5b31 3030 3033 6133 645d 2e44 4c4c
-0041 564b 4f4e 5b31 3030 3035 3663 365d
-2e44 4c4c 0043 4f4e 455b 3130 3030 3361
-3431 5d2e 444c 4c00 4546 5352 565b 3130
-3030 3339 6534 5d2e 444c 4c00 4549 4b43
-4f52 455b 3130 3030 3438 3932 5d2e 444c
-4c00 4555 5345 525b 3130 3030 3339 6535
-5d2e 444c 4c00 5045 524c 3539 332e 444c
-4c00 0000 c002 0000 5c01 0000 0000 0000
-c002 0000 1430 2830 dc30 e030 e430 e830
-ec30 f030 1032 9c32 a032 1833 6833 6c33
-7033 7433 7833 7c33 8033 8433 8833 ac33
-f433 0034 0c34 1834 2434 3034 3c34 4834
-5434 6034 6c34 7c34 8834 9434 a034 ac34
-bc34 c834 d434 e034 f034 fc34 0835 1435
-2035 2c35 3835 4435 5035 5c35 6835 7435
-8035 8c35 9835 a435 b035 bc35 c835 d435
-e035 ec35 f835 0436 1036 1c36 2836 3436
-4036 4c36 5836 6436 7036 7c36 8836 9436
-a036 ac36 b836 c436 d036 dc36 e836 f436
-0037 0c37 1c37 2837 3437 4037 4c37 5837
-6437 7037 7c37 8837 9437 a037 ac37 b837
-c437 d037 dc37 e837 f437 0038 0c38 1838
-2438 3038 3c38 4838 5438 6038 6c38 7838
-8438 9038 9c38 a838 b438 c038 cc38 d838
-e438 f038 fc38 0839 1439 2039 3039 3c39
-4839 5439 6039 7039 7c39 8839 9439 a039
-ac39 bc39 c839 d439 e039 f039 fc39 083a
-143a 203a 2c3a 383a 443a 503a 5c3a 683a
-743a 803a 8c3a 983a a43a b03a c03a dc3a
-e03a 9c3b a03b a43b a83b ac3b b03b b43b
-b83b bc3b c03b c43b c83b cc3b d03b d43b
-d83b dc3b e03b e43b e83b ec3b f03b f43b
-f83b fc3b 3c3c 403c 443c 483c 4c3c 503c
-543c 583c 5c3c 603c 643c 683c 6c3c 703c
-743c 783c 7c3c 803c 843c 883c 8c3c 903c
-943c 983c 9c3c a03c a43c a83c b43c b83c
-c43c c83c cc3c d03c d43c d83c dc3c e03c
-e43c e83c ec3c f03c f43c f83c fc3c 003d
-043d 083d 0c3d 103d 143d 183d 1c3d 203d
-243d 283d 2c3d 383d 3c3d 403d 443d 483d
-4c3d 503d 543d 583d 5c3d 603d 643d 683d
-743d 783d 7c3d 803d 843d 883d 8c3d 903d
-943d 983d 9c3d a03d a43d a83d ac3d b03d
-b43d b83d bc3d c03d c43d d03d d43d d83d
-dc3d e03d e43d e83d ec3d f03d f43d f83d
-fc3d 003e 0c3e 183e 1c3e 203e 2c3e 303e
-343e 383e 3c3e 403e 443e 483e 4c3e 503e
-543e 583e 5c3e 603e 643e 683e 6c3e 703e
-743e 783e 7c3e 803e 843e 883e 8c3e 903e
-943e 983e a43e a83e ac3e b03e b43e b83e
-bc3e c03e c43e c83e cc3e d83e e43e e83e
-ec3e f83e fc3e 083f 0c3f 103f
+  if ($Variant eq 'S60') {
+      $APPHEX = <<__APP__;
+79000010ce390010f61520108581107645504f430020000056176fa5000000000100bf00803e2bde56e1e0000300000180110000000000000010000000001000002000000000000001000000000000100000000007000000f8110000010000003c0f00007c00000000000000fc110000fc140000000000005e01000000b500f0f7f902bc084700000148006870470000280c001000b5011c024800f0b3fc01bc00470000480c001030b585b00490002100f004fd6846049900f046fb684600f01bf9011c049cb4256d006019016004980022002300f002fab6256d0065190020286000f003fa012100f006fa05b030bc01bc0047f0b5071c0e1c1e4878611e48b8611e48f8611e48b8641e48f8641e483860b42464003d192968002910d0786800f018fb2968002905d008688268081c032100f0a3f9b4246400391900200860b62464003d192868002803d000f060fc00202860b96a002905d008688268081c032100f08bf9381c311c00f0adfcf0bc01bc0047c40e0010280f0010180f0010f80e0010040f00105c0c001084b010b595b01790189119921a9301200021002200f07efc041c14a901a800f037fc002808d10090201c17a90222002300f076fc00f032fc00f036fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f0bbfa011c0a687ea8126a00f043f98026f6006e44301c00f07dfa2949301c7eaa002300f07dfac425ed006d44281c00f07ffa244c6c440021224868440160201c042100f07bfa301c00f07efa011c201c2a1c00f07ffa002824d1301c00f074fa011c8420000168448022520000f0f4fb8521090169446846fc22520000f0f2fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f070fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff2c0c0010480a000044080000480800004c0800004c0a000000b50120fff7e6fe01bc004700b5021c80204000814202d00348814206d1101c00f044fa05e00000c10b0000081cfff7e7ff01bc0047000010b500f007f8041c00f0aafb201c10bc02bc084730b5051c302000f0a7fb041c002c05d000f0f2f80748606007482060201c00f0a1fb201c291c00f009f8201c30bc02bc08470000d40c0010e40c001030b5041c0d1c00f0dff8201c291c00f0e1f82068016a201c00f08af830bc01bc0047000000b5044a4260044a026000f0d7f801bc00470000d40c0010e40c001030b584b0041c00f0d1f8051c6846211c00f0d2f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f053fb041c002c04d0291c00f085fb03482060201c30bc02bc08470000940d001070b5b820400000f03ffb061c002e18d000f0c4f90d48b0640d48f0640d4d75610d4cb4610d4bf3610d4ab2640d49f1640d4830600d483060301c6030802100f02ffb301c70bc02bc084700002c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c001010b58b20800000f019fb041c002c03d000f092f902482060201c10bc02bc0847f00d0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c0463c0f0010014b1b681847c046440f0010014b1b681847c046480f0010014b1b681847c046400f001040b4024e3668b44640bc6047900f0010014b1b681847c04610100010014b1b681847c0462c100010014b1b681847c0461c100010014b1b681847c046a00f0010014b1b681847c04608100010014b1b681847c04618100010014b1b681847c04614100010014b1b681847c046e80f0010014b1b681847c046dc0f0010014b1b681847c046d40f0010014b1b681847c04600100010014b1b681847c046fc0f0010014b1b681847c046980f0010014b1b681847c0468c0f0010014b1b681847c046e40f0010014b1b681847c04628100010014b1b681847c046f40f0010014b1b681847c04604100010014b1b681847c046c40f0010014b1b681847c046d80f0010014b1b681847c046bc0f0010014b1b681847c046a80f0010014b1b681847c046ac0f0010014b1b681847c046cc0f0010014b1b681847c046b80f0010014b1b681847c046b40f0010014b1b681847c046a40f0010014b1b681847c0460c100010014b1b681847c046e00f0010014b1b681847c0469c0f0010014b1b681847c046940f0010014b1b681847c046ec0f0010014b1b681847c046f00f0010014b1b681847c046d00f0010014b1b681847c046b00f0010014b1b681847c046c00f0010014b1b681847c046f80f0010014b1b681847c046c80f0010014b1b681847c04630100010014b1b681847c04634100010014b1b681847c04620100010014b1b681847c04624100010014b1b681847c0463c100010014b1b681847c04638100010014b1b681847c0465410001040b4024e3668b44640bc60474c100010014b1b681847c04650100010014b1b681847c04640100010014b1b681847c04648100010014b1b681847c04644100010014b1b681847c04668100010014b1b681847c046d8100010014b1b681847c04658100010014b1b681847c0468c100010014b1b681847c04624110010014b1b681847c04620110010014b1b681847c04638110010014b1b681847c046e8100010014b1b681847c04698100010014b1b681847c046a8100010014b1b681847c04608110010014b1b681847c046d4100010014b1b681847c046c8100010014b1b681847c04678100010014b1b681847c046ac100010014b1b681847c04614110010014b1b681847c046ec100010014b1b681847c046f0100010014b1b681847c04674100010014b1b681847c046c4100010014b1b681847c04660100010014b1b681847c046e0100010014b1b681847c04694100010014b1b681847c0465c100010014b1b681847c046f4100010014b1b681847c046bc100010014b1b681847c0467c100010014b1b681847c04688100010014b1b681847c046cc100010014b1b681847c04600110010014b1b681847c0460c110010014b1b681847c046f8100010014b1b681847c04690100010014b1b681847c046b8100010014b1b681847c046b4100010014b1b681847c046dc100010014b1b681847c046e4100010014b1b681847c04610110010014b1b681847c0462c11001040b4024e3668b44640bc6047b0100010014b1b681847c04604110010014b1b681847c04670100010014b1b681847c0469c100010014b1b681847c0466410001040b4024e3668b44640bc6047fc100010014b1b681847c04684100010014b1b681847c04680100010014b1b681847c046c0100010014b1b681847c04628110010014b1b681847c0466c10001040b4024e3668b44640bc6047d0100010014b1b681847c046a0100010014b1b681847c04630110010014b1b681847c0463411001040b4024e3668b44640bc6047a4100010014b1b681847c0461c110010014b1b681847c04618110010014b1b681847c04644110010014b1b681847c04664110010014b1b681847c04654110010014b1b681847c04658110010014b1b681847c04648110010014b1b681847c0465c110010014b1b681847c0463c110010014b1b681847c0464c110010014b1b681847c04640110010014b1b681847c04650110010014b1b681847c04660110010014b1b681847c04668110010014b1b681847c0466c110010014b1b681847c0467011001040b4024e3668b44640bc604774110010014b1b681847c0464c0f0010014b1b681847c046840f0010014b1b681847c046880f0010014b1b681847c046640f0010014b1b681847c046740f0010014b1b681847c046540f0010014b1b681847c0465c0f001040b4024e3668b44640bc6047500f0010014b1b681847c046800f0010014b1b681847c0467c0f0010014b1b681847c046700f0010014b1b681847c0466c0f001040b4024e3668b44640bc6047680f0010014b1b681847c046580f0010014b1b681847c046600f0010014b1b681847c046780f00107047000000b5fff72fff01bc0047000000b5fff72fff01bc0047000000b5fff723ff01bc0047000010b581b0039c14380094fff7b1fe01b010bc01bc0047000000b51438fff7d6ff01bc004700b51438fff7aafe01bc004700b51838fff7fcfe02bc084700b51c38fff7f0fe02bc084700b51c38fff7e4fe02bc084700b50438fff774fd02bc084700b50438fff768fd02bc084700b54838fff7a0ff01bc004700b54c38fff7a0ff01bc0047ffffffff00000000ffffffff00000000280c0010480c0010c40e0010280f0010180f0010f80e0010040f00105c0c00102c0c0010d40c0010e40c0010d40c0010e40c0010940d00102c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c0010580d0010f00d0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d0600102d00001039070010590100104507001051020010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010fcffffff00000000910b0010850b00100000000000000000f1020010d1040010dd040010e9040010f5040010010500100d0500101905001025050010310500103d0500104905001055050010610500106d0500107905001085050010910500109d050010a9050010b5050010c1050010cd050010d90500100d030010e5050010f105001000000000000000000d0b0010bd0a0010a5070010190a0010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010190a00100000000000000000190b0010f9070010050800103d040010110800101d080010290800103508001041080010090b00104d08001059080010490400105504001065080010710800107d08001061030010d50a001089080010950800100000000000000000250b0010bd0a0010a50700100d000010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010390300100000000000000000190a00100000000000000000190a0010390600104506001000000000000000004d0a0010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d06001021090010390700102d090010450700103d090010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010ecffffff00000000490b0010bd080010c9080010d5080010e1080010f1080010fd080010310b001009090010550b001015090010b8ffffff000000009d0b0010b4ffffff00000000a90b00103906001045060010e4ffffff00000000790b00106d0b0010e8ffffff00000000610b0010510600105d06001003000000060000001b000000470000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000040000008905000000000000d103000000030000780200000400000003000000060000001b000000470000008d020000100000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000a10200002d000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000b402000006000000120000002700000033000000b7000000e3000000e6000000c80200003900000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000de0200000d000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000f20200000200000004000000890500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000c00200005c01000000000000c002000014302830f830fc300031043108310c312c32c432c832043308335c33ac33b033b433b833bc33c033c433c833cc33f0333834443450345c346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f835043610361c362836343640364c365836643670367c3688369836a436b036bc36c836d436e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38ac38b838c438d038dc38ec38f838043910391c3928393839443950395c396c397839843990399c39a839b439c039cc39d839e439f039fc39083a143a203a2c3a3c3a483a543a603a6c3a783a843a903aa03aac3ab83ac43ad03ae03aec3af83a043bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c1c3c203c243c643c683c6c3c703c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca03ca43ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cdc3ce03cec3cf03cf43cf83cfc3c003d043d083d0c3d103d143d183d1c3d203d243d283d2c3d303d343d383d3c3d403d443d483d4c3d503d543d603d643d683d6c3d703d743d783d7c3d803d843d883d8c3d903d9c3da03da43da83dac3db03db43db83dbc3dc03dc43dc83dcc3dd03dd43dd83ddc3de03de43de83dec3df83dfc3d003e043e083e0c3e103e143e183e1c3e203e243e283e343e403e443e483e543e583e5c3e603e643e683e6c3e703e743e783e7c3e803e843e883e8c3e903e943e983e9c3ea03ea43ea83eac3eb03eb43eb83ebc3ec03ecc3ed03ed43ed83edc3ee03ee43ee83eec3ef03ef43e003f0c3f103f143f203f243f303f343f383f
 __APP__
+  }
 
   # This is Symbian application resource skeleton.
   # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
   # by compiling the PerlApp.cpp.
   # The following resource has been compiled using the Series 60 SDK 2.6
   # for Visual C.
-  $RSCHEX = <<__RSC__;
-6b4a 1f10 0000 0000 5fde 0400 1ca3 60de
-01b8 0010 0004 0000 0001 f0e5 4d00 0000
-0004 f0e5 4d00 0000 0000 0000 001a 00cc
-0800 0000 0001 0005 f0e5 4d00 0000 0000
-00ff ffff ff00 0000 0000 0000 0000 0f05
-0000 0400 0000 0000 0000 0000 0005 0541
-626f 7574 1700 00ff ffff ff00 0000 0001
-0400 0000 0000 0000 0000 0004 0454 696d
-6517 0000 ffff ffff 0000 0000 0204 0000
-0000 0000 0000 0000 0303 5275 6e17 0000
-ffff ffff 0000 0000 0304 0000 0000 0000
-0000 0000 0808 4f6e 656c 696e 6572 1700
-00ff ffff ff00 0000 0004 0400 0000 0000
-0000 0000 0009 0943 6f70 7972 6967 6874
-0e00 00ff ffff ff00 0000 0000 0000 0001
-2000 0000 0000 0000 1400 cc08 0100 6816
-0001 0000 0000 0001 0000 0000 ffff ffff
-00ff ffff ff00 0000 0000 0000 00ff ff00
-0000 0000 0000 0120 0000 0000 0000 0024
-00cc 0801 0068 1600 0100 0000 0000 0100
-0000 00ff ffff ff00 ffff ffff 0000 0000
-0000 0000 ffff 0000 0000 0000 0041 2200
-0000 0000 0000 1400 cc08 0100 6916 0000
-0500 0000 0001 0000 0000 0000 0000 0100
-0000 0400 0700 0800 ff02 0100 ffff ffff
-0000 0000 0000 0000 0000 ffff 0000 0000
-0000 0041 2200 0000 0000 0000 1400 cc08
-0100 7416 0007 0000 0000 0054 1600 00ff
-ffff ff00 0000 0000 00ff ff00 0000 0000
-0000 0000 0000 0015 001d 001d 0035 004d
-00ef 0026 015d 01a3 01d2 01d7 01
+  if ($Variant eq 'S60') {
+    $RSCHEX = <<__RSC__;
+6b4a1f10000000005fde04001ca360de01b80010000400000001f0e54d0000000004f0e54d00000000000000001a00cc0800000000010005f0e54d000000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000120000000000000001400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000000120000000000000002400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000004122000000000000001400cc08010069160000050000000001000000000000000001000000040007000800ff020100ffffffff00000000000000000000ffff000000000000004122000000000000001400cc08010074160007000000000054160000ffffffff000000000000ffff00000000000000000000000015001d001d0035004d00ef0026015d01a301d201d701
 __RSC__
+  }
+
+  # This is Symbian application executable skeleton.
+  # You can create the ...\epoc32\release\thumb\urel\foo.app
+  # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
+  # The following executable has been compiled using the Series 80 SDK 2.0
+  # for Visual C.
+  if ($Variant eq 'S80') {
+      $APPHEX = <<__APP__;
+79000010ce390010f61520108581107645504f43002000009f6ac520000000000100bb00401aaa8157e1e00003000001980e0000000000000010000000001000002000000000000001000000000000100000000007000000100f000001000000900c00007c00000000000000140f0000dc110000000000005e01000000b500f0cff902bc0847000001480068704700009c0a001000b5011c024800f075fc01bc00470000bc0a001030b585b00490002100f0e6fa6846049900f0e8fa684600f013f9011c049c9e256d006019016004980022002300f0daf9a0256d0065190020286000f0dbf9012100f0def905b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b4838609e2464003d192968002910d0786800f0c0fa2968002905d008688268081c032100f081f99e246400391900200860a02464003d192868002803d000f028fc00202860796a002905d008688268081c032100f069f9381c311c00f0a1faf0bc01bc0047480c00107c0c0010d00a001084b010b595b01790189119921a9301200021002200f046fc041c14a901a800f005fc002808d10090201c17a90222002300f03efc00f000fc00f004fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f06ffa011c0a687ea8126a00f027f98026f6006e44301c00f025fa2949301c7eaa002300f025fac425ed006d44281c00f027fa244c6c440021224868440160201c042100f023fa301c00f026fa011c201c2a1c00f027fa002824d1301c00f01cfa011c8420000168448022520000f0c2fb8521090169446846fc22520000f0c0fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f024fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa00a0010480a000044080000480800004c0800004c0a000000b50120fff7f2fe01bc004700b5081cfff7f6ff01bc004710b5021c80204000814203d1101c00f0f5f905e09e24640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f074fb201c10bc02bc084730b5051c2c2000f071fb041c002c03d000f092fb06482060201c00f06dfb201c291c00f007f8201c30bc02bc084700003c0b001030b5041c0d1c00f0bdf8201c291c00f0bff82068016a201c00f06ef830bc01bc0047000000b5034a026000f0b7f801bc004700003c0b001030b584b0041c00f0b3f8051c6846211c00f0b4f82868b8300268281c694600f051f804b030bc01bc0047000030b5051c242000f025fb041c002c04d0291c00f08ff903482060201c30bc02bc08470000b00b001010b5a220400000f011fb041c002c0cd000f082f9074860610748a06107482060201c3430802100f00dfb201c10bc02bc08470000480c00107c0c0010d00a001010b58b20800000f003fb041c002c03d000f068f902482060201c10bc02bc08470c0c0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046900c0010014b1b681847c046980c0010014b1b681847c0469c0c0010014b1b681847c046940c001040b4024e3668b44640bc6047a40c0010014b1b681847c046100d0010014b1b681847c046280d0010014b1b681847c046b40c0010014b1b681847c046080d0010014b1b681847c046180d0010014b1b681847c046140d0010014b1b681847c046f00c0010014b1b681847c046e40c0010014b1b681847c046dc0c0010014b1b681847c046000d0010014b1b681847c046fc0c0010014b1b681847c046ac0c0010014b1b681847c046a00c0010014b1b681847c046ec0c0010014b1b681847c046240d0010014b1b681847c046040d0010014b1b681847c046e00c0010014b1b681847c046bc0c0010014b1b681847c046d40c0010014b1b681847c046c80c0010014b1b681847c046c40c0010014b1b681847c046b80c0010014b1b681847c0460c0d0010014b1b681847c046e80c0010014b1b681847c046b00c0010014b1b681847c046a80c0010014b1b681847c046f40c0010014b1b681847c046d80c0010014b1b681847c046c00c0010014b1b681847c046cc0c0010014b1b681847c046f80c0010014b1b681847c046d00c0010014b1b681847c0461c0d0010014b1b681847c046200d0010014b1b681847c046400d001040b4024e3668b44640bc6047380d0010014b1b681847c0463c0d0010014b1b681847c0462c0d0010014b1b681847c046340d0010014b1b681847c046300d0010014b1b681847c046540e0010014b1b681847c0466c0d0010014b1b681847c046e80d0010014b1b681847c046300e0010014b1b681847c0465c0d0010014b1b681847c0468c0d0010014b1b681847c046340e0010014b1b681847c0463c0e0010014b1b681847c046380e0010014b1b681847c046480e0010014b1b681847c046500e0010014b1b681847c046f40d0010014b1b681847c046fc0d0010014b1b681847c046440e0010014b1b681847c046b40d0010014b1b681847c046980d0010014b1b681847c046a80d0010014b1b681847c046e40d0010014b1b681847c046d00d0010014b1b681847c046780d001040b4024e3668b44640bc6047a00d0010014b1b681847c046ac0d0010014b1b681847c046240e0010014b1b681847c046000e0010014b1b681847c046040e0010014b1b681847c046d80d0010014b1b681847c046740d0010014b1b681847c046d40d0010014b1b681847c046c80d0010014b1b681847c046640d0010014b1b681847c046f00d0010014b1b681847c046940d0010014b1b681847c046600d0010014b1b681847c046080e0010014b1b681847c046c00d0010014b1b681847c0467c0d0010014b1b681847c046880d0010014b1b681847c046dc0d0010014b1b681847c046140e0010014b1b681847c0461c0e0010014b1b681847c0460c0e0010014b1b681847c046900d0010014b1b681847c046bc0d0010014b1b681847c046b80d0010014b1b681847c046ec0d0010014b1b681847c046f80d001040b4024e3668b44640bc6047cc0d0010014b1b681847c046200e0010014b1b681847c0464c0e001040b4024e3668b44640bc6047a40d0010014b1b681847c046e00d001040b4024e3668b44640bc6047b00d0010014b1b681847c046180e0010014b1b681847c046700d0010014b1b681847c0469c0d0010014b1b681847c046680d001040b4024e3668b44640bc6047100e0010014b1b681847c046840d0010014b1b681847c046800d0010014b1b681847c046c40d0010014b1b681847c046400e0010014b1b681847c0462c0e0010014b1b681847c046280e0010014b1b681847c046600e0010014b1b681847c046800e0010014b1b681847c046700e0010014b1b681847c046740e0010014b1b681847c046640e0010014b1b681847c046780e0010014b1b681847c046580e0010014b1b681847c046680e0010014b1b681847c0465c0e0010014b1b681847c0466c0e0010014b1b681847c0467c0e0010014b1b681847c046840e0010014b1b681847c046880e001040b4024e3668b44640bc60478c0e0010014b1b681847c046540d0010014b1b681847c046500d0010014b1b681847c0464c0d0010014b1b681847c046480d0010014b1b681847c046440d0010014b1b681847c046580d00107047000000b5fff77bff01bc0047000000b5fff76fff01bc0047000010b581b0039c14380094fff725ff01b010bc01bc0047000000b51438fff716ff01bc004700b51438fff71eff01bc004700b51838fff702ff02bc0847ffffffff00000000ffffffff000000009c0a0010bc0a0010480c00107c0c0010d00a0010a00a00103c0b00103c0b0010b00b0010480c00107c0c0010d00a00100c0c0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010710600107d06001089060010950600106505001071050010a10600107d050010ad060010b906001089050010950500102d000010c50600104101001045020010d1060010dd060010e9060010f506001005070010110700101d070010290700100000000000000000d902001075040010810400108d04001099040010a5040010b1040010bd040010c9040010c5090010d5040010d1090010e1040010dd090010e9090010ed040010f904001005050010110500101d0500102905001035050010410500104d050010ed020010f5090010590500100000000000000000050a0010a1070010ad070010ed030010b9070010c5070010d1070010dd070010e9070010010a0010f507001001080010f9030010050400100d08001019080010250800104103001031080010410800104d0800100000000000000000110a001035070010410700100d0000104d07001059070010e103001065070010710700107d070010890700109507001019030010ecffffff00000000350a0010910800109d080010a9080010b5080010c5080010d10800101d0a0010dd080010410a0010e9080010e8ffffff000000004d0a0010a1050010ad05001003000000060000001b00000047000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff000000000100001401000015010000120000002700000033000000b7000000e3000000e6000000260100005601000065010000800200000a040000af04000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e06000004000000890500000000000081030000c80200003c0200000400000003000000060000001b000000470000005102000023000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff0000000001000014010000150100006402000006000000120000002700000033000000b7000000e3000000e60000007802000006000000260100005601000065010000800200000a040000af0400008f0200003f00000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000a50200000c000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e060000b90200000200000004000000890500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0000000004020000fe000000000000000402000014302830ec30f030f4301432b032e8323c33743378337c33a033e833f43300340c341c342834343440344c345834643470347c3488349434a034ac34b834c434d034dc34e834f43400350c351835243530353c354835543560356c357835843590359c35a835b435c035d035dc35e835f43500360c361836243630363c364836543660366c367836843690369c36a836b436c036cc36d836e436f03600370c371837243730373c374837543760376c377837843790379c37a837b437c037cc37d837e437f037fc370838143820382c383c38483854386438703880388c389838a438b038c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b439c039cc39d839e439f039fc39683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983ad83adc3ae03ae43ae83aec3af03af43af83afc3a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b343b383b443b483b4c3b503b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b903b943b983b9c3ba03ba43ba83bac3bb83bbc3bc03bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c143c183c1c3c203c243c283c2c3c303c343c383c3c3c403c443c503c543c583c5c3c603c643c683c6c3c703c743c783c843c883c8c3c__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.
+  if ($Variant eq 'S80') {
+    $RSCHEX = <<__RSC__;
+6b4a1f10000000005fde04001ca360de01b800380400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000014001c001c0034008200a5004701__RSC__
+  }
 }
index eb7c63d..344f7ee 100644 (file)
@@ -49,15 +49,17 @@ if ( !defined $SymbianVersion) {
 
 my $S60SDK;
 
+my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION);
+
 if ($CoreBuild) {
     unshift @INC, "symbian";
     do "sanity.pl";
     my %VERSION = %{ do "version.pl" };
-    $SDK     = do "sdk.pl";
+    ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
+      @{ do "sdk.pl" };
     $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
     $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
     $BUILDROOT    = do "cwd.pl";
-    $SymbianVersion = $1 if $SDK =~ m:\\Symbian\\([^\\]+):;
     $PerlVersion    = $R_V_SV;
     $S60SDK = $ENV{S60SDK}; # from sdk.pl
 }
@@ -96,7 +98,6 @@ die "$0: Perl version '$PerlVersion' not found\n"
 
 print "Configuring with Symbian $SymbianVersion and Perl $PerlVersion...\n";
 
-$SDK     = "\\Symbian\\$SymbianVersion" unless defined $SDK;
 $PERLSDK = "\\Symbian\\Perl\\$PerlVersion";
 
 $R_V_SV = $PerlVersion;
@@ -105,11 +106,11 @@ $VERSION = $PerlVersion unless defined $VERSION;
 
 $VERSION =~ tr/.//d if defined $VERSION;
 
-$ENV{SDK}   = $SDK;    # For the Errno extension
-$ENV{CROSS} = 1;       # For the Encode extension
+$ENV{SDK}   = $SYMBIAN_ROOT;    # For the Errno extension
+$ENV{CROSS} = 1;                # For the Encode extension (unbuilt now)
 
 my $UARM = 'urel';
-my $UREL = "$SDK\\epoc32\\release\\-ARM-\\$UARM";
+my $UREL = "$SYMBIAN_ROOT\\epoc32\\release\\-ARM-\\$UARM";
 my $SRCDBG;
 if (exists $ENV{UREL}) {
     $UREL = $ENV{UREL}; # from sdk.pl
@@ -281,12 +282,12 @@ sub write_makefile {
 
     print "\tMakefile\n";
 
-    my $windef1 = "$SDK\\Epoc32\\Build$CWD\\$base\\$WIN\\$base.def";
+    my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\$WIN\\$base.def";
     my $windef2 = "..\\BWINS\\${base}u.def";
-    my $armdef1 = "$SDK\\Epoc32\\Build$CWD\\$base\\$ARM\\$base.def";
+    my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\$ARM\\$base.def";
     my $armdef2 = "..\\BMARM\\${base}u.def";
 
-    my $wrap = $SDK && $S60SDK eq '1.2' && $SDK !~ /_CW$/;
+    my $wrap = $SYMBIAN_ROOT && $S60SDK eq '1.2' && $SYMBIAN_ROOT !~ /_CW$/;
     my $ABLD = $wrap ? 'perl b.pl' : 'abld';
 
     open( MAKEFILE, ">Makefile" ) or die "$0: Makefile: $!\n";
@@ -805,7 +806,7 @@ __EOF__
         my %symbol;
        my $def;
        my $basef;
-        for my $f ("$SDK\\Epoc32\\Build$CWD\\$base\\WINS\\perl$VERSION-$extdash.def",
+        for my $f ("$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\WINS\\perl$VERSION-$extdash.def",
                   "..\\BMARM\\perl$VERSION-${extdash}u.def") {
            print "\t($f - ";
            if ( open( $def, $f ) ) {