symbian/config.sh Configuration data for Symbian
symbian/cwd.pl Helper code for config.pl
symbian/demo_pl "Archive" of demo code
+symbian/ext/Moped/Msg/bld.inf Demo extension build configuraion
+symbian/ext/Moped/Msg/location.pl Demo extension script
+symbian/ext/Moped/Msg/Msg.mmp Demo extension building
+symbian/ext/Moped/Msg/Msg.pkg Demo extension packaging
+symbian/ext/Moped/Msg/Msg.pm Demo extension Perl glue
+symbian/ext/Moped/Msg/Msg.xs Demo extension code
+symbian/ext/Moped/Msg/README Demo extension documentation
symbian/find_writeable_data.pl Development utility
symbian/hexdump.pl Helper for sisify.pl updating
symbian/install.cfg Installation instructions
symbian/PerlApp.cpp Symbian app launcher code
symbian/PerlApp.h Symbian app launcher header
symbian/PerlApp.hrh Symbian app launcher resource header
-symbian/PerlAppS60.rss Symbian app launcher resource definition
-symbian/PerlAppS80.rss Symbian app launcher resource definition
-symbian/PerlAppUIQ.rss Symbian app launcher resource definition
symbian/PerlBase.cpp Symbian Perl base class
symbian/PerlBase.h Symbian Perl base class header
symbian/PerlBase.pod Symbian Perl base class documentation
symbian/PerlRecog.cpp Symbian recognizer code
symbian/PerlRecog.mmp Symbian recognizer build
+symbian/PerlUi.cpp Symbian Perl UI class
+symbian/PerlUi.h Symbian Perl UI class header
+symbian/PerlUi.hrh Symbian Perl UI class resource header
+symbian/PerlUiS60.rss Symbian app launcher resource definition
+symbian/PerlUiS80.rss Symbian app launcher resource definition
+symbian/PerlUiUIQ.rss Symbian app launcher resource definition
symbian/PerlUtil.cpp Symbian Perl utility class
symbian/PerlUtil.h Symbian Perl utility class header
symbian/PerlUtil.pod Symbian Perl utility class documentation
platforms where kill was not defined. */
#ifndef HAS_KILL
if (type == OP_KILL)
- DIE(aTHX_ PL_no_func, "kill");
+ Perl_die(aTHX_ PL_no_func, "kill");
#endif
#ifndef HAS_CHOWN
if (type == OP_CHOWN)
- DIE(aTHX_ PL_no_func, "chown");
+ Perl_die(aTHX_ PL_no_func, "chown");
#endif
if (xsinit)
(*xsinit)(aTHX); /* in case linked C routines want magical variables */
#ifndef PERL_MICRO
-#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC)
+#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC) || defined(SYMBIAN)
init_os_extras();
#endif
#endif
/* 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 <avkon.hrh>
-# include <aknnotewrappers.h>
-# include <AknCommonDialogs.h>
-# ifndef __SERIES60_1X__
-# include <CAknFileSelectionDialog.h>
-# endif
-#endif /* #ifdef __SERIES60__ */
-
-#ifdef __SERIES80__
-# include <eikon.hrh>
-# include <cknflash.h>
-# include <ckndgopn.h>
-# include <ckndgfob.h>
-# include <eiklabel.h>
-# include <cknconf.h>
-#endif /* #ifdef __SERIES80__ */
-
-#ifdef __UIQ__
-# include <qikon.hrh>
-# include <eikedwin.h>
-# include <eiklabel.h>
-#endif /* #ifdef __UIQ__ */
-
#include <apparc.h>
#include <e32base.h>
#include <e32cons.h>
#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
_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<sizeof(s)/2> n={sizeof(s)/2-1,s}
-#endif // #ifndef _LIT_NO_L
-
#ifdef PerlAppMinimalName
_LIT_NO_L(KAppName, PerlAppMinimalName);
#else
#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
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<CEikEdwin*>(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]) == '\\')
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) {
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);
}
}
}
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;
}
return EFalse;
}
-void CPerlAppUi::InstallOrRunL(const TFileName& aFileName)
+void CPerlAppAppUi::InstallOrRunL(const TFileName& aFileName)
{
TParse aFile;
TParse aDrive;
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();
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)
{
if (error != KErrNone) {
TMessageBuffer message;
message.Format(_L("Error %d"), error);
- YesNoDialogL(message);
+ CPerlUi::YesNoDialogL(message);
}
#endif // #ifndef PerlAppMinimal
CleanupStack::PopAndDestroy(perl);
#ifndef PerlAppMinimal
-void CPerlAppUi::OpenFileL(const TDesC& aFileName)
+void CPerlAppAppUi::OpenFileL(const TDesC& aFileName)
{
InstallOrRunL(aFileName);
return;
#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();
#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
PERL_SYMBIANSDK_MAJOR,
PERL_SYMBIANSDK_MINOR
);
- InformationNoteL(message);
+ CPerlUi::InformationNoteL(message);
}
break;
case EPerlAppCommandTime:
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__
#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<KPerlAppUtf8Multi * KPerlAppOneLinerSize> utf8;
-
- CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8, cAppUi->iOneLiner);
+ CPerlAppAppUi* cAppUi =
+ static_cast<CPerlAppAppUi*>(CEikonEnv::Static()->EikAppUi());
+ if (CPerlUi::TextQueryDialogL(_L("Oneliner"),
+ prompt,
+ cAppUi->iOneLiner,
+ KPerlUiOneLinerSize)) {
+ const TUint KPerlUiUtf8Multi = 3; // Expansion multiplier.
+ TBuf8<KPerlUiUtf8Multi * KPerlUiOneLinerSize> utf8;
+
+ CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8,
+ cAppUi->iOneLiner);
CPerlBase* perl = CPerlBase::NewInterpreterLC();
int argc = 3;
char **argv = (char**) malloc(argc * sizeof(char *));
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
}
}
-#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;
}
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<CPerlAppAppUi*>(CEikonEnv::Static()->EikAppUi());
+ cAppUi->SetFs(aFs);
if (aDoOpen)
- appui->OpenFileL(aFileName);
+ cAppUi->OpenFileL(aFileName);
return NULL;
}
#ifndef __PerlApp_h__
#define __PerlApp_h__
-#ifdef __SERIES60__
-# include <aknapp.h>
-# include <aknappui.h>
-# include <akndoc.h>
-#endif /* #ifdef __SERIES60__ */
-
-#ifdef __SERIES80__
-# include <eikapp.h>
-# include <eikappui.h>
-# include <eikdoc.h>
-# include <eikbctrl.h>
-# include <eikgted.h>
-# include <eikdialg.h>
-#endif /* #ifdef __SERIES60__ */
-
-#ifdef __UIQ__
-# include <qikapplication.h>
-# include <qikappui.h>
-# include <qikdocument.h>
-# include <eikdialg.h>
-#endif /* #ifdef __UIQ____ */
-
-#include <coecntrl.h>
-#include <f32file.h>
+#include "PerlUi.h"
/* The source code can be compiled into "PerlApp" which is the simple
* launchpad application/demonstrator, or into "PerlAppMinimal", which
# 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
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<KPerlAppOneLinerSize> 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__
#ifndef __PerlApp_HRH__
#define __PerlApp_HRH__
-enum TPerlIds
+enum TPerlAppIds
{
EPerlAppCommandAbout = 1024, // start value must not be 0
EPerlAppCommandTime = 1025,
EPerlAppCommandOneLiner = 1027,
EPerlAppCommandCopyright = 1028,
EPerlAppCommandAboutCopyright = 1029,
- EPerlAppTextQueryInputField = 1030,
EPerlAppLast = 1099 // no comma here
};
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,
TPerlState iState;
private:
-
void ConstructL();
CConsoleBase* iConsole; /* The screen. */
TUint16* iConsoleBuffer; /* The UTF-16 characters. */
#define PerlCopyD(s,d,n,t) (MEM_WRAP_CHECK(n,t), memcpy((char*)(d),(char*)(s), (n) * sizeof(t)))
#define PerlNew(x,v,n,t) (v = (MEM_WRAP_CHECK(n,t), (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))))
+// This is like the Symbian _LIT() but without the embedded L prefix,
+// which enables using #defined constants (which need to carry their
+// own L prefix).
+#ifndef _LIT_NO_L
+# define _LIT_NO_L(n, s) static const TLitC<sizeof(s)/2> n={sizeof(s)/2-1,s}
+#endif // #ifndef _LIT_NO_L
+
#endif /* #ifndef __PerlBase_h__ */
--- /dev/null
+/* Copyright (c) 2005 Nokia. All rights reserved. */
+
+/* The PerlUi class is licensed under the same terms as Perl itself. */
+
+#include "PerlUi.h"
+
+#ifdef __SERIES60__
+# include <avkon.hrh>
+# include <aknnotewrappers.h>
+# include <AknCommonDialogs.h>
+# ifndef __SERIES60_1X__
+# include <CAknFileSelectionDialog.h>
+# endif
+#endif /* #ifdef __SERIES60__ */
+
+#ifdef __SERIES80__
+# include <eikon.hrh>
+# include <cknflash.h>
+# include <ckndgopn.h>
+# include <ckndgfob.h>
+# include <eiklabel.h>
+# include <cknconf.h>
+#endif /* #ifdef __SERIES80__ */
+
+#ifdef __UIQ__
+# include <qikon.hrh>
+# include <eikedwin.h>
+# include <eiklabel.h>
+#endif /* #ifdef __UIQ__ */
+
+#include <apparc.h>
+#include <e32base.h>
+#include <e32cons.h>
+#include <eikenv.h>
+#include <bautils.h>
+#include <eikappui.h>
+#include <utf.h>
+#include <f32file.h>
+
+#include <coemain.h>
+
+#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<CEikEdwin*>(Control(EPerlUiTextQueryInputField))->GetTextInHBufL();
+ return ETrue;
+}
+
+void CPerlUiTextQueryDialog::PreLayoutDynInitL()
+{
+ SetTitleL(iTitle);
+ CEikLabel* promptLabel = ControlCaption(EPerlUiTextQueryInputField);
+ promptLabel->SetTextL(iPrompt);
+}
+
+/* TODO: OfferKeyEventL() so that newline can be seen as 'OK'.
+ * Or a hotkey for the button? */
+
+#endif /* #if defined(__SERIES80__) || defined(__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);
+}
+
--- /dev/null
+/* Copyright (c) 2005 Nokia. All rights reserved. */
+
+/* The PerlUi class is licensed under the same terms as Perl itself. */
+
+#ifndef __PerlUi_h__
+#define __PerlUi_h__
+
+#ifdef __SERIES60__
+# include <aknapp.h>
+# include <aknappui.h>
+# include <akndoc.h>
+#endif /* #ifdef __SERIES60__ */
+
+#ifdef __SERIES80__
+# include <eikapp.h>
+# include <eikappui.h>
+# include <eikdoc.h>
+# include <eikbctrl.h>
+# include <eikgted.h>
+# include <eikdialg.h>
+#endif /* #ifdef __SERIES60__ */
+
+#ifdef __UIQ__
+# include <qikapplication.h>
+# include <qikappui.h>
+# include <qikdocument.h>
+# include <eikdialg.h>
+#endif /* #ifdef __UIQ____ */
+
+#include <coecntrl.h>
+#include <f32file.h>
+
+#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<KPerlUiOneLinerSize> iOneLiner; // Perl code to evaluate.
+ CPerlUiAppView* iAppView;
+};
+
+class CPerlUiAppView : public CgPerlUiAppView
+{
+ public:
+ static CPerlUiAppView* NewL(const TRect& aRect);
+ static CPerlUiAppView* NewLC(const TRect& aRect);
+ ~CPerlUiAppView();
+ void Draw(const TRect& aRect) const;
+#if defined(__SERIES80__) || defined(__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__
--- /dev/null
+/* 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__
/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-/* The PerlApp application is licensed under the same terms as Perl itself. */
+/* The PerlUi class is licensed under the same terms as Perl itself. */
+
+/* The S60 definitions. */
NAME PERL
#include <avkon.rh>
#include <avkon.rsg>
+#include "PerlUi.hrh"
#include "PerlApp.hrh"
RESOURCE RSS_SIGNATURE
};
}
-RESOURCE DIALOG r_ok_cancel_dialog
+RESOURCE DIALOG r_perlui_ok_cancel_dialog
{
flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons;
buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
};
}
-RESOURCE DIALOG r_yes_no_dialog
+RESOURCE DIALOG r_perlui_yes_no_dialog
{
flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons;
buttons = R_AVKON_SOFTKEYS_YES_NO;
};
}
-RESOURCE DIALOG r_text_query_dialog
+RESOURCE DIALOG r_perlui_text_query_dialog
{
flags = EGeneralQueryFlags;
buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
};
}
-RESOURCE AVKON_LIST_QUERY r_list_query_dialog
+RESOURCE AVKON_LIST_QUERY r_perlui_list_query_dialog
{
flags = EGeneralQueryFlags;
softkeys = R_AVKON_SOFTKEYS_OK_CANCEL;
#include <CommonDialogs.hrh>
#include <CommonDialogs.rh>
-RESOURCE MEMORYSELECTIONDIALOG r_memory_selection_dialog
+RESOURCE MEMORYSELECTIONDIALOG r_perlui_file_selection_dialog
{
}
/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-/* The PerlApp application is licensed under the same terms as Perl itself. */
+/* The PerlUi class is licensed under the same terms as Perl itself. */
+
+/* The S80 definitions. */
NAME PERL
#include <eikon.rh>
#include <eikon.rsg>
+#include "PerlUi.hrh"
#include "PerlApp.hrh"
RESOURCE RSS_SIGNATURE
RESOURCE EIK_APP_INFO
{
- menubar = r_Perl_menubar;
- cba = r_Perl_cba;
+ menubar = r_perlui_menubar;
+ cba = r_perlui_cba;
}
-RESOURCE CBA r_Perl_cba
+RESOURCE CBA r_perlui_cba
{
buttons = {
CBA_BUTTON { id = EPerlAppCommandRunFile; txt = "Run"; },
}
-RESOURCE MENU_BAR r_Perl_menubar
+RESOURCE MENU_BAR r_perlui_menubar
{
titles = {
MENU_TITLE
{
- menu_pane = r_Perl_menu; txt = "Options";
+ menu_pane = r_perlui_menu; txt = "Options";
}
};
}
-RESOURCE MENU_PANE r_Perl_menu
+RESOURCE MENU_PANE r_perlui_menu
{
items = {
MENU_ITEM {
};
}
-
-RESOURCE DIALOG r_Perl_oneliner_dialog
+RESOURCE DIALOG r_perlui_oneliner_dialog
{
title = "Title";
buttons = R_EIK_BUTTONS_CANCEL_OK;
DLG_LINE {
type = EEikCtEdwin;
prompt = "Prompt";
- id = EPerlAppTextQueryInputField;
+ id = EPerlUiTextQueryInputField;
control = EDWIN {
width = 10;
maxlength = 128;
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
+/* Copyright (c) 200-2005 Nokia. All rights reserved. */
-/* The PerlApp application is licensed under the same terms as Perl itself. */
+/* The PerlUi class is licensed under the same terms as Perl itself. */
+
+/* The UIQ definitions. */
NAME PERL
#include <eikcore.rsg>
#include <qikon.rh>
+#include "PerlUi.hrh"
#include "PerlApp.hrh"
RESOURCE RSS_SIGNATURE
RESOURCE EIK_APP_INFO
{
- menubar = r_Perl_menubar;
- toolbar = r_Perl_menubar;
+ menubar = r_perlui_menubar;
+ toolbar = r_perlui_menubar;
}
-RESOURCE MENU_BAR r_Perl_menubar
+RESOURCE MENU_BAR r_perlui_menubar
{
titles = {
MENU_TITLE
{
- menu_pane = r_Perl_menu; txt = "Options";
+ menu_pane = r_perlui_menu; txt = "Options";
}
};
}
-RESOURCE MENU_PANE r_Perl_menu
+RESOURCE MENU_PANE r_perlui_menu
{
items = {
MENU_ITEM {
txt = "Time";
},
MENU_ITEM {
- command = EPerlAppCommandRunFile;
- txt = "Run";
- },
- MENU_ITEM {
command = EPerlAppCommandOneLiner;
txt = "Oneliner";
},
};
}
-RESOURCE DIALOG r_Perl_oneliner_dialog
+RESOURCE DIALOG r_perlui_oneliner_dialog
{
title = "Title";
buttons = R_EIK_BUTTONS_CANCEL_OK;
DLG_LINE {
type = EEikCtEdwin;
prompt = "Prompt";
- id = EPerlAppTextQueryInputField;
+ id = EPerlUiTextQueryInputField;
control = EDWIN {
width = 10;
maxlength = 128;
};
}
-RESOURCE DIALOG r_ok_cancel_dialog
+RESOURCE DIALOG r_perlui_ok_cancel_dialog
{
title = "OK / Cancel ?";
- buttons = r_ok_cancel_buttons;
+ buttons = r_perlui_ok_cancel_buttons;
}
-RESOURCE DLG_BUTTONS r_ok_cancel_buttons
+RESOURCE DLG_BUTTONS r_perlui_ok_cancel_buttons
{
buttons = {
DLG_BUTTON {
};
}
-RESOURCE DIALOG r_yes_no_dialog
+RESOURCE DIALOG r_perlui_yes_no_dialog
{
title = "Yes / No ?";
- buttons = r_yes_no_buttons;
+ buttons = r_perlui_yes_no_buttons;
}
-RESOURCE DLG_BUTTONS r_yes_no_buttons
+RESOURCE DLG_BUTTONS r_perlui_yes_no_buttons
{
buttons = {
DLG_BUTTON {
- 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
=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
=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
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
- 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)
+
SYSTEMINCLUDE \\epoc32\\include
LIBRARY euser.lib
LIBRARY estlib.lib
+LIBRARY eikcore.lib
+LIBRARY cone.lib
+LIBRARY efsrv.lib
__EOF__
if ( $miniperl || $perl || $type eq 'dll' ) {
print $fh <<__EOF__;
LIBRARY 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
print $fh <<__EOF__;
MACRO PERL_GLOBAL_STRUCT
MACRO PERL_GLOBAL_STRUCT_PRIVATE
+RESOURCE symbian\\PerlUi.rss
__EOF__
}
close $fh;
__EOF__
while (<CONFIG_H_SH>) {
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;
'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',
);
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',
);
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\./;
SOURCEPATH .
SOURCE PerlApp.cpp
-RESOURCE PerlApp.rss
-
USERINCLUDE .
USERINCLUDE ..
USERINCLUDE \\symbian\\perl\\$R_V_SV\\include
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) {
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:
@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}
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
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
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:
${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
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
-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
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
-perl demo_pl cleanup
-del /f perlapp.sis
-del /f b.pl
+ -del PerlApp.rss
abld clean $WIN
abld clean thumb
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'
charsize='1'
clocktype='clock_t'
cpp_stuff='42'
+cpplast=''
cppminus='-'
cpprun='gcc -E'
cppstdin='gcc -E'
d_fsync='undef'
d_ftello='undef'
d_ftime='undef'
+d_futimes='undef'
+d_futimesat='undef'
d_getcwd='define'
d_getespwnam='undef'
d_getfsstat='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'
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'
fpostype=fpos_t
freetype=void
full_ar=':'
+full_csh=':'
+full_sed=':'
getgrent_r_proto='0'
getgrgid_r_proto='0'
getgrnam_r_proto='0'
make='make'
malloctype='int*'
malloctype='void *'
+mmaptype='void *'
modetype='mode_t'
modetype=int
multiarch='undef'
osname='symbian'
osvers='7.0s'
otherlibdirs=''
+package=''
path_sep=';';
phostname='hostname'
pidtype='int'
setpwent_r_proto='0'
setservent_r_proto='0'
shmattype='void *'
+sh=':'
shortsize=2
sig_name_init='0'
sig_num_init='0'
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)'
--- /dev/null
+LIBRARY etel.lib gsmbas.lib\r
--- /dev/null
+; MoDev::Msg installation script\r
+;\r
+; The supported languages\r
+&EN;\r
+;\r
+; The installation name and header data\r
+;\r
+#{"MoDev::Msg"},(0x0FFFFFFF),0,1,0\r
+;\r
+; Platform supported is Series 60\r
+;\r
+(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\r
+; The files to install\r
+;\r
+"Msg.pm"-"!:\System\Libs\Perl\5.9.3\MoDev\Msg.pm"\r
+"\epoc32\release\thumb\urel\Msg.dll"-"!:\System\Libs\Perl\5.9.3\thumb-symbian\Msg.dll"\r
--- /dev/null
+package Moped::Msg;
+use strict;
+use vars qw(@ISA $VERSION);
+require DynaLoader;
+@ISA = qw(DynaLoader);
+$VERSION = '0.01';
+bootstrap Moped::Msg;
+1;
+
--- /dev/null
+#include <eikenv.h>
+#include <e32std.h>
+
+#include "etelbgsm.h" // From Symbian 6.1 SDK (the Communicator SDK)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "PerlBase.h"
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+#ifdef __cplusplus
+}
+#endif
+
+_LIT(KTsyName, "phonetsy.tsy");
+
+#define XS_SYMBIAN_OR_EMPTY(e, c) errno = (e) = (c); if ((e) != KErrNone) XSRETURN_EMPTY
+
+MODULE = Moped::Msg PACKAGE = Moped::Msg
+
+PROTOTYPES: ENABLE
+
+extern "C" void
+get_gsm_network_info()
+ PREINIT:
+ TInt error;
+ TInt enumphone;
+ RTelServer server;
+ RBasicGsmPhone phone;
+ RTelServer::TPhoneInfo info;
+ MBasicGsmPhoneNetwork::TCurrentNetworkInfo networkinfo;
+ PPCODE:
+ if (GIMME != G_ARRAY)
+ XSRETURN_UNDEF;
+ XS_SYMBIAN_OR_EMPTY(error, server.Connect());
+ XS_SYMBIAN_OR_EMPTY(error, server.LoadPhoneModule(KTsyName));
+ XS_SYMBIAN_OR_EMPTY(error, server.EnumeratePhones(enumphone));
+ if (enumphone < 1)
+ XSRETURN_EMPTY;
+ XS_SYMBIAN_OR_EMPTY(error, server.GetPhoneInfo(0, info));
+ XS_SYMBIAN_OR_EMPTY(error, phone.Open(server, info.iName));
+ XS_SYMBIAN_OR_EMPTY(error, phone.GetCurrentNetworkInfo(networkinfo));
+ EXTEND(SP, 4);
+ PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMCC)));
+ PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMNC)));
+ PUSHs(sv_2mortal(newSViv(networkinfo.iLocationAreaCode)));
+ PUSHs(sv_2mortal(newSViv(networkinfo.iCellId)));
+
+
--- /dev/null
+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).
+
+
+
+
--- /dev/null
+PRJ_MMPFILES\r
+Msg.mmp\r
+PRJ_PLATFORMS\r
+wins thumb\r
--- /dev/null
+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";
+
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") {
# 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__
#
# 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__
#
# 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__
#
# 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
# 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__
}
# 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
# 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__
}
# 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__
}
# 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__
}
}
#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 */
#define SYMBIAN_UTILS_CPP
#include <e32base.h>
#include <e32std.h>
-// #include <textresolver.h> // textresolver not used since seems not to work
#include <utf.h>
#include <hal.h>
+#include <eikenv.h>
+
#include <string.h>
#include <ctype.h>
+#include "PerlUi.h"
#include "PerlBase.h"
+#include "PerlUtil.h"
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
extern "C" {
EXPORT_C int symbian_sys_init(int *argcp, char ***argvp)
(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. */
return tmsbuf->tms_utime;
}
}
- class CE32ProcessWait : public CActive
+ class CProcessWait : public CActive
{
public:
- CE32ProcessWait() : CActive(EPriorityStandard) {
+ CProcessWait() : CActive(EPriorityStandard) {
CActiveScheduler::Add(this);
}
#ifdef __WINS__
void RunL() {
CActiveScheduler::Stop();
}
- CActiveSchedulerWait iWait;
};
class CSpawnIoRedirect : public CBase
{
#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;
#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
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__
}
$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;
$SRCDBG = $UARM eq 'udeb' ? "SRCDBG" : "";
}
-my %CONF;
my %EXTCFG;
sub write_bld_inf {
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;