Symbian/beginnings of Series 80 support
[p5sagit/p5-mst-13.2.git] / symbian / sisify.pl
CommitLineData
f26f4a2f 1#!/usr/bin/perl -w
2
3#
4# sisify.pl - package Perl scripts or Perl libraries into SIS files
5#
6# Copyright (c) 2004-2005 Nokia. All rights reserved.
f26f4a2f 7# The sisify.pl utility is licensed under the same terms as Perl itself.
8#
9
10require 5.008;
11
12use strict;
13
14use vars qw($VERSION);
15
c8f896e5 16$VERSION = '0.2';
f26f4a2f 17
18use Getopt::Long;
19use File::Temp qw/tempdir/;
20use File::Find;
21use File::Basename qw/basename dirname/;
22use Cwd qw/getcwd/;
23
f26f4a2f 24BEGIN {
c8f896e5 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:
f26f4a2f 28 # http://gnupoc.sourceforge.net/
29 # http://symbianos.org/~andreh/ You
30 # will also need the 'uidcrc' utility.
c8f896e5 31 die "$0: Looks like Cygwin, aborting.\n" if exists $ENV{'!C:'};
f26f4a2f 32}
33
34sub die_with_usage {
35 if (@_) {
36 warn "$0: $_\n" for @_;
37 }
38 die <<__USAGE__;
39$0: Usage:
ed76c0e4 40$0 [--variant=S60|S80] [ --uid=hhhhhhhh ] [ --version=a.b.c ] [ --library=x.y.z ] [ some.pl | Some.pm | somefile | dir ... ]
f26f4a2f 41The uid is the Symbian app uid for the SIS.
42The version is the version of the SIS.
43The library is the version of Perl under which to install. If using this,
c8f896e5 44only specify directories for packaging.
f26f4a2f 45__USAGE__
46}
47
48my $SisUid;
49my $SisVersion;
50my $Library;
51my @SisPl;
52my @SisPm;
53my @SisDir;
54my @SisOther;
55my $AppName;
56my $Debug;
57my $ShowPkg;
ed76c0e4 58my $Variant;
f26f4a2f 59
60my $SisUidDefault = 0x0acebabe;
61my $SisVersionDefault = '0.0.0';
ed76c0e4 62my $VariantDefault = 'S60';
63
64my %Variant = qw(S60 1 S80 1);
f26f4a2f 65
66die_with_usage()
67 unless GetOptions(
ed76c0e4 68 'variant=s' => \$Variant,
f26f4a2f 69 'uid=s' => \$SisUid,
70 'version=s' => \$SisVersion,
71 'debug' => \$Debug,
72 'showpkg' => \$ShowPkg,
73 'library=s' => \$Library,
74 'appname=s' => \$AppName,
75 );
76die_with_usage("Need to specify what to sisify")
77 unless @ARGV;
78
ed76c0e4 79unless (defined $Variant) {
80 warn "$0: Defaulting to $VariantDefault\n";
81 $Variant = $VariantDefault;
82}
83
84unless (exists $Variant{$Variant}) {
85 die "$0: Unknown variant '$Variant'\n";
86}
87
f26f4a2f 88for my $i (@ARGV) {
89 if ($i =~ /\.pl$/i) {
90 push @SisPl, $i;
91 } elsif ($i =~ /\.pm$/i) {
92 push @SisPm, $i;
93 } elsif (-f $i) {
94 push @SisOther, $i;
95 } elsif (-d $i) {
96 push @SisDir, $i;
97 } else {
98 die_with_usage("Unknown sisifiable '$i'");
99 }
100}
101
102sub do_system {
103 my $cwd = getcwd();
104 print qq{\# system("@_") [cwd "$cwd"]\n};
105 return system("@_") == 0;
106}
107
108die_with_usage("Must specify something to sisify")
109 unless @SisPl || @SisPm || @SisOther || @SisDir;
110
111die_with_usage("With the lib option set, specify only directories")
112 if defined $Library && ((@SisPl || @SisPm || @SisOther) || @SisDir == 0);
113
114die_with_usage("Lib must define the Perl 5 version as 5.x.y")
115 if defined $Library && $Library !~ /^5.\d+\.\d+$/;
116
117die_with_usage("With the lib option unset, specify at least one .pl file")
118 if (! defined $Library && @SisPl == 0);
119
120if (!defined $AppName) {
121 if (defined $Library) {
122 $AppName = $SisDir[0];
123 $AppName =~ tr!/!-!;
124 } elsif (@SisPl > 0 && $SisPl[0] =~ /^(.+)\.pl$/i) {
125 $AppName = basename($1);
126 }
127}
128
129die_with_usage("Must either specify appname or at least one .pl file or the lib option")
130 unless defined $AppName || defined $Library;
131
132print "[app name '$AppName']\n" if $Debug;
133
134unless (defined $SisUid) {
135 $SisUid = $SisUidDefault;
136 printf "[default app uid '0x%08x']\n", $SisUid;
137} elsif ($SisUid =~ /^(?:0x)?([0-9a-f]{8})$/i) {
138 $SisUid = hex($1);
139} else {
140 die_with_usage("Bad uid '$SisUid'");
141}
142$SisUid = sprintf "0x%08x", $SisUid;
143
144die_with_usage("Bad uid '$SisUid'")
145 if $SisUid !~ /^0x[0-9a-f]{8}$/i;
146
147unless (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'")
152}
153
154my $tempdir = tempdir( CLEANUP => 1 );
155
156print "[temp directory '$tempdir']\n" if $Debug;
157
158for 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);
c8f896e5 162 do_system("mkdir $tempdir\\$dir") unless $dir eq '.';
163 do_system("copy $file $tempdir");
f26f4a2f 164}
165if (@SisPl) {
c8f896e5 166 do_system("copy $SisPl[0] $tempdir\\default.pl")
167 unless $SisPl[0] eq "default.pl";
f26f4a2f 168}
169for my $dir (@SisDir) {
170 print "[copying directory '$dir']\n" if $Debug;
c8f896e5 171 do_system("copy $dir $tempdir");
f26f4a2f 172}
173
174my $SisVersionCommas = $SisVersion;
175
176$SisVersionCommas =~ s/\./\,/g;
177
178my @pkg;
179
c8f896e5 180push @pkg, qq[&EN;];
f26f4a2f 181push @pkg, qq[#{"$AppName"},($SisUid),$SisVersionCommas];
182push @pkg, qq[(0x101F6F88), 0, 0, 0, {"Series60ProductID"}];
183
184my $OWD = getcwd();
185
c8f896e5 186$OWD =~ s!/!\\!g;
187
f26f4a2f 188chdir($tempdir) or die "$0: chdir('$tempdir')\n";
c8f896e5 189
190if (@SisPl) {
191 if (open(my $fi, "default.pl")) {
192 my $fn = "default.pl.new";
193 if (open(my $fo, ">$fn")) {
194 while (<$fi>) {
195 last unless /^\#/;
196 print $fo $_;
197 }
198 print $fo "use lib qw(\\system\\apps\\$AppName \\system\\apps\\$AppName\\lib);\n";
199 printf $fo qq[# %d "$SisPl[0]"\n], $.;
200 print $fo $_;
201 while (<$fi>) {
202 print $fo $_;
203 }
204 close($fo);
205 } else {
206 die "$0: open '>$fn': $!\n";
207 }
208 close($fi);
209 rename($fn, "default.pl") or die "$0: rename $fn default.pl: $!\n";
210 # system("cat -nvet default.pl");
211 } else {
212 die "$0: open 'default.pl': $!\n";
213 }
214}
215
216
f26f4a2f 217my @c;
218find(
219 sub {
220 if (-f $_) {
221 $File::Find::name =~ s!^\./!!;
222 push @c, $File::Find::name;
223 }
224 }
225 ,
226 ".");
227
228for my $i (sort @c) {
229 my $j = $i;
230 $j =~ s!/!\\!g;
231 push @pkg, defined $Library ? qq["$j"-"!:\\System\\Libs\\Perl\\siteperl\\$Library\\$j"] : qq["$j"-"!:\\system\\apps\\$AppName\\$j"];
232}
233
234sub hex2data {
ed76c0e4 235 pack("H*", shift); # unpack("H*", $data) for the hex creation.
f26f4a2f 236}
237
238my $APPHEX;
239my $RSCHEX;
240
241unless ($Library) {
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.
246
247 &init_hex; # Initialized $APPHEX and $RSCHEX.
248
ed76c0e4 249 die "$0: No app template found\n" unless defined $APPHEX && defined $RSCHEX;
250
f26f4a2f 251 my $app = hex2data($APPHEX);
252 my $uidcrc;
253 my $uids = "0x10000079 0x100039CE $SisUid";
254
255 my $cmd = "uidcrc $uids |";
256
257 if (open(my $fh, $cmd)) {
258 my $line = <$fh>;
259 close($fh);
260 # 0x10000079 0x100039ce 0x0acebabe 0xc82b1900
261 $line =~ s/\r?\n$//;
262 if ($line =~ /^$uids (0x[0-9a-f]{8})$/i) {
263 $uidcrc = hex($1);
264 } else {
265 die "$0: uidcrc returned '$line'\n";
266 }
267 } else {
268 die qq[$0: open '$cmd' failed: $!\n];
269 }
270
271 my $uid = hex($SisUid);
272
273 my $oldchk = unpack('V', substr($app, 24, 4));
274 my $newchk = ($uid + $oldchk) & 0xFFFFFFFF;
275
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;
280
281 substr($app, 8, 4) = pack('V', $uid);
282 substr($app, 12, 4) = pack('V', $uidcrc);
283 substr($app, 24, 4) = pack('V', $newchk);
284
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.
287
288 if (open(my $fh, ">$AppName.app")) {
289 binmode($fh);
290 print $fh $app;
291 close($fh);
292 } else {
293 die qq[$0: open '>$AppName.app' failed: $!\n];
294 }
295
296 push @pkg, qq["$AppName.app"-"!:\\system\\apps\\$AppName\\$AppName.app"];
297
298 if (open(my $fh, ">$AppName.rsc")) {
299 binmode($fh);
300 print $fh hex2data($RSCHEX);
301 close($fh);
302 } else {
303 die qq[$0: open '>$AppName.rsc' failed: $!\n];
304 }
305 push @pkg, qq["$AppName.rsc"-"!:\\system\\apps\\$AppName\\$AppName.rsc"];
306}
307
308if ($ShowPkg) {
309 for my $l (@pkg) {
310 print $l, "\r\n";
311 }
312} else {
313 my $fn = "$AppName.pkg";
314 if (open(my $fh, ">$fn")) {
315 for my $l (@pkg) {
316 print $fh "$l\r\n"; # Note CRLF!
317 }
318 close($fh);
319 } else {
320 die qq[$0: Failed to open "$fn" for writing: $!\n];
321 }
322 my $sis = "$AppName.SIS";
323 unlink($sis);
c8f896e5 324 do_system("dir");
f26f4a2f 325 do_system("makesis $fn");
326 unless (-f $sis) {
327 die qq[$0: failed to create "$sis"\n];
328 }
c8f896e5 329 do_system("copy $AppName.sis $OWD");
330 chdir($OWD);
331 system("dir $sis");
f26f4a2f 332 print "\n=== Now transfer $sis to your device ===\n";
f26f4a2f 333}
334
335exit(0);
336
ed76c0e4 337# To create the hex: print unpack("H*", $data);
338
f26f4a2f 339sub init_hex {
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.
c8f896e5 343 # The following executable has been compiled using the Series 60 SDK 2.6
344 # for Visual C.
ed76c0e4 345 if ($Variant eq 'S60') {
346 $APPHEX = <<__APP__;
34779000010ce390010f61520108581107645504f430020000056176fa5000000000100bf00803e2bde56e1e0000300000180110000000000000010000000001000002000000000000001000000000000100000000007000000f8110000010000003c0f00007c00000000000000fc110000fc140000000000005e01000000b500f0f7f902bc084700000148006870470000280c001000b5011c024800f0b3fc01bc00470000480c001030b585b00490002100f004fd6846049900f046fb684600f01bf9011c049cb4256d006019016004980022002300f002fab6256d0065190020286000f003fa012100f006fa05b030bc01bc0047f0b5071c0e1c1e4878611e48b8611e48f8611e48b8641e48f8641e483860b42464003d192968002910d0786800f018fb2968002905d008688268081c032100f0a3f9b4246400391900200860b62464003d192868002803d000f060fc00202860b96a002905d008688268081c032100f08bf9381c311c00f0adfcf0bc01bc0047c40e0010280f0010180f0010f80e0010040f00105c0c001084b010b595b01790189119921a9301200021002200f07efc041c14a901a800f037fc002808d10090201c17a90222002300f076fc00f032fc00f036fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f0bbfa011c0a687ea8126a00f043f98026f6006e44301c00f07dfa2949301c7eaa002300f07dfac425ed006d44281c00f07ffa244c6c440021224868440160201c042100f07bfa301c00f07efa011c201c2a1c00f07ffa002824d1301c00f074fa011c8420000168448022520000f0f4fb8521090169446846fc22520000f0f2fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f070fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff2c0c0010480a000044080000480800004c0800004c0a000000b50120fff7e6fe01bc004700b5021c80204000814202d00348814206d1101c00f044fa05e00000c10b0000081cfff7e7ff01bc0047000010b500f007f8041c00f0aafb201c10bc02bc084730b5051c302000f0a7fb041c002c05d000f0f2f80748606007482060201c00f0a1fb201c291c00f009f8201c30bc02bc08470000d40c0010e40c001030b5041c0d1c00f0dff8201c291c00f0e1f82068016a201c00f08af830bc01bc0047000000b5044a4260044a026000f0d7f801bc00470000d40c0010e40c001030b584b0041c00f0d1f8051c6846211c00f0d2f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f053fb041c002c04d0291c00f085fb03482060201c30bc02bc08470000940d001070b5b820400000f03ffb061c002e18d000f0c4f90d48b0640d48f0640d4d75610d4cb4610d4bf3610d4ab2640d49f1640d4830600d483060301c6030802100f02ffb301c70bc02bc084700002c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c001010b58b20800000f019fb041c002c03d000f092f902482060201c10bc02bc0847f00d0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c0463c0f0010014b1b681847c046440f0010014b1b681847c046480f0010014b1b681847c046400f001040b4024e3668b44640bc6047900f0010014b1b681847c04610100010014b1b681847c0462c100010014b1b681847c0461c100010014b1b681847c046a00f0010014b1b681847c04608100010014b1b681847c04618100010014b1b681847c04614100010014b1b681847c046e80f0010014b1b681847c046dc0f0010014b1b681847c046d40f0010014b1b681847c04600100010014b1b681847c046fc0f0010014b1b681847c046980f0010014b1b681847c0468c0f0010014b1b681847c046e40f0010014b1b681847c04628100010014b1b681847c046f40f0010014b1b681847c04604100010014b1b681847c046c40f0010014b1b681847c046d80f0010014b1b681847c046bc0f0010014b1b681847c046a80f0010014b1b681847c046ac0f0010014b1b681847c046cc0f0010014b1b681847c046b80f0010014b1b681847c046b40f0010014b1b681847c046a40f0010014b1b681847c0460c100010014b1b681847c046e00f0010014b1b681847c0469c0f0010014b1b681847c046940f0010014b1b681847c046ec0f0010014b1b681847c046f00f0010014b1b681847c046d00f0010014b1b681847c046b00f0010014b1b681847c046c00f0010014b1b681847c046f80f0010014b1b681847c046c80f0010014b1b681847c04630100010014b1b681847c04634100010014b1b681847c04620100010014b1b681847c04624100010014b1b681847c0463c100010014b1b681847c04638100010014b1b681847c0465410001040b4024e3668b44640bc60474c100010014b1b681847c04650100010014b1b681847c04640100010014b1b681847c04648100010014b1b681847c04644100010014b1b681847c04668100010014b1b681847c046d8100010014b1b681847c04658100010014b1b681847c0468c100010014b1b681847c04624110010014b1b681847c04620110010014b1b681847c04638110010014b1b681847c046e8100010014b1b681847c04698100010014b1b681847c046a8100010014b1b681847c04608110010014b1b681847c046d4100010014b1b681847c046c8100010014b1b681847c04678100010014b1b681847c046ac100010014b1b681847c04614110010014b1b681847c046ec100010014b1b681847c046f0100010014b1b681847c04674100010014b1b681847c046c4100010014b1b681847c04660100010014b1b681847c046e0100010014b1b681847c04694100010014b1b681847c0465c100010014b1b681847c046f4100010014b1b681847c046bc100010014b1b681847c0467c100010014b1b681847c04688100010014b1b681847c046cc100010014b1b681847c04600110010014b1b681847c0460c110010014b1b681847c046f8100010014b1b681847c04690100010014b1b681847c046b8100010014b1b681847c046b4100010014b1b681847c046dc100010014b1b681847c046e4100010014b1b681847c04610110010014b1b681847c0462c11001040b4024e3668b44640bc6047b0100010014b1b681847c04604110010014b1b681847c04670100010014b1b681847c0469c100010014b1b681847c0466410001040b4024e3668b44640bc6047fc100010014b1b681847c04684100010014b1b681847c04680100010014b1b681847c046c0100010014b1b681847c04628110010014b1b681847c0466c10001040b4024e3668b44640bc6047d0100010014b1b681847c046a0100010014b1b681847c04630110010014b1b681847c0463411001040b4024e3668b44640bc6047a4100010014b1b681847c0461c110010014b1b681847c04618110010014b1b681847c04644110010014b1b681847c04664110010014b1b681847c04654110010014b1b681847c04658110010014b1b681847c04648110010014b1b681847c0465c110010014b1b681847c0463c110010014b1b681847c0464c110010014b1b681847c04640110010014b1b681847c04650110010014b1b681847c04660110010014b1b681847c04668110010014b1b681847c0466c110010014b1b681847c0467011001040b4024e3668b44640bc604774110010014b1b681847c0464c0f0010014b1b681847c046840f0010014b1b681847c046880f0010014b1b681847c046640f0010014b1b681847c046740f0010014b1b681847c046540f0010014b1b681847c0465c0f001040b4024e3668b44640bc6047500f0010014b1b681847c046800f0010014b1b681847c0467c0f0010014b1b681847c046700f0010014b1b681847c0466c0f001040b4024e3668b44640bc6047680f0010014b1b681847c046580f0010014b1b681847c046600f0010014b1b681847c046780f00107047000000b5fff72fff01bc0047000000b5fff72fff01bc0047000000b5fff723ff01bc0047000010b581b0039c14380094fff7b1fe01b010bc01bc0047000000b51438fff7d6ff01bc004700b51438fff7aafe01bc004700b51838fff7fcfe02bc084700b51c38fff7f0fe02bc084700b51c38fff7e4fe02bc084700b50438fff774fd02bc084700b50438fff768fd02bc084700b54838fff7a0ff01bc004700b54c38fff7a0ff01bc0047ffffffff00000000ffffffff00000000280c0010480c0010c40e0010280f0010180f0010f80e0010040f00105c0c00102c0c0010d40c0010e40c0010d40c0010e40c0010940d00102c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c0010580d0010f00d0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d0600102d00001039070010590100104507001051020010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010fcffffff00000000910b0010850b00100000000000000000f1020010d1040010dd040010e9040010f5040010010500100d0500101905001025050010310500103d0500104905001055050010610500106d0500107905001085050010910500109d050010a9050010b5050010c1050010cd050010d90500100d030010e5050010f105001000000000000000000d0b0010bd0a0010a5070010190a0010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010190a00100000000000000000190b0010f9070010050800103d040010110800101d080010290800103508001041080010090b00104d08001059080010490400105504001065080010710800107d08001061030010d50a001089080010950800100000000000000000250b0010bd0a0010a50700100d000010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010390300100000000000000000190a00100000000000000000190a0010390600104506001000000000000000004d0a0010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d06001021090010390700102d090010450700103d090010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010ecffffff00000000490b0010bd080010c9080010d5080010e1080010f1080010fd080010310b001009090010550b001015090010b8ffffff000000009d0b0010b4ffffff00000000a90b00103906001045060010e4ffffff00000000790b00106d0b0010e8ffffff00000000610b0010510600105d06001003000000060000001b000000470000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000040000008905000000000000d103000000030000780200000400000003000000060000001b000000470000008d020000100000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000a10200002d000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000b402000006000000120000002700000033000000b7000000e3000000e6000000c80200003900000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000de0200000d000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000f20200000200000004000000890500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000c00200005c01000000000000c002000014302830f830fc300031043108310c312c32c432c832043308335c33ac33b033b433b833bc33c033c433c833cc33f0333834443450345c346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f835043610361c362836343640364c365836643670367c3688369836a436b036bc36c836d436e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38ac38b838c438d038dc38ec38f838043910391c3928393839443950395c396c397839843990399c39a839b439c039cc39d839e439f039fc39083a143a203a2c3a3c3a483a543a603a6c3a783a843a903aa03aac3ab83ac43ad03ae03aec3af83a043bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c1c3c203c243c643c683c6c3c703c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca03ca43ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cdc3ce03cec3cf03cf43cf83cfc3c003d043d083d0c3d103d143d183d1c3d203d243d283d2c3d303d343d383d3c3d403d443d483d4c3d503d543d603d643d683d6c3d703d743d783d7c3d803d843d883d8c3d903d9c3da03da43da83dac3db03db43db83dbc3dc03dc43dc83dcc3dd03dd43dd83ddc3de03de43de83dec3df83dfc3d003e043e083e0c3e103e143e183e1c3e203e243e283e343e403e443e483e543e583e5c3e603e643e683e6c3e703e743e783e7c3e803e843e883e8c3e903e943e983e9c3ea03ea43ea83eac3eb03eb43eb83ebc3ec03ecc3ed03ed43ed83edc3ee03ee43ee83eec3ef03ef43e003f0c3f103f143f203f243f303f343f383f
f26f4a2f 348__APP__
ed76c0e4 349 }
f26f4a2f 350
351 # This is Symbian application resource skeleton.
352 # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
353 # by compiling the PerlApp.cpp.
c8f896e5 354 # The following resource has been compiled using the Series 60 SDK 2.6
355 # for Visual C.
ed76c0e4 356 if ($Variant eq 'S60') {
357 $RSCHEX = <<__RSC__;
3586b4a1f10000000005fde04001ca360de01b80010000400000001f0e54d0000000004f0e54d00000000000000001a00cc0800000000010005f0e54d000000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000120000000000000001400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000000120000000000000002400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000004122000000000000001400cc08010069160000050000000001000000000000000001000000040007000800ff020100ffffffff00000000000000000000ffff000000000000004122000000000000001400cc08010074160007000000000054160000ffffffff000000000000ffff00000000000000000000000015001d001d0035004d00ef0026015d01a301d201d701
f26f4a2f 359__RSC__
ed76c0e4 360 }
361
362 # This is Symbian application executable skeleton.
363 # You can create the ...\epoc32\release\thumb\urel\foo.app
364 # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
365 # The following executable has been compiled using the Series 80 SDK 2.0
366 # for Visual C.
367 if ($Variant eq 'S80') {
368 $APPHEX = <<__APP__;
36979000010ce390010f61520108581107645504f43002000009f6ac520000000000100bb00401aaa8157e1e00003000001980e0000000000000010000000001000002000000000000001000000000000100000000007000000100f000001000000900c00007c00000000000000140f0000dc110000000000005e01000000b500f0cff902bc0847000001480068704700009c0a001000b5011c024800f075fc01bc00470000bc0a001030b585b00490002100f0e6fa6846049900f0e8fa684600f013f9011c049c9e256d006019016004980022002300f0daf9a0256d0065190020286000f0dbf9012100f0def905b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b4838609e2464003d192968002910d0786800f0c0fa2968002905d008688268081c032100f081f99e246400391900200860a02464003d192868002803d000f028fc00202860796a002905d008688268081c032100f069f9381c311c00f0a1faf0bc01bc0047480c00107c0c0010d00a001084b010b595b01790189119921a9301200021002200f046fc041c14a901a800f005fc002808d10090201c17a90222002300f03efc00f000fc00f004fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f06ffa011c0a687ea8126a00f027f98026f6006e44301c00f025fa2949301c7eaa002300f025fac425ed006d44281c00f027fa244c6c440021224868440160201c042100f023fa301c00f026fa011c201c2a1c00f027fa002824d1301c00f01cfa011c8420000168448022520000f0c2fb8521090169446846fc22520000f0c0fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f024fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa00a0010480a000044080000480800004c0800004c0a000000b50120fff7f2fe01bc004700b5081cfff7f6ff01bc004710b5021c80204000814203d1101c00f0f5f905e09e24640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f074fb201c10bc02bc084730b5051c2c2000f071fb041c002c03d000f092fb06482060201c00f06dfb201c291c00f007f8201c30bc02bc084700003c0b001030b5041c0d1c00f0bdf8201c291c00f0bff82068016a201c00f06ef830bc01bc0047000000b5034a026000f0b7f801bc004700003c0b001030b584b0041c00f0b3f8051c6846211c00f0b4f82868b8300268281c694600f051f804b030bc01bc0047000030b5051c242000f025fb041c002c04d0291c00f08ff903482060201c30bc02bc08470000b00b001010b5a220400000f011fb041c002c0cd000f082f9074860610748a06107482060201c3430802100f00dfb201c10bc02bc08470000480c00107c0c0010d00a001010b58b20800000f003fb041c002c03d000f068f902482060201c10bc02bc08470c0c0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046900c0010014b1b681847c046980c0010014b1b681847c0469c0c0010014b1b681847c046940c001040b4024e3668b44640bc6047a40c0010014b1b681847c046100d0010014b1b681847c046280d0010014b1b681847c046b40c0010014b1b681847c046080d0010014b1b681847c046180d0010014b1b681847c046140d0010014b1b681847c046f00c0010014b1b681847c046e40c0010014b1b681847c046dc0c0010014b1b681847c046000d0010014b1b681847c046fc0c0010014b1b681847c046ac0c0010014b1b681847c046a00c0010014b1b681847c046ec0c0010014b1b681847c046240d0010014b1b681847c046040d0010014b1b681847c046e00c0010014b1b681847c046bc0c0010014b1b681847c046d40c0010014b1b681847c046c80c0010014b1b681847c046c40c0010014b1b681847c046b80c0010014b1b681847c0460c0d0010014b1b681847c046e80c0010014b1b681847c046b00c0010014b1b681847c046a80c0010014b1b681847c046f40c0010014b1b681847c046d80c0010014b1b681847c046c00c0010014b1b681847c046cc0c0010014b1b681847c046f80c0010014b1b681847c046d00c0010014b1b681847c0461c0d0010014b1b681847c046200d0010014b1b681847c046400d001040b4024e3668b44640bc6047380d0010014b1b681847c0463c0d0010014b1b681847c0462c0d0010014b1b681847c046340d0010014b1b681847c046300d0010014b1b681847c046540e0010014b1b681847c0466c0d0010014b1b681847c046e80d0010014b1b681847c046300e0010014b1b681847c0465c0d0010014b1b681847c0468c0d0010014b1b681847c046340e0010014b1b681847c0463c0e0010014b1b681847c046380e0010014b1b681847c046480e0010014b1b681847c046500e0010014b1b681847c046f40d0010014b1b681847c046fc0d0010014b1b681847c046440e0010014b1b681847c046b40d0010014b1b681847c046980d0010014b1b681847c046a80d0010014b1b681847c046e40d0010014b1b681847c046d00d0010014b1b681847c046780d001040b4024e3668b44640bc6047a00d0010014b1b681847c046ac0d0010014b1b681847c046240e0010014b1b681847c046000e0010014b1b681847c046040e0010014b1b681847c046d80d0010014b1b681847c046740d0010014b1b681847c046d40d0010014b1b681847c046c80d0010014b1b681847c046640d0010014b1b681847c046f00d0010014b1b681847c046940d0010014b1b681847c046600d0010014b1b681847c046080e0010014b1b681847c046c00d0010014b1b681847c0467c0d0010014b1b681847c046880d0010014b1b681847c046dc0d0010014b1b681847c046140e0010014b1b681847c0461c0e0010014b1b681847c0460c0e0010014b1b681847c046900d0010014b1b681847c046bc0d0010014b1b681847c046b80d0010014b1b681847c046ec0d0010014b1b681847c046f80d001040b4024e3668b44640bc6047cc0d0010014b1b681847c046200e0010014b1b681847c0464c0e001040b4024e3668b44640bc6047a40d0010014b1b681847c046e00d001040b4024e3668b44640bc6047b00d0010014b1b681847c046180e0010014b1b681847c046700d0010014b1b681847c0469c0d0010014b1b681847c046680d001040b4024e3668b44640bc6047100e0010014b1b681847c046840d0010014b1b681847c046800d0010014b1b681847c046c40d0010014b1b681847c046400e0010014b1b681847c0462c0e0010014b1b681847c046280e0010014b1b681847c046600e0010014b1b681847c046800e0010014b1b681847c046700e0010014b1b681847c046740e0010014b1b681847c046640e0010014b1b681847c046780e0010014b1b681847c046580e0010014b1b681847c046680e0010014b1b681847c0465c0e0010014b1b681847c0466c0e0010014b1b681847c0467c0e0010014b1b681847c046840e0010014b1b681847c046880e001040b4024e3668b44640bc60478c0e0010014b1b681847c046540d0010014b1b681847c046500d0010014b1b681847c0464c0d0010014b1b681847c046480d0010014b1b681847c046440d0010014b1b681847c046580d00107047000000b5fff77bff01bc0047000000b5fff76fff01bc0047000010b581b0039c14380094fff725ff01b010bc01bc0047000000b51438fff716ff01bc004700b51438fff71eff01bc004700b51838fff702ff02bc0847ffffffff00000000ffffffff000000009c0a0010bc0a0010480c00107c0c0010d00a0010a00a00103c0b00103c0b0010b00b0010480c00107c0c0010d00a00100c0c0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010710600107d06001089060010950600106505001071050010a10600107d050010ad060010b906001089050010950500102d000010c50600104101001045020010d1060010dd060010e9060010f506001005070010110700101d070010290700100000000000000000d902001075040010810400108d04001099040010a5040010b1040010bd040010c9040010c5090010d5040010d1090010e1040010dd090010e9090010ed040010f904001005050010110500101d0500102905001035050010410500104d050010ed020010f5090010590500100000000000000000050a0010a1070010ad070010ed030010b9070010c5070010d1070010dd070010e9070010010a0010f507001001080010f9030010050400100d08001019080010250800104103001031080010410800104d0800100000000000000000110a001035070010410700100d0000104d07001059070010e103001065070010710700107d070010890700109507001019030010ecffffff00000000350a0010910800109d080010a9080010b5080010c5080010d10800101d0a0010dd080010410a0010e9080010e8ffffff000000004d0a0010a1050010ad05001003000000060000001b00000047000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff000000000100001401000015010000120000002700000033000000b7000000e3000000e6000000260100005601000065010000800200000a040000af04000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e06000004000000890500000000000081030000c80200003c0200000400000003000000060000001b000000470000005102000023000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff0000000001000014010000150100006402000006000000120000002700000033000000b7000000e3000000e60000007802000006000000260100005601000065010000800200000a040000af0400008f0200003f00000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000a50200000c000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e060000b90200000200000004000000890500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0000000004020000fe000000000000000402000014302830ec30f030f4301432b032e8323c33743378337c33a033e833f43300340c341c342834343440344c345834643470347c3488349434a034ac34b834c434d034dc34e834f43400350c351835243530353c354835543560356c357835843590359c35a835b435c035d035dc35e835f43500360c361836243630363c364836543660366c367836843690369c36a836b436c036cc36d836e436f03600370c371837243730373c374837543760376c377837843790379c37a837b437c037cc37d837e437f037fc370838143820382c383c38483854386438703880388c389838a438b038c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b439c039cc39d839e439f039fc39683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983ad83adc3ae03ae43ae83aec3af03af43af83afc3a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b343b383b443b483b4c3b503b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b903b943b983b9c3ba03ba43ba83bac3bb83bbc3bc03bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c143c183c1c3c203c243c283c2c3c303c343c383c3c3c403c443c503c543c583c5c3c603c643c683c6c3c703c743c783c843c883c8c3c__APP__
370 }
371
372 # This is Symbian application resource skeleton.
373 # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
374 # by compiling the PerlApp.cpp.
375 # The following resource has been compiled using the Series 80 SDK 2.0
376 # for Visual C.
377 if ($Variant eq 'S80') {
378 $RSCHEX = <<__RSC__;
3796b4a1f10000000005fde04001ca360de01b800380400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000014001c001c0034008200a5004701__RSC__
380 }
f26f4a2f 381}