From d0d72822ba0a68d160ea4c98ca80f24b8f73969b Mon Sep 17 00:00:00 2001 From: Jarkko Hietaniemi Date: Mon, 7 Nov 2005 15:32:15 +0200 Subject: Symbian update blead@26025 Message-ID: p4raw-id: //depot/perl@26030 --- symbian/PerlApp.cpp | 413 ++++++++------------------------------ symbian/PerlApp.h | 96 +-------- symbian/PerlApp.hrh | 3 +- symbian/PerlAppS60.rss | 141 ------------- symbian/PerlAppS80.rss | 93 --------- symbian/PerlAppUIQ.rss | 125 ------------ symbian/PerlBase.h | 10 +- symbian/PerlUi.cpp | 273 +++++++++++++++++++++++++ symbian/PerlUi.h | 120 +++++++++++ symbian/PerlUi.hrh | 14 ++ symbian/PerlUiS60.rss | 144 +++++++++++++ symbian/PerlUiS80.rss | 95 +++++++++ symbian/PerlUiUIQ.rss | 124 ++++++++++++ symbian/TODO | 100 ++++++--- symbian/config.pl | 101 +++++++--- symbian/config.sh | 14 ++ symbian/ext/Moped/Msg/Msg.mmp | 1 + symbian/ext/Moped/Msg/Msg.pkg | 16 ++ symbian/ext/Moped/Msg/Msg.pm | 9 + symbian/ext/Moped/Msg/Msg.xs | 51 +++++ symbian/ext/Moped/Msg/README | 49 +++++ symbian/ext/Moped/Msg/bld.inf | 4 + symbian/ext/Moped/Msg/location.pl | 8 + symbian/sanity.pl | 27 +-- symbian/sdk.pl | 56 ++++-- symbian/sisify.pl | 26 +-- symbian/symbian_proto.h | 33 +-- symbian/symbian_utils.cpp | 53 ++++- symbian/symbianish.h | 2 +- symbian/xsbuild.pl | 33 +-- 30 files changed, 1312 insertions(+), 922 deletions(-) delete mode 100644 symbian/PerlAppS60.rss delete mode 100644 symbian/PerlAppS80.rss delete mode 100644 symbian/PerlAppUIQ.rss create mode 100644 symbian/PerlUi.cpp create mode 100644 symbian/PerlUi.h create mode 100644 symbian/PerlUi.hrh create mode 100644 symbian/PerlUiS60.rss create mode 100644 symbian/PerlUiS80.rss create mode 100644 symbian/PerlUiUIQ.rss create mode 100644 symbian/ext/Moped/Msg/Msg.mmp create mode 100644 symbian/ext/Moped/Msg/Msg.pkg create mode 100644 symbian/ext/Moped/Msg/Msg.pm create mode 100644 symbian/ext/Moped/Msg/Msg.xs create mode 100644 symbian/ext/Moped/Msg/README create mode 100644 symbian/ext/Moped/Msg/bld.inf create mode 100644 symbian/ext/Moped/Msg/location.pl (limited to 'symbian') diff --git a/symbian/PerlApp.cpp b/symbian/PerlApp.cpp index ee95c93f35..d90cc044ff 100644 --- a/symbian/PerlApp.cpp +++ b/symbian/PerlApp.cpp @@ -1,35 +1,12 @@ /* Copyright (c) 2004-2005 Nokia. All rights reserved. */ /* The PerlApp application is licensed under the same terms as Perl itself. - * Note that this PerlApp is for Symbian/Series 60/80 smartphones and it has - * nothing whatsoever to do with the ActiveState PerlApp. */ + * + * Note that this PerlApp is for Symbian/Series 60/80/UIQ smartphones + * and it has nothing whatsoever to do with the ActiveState PerlApp. */ #include "PerlApp.h" -#ifdef __SERIES60__ -# include -# include -# include -# ifndef __SERIES60_1X__ -# include -# endif -#endif /* #ifdef __SERIES60__ */ - -#ifdef __SERIES80__ -# include -# include -# include -# include -# include -# include -#endif /* #ifdef __SERIES80__ */ - -#ifdef __UIQ__ -# include -# include -# include -#endif /* #ifdef __UIQ__ */ - #include #include #include @@ -45,17 +22,19 @@ #include "PerlApp.hrh" -#include "PerlApp.rsg" - -#ifdef __SERIES80__ -#include "Eikon.rsg" -#endif /* #ifdef __SERIES80__ */ - #endif //#ifndef PerlAppMinimal +#define PERL_GLOBAL_STRUCT +#define PERL_GLOBAL_STRUCT_PRIVATE + #include "EXTERN.h" #include "perl.h" +#include "XSUB.h" + #include "PerlBase.h" +#include "PerlUtil.h" + +#define symbian_get_vars() Dll::Tls() // Not visible from perlXYZ.lib? const TUid KPerlAppUid = { #ifdef PerlAppMinimalUid @@ -67,13 +46,6 @@ const TUid KPerlAppUid = { _LIT(KDefaultScript, "default.pl"); -// This is like the Symbian _LIT() but without the embedded L prefix, -// which enables using #defined constants (which need to carry their -// own L prefix). -#ifndef _LIT_NO_L -# define _LIT_NO_L(n, s) static const TLitC n={sizeof(s)/2-1,s} -#endif // #ifndef _LIT_NO_L - #ifdef PerlAppMinimalName _LIT_NO_L(KAppName, PerlAppMinimalName); #else @@ -98,11 +70,6 @@ typedef TBuf8<256> TFileName8; #endif // #ifndef PerlAppMinimal -// Usage: DEBUG_PRINTF((_L("%S"), &aStr)) -#if 1 -#define DEBUG_PRINTF(s) {TMessageBuffer message; message.Format s; YesNoDialogL(message);} -#endif - static void DoRunScriptL(TFileName aScriptName); TUid CPerlAppApplication::AppDllUid() const @@ -120,167 +87,8 @@ void Panic(TPerlAppPanic aReason) User::Panic(KAppName, aReason); } -void CPerlAppUi::ConstructL() -{ - BaseConstructL(); - iAppView = CPerlAppView::NewL(ClientRect()); - AddToStackL(iAppView); - iFs = NULL; - CEikonEnv::Static()->DisableExitChecks(ETrue); // Symbian FAQ-0577. -} - -CPerlAppUi::~CPerlAppUi() -{ - if (iAppView) { - iEikonEnv->RemoveFromStack(iAppView); - delete iAppView; - iAppView = NULL; - } - if (iFs) { - delete iFs; - iFs = NULL; - } - if (iDoorObserver) // Otherwise the embedding application waits forever. - iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::EEmpty); -} - #ifndef PerlAppMinimal -static TBool OkCancelDialogL(TDesC& aMessage) -{ -#ifdef __SERIES60__ - CAknNoteDialog* dlg = - new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone); - dlg->PrepareLC(R_OK_CANCEL_DIALOG); - dlg->SetTextL(aMessage); - 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) -{ -#ifdef __SERIES60__ - CAknNoteDialog* dlg = - new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone); - dlg->PrepareLC(R_YES_NO_DIALOG); - dlg->SetTextL(aMessage); - 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) -{ -#ifdef __SERIES60__ - CAknInformationNote* note = new (ELeave) CAknInformationNote; - note->ExecuteLD(aMessage); -#endif /* #ifdef __SERIES60__ */ -#if defined(__SERIES80__) || defined(__UIQ__) - CEikonEnv::Static()->InfoMsg(aMessage); -#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ -} - -static TInt WarningNoteL(TDesC& aMessage) -{ -#ifdef __SERIES60__ - CAknWarningNote* note = new (ELeave) CAknWarningNote; - return note->ExecuteLD(aMessage); -#endif /* #ifdef __SERIES60__ */ -#if defined(__SERIES80__) || defined(__UIQ__) - CEikonEnv::Static()->AlertWin(aMessage); - return ETrue; -#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ -} - -#if defined(__SERIES80__) || defined(__UIQ__) - -CPerlAppTextQueryDialog::CPerlAppTextQueryDialog(HBufC*& aBuffer) : - iData(aBuffer) -{ -} - -TBool CPerlAppTextQueryDialog::OkToExitL(TInt /* aKeycode */) -{ - iData = static_cast(Control(EPerlAppTextQueryInputField))->GetTextInHBufL(); - return ETrue; -} - -void CPerlAppTextQueryDialog::PreLayoutDynInitL() -{ - SetTitleL(iTitle); - CEikLabel* promptLabel = ControlCaption(EPerlAppTextQueryInputField); - promptLabel->SetTextL(iPrompt); -} - -/* TODO: OfferKeyEventL() so that newline can be seen as 'OK'. - * Or a hotkey for the button? */ - -#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ - -static TInt TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength) -{ -#ifdef __SERIES60__ - CAknTextQueryDialog* dlg = - new (ELeave) CAknTextQueryDialog(aData); - dlg->SetPromptL(aPrompt); - dlg->SetMaxLength(aMaxLength); - return dlg->ExecuteLD(R_TEXT_QUERY_DIALOG); -#endif /* #ifdef __SERIES60__ */ -#if defined(__SERIES80__) || defined(__UIQ__) - HBufC* data = NULL; - CPerlAppTextQueryDialog* dlg = - new (ELeave) CPerlAppTextQueryDialog(data); - dlg->iTitle.Set(aTitle); - dlg->iPrompt.Set(aPrompt); - dlg->iMaxLength = aMaxLength; - if (dlg->ExecuteLD(R_PERL_ONELINER_DIALOG)) { - aData.Copy(*data); - return ETrue; - } - return EFalse; -#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ -} - -static TBool FileQueryDialogL(TDes& aFilename) -{ -#ifdef __SERIES60__ - return AknCommonDialogs::RunSelectDlgLD(aFilename, - R_MEMORY_SELECTION_DIALOG); -#endif /* #ifdef __SERIES60__ */ -#ifdef __SERIES80__ - if (CCknOpenFileDialog::RunDlgLD(aFilename, - CCknFileListDialogBase::EShowAllDrives - |CCknFileListDialogBase::EShowSystemFilesAndFolders - |CCknFileListDialogBase::EShowBothFilesAndFolders - )) { - TEntry aEntry; // Be paranoid and check that the file is there. - RFs aFs; - aFs.Connect(); - if (aFs.Entry(aFilename, aEntry) == KErrNone) - return ETrue; - else - CEikonEnv::Static()->InfoMsg(_L("File not found")); - } - return EFalse; -#endif /* #ifdef __SERIES80__ */ -#ifdef __UIQ__ - return EFalse; // No filesystem access in UIQ 2.x! -#endif /* #ifdef __UIQ__ */ -} - // The isXXX() come from the Perl headers. #define FILENAME_IS_ABSOLUTE(n) \ (isALPHA(((n)[0])) && ((n)[1]) == ':' && ((n)[2]) == '\\') @@ -321,12 +129,12 @@ static void CopyFromInboxL(RFs aFs, const TFileName& aSrc, const TFileName& aDst TMessageBuffer message; message.Format(_L("%S is untrusted. Install only if you trust provider."), &aDst); - if (OkCancelDialogL(message)) { + if (CPerlUi::OkCancelDialogL(message)) { message.Format(_L("Install as %S?"), &aDst); - if (OkCancelDialogL(message)) { + if (CPerlUi::OkCancelDialogL(message)) { if (BaflUtils::FileExists(aFs, aDst)) { message.Format(_L("Replace old %S?"), &aDst); - if (!OkCancelDialogL(message)) + if (!CPerlUi::OkCancelDialogL(message)) proceed = EFalse; } if (proceed) { @@ -334,11 +142,11 @@ static void CopyFromInboxL(RFs aFs, const TFileName& aSrc, const TFileName& aDst TInt err = BaflUtils::CopyFile(aFs, aSrc, aDst); if (err == KErrNone) { message.Format(_L("Installed %S"), &aDst); - InformationNoteL(message); + CPerlUi::InformationNoteL(message); } else { message.Format(_L("Failure %d installing %S"), err, &aDst); - WarningNoteL(message); + CPerlUi::WarningNoteL(message); } } } @@ -460,7 +268,7 @@ static TBool RunStuffL(const TFileName& aScriptName, TPeekBuffer aPeekBuffer) message.Format(_L("Really run module %S?"), &aScriptName); else message.Format(_L("Run %S?"), &aScriptName); - if (YesNoDialogL(message)) + if (CPerlUi::YesNoDialogL(message)) DoRunScriptL(aScriptName); return ETrue; } @@ -468,7 +276,7 @@ static TBool RunStuffL(const TFileName& aScriptName, TPeekBuffer aPeekBuffer) return EFalse; } -void CPerlAppUi::InstallOrRunL(const TFileName& aFileName) +void CPerlAppAppUi::InstallOrRunL(const TFileName& aFileName) { TParse aFile; TParse aDrive; @@ -495,15 +303,15 @@ void CPerlAppUi::InstallOrRunL(const TFileName& aFileName) InstallStuffL(aFileName, aDrive, aFile, aPeekBuffer, *iFs) : RunStuffL(aFileName, aPeekBuffer))) { message.Format(_L("Failed for file %S"), &aFileName); - WarningNoteL(message); + CPerlUi::WarningNoteL(message); } } else { message.Format(_L("Error %d reading %S"), err, &aFileName); - WarningNoteL(message); + CPerlUi::WarningNoteL(message); } } else { message.Format(_L("Error %d opening %S"), err, &aFileName); - WarningNoteL(message); + CPerlUi::WarningNoteL(message); } if (iDoorObserver) delete CEikonEnv::Static()->EikAppUi(); @@ -511,7 +319,22 @@ void CPerlAppUi::InstallOrRunL(const TFileName& aFileName) Exit(); } -#endif // #ifndef PerlAppMinimal +#endif /* #ifndef PerlAppMinimal */ + +CPerlAppAppUi::~CPerlAppAppUi() +{ + if (iAppView) { + iEikonEnv->RemoveFromStack(iAppView); + delete iAppView; + iAppView = NULL; + } + if (iFs) { + delete iFs; + iFs = NULL; + } + if (iDoorObserver) // Otherwise the embedding application waits forever. + iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::EEmpty); +} static void DoRunScriptL(TFileName aScriptName) { @@ -521,7 +344,7 @@ static void DoRunScriptL(TFileName aScriptName) if (error != KErrNone) { TMessageBuffer message; message.Format(_L("Error %d"), error); - YesNoDialogL(message); + CPerlUi::YesNoDialogL(message); } #endif // #ifndef PerlAppMinimal CleanupStack::PopAndDestroy(perl); @@ -529,7 +352,7 @@ static void DoRunScriptL(TFileName aScriptName) #ifndef PerlAppMinimal -void CPerlAppUi::OpenFileL(const TDesC& aFileName) +void CPerlAppAppUi::OpenFileL(const TDesC& aFileName) { InstallOrRunL(aFileName); return; @@ -537,7 +360,7 @@ void CPerlAppUi::OpenFileL(const TDesC& aFileName) #endif // #ifndef PerlAppMinimal -TBool CPerlAppUi::ProcessCommandParametersL(TApaCommand aCommand, TFileName& /* aDocumentName */, const TDesC8& /* aTail */) +TBool CPerlAppAppUi::ProcessCommandParametersL(TApaCommand aCommand, TFileName& /* aDocumentName */, const TDesC8& /* aTail */) { if (aCommand == EApaCommandRun) { TFileName appName = Application()->AppFullName(); @@ -556,14 +379,14 @@ TBool CPerlAppUi::ProcessCommandParametersL(TApaCommand aCommand, TFileName& /* #ifndef PerlAppMinimal -void CPerlAppUi::SetFs(const RFs& aFs) +void CPerlAppAppUi::SetFs(const RFs& aFs) { iFs = (RFs*) &aFs; } #endif // #ifndef PerlAppMinimal -static void DoHandleCommandL(TInt aCommand) { +void CPerlAppAppUi::DoHandleCommandL(TInt aCommand) { #ifndef PerlAppMinimal TMessageBuffer message; #endif // #ifndef PerlAppMinimal @@ -584,7 +407,7 @@ static void DoHandleCommandL(TInt aCommand) { PERL_SYMBIANSDK_MAJOR, PERL_SYMBIANSDK_MINOR ); - InformationNoteL(message); + CPerlUi::InformationNoteL(message); } break; case EPerlAppCommandTime: @@ -597,14 +420,16 @@ static void DoHandleCommandL(TInt aCommand) { CleanupStack::PopAndDestroy(perl); } break; +#ifndef __UIQ__ case EPerlAppCommandRunFile: { TFileName aScriptUtf16; - aScriptUtf16.Copy(_L("C:\\")); - if (FileQueryDialogL(aScriptUtf16)) - DoRunScriptL(aScriptUtf16); - } + aScriptUtf16.Copy(_L("C:\\")); + if (CPerlUi::FileQueryDialogL(aScriptUtf16)) + DoRunScriptL(aScriptUtf16); + } break; +#endif case EPerlAppCommandOneLiner: { #ifdef __SERIES60__ @@ -613,16 +438,17 @@ static void DoHandleCommandL(TInt aCommand) { #if defined(__SERIES80__) || defined(__UIQ__) _LIT(prompt, "Code:"); // The title has "Oneliner" already. #endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ - CPerlAppUi* cAppUi = - STATIC_CAST(CPerlAppUi*, CEikonEnv::Static()->EikAppUi()); - if (TextQueryDialogL(_L("Oneliner"), - prompt, - cAppUi->iOneLiner, - KPerlAppOneLinerSize)) { - const TUint KPerlAppUtf8Multi = 3; - TBuf8 utf8; - - CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8, cAppUi->iOneLiner); + CPerlAppAppUi* cAppUi = + static_cast(CEikonEnv::Static()->EikAppUi()); + if (CPerlUi::TextQueryDialogL(_L("Oneliner"), + prompt, + cAppUi->iOneLiner, + KPerlUiOneLinerSize)) { + const TUint KPerlUiUtf8Multi = 3; // Expansion multiplier. + TBuf8 utf8; + + CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8, + cAppUi->iOneLiner); CPerlBase* perl = CPerlBase::NewInterpreterLC(); int argc = 3; char **argv = (char**) malloc(argc * sizeof(char *)); @@ -641,28 +467,28 @@ static void DoHandleCommandL(TInt aCommand) { case EPerlAppCommandCopyright: { message.Format(KCopyrightFormat); - InformationNoteL(message); + CPerlUi::InformationNoteL(message); } break; case EPerlAppCommandAboutCopyright: { - TMessageBuffer m1; - TMessageBuffer m2; + 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(m1); - User::After((TTimeIntervalMicroSeconds32) (1000*1000)); + PERL_REVISION, + PERL_VERSION, + PERL_SUBVERSION, + PERL_SYMBIANPORT_MAJOR, + PERL_SYMBIANPORT_MINOR, + PERL_SYMBIANPORT_PATCH, + &KFlavor, + PERL_SYMBIANSDK_MAJOR, + PERL_SYMBIANSDK_MINOR + ); + CPerlUi::InformationNoteL(m1); + User::After((TTimeIntervalMicroSeconds32) (1000*1000)); // 1 sec. m2.Format(KCopyrightFormat); - InformationNoteL(m2); + CPerlUi::InformationNoteL(m2); } break; #endif // #ifndef PerlAppMinimal @@ -671,87 +497,16 @@ static void DoHandleCommandL(TInt aCommand) { } } -#ifdef __SERIES60__ - -void CPerlAppUi::HandleCommandL(TInt aCommand) -{ - switch(aCommand) - { - case EEikCmdExit: - case EAknSoftkeyExit: - Exit(); - break; - default: - DoHandleCommandL(aCommand); - break; - } -} - -#endif /* #ifdef __SERIES60__ */ - -#if defined(__SERIES80__) || defined(__UIQ__) - -void CPerlAppView::HandleCommandL(TInt aCommand) { - DoHandleCommandL(aCommand); -} - -void CPerlAppUi::HandleCommandL(TInt aCommand) { - switch(aCommand) - { - case EEikCmdExit: - Exit(); - break; - default: - iAppView->HandleCommandL(aCommand); - break; - } -} - -#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ - -CPerlAppView* CPerlAppView::NewL(const TRect& aRect) -{ - CPerlAppView* self = CPerlAppView::NewLC(aRect); - CleanupStack::Pop(self); - return self; -} - -CPerlAppView* CPerlAppView::NewLC(const TRect& aRect) -{ - CPerlAppView* self = new (ELeave) CPerlAppView; - CleanupStack::PushL(self); - self->ConstructL(aRect); - return self; -} - -void CPerlAppView::ConstructL(const TRect& aRect) -{ - CreateWindowL(); - SetRect(aRect); - ActivateL(); -} - -CPerlAppView::~CPerlAppView() -{ -} - -void CPerlAppView::Draw(const TRect& /*aRect*/) const -{ - CWindowGc& gc = SystemGc(); - TRect rect = Rect(); - gc.Clear(rect); -} - CApaDocument* CPerlAppApplication::CreateDocumentL() { - CPerlAppDocument* document = new (ELeave) CPerlAppDocument(*this); - return document; + CPerlAppDocument* cDoc = new (ELeave) CPerlAppDocument(*this); + return cDoc; } CEikAppUi* CPerlAppDocument::CreateAppUiL() { - CPerlAppUi* appui = new (ELeave) CPerlAppUi(); - return appui; + CPerlAppAppUi* cAppUi = new (ELeave) CPerlAppAppUi(); + return cAppUi; } @@ -759,11 +514,11 @@ CEikAppUi* CPerlAppDocument::CreateAppUiL() CFileStore* CPerlAppDocument::OpenFileL(TBool aDoOpen, const TDesC& aFileName, RFs& aFs) { - CPerlAppUi* appui = - STATIC_CAST(CPerlAppUi*, CEikonEnv::Static()->EikAppUi()); - appui->SetFs(aFs); + CPerlAppAppUi* cAppUi = + static_cast(CEikonEnv::Static()->EikAppUi()); + cAppUi->SetFs(aFs); if (aDoOpen) - appui->OpenFileL(aFileName); + cAppUi->OpenFileL(aFileName); return NULL; } diff --git a/symbian/PerlApp.h b/symbian/PerlApp.h index 12131a4585..43f61b60d5 100644 --- a/symbian/PerlApp.h +++ b/symbian/PerlApp.h @@ -5,30 +5,7 @@ #ifndef __PerlApp_h__ #define __PerlApp_h__ -#ifdef __SERIES60__ -# include -# include -# include -#endif /* #ifdef __SERIES60__ */ - -#ifdef __SERIES80__ -# include -# include -# include -# include -# include -# include -#endif /* #ifdef __SERIES60__ */ - -#ifdef __UIQ__ -# include -# include -# include -# include -#endif /* #ifdef __UIQ____ */ - -#include -#include +#include "PerlUi.h" /* The source code can be compiled into "PerlApp" which is the simple * launchpad application/demonstrator, or into "PerlAppMinimal", which @@ -58,34 +35,10 @@ # endif #endif -#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__ */ - -#ifdef __UIQ__ -# define CMyDocument CEikDocument -# define CMyApplication CQikApplication -# define CMyAppUi CQikAppUi -# define CMyNoteDialog CCknFlashingDialog -# define CMyAppView CCoeControl -#endif /* #ifdef __UIQ__ */ - -class CPerlAppDocument : public CMyDocument +class CPerlAppDocument : public CgPerlUiDocument { public: - CPerlAppDocument(CEikApplication& aApp):CMyDocument(aApp) {;} + CPerlAppDocument(CEikApplication& aApp) : CgPerlUiDocument(aApp) {;} #ifndef PerlAppMinimal CFileStore* OpenFileL(TBool aDoOpen, const TDesC& aFilename, RFs& aFs); #endif // #ifndef PerlAppMinimal @@ -93,67 +46,36 @@ class CPerlAppDocument : public CMyDocument CEikAppUi* CreateAppUiL(); }; -class CPerlAppApplication : public CMyApplication +class CPerlAppApplication : public CPerlUiApplication { private: CApaDocument* CreateDocumentL(); TUid AppDllUid() const; }; -const TUint KPerlAppPromptSize = 20; -const TUint KPerlAppOneLinerSize = 128; - -class CPerlAppView; +class CPerlAppAppView; -class CPerlAppUi : public CMyAppUi +class CPerlAppAppUi : public CPerlUiAppUi { public: - void ConstructL(); - ~CPerlAppUi(); TBool ProcessCommandParametersL(TApaCommand aCommand, TFileName& aDocumentName, const TDesC8& aTail); - void HandleCommandL(TInt aCommand); + void DoHandleCommandL(TInt aCommand); #ifndef PerlAppMinimal void OpenFileL(const TDesC& aFileName); void InstallOrRunL(const TFileName& aFileName); void SetFs(const RFs& aFs); #endif // #ifndef PerlAppMinimal - TBuf iOneLiner; // Perl source code to evaluate. - CPerlAppView* iAppView; + ~CPerlAppAppUi(); private: RFs* iFs; }; -class CPerlAppView : public CMyAppView +class CPerlAppAppView : public CPerlUiAppView { public: - static CPerlAppView* NewL(const TRect& aRect); - static CPerlAppView* NewLC(const TRect& aRect); - ~CPerlAppView(); - void Draw(const TRect& aRect) const; #if defined(__SERIES80__) || defined(__UIQ__) void HandleCommandL(TInt aCommand); #endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ - private: - void ConstructL(const TRect& aRect); }; -#if defined(__SERIES80__) || defined(__UIQ__) - -class CPerlAppTextQueryDialog : public CEikDialog -{ - public: - CPerlAppTextQueryDialog(HBufC*& aBuffer); - /* TODO: OfferKeyEventL() so that newline can be seen as 'OK'. */ - HBufC*& iData; - TPtrC iTitle; // used in S80 but not in S60 - TPtrC iPrompt; // used in S60 and S80 - TInt iMaxLength; - protected: - void PreLayoutDynInitL(); - private: - TBool OkToExitL(TInt aKeycode); -}; - -#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ - #endif // __PerlApp_h__ diff --git a/symbian/PerlApp.hrh b/symbian/PerlApp.hrh index b3969c59be..fd37a96a37 100644 --- a/symbian/PerlApp.hrh +++ b/symbian/PerlApp.hrh @@ -5,7 +5,7 @@ #ifndef __PerlApp_HRH__ #define __PerlApp_HRH__ -enum TPerlIds +enum TPerlAppIds { EPerlAppCommandAbout = 1024, // start value must not be 0 EPerlAppCommandTime = 1025, @@ -13,7 +13,6 @@ enum TPerlIds EPerlAppCommandOneLiner = 1027, EPerlAppCommandCopyright = 1028, EPerlAppCommandAboutCopyright = 1029, - EPerlAppTextQueryInputField = 1030, EPerlAppLast = 1099 // no comma here }; diff --git a/symbian/PerlAppS60.rss b/symbian/PerlAppS60.rss deleted file mode 100644 index c352c528db..0000000000 --- a/symbian/PerlAppS60.rss +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ - -/* The PerlApp application is licensed under the same terms as Perl itself. */ - -NAME PERL - -#include -#include -#include - -#include "PerlApp.hrh" - -RESOURCE RSS_SIGNATURE -{ -} - -RESOURCE TBUF r_default_document_name -{ - buf = ""; -} - -RESOURCE EIK_APP_INFO -{ - menubar = r_Perl_menubar; - cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; -} - - -RESOURCE MENU_BAR r_Perl_menubar -{ - titles = { - MENU_TITLE - { - menu_pane = r_Perl_menu; - } - }; -} - - -RESOURCE MENU_PANE r_Perl_menu -{ - items = { - MENU_ITEM { - command = EPerlAppCommandAbout; - txt = "About"; - }, - MENU_ITEM { - command = EPerlAppCommandTime; - txt = "Time"; - }, - MENU_ITEM { - command = EPerlAppCommandRunFile; - txt = "Run"; - }, - MENU_ITEM { - command = EPerlAppCommandOneLiner; - txt = "Oneliner"; - }, - MENU_ITEM { - command = EPerlAppCommandCopyright; - txt = "Copyright"; - } - }; -} - -RESOURCE DIALOG r_ok_cancel_dialog -{ - flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL; - items = { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVKON_NOTE - { - layout = EGeneralLayout; - }; - } - }; -} - -RESOURCE DIALOG r_yes_no_dialog -{ - flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVKON_NOTE - { - layout = EGeneralLayout; - }; - } - }; -} - -RESOURCE DIALOG r_text_query_dialog -{ - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL; - items = { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_DATA_QUERY - { - layout = EDataLayout; - control = EDWIN {}; - }; - } - }; -} - -RESOURCE AVKON_LIST_QUERY r_list_query_dialog -{ - flags = EGeneralQueryFlags; - softkeys = R_AVKON_SOFTKEYS_OK_CANCEL; - items = { - DLG_LINE - { - type = EAknCtListQueryControl; - id = EListQueryControl; - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSinglePopupMenuListBox; - }; - } - }; -} - -#include -#include - -RESOURCE MEMORYSELECTIONDIALOG r_memory_selection_dialog -{ -} - diff --git a/symbian/PerlAppS80.rss b/symbian/PerlAppS80.rss deleted file mode 100644 index 4f892cb618..0000000000 --- a/symbian/PerlAppS80.rss +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ - -/* The PerlApp application is licensed under the same terms as Perl itself. */ - -NAME PERL - -#include -#include - -#include "PerlApp.hrh" - -RESOURCE RSS_SIGNATURE -{ -} - -RESOURCE TBUF r_default_document_name -{ - buf = ""; -} - -RESOURCE EIK_APP_INFO -{ - menubar = r_Perl_menubar; - cba = r_Perl_cba; -} - -RESOURCE CBA r_Perl_cba -{ - buttons = { - CBA_BUTTON { id = EPerlAppCommandRunFile; txt = "Run"; }, - CBA_BUTTON { id = EPerlAppCommandOneLiner; txt = "Oneliner"; }, - CBA_BUTTON { id = EPerlAppCommandAboutCopyright; txt = "About"; }, - CBA_BUTTON { id = EEikCmdExit; txt = "Exit"; } - }; -} - - -RESOURCE MENU_BAR r_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; - }; - } - }; -} - diff --git a/symbian/PerlAppUIQ.rss b/symbian/PerlAppUIQ.rss deleted file mode 100644 index 6e07312f26..0000000000 --- a/symbian/PerlAppUIQ.rss +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ - -/* The PerlApp application is licensed under the same terms as Perl itself. */ - -NAME PERL - -#include -#include -#include - -#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"; }; - } - }; -} - - - diff --git a/symbian/PerlBase.h b/symbian/PerlBase.h index f6765fbed2..a2dbcf6212 100644 --- a/symbian/PerlBase.h +++ b/symbian/PerlBase.h @@ -47,7 +47,7 @@ class CPerlBase : public CBase public: CPerlBase(); IMPORT_C virtual ~CPerlBase(); - IMPORT_C static CPerlBase* NewInterpreterL(TBool iCloseStdlib = ETrue, + IMPORT_C static CPerlBase* NewInterpreterL(TBool aCloseStdlib = ETrue, void (*aStdioInitFunc)(void*) = NULL, void *aStdioInitCookie = NULL); IMPORT_C static CPerlBase* NewInterpreterLC(TBool iCloseStdlib = ETrue, @@ -84,7 +84,6 @@ class CPerlBase : public CBase TPerlState iState; private: - void ConstructL(); CConsoleBase* iConsole; /* The screen. */ TUint16* iConsoleBuffer; /* The UTF-16 characters. */ @@ -114,5 +113,12 @@ class CPerlBase : public CBase #define PerlCopyD(s,d,n,t) (MEM_WRAP_CHECK(n,t), memcpy((char*)(d),(char*)(s), (n) * sizeof(t))) #define PerlNew(x,v,n,t) (v = (MEM_WRAP_CHECK(n,t), (t*)safemalloc((MEM_SIZE)((n)*sizeof(t))))) +// This is like the Symbian _LIT() but without the embedded L prefix, +// which enables using #defined constants (which need to carry their +// own L prefix). +#ifndef _LIT_NO_L +# define _LIT_NO_L(n, s) static const TLitC n={sizeof(s)/2-1,s} +#endif // #ifndef _LIT_NO_L + #endif /* #ifndef __PerlBase_h__ */ diff --git a/symbian/PerlUi.cpp b/symbian/PerlUi.cpp new file mode 100644 index 0000000000..384148b679 --- /dev/null +++ b/symbian/PerlUi.cpp @@ -0,0 +1,273 @@ +/* Copyright (c) 2005 Nokia. All rights reserved. */ + +/* The PerlUi class is licensed under the same terms as Perl itself. */ + +#include "PerlUi.h" + +#ifdef __SERIES60__ +# include +# include +# include +# ifndef __SERIES60_1X__ +# include +# endif +#endif /* #ifdef __SERIES60__ */ + +#ifdef __SERIES80__ +# include +# include +# include +# include +# include +# include +#endif /* #ifdef __SERIES80__ */ + +#ifdef __UIQ__ +# include +# include +# include +#endif /* #ifdef __UIQ__ */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "PerlUi.hrh" +#include "PerlUi.rsg" + +#ifdef __SERIES80__ +#include "Eikon.rsg" +#endif /* #ifdef __SERIES80__ */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include "PerlBase.h" +#include "PerlUtil.h" + +#define symbian_get_vars() Dll::Tls() // Not visible from perlXYZ.lib? + +_LIT(KDefaultScript, "default.pl"); + +EXPORT_C void CPerlUiAppUi::ConstructL() +{ + BaseConstructL(); + iAppView = CPerlUiAppView::NewL(ClientRect()); + AddToStackL(iAppView); + CEikonEnv::Static()->DisableExitChecks(ETrue); // Symbian FAQ-0577. +} + +EXPORT_C TBool CPerlUi::OkCancelDialogL(TDesC& aMessage) +{ +#ifdef __SERIES60__ + CAknNoteDialog* dlg = + new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone); + dlg->PrepareLC(R_PERLUI_OK_CANCEL_DIALOG); + dlg->SetTextL(aMessage); + return dlg->RunDlgLD() == EAknSoftkeyOk; +#endif /* #ifdef __SERIES60__ */ +#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_PERLUI_OK_CANCEL_DIALOG) == EEikBidOk; +#endif /* #ifdef __UIQ__ */ +} + +EXPORT_C TBool CPerlUi::YesNoDialogL(TDesC& aMessage) +{ +#ifdef __SERIES60__ + CAknNoteDialog* dlg = + new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone); + dlg->PrepareLC(R_PERLUI_YES_NO_DIALOG); + dlg->SetTextL(aMessage); + return dlg->RunDlgLD() == EAknSoftkeyOk; +#endif /* #ifdef __SERIES60__ */ +#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_PERLUI_YES_NO_DIALOG) == EEikBidOk; +#endif /* #ifdef __UIQ__ */ +} + +EXPORT_C void CPerlUi::InformationNoteL(TDesC& aMessage) +{ +#ifdef __SERIES60__ + CAknInformationNote* note = new (ELeave) CAknInformationNote; + note->ExecuteLD(aMessage); +#endif /* #ifdef __SERIES60__ */ +#if defined(__SERIES80__) || defined(__UIQ__) + CEikonEnv::Static()->InfoMsg(aMessage); +#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ +} + +EXPORT_C TInt CPerlUi::WarningNoteL(TDesC& aMessage) +{ +#ifdef __SERIES60__ + CAknWarningNote* note = new (ELeave) CAknWarningNote; + return note->ExecuteLD(aMessage); +#endif /* #ifdef __SERIES60__ */ +#if defined(__SERIES80__) || defined(__UIQ__) + CEikonEnv::Static()->AlertWin(aMessage); + return ETrue; +#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ +} + +#if defined(__SERIES80__) || defined(__UIQ__) + +CPerlUiTextQueryDialog::CPerlUiTextQueryDialog(HBufC*& aBuffer) : + iData(aBuffer) +{ +} + +TBool CPerlUiTextQueryDialog::OkToExitL(TInt /* aKeycode */) +{ + iData = static_cast(Control(EPerlUiTextQueryInputField))->GetTextInHBufL(); + return ETrue; +} + +void CPerlUiTextQueryDialog::PreLayoutDynInitL() +{ + SetTitleL(iTitle); + CEikLabel* promptLabel = ControlCaption(EPerlUiTextQueryInputField); + promptLabel->SetTextL(iPrompt); +} + +/* TODO: OfferKeyEventL() so that newline can be seen as 'OK'. + * Or a hotkey for the button? */ + +#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ + +EXPORT_C TBool CPerlUi::TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength) +{ +#ifdef __SERIES60__ + CAknTextQueryDialog* dlg = + new (ELeave) CAknTextQueryDialog(aData); + dlg->SetPromptL(aPrompt); + dlg->SetMaxLength(aMaxLength); + return dlg->ExecuteLD(R_PERLUI_TEXT_QUERY_DIALOG); +#endif /* #ifdef __SERIES60__ */ +#if defined(__SERIES80__) || defined(__UIQ__) + HBufC* data = NULL; + CPerlUiTextQueryDialog* dlg = + new (ELeave) CPerlUiTextQueryDialog(data); + dlg->iTitle.Set(aTitle); + dlg->iPrompt.Set(aPrompt); + dlg->iMaxLength = aMaxLength; + if (dlg->ExecuteLD(R_PERLUI_ONELINER_DIALOG)) { + aData.Copy(*data); + return ETrue; + } + return EFalse; +#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ +} + +EXPORT_C TBool CPerlUi::FileQueryDialogL(TDes& aFilename) +{ +#ifdef __SERIES60__ + return AknCommonDialogs::RunSelectDlgLD(aFilename, + R_PERLUI_FILE_SELECTION_DIALOG); +#endif /* #ifdef __SERIES60__ */ +#ifdef __SERIES80__ + if (CCknOpenFileDialog::RunDlgLD(aFilename, + CCknFileListDialogBase::EShowAllDrives + |CCknFileListDialogBase::EShowSystemFilesAndFolders + |CCknFileListDialogBase::EShowBothFilesAndFolders + )) { + TEntry aEntry; // Be paranoid and check that the file is there. + RFs aFs; + aFs.Connect(); + if (aFs.Entry(aFilename, aEntry) == KErrNone) + return ETrue; + else + CEikonEnv::Static()->InfoMsg(_L("File not found")); + } + return EFalse; +#endif /* #ifdef __SERIES80__ */ +#ifdef __UIQ__ + return EFalse; // No filesystem access in UIQ 2.x! +#endif /* #ifdef __UIQ__ */ +} + +#ifdef __SERIES60__ + +EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand) +{ + switch(aCommand) + { + case EEikCmdExit: + case EAknSoftkeyExit: + Exit(); + break; + default: + DoHandleCommandL(aCommand); + break; + } +} + +#endif /* #ifdef __SERIES60__ */ + +#if defined(__SERIES80__) || defined(__UIQ__) + +EXPORT_C void CPerlUiAppView::HandleCommandL(TInt aCommand, CPerlUiAppUi* aAppUi) { + aAppUi->DoHandleCommandL(aCommand); +} + +EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand) { + switch(aCommand) + { + case EEikCmdExit: + Exit(); + break; + default: + iAppView->HandleCommandL(aCommand, this); + break; + } +} + +#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ + +CPerlUiAppView* CPerlUiAppView::NewL(const TRect& aRect) +{ + CPerlUiAppView* self = CPerlUiAppView::NewLC(aRect); + CleanupStack::Pop(self); + return self; +} + +CPerlUiAppView* CPerlUiAppView::NewLC(const TRect& aRect) +{ + CPerlUiAppView* self = new (ELeave) CPerlUiAppView; + CleanupStack::PushL(self); + self->ConstructL(aRect); + return self; +} + +void CPerlUiAppView::ConstructL(const TRect& aRect) +{ + CreateWindowL(); + SetRect(aRect); + ActivateL(); +} + +CPerlUiAppView::~CPerlUiAppView() +{ +} + +void CPerlUiAppView::Draw(const TRect& /*aRect*/) const +{ + CWindowGc& gc = SystemGc(); + TRect rect = Rect(); + gc.Clear(rect); +} + diff --git a/symbian/PerlUi.h b/symbian/PerlUi.h new file mode 100644 index 0000000000..b6011c82da --- /dev/null +++ b/symbian/PerlUi.h @@ -0,0 +1,120 @@ +/* Copyright (c) 2005 Nokia. All rights reserved. */ + +/* The PerlUi class is licensed under the same terms as Perl itself. */ + +#ifndef __PerlUi_h__ +#define __PerlUi_h__ + +#ifdef __SERIES60__ +# include +# include +# include +#endif /* #ifdef __SERIES60__ */ + +#ifdef __SERIES80__ +# include +# include +# include +# include +# include +# include +#endif /* #ifdef __SERIES60__ */ + +#ifdef __UIQ__ +# include +# include +# include +# include +#endif /* #ifdef __UIQ____ */ + +#include +#include + +#ifdef __SERIES60__ +# define CgPerlUiDocument CAknDocument +# define CgPerlUiApplication CAknApplication +# define CgPerlUiAppUi CAknAppUi +# define CgPerlUiNoteDialog CAknNoteDialog +# define CgPerlUiAppView CCoeControl +#endif /* #ifdef __SERIES60__ */ + +#ifdef __SERIES80__ +# define CgPerlUiDocument CEikDocument +# define CgPerlUiApplication CEikApplication +# define CgPerlUiAppUi CEikAppUi +# define CgPerlUiNoteDialog CCknFlashingDialog +# define CgPerlUiAppView CEikBorderedControl +#endif /* #ifdef __SERIES60__ */ + +#ifdef __UIQ__ +# define CgPerlUiDocument CEikDocument +# define CgPerlUiApplication CQikApplication +# define CgPerlUiAppUi CQikAppUi +# define CgPerlUiNoteDialog CCknFlashingDialog +# define CgPerlUiAppView CCoeControl +#endif /* #ifdef __UIQ__ */ + +class CPerlUiApplication : public CgPerlUiApplication +{ +}; + +const TUint KPerlUiPromptSize = 20; +const TUint KPerlUiOneLinerSize = 128; + +class CPerlUiAppView; + +class CPerlUiAppUi : public CgPerlUiAppUi +{ + public: + IMPORT_C void ConstructL(); + void virtual DoHandleCommandL(TInt aCommand) = 0; + IMPORT_C void HandleCommandL(TInt aCommand); + TBuf iOneLiner; // Perl code to evaluate. + CPerlUiAppView* iAppView; +}; + +class CPerlUiAppView : public CgPerlUiAppView +{ + public: + static CPerlUiAppView* NewL(const TRect& aRect); + static CPerlUiAppView* NewLC(const TRect& aRect); + ~CPerlUiAppView(); + void Draw(const TRect& aRect) const; +#if defined(__SERIES80__) || defined(__UIQ__) + IMPORT_C void HandleCommandL(TInt aCommand, CPerlUiAppUi* aAppUi); +#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ + private: + void ConstructL(const TRect& aRect); +}; + +#if defined(__SERIES80__) || defined(__UIQ__) + +class CPerlUiTextQueryDialog : public CEikDialog +{ + public: + CPerlUiTextQueryDialog(HBufC*& aBuffer); + /* TODO: OfferKeyEventL() so that newline can be seen as 'OK'. */ + HBufC*& iData; + TPtrC iTitle; // used in S80 but not in S60 + TPtrC iPrompt; // used in S60 and S80 + TInt iMaxLength; + protected: + void PreLayoutDynInitL(); + private: + TBool OkToExitL(TInt aKeycode); +}; + +#endif /* #if defined(__SERIES80__) || defined(__UIQ__) */ + +class CPerlUi : public CgPerlUiAppUi +{ + public: + IMPORT_C static TBool OkCancelDialogL(TDesC& aMessage); + IMPORT_C static TBool YesNoDialogL(TDesC& aMessage); + IMPORT_C static void InformationNoteL(TDesC& aMessage); + IMPORT_C static TInt WarningNoteL(TDesC& aMessage); + IMPORT_C static TBool TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength); + IMPORT_C static TBool FileQueryDialogL(TDes& aFilename); +}; + +#endif // __PerlUi_h__ diff --git a/symbian/PerlUi.hrh b/symbian/PerlUi.hrh new file mode 100644 index 0000000000..edb657d9e2 --- /dev/null +++ b/symbian/PerlUi.hrh @@ -0,0 +1,14 @@ +/* Copyright (c) 2005 Nokia. All rights reserved. */ + +/* The PerlUi class is licensed under the same terms as Perl itself. */ + +#ifndef __PerlUi_HRH__ +#define __PerlUi_HRH__ + +enum TPerlUiIds +{ + EPerlUiTextQueryInputField = 2048, + EPerlUiLast = 2099 // no comma here +}; + +#endif // __PerlUi_HRH__ diff --git a/symbian/PerlUiS60.rss b/symbian/PerlUiS60.rss new file mode 100644 index 0000000000..757fb33740 --- /dev/null +++ b/symbian/PerlUiS60.rss @@ -0,0 +1,144 @@ +/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ + +/* The PerlUi class is licensed under the same terms as Perl itself. */ + +/* The S60 definitions. */ + +NAME PERL + +#include +#include +#include + +#include "PerlUi.hrh" +#include "PerlApp.hrh" + +RESOURCE RSS_SIGNATURE +{ +} + +RESOURCE TBUF r_default_document_name +{ + buf = ""; +} + +RESOURCE EIK_APP_INFO +{ + menubar = r_Perl_menubar; + cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; +} + + +RESOURCE MENU_BAR r_Perl_menubar +{ + titles = { + MENU_TITLE + { + menu_pane = r_Perl_menu; + } + }; +} + + +RESOURCE MENU_PANE r_Perl_menu +{ + items = { + MENU_ITEM { + command = EPerlAppCommandAbout; + txt = "About"; + }, + MENU_ITEM { + command = EPerlAppCommandTime; + txt = "Time"; + }, + MENU_ITEM { + command = EPerlAppCommandRunFile; + txt = "Run"; + }, + MENU_ITEM { + command = EPerlAppCommandOneLiner; + txt = "Oneliner"; + }, + MENU_ITEM { + command = EPerlAppCommandCopyright; + txt = "Copyright"; + } + }; +} + +RESOURCE DIALOG r_perlui_ok_cancel_dialog +{ + flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons; + buttons = R_AVKON_SOFTKEYS_OK_CANCEL; + items = { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralNote; + control = AVKON_NOTE + { + layout = EGeneralLayout; + }; + } + }; +} + +RESOURCE DIALOG r_perlui_yes_no_dialog +{ + flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons; + buttons = R_AVKON_SOFTKEYS_YES_NO; + items = { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralNote; + control = AVKON_NOTE + { + layout = EGeneralLayout; + }; + } + }; +} + +RESOURCE DIALOG r_perlui_text_query_dialog +{ + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_OK_CANCEL; + items = { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_DATA_QUERY + { + layout = EDataLayout; + control = EDWIN {}; + }; + } + }; +} + +RESOURCE AVKON_LIST_QUERY r_perlui_list_query_dialog +{ + flags = EGeneralQueryFlags; + softkeys = R_AVKON_SOFTKEYS_OK_CANCEL; + items = { + DLG_LINE + { + type = EAknCtListQueryControl; + id = EListQueryControl; + control = AVKON_LIST_QUERY_CONTROL + { + listtype = EAknCtSinglePopupMenuListBox; + }; + } + }; +} + +#include +#include + +RESOURCE MEMORYSELECTIONDIALOG r_perlui_file_selection_dialog +{ +} + diff --git a/symbian/PerlUiS80.rss b/symbian/PerlUiS80.rss new file mode 100644 index 0000000000..8028311f35 --- /dev/null +++ b/symbian/PerlUiS80.rss @@ -0,0 +1,95 @@ +/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ + +/* The PerlUi class is licensed under the same terms as Perl itself. */ + +/* The S80 definitions. */ + +NAME PERL + +#include +#include + +#include "PerlUi.hrh" +#include "PerlApp.hrh" + +RESOURCE RSS_SIGNATURE +{ +} + +RESOURCE TBUF r_default_document_name +{ + buf = ""; +} + +RESOURCE EIK_APP_INFO +{ + menubar = r_perlui_menubar; + cba = r_perlui_cba; +} + +RESOURCE CBA r_perlui_cba +{ + buttons = { + CBA_BUTTON { id = EPerlAppCommandRunFile; txt = "Run"; }, + CBA_BUTTON { id = EPerlAppCommandOneLiner; txt = "Oneliner"; }, + CBA_BUTTON { id = EPerlAppCommandAboutCopyright; txt = "About"; }, + CBA_BUTTON { id = EEikCmdExit; txt = "Exit"; } + }; +} + + +RESOURCE MENU_BAR r_perlui_menubar +{ + titles = { + MENU_TITLE + { + menu_pane = r_perlui_menu; txt = "Options"; + } + }; +} + + +RESOURCE MENU_PANE r_perlui_menu +{ + items = { + MENU_ITEM { + command = EPerlAppCommandAbout; + txt = "About"; + }, + MENU_ITEM { + command = EPerlAppCommandTime; + txt = "Time"; + }, + MENU_ITEM { + command = EPerlAppCommandRunFile; + txt = "Run"; + }, + MENU_ITEM { + command = EPerlAppCommandOneLiner; + txt = "Oneliner"; + }, + MENU_ITEM { + command = EPerlAppCommandCopyright; + txt = "Copyright"; + } + }; +} + +RESOURCE DIALOG r_perlui_oneliner_dialog +{ + title = "Title"; + buttons = R_EIK_BUTTONS_CANCEL_OK; + flags = EEikDialogFlagWait; + items = { + DLG_LINE { + type = EEikCtEdwin; + prompt = "Prompt"; + id = EPerlUiTextQueryInputField; + control = EDWIN { + width = 10; + maxlength = 128; + }; + } + }; +} + diff --git a/symbian/PerlUiUIQ.rss b/symbian/PerlUiUIQ.rss new file mode 100644 index 0000000000..55362a99f7 --- /dev/null +++ b/symbian/PerlUiUIQ.rss @@ -0,0 +1,124 @@ +/* Copyright (c) 200-2005 Nokia. All rights reserved. */ + +/* The PerlUi class is licensed under the same terms as Perl itself. */ + +/* The UIQ definitions. */ + +NAME PERL + +#include +#include +#include + +#include "PerlUi.hrh" +#include "PerlApp.hrh" + +RESOURCE RSS_SIGNATURE +{ +} + +RESOURCE TBUF r_default_document_name +{ + buf = ""; +} + +RESOURCE EIK_APP_INFO +{ + menubar = r_perlui_menubar; + toolbar = r_perlui_menubar; +} + + +RESOURCE MENU_BAR r_perlui_menubar +{ + titles = { + MENU_TITLE + { + menu_pane = r_perlui_menu; txt = "Options"; + } + }; +} + + +RESOURCE MENU_PANE r_perlui_menu +{ + items = { + MENU_ITEM { + command = EPerlAppCommandAbout; + txt = "About"; + }, + MENU_ITEM { + command = EPerlAppCommandTime; + txt = "Time"; + }, + MENU_ITEM { + command = EPerlAppCommandOneLiner; + txt = "Oneliner"; + }, + MENU_ITEM { + command = EPerlAppCommandCopyright; + txt = "Copyright"; + } + }; +} + +RESOURCE DIALOG r_perlui_oneliner_dialog +{ + title = "Title"; + buttons = R_EIK_BUTTONS_CANCEL_OK; + flags = EEikDialogFlagWait; + items = { + DLG_LINE { + type = EEikCtEdwin; + prompt = "Prompt"; + id = EPerlUiTextQueryInputField; + control = EDWIN { + width = 10; + maxlength = 128; + }; + } + }; +} + +RESOURCE DIALOG r_perlui_ok_cancel_dialog +{ + title = "OK / Cancel ?"; + buttons = r_perlui_ok_cancel_buttons; +} + +RESOURCE DLG_BUTTONS r_perlui_ok_cancel_buttons +{ + buttons = { + DLG_BUTTON { + id = EEikBidOk; + button = CMBUT { txt = "Ok"; }; + }, + DLG_BUTTON { + id = EEikBidCancel; + button = CMBUT { txt = "Cancel"; }; + } + }; +} + +RESOURCE DIALOG r_perlui_yes_no_dialog +{ + title = "Yes / No ?"; + buttons = r_perlui_yes_no_buttons; +} + +RESOURCE DLG_BUTTONS r_perlui_yes_no_buttons +{ + buttons = { + DLG_BUTTON { + id = EEikBidOk; + button = CMBUT { txt = "Yes"; }; + }, + DLG_BUTTON { + id = EEikBidCancel; + button = CMBUT { txt = "No"; }; + } + }; +} + + + diff --git a/symbian/TODO b/symbian/TODO index 52436da659..f2ed38d94a 100644 --- a/symbian/TODO +++ b/symbian/TODO @@ -45,8 +45,6 @@ - in S60 1.2 (at least in 3650 Nokia 3650 v3.11) setjmp/longjmp is fragile (see Symbian FAQ-0929), intensive debugging and fix needed -- in S60 2.6 (at least in Nokia 6630 v4.03.11) launching scripts via - FExplorer does not open up the console =head2 Unicode @@ -62,10 +60,13 @@ =head2 Build - make xsbuild.pl much more robust (for building external extensions) + (see symbian\ext\README and symbian\ext\Moped\Msg\README) +- now the .mmp functions both as input and as output - bad - MakeMaker? Pure PM, PM + XS? - currently the PerlApp UID is in both config.pl (hardwired) and in makesis.pl (computed), this is quite error prone -- Enable building also under Cygwin? +- Enable building also under Cygwin? (could be really hard, + the Symbian SDKs pretty much assume cmd.exe) =head1 PACKAGING @@ -85,28 +86,52 @@ =head1 PerlApp - In "Run" see how one could show also the file extensions. -- when autostarting also offer to display the file (via Notes?) - instead of installing/running it? -- Allow passing command line options to scripts being run? -- Add "OneLiner" menu item? (-e, -M) (requires a UI form) -- Terminate/Pause menu entries? +- How to allow passing command line options to scripts being run? +- Terminate/Pause menu entries (to be used while the script is running)? - review for proper Symbian coding practices -=head1 CORE LIBRARIES +=head2 All UIs -- Fix Devel::PPPort (worth it?) (Note that there is D::PPP 3.x out by now) -- Fix Encode to not to have writeable data: seems to be tricky indeed - because of copious global non-const data. -- Verify that the modified File::Spec::Win32 does work in Symbian. - (File::Spec::Epoc does not seem to be relevant?) -- What does Cwd really do since the concept of cwd is a bit fuzzy in Symbian. -- What should Sys::Hostname return? GPRS? BT? WLAN? -- ByteLoader problem: byterun.c does not see VERSION and XS_VERSION. -- POSIX problem: STDLIB POSIX is not that POSIX. +- Make it possible to call UI elements (or any other Symbianic + asynchronous services) from Perl. -=head1 REGRESSION SUITE + There is now a sample of enabling calling CPerlUi::TextQueryDialogL() + from Perl as PerlApp::TextQuery(), see symbian_utils.c. This, however, + does not work: calling the dialog code blocks so that the screen is not + redrawn at all. Perl should do both: "yield" so that the GUI framework + can redraw, but in the meanwhile Perl should wait for the completion + (OK or Cancel) of the dialog. Welcome to the wonderful world of cooperative + multitasking. The right solution surely involves Active Objects. + The problem may require having a different Perl op dispatch + loop than the standard ones in run.c and debug.c. -- how to run the standard test suite on a Symbian device? +- menu/toolbar support +- selection lists (single cf multi cf radio) +- on/off (special case of two-item radio selection list) +- forms (multicontrols) +- "secret editor" (special case of text query) + +=head2 Series 60 + +- in S60 2.6 (at least in Nokia 6630 v4.03.11) launching scripts via + FExplorer does not open up the console + +=head2 Series 80 + +- On exit "PerlApp" gets Symbian USER Panic 44: "This panic is raised + by the Free() and FreeZ() member functions of an RHeap. It is caused + when the cell being freed overlaps the next cell on the free list + (i.e. the first cell on the free list with an address higher than the + one being freed)." Reason unknown. +- Hotkey Newline so that it functions as 'OK' in dialogs + +=head2 UIQ + +- UIQ 3.0? UIQ 2.0? (now only tried in UIQ 2.1) +- UIQ, at least UIQ 2.1, does not have "file select dialogs" since + "files" are supposed to be hidden from the user. Therefore, no + "Run" in PerlApp. (For similar stylistic reasons there is no "Exit".) +- Long notes (e.g. the EPerlAppCommandAbout) are shown badly truncated. =head1 CPAN LIBRARIES @@ -115,7 +140,7 @@ all of it, even after pm-stripping): - libnet - Bundle::CPAN - - Archive::Tar + - Archive::Tar (now included in 5.9.x) - Term::ReadKey (useless?) - Term::ReadLine (useless?) - Bundle::LWP @@ -137,11 +162,34 @@ - DBD::SQLite? (sqlite?) - SOAP? XML-RPC? +=head1 CORE LIBRARIES + +- Fix Devel::PPPort (worth it?) (Note that there is D::PPP 3.x out by now) +- Fix Encode to not to have writeable data: seems to be tricky indeed + because of copious global non-const data. +- Verify that the modified File::Spec::Win32 does work in Symbian. + (File::Spec::Epoc does not seem to be relevant?) +- What does Cwd really do since the concept of cwd is a bit fuzzy in Symbian. +- What should Sys::Hostname return? GPRS? BT? WLAN? +- ByteLoader problem: byterun.c does not see VERSION and XS_VERSION. +- POSIX problem: STDLIB POSIX is not that POSIX. + +=head1 REGRESSION SUITE + +- how to run the standard test suite on a Symbian device? + =head1 FUTURE POSSIBILITIES +- GUI support (problematic that the MVC model enforces an "application") + (name suggestion: Moped::Gui) + (see above for the need of sorting out the Active Objectedness) +- Messaging support (sms:, mms:, mailto:, irdaobex:, btobex:, + cell location, WLAN) + (name suggestion: Moped::Msg) +- PDA support (address book) + (name suggestion: Moped::Msg) +- Device support (memory, camera) + (name suggestion: Moped::Dev) - Remote console (Bluetooth/IR) -- S60 GUI support -- S60 PDA support -- Phone APIs -- S80 -- UIQ +- Phone APIs (how to catch an incoming call: BIO messaging) + diff --git a/symbian/config.pl b/symbian/config.pl index eb479092f0..e21b35754c 100644 --- a/symbian/config.pl +++ b/symbian/config.pl @@ -113,6 +113,9 @@ SYSTEMINCLUDE \\epoc32\\include\\libc SYSTEMINCLUDE \\epoc32\\include LIBRARY euser.lib LIBRARY estlib.lib +LIBRARY eikcore.lib +LIBRARY cone.lib +LIBRARY efsrv.lib __EOF__ if ( $miniperl || $perl || $type eq 'dll' ) { print $fh <<__EOF__; @@ -126,6 +129,28 @@ __EOF__ LIBRARY commonengine.lib __EOF__ } + if (defined $S60SDK) { + print $fh <<__EOF__; +LIBRARY avkon.lib +LIBRARY commondialogs.lib +__EOF__ + } + if (defined $S80SDK) { + print $fh <<__EOF__; +LIBRARY eikctl.lib +LIBRARY eikcoctl.lib +LIBRARY eikdlg.lib +LIBRARY ckndlg.lib +__EOF__ + } + if (defined $UIQSDK) { + print $fh <<__EOF__; +LIBRARY eikctl.lib +LIBRARY eikcoctl.lib +LIBRARY eikdlg.lib +LIBRARY qikctl.lib +__EOF__ + } if ( $type eq 'exe' ) { print $fh <<__EOF__; STATICLIBRARY ecrt0.lib @@ -150,6 +175,7 @@ __EOF__ print $fh <<__EOF__; MACRO PERL_GLOBAL_STRUCT MACRO PERL_GLOBAL_STRUCT_PRIVATE +RESOURCE symbian\\PerlUi.rss __EOF__ } close $fh; @@ -219,7 +245,7 @@ sub create_config_h { __EOF__ while () { last if /!GROK!THIS/; - s/\$(\w+)/exists $config{$1} ? $config{$1} : ""/eg; + s/\$(\w+)/exists $config{$1} ? $config{$1} : (warn "$0: config.sh missing '$1'\n", "")/eg; s/^#undef\s+(\S+).+/#undef $1/g; s:\Q/**/::; print CONFIG_H; @@ -355,13 +381,16 @@ create_mmp( 'miniperl', 'exe', 'miniperlmain.c', 'symbian\symbian_stubs.c', 'symbian\PerlBase.cpp', + 'symbian\PerlUi.cpp', 'symbian\PerlUtil.cpp', 'symbian\symbian_utils.cpp', ); create_mmp( "perl", 'exe', 'perlmain.c', 'symbian\symbian_stubs.c', - 'symbian\symbian_utils.cpp', 'symbian\PerlBase.cpp', + 'symbian\symbian_utils.cpp', + 'symbian\PerlBase.cpp', + 'symbian\PerlUi.cpp', 'symbian\PerlUtil.cpp', 'ext\DynaLoader\DynaLoader.cpp', ); @@ -369,7 +398,9 @@ create_mmp( create_mmp( "perl$VERSION", 'dll', 'symbian\symbian_dll.cpp', 'symbian\symbian_stubs.c', - 'symbian\symbian_utils.cpp', 'symbian\PerlBase.cpp', + 'symbian\symbian_utils.cpp', + 'symbian\PerlBase.cpp', + 'symbian\PerlUi.cpp', 'symbian\PerlUtil.cpp', 'ext\DynaLoader\DynaLoader.cpp', ); @@ -384,6 +415,8 @@ create_PerlApp_pkg(); if ( open( PERLAPP_MMP, ">symbian/PerlApp.mmp" ) ) { my @MACRO; my @LIB; + push @MACRO, 'PERL_IMPLICIT_CONTEXT'; + push @MACRO, 'MULTIPLICITY'; if (defined $S60SDK) { push @MACRO, '__SERIES60__'; push @MACRO, '__SERIES60_1X__' if $S60SDK =~ /^1\./; @@ -428,8 +461,6 @@ EXPORTUNFROZEN SOURCEPATH . SOURCE PerlApp.cpp -RESOURCE PerlApp.rss - USERINCLUDE . USERINCLUDE .. USERINCLUDE \\symbian\\perl\\$R_V_SV\\include @@ -440,14 +471,14 @@ SYSTEMINCLUDE \\epoc32\\include\\libc LIBRARY apparc.lib LIBRARY bafl.lib LIBRARY charconv.lib -LIBRARY cone.lib +LIBRARY cone.lib LIBRARY efsrv.lib -LIBRARY eikcore.lib +LIBRARY eikcore.lib LIBRARY estlib.lib LIBRARY euser.lib LIBRARY perl$VERSION.lib @LIB - +RESOURCE perlapp.rss __EOF__ if (@MACRO) { for my $macro (@MACRO) { @@ -474,6 +505,7 @@ if ( open( MAKEFILE, ">Makefile" ) ) { my $windef2 = "..\\BWINS\\${perl}u.def"; my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$ARM\\$perl.def"; my $armdef2 = "..\\BMARM\\${perl}u.def"; + my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN"; print "\tMakefile\n"; print MAKEFILE <<__EOF__; help: @@ -492,30 +524,30 @@ 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 perldll_${WIN} -build_vc6: abld.bat ${WIN}_perl.mf ${WIN}_miniperl.mf ${WIN}_${VERSION}.mf vc6.mf perldll_wins +build_vc6: abld.bat perldll_wins -build_vc7: abld.bat ${WIN}_perl.mf ${WIN}_miniperl.mf ${WIN}_${VERSION}.mf vc7.mf perldll_wins +build_vc7: abld.bat perldll_wins -build_cw: abld.bat ${WIN}_perl.mf ${WIN}_miniperl.mf ${WIN}_${VERSION}.mf cw.mf perldll_winscw +build_cw: abld.bat perldll_winscw -build_arm: abld.bat perl_arm miniperl_arm arm_${VERSION}.mf perldll_arm +build_arm: abld.bat perl_arm miniperl_arm perldll_arm -miniperl_win miniperl_${WIN}: miniperl.mmp abld.bat ${WIN}_miniperl.mf rename_makedef +miniperl_win miniperl_${WIN}: miniperl.mmp abld.bat rename_makedef abld build ${WIN} udeb miniperl -miniperl_arm: miniperl.mmp abld.bat arm_miniperl.mf rename_makedef +miniperl_arm: miniperl.mmp abld.bat rename_makedef abld build \$(ARM) $UARM miniperl miniperl: miniperl_${WIN} miniperl_arm perl: perl_${WIN} perl_arm -perl_win perl_${WIN}: perl.mmp abld.bat ${WIN}_perl.mf rename_makedef +perl_win perl_${WIN}: perl.mmp abld.bat rename_makedef abld build ${WIN} perl -perl_arm: perl.mmp abld.bat arm_perl.mf rename_makedef +perl_arm: perl.mmp abld.bat rename_makedef abld build \$(ARM) $UARM perl perldll_win perldll_${WIN}: perl${VERSION}_${WIN} freeze_${WIN} perl${VERSION}_${WIN} @@ -525,7 +557,7 @@ perl${VERSION}_win perl${VERSION}_${WIN}: perl$VERSION.mmp abld.bat rename_maked perldll_arm: perl${VERSION}_arm freeze_arm perl${VERSION}_arm -perl${VERSION}_arm: perl$VERSION.mmp arm_${VERSION}.mf abld.bat rename_makedef +perl${VERSION}_arm: perl$VERSION.mmp abld.bat rename_makedef abld build \$(ARM) $UARM perl$VERSION perldll perl$VERSION: perldll_${WIN} perldll_arm @@ -542,10 +574,11 @@ rename_makedef: rerename_makedef: -ren nomakedef.pl makedef.pl -abld.bat abld: bld.inf - bldmake bldfiles +symbian\\PerlUi.rss: symbian\\PerlUi$SDK_VARIANT.rss + copy symbian\\PerlUi$SDK_VARIANT.rss symbian\\PerlUi.rss -makefiles: win.mf arm.mf vc6 vc7.mf cw.mf +abld.bat abld: bld.inf symbian\\PerlUi.rss + bldmake bldfiles vc6: win.mf vc6.mf build_vc6 @@ -554,15 +587,15 @@ vc7: win.mf vc7.mf build_vc7 cw: win.mf cw.mf build_cw ${WIN}_miniperl.mf: abld.bat symbian\\config.pl - abld makefile ${WIN} miniperl + abld makefile ${MF} miniperl echo > ${WIN}_miniperl.mf ${WIN}_perl.mf: abld.bat symbian\\config.pl - abld makefile ${WIN} perl + abld makefile ${MF} perl echo > ${WIN}_perl.mf ${WIN}_${VERSION}.mf: abld.bat symbian\\config.pl - abld makefile ${WIN} perl${VERSION} + abld makefile ${MF} perl${VERSION} echo > ${WIN}_${VERSION}.mf symbian\\${WIN}.mf: @@ -571,15 +604,12 @@ symbian\\${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 echo > arm_miniperl.mf arm_perl.mf: abld.bat symbian\\config.pl - abld makefile \$(ARM) perl echo > arm_perl.mf arm_${VERSION}.mf: abld.bat symbian\\config.pl - abld makefile \$(ARM) perl${VERSION} echo > arm_${VERSION}.mf arm.mf: arm_miniperl.mf arm_perl.mf arm_${VERSION}.mf @@ -694,6 +724,7 @@ sdkinstall: copy /y symbian\\xsbuild.pl \$(APIDIR)\\bin copy /y symbian\\sisify.pl \$(APIDIR)\\bin copy /y symbian\\PerlBase.h \$(APIDIR)\\include + copy /y symbian\\PerlUi.h \$(APIDIR)\\include copy /y symbian\\PerlUtil.h \$(APIDIR)\\include copy /y symbian\\symbian*.h \$(APIDIR)\\include\\symbian copy /y symbian\\PerlBase.pod \$(APIDIR)\\pod @@ -782,8 +813,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 /f symbian\\PerlApp.rss -del arm_*.mf ${WIN}_*.mf vc*.mf cw*.mf + -del symbian\\PerlUi.rss -del perlappmin.hex perlrscmin.hex -perl symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT) -rmdir /s /q perl${VERSION}_Data @@ -813,29 +844,32 @@ if ( open( MAKEFILE, ">symbian/Makefile")) { my $wrap = defined $S60SDK && $S60SDK eq '1.2' && $WIN ne '${WIN}cw'; my $ABLD = $wrap ? 'perl b.pl': 'abld'; print "\tsymbian/Makefile\n"; + my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN"; print MAKEFILE <<__EOF__; WIN = $WIN ARM = $ARM ABLD = $ABLD +MF = $MF abld.bat: bldmake bldfiles perlapp_${WIN}: abld.bat ..\\config.h PerlApp.h PerlApp.cpp + copy PerlUi$SDK_VARIANT.rss PerlApp.rss bldmake bldfiles - copy PerlApp$SDK_VARIANT.rss PerlApp.rss \$(ABLD) build ${WIN} udeb perlapp_arm: ..\\config.h PerlApp.h PerlApp.cpp + copy PerlUi$SDK_VARIANT.rss PerlApp.rss bldmake bldfiles - copy PerlApp$SDK_VARIANT.rss PerlApp.rss \$(ABLD) build ${ARM} $UARM +$MF: + abld makefile $MF + win.mf: bldmake bldfiles - abld makefile vc6 - abld makefile vc7 - abld makefile cw_ide + abld makefile $MF perlapp_demo_extract: perl demo_pl extract @@ -849,6 +883,7 @@ clean: -perl demo_pl cleanup -del /f perlapp.sis -del /f b.pl + -del PerlApp.rss abld clean $WIN abld clean thumb diff --git a/symbian/config.sh b/symbian/config.sh index 0d129892b6..725d0248c2 100644 --- a/symbian/config.sh +++ b/symbian/config.sh @@ -6,6 +6,7 @@ afs='false' afsroot='/afs' alignbytes='4' apiversion='5.005' +aphostname='localhost' ar=':' archlib='\\system\\libs\\perl\\x.y.z\\thumb-symbian' archlibexp='\\system\\libs\\perl\\x.y.z\\thumb-symbian' @@ -22,6 +23,7 @@ ccdlflags='' charsize='1' clocktype='clock_t' cpp_stuff='42' +cpplast='' cppminus='-' cpprun='gcc -E' cppstdin='gcc -E' @@ -140,6 +142,8 @@ d_fstatvfs='undef' d_fsync='undef' d_ftello='undef' d_ftime='undef' +d_futimes='undef' +d_futimesat='undef' d_getcwd='define' d_getespwnam='undef' d_getfsstat='undef' @@ -217,6 +221,7 @@ d_ldbl_dig='undef' d_libm_lib_version='undef' d_link='undef' d_localtime_r='undef' +d_localtime_r_needs_tzset='undef' d_locconv='undef' d_lockf='undef' d_longdbl='undef' @@ -447,6 +452,9 @@ d_writev='undef' d_xenix='undef' db_hashtype='u_int32_t' db_prefixtype='size_t' +db_version_major='0' +db_version_minor='0' +db_version_patch='0' defvoidused=1 direntrytype='struct dirent' dlext='dll' @@ -471,6 +479,8 @@ fpossize='4' fpostype=fpos_t freetype=void full_ar=':' +full_csh=':' +full_sed=':' getgrent_r_proto='0' getgrgid_r_proto='0' getgrnam_r_proto='0' @@ -618,6 +628,7 @@ lseektype=int make='make' malloctype='int*' malloctype='void *' +mmaptype='void *' modetype='mode_t' modetype=int multiarch='undef' @@ -643,6 +654,7 @@ orderlib='false' osname='symbian' osvers='7.0s' otherlibdirs='' +package='' path_sep=';'; phostname='hostname' pidtype='int' @@ -690,6 +702,7 @@ setprotoent_r_proto='0' setpwent_r_proto='0' setservent_r_proto='0' shmattype='void *' +sh=':' shortsize=2 sig_name_init='0' sig_num_init='0' @@ -709,6 +722,7 @@ socksizetype='unsigned int' srand48_r_proto='0' srandom_r_proto='0' ssizetype=int +startperl='' stdchar=char stdio_base='((fp)->_IO_read_base)' stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' diff --git a/symbian/ext/Moped/Msg/Msg.mmp b/symbian/ext/Moped/Msg/Msg.mmp new file mode 100644 index 0000000000..7736d2ab57 --- /dev/null +++ b/symbian/ext/Moped/Msg/Msg.mmp @@ -0,0 +1 @@ +LIBRARY etel.lib gsmbas.lib diff --git a/symbian/ext/Moped/Msg/Msg.pkg b/symbian/ext/Moped/Msg/Msg.pkg new file mode 100644 index 0000000000..eb7aed02f5 --- /dev/null +++ b/symbian/ext/Moped/Msg/Msg.pkg @@ -0,0 +1,16 @@ +; MoDev::Msg installation script +; +; The supported languages +&EN; +; +; The installation name and header data +; +#{"MoDev::Msg"},(0x0FFFFFFF),0,1,0 +; +; Platform supported is Series 60 +; +(0x101F6F88), 0, 0, 0, {"Series60ProductID"} +; The files to install +; +"Msg.pm"-"!:\System\Libs\Perl\5.9.3\MoDev\Msg.pm" +"\epoc32\release\thumb\urel\Msg.dll"-"!:\System\Libs\Perl\5.9.3\thumb-symbian\Msg.dll" diff --git a/symbian/ext/Moped/Msg/Msg.pm b/symbian/ext/Moped/Msg/Msg.pm new file mode 100644 index 0000000000..e1aaef8344 --- /dev/null +++ b/symbian/ext/Moped/Msg/Msg.pm @@ -0,0 +1,9 @@ +package Moped::Msg; +use strict; +use vars qw(@ISA $VERSION); +require DynaLoader; +@ISA = qw(DynaLoader); +$VERSION = '0.01'; +bootstrap Moped::Msg; +1; + diff --git a/symbian/ext/Moped/Msg/Msg.xs b/symbian/ext/Moped/Msg/Msg.xs new file mode 100644 index 0000000000..ae47e0a556 --- /dev/null +++ b/symbian/ext/Moped/Msg/Msg.xs @@ -0,0 +1,51 @@ +#include +#include + +#include "etelbgsm.h" // From Symbian 6.1 SDK (the Communicator SDK) + +#ifdef __cplusplus +extern "C" { +#endif +#include "PerlBase.h" +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#ifdef __cplusplus +} +#endif + +_LIT(KTsyName, "phonetsy.tsy"); + +#define XS_SYMBIAN_OR_EMPTY(e, c) errno = (e) = (c); if ((e) != KErrNone) XSRETURN_EMPTY + +MODULE = Moped::Msg PACKAGE = Moped::Msg + +PROTOTYPES: ENABLE + +extern "C" void +get_gsm_network_info() + PREINIT: + TInt error; + TInt enumphone; + RTelServer server; + RBasicGsmPhone phone; + RTelServer::TPhoneInfo info; + MBasicGsmPhoneNetwork::TCurrentNetworkInfo networkinfo; + PPCODE: + if (GIMME != G_ARRAY) + XSRETURN_UNDEF; + XS_SYMBIAN_OR_EMPTY(error, server.Connect()); + XS_SYMBIAN_OR_EMPTY(error, server.LoadPhoneModule(KTsyName)); + XS_SYMBIAN_OR_EMPTY(error, server.EnumeratePhones(enumphone)); + if (enumphone < 1) + XSRETURN_EMPTY; + XS_SYMBIAN_OR_EMPTY(error, server.GetPhoneInfo(0, info)); + XS_SYMBIAN_OR_EMPTY(error, phone.Open(server, info.iName)); + XS_SYMBIAN_OR_EMPTY(error, phone.GetCurrentNetworkInfo(networkinfo)); + EXTEND(SP, 4); + PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMCC))); + PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMNC))); + PUSHs(sv_2mortal(newSViv(networkinfo.iLocationAreaCode))); + PUSHs(sv_2mortal(newSViv(networkinfo.iCellId))); + + diff --git a/symbian/ext/Moped/Msg/README b/symbian/ext/Moped/Msg/README new file mode 100644 index 0000000000..2d31c298a0 --- /dev/null +++ b/symbian/ext/Moped/Msg/README @@ -0,0 +1,49 @@ +NOTE: this is just a sample of how building Symbian specific +extensions COULD work. This is most probably far from the best +or final way of doing things. + +The Moped::Msg currently defines just a single static method, +get_gsm_network_info(), which returns the GSM network and cell id. + +The extension code is in Msg.xs (which gets translated by xsubpp into +Msg.cpp), the Perl glue code is in Msg.pm. To understand the .xs +syntax studying perlxstut and perlxs is recommended. + +The prerequisites for compiling this extension are: + +(1) The Perl for Symbian SDK installed (either done "make sdkinstall", + or separately installed the perlXYZsdk.zip). + +(2) The etelbgsm.h header, which is available for example from + the Symbian 6.1 SDK (the Communicator SDK). This must be + copied to ...\epoc32\include. + +(3) The etel.lib and the gsmbas.lib, they should come both + with the 6.1 and 7.0s SDK. The WINS udeb and THUMB urel + versions of these must be copied to the directories + ...\epoc32\release\wins\udeb and ...\epoc32\release\thumb\urel, + respectively. + +To compile (assuming Perl 5.9.3 and Series 60 SDK 2.6 for Visual C): + + perl \symbian\perl\5.9.3\bin\xsbuild.pl --cpp --extversion=0.1 ext\symbian\Moped\Msg + +The --symbian indicates the Symbian and SDK version, the --cplusplus +indicates that one should generate a .cpp file instead of a .c file. + +The xsbuild.pl both configures and builds the extension. +To clean do "make clean" or "make distclean". + +The location.pl demonstrates using the extension. + +To create a SIS: + + makesis -d%EPOCROOT% ext\Moped\Msg\Msg.pkg + +TODO: automate the determination of the EXTVERSION (from .pkg?) +and of creation of .pkg (the location of the .dll in the build +and in the target). + + + + diff --git a/symbian/ext/Moped/Msg/bld.inf b/symbian/ext/Moped/Msg/bld.inf new file mode 100644 index 0000000000..121a66a720 --- /dev/null +++ b/symbian/ext/Moped/Msg/bld.inf @@ -0,0 +1,4 @@ +PRJ_MMPFILES +Msg.mmp +PRJ_PLATFORMS +wins thumb diff --git a/symbian/ext/Moped/Msg/location.pl b/symbian/ext/Moped/Msg/location.pl new file mode 100644 index 0000000000..50df335041 --- /dev/null +++ b/symbian/ext/Moped/Msg/location.pl @@ -0,0 +1,8 @@ +use Moped::Msg; +my ($MCC, $MNC, $LAC, $Cell) = + Moped::Msg::get_gsm_network_info(); +print "MCC = $MCC\n"; +print "MNC = $MNC\n"; +print "LAC = $LAC\n"; +print "Cell = $Cell\n"; + diff --git a/symbian/sanity.pl b/symbian/sanity.pl index 4d00ac0532..6487c575c3 100644 --- a/symbian/sanity.pl +++ b/symbian/sanity.pl @@ -3,21 +3,24 @@ use strict; if (exists $ENV{'!C:'}) { print "You are running this under Cygwin, aren't you? (found '!C' in %ENV)\n"; print "Are you perhaps using Cygwin Perl? (\$^O is '$^O')\n" if $^O =~ /cygwin/; - print "I'm sorry but only cmd.exe will work.\n"; + print "I'm sorry but only cmd.exe with e.g. the ActivePerl will work.\n"; exit(1); } -if (# S60 2.x or S80 2.x - $ENV{PATH} !~ m!\\program files\\common files\\symbian\\tools!i - && - # S60 1.2 - $ENV{PATH} !~ m!\\symbian\\6.1\\shared\\epoc32\\tools!i - && - # UIQ - $ENV{PATH} !~ m!\\symbian\\uiq.+?\\epoc32!i - ) { - print "I do not think you have installed the Symbian SDK.\n"; - exit(1); +unless(# S60 2.x + $ENV{PATH} =~ m!\\program files\\common files\\symbian\\tools!i + || + # S60 1.2 + $ENV{PATH} =~ m!\\symbian\\6.1\\shared\\epoc32\\tools!i + || + # S80 + $ENV{PATH} =~ m!\\s80_.+?\\epoc32\\!i + || + # UIQ + $ENV{PATH} =~ m!\\uiq_.+?\\epoc32\\!i + ) { + print "I do not think you have installed a Symbian SDK, your PATH is:\n$ENV{PATH}\n"; + exit(1); } unless (-f "symbian/symbianish.h") { diff --git a/symbian/sdk.pl b/symbian/sdk.pl index 6ba8d9b084..02886e50d2 100644 --- a/symbian/sdk.pl +++ b/symbian/sdk.pl @@ -77,26 +77,26 @@ $ENV{UARM} = $UARM; # The following is a cheat sheet for the right S60/S80 SDK settings. # -# macro.bat: +# symbiancommon.bat: # set EPOC_BIN=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\Tools # set MWCW=C:\Program Files\Metrowerks\CodeWarrior for Symbian OEM v2.8 # set MSVC=C:\Program Files\Microsoft Visual Studio -# set MSVC_BIN=%MSVC%\VC98\Bin;%MSVC%\Common\MSDev98\Bin +# set MSVC_BIN=%MSVC%\VC98\Bin;%MSVC%\Aux\MSDev98\Bin # set MSVC_INC=%MSVC%\VC98\atl\include;%MSVC%\mfc\include;%MSVC%\include # set MSVC_LIB=%MSVC%\mfc\lib;%MSVC%\lib # # 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% +# symbiancommon +# set PATH=%EPOC_BIN%;%MSVC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # 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% +# symbiancommon +# set PATH=\Symbian\6.1\Shared\Epoc32\gcc\bin;\Symbian\6.1\Shared\Epoc32\Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set INCLUDE=%MSVC_INC% # set LIB=%MSVC_LIB% # set USERDEFS=%USERDEFS% -D__SERIES60_12__ -D__SERIES60_MAJOR__=1 -D__SERIES60_MINOR__=2 -D__SERIES60_1X__ @@ -105,16 +105,16 @@ $ENV{UARM} = $UARM; # # 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% +# symbiancommon +# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set USERDEFS=%USERDEFS% -D__SERIES60_20__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=0 -D__SERIES60_2X__ # # s60-2.0-vc: # # set EPOCROOT=\Symbian\7.0s\Series60_v20\ # set EPOCDEVICE=Series60_v20:com.nokia.series60 -# macro -# set PATH=%EPOC_BIN%;%MSVC_BIN%;%PATH% +# symbiancommon +# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set INCLUDE=%MSVC_INC% # set LIB=%MSVC_LIB% # set USERDEFS=%USERDEFS% -D__SERIES60_20__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=0 -D__SERIES60_2X__ @@ -123,24 +123,24 @@ $ENV{UARM} = $UARM; # # 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% +# symbiancommon +# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set USERDEFS=%USERDEFS% -D__SERIES60_21__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=1 -D__SERIES60_2X__ # # s60-2.6-cw: # # set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2_CW\ # set EPOCDEVICE=S60_2nd_FP2_CW:com.nokia.series60 -# macro -# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH% +# symbiancommon +# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set USERDEFS=%USERDEFS% -D__SERIES60_26__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=6 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__ # # s60-2.6-vc: # # set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2\ # set EPOCDEVICE=S60_2nd_FP2:com.nokia.Series60 -# macro -# set PATH=%EPOC_BIN%;%MSVC_BIN%;%PATH% +# symbiancommon +# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set INCLUDE=%MSVC_INC% # set LIB=%MSVC_LIB% # set USERDEFS=%USERDEFS% -D__SERIES60_26__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=6 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__ @@ -149,25 +149,37 @@ $ENV{UARM} = $UARM; # # 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% +# symbiancommon +# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set USERDEFS=%USERDEFS% -D__SERIES60_28__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=8 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__ # # s80-2.0-cw: # # 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% +# symbiancommon +# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__ # # s80-2.0-vc: # # set EPOCROOT=\Symbian\7.0s\S80_DP2_0_SDK\ # set EPOCDEVICE=Series80_DP2_0_SDK:com.nokia.Series80 -# macro -# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%PATH% +# symbiancommon +# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 # set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__ # +# UIQ-2.1-vc: +# set EPOCROOT=\Symbian\UIQ_21\ +# set EPOCDEVICE= +# set EPOC_BIN=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\Tools +# set MWCW=C:\APPS\codewarrior_3.0 +# set MSVC=C:\Program Files\Microsoft Visual Studio +# set MSVC_BIN=%MSVC%;%MSVC%\Common\MSDev98\Bin +# set MSVC_INC=%MSVC%\VC98\atl\include;%MSVC%\mfc\include;%MSVC%\include +# set MSVC_LIB=%MSVC%\mfc\lib;%MSVC%\lib +# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32 +# set USERDEFS=%USERDEFS% -D__UIQ_21__ -D__UIQ_MAJOR__=2 -D__UIQ_MINOR__=1 -D__UIQ_2X__ +# # EOF diff --git a/symbian/sisify.pl b/symbian/sisify.pl index 67f6d32a4c..3bd87fec9c 100644 --- a/symbian/sisify.pl +++ b/symbian/sisify.pl @@ -342,10 +342,10 @@ sub init_hex { # 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. - # Use symbian\hexdump.pl to create the perlappmin.hex for this hexdump. + # 'make sisify_hex' to create the perlappmin.hex for this hexdump. if ($Variant eq 'S60') { $APPHEX = <<__APP__; -79000010ce390010f61520108581107645504f430020000017240aa7000000000100bf0000641e2823e2e000030000019011000000000000001000000000100000200000000000000100000000000010000000000700000008120000010000004c0f00007c000000000000000c1200000c150000000000005e01000000b500f0f7f902bc084700000148006870470000280c001000b5011c024800f0b3fc01bc00470000480c001030b585b00490002100f004fd6846049900f046fb684600f01bf9011c049cb4256d006019016004980022002300f002fab6256d0065190020286000f003fa012100f006fa05b030bc01bc0047f0b5071c0e1c1e4878611e48b8611e48f8611e48b8641e48f8641e483860b42464003d192968002910d0786800f018fb2968002905d008688268081c032100f0a3f9b4246400391900200860b62464003d192868002803d000f060fc00202860b96a002905d008688268081c032100f08bf9381c311c00f0adfcf0bc01bc0047d40e0010380f0010280f0010080f0010140f00106c0c001084b010b595b01790189119921a9301200021002200f07efc041c14a901a800f037fc002808d10090201c17a90222002300f076fc00f032fc00f036fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f0bbfa011c0a687ea8126a00f043f98026f6006e44301c00f07dfa2949301c7eaa002300f07dfac425ed006d44281c00f07ffa244c6c440021224868440160201c042100f07bfa301c00f07efa011c201c2a1c00f07ffa002824d1301c00f074fa011c8420000168448022520000f0f4fb8521090169446846fc22520000f0f2fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f070fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff2c0c0010480a000044080000480800004c0800004c0a000000b50120fff7e6fe01bc004700b5021c80204000814202d00348814206d1101c00f044fa05e00000c10b0000081cfff7e7ff01bc0047000010b500f007f8041c00f0aafb201c10bc02bc084730b5051c302000f0a7fb041c002c05d000f0f2f80748606007482060201c00f0a1fb201c291c00f009f8201c30bc02bc08470000e40c0010f40c001030b5041c0d1c00f0dff8201c291c00f0e1f82068016a201c00f08af830bc01bc0047000000b5044a4260044a026000f0d7f801bc00470000e40c0010f40c001030b584b0041c00f0d1f8051c6846211c00f0d2f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f053fb041c002c04d0291c00f085fb03482060201c30bc02bc08470000a40d001070b5b820400000f03ffb061c002e18d000f0c4f90d48b0640d48f0640d4d75610d4cb4610d4bf3610d4ab2640d49f1640d4830600d483060301c6030802100f02ffb301c70bc02bc084700003c0e0010480e0010d40e0010380f0010280f0010080f0010140f00105c0e00106c0c001010b58b20800000f019fb041c002c03d000f092f902482060201c10bc02bc0847000e0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c0464c0f0010014b1b681847c046540f0010014b1b681847c046580f0010014b1b681847c046500f001040b4024e3668b44640bc6047a00f0010014b1b681847c04620100010014b1b681847c0463c100010014b1b681847c0462c100010014b1b681847c046b00f0010014b1b681847c04618100010014b1b681847c04628100010014b1b681847c04624100010014b1b681847c046f80f0010014b1b681847c046ec0f0010014b1b681847c046e40f0010014b1b681847c04610100010014b1b681847c0460c100010014b1b681847c046a80f0010014b1b681847c0469c0f0010014b1b681847c046f40f0010014b1b681847c04638100010014b1b681847c04604100010014b1b681847c04614100010014b1b681847c046d40f0010014b1b681847c046e80f0010014b1b681847c046cc0f0010014b1b681847c046b80f0010014b1b681847c046bc0f0010014b1b681847c046dc0f0010014b1b681847c046c80f0010014b1b681847c046c40f0010014b1b681847c046b40f0010014b1b681847c0461c100010014b1b681847c046f00f0010014b1b681847c046ac0f0010014b1b681847c046a40f0010014b1b681847c046fc0f0010014b1b681847c04600100010014b1b681847c046e00f0010014b1b681847c046c00f0010014b1b681847c046d00f0010014b1b681847c04608100010014b1b681847c046d80f0010014b1b681847c04640100010014b1b681847c04644100010014b1b681847c04630100010014b1b681847c04634100010014b1b681847c0464c100010014b1b681847c04648100010014b1b681847c0466410001040b4024e3668b44640bc60475c100010014b1b681847c04660100010014b1b681847c04650100010014b1b681847c04658100010014b1b681847c04654100010014b1b681847c04678100010014b1b681847c046e8100010014b1b681847c04668100010014b1b681847c0469c100010014b1b681847c04634110010014b1b681847c04630110010014b1b681847c04648110010014b1b681847c046f8100010014b1b681847c046a8100010014b1b681847c046b8100010014b1b681847c04618110010014b1b681847c046e4100010014b1b681847c046d8100010014b1b681847c04688100010014b1b681847c046bc100010014b1b681847c04624110010014b1b681847c046fc100010014b1b681847c04600110010014b1b681847c04684100010014b1b681847c046d4100010014b1b681847c04670100010014b1b681847c046f0100010014b1b681847c046a4100010014b1b681847c0466c100010014b1b681847c04604110010014b1b681847c046cc100010014b1b681847c0468c100010014b1b681847c04698100010014b1b681847c046dc100010014b1b681847c04610110010014b1b681847c0461c110010014b1b681847c04608110010014b1b681847c046a0100010014b1b681847c046c8100010014b1b681847c046c4100010014b1b681847c046ec100010014b1b681847c046f4100010014b1b681847c04620110010014b1b681847c0463c11001040b4024e3668b44640bc6047c0100010014b1b681847c04614110010014b1b681847c04680100010014b1b681847c046ac100010014b1b681847c0467410001040b4024e3668b44640bc60470c110010014b1b681847c04694100010014b1b681847c04690100010014b1b681847c046d0100010014b1b681847c04638110010014b1b681847c0467c10001040b4024e3668b44640bc6047e0100010014b1b681847c046b0100010014b1b681847c04640110010014b1b681847c0464411001040b4024e3668b44640bc6047b4100010014b1b681847c0462c110010014b1b681847c04628110010014b1b681847c04654110010014b1b681847c04674110010014b1b681847c04664110010014b1b681847c04668110010014b1b681847c04658110010014b1b681847c0466c110010014b1b681847c0464c110010014b1b681847c0465c110010014b1b681847c04650110010014b1b681847c04660110010014b1b681847c04670110010014b1b681847c04678110010014b1b681847c0467c110010014b1b681847c0468011001040b4024e3668b44640bc604784110010014b1b681847c0465c0f0010014b1b681847c046940f0010014b1b681847c046980f0010014b1b681847c046740f0010014b1b681847c046840f0010014b1b681847c046640f0010014b1b681847c0466c0f001040b4024e3668b44640bc6047600f0010014b1b681847c046900f0010014b1b681847c0468c0f0010014b1b681847c046800f0010014b1b681847c0467c0f001040b4024e3668b44640bc6047780f0010014b1b681847c046680f0010014b1b681847c046700f0010014b1b681847c046880f00107047000000b5fff72fff01bc0047000000b5fff72fff01bc0047000000b5fff723ff01bc0047000010b581b0039c14380094fff7b1fe01b010bc01bc0047000000b51438fff7d6ff01bc004700b51438fff7aafe01bc004700b51838fff7fcfe02bc084700b51c38fff7f0fe02bc084700b51c38fff7e4fe02bc084700b50438fff774fd02bc084700b50438fff768fd02bc084700b54838fff7a0ff01bc004700b54c38fff7a0ff01bc0047ffffffff00000000ffffffff00000000280c0010480c0010d40e0010380f0010280f0010080f0010140f00106c0c00102c0c0010e40c0010f40c0010e40c0010f40c0010a40d00103c0e0010480e0010d40e0010380f0010280f0010080f0010140f00105c0e00106c0c0010680d0010000e0010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c0000000000000000000000000079000010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d0600102d00001039070010590100104507001051020010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010fcffffff00000000910b0010850b00100000000000000000f1020010d1040010dd040010e9040010f5040010010500100d0500101905001025050010310500103d0500104905001055050010610500106d0500107905001085050010910500109d050010a9050010b5050010c1050010cd050010d90500100d030010e5050010f105001000000000000000000d0b0010bd0a0010a5070010190a0010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010190a00100000000000000000190b0010f9070010050800103d040010110800101d080010290800103508001041080010090b00104d08001059080010490400105504001065080010710800107d08001061030010d50a001089080010950800100000000000000000250b0010bd0a0010a50700100d000010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010390300100000000000000000190a00100000000000000000190a0010390600104506001000000000000000004d0a0010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d06001021090010390700102d090010450700103d090010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010ecffffff00000000490b0010bd080010c9080010d5080010e1080010f1080010fd080010310b001009090010550b001015090010b8ffffff000000009d0b0010b4ffffff00000000a90b00103906001045060010e4ffffff00000000790b00106d0b0010e8ffffff00000000610b0010510600105d06001003000000060000001b000000470000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000040000007805000000000000d103000000030000780200000400000003000000060000001b000000470000008d020000100000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000a10200002d000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000b402000006000000120000002700000033000000b7000000e3000000e6000000c80200003900000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000de0200000d000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000f20200000200000004000000780500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000c00200005c01000000000000c002000014302830f830fc300031043108310c312c32c432c832043308335c33ac33b033b433b833bc33c033c433c833cc33f0333834443450345c346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f835043610361c362836343640364c365836643670367c3688369836a436b036bc36c836d436e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38ac38b838c438d038dc38ec38f838043910391c3928393839443950395c396c397839843990399c39a839b439c039cc39d839e439f039fc39083a143a203a2c3a3c3a483a543a603a6c3a783a843a903aa03aac3ab83ac43ad03ae03aec3af83a043bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c1c3c203c243c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca03ca43ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cd43cd83cdc3ce03cec3cf03cfc3c003d043d083d0c3d103d143d183d1c3d203d243d283d2c3d303d343d383d3c3d403d443d483d4c3d503d543d583d5c3d603d643d703d743d783d7c3d803d843d883d8c3d903d943d983d9c3da03dac3db03db43db83dbc3dc03dc43dc83dcc3dd03dd43dd83ddc3de03de43de83dec3df03df43df83dfc3d083e0c3e103e143e183e1c3e203e243e283e2c3e303e343e383e443e503e543e583e643e683e6c3e703e743e783e7c3e803e843e883e8c3e903e943e983e9c3ea03ea43ea83eac3eb03eb43eb83ebc3ec03ec43ec83ecc3ed03edc3ee03ee43ee83eec3ef03ef43ef83efc3e003f043f103f1c3f203f243f303f343f403f443f483f +79000010ce390010f61520108581107645504f4300200000996c5ca0000000000100bf00000b5d19abe2e00003000001c40e00000000000000100000000010000020000000000000010000000000001000000000070000003c0f000001000000180d00007c00000000000000400f0000a8110000000000005e01000000b500f085f902bc084700000148006870470000bc09001000b5011c024800f061fb01bc00470000dc090010f0b5071c0e1c244878612448b8612448f8612448b8642448f86424483860b42464003d192968002910d0786800f0ecf92968002905d008688268081c032100f057f9b4246400391900200860b62464003d192868002803d000f034fb00202860b96a002905d008688268081c032100f03ff9094878610948b8610948f8610948b8640948f8640a483860381c311c00f06ffbf0bc01bc0047a00c0010040d0010f40c0010d40c0010e00c00107c0a0010000a001084b010b595b01790189119921a9301200021002200f038fb041c14a901a800f0fdfa002808d10090201c17a90222002300f030fb00f0f8fa00f0fcfa15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f081f9011c0a687ea8126a00f0e9f88026f6006e44301c00f049f92949301c7eaa002300f049f9c425ed006d44281c00f04bf9244c6c440021224868440160201c042100f047f9301c00f04af9011c201c2a1c00f04bf9002824d1301c00f040f9011c8420000168448022520000f0bafa8521090169446846fc22520000f0b8fa84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f036f900204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffc0090010480a000044080000480800004c0800004c0a000000b50120fff7fefe01bc004730b5051c242000f087fa041c002c04d0291c00f0b9fa03482060201c30bc02bc08470000340b0010f0b54f464646c0b4b820400000f070fa071c002f2ad000f0fbf81848b8641848f864184ca1467c61174ca046bc61174efe61174dbd64174cfc64174838604c467c614446bc61134cfc6414483860381c6030802100f052fa4c467c614446bc61fe61bd640b4cfc640d483860381c18bc9846a146f0bc02bc08470000080c0010140c0010a00c0010040d0010f40c0010d40c0010e00c0010280c0010000a00107c0a001010b58b20800000f02dfa041c002c03d000f0b2f802482060201c10bc02bc0847cc0b0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046180d0010014b1b681847c046200d0010014b1b681847c046240d0010014b1b681847c0461c0d0010014b1b681847c046700d0010014b1b681847c046640d0010014b1b681847c046680d0010014b1b681847c046740d0010014b1b681847c0466c0d0010014b1b681847c046800d0010014b1b681847c046840d0010014b1b681847c046780d0010014b1b681847c0467c0d0010014b1b681847c0469c0d001040b4024e3668b44640bc6047940d0010014b1b681847c046980d0010014b1b681847c046880d0010014b1b681847c046900d0010014b1b681847c0468c0d0010014b1b681847c0461c0e0010014b1b681847c046a00d0010014b1b681847c046d00d0010014b1b681847c046680e0010014b1b681847c046640e0010014b1b681847c0467c0e0010014b1b681847c0462c0e0010014b1b681847c046dc0d0010014b1b681847c046ec0d0010014b1b681847c0464c0e0010014b1b681847c046180e0010014b1b681847c0460c0e0010014b1b681847c046bc0d0010014b1b681847c046f00d0010014b1b681847c046580e0010014b1b681847c046300e0010014b1b681847c046340e0010014b1b681847c046b80d0010014b1b681847c046080e0010014b1b681847c046a80d0010014b1b681847c046240e0010014b1b681847c046d80d0010014b1b681847c046a40d0010014b1b681847c046380e0010014b1b681847c046000e0010014b1b681847c046c00d0010014b1b681847c046cc0d0010014b1b681847c046100e0010014b1b681847c046440e0010014b1b681847c046500e0010014b1b681847c0463c0e0010014b1b681847c046d40d0010014b1b681847c046fc0d0010014b1b681847c046f80d0010014b1b681847c046200e0010014b1b681847c046280e0010014b1b681847c046540e0010014b1b681847c046700e001040b4024e3668b44640bc6047140e001040b4024e3668b44640bc6047f40d0010014b1b681847c046480e0010014b1b681847c046b40d0010014b1b681847c046e00d0010014b1b681847c046ac0d001040b4024e3668b44640bc6047400e0010014b1b681847c046c80d0010014b1b681847c046c40d0010014b1b681847c046040e0010014b1b681847c0466c0e0010014b1b681847c046b00d0010014b1b681847c046e40d0010014b1b681847c046740e0010014b1b681847c046780e001040b4024e3668b44640bc6047e80d0010014b1b681847c046600e0010014b1b681847c0465c0e0010014b1b681847c046880e0010014b1b681847c046a00e0010014b1b681847c046900e0010014b1b681847c046940e0010014b1b681847c0468c0e0010014b1b681847c046980e0010014b1b681847c046800e0010014b1b681847c046840e0010014b1b681847c0469c0e0010014b1b681847c046a40e0010014b1b681847c046a80e0010014b1b681847c046b00e001040b4024e3668b44640bc6047b40e0010014b1b681847c046b80e0010014b1b681847c046ac0e0010014b1b681847c0465c0d0010014b1b681847c046600d0010014b1b681847c0463c0d0010014b1b681847c0464c0d0010014b1b681847c0462c0d0010014b1b681847c046340d001040b4024e3668b44640bc6047280d0010014b1b681847c046580d0010014b1b681847c046540d0010014b1b681847c046480d0010014b1b681847c046440d001040b4024e3668b44640bc6047400d0010014b1b681847c046300d0010014b1b681847c046380d0010014b1b681847c046500d00107047000000b5084a4261084a8261084ac261084a8264084ac264084a0260fff791ff01bc00470000a00c0010040d0010f40c0010d40c0010e00c0010000a001000b5fff717ff01bc0047000000b5fff717ff01bc0047000000b5fff70bff01bc0047000000b5fff705ff01bc0047000010b581b0039c14380094fff79bfe01b010bc01bc0047000000b51438fff7b2ff01bc004700b51438fff794fe01bc004700b51838fff7defe02bc084700b51c38fff7d2fe02bc084700b51c38fff7c6fe02bc084700b54838fff788ff01bc004700b54c38fff788ff01bc0047ffffffff00000000ffffffff00000000bc090010dc090010a00c0010040d0010f40c0010d40c0010e00c0010000a00107c0a0010c0090010340b0010080c0010140c0010a00c0010040d0010f40c0010d40c0010e00c0010280c0010000a00107c0a0010f80a0010900b0010cc0b0010a00c0010040d0010f40c0010d40c0010e00c0010000a0010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c000000000000000000000000005d080010b5070010c1070010710400107d0400107d03001089030010cd07001095030010d907001089040010a1030010ad0300108507001095040010fd050010a104001091070010ad040010b9040010c5040010e5070010d1040010dd040010e9040010f5040010f5070010010800105d07001000000000000000002d000010b5070010c1070010710400107d0400107d03001089030010cd07001095030010d907001089040010a1030010ad030010850700109504001029010010a104001091070010ad040010b9040010c5040010e5070010d1040010dd040010e9040010f5040010f507001001080010150200100000000000000000990800100d080010010500105d070010190800100d0500104d0300101905001025050010310500103d050010490500105d0700100000000000000000a50800105505001061050010590300106d0500107905001085050010910500109d05001059080010a9050010b50500106503001071030010c1050010cd050010d90500104902001025080010e5050010f10500100000000000000000b10800100d080010010500105d070010190800100d0500104d0300101905001025050010310500103d050010490500105d0700100000000000000000bd0800100d080010010500100d000010190800100d0500104d0300101905001025050010310500103d050010490500102102001000000000000000005d07001000000000000000005d070010b9030010c503001000000000000000009d070010b5070010c1070010710400107d0400107d03001089030010cd07001095030010d907001089040010a1030010ad0300108d06001095040010fd050010a104001099060010ad040010b9040010c5040010e5070010d1040010dd040010e9040010f5040010f507001001080010ecffffff00000000e10800102906001035060010410600104d0600105d06001069060010c908001075060010ed08001081060010b8ffffff000000001d090010b4ffffff0000000029090010b9030010c5030010e4ffffff000000001109001005090010e8ffffff00000000f9080010d1030010dd03001003000000060000001b00000047000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000520000005a0000006000000065000000bb000000ff000000000100002401000025010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b06000006000000080000007f050000d005000000000000ed02000068020000e00100000400000003000000060000001b00000047000000f50100000f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f3040000440500004805000000080000050800000902000009000000520000005a0000006000000065000000bb000000ff0000000001000024010000250100001c02000006000000120000002700000033000000b7000000e3000000e6000000300200003800000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000460200000b000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b0600005a0200000400000006000000080000007f050000d00500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000a40200004d01000000000000a402000014302830c430c830cc30d030d430d830dc30fc314432c432c832cc32d032d432d832dc32e032e432e8320c33543360336c337833843390339c33a833b433c033cc33d833e433f03300340c341834243430343c344834543460346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f83508361836243630363c3648365836643670367c3688369436a036ac36b836c836d436e036ec36f836043710371c372837343740374c3758376437703780378c379837a437b037bc37c837d437e037f037fc3708381438203830383c38483854388038843888388c3890389438443948394c395039543958395c396039643968396c397039743978397c398039843988398c399039943998399c39a039a439a839ac39b039b439b839083a0c3a103a143a183a1c3a203a243a283a2c3a303a343a383a3c3a403a443a483a4c3a503a543a583a5c3a603a643a683a6c3a703a743a783a843a883a8c3a903a943a983a9c3aa03aa43aa83aac3ab03ab43ab83abc3ac03ac43ac83acc3ad03ad43ad83adc3ae03ae43ae83aec3af03af43a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b3c3b403b443b483b4c3b503b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b983b9c3ba03ba43ba83bac3bb03bb43bb83bbc3bc03bc43bc83bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c103c1c3c203c243c303c343c383c3c3c403c443c483c4c3c503c543c583c5c3c603c643c683c6c3c703c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cdc3ce83cec3cf03cfc3c003d0c3d103d143d0000 __APP__ } @@ -354,7 +354,7 @@ __APP__ # by compiling the PerlApp.cpp. # The following resource has been compiled using the Series 60 SDK 2.6 # for Visual C. - # Use symbian\hexdump.pl to create the perlrscmin.hex for this hexdump. + # 'make sisify_hex' to create the perlrscmin.hex for this hexdump. if ($Variant eq 'S60') { $RSCHEX = <<__RSC__; 6b4a1f10000000005fde04001ca360de01b80010000400000001f0e54d0000000004f0e54d00000000000000001a00cc0800000000010005f0e54d000000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000120000000000000001400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000000120000000000000002400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000004122000000000000001400cc08010069160000050000000001000000000000000001000000040007000800ff020100ffffffff00000000000000000000ffff000000000000004122000000000000001400cc08010074160007000000000054160000ffffffff000000000000ffff00000000000000000000000015001d001d0035004d00ef0026015d01a301d201d701 @@ -366,10 +366,10 @@ __RSC__ # 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. - # Use symbian\hexdump.pl to create the perlappmin.hex for this hexdump. + # 'make sisify_hex' to create the perlappmin.hex for this hexdump. if ($Variant eq 'S80') { $APPHEX = <<__APP__; -79000010ce390010f61520108581107645504f430020000000756022000000000100bb0080ac4d1223e2e00003000001a80e0000000000000010000000001000002000000000000001000000000000100000000007000000200f000001000000a00c00007c00000000000000240f0000ec110000000000005e01000000b500f0cff902bc0847000001480068704700009c0a001000b5011c024800f075fc01bc00470000bc0a001030b585b00490002100f0e6fa6846049900f0e8fa684600f013f9011c049c9e256d006019016004980022002300f0daf9a0256d0065190020286000f0dbf9012100f0def905b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b4838609e2464003d192968002910d0786800f0c0fa2968002905d008688268081c032100f081f99e246400391900200860a02464003d192868002803d000f028fc00202860796a002905d008688268081c032100f069f9381c311c00f0a1faf0bc01bc0047580c00108c0c0010e00a001084b010b595b01790189119921a9301200021002200f046fc041c14a901a800f005fc002808d10090201c17a90222002300f03efc00f000fc00f004fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f06ffa011c0a687ea8126a00f027f98026f6006e44301c00f025fa2949301c7eaa002300f025fac425ed006d44281c00f027fa244c6c440021224868440160201c042100f023fa301c00f026fa011c201c2a1c00f027fa002824d1301c00f01cfa011c8420000168448022520000f0c2fb8521090169446846fc22520000f0c0fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f024fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa00a0010480a000044080000480800004c0800004c0a000000b50120fff7f2fe01bc004700b5081cfff7f6ff01bc004710b5021c80204000814203d1101c00f0f5f905e09e24640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f074fb201c10bc02bc084730b5051c2c2000f071fb041c002c03d000f092fb06482060201c00f06dfb201c291c00f007f8201c30bc02bc084700004c0b001030b5041c0d1c00f0bdf8201c291c00f0bff82068016a201c00f06ef830bc01bc0047000000b5034a026000f0b7f801bc004700004c0b001030b584b0041c00f0b3f8051c6846211c00f0b4f82868b8300268281c694600f051f804b030bc01bc0047000030b5051c242000f025fb041c002c04d0291c00f08ff903482060201c30bc02bc08470000c00b001010b5a220400000f011fb041c002c0cd000f082f9074860610748a06107482060201c3430802100f00dfb201c10bc02bc08470000580c00108c0c0010e00a001010b58b20800000f003fb041c002c03d000f068f902482060201c10bc02bc08471c0c0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046a00c0010014b1b681847c046a80c0010014b1b681847c046ac0c0010014b1b681847c046a40c001040b4024e3668b44640bc6047b40c0010014b1b681847c046200d0010014b1b681847c046380d0010014b1b681847c046c40c0010014b1b681847c046180d0010014b1b681847c046280d0010014b1b681847c046240d0010014b1b681847c046000d0010014b1b681847c046f40c0010014b1b681847c046ec0c0010014b1b681847c046100d0010014b1b681847c0460c0d0010014b1b681847c046bc0c0010014b1b681847c046b00c0010014b1b681847c046fc0c0010014b1b681847c046340d0010014b1b681847c046140d0010014b1b681847c046f00c0010014b1b681847c046cc0c0010014b1b681847c046e40c0010014b1b681847c046d80c0010014b1b681847c046d40c0010014b1b681847c046c80c0010014b1b681847c0461c0d0010014b1b681847c046f80c0010014b1b681847c046c00c0010014b1b681847c046b80c0010014b1b681847c046040d0010014b1b681847c046e80c0010014b1b681847c046d00c0010014b1b681847c046dc0c0010014b1b681847c046080d0010014b1b681847c046e00c0010014b1b681847c0462c0d0010014b1b681847c046300d0010014b1b681847c046500d001040b4024e3668b44640bc6047480d0010014b1b681847c0464c0d0010014b1b681847c0463c0d0010014b1b681847c046440d0010014b1b681847c046400d0010014b1b681847c046640e0010014b1b681847c0467c0d0010014b1b681847c046f80d0010014b1b681847c046400e0010014b1b681847c0466c0d0010014b1b681847c0469c0d0010014b1b681847c046440e0010014b1b681847c0464c0e0010014b1b681847c046480e0010014b1b681847c046580e0010014b1b681847c046600e0010014b1b681847c046040e0010014b1b681847c0460c0e0010014b1b681847c046540e0010014b1b681847c046c40d0010014b1b681847c046a80d0010014b1b681847c046b80d0010014b1b681847c046f40d0010014b1b681847c046e00d0010014b1b681847c046880d001040b4024e3668b44640bc6047b00d0010014b1b681847c046bc0d0010014b1b681847c046340e0010014b1b681847c046100e0010014b1b681847c046140e0010014b1b681847c046e80d0010014b1b681847c046840d0010014b1b681847c046e40d0010014b1b681847c046d80d0010014b1b681847c046740d0010014b1b681847c046000e0010014b1b681847c046a40d0010014b1b681847c046700d0010014b1b681847c046180e0010014b1b681847c046d00d0010014b1b681847c0468c0d0010014b1b681847c046980d0010014b1b681847c046ec0d0010014b1b681847c046240e0010014b1b681847c0462c0e0010014b1b681847c0461c0e0010014b1b681847c046a00d0010014b1b681847c046cc0d0010014b1b681847c046c80d0010014b1b681847c046fc0d0010014b1b681847c046080e001040b4024e3668b44640bc6047dc0d0010014b1b681847c046300e0010014b1b681847c0465c0e001040b4024e3668b44640bc6047b40d0010014b1b681847c046f00d001040b4024e3668b44640bc6047c00d0010014b1b681847c046280e0010014b1b681847c046800d0010014b1b681847c046ac0d0010014b1b681847c046780d001040b4024e3668b44640bc6047200e0010014b1b681847c046940d0010014b1b681847c046900d0010014b1b681847c046d40d0010014b1b681847c046500e0010014b1b681847c0463c0e0010014b1b681847c046380e0010014b1b681847c046700e0010014b1b681847c046900e0010014b1b681847c046800e0010014b1b681847c046840e0010014b1b681847c046740e0010014b1b681847c046880e0010014b1b681847c046680e0010014b1b681847c046780e0010014b1b681847c0466c0e0010014b1b681847c0467c0e0010014b1b681847c0468c0e0010014b1b681847c046940e0010014b1b681847c046980e001040b4024e3668b44640bc60479c0e0010014b1b681847c046640d0010014b1b681847c046600d0010014b1b681847c0465c0d0010014b1b681847c046580d0010014b1b681847c046540d0010014b1b681847c046680d00107047000000b5fff77bff01bc0047000000b5fff76fff01bc0047000010b581b0039c14380094fff725ff01b010bc01bc0047000000b51438fff716ff01bc004700b51438fff71eff01bc004700b51838fff702ff02bc0847ffffffff00000000ffffffff000000009c0a0010bc0a0010580c00108c0c0010e00a0010a00a00104c0b00104c0b0010c00b0010580c00108c0c0010e00a00101c0c0010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c0000000000000000000000000079000010710600107d06001089060010950600106505001071050010a10600107d050010ad060010b906001089050010950500102d000010c50600104101001045020010d1060010dd060010e9060010f506001005070010110700101d070010290700100000000000000000d902001075040010810400108d04001099040010a5040010b1040010bd040010c9040010c5090010d5040010d1090010e1040010dd090010e9090010ed040010f904001005050010110500101d0500102905001035050010410500104d050010ed020010f5090010590500100000000000000000050a0010a1070010ad070010ed030010b9070010c5070010d1070010dd070010e9070010010a0010f507001001080010f9030010050400100d08001019080010250800104103001031080010410800104d0800100000000000000000110a001035070010410700100d0000104d07001059070010e103001065070010710700107d070010890700109507001019030010ecffffff00000000350a0010910800109d080010a9080010b5080010c5080010d10800101d0a0010dd080010410a0010e9080010e8ffffff000000004d0a0010a1050010ad05001003000000060000001b00000047000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff000000000100001401000015010000120000002700000033000000b7000000e3000000e6000000260100005601000065010000800200000a040000af04000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e06000004000000780500000000000081030000c80200003c0200000400000003000000060000001b000000470000005102000023000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff0000000001000014010000150100006402000006000000120000002700000033000000b7000000e3000000e60000007802000006000000260100005601000065010000800200000a040000af0400008f0200003f00000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000a50200000c000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e060000b90200000200000004000000780500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0000000004020000fe000000000000000402000014302830ec30f030f4301432b032e8323c33743378337c33a033e833f43300340c341c342834343440344c345834643470347c3488349434a034ac34b834c434d034dc34e834f43400350c351835243530353c354835543560356c357835843590359c35a835b435c035d035dc35e835f43500360c361836243630363c364836543660366c367836843690369c36a836b436c036cc36d836e436f03600370c371837243730373c374837543760376c377837843790379c37a837b437c037cc37d837e437f037fc370838143820382c383c38483854386438703880388c389838a438b038c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b439c039cc39d839e439f039fc39683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983ae83aec3af03af43af83afc3a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b343b383b3c3b403b443b483b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b903b943b983b9c3ba03ba43ba83bac3bb03bb43bb83bbc3bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c243c283c2c3c303c343c383c3c3c403c443c483c4c3c503c543c603c643c683c6c3c703c743c783c7c3c803c843c883c943c983c9c3c +79000010ce390010f61520108581107645504f430020000087d7d3fc000000000100bb00804eab39abe2e00003000001f40b00000000000000100000000010000020000000000000010000000000001000000000060000006c0c000001000000740a00007c00000000000000700c0000900e0000000000005e01000000b500f047f902bc0847000001480068704700003408001000b5011c024800f03ffb01bc0047000054080010f0b5071c0e1c1e4878611e48b8611e4838609e2464003d192968002910d0786800f0a8f92968002905d008688268081c032100f01ff99e246400391900200860a02464003d192868002803d000f018fb00202860796a002905d008688268081c032100f007f9064878610648b86107483860381c311c00f083f9f0bc01bc00472c0a0010600a0010e80800107808001084b010b595b01790189119921a9301200021002200f028fb041c14a901a800f0edfa002808d10090201c17a90222002300f020fb00f0e8fa00f0ecfa15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f04ff9011c0a687ea8126a00f0bdf88026f6006e44301c00f011f92949301c7eaa002300f011f9c425ed006d44281c00f013f9244c6c440021224868440160201c042100f00ff9301c00f012f9011c201c2a1c00f013f9002824d1301c00f008f9011c8420000168448022520000f0aafa8521090169446846fc22520000f0a8fa84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f004f900204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff38080010480a000044080000480800004c0800004c0a000000b50120fff710ff01bc004730b5051c242000f077fa041c002c04d0291c00f0dff803482060201c30bc02bc084700005809001070b5a220400000f063fa061c002e10d000f0d2f8094d7561094cb46109483060301c3430802100f059fa7561b46106483060301c70bc02bc084700002c0a0010600a001078080010e808001010b58b20800000f049fa041c002c03d000f0b2f802482060201c10bc02bc0847f0090010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046740a0010014b1b681847c0467c0a0010014b1b681847c046800a0010014b1b681847c046780a0010014b1b681847c046900a0010014b1b681847c046840a0010014b1b681847c046880a0010014b1b681847c046940a0010014b1b681847c0468c0a0010014b1b681847c046980a0010014b1b681847c0469c0a0010014b1b681847c046b40a001040b4024e3668b44640bc6047ac0a0010014b1b681847c046b00a0010014b1b681847c046a00a0010014b1b681847c046a80a0010014b1b681847c046a40a0010014b1b681847c046440b0010014b1b681847c0468c0b0010014b1b681847c046b80a0010014b1b681847c046e40a0010014b1b681847c046900b0010014b1b681847c046980b0010014b1b681847c046940b0010014b1b681847c046a40b0010014b1b681847c046ac0b0010014b1b681847c046500b0010014b1b681847c046580b0010014b1b681847c046a00b0010014b1b681847c0460c0b0010014b1b681847c046f00a0010014b1b681847c046000b0010014b1b681847c046400b0010014b1b681847c046280b0010014b1b681847c046d00a001040b4024e3668b44640bc6047f80a0010014b1b681847c046040b0010014b1b681847c046800b0010014b1b681847c0465c0b0010014b1b681847c046600b0010014b1b681847c046300b0010014b1b681847c046cc0a0010014b1b681847c0462c0b0010014b1b681847c046200b0010014b1b681847c046c00a0010014b1b681847c0464c0b0010014b1b681847c046ec0a0010014b1b681847c046bc0a0010014b1b681847c046640b0010014b1b681847c046180b0010014b1b681847c046d40a0010014b1b681847c046e00a0010014b1b681847c046340b0010014b1b681847c046700b0010014b1b681847c046780b0010014b1b681847c046680b0010014b1b681847c046e80a0010014b1b681847c046140b0010014b1b681847c046100b0010014b1b681847c046480b0010014b1b681847c046540b001040b4024e3668b44640bc6047240b0010014b1b681847c0467c0b0010014b1b681847c046a80b001040b4024e3668b44640bc60473c0b001040b4024e3668b44640bc6047fc0a0010014b1b681847c046380b001040b4024e3668b44640bc6047080b0010014b1b681847c046740b0010014b1b681847c046c80a0010014b1b681847c046f40a0010014b1b681847c046c40a001040b4024e3668b44640bc60476c0b0010014b1b681847c046dc0a0010014b1b681847c046d80a0010014b1b681847c0461c0b0010014b1b681847c0469c0b0010014b1b681847c046880b0010014b1b681847c046840b0010014b1b681847c046b80b0010014b1b681847c046d00b0010014b1b681847c046c00b0010014b1b681847c046c40b0010014b1b681847c046bc0b0010014b1b681847c046c80b0010014b1b681847c046b00b0010014b1b681847c046b40b0010014b1b681847c046cc0b0010014b1b681847c046d40b0010014b1b681847c046d80b0010014b1b681847c046e00b001040b4024e3668b44640bc6047e40b0010014b1b681847c046e80b0010014b1b681847c046dc0b00107047000000b5054a4261054a8261054a0260fff71ffe01bc004700002c0a0010600a00107808001000b5fff787ff01bc0047000000b5fff77bff01bc0047000000b5fff775ff01bc0047000010b581b0039c14380094fff72bff01b010bc01bc0047000000b51438fff71cff01bc004700b51438fff724ff01bc004700b51838fff708ff02bc0847ffffffff00000000ffffffff0000000034080010540800102c0a0010600a001078080010e808001038080010580900102c0a0010600a001078080010e8080010b4090010f00900102c0a0010600a001078080010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c000000000000000000000000005d070010f5030010010400100d04001019040010010300100d0300102504001019030010310400103d04001025030010310300104107001049040010dd0500104d07001055040010610400106d040010790400108904001095040010a1040010ad0400101907001000000000000000002d000010f5030010010400100d04001019040010010300100d0300102504001019030010310400103d04001025030010310300104107001049040010050100104d07001055040010610400106d040010790400108904001095040010a1040010ad040010f10100100000000000000000810700102505001031050010dd0200103d0500104905001055050010610500106d050010590700107905001085050010e9020010f5020010910500109d050010a905001025020010b5050010c5050010d105001000000000000000008d070010b9040010c504001019070010d1040010dd040010d1020010e9040010f5040010010500100d0500101905001019070010000000000000000099070010b9040010c50400100d000010d1040010dd040010d1020010e9040010f5040010010500100d05001019050010fd010010ecffffff00000000bd07001025060010310600103d060010490600105906001065060010a507001071060010c90700107d060010e8ffffff00000000d50700103d0300104903001003000000060000001b00000047000000520000005a0000006000000065000000bb000000ff00000000010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b060000060000000900000080050000d1050000000000007102000020020000ac0100000400000003000000060000001b00000047000000c101000007000000520000005a0000006000000065000000bb000000ff00000000010000d401000006000000120000002700000033000000b7000000e3000000e6000000e80100003e00000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe000000fe0100000b000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b0600001202000004000000060000000900000080050000d10500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000e8010000f000000000000000e801000014302830ac30b030b430b830d83120326032643268326c329032d832e432f032fc320833143320332c333833443350335c336c337833843390339c33a833b433c033cc33d833e433f033fc330834143420342c343834443450345c3468347434843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035c035cc35d835e835f8350436143620362c3638364436543660366c367836843690369c36a836b436c036cc36d836e436f036fc360837143720372c373c3748375437743778377c37f037f437f837fc370038043808380c381038143818381c382038243828382c3830388038843888388c389038943898389c38a038a438a838ac38b038b438b838bc38c038c438c838cc38d038d438d838dc38e038e438f038f438f838fc380039043908390c391039143918391c392039243928392c393039343938393c394039443948394c39503954396039643968396c397039743978397c398039843988398c399039943998399c39a039a439a839ac39b039bc39c039c439c839cc39d039d439d839dc39e039e439e839ec39f839fc39003a043a083a0c3a103a143a183a1c3a203a243a283a343a383a3c3a403a443a483a4c3a503a543a583a5c3a683a6c3a703a __APP__ } @@ -378,10 +378,10 @@ __APP__ # 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. + # 'make sisify_hex' to create the perlrscmin.hex for this hexdump. if ($Variant eq 'S80') { $RSCHEX = <<__RSC__; -6b4a1f10000000005fde04001ca360de01b800780400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000003010005055469746c65110000000064b0f3000000000001000200060650726f6d70740f06040000000000000a00010080000014001c001c0034008200a50047017b01 +6b4a1f10000000005fde04001ca360de01b800780400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000003010005055469746c65110000000064b0f3000000000001000200060650726f6d70740f00080000000000000a00010080000014001c001c0034008200a50047017b01 __RSC__ } @@ -390,22 +390,22 @@ __RSC__ # 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. + # 'make sisify_hex' to create the perlappmin.hex for this hexdump. if ($Variant eq 'UIQ') { $APPHEX = <<__APP__; -79000010ce390010f61520108581107645504f43002000001c2ae529000000000100af00c0f9bef022e2e00003000000ac2e000000000000001000000000100000200000000000000100000000000010000000000c000000242f000001000000442b00007c00000000000000282f0000e0330000000000005e01000000b501f0cbfb02bc0847000001480068704700009c26001000b5011c024801f039fe01bc00470000bc26001030b585b00490002102f016f86846049901f048fd684601f0f7fa011c049ca4256d006019016004980022002301f0e4fba6256d0065190020286001f0e5fb012101f0e8fb05b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b483860a42464003d192968002910d0786801f020fd2968002905d008688268081c032101f07dfba4246400391900200860a62464003d192868002803d001f0ecfd00202860796a002905d008688268081c032101f065fb381c311c01f0c5fff0bc01bc0047fc2a0010302b00109c28001000b5682001f0d6fd002801d001f0d6fe054901f0d9fe00220221c84200d10122101c02bc0847000007f0e54d00b5682001f0c0fd002801d001f0c0fe054901f0c3fe00220221c84200d10122101c02bc0847000009f0e54d10b5041c01f06efb211c01f0c5fc10bc01bc004710b5041c01f064fb211c01f0c1fc012010bc02bc0847000030b5041c0d1c01f097fe0b48e0620b4820630b4860630b48a0630b482060a566201c6c3001f08afd201c743001f086fd201c30bc02bc0847742800108028001060280010d82a00103c2a001010b5041c054901f07dfe01f057fea16e0860012010bc02bc084700000604000010b5041c211c6c3101f072fe0549201c01f074fe7434211c01f046fe10bc01bc0047000006040000f0b5474680b481b0051c0e1c90461f1c00200090802001f041fd041c002c03d06946fff7a3ff041c201c6c30002802d0291c01f03ffd201c7430002802d0311c01f038fde7670449201c01f031fe002804d1002007e0000006f0e54d0099404601f02efd012001b008bc9846f0bc02bc084700000020704784b030b50390049105920693204903a801f020fd041c0025002c06d103a8002101f01efd00885c282bd0022c2ad103a8002101f015fd0088402806d903a8002101f00efd00885a280dd903a8002101f007fd0088602815d903a8002101f000fd00887a280ed803a8012101f0f9fc00883a2807d103a8022101f0f2fc00885c2800d10125281c30bc08bc04b0184700002428001084b030b50390049105920693204903a801f0d6fc041c0025002c06d103a8002101f0d4fc00885c282bd0022c2ad103a8002101f0cbfc0088402806d903a8002101f0c4fc00885a280dd903a8002101f0bdfc0088602815d903a8002101f0b6fc00887a280ed803a8012101f0affc00883a2807d103a8022101f0a8fc00885c2800d10125281c30bc08bc04b0184700000428001030b584b001f02efb009001916d4602ac0849201c01f096fc281c211c01f098fc0021002800d10121081c04b030bc02bc084700007423001030b584b001f012fb009001916d4602ac0849201c01f07afc281c211c01f07cfc0021002800d10121081c04b030bc02bc0847000080230010f0b52c4ca54486ab18600f1c151c012668468021490001f069fc82ac2649201c01f058fc6846211c2a1c01f065fc6846fff752fe002855d084ac2049201c01f049fc6846211c2a1c01f056fc6846fff743fe002846d086a8291c01f0bff900280fd087ac1649201c01f034fc6846211c2a1c01f041fc6846fff72efe002800d10026002e2ed086a8391c2a1c012301f0abf9061c002e17d189ac0a49201c01f019fc6846211c2a1c01f026fc6846fff73ffe17e0ccfdffff8c230010f823001018240010382400108bac0949201c01f001fc6846211c321c2b1c01f00dfc6846fff730fe8d239b009d44f0bc01bc00475424001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f0f7fb4c466468a0460c980001070900264e9c0294484601f0ebfbbc4200dbc1e10ca8029901f0eafb007820281cd00ca8029901f0e3fb0078092815d00ca8029901f0dcfb00780a280ed00ca8029901f0d5fb00780d2807d00ca8029901f0cefb00780c2800d09de1029cbc4200db99e10ca8211c01f0c2fb007820281bd00ca8029901f0bbfb0078092814d00ca8029901f0b4fb00780a280dd00ca8029901f0adfb00780d2806d00ca8029901f0a6fb00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f097fb0078402806d90ca8029901f090fb00785a280fd90ca8029901f089fb0078602800d858e10ca8029901f081fb00787a2800d950e1029cbc4200db04e10ca8211c01f075fb0078402806d90ca8029901f06efb00785a2823d90ca8029901f067fb0078602806d90ca8029901f060fb00787a2815d90ca8029901f059fb00782f2806d90ca8029901f052fb0078392807d90ca8029901f04bfb00785f2800d0d2e0029cbc4243da0ca8211c01f040fb0078402806d90ca8029901f039fb00785a2822d90ca8029901f032fb0078602806d90ca8029901f02bfb00787a2814d90ca8029901f024fb00782f2806d90ca8029901f01dfb0078392806d90ca8029901f016fb00785f2812d1464510da311c0136484601f0e6fa039002990c1c013402940ca801f004fb0078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f0f6fa00783a2800d074e70ca8514601f0eefa00783a2800d06ce7464500db69e7311c0136484601f0bcfa5c210180029c02340294bc4266da0ca8211c01f0d7fa0078402806d90ca8029901f0d0fa00785a280fd90ca8029901f0c9fa0078602800d847e70ca8029901f0c1fa00787a2800d93fe7029cbc4245da0ca8211c01f0b6fa0078402806d90ca8029901f0affa00785a2823d90ca8029901f0a8fa0078602806d90ca8029901f0a1fa00787a2815d90ca8029901f09afa00782f2806d90ca8029901f093fa0078392807d90ca8029901f08cfa00785f2800d00ae7464500db07e7311c0136484601f05afa039002990c1c013402940ca801f078fa0078039c2080b6e7029cbc4244da0ca8211c01f06dfa007820281bd00ca8029901f066fa0078092814d00ca8029901f05ffa00780a280dd00ca8029901f058fa00780d2806d00ca8029901f051fa00780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f043fa00783b2813d1f01c404510da4846311c01f03ffa6c460449201c01f014fa4846211c01f03cfa012002e074230010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f012fa8820c00068448424e4006c44216801f00ffa814601204c46c44200d1a1e040a88021490001f0d8f9c224a4006c44a0468422520040468821c900694401f0fef9484607303e9040ac3f94c6a96846f82201f0f4f944462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f0e9f9301c01f038f88322d2006a44106051608321c9006944404601f0e1f91d49404601f0e3f9381c01f0aaf9216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f06ef98424e4006c442060c2a8494601f08cf900788424e4006c44256828800124a144e3e70000dcfbffff44040000a024001038280010311c0136381c01f04ff95c2101800024a146409800010009814515da311c0136381c01f041f98424e4006c44206040a8494601f039f900888424e4006c44256828800124a144e4e7381c311c01e0381c002101f055f9044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f06ef9009001916d4602ac0e49201c01f042f9281c211c01f068f900280cd104ac0a49201c01f037f90aa8211c01f039f90121c84200d00126301c06b070bc08bc04b018470000b0240010b424001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490001f0e4f8301c00f06bffcb22d2006a4410605160cd24e4006c44206800f066ffcc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206801f0baf84c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216801f0bcf80024a146c225ad006d44cd24e4006c442560206840a900f03fffcd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694401f0caf8cea96846f82201f0c5f82068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002101f098f8c2ac201c40a900f00fff201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920001f083f8c2ac84225200201cd121c900694401f07af88620c00068443f90c5a96846fc2201f071f82168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffffc4240010242800101829001034040000ec2a0010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c01f02af882a96846fc22520001f024f87e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f078fe4046fff74dfb00282ad14046291c00f06ffe4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f0faff8621c90069446846f82200f0f3ff20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f0a9ff002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c040000e4240010e724e4006c441749201c00f085ff7ea8211c2a1c00f092ff7ea8fff795f900281dd0a524e4006c4482229200201c291c00f0b0ffa721c90069446846fc22520000f0a8ff2068084969440968a622d2006a441268054b6b441b6800f0c5f9012007e00000102500102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f0e8fd8320c000684400f0e3fdc720c00068448021490000f040ff7ea8391c0022002300f0dcfd381c002100f024ff0088402806d9381c002100f01dff00885a280dd9381c002100f016ff008860281cd9381c002100f00fff00887a2815d8381c012100f008ff00883a280ed1381c022100f001ff00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f097fc806900f0fafd011c0a68201c126a00f048fc8320c0006844211c0022002300f094fda6256d0045442868002803d100f07efc1c302860574d6d4400215648684401606960a620400040440168281c3a1c002300f082fd061c002e00d0fde08420000168448021490000f005ff842109016944281c00f079fd061c281c00f07bfd002e00d0dde0444c6c4482229200201c391c00f0eafe414969446846fc22520000f0e3fe20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f0b2fee7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f08ffec5252d016d44e72636016e44842109016944194c6c4484225200201c00f07ffea620400040440068006841901449694468468222520000f072fe2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000018290010540c00001c040000ec2a0010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f043fe134969446846fc2200f03dfe2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f0e4fd201c291c3a1c00f0f1fd22e05c0c0000540c0000580c000028250010c724e4006c44024d6d4402490ae00000a811000050250010c724e4006c440f4d6d440f49281c00f0c1fd201c291c321c3b1c00f0cdfd201cfef7f0ff4446606a00280fd000f052fb816900290dd008688268081c032100f003fb06e0b011000078250010404600f0adfc034b9d4408bc9846f0bc01bc0047b811000084b030b51d4ca5449c909d919e929f9301200021002200f03dfe041c96a901a800f0e8fd002808d10090201c9ca90222002300f035fe00f0e3fd96a80068002813d014a88021490000f07efd14ad97ac0b49201c00f06cfd96a80268281c211c00f078fd281cfef77bff00f0cffd99239b009d4430bc08bc04b018479cfdffffb425001010b5094ca544041c68468022520000f0c1fd201c6946fff7fffd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f03bfc011c0a687ea8126a00f089fa8026f6006e44301c00f0d1fb2949301c7eaa002300f0d1fbc425ed006d44281c00f0e7fb244c6c440021224868440160201c042100f0e3fb301c00f0e6fb011c201c2a1c00f0e7fb002824d1301c00f0dcfb011c8420000168448022520000f072fd8521090169446846fc22520000f034fd84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f0f0fb00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa0260010480a000044080000480800004c0800004c0a000010b5a62464000019016010bc01bc0047f0b50b4ca5440b4c6c4420607ea88021490000f0c3fc074c6c442468064d6019052800d92ae180000449401800688746c8f7ffff3408000000fcffffb0130010c8130010f813001024140010a8140010601500107415001009490a4b032000900020019002220292039004930592012006907ea80522092300f096fcbce00000dc260010d026001001200021002200f02bfd8022d2006a44131c054970c970c30321002300f02efd00f0dafce9e00000082600101a4868448021490000f06efc174f6f44174c6c441749201c00f05afc381c211c00f044fc381cfef71bff002800d1cee0114c6c4482229200201c391c00f086fc0e4969446846fc22520000f07ffc2068c321c90069440968094a6a441268c423db006b441b68fff79bfeb0e00c0400001c0800001426001014060000240600001c06000000f0c4f98569254c6c442549201c00f01dfc24492f1c4037201c3a1c8023fef7a3fe002800d190e08020c0006844c021490000f04ffc8025ed006d44281c391c00f096f901200021002200f0b1fc061c0c2000f0c5fb041c00f072fc124a6a44124911486844016054600f4868444168006800f06bfc0e4820600e486060281c00f06cfca060301c0321221c002300f09dfc022000f068fc57e00000240800002c2600101c2600102c0800007d1c0010b4240010d025001003497ea800f0d8fb7ea8fef7f1fd40e05c2700108020c00068448021490000f0c5fbc120c00068448021490000f0befb1249134b8024e4006c4403200090002001900222029203900493059201200690201c0522092300f0affb201cfef7c8fd084800f02bfcc124e4006c440649201c00f0a2fb201cfef7bbfd0ae0dc260010d026001040420f005c2700100120fef713fd024b9d44f0bc01bc00473808000000b5081cfff7b4fe01bc004710b5021c80204000814203d1101c00f077fa05e0a424640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f0f4fb201c10bc02bc084730b5051c282000f02dfb041c002c03d000f0f8f806482060201c00f0e7fb201c291c00f007f8201c30bc02bc084700002829001030b5041c0d1c00f0e9f8201c291c00f0ebf82068016a201c00f086f830bc01bc0047000000b5034a026000f0e3f801bc004700002829001030b584b0041c00f0dff8051c6846211c00f0e0f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f0e1fa041c002c04d0291c00f011fa03482060201c30bc02bc084700009c29001010b5a820400000f0cdfa041c002c0cd000f0b0fc074860610748a06107482060201c4030802100f0edfa201c10bc02bc08470000fc2a0010302b00109c280010f0b50d1c171c1c1c00f070f88669301c211cfff701fe002d05d03068026d301c391c00f01df80020f0bc02bc0847000010b58c20800000f05ffb041c002c03d000f07efc02482060201c10bc02bc0847f8290010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046482b0010014b1b681847c0464c2b0010014b1b681847c046442b0010014b1b681847c046542b001040b4024e3668b44640bc6047502b0010014b1b681847c046582b001040b4024e3668b44640bc6047602b0010014b1b681847c046dc2b0010014b1b681847c046fc2b0010014b1b681847c046e82b0010014b1b681847c046702b0010014b1b681847c046d42b0010014b1b681847c046e42b0010014b1b681847c046e02b0010014b1b681847c046b42b0010014b1b681847c046a02b0010014b1b681847c046cc2b0010014b1b681847c046c82b0010014b1b681847c0465c2b0010014b1b681847c046b02b0010014b1b681847c046f82b0010014b1b681847c046d02b0010014b1b681847c046882b0010014b1b681847c046842b0010014b1b681847c046742b0010014b1b681847c046ac2b0010014b1b681847c046a82b0010014b1b681847c046682b0010014b1b681847c046c42b0010014b1b681847c046902b0010014b1b681847c046a42b0010014b1b681847c0468c2b0010014b1b681847c046782b0010014b1b681847c0467c2b0010014b1b681847c046982b0010014b1b681847c046d82b0010014b1b681847c0466c2b0010014b1b681847c046642b0010014b1b681847c046b82b0010014b1b681847c046bc2b0010014b1b681847c0469c2b0010014b1b681847c046802b0010014b1b681847c046942b0010014b1b681847c046ec2b0010014b1b681847c046c02b0010014b1b681847c046f02b0010014b1b681847c046f42b0010014b1b681847c046102c0010014b1b681847c046082c0010014b1b681847c046182c0010014b1b681847c046302c0010014b1b681847c046382c001040b4024e3668b44640bc60472c2c001040b4024e3668b44640bc6047242c0010014b1b681847c046282c0010014b1b681847c046002c0010014b1b681847c046342c0010014b1b681847c046042c0010014b1b681847c046142c0010014b1b681847c0460c2c0010014b1b681847c046202c0010014b1b681847c0461c2c0010014b1b681847c046582c0010014b1b681847c046a02c0010014b1b681847c0468c2c0010014b1b681847c0464c2c0010014b1b681847c046502c0010014b1b681847c046742c0010014b1b681847c046cc2c0010014b1b681847c046802c0010014b1b681847c046602c0010014b1b681847c046c42c0010014b1b681847c046942c0010014b1b681847c046642c0010014b1b681847c046702c0010014b1b681847c0469c2c0010014b1b681847c046b42c0010014b1b681847c046bc2c0010014b1b681847c046ac2c0010014b1b681847c046782c0010014b1b681847c046902c0010014b1b681847c046882c0010014b1b681847c046a42c0010014b1b681847c046a82c0010014b1b681847c046c02c0010014b1b681847c046d42c001040b4024e3668b44640bc6047842c0010014b1b681847c046b82c0010014b1b681847c0465c2c0010014b1b681847c0467c2c0010014b1b681847c046542c001040b4024e3668b44640bc6047b02c0010014b1b681847c0466c2c0010014b1b681847c046682c0010014b1b681847c046982c0010014b1b681847c046d02c0010014b1b681847c046c82c0010014b1b681847c0466c2d0010014b1b681847c046682d0010014b1b681847c046b02d0010014b1b681847c046f82d0010014b1b681847c046742d0010014b1b681847c046e82d0010014b1b681847c046f02d0010014b1b681847c046982d0010014b1b681847c0469c2d0010014b1b681847c046882d0010014b1b681847c046ec2d0010014b1b681847c0468c2d0010014b1b681847c046e02d001040b4024e3668b44640bc6047a42d0010014b1b681847c046d02d0010014b1b681847c046842d0010014b1b681847c046cc2d0010014b1b681847c046802d0010014b1b681847c046e42d0010014b1b681847c046a02d0010014b1b681847c046702d0010014b1b681847c046f42d0010014b1b681847c046942d0010014b1b681847c0467c2d0010014b1b681847c046ac2d0010014b1b681847c046902d0010014b1b681847c046d42d0010014b1b681847c046d82d0010014b1b681847c046b42d0010014b1b681847c046dc2d0010014b1b681847c046a82d001040b4024e3668b44640bc6047c42d0010014b1b681847c046c02d0010014b1b681847c046b82d0010014b1b681847c046782d0010014b1b681847c046bc2d0010014b1b681847c046c82d0010014b1b681847c046fc2d0010014b1b681847c046002e0010014b1b681847c046042e001040b4024e3668b44640bc60470c2e001040b4024e3668b44640bc6047082e0010014b1b681847c0463c2c0010014b1b681847c046482c0010014b1b681847c046442c0010014b1b681847c046402c0010014b1b681847c046582d0010014b1b681847c046f42c0010014b1b681847c046e42c0010014b1b681847c0464c2d0010014b1b681847c046e02c0010014b1b681847c0465c2d0010014b1b681847c046602d0010014b1b681847c0461c2d0010014b1b681847c046dc2c0010014b1b681847c046182d0010014b1b681847c0460c2d0010014b1b681847c046f82c0010014b1b681847c046fc2c0010014b1b681847c046102d0010014b1b681847c046502d0010014b1b681847c046e82c0010014b1b681847c046d82c0010014b1b681847c046f02c0010014b1b681847c046342d0010014b1b681847c046382d0010014b1b681847c046302d0010014b1b681847c046242d0010014b1b681847c046442d0010014b1b681847c046042d0010014b1b681847c046082d0010014b1b681847c046482d0010014b1b681847c0463c2d0010014b1b681847c046402d0010014b1b681847c046002d0010014b1b681847c046282d0010014b1b681847c0462c2d0010014b1b681847c046202d0010014b1b681847c046142d0010014b1b681847c046ec2c0010014b1b681847c046642d0010014b1b681847c046542d0010014b1b681847c046a02e0010014b1b681847c046682e0010014b1b681847c046102e0010014b1b681847c046202e0010014b1b681847c046442e0010014b1b681847c046502e0010014b1b681847c046582e0010014b1b681847c0465c2e0010014b1b681847c046342e0010014b1b681847c046242e0010014b1b681847c046402e0010014b1b681847c0462c2e0010014b1b681847c0464c2e0010014b1b681847c046482e001040b4024e3668b44640bc60473c2e0010014b1b681847c046382e0010014b1b681847c046602e0010014b1b681847c046642e0010014b1b681847c046302e0010014b1b681847c046142e0010014b1b681847c046182e0010014b1b681847c0461c2e0010014b1b681847c046902e0010014b1b681847c046802e0010014b1b681847c0468c2e0010014b1b681847c046882e0010014b1b681847c0466c2e0010014b1b681847c0467c2e0010014b1b681847c046942e0010014b1b681847c046842e0010014b1b681847c046702e0010014b1b681847c046982e0010014b1b681847c046742e0010014b1b681847c046782e0010014b1b681847c046542e001040b4024e3668b44640bc6047282e0010014b1b681847c0469c2e00107047000000b5fff71ffd01bc0047000000b5fff7efff01bc0047000000b5074ac262074a0263074a4263074a8263074a0260fff7fdfe01bc00470000742800108028001060280010d82a00103c2a001010b581b0039c14380094fff7b5fc01b010bc01bc0047000000b51438fff7b4ff01bc004700b51438fff7aefc01bc004700b51838fff7aeff02bc084700b52c38fff7a4fe01bc004710b5041c3039fff7bbfe201c10bc02bc0847000000b53038fff7acfe01bc004700b53038fff7a0fe01bc004700b53038fff794fe01bc004700b53038fff7a6fe01bc004700b53438fff782fe01bc004700b53838fff7f2fd02bc084700b53838fff7e6fd02bc084700b53838fff78aff01bc0047ffffffff00000000ffffffff000000009c260010bc260010fc2a0010302b00109c280010742800108028001060280010d82a00103c2a001024280010042800102e0070006d000000742300102e0070006c0000008023001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e006700200025005300000000008c230010f8230010182400103824001054240010742300107061636b61676500a024001038280010232100007065726c00000000b0240010b424001025005300250053002500530000000000c42400102428001018290010ec2a00105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f000000e4240010102500104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e006700200025005300000018290010ec2a00102825001050250010782500104500720072006f00720020002500640000000000b4250010a02600102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d6500000000b4240010d0250010d425001043003a005c0000000500000043006f00640065003a0000004f006e0065006c0069006e006500720000000000dc260010d026001008260010142600102c2600101c2600107d1c0010b4240010d02500105c270010b013001028290010282900109c290010fc2a0010302b00109c280010f8290010742800108028001060280010d82a00103c2a0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000055004900510000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e3300000000ccffffff00000000e5190010f119001005230010d4ffffff00000000b5220010d0ffffff00000000ed220010e1220010d5220010c1220010f922001000000000000000007900001095200010a1200010ad200010b9200010c1190010cd190010c5200010d1200010dd200010e9200010f5200010d91900102d000010251b0010751200100d1600100121001049120010311b00100d2100101d2100103d1b00102921001035210010412100104d210010592100106521001000000000000000004d1e00104d1e00100000000000000000a11600101919001095180010a1180010ad18001025190010b9180010c5180010d118001031190010dd1800103d1900104919001055190010611900106d19001079190010e9180010f518001001190010851900100d190010911900109d190010b5160010a9190010b519001000000000000000002d220010491b0010551b0010d9170010611b00106d1b0010791b0010851b0010911b0010292200109d1b0010a91b0010e5170010f1170010b51b0010c11b0010cd1b00100917001049170010d91b0010e51b0010000000000000000039220010712100107d2100100d0000108921001095210010a1210010ad210010b9210010c5210010d1210010dd210010e1160010e9210010f5210010000000000000000045220010091f001095180010a1180010ad180010151f0010b9180010c5180010d11800109d1e0010dd180010a91e0010211f00102d1f0010391f0010451f0010511f0010e9180010f5180010011900105d1f00100d190010691f0010751f0010811f00108d1f0010991f0010c9010010a51f0010e9010010b11f0010bd1f0010c91f0010d51f0010e11f0010ed1f0010f91f0010c8ffffff00000000292300101d230010112300100000000000000000b91a0010c51a0010ecffffff00000000912200100d1c0010191c0010251c0010311c0010411c00104d1c001079220010591c00109d220010651c0010e8ffffff00000000a9220010fd190010091a0010060000001b00000047000000110000002900000004000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b5000000b9000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000f4000000ff0000000001000014010000150100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e60000002e01000065010000800200004d03000009000000110000001f0000002000000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000005c000000640000007400000079000000820000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd0000000a0000000e0000001400000017000000180000001b00000022000000250000002b0000002e0000002f000000310000003200000035000000390000003f000000470000004c0000004f00000050000000530000005500000056000000580000005b0000005e0000005f000000730000007c00000081000000860000008f000000930000009500000096000000970000000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300003c03000053030000590300005a030000e7030000ea0300007c0400008c0400000205000003050000690500007e0500007f0500008105000097050000e00500002e0600004b060000040000004600000078050000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000ad0100000000000079170000b8040000c403000003000000060000001b00000047000000d9030000020000001100000029000000ec03000001000000040000000304000029000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b5000000b9000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000f4000000ff000000000100001401000015010000160400000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e60000002a040000040000002e01000065010000800200004d030000410400002300000009000000110000001f0000002000000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000005c000000640000007400000079000000820000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd00000057040000240000000a0000000e0000001400000017000000180000001b00000022000000250000002b0000002e0000002f000000310000003200000035000000390000003f000000470000004c0000004f00000050000000530000005500000056000000580000005b0000005e0000005f000000730000007c00000081000000860000008f000000930000009500000096000000970000006c0400000200000003000000060000008104000025000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300003c03000053030000590300005a030000e7030000ea0300007c0400008c0400000205000003050000690500007e0500007f0500008105000097050000e00500002e0600004b0600009504000003000000040000004600000078050000a104000025000000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000ad0100004150504152435b31303030336133645d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045494b444c475b31303030343839385d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0051494b43544c5b31303030356663395d2e444c4c00000010040000fb010000000000004400000014302830ec30f030f430b431b831bc31c031c4311833ac33e4331c34d834dc34e034e4341035d838383a3c3a083b0c3bb03cb43cb83cc03cd83d403e00100000a0010000b030bc3044315c31a83144324833ac33b033b433b833bc33c033c433f033f4332034983448354c35543558355c357035dc35e035e8357836b03604373c37403744379837e037ec37f83704381438203830383c384838543860386c387838843890389c38a838b438c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b039bc39c839d439e039ec39f839043a103a1c3a283a343a403a4c3a5c3a6c3a783a843a903a9c3aa83ab43ac03acc3ad83ae43af03afc3a083b143b203b2c3b383b443b503b5c3b683b743b803b8c3b983ba43bb03bbc3bc83bd43be03bec3bfc3b083c143c203c2c3c3c3c483c543c603c6c3c783c843c903c9c3ca83cb43cc03ccc3cd83ce43cf03cfc3c083d143d243d303d3c3d483d543d603d6c3d783d843d903d9c3da83db43dc03dcc3dd83de43df03d003e0c3e183e243e303e3c3e483e543e603e703e803e8c3e983ea43eb03ebc3ec83ed43ee03eec3ef83e043f103f1c3f283f343f403f4c3f583f643f703f7c3f883f943fa03fac3fb83fc43fd03fdc3fe83ff43f002000002c02000000300c301830243030303c304830543060306c307830843090309c30a830b430c030cc30d830e430f030fc3008311831243130313c314831543160316c317831843190319c31a831b431c031cc31d831e431f031fc31083218322432643268326c3270327432443348334c335033543358335c336033643368336c3370337c33883388348c349034943498349c34a834ac34bc34c034d434d834dc34e03420352435a035a435a835ac35b035c835cc3508360c3610364036443648364c365036543658365c366036643668366c367036743678367c368036843688368c3690369436983668386c3870387c3888388c38903894389838a438a838ac38b038b438b838bc38c038c438c838cc38d038d438d838dc38e038e438e838ec38f038f438f838fc380039043908390c3910391439203924393039343938393c394039443948394c395039543958395c396039643968396c397039743978397c398039843988398c39903994399839a439a839ac39b039b439b839bc39c039c439c839cc39d039d439d839dc39e039e439e839ec39f039f439003a043a083a0c3a103a143a183a1c3a203a243a283a2c3a303a343a383a443a483a4c3a503a543a583a5c3a603a643a683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983a9c3aa03aa43aa83aac3ab03ab43ab83abc3ac03ac43ac83acc3ad03ad43ae03ae43ae83af43af83a043b083b0c3b103b143b183b1c3b203b243b283b2c3b383b3c3b403b0000 +79000010ce390010f61520108581107645504f4300200000c26d4733000000000100af004056bb93abe2e00003000000840c0000000000000010000000001000002000000000000001000000000000100000000007000000fc0c000001000000ec0a00007c00000000000000000d0000540f0000000000005e01000000b500f047f902bc0847000001480068704700007c08001000b5011c024800f087fa01bc004700009c080010f0b5071c0e1c1e4878611e48b8611e483860a42464003d192968002910d0786800f096f92968002905d008688268081c032100f01ff9a4246400391900200860a62464003d192868002803d000f060fa00202860796a002905d008688268081c032100f007f9064878610648b86107483860381c311c00f0a1faf0bc01bc0047a40a0010d80a001040090010c008001084b010b595b01790189119921a9301200021002200f070fa041c14a901a800f035fa002808d10090201c17a90222002300f068fa00f030fa00f034fa15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f037f9011c0a687ea8126a00f0bdf88026f6006e44301c00f0fff82949301c7eaa002300f0fff8c425ed006d44281c00f001f9244c6c440021224868440160201c042100f0fdf8301c00f000f9011c201c2a1c00f001f9002824d1301c00f0f6f8011c8420000168448022520000f0f2f98521090169446846fc22520000f0f0f984200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f0ecf800204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff80080010480a000044080000480800004c0800004c0a000000b50120fff710ff01bc004730b5051c242000f0bff9041c002c04d0291c00f0c7f803482060201c30bc02bc08470000c009001070b5a820400000f0abf9061c002e10d000f0def9094d7561094cb46109483060301c4030802100f0a1f97561b46106483060301c70bc02bc08470000a40a0010d80a0010c00800104009001010b58c20800000f091f9041c002c03d000f0bef902482060201c10bc02bc0847600a0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046f00a0010014b1b681847c046f40a0010014b1b681847c046ec0a0010014b1b681847c046000b0010014b1b681847c046f80a0010014b1b681847c046fc0a0010014b1b681847c046040b0010014b1b681847c046080b0010014b1b681847c046200b001040b4024e3668b44640bc6047180b0010014b1b681847c0461c0b0010014b1b681847c0460c0b0010014b1b681847c046140b0010014b1b681847c046100b0010014b1b681847c046780b0010014b1b681847c046240b0010014b1b681847c046440b0010014b1b681847c046a40b0010014b1b681847c046500b0010014b1b681847c0466c0b0010014b1b681847c046300b0010014b1b681847c0469c0b0010014b1b681847c046600b0010014b1b681847c046340b0010014b1b681847c046400b0010014b1b681847c046700b0010014b1b681847c0468c0b0010014b1b681847c046940b0010014b1b681847c046840b0010014b1b681847c046480b0010014b1b681847c0465c0b0010014b1b681847c046580b0010014b1b681847c0467c0b0010014b1b681847c046800b001040b4024e3668b44640bc6047680b0010014b1b681847c046980b0010014b1b681847c046ac0b001040b4024e3668b44640bc6047740b001040b4024e3668b44640bc6047540b0010014b1b681847c046900b0010014b1b681847c0462c0b0010014b1b681847c0464c0b0010014b1b681847c046280b001040b4024e3668b44640bc6047880b0010014b1b681847c0463c0b0010014b1b681847c046380b0010014b1b681847c046640b0010014b1b681847c046a80b0010014b1b681847c046a00b0010014b1b681847c046b80b0010014b1b681847c046d00b0010014b1b681847c046c00b0010014b1b681847c046c40b0010014b1b681847c046bc0b0010014b1b681847c046c80b0010014b1b681847c046b00b0010014b1b681847c046b40b0010014b1b681847c046cc0b0010014b1b681847c046d40b0010014b1b681847c046d80b0010014b1b681847c046e00b001040b4024e3668b44640bc6047e40b0010014b1b681847c046e80b0010014b1b681847c046dc0b0010014b1b681847c046440c0010014b1b681847c046ec0b0010014b1b681847c046fc0b0010014b1b681847c046200c0010014b1b681847c0462c0c0010014b1b681847c046340c0010014b1b681847c046380c0010014b1b681847c046100c0010014b1b681847c046000c0010014b1b681847c0461c0c0010014b1b681847c046080c0010014b1b681847c046280c0010014b1b681847c046240c001040b4024e3668b44640bc6047180c0010014b1b681847c046140c0010014b1b681847c0463c0c0010014b1b681847c046400c0010014b1b681847c0460c0c0010014b1b681847c046f00b0010014b1b681847c046f40b0010014b1b681847c046f80b0010014b1b681847c0466c0c0010014b1b681847c0465c0c0010014b1b681847c046680c0010014b1b681847c046640c0010014b1b681847c046480c0010014b1b681847c046580c0010014b1b681847c046700c0010014b1b681847c046600c0010014b1b681847c0464c0c0010014b1b681847c046740c0010014b1b681847c046500c0010014b1b681847c046540c0010014b1b681847c046300c001040b4024e3668b44640bc6047040c0010014b1b681847c046780c00107047000000b5054a4261054a8261054a0260fff719ff01bc00470000a40a0010d80a0010c008001000b5fff7abfe01bc0047000000b5fff7ddff01bc0047000000b5fff7d7ff01bc0047000010b581b0039c14380094fff755fe01b010bc01bc0047000000b51438fff7b6ff01bc004700b51438fff74efe01bc004700b51838fff7b0ff02bc0847ffffffff00000000ffffffff000000007c0800109c080010a40a0010d80a0010c00800104009001080080010c0090010a40a0010d80a0010c0080010400900101c0a0010600a0010a40a0010d80a0010c0080010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c00000000000000000000000000a50700100d060010190600102506001031060010f5020010010300103d0600104906001055060010610600106d0600100d030010d1050010ad03001095040010dd05001079060010b9030010c50300108506001095060010d1030010a1060010ad060010b9060010c5060010d1060010dd060010a905001000000000000000002d0000100d060010190600102506001031060010f5020010010300103d0600104906001055060010610600106d0600100d030010d1050010ad03001005010010dd05001079060010b9030010c50300108506001095060010d1030010a1060010ad060010b9060010c5060010d1060010dd060010f10100100000000000000000c9070010dd030010e9030010d1020010f5030010010400100d0400101904001025040010a1070010310400103d040010dd020010e9020010490400105504001061040010250200106d0400107d040010890400100000000000000000d5070010e9060010f5060010a9050010010700100d0700101907001025070010310700103d0700104907001055070010a9050010610700106d0700100000000000000000e1070010e9060010f50600100d000010010700100d0700101907001025070010310700103d0700104907001055070010fd010010610700106d070010ecffffff0000000005080010c1040010cd040010d9040010e5040010f504001001050010ed0700100d0500101108001019050010e8ffffff000000001d0800101903001025030010060000001b00000047000000520000006000000065000000ff00000000010000120000002700000033000000b7000000e3000000e6000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007b0000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b060000060000000900000080050000d1050000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000000000007102000054020000cc01000003000000060000001b00000047000000e101000005000000520000006000000065000000ff00000000010000f401000006000000120000002700000033000000b7000000e3000000e60000000802000023000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007b0000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd0000001e0200000b000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b0600003202000004000000060000000900000080050000d10500003e02000024000000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a80100004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0051494b43544c5b31303030356663395d2e444c4c00000c02000002010000000000000c02000014302830ac30b030b430b830d83120326032643268326c329032d832e432f032fc320833143320332c3338334833543360336c337833843390339c33a833b433c033cc33d833e433f033fc330834143420342c343834443450345c346834783484349034a034b034bc34c834d434e034f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35cc35d835e435f035fc350836143620362c363836443650365c3668367436803690369c36a836b436c036cc36d836e436f036fc360837143720372c373837443750375c3768377437803790379c37bc37c037c43738383c384038443848384c385038543858385c386038643868386c38703874387838c838cc38d038d438d838dc38e038e438e838ec38f038f438f838fc380039043908390c391039143918391c392039243928392c393039343938393c3948394c395039543958395c396039643968396c397039743978397c398039843988398c399039943998399c39a039a439a839ac39b039b439b839bc39c839cc39d039d439d839dc39e039e439e839ec39f039f439f839fc39003a043a083a0c3a103a143a183a243a283a2c3a303a343a383a3c3a403a443a483a4c3a503a543a583a5c3a683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983a9c3aa03aac3ab03ab43ab83abc3ac03ac43ac83acc3ad03ad43ae03ae43ae83a __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. + # The following resource has been compiled using the UIQ 2.1 SDK + # for CodeWarrior. + # 'make sisify_hex' to create the perlrscmin.hex for this hexdump. if ($Variant eq 'UIQ') { $RSCHEX = <<__RSC__; -6b4a1f10000000005fde04001ca360de01b800f8030400000001f0e54d0000000004f0e54d04f0e54d0000000000000000000000000007010005f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000000050100000005055469746c6511460014000000000064b0f30001000200060650726f6d707411060400000000000000000a0001008000000005000000000d0d4f4b202f2043616e63656c203f0e460014000000000008f0e54d00000015010000000200feff00000000000000000000000002024f6b1a00ffffffff000000000101ffff000000000000000000000000060643616e63656c0b00ffffffff0000000001010005000000000a0a596573202f204e6f203f0e46001400000000000af0e54d00000015010000000200feff00000000000000000000000003035965732900ffffffff000000000101ffff000000000000000000000000024e006f0000ffffffff00000000010115001d001d0035005800fa00320156019e01bf010402 +6b4a1f10000000005fde04001ca360de019a00f8030400000001f0e54d0000000004f0e54d04f0e54d0000000000000000000000000007010005f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0400000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000000050100000005055469746c6511460014000000000064b0f30001000200060650726f6d707411000800000000000000000a0001008000000005000000000d0d4f4b202f2043616e63656c203f0e460014000000000008f0e54d00000015010000000200feff00000000000000000000000002024f6b1a00ffffffff000000000101ffff000000000000000000000000060643616e63656c0b00ffffffff0000000001010005000000000a0a596573202f204e6f203f0e46001400000000000af0e54d00000015010000000200feff00000000000000000000000003035965732900ffffffff000000000101ffff000000000000000000000000024e006f0000ffffffff00000000010115001d001d0035005800de0016013a018201a301e801 __RSC__ } } diff --git a/symbian/symbian_proto.h b/symbian/symbian_proto.h index 2a51f3abc7..d289fb4e62 100644 --- a/symbian/symbian_proto.h +++ b/symbian/symbian_proto.h @@ -43,29 +43,30 @@ extern char* strncpy(char *dst, const char *src, size_t n); #if defined(SYMBIAN_DLL_CPP) || defined(SYMBIAN_UTILS_CPP) || defined(PERLBASE_CPP) || defined(PERLUTIL_CPP) # define PERL_SYMBIAN_START_EXTERN_C extern "C" { -# define PERL_SYMBIAN_EXPORT_C EXPORT_C +# define PERL_SYMBIAN_IMPORT_C IMPORT_C /* Declarations have IMPORT_C, definitions have EXPORT_C. */ # define PERL_SYMBIAN_END_EXTERN_C } #else # define PERL_SYMBIAN_START_EXTERN_C -# define PERL_SYMBIAN_EXPORT_C +# define PERL_SYMBIAN_IMPORT_C # define PERL_SYMBIAN_END_EXTERN_C #endif PERL_SYMBIAN_START_EXTERN_C -PERL_SYMBIAN_EXPORT_C int symbian_sys_init(int *argcp, char ***argvp); -PERL_SYMBIAN_EXPORT_C void* symbian_get_vars(void); -PERL_SYMBIAN_EXPORT_C void symbian_set_vars(const void *); -PERL_SYMBIAN_EXPORT_C void symbian_unset_vars(void); -PERL_SYMBIAN_EXPORT_C SSize_t symbian_read_stdin(const int fd, char *b, int n); -PERL_SYMBIAN_EXPORT_C SSize_t symbian_write_stdout(const int fd, const char *b, int n); -PERL_SYMBIAN_EXPORT_C char* symbian_get_error_string(const int error); -PERL_SYMBIAN_EXPORT_C void symbian_sleep_usec(const long usec); -PERL_SYMBIAN_EXPORT_C int symbian_get_cpu_time(long* sec, long* usec); -PERL_SYMBIAN_EXPORT_C clock_t symbian_times(struct tms* buf); -PERL_SYMBIAN_EXPORT_C int symbian_usleep(unsigned int usec); -PERL_SYMBIAN_EXPORT_C int symbian_do_aspawn(void* vreally, void *vmark, void* sp); -PERL_SYMBIAN_EXPORT_C int symbian_do_spawn(const char* command); -PERL_SYMBIAN_EXPORT_C int symbian_do_spawn_nowait(const char* command); +PERL_SYMBIAN_IMPORT_C int symbian_sys_init(int *argcp, char ***argvp); +PERL_SYMBIAN_IMPORT_C void init_os_extras(void); +PERL_SYMBIAN_IMPORT_C void* symbian_get_vars(void); +PERL_SYMBIAN_IMPORT_C void symbian_set_vars(const void *); +PERL_SYMBIAN_IMPORT_C void symbian_unset_vars(void); +PERL_SYMBIAN_IMPORT_C SSize_t symbian_read_stdin(const int fd, char *b, int n); +PERL_SYMBIAN_IMPORT_C SSize_t symbian_write_stdout(const int fd, const char *b, int n); +PERL_SYMBIAN_IMPORT_C char* symbian_get_error_string(const int error); +PERL_SYMBIAN_IMPORT_C void symbian_sleep_usec(const long usec); +PERL_SYMBIAN_IMPORT_C int symbian_get_cpu_time(long* sec, long* usec); +PERL_SYMBIAN_IMPORT_C clock_t symbian_times(struct tms* buf); +PERL_SYMBIAN_IMPORT_C int symbian_usleep(unsigned int usec); +PERL_SYMBIAN_IMPORT_C int symbian_do_aspawn(void* vreally, void *vmark, void* sp); +PERL_SYMBIAN_IMPORT_C int symbian_do_spawn(const char* command); +PERL_SYMBIAN_IMPORT_C int symbian_do_spawn_nowait(const char* command); PERL_SYMBIAN_END_EXTERN_C #endif /* !SYMBIAN_PROTO_H */ diff --git a/symbian/symbian_utils.cpp b/symbian/symbian_utils.cpp index 4fb13ac2e1..b3eee0b5e9 100644 --- a/symbian/symbian_utils.cpp +++ b/symbian/symbian_utils.cpp @@ -9,14 +9,21 @@ #define SYMBIAN_UTILS_CPP #include #include -// #include // textresolver not used since seems not to work #include #include +#include + #include #include +#include "PerlUi.h" #include "PerlBase.h" +#include "PerlUtil.h" + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" extern "C" { EXPORT_C int symbian_sys_init(int *argcp, char ***argvp) @@ -27,6 +34,43 @@ extern "C" { (void)times(&PL_timesbase); return 0; } + XS(XS_PerlApp_TextQuery) // Can't be made static because of XS(). + { + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "PerlApp::TextQuery: no arguments, please"); + SP -= items; + // TODO: parse arguments for title, prompt, and maxsize. + // Suggested syntax: + // TextQuery(title => ..., prompt => ..., maxsize => ...) + // For an example see e.g. universal.c:XS_PerlIO_get_layers(). + _LIT(KTitle, "Title"); + _LIT(KPrompt, "Prompt"); + HBufC* cData = HBufC::New(KPerlUiOneLinerSize); + TBool cSuccess = EFalse; + if (cData) { + TPtr cPtr(cData->Des()); + if (CPerlUi::TextQueryDialogL(KTitle, + KPrompt, + cPtr, + KPerlUiOneLinerSize)) { + ST(0) = sv_2mortal(PerlUtil::newSvPVfromTDesC16(*cData)); + cSuccess = ETrue; + } + delete cData; + } + if (cSuccess) + XSRETURN(1); + else + XSRETURN_UNDEF; + } + EXPORT_C void init_os_extras(void) + { + dTHX; + char *file = __FILE__; + dXSUB_SYS; + newXS("PerlApp::TextQuery", XS_PerlApp_TextQuery, file); + } EXPORT_C SSize_t symbian_read_stdin(const int fd, char *b, int n) { #ifdef PERL_GLOBAL_STRUCT /* Avoid unused variable warning. */ @@ -185,10 +229,10 @@ extern "C" { return tmsbuf->tms_utime; } } - class CE32ProcessWait : public CActive + class CProcessWait : public CActive { public: - CE32ProcessWait() : CActive(EPriorityStandard) { + CProcessWait() : CActive(EPriorityStandard) { CActiveScheduler::Add(this); } #ifdef __WINS__ @@ -208,7 +252,6 @@ extern "C" { void RunL() { CActiveScheduler::Stop(); } - CActiveSchedulerWait iWait; }; class CSpawnIoRedirect : public CBase { @@ -262,7 +305,7 @@ extern "C" { #endif if (error == KErrNone) { if ((TInt)aFlag & (TInt)ESpawnWait) { - CE32ProcessWait* w = new CE32ProcessWait(); + CProcessWait* w = new CProcessWait(); if (w) { error = w->Wait(proc); delete w; diff --git a/symbian/symbianish.h b/symbian/symbianish.h index 4f06e0a217..a3f795f380 100644 --- a/symbian/symbianish.h +++ b/symbian/symbianish.h @@ -143,7 +143,7 @@ pid_t wait(int *status); #undef PERL_EXPORT_C #define PERL_EXPORT_C EXPORT_C /* for perlio.h */ -#define PERL_CALLCONV EXPORT_C /* for prototype.h */ +#define PERL_CALLCONV EXPORT_C /* for proto.h */ #undef PERL_XS_EXPORT_C #define PERL_XS_EXPORT_C EXPORT_C diff --git a/symbian/xsbuild.pl b/symbian/xsbuild.pl index adde60ee61..b98b4af68c 100644 --- a/symbian/xsbuild.pl +++ b/symbian/xsbuild.pl @@ -35,8 +35,9 @@ my $Sis; sub usage { die <<__EOF__; $0: Usage: $0 [--symbian=version] [--perl=version] - [--csuffix=csuffix] [--cplusplus] - [--win=win] [--arm=arm] + [--extversion=x.y] + [--csuffix=csuffix] [--cplusplus|--cpp] + [--win=win] [--arm=arm] [--config|--build|--clean|--distclean|--sis] ext __EOF__ } @@ -73,19 +74,22 @@ if ($CoreBuild) { $PerlVersion = $R_V_SV; } +my %CONF; + usage() unless GetOptions( - 'symbian=s' => \$SymbianVersion, - 'perl=s' => \$PerlVersion, - 'csuffix=s' => \$CSuffix, - 'cplusplus' => \$CPlusPlus, - 'win=s' => \$WIN, - 'arm=s' => \$ARM, - 'config' => \$Config, - 'build' => \$Build, - 'clean' => \$Clean, - 'distclean' => \$DistClean, - 'sis' => \$Sis + 'symbian=s' => \$SymbianVersion, + 'perl=s' => \$PerlVersion, + 'extversion=s' => \$CONF{EXTVERSION}, + 'csuffix=s' => \$CSuffix, + 'cplusplus|cpp' => \$CPlusPlus, + 'win=s' => \$WIN, + 'arm=s' => \$ARM, + 'config' => \$Config, + 'build' => \$Build, + 'clean' => \$Clean, + 'distclean' => \$DistClean, + 'sis' => \$Sis ); usage() unless @ARGV; @@ -128,7 +132,6 @@ if (exists $ENV{UREL}) { $SRCDBG = $UARM eq 'udeb' ? "SRCDBG" : ""; } -my %CONF; my %EXTCFG; sub write_bld_inf { @@ -689,7 +692,7 @@ sub update_cwd { for my $ext (@ARGV) { $ext =~ s!::!\\!g; - my $extdash = "ext\\$ext"; $extdash =~ s!\\!-!g; + my $extdash = $ext =~ /ext\\/ ? $ext : "ext\\$ext"; $extdash =~ s!\\!-!g; $ext =~ s!/!\\!g; my $cfg; -- cgit v1.2.1