4 # sisify.pl - package Perl scripts or Perl libraries into SIS files
6 # Copyright (c) 2004-2005 Nokia. All rights reserved.
7 # The sisify.pl utility is licensed under the same terms as Perl itself.
14 use vars qw($VERSION);
19 use File::Temp qw/tempdir/;
21 use File::Basename qw/basename dirname/;
25 # This utility has been developed in Windows under cmd.exe with
26 # the Series 60 2.6 SDK installed, but for the makesis utility
27 # in UNIX/Linux, try e.g. one of the following:
28 # http://gnupoc.sourceforge.net/
29 # http://symbianos.org/~andreh/ You
30 # will also need the 'uidcrc' utility.
31 die "$0: Looks like Cygwin, aborting.\n" if exists $ENV{'!C:'};
36 warn "$0: $_\n" for @_;
40 $0 [--variant=S60|S80|UIQ] [ --uid=hhhhhhhh ] [ --version=a.b.c ] [ --library=x.y.z ] [ some.pl | Some.pm | somefile | dir ... ]
41 The uid is the Symbian app uid for the SIS.
42 The version is the version of the SIS.
43 The library is the version of Perl under which to install. If using this,
44 only specify directories for packaging.
60 my $SisUidDefault = 0x0acebabe;
61 my $SisVersionDefault = '0.0.0';
62 my $VariantDefault = 'S60';
64 my %Variant = qw(S60 1 S80 1 UIQ 1);
68 'variant=s' => \$Variant,
70 'version=s' => \$SisVersion,
72 'showpkg' => \$ShowPkg,
73 'library=s' => \$Library,
74 'appname=s' => \$AppName,
76 die_with_usage("Need to specify what to sisify")
79 unless (defined $Variant) {
80 warn "$0: Defaulting to $VariantDefault\n";
81 $Variant = $VariantDefault;
84 unless (exists $Variant{$Variant}) {
85 die "$0: Unknown variant '$Variant'\n";
91 } elsif ($i =~ /\.pm$/i) {
98 die_with_usage("Unknown sisifiable '$i'");
104 print qq{\# system("@_") [cwd "$cwd"]\n};
105 return system("@_") == 0;
108 die_with_usage("Must specify something to sisify")
109 unless @SisPl || @SisPm || @SisOther || @SisDir;
111 die_with_usage("With the lib option set, specify only directories")
112 if defined $Library && ((@SisPl || @SisPm || @SisOther) || @SisDir == 0);
114 die_with_usage("Lib must define the Perl 5 version as 5.x.y")
115 if defined $Library && $Library !~ /^5.\d+\.\d+$/;
117 die_with_usage("With the lib option unset, specify at least one .pl file")
118 if (! defined $Library && @SisPl == 0);
120 if (!defined $AppName) {
121 if (defined $Library) {
122 $AppName = $SisDir[0];
124 } elsif (@SisPl > 0 && $SisPl[0] =~ /^(.+)\.pl$/i) {
125 $AppName = basename($1);
129 die_with_usage("Must either specify appname or at least one .pl file or the lib option")
130 unless defined $AppName || defined $Library;
132 print "[app name '$AppName']\n" if $Debug;
134 unless (defined $SisUid) {
135 $SisUid = $SisUidDefault;
136 printf "[default app uid '0x%08x']\n", $SisUid;
137 } elsif ($SisUid =~ /^(?:0x)?([0-9a-f]{8})$/i) {
140 die_with_usage("Bad uid '$SisUid'");
142 $SisUid = sprintf "0x%08x", $SisUid;
144 die_with_usage("Bad uid '$SisUid'")
145 if $SisUid !~ /^0x[0-9a-f]{8}$/i;
147 unless (defined $SisVersion) {
148 $SisVersion = $SisVersionDefault;
149 print "[default app version '$SisVersionDefault']\n";
150 } elsif ($SisVersion !~ /^\d+\.\d+\.\d+$/) {
151 die_with_usage("Bad version '$SisVersion'")
154 my $tempdir = tempdir( CLEANUP => 1 );
156 print "[temp directory '$tempdir']\n" if $Debug;
158 for my $file (@SisPl, @SisPm, @SisOther) {
159 print "[copying file '$file']\n" if $Debug;
160 die_with_usage("$0: File '$file': $!") unless -f $file;
161 my $dir = dirname($file);
162 do_system("mkdir $tempdir\\$dir") unless $dir eq '.';
163 do_system("copy $file $tempdir");
166 do_system("copy $SisPl[0] $tempdir\\default.pl")
167 unless $SisPl[0] eq "default.pl";
169 for my $dir (@SisDir) {
170 print "[copying directory '$dir']\n" if $Debug;
171 do_system("copy $dir $tempdir");
174 my $SisVersionCommas = $SisVersion;
176 $SisVersionCommas =~ s/\./\,/g;
181 push @pkg, qq[#{"$AppName"},($SisUid),$SisVersionCommas];
182 push @pkg, qq[(0x101F6F88), 0, 0, 0, {"Series60ProductID"}];
188 chdir($tempdir) or die "$0: chdir('$tempdir')\n";
191 if (open(my $fi, "default.pl")) {
192 my $fn = "default.pl.new";
193 if (open(my $fo, ">$fn")) {
198 print $fo "use lib qw(\\system\\apps\\$AppName \\system\\apps\\$AppName\\lib);\n";
199 printf $fo qq[# %d "$SisPl[0]"\n], $.;
206 die "$0: open '>$fn': $!\n";
209 rename($fn, "default.pl") or die "$0: rename $fn default.pl: $!\n";
210 # system("cat -nvet default.pl");
212 die "$0: open 'default.pl': $!\n";
221 $File::Find::name =~ s!^\./!!;
222 push @c, $File::Find::name;
228 for my $i (sort @c) {
231 push @pkg, defined $Library ? qq["$j"-"!:\\System\\Libs\\Perl\\siteperl\\$Library\\$j"] : qq["$j"-"!:\\system\\apps\\$AppName\\$j"];
235 pack("H*", shift); # symbian\hexdump.pl to create the hexdumps.
242 # If we package an application we will need both a launching native
243 # Symbian application and a resource file for it. The resource file
244 # we can get easily from a stub but for the native app we need to
245 # patch in the right Symbian app uids and executable checksums.
247 &init_hex; # Initialized $APPHEX and $RSCHEX.
249 die "$0: No app template found\n" unless defined $APPHEX && defined $RSCHEX;
251 my $app = hex2data($APPHEX);
253 my $uids = "0x10000079 0x100039CE $SisUid";
255 my $cmd = "uidcrc $uids |";
257 if (open(my $fh, $cmd)) {
260 # 0x10000079 0x100039ce 0x0acebabe 0xc82b1900
262 if ($line =~ /^$uids (0x[0-9a-f]{8})$/i) {
265 die "$0: uidcrc returned '$line'\n";
268 die qq[$0: open '$cmd' failed: $!\n];
271 my $uid = hex($SisUid);
273 my $oldchk = unpack('V', substr($app, 24, 4));
274 my $newchk = ($uid + $oldchk) & 0xFFFFFFFF;
276 # printf "# uid = 0x%08x\n", $uid;
277 # printf "# uidcrc = 0x%08x\n", $uidcrc;
278 # printf "# oldchk = 0x%08x\n", $oldchk;
279 # printf "# newchk = 0x%08x\n", $newchk;
281 substr($app, 8, 4) = pack('V', $uid);
282 substr($app, 12, 4) = pack('V', $uidcrc);
283 substr($app, 24, 4) = pack('V', $newchk);
285 my $UID_OFFSET = 0x0C7C; # This is where the uid is in the $app.
286 substr($app, $UID_OFFSET, 4) = substr($app, 8, 4); # Copy the uid also here.
288 if (open(my $fh, ">$AppName.app")) {
293 die qq[$0: open '>$AppName.app' failed: $!\n];
296 push @pkg, qq["$AppName.app"-"!:\\system\\apps\\$AppName\\$AppName.app"];
298 if (open(my $fh, ">$AppName.rsc")) {
300 print $fh hex2data($RSCHEX);
303 die qq[$0: open '>$AppName.rsc' failed: $!\n];
305 push @pkg, qq["$AppName.rsc"-"!:\\system\\apps\\$AppName\\$AppName.rsc"];
313 my $fn = "$AppName.pkg";
314 if (open(my $fh, ">$fn")) {
316 print $fh "$l\r\n"; # Note CRLF!
320 die qq[$0: Failed to open "$fn" for writing: $!\n];
322 my $sis = "$AppName.SIS";
325 do_system("makesis $fn");
327 die qq[$0: failed to create "$sis"\n];
329 do_system("copy $AppName.sis $OWD");
332 print "\n=== Now transfer $sis to your device ===\n";
337 # To create the hex: print unpack("H*", $data);
340 # This is Symbian application executable skeleton.
341 # You can create the ...\epoc32\release\thumb\urel\foo.app
342 # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
343 # The following executable has been compiled using the Series 60 SDK 2.6
345 # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
346 if ($Variant eq 'S60') {
348 79000010ce390010f61520108581107645504f4300200000996c5ca0000000000100bf00000b5d19abe2e00003000001c40e00000000000000100000000010000020000000000000010000000000001000000000070000003c0f000001000000180d00007c00000000000000400f0000a8110000000000005e01000000b500f085f902bc084700000148006870470000bc09001000b5011c024800f061fb01bc00470000dc090010f0b5071c0e1c244878612448b8612448f8612448b8642448f86424483860b42464003d192968002910d0786800f0ecf92968002905d008688268081c032100f057f9b4246400391900200860b62464003d192868002803d000f034fb00202860b96a002905d008688268081c032100f03ff9094878610948b8610948f8610948b8640948f8640a483860381c311c00f06ffbf0bc01bc0047a00c0010040d0010f40c0010d40c0010e00c00107c0a0010000a001084b010b595b01790189119921a9301200021002200f038fb041c14a901a800f0fdfa002808d10090201c17a90222002300f030fb00f0f8fa00f0fcfa15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f081f9011c0a687ea8126a00f0e9f88026f6006e44301c00f049f92949301c7eaa002300f049f9c425ed006d44281c00f04bf9244c6c440021224868440160201c042100f047f9301c00f04af9011c201c2a1c00f04bf9002824d1301c00f040f9011c8420000168448022520000f0bafa8521090169446846fc22520000f0b8fa84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f036f900204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffc0090010480a000044080000480800004c0800004c0a000000b50120fff7fefe01bc004730b5051c242000f087fa041c002c04d0291c00f0b9fa03482060201c30bc02bc08470000340b0010f0b54f464646c0b4b820400000f070fa071c002f2ad000f0fbf81848b8641848f864184ca1467c61174ca046bc61174efe61174dbd64174cfc64174838604c467c614446bc61134cfc6414483860381c6030802100f052fa4c467c614446bc61fe61bd640b4cfc640d483860381c18bc9846a146f0bc02bc08470000080c0010140c0010a00c0010040d0010f40c0010d40c0010e00c0010280c0010000a00107c0a001010b58b20800000f02dfa041c002c03d000f0b2f802482060201c10bc02bc0847cc0b0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046180d0010014b1b681847c046200d0010014b1b681847c046240d0010014b1b681847c0461c0d0010014b1b681847c046700d0010014b1b681847c046640d0010014b1b681847c046680d0010014b1b681847c046740d0010014b1b681847c0466c0d0010014b1b681847c046800d0010014b1b681847c046840d0010014b1b681847c046780d0010014b1b681847c0467c0d0010014b1b681847c0469c0d001040b4024e3668b44640bc6047940d0010014b1b681847c046980d0010014b1b681847c046880d0010014b1b681847c046900d0010014b1b681847c0468c0d0010014b1b681847c0461c0e0010014b1b681847c046a00d0010014b1b681847c046d00d0010014b1b681847c046680e0010014b1b681847c046640e0010014b1b681847c0467c0e0010014b1b681847c0462c0e0010014b1b681847c046dc0d0010014b1b681847c046ec0d0010014b1b681847c0464c0e0010014b1b681847c046180e0010014b1b681847c0460c0e0010014b1b681847c046bc0d0010014b1b681847c046f00d0010014b1b681847c046580e0010014b1b681847c046300e0010014b1b681847c046340e0010014b1b681847c046b80d0010014b1b681847c046080e0010014b1b681847c046a80d0010014b1b681847c046240e0010014b1b681847c046d80d0010014b1b681847c046a40d0010014b1b681847c046380e0010014b1b681847c046000e0010014b1b681847c046c00d0010014b1b681847c046cc0d0010014b1b681847c046100e0010014b1b681847c046440e0010014b1b681847c046500e0010014b1b681847c0463c0e0010014b1b681847c046d40d0010014b1b681847c046fc0d0010014b1b681847c046f80d0010014b1b681847c046200e0010014b1b681847c046280e0010014b1b681847c046540e0010014b1b681847c046700e001040b4024e3668b44640bc6047140e001040b4024e3668b44640bc6047f40d0010014b1b681847c046480e0010014b1b681847c046b40d0010014b1b681847c046e00d0010014b1b681847c046ac0d001040b4024e3668b44640bc6047400e0010014b1b681847c046c80d0010014b1b681847c046c40d0010014b1b681847c046040e0010014b1b681847c0466c0e0010014b1b681847c046b00d0010014b1b681847c046e40d0010014b1b681847c046740e0010014b1b681847c046780e001040b4024e3668b44640bc6047e80d0010014b1b681847c046600e0010014b1b681847c0465c0e0010014b1b681847c046880e0010014b1b681847c046a00e0010014b1b681847c046900e0010014b1b681847c046940e0010014b1b681847c0468c0e0010014b1b681847c046980e0010014b1b681847c046800e0010014b1b681847c046840e0010014b1b681847c0469c0e0010014b1b681847c046a40e0010014b1b681847c046a80e0010014b1b681847c046b00e001040b4024e3668b44640bc6047b40e0010014b1b681847c046b80e0010014b1b681847c046ac0e0010014b1b681847c0465c0d0010014b1b681847c046600d0010014b1b681847c0463c0d0010014b1b681847c0464c0d0010014b1b681847c0462c0d0010014b1b681847c046340d001040b4024e3668b44640bc6047280d0010014b1b681847c046580d0010014b1b681847c046540d0010014b1b681847c046480d0010014b1b681847c046440d001040b4024e3668b44640bc6047400d0010014b1b681847c046300d0010014b1b681847c046380d0010014b1b681847c046500d00107047000000b5084a4261084a8261084ac261084a8264084ac264084a0260fff791ff01bc00470000a00c0010040d0010f40c0010d40c0010e00c0010000a001000b5fff717ff01bc0047000000b5fff717ff01bc0047000000b5fff70bff01bc0047000000b5fff705ff01bc0047000010b581b0039c14380094fff79bfe01b010bc01bc0047000000b51438fff7b2ff01bc004700b51438fff794fe01bc004700b51838fff7defe02bc084700b51c38fff7d2fe02bc084700b51c38fff7c6fe02bc084700b54838fff788ff01bc004700b54c38fff788ff01bc0047ffffffff00000000ffffffff00000000bc090010dc090010a00c0010040d0010f40c0010d40c0010e00c0010000a00107c0a0010c0090010340b0010080c0010140c0010a00c0010040d0010f40c0010d40c0010e00c0010280c0010000a00107c0a0010f80a0010900b0010cc0b0010a00c0010040d0010f40c0010d40c0010e00c0010000a0010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c000000000000000000000000005d080010b5070010c1070010710400107d0400107d03001089030010cd07001095030010d907001089040010a1030010ad0300108507001095040010fd050010a104001091070010ad040010b9040010c5040010e5070010d1040010dd040010e9040010f5040010f5070010010800105d07001000000000000000002d000010b5070010c1070010710400107d0400107d03001089030010cd07001095030010d907001089040010a1030010ad030010850700109504001029010010a104001091070010ad040010b9040010c5040010e5070010d1040010dd040010e9040010f5040010f507001001080010150200100000000000000000990800100d080010010500105d070010190800100d0500104d0300101905001025050010310500103d050010490500105d0700100000000000000000a50800105505001061050010590300106d0500107905001085050010910500109d05001059080010a9050010b50500106503001071030010c1050010cd050010d90500104902001025080010e5050010f10500100000000000000000b10800100d080010010500105d070010190800100d0500104d0300101905001025050010310500103d050010490500105d0700100000000000000000bd0800100d080010010500100d000010190800100d0500104d0300101905001025050010310500103d050010490500102102001000000000000000005d07001000000000000000005d070010b9030010c503001000000000000000009d070010b5070010c1070010710400107d0400107d03001089030010cd07001095030010d907001089040010a1030010ad0300108d06001095040010fd050010a104001099060010ad040010b9040010c5040010e5070010d1040010dd040010e9040010f5040010f507001001080010ecffffff00000000e10800102906001035060010410600104d0600105d06001069060010c908001075060010ed08001081060010b8ffffff000000001d090010b4ffffff0000000029090010b9030010c5030010e4ffffff000000001109001005090010e8ffffff00000000f9080010d1030010dd03001003000000060000001b00000047000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000520000005a0000006000000065000000bb000000ff000000000100002401000025010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b06000006000000080000007f050000d005000000000000ed02000068020000e00100000400000003000000060000001b00000047000000f50100000f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f3040000440500004805000000080000050800000902000009000000520000005a0000006000000065000000bb000000ff0000000001000024010000250100001c02000006000000120000002700000033000000b7000000e3000000e6000000300200003800000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000460200000b000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b0600005a0200000400000006000000080000007f050000d00500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000a40200004d01000000000000a402000014302830c430c830cc30d030d430d830dc30fc314432c432c832cc32d032d432d832dc32e032e432e8320c33543360336c337833843390339c33a833b433c033cc33d833e433f03300340c341834243430343c344834543460346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f83508361836243630363c3648365836643670367c3688369436a036ac36b836c836d436e036ec36f836043710371c372837343740374c3758376437703780378c379837a437b037bc37c837d437e037f037fc3708381438203830383c38483854388038843888388c3890389438443948394c395039543958395c396039643968396c397039743978397c398039843988398c399039943998399c39a039a439a839ac39b039b439b839083a0c3a103a143a183a1c3a203a243a283a2c3a303a343a383a3c3a403a443a483a4c3a503a543a583a5c3a603a643a683a6c3a703a743a783a843a883a8c3a903a943a983a9c3aa03aa43aa83aac3ab03ab43ab83abc3ac03ac43ac83acc3ad03ad43ad83adc3ae03ae43ae83aec3af03af43a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b3c3b403b443b483b4c3b503b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b983b9c3ba03ba43ba83bac3bb03bb43bb83bbc3bc03bc43bc83bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c103c1c3c203c243c303c343c383c3c3c403c443c483c4c3c503c543c583c5c3c603c643c683c6c3c703c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cdc3ce83cec3cf03cfc3c003d0c3d103d143d0000
352 # This is Symbian application resource skeleton.
353 # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
354 # by compiling the PerlApp.cpp.
355 # The following resource has been compiled using the Series 60 SDK 2.6
357 # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
358 if ($Variant eq 'S60') {
360 6b4a1f10000000005fde04001ca360de01b80010000400000001f0e54d0000000004f0e54d00000000000000001a00cc0800000000010005f0e54d000000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000120000000000000001400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000000120000000000000002400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000004122000000000000001400cc08010069160000050000000001000000000000000001000000040007000800ff020100ffffffff00000000000000000000ffff000000000000004122000000000000001400cc08010074160007000000000054160000ffffffff000000000000ffff00000000000000000000000015001d001d0035004d00ef0026015d01a301d201d701
364 # This is Symbian application executable skeleton.
365 # You can create the ...\epoc32\release\thumb\urel\foo.app
366 # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
367 # The following executable has been compiled using the Series 80 SDK 2.0
369 # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
370 if ($Variant eq 'S80') {
372 79000010ce390010f61520108581107645504f430020000087d7d3fc000000000100bb00804eab39abe2e00003000001f40b00000000000000100000000010000020000000000000010000000000001000000000060000006c0c000001000000740a00007c00000000000000700c0000900e0000000000005e01000000b500f047f902bc0847000001480068704700003408001000b5011c024800f03ffb01bc0047000054080010f0b5071c0e1c1e4878611e48b8611e4838609e2464003d192968002910d0786800f0a8f92968002905d008688268081c032100f01ff99e246400391900200860a02464003d192868002803d000f018fb00202860796a002905d008688268081c032100f007f9064878610648b86107483860381c311c00f083f9f0bc01bc00472c0a0010600a0010e80800107808001084b010b595b01790189119921a9301200021002200f028fb041c14a901a800f0edfa002808d10090201c17a90222002300f020fb00f0e8fa00f0ecfa15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f04ff9011c0a687ea8126a00f0bdf88026f6006e44301c00f011f92949301c7eaa002300f011f9c425ed006d44281c00f013f9244c6c440021224868440160201c042100f00ff9301c00f012f9011c201c2a1c00f013f9002824d1301c00f008f9011c8420000168448022520000f0aafa8521090169446846fc22520000f0a8fa84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f004f900204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff38080010480a000044080000480800004c0800004c0a000000b50120fff710ff01bc004730b5051c242000f077fa041c002c04d0291c00f0dff803482060201c30bc02bc084700005809001070b5a220400000f063fa061c002e10d000f0d2f8094d7561094cb46109483060301c3430802100f059fa7561b46106483060301c70bc02bc084700002c0a0010600a001078080010e808001010b58b20800000f049fa041c002c03d000f0b2f802482060201c10bc02bc0847f0090010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046740a0010014b1b681847c0467c0a0010014b1b681847c046800a0010014b1b681847c046780a0010014b1b681847c046900a0010014b1b681847c046840a0010014b1b681847c046880a0010014b1b681847c046940a0010014b1b681847c0468c0a0010014b1b681847c046980a0010014b1b681847c0469c0a0010014b1b681847c046b40a001040b4024e3668b44640bc6047ac0a0010014b1b681847c046b00a0010014b1b681847c046a00a0010014b1b681847c046a80a0010014b1b681847c046a40a0010014b1b681847c046440b0010014b1b681847c0468c0b0010014b1b681847c046b80a0010014b1b681847c046e40a0010014b1b681847c046900b0010014b1b681847c046980b0010014b1b681847c046940b0010014b1b681847c046a40b0010014b1b681847c046ac0b0010014b1b681847c046500b0010014b1b681847c046580b0010014b1b681847c046a00b0010014b1b681847c0460c0b0010014b1b681847c046f00a0010014b1b681847c046000b0010014b1b681847c046400b0010014b1b681847c046280b0010014b1b681847c046d00a001040b4024e3668b44640bc6047f80a0010014b1b681847c046040b0010014b1b681847c046800b0010014b1b681847c0465c0b0010014b1b681847c046600b0010014b1b681847c046300b0010014b1b681847c046cc0a0010014b1b681847c0462c0b0010014b1b681847c046200b0010014b1b681847c046c00a0010014b1b681847c0464c0b0010014b1b681847c046ec0a0010014b1b681847c046bc0a0010014b1b681847c046640b0010014b1b681847c046180b0010014b1b681847c046d40a0010014b1b681847c046e00a0010014b1b681847c046340b0010014b1b681847c046700b0010014b1b681847c046780b0010014b1b681847c046680b0010014b1b681847c046e80a0010014b1b681847c046140b0010014b1b681847c046100b0010014b1b681847c046480b0010014b1b681847c046540b001040b4024e3668b44640bc6047240b0010014b1b681847c0467c0b0010014b1b681847c046a80b001040b4024e3668b44640bc60473c0b001040b4024e3668b44640bc6047fc0a0010014b1b681847c046380b001040b4024e3668b44640bc6047080b0010014b1b681847c046740b0010014b1b681847c046c80a0010014b1b681847c046f40a0010014b1b681847c046c40a001040b4024e3668b44640bc60476c0b0010014b1b681847c046dc0a0010014b1b681847c046d80a0010014b1b681847c0461c0b0010014b1b681847c0469c0b0010014b1b681847c046880b0010014b1b681847c046840b0010014b1b681847c046b80b0010014b1b681847c046d00b0010014b1b681847c046c00b0010014b1b681847c046c40b0010014b1b681847c046bc0b0010014b1b681847c046c80b0010014b1b681847c046b00b0010014b1b681847c046b40b0010014b1b681847c046cc0b0010014b1b681847c046d40b0010014b1b681847c046d80b0010014b1b681847c046e00b001040b4024e3668b44640bc6047e40b0010014b1b681847c046e80b0010014b1b681847c046dc0b00107047000000b5054a4261054a8261054a0260fff71ffe01bc004700002c0a0010600a00107808001000b5fff787ff01bc0047000000b5fff77bff01bc0047000000b5fff775ff01bc0047000010b581b0039c14380094fff72bff01b010bc01bc0047000000b51438fff71cff01bc004700b51438fff724ff01bc004700b51838fff708ff02bc0847ffffffff00000000ffffffff0000000034080010540800102c0a0010600a001078080010e808001038080010580900102c0a0010600a001078080010e8080010b4090010f00900102c0a0010600a001078080010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c000000000000000000000000005d070010f5030010010400100d04001019040010010300100d0300102504001019030010310400103d04001025030010310300104107001049040010dd0500104d07001055040010610400106d040010790400108904001095040010a1040010ad0400101907001000000000000000002d000010f5030010010400100d04001019040010010300100d0300102504001019030010310400103d04001025030010310300104107001049040010050100104d07001055040010610400106d040010790400108904001095040010a1040010ad040010f10100100000000000000000810700102505001031050010dd0200103d0500104905001055050010610500106d050010590700107905001085050010e9020010f5020010910500109d050010a905001025020010b5050010c5050010d105001000000000000000008d070010b9040010c504001019070010d1040010dd040010d1020010e9040010f5040010010500100d0500101905001019070010000000000000000099070010b9040010c50400100d000010d1040010dd040010d1020010e9040010f5040010010500100d05001019050010fd010010ecffffff00000000bd07001025060010310600103d060010490600105906001065060010a507001071060010c90700107d060010e8ffffff00000000d50700103d0300104903001003000000060000001b00000047000000520000005a0000006000000065000000bb000000ff00000000010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b060000060000000900000080050000d1050000000000007102000020020000ac0100000400000003000000060000001b00000047000000c101000007000000520000005a0000006000000065000000bb000000ff00000000010000d401000006000000120000002700000033000000b7000000e3000000e6000000e80100003e00000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe000000fe0100000b000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b0600001202000004000000060000000900000080050000d10500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000e8010000f000000000000000e801000014302830ac30b030b430b830d83120326032643268326c329032d832e432f032fc320833143320332c333833443350335c336c337833843390339c33a833b433c033cc33d833e433f033fc330834143420342c343834443450345c3468347434843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035c035cc35d835e835f8350436143620362c3638364436543660366c367836843690369c36a836b436c036cc36d836e436f036fc360837143720372c373c3748375437743778377c37f037f437f837fc370038043808380c381038143818381c382038243828382c3830388038843888388c389038943898389c38a038a438a838ac38b038b438b838bc38c038c438c838cc38d038d438d838dc38e038e438f038f438f838fc380039043908390c391039143918391c392039243928392c393039343938393c394039443948394c39503954396039643968396c397039743978397c398039843988398c399039943998399c39a039a439a839ac39b039bc39c039c439c839cc39d039d439d839dc39e039e439e839ec39f839fc39003a043a083a0c3a103a143a183a1c3a203a243a283a343a383a3c3a403a443a483a4c3a503a543a583a5c3a683a6c3a703a
376 # This is Symbian application resource skeleton.
377 # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
378 # by compiling the PerlApp.cpp.
379 # The following resource has been compiled using the Series 80 SDK 2.0
381 # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
382 if ($Variant eq 'S80') {
384 6b4a1f10000000005fde04001ca360de01b800780400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000003010005055469746c65110000000064b0f3000000000001000200060650726f6d70740f00080000000000000a00010080000014001c001c0034008200a50047017b01
388 # This is Symbian application executable skeleton.
389 # You can create the ...\epoc32\release\thumb\urel\foo.app
390 # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
391 # The following executable has been compiled using the UIQ SDK 2.1
393 # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
394 if ($Variant eq 'UIQ') {
396 79000010ce390010f61520108581107645504f4300200000c26d4733000000000100af004056bb93abe2e00003000000840c0000000000000010000000001000002000000000000001000000000000100000000007000000fc0c000001000000ec0a00007c00000000000000000d0000540f0000000000005e01000000b500f047f902bc0847000001480068704700007c08001000b5011c024800f087fa01bc004700009c080010f0b5071c0e1c1e4878611e48b8611e483860a42464003d192968002910d0786800f096f92968002905d008688268081c032100f01ff9a4246400391900200860a62464003d192868002803d000f060fa00202860796a002905d008688268081c032100f007f9064878610648b86107483860381c311c00f0a1faf0bc01bc0047a40a0010d80a001040090010c008001084b010b595b01790189119921a9301200021002200f070fa041c14a901a800f035fa002808d10090201c17a90222002300f068fa00f030fa00f034fa15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f037f9011c0a687ea8126a00f0bdf88026f6006e44301c00f0fff82949301c7eaa002300f0fff8c425ed006d44281c00f001f9244c6c440021224868440160201c042100f0fdf8301c00f000f9011c201c2a1c00f001f9002824d1301c00f0f6f8011c8420000168448022520000f0f2f98521090169446846fc22520000f0f0f984200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f0ecf800204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff80080010480a000044080000480800004c0800004c0a000000b50120fff710ff01bc004730b5051c242000f0bff9041c002c04d0291c00f0c7f803482060201c30bc02bc08470000c009001070b5a820400000f0abf9061c002e10d000f0def9094d7561094cb46109483060301c4030802100f0a1f97561b46106483060301c70bc02bc08470000a40a0010d80a0010c00800104009001010b58c20800000f091f9041c002c03d000f0bef902482060201c10bc02bc0847600a0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046f00a0010014b1b681847c046f40a0010014b1b681847c046ec0a0010014b1b681847c046000b0010014b1b681847c046f80a0010014b1b681847c046fc0a0010014b1b681847c046040b0010014b1b681847c046080b0010014b1b681847c046200b001040b4024e3668b44640bc6047180b0010014b1b681847c0461c0b0010014b1b681847c0460c0b0010014b1b681847c046140b0010014b1b681847c046100b0010014b1b681847c046780b0010014b1b681847c046240b0010014b1b681847c046440b0010014b1b681847c046a40b0010014b1b681847c046500b0010014b1b681847c0466c0b0010014b1b681847c046300b0010014b1b681847c0469c0b0010014b1b681847c046600b0010014b1b681847c046340b0010014b1b681847c046400b0010014b1b681847c046700b0010014b1b681847c0468c0b0010014b1b681847c046940b0010014b1b681847c046840b0010014b1b681847c046480b0010014b1b681847c0465c0b0010014b1b681847c046580b0010014b1b681847c0467c0b0010014b1b681847c046800b001040b4024e3668b44640bc6047680b0010014b1b681847c046980b0010014b1b681847c046ac0b001040b4024e3668b44640bc6047740b001040b4024e3668b44640bc6047540b0010014b1b681847c046900b0010014b1b681847c0462c0b0010014b1b681847c0464c0b0010014b1b681847c046280b001040b4024e3668b44640bc6047880b0010014b1b681847c0463c0b0010014b1b681847c046380b0010014b1b681847c046640b0010014b1b681847c046a80b0010014b1b681847c046a00b0010014b1b681847c046b80b0010014b1b681847c046d00b0010014b1b681847c046c00b0010014b1b681847c046c40b0010014b1b681847c046bc0b0010014b1b681847c046c80b0010014b1b681847c046b00b0010014b1b681847c046b40b0010014b1b681847c046cc0b0010014b1b681847c046d40b0010014b1b681847c046d80b0010014b1b681847c046e00b001040b4024e3668b44640bc6047e40b0010014b1b681847c046e80b0010014b1b681847c046dc0b0010014b1b681847c046440c0010014b1b681847c046ec0b0010014b1b681847c046fc0b0010014b1b681847c046200c0010014b1b681847c0462c0c0010014b1b681847c046340c0010014b1b681847c046380c0010014b1b681847c046100c0010014b1b681847c046000c0010014b1b681847c0461c0c0010014b1b681847c046080c0010014b1b681847c046280c0010014b1b681847c046240c001040b4024e3668b44640bc6047180c0010014b1b681847c046140c0010014b1b681847c0463c0c0010014b1b681847c046400c0010014b1b681847c0460c0c0010014b1b681847c046f00b0010014b1b681847c046f40b0010014b1b681847c046f80b0010014b1b681847c0466c0c0010014b1b681847c0465c0c0010014b1b681847c046680c0010014b1b681847c046640c0010014b1b681847c046480c0010014b1b681847c046580c0010014b1b681847c046700c0010014b1b681847c046600c0010014b1b681847c0464c0c0010014b1b681847c046740c0010014b1b681847c046500c0010014b1b681847c046540c0010014b1b681847c046300c001040b4024e3668b44640bc6047040c0010014b1b681847c046780c00107047000000b5054a4261054a8261054a0260fff719ff01bc00470000a40a0010d80a0010c008001000b5fff7abfe01bc0047000000b5fff7ddff01bc0047000000b5fff7d7ff01bc0047000010b581b0039c14380094fff755fe01b010bc01bc0047000000b51438fff7b6ff01bc004700b51438fff74efe01bc004700b51838fff7b0ff02bc0847ffffffff00000000ffffffff000000007c0800109c080010a40a0010d80a0010c00800104009001080080010c0090010a40a0010d80a0010c0080010400900101c0a0010600a0010a40a0010d80a0010c0080010f81520100a000000640065006600610075006c0074002e0070006c00000000000e0000005000650072006c004100700070004d0069006e0069006d0061006c00000000000000000000000000a50700100d060010190600102506001031060010f5020010010300103d0600104906001055060010610600106d0600100d030010d1050010ad03001095040010dd05001079060010b9030010c50300108506001095060010d1030010a1060010ad060010b9060010c5060010d1060010dd060010a905001000000000000000002d0000100d060010190600102506001031060010f5020010010300103d0600104906001055060010610600106d0600100d030010d1050010ad03001005010010dd05001079060010b9030010c50300108506001095060010d1030010a1060010ad060010b9060010c5060010d1060010dd060010f10100100000000000000000c9070010dd030010e9030010d1020010f5030010010400100d0400101904001025040010a1070010310400103d040010dd020010e9020010490400105504001061040010250200106d0400107d040010890400100000000000000000d5070010e9060010f5060010a9050010010700100d0700101907001025070010310700103d0700104907001055070010a9050010610700106d0700100000000000000000e1070010e9060010f50600100d000010010700100d0700101907001025070010310700103d0700104907001055070010fd010010610700106d070010ecffffff0000000005080010c1040010cd040010d9040010e5040010f504001001050010ed0700100d0500101108001019050010e8ffffff000000001d0800101903001025030010060000001b00000047000000520000006000000065000000ff00000000010000120000002700000033000000b7000000e3000000e6000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007b0000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b060000060000000900000080050000d1050000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000000000007102000054020000cc01000003000000060000001b00000047000000e101000005000000520000006000000065000000ff00000000010000f401000006000000120000002700000033000000b7000000e3000000e60000000802000023000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007b0000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd0000001e0200000b000000020000000300000029030000380300007c0400008c0400000205000003050000e00500002e0600004b0600003202000004000000060000000900000080050000d10500003e02000024000000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a80100004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0051494b43544c5b31303030356663395d2e444c4c00000c02000002010000000000000c02000014302830ac30b030b430b830d83120326032643268326c329032d832e432f032fc320833143320332c3338334833543360336c337833843390339c33a833b433c033cc33d833e433f033fc330834143420342c343834443450345c346834783484349034a034b034bc34c834d434e034f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35cc35d835e435f035fc350836143620362c363836443650365c3668367436803690369c36a836b436c036cc36d836e436f036fc360837143720372c373837443750375c3768377437803790379c37bc37c037c43738383c384038443848384c385038543858385c386038643868386c38703874387838c838cc38d038d438d838dc38e038e438e838ec38f038f438f838fc380039043908390c391039143918391c392039243928392c393039343938393c3948394c395039543958395c396039643968396c397039743978397c398039843988398c399039943998399c39a039a439a839ac39b039b439b839bc39c839cc39d039d439d839dc39e039e439e839ec39f039f439f839fc39003a043a083a0c3a103a143a183a243a283a2c3a303a343a383a3c3a403a443a483a4c3a503a543a583a5c3a683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983a9c3aa03aac3ab03ab43ab83abc3ac03ac43ac83acc3ad03ad43ae03ae43ae83a
400 # This is Symbian application resource skeleton.
401 # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
402 # by compiling the PerlApp.cpp.
403 # The following resource has been compiled using the UIQ 2.1 SDK
405 # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
406 if ($Variant eq 'UIQ') {
408 6b4a1f10000000005fde04001ca360de019a00f8030400000001f0e54d0000000004f0e54d04f0e54d0000000000000000000000000007010005f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0400000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000000050100000005055469746c6511460014000000000064b0f30001000200060650726f6d707411000800000000000000000a0001008000000005000000000d0d4f4b202f2043616e63656c203f0e460014000000000008f0e54d00000015010000000200feff00000000000000000000000002024f6b1a00ffffffff000000000101ffff000000000000000000000000060643616e63656c0b00ffffffff0000000001010005000000000a0a596573202f204e6f203f0e46001400000000000af0e54d00000015010000000200feff00000000000000000000000003035965732900ffffffff000000000101ffff000000000000000000000000024e006f0000ffffffff00000000010115001d001d0035005800de0016013a018201a301e801