blead 25801: Symbian batch of today
[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:
40$0 [ --uid=hhhhhhhh ] [ --version=a.b.c ] [ --library=x.y.z ] [ some.pl | Some.pm | somefile | dir ... ]
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;
58
59my $SisUidDefault = 0x0acebabe;
60my $SisVersionDefault = '0.0.0';
61
62die_with_usage()
63 unless GetOptions(
64 'uid=s' => \$SisUid,
65 'version=s' => \$SisVersion,
66 'debug' => \$Debug,
67 'showpkg' => \$ShowPkg,
68 'library=s' => \$Library,
69 'appname=s' => \$AppName,
70 );
71die_with_usage("Need to specify what to sisify")
72 unless @ARGV;
73
74for my $i (@ARGV) {
75 if ($i =~ /\.pl$/i) {
76 push @SisPl, $i;
77 } elsif ($i =~ /\.pm$/i) {
78 push @SisPm, $i;
79 } elsif (-f $i) {
80 push @SisOther, $i;
81 } elsif (-d $i) {
82 push @SisDir, $i;
83 } else {
84 die_with_usage("Unknown sisifiable '$i'");
85 }
86}
87
88sub do_system {
89 my $cwd = getcwd();
90 print qq{\# system("@_") [cwd "$cwd"]\n};
91 return system("@_") == 0;
92}
93
94die_with_usage("Must specify something to sisify")
95 unless @SisPl || @SisPm || @SisOther || @SisDir;
96
97die_with_usage("With the lib option set, specify only directories")
98 if defined $Library && ((@SisPl || @SisPm || @SisOther) || @SisDir == 0);
99
100die_with_usage("Lib must define the Perl 5 version as 5.x.y")
101 if defined $Library && $Library !~ /^5.\d+\.\d+$/;
102
103die_with_usage("With the lib option unset, specify at least one .pl file")
104 if (! defined $Library && @SisPl == 0);
105
106if (!defined $AppName) {
107 if (defined $Library) {
108 $AppName = $SisDir[0];
109 $AppName =~ tr!/!-!;
110 } elsif (@SisPl > 0 && $SisPl[0] =~ /^(.+)\.pl$/i) {
111 $AppName = basename($1);
112 }
113}
114
115die_with_usage("Must either specify appname or at least one .pl file or the lib option")
116 unless defined $AppName || defined $Library;
117
118print "[app name '$AppName']\n" if $Debug;
119
120unless (defined $SisUid) {
121 $SisUid = $SisUidDefault;
122 printf "[default app uid '0x%08x']\n", $SisUid;
123} elsif ($SisUid =~ /^(?:0x)?([0-9a-f]{8})$/i) {
124 $SisUid = hex($1);
125} else {
126 die_with_usage("Bad uid '$SisUid'");
127}
128$SisUid = sprintf "0x%08x", $SisUid;
129
130die_with_usage("Bad uid '$SisUid'")
131 if $SisUid !~ /^0x[0-9a-f]{8}$/i;
132
133unless (defined $SisVersion) {
134 $SisVersion = $SisVersionDefault;
135 print "[default app version '$SisVersionDefault']\n";
136} elsif ($SisVersion !~ /^\d+\.\d+\.\d+$/) {
137 die_with_usage("Bad version '$SisVersion'")
138}
139
140my $tempdir = tempdir( CLEANUP => 1 );
141
142print "[temp directory '$tempdir']\n" if $Debug;
143
144for my $file (@SisPl, @SisPm, @SisOther) {
145 print "[copying file '$file']\n" if $Debug;
146 die_with_usage("$0: File '$file': $!") unless -f $file;
147 my $dir = dirname($file);
c8f896e5 148 do_system("mkdir $tempdir\\$dir") unless $dir eq '.';
149 do_system("copy $file $tempdir");
f26f4a2f 150}
151if (@SisPl) {
c8f896e5 152 do_system("copy $SisPl[0] $tempdir\\default.pl")
153 unless $SisPl[0] eq "default.pl";
f26f4a2f 154}
155for my $dir (@SisDir) {
156 print "[copying directory '$dir']\n" if $Debug;
c8f896e5 157 do_system("copy $dir $tempdir");
f26f4a2f 158}
159
160my $SisVersionCommas = $SisVersion;
161
162$SisVersionCommas =~ s/\./\,/g;
163
164my @pkg;
165
c8f896e5 166push @pkg, qq[&EN;];
f26f4a2f 167push @pkg, qq[#{"$AppName"},($SisUid),$SisVersionCommas];
168push @pkg, qq[(0x101F6F88), 0, 0, 0, {"Series60ProductID"}];
169
170my $OWD = getcwd();
171
c8f896e5 172$OWD =~ s!/!\\!g;
173
f26f4a2f 174chdir($tempdir) or die "$0: chdir('$tempdir')\n";
c8f896e5 175
176if (@SisPl) {
177 if (open(my $fi, "default.pl")) {
178 my $fn = "default.pl.new";
179 if (open(my $fo, ">$fn")) {
180 while (<$fi>) {
181 last unless /^\#/;
182 print $fo $_;
183 }
184 print $fo "use lib qw(\\system\\apps\\$AppName \\system\\apps\\$AppName\\lib);\n";
185 printf $fo qq[# %d "$SisPl[0]"\n], $.;
186 print $fo $_;
187 while (<$fi>) {
188 print $fo $_;
189 }
190 close($fo);
191 } else {
192 die "$0: open '>$fn': $!\n";
193 }
194 close($fi);
195 rename($fn, "default.pl") or die "$0: rename $fn default.pl: $!\n";
196 # system("cat -nvet default.pl");
197 } else {
198 die "$0: open 'default.pl': $!\n";
199 }
200}
201
202
f26f4a2f 203my @c;
204find(
205 sub {
206 if (-f $_) {
207 $File::Find::name =~ s!^\./!!;
208 push @c, $File::Find::name;
209 }
210 }
211 ,
212 ".");
213
214for my $i (sort @c) {
215 my $j = $i;
216 $j =~ s!/!\\!g;
217 push @pkg, defined $Library ? qq["$j"-"!:\\System\\Libs\\Perl\\siteperl\\$Library\\$j"] : qq["$j"-"!:\\system\\apps\\$AppName\\$j"];
218}
219
220sub hex2data {
221 local $_ = shift;
222 my $data;
223 while (/([0-9a-f]{2})/ig) {
224 $data .= chr(hex($1));
225 }
226 return $data;
227}
228
229my $APPHEX;
230my $RSCHEX;
231
232unless ($Library) {
233 # If we package an application we will need both a launching native
234 # Symbian application and a resource file for it. The resource file
235 # we can get easily from a stub but for the native app we need to
236 # patch in the right Symbian app uids and executable checksums.
237
238 &init_hex; # Initialized $APPHEX and $RSCHEX.
239
240 my $app = hex2data($APPHEX);
241 my $uidcrc;
242 my $uids = "0x10000079 0x100039CE $SisUid";
243
244 my $cmd = "uidcrc $uids |";
245
246 if (open(my $fh, $cmd)) {
247 my $line = <$fh>;
248 close($fh);
249 # 0x10000079 0x100039ce 0x0acebabe 0xc82b1900
250 $line =~ s/\r?\n$//;
251 if ($line =~ /^$uids (0x[0-9a-f]{8})$/i) {
252 $uidcrc = hex($1);
253 } else {
254 die "$0: uidcrc returned '$line'\n";
255 }
256 } else {
257 die qq[$0: open '$cmd' failed: $!\n];
258 }
259
260 my $uid = hex($SisUid);
261
262 my $oldchk = unpack('V', substr($app, 24, 4));
263 my $newchk = ($uid + $oldchk) & 0xFFFFFFFF;
264
265 # printf "# uid = 0x%08x\n", $uid;
266 # printf "# uidcrc = 0x%08x\n", $uidcrc;
267 # printf "# oldchk = 0x%08x\n", $oldchk;
268 # printf "# newchk = 0x%08x\n", $newchk;
269
270 substr($app, 8, 4) = pack('V', $uid);
271 substr($app, 12, 4) = pack('V', $uidcrc);
272 substr($app, 24, 4) = pack('V', $newchk);
273
274 my $UID_OFFSET = 0x0C7C; # This is where the uid is in the $app.
275 substr($app, $UID_OFFSET, 4) = substr($app, 8, 4); # Copy the uid also here.
276
277 if (open(my $fh, ">$AppName.app")) {
278 binmode($fh);
279 print $fh $app;
280 close($fh);
281 } else {
282 die qq[$0: open '>$AppName.app' failed: $!\n];
283 }
284
285 push @pkg, qq["$AppName.app"-"!:\\system\\apps\\$AppName\\$AppName.app"];
286
287 if (open(my $fh, ">$AppName.rsc")) {
288 binmode($fh);
289 print $fh hex2data($RSCHEX);
290 close($fh);
291 } else {
292 die qq[$0: open '>$AppName.rsc' failed: $!\n];
293 }
294 push @pkg, qq["$AppName.rsc"-"!:\\system\\apps\\$AppName\\$AppName.rsc"];
295}
296
297if ($ShowPkg) {
298 for my $l (@pkg) {
299 print $l, "\r\n";
300 }
301} else {
302 my $fn = "$AppName.pkg";
303 if (open(my $fh, ">$fn")) {
304 for my $l (@pkg) {
305 print $fh "$l\r\n"; # Note CRLF!
306 }
307 close($fh);
308 } else {
309 die qq[$0: Failed to open "$fn" for writing: $!\n];
310 }
311 my $sis = "$AppName.SIS";
312 unlink($sis);
c8f896e5 313 do_system("dir");
f26f4a2f 314 do_system("makesis $fn");
315 unless (-f $sis) {
316 die qq[$0: failed to create "$sis"\n];
317 }
c8f896e5 318 do_system("copy $AppName.sis $OWD");
319 chdir($OWD);
320 system("dir $sis");
f26f4a2f 321 print "\n=== Now transfer $sis to your device ===\n";
f26f4a2f 322}
323
324exit(0);
325
326sub init_hex {
327 # This is Symbian application executable skeleton.
328 # You can create the ...\epoc32\release\thumb\urel\foo.app
329 # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
c8f896e5 330 # The following executable has been compiled using the Series 60 SDK 2.6
331 # for Visual C.
f26f4a2f 332 $APPHEX = <<__APP__;
3337900 0010 ce39 0010 f615 2010 8581 1076
3344550 4f43 0020 0000 05fc d15d 0000 0000
3350100 bf00 0048 827a 9ee0 e000 0300 0001
3365811 0000 0000 0000 0010 0000 0000 1000
3370020 0000 0000 0000 0100 0000 0000 0010
3380000 0000 0700 0000 d011 0000 0100 0000
339140f 0000 7c00 0000 0000 0000 d411 0000
340d414 0000 0000 0000 5e01 0000 00b5 00f0
341d5f9 02bc 0847 0000 0148 0068 7047 0000
342000c 0010 00b5 011c 0248 00f0 f5fc 01bc
3430047 0000 200c 0010 10b5 84b0 041c 0021
34400f0 f2f9 6846 211c 00f0 88fb 6846 00f0
34507f9 011c 2166 201c 0022 0023 00f0 48fa
3460020 6066 00f0 4cfa 0121 00f0 4ffa 04b0
34710bc 01bc 0047 0000 30b5 041c 0d1c 1a48
3486061 1a48 a061 1a48 e061 1a48 a064 1a48
349e064 1a48 2060 216e 0029 0dd0 6068 00f0
35063fb 216e 0029 05d0 0868 8268 081c 0321
35100f0 8af9 0020 2066 606e 0028 03d0 00f0
352b1fc 0020 6066 a16a 0029 05d0 0868 8268
353081c 0321 00f0 78f9 201c 291c 00f0 aaf9
35430bc 01bc 0047 0000 9c0e 0010 000f 0010
355f00e 0010 d00e 0010 dc0e 0010 340c 0010
35684b0 10b5 95b0 1790 1891 1992 1a93 0120
3570021 0022 00f0 cefc 041c 14a9 01a8 00f0
35887fc 0028 08d1 0090 201c 17a9 0222 0023
35900f0 c6fc 00f0 82fc 00f0 86fc 15b0 10bc
36008bc 04b0 1847 0000 f0b5 4746 80b4 324c
361a544 071c 8846 0229 52d1 00f0 0bfb 011c
3620a68 7ea8 126a 00f0 2ff9 8026 f600 6e44
363301c 00f0 cdfa 2949 301c 7eaa 0023 00f0
364cdfa c425 ed00 6d44 281c 00f0 cffa 244c
3656c44 0021 2248 6844 0160 201c 0421 00f0
366cbfa 301c 00f0 cefa 011c 201c 2a1c 00f0
367cffa 0028 24d1 301c 00f0 c4fa 011c 8420
3680001 6844 8022 5200 00f0 44fc 8521 0901
3696944 6846 fc22 5200 00f0 42fc 8420 0001
3706844 0068 0f49 6944 0968 0f4a 6a44 1268
3710e4b 6b44 1b68 fff7 83ff 381c 00f0 c0fa
3720020 4446 002c 00d1 0120 094b 9d44 08bc
3739846 f0bc 02bc 0847 b4f5 ffff 040c 0010
374480a 0000 4408 0000 4808 0000 4c08 0000
3754c0a 0000 00b5 021c 8020 4000 8142 02d0
3760348 8142 06d1 101c 00f0 9afa 05e0 0000
377c10b 0000 0120 fff7 e5fe 01bc 0047 0000
37810b5 00f0 07f8 041c 00f0 00fc 201c 10bc
37902bc 0847 30b5 051c 3020 00f0 fdfb 041c
380002c 05d0 00f0 48f9 0748 6060 0748 2060
381201c 00f0 f7fb 201c 291c 00f0 09f8 201c
38230bc 02bc 0847 0000 ac0c 0010 bc0c 0010
38330b5 041c 0d1c 00f0 35f9 201c 291c 00f0
38437f9 2068 016a 201c 00f0 7cf8 30bc 01bc
3850047 0000 30b5 84b0 041c 00f0 2ff9 051c
3866846 211c 00f0 30f9 2868 b830 0268 281c
3876946 00f0 69f8 04b0 30bc 01bc 0047 0000
38830b5 051c 2420 00f0 b7fb 041c 002c 04d0
389291c 00f0 95f8 0348 2060 201c 30bc 02bc
3900847 0000 6c0d 0010 70b5 8820 4000 00f0
391a3fb 061c 002e 18d0 00f0 28fa 0d48 b064
3920d48 f064 0d4d 7561 0d4c b461 0d4b f361
3930d4a b264 0d49 f164 0d48 3060 0d48 3060
394301c 6830 5021 00f0 93fb 301c 70bc 02bc
3950847 0000 040e 0010 100e 0010 9c0e 0010
396000f 0010 f00e 0010 d00e 0010 dc0e 0010
397240e 0010 340c 0010 10b5 8b20 8000 00f0
3987dfb 041c 002c 03d0 00f0 f6f9 0248 2060
399201c 10bc 02bc 0847 c80d 0010 0020 7047
4000047 7047 0847 7047 1047 7047 1847 7047
4012047 7047 2847 7047 3047 7047 3847 7047
4024047 7047 4847 7047 5047 7047 5847 7047
4036047 7047 7047 7047 014b 1b68 1847 c046
404140f 0010 014b 1b68 1847 c046 1c0f 0010
405014b 1b68 1847 c046 200f 0010 014b 1b68
4061847 c046 180f 0010 014b 1b68 1847 c046
407240f 0010 014b 1b68 1847 c046 5c0f 0010
408014b 1b68 1847 c046 600f 0010 014b 1b68
4091847 c046 3c0f 0010 014b 1b68 1847 c046
4104c0f 0010 014b 1b68 1847 c046 2c0f 0010
411014b 1b68 1847 c046 340f 0010 40b4 024e
4123668 b446 40bc 6047 280f 0010 014b 1b68
4131847 c046 580f 0010 014b 1b68 1847 c046
414540f 0010 014b 1b68 1847 c046 480f 0010
415014b 1b68 1847 c046 440f 0010 40b4 024e
4163668 b446 40bc 6047 400f 0010 014b 1b68
4171847 c046 300f 0010 014b 1b68 1847 c046
418380f 0010 014b 1b68 1847 c046 500f 0010
41940b4 024e 3668 b446 40bc 6047 680f 0010
420014b 1b68 1847 c046 e80f 0010 014b 1b68
4211847 c046 0410 0010 014b 1b68 1847 c046
422f40f 0010 014b 1b68 1847 c046 780f 0010
423014b 1b68 1847 c046 e00f 0010 014b 1b68
4241847 c046 ec0f 0010 014b 1b68 1847 c046
425c00f 0010 014b 1b68 1847 c046 b40f 0010
426014b 1b68 1847 c046 ac0f 0010 014b 1b68
4271847 c046 d80f 0010 014b 1b68 1847 c046
428d40f 0010 014b 1b68 1847 c046 700f 0010
429014b 1b68 1847 c046 640f 0010 014b 1b68
4301847 c046 bc0f 0010 014b 1b68 1847 c046
4310010 0010 014b 1b68 1847 c046 cc0f 0010
432014b 1b68 1847 c046 dc0f 0010 014b 1b68
4331847 c046 9c0f 0010 014b 1b68 1847 c046
434b00f 0010 014b 1b68 1847 c046 940f 0010
435014b 1b68 1847 c046 800f 0010 014b 1b68
4361847 c046 840f 0010 014b 1b68 1847 c046
437a40f 0010 014b 1b68 1847 c046 900f 0010
438014b 1b68 1847 c046 8c0f 0010 014b 1b68
4391847 c046 7c0f 0010 014b 1b68 1847 c046
440e40f 0010 014b 1b68 1847 c046 b80f 0010
441014b 1b68 1847 c046 740f 0010 014b 1b68
4421847 c046 6c0f 0010 014b 1b68 1847 c046
443c40f 0010 014b 1b68 1847 c046 c80f 0010
444014b 1b68 1847 c046 a80f 0010 014b 1b68
4451847 c046 880f 0010 014b 1b68 1847 c046
446980f 0010 014b 1b68 1847 c046 d00f 0010
447014b 1b68 1847 c046 a00f 0010 014b 1b68
4481847 c046 0810 0010 014b 1b68 1847 c046
4490c10 0010 014b 1b68 1847 c046 f80f 0010
450014b 1b68 1847 c046 fc0f 0010 014b 1b68
4511847 c046 1410 0010 014b 1b68 1847 c046
4521010 0010 014b 1b68 1847 c046 f00f 0010
453014b 1b68 1847 c046 2c10 0010 40b4 024e
4543668 b446 40bc 6047 2410 0010 014b 1b68
4551847 c046 2810 0010 014b 1b68 1847 c046
4561810 0010 014b 1b68 1847 c046 2010 0010
457014b 1b68 1847 c046 1c10 0010 014b 1b68
4581847 c046 4010 0010 014b 1b68 1847 c046
459b010 0010 014b 1b68 1847 c046 3010 0010
460014b 1b68 1847 c046 6410 0010 014b 1b68
4611847 c046 fc10 0010 014b 1b68 1847 c046
462f810 0010 014b 1b68 1847 c046 1011 0010
463014b 1b68 1847 c046 c010 0010 014b 1b68
4641847 c046 7010 0010 014b 1b68 1847 c046
4658010 0010 014b 1b68 1847 c046 e010 0010
466014b 1b68 1847 c046 ac10 0010 014b 1b68
4671847 c046 a010 0010 014b 1b68 1847 c046
4685010 0010 014b 1b68 1847 c046 8410 0010
469014b 1b68 1847 c046 ec10 0010 014b 1b68
4701847 c046 c410 0010 014b 1b68 1847 c046
471c810 0010 014b 1b68 1847 c046 4c10 0010
472014b 1b68 1847 c046 9c10 0010 014b 1b68
4731847 c046 3810 0010 014b 1b68 1847 c046
474b810 0010 014b 1b68 1847 c046 6c10 0010
475014b 1b68 1847 c046 3410 0010 014b 1b68
4761847 c046 cc10 0010 014b 1b68 1847 c046
4779410 0010 014b 1b68 1847 c046 5410 0010
478014b 1b68 1847 c046 6010 0010 014b 1b68
4791847 c046 a410 0010 014b 1b68 1847 c046
480d810 0010 014b 1b68 1847 c046 e410 0010
481014b 1b68 1847 c046 d010 0010 014b 1b68
4821847 c046 6810 0010 014b 1b68 1847 c046
4839010 0010 014b 1b68 1847 c046 8c10 0010
484014b 1b68 1847 c046 b410 0010 014b 1b68
4851847 c046 bc10 0010 014b 1b68 1847 c046
486e810 0010 014b 1b68 1847 c046 0411 0010
48740b4 024e 3668 b446 40bc 6047 8810 0010
488014b 1b68 1847 c046 dc10 0010 014b 1b68
4891847 c046 4810 0010 014b 1b68 1847 c046
4907410 0010 014b 1b68 1847 c046 3c10 0010
49140b4 024e 3668 b446 40bc 6047 d410 0010
492014b 1b68 1847 c046 5c10 0010 014b 1b68
4931847 c046 5810 0010 014b 1b68 1847 c046
4949810 0010 014b 1b68 1847 c046 0011 0010
495014b 1b68 1847 c046 4410 0010 40b4 024e
4963668 b446 40bc 6047 a810 0010 014b 1b68
4971847 c046 7810 0010 014b 1b68 1847 c046
4980811 0010 014b 1b68 1847 c046 0c11 0010
49940b4 024e 3668 b446 40bc 6047 7c10 0010
500014b 1b68 1847 c046 f410 0010 014b 1b68
5011847 c046 f010 0010 014b 1b68 1847 c046
5021c11 0010 014b 1b68 1847 c046 3c11 0010
503014b 1b68 1847 c046 2c11 0010 014b 1b68
5041847 c046 3011 0010 014b 1b68 1847 c046
5052011 0010 014b 1b68 1847 c046 3411 0010
506014b 1b68 1847 c046 1411 0010 014b 1b68
5071847 c046 2411 0010 014b 1b68 1847 c046
5081811 0010 014b 1b68 1847 c046 2811 0010
509014b 1b68 1847 c046 3811 0010 014b 1b68
5101847 c046 4011 0010 014b 1b68 1847 c046
5114411 0010 014b 1b68 1847 c046 4811 0010
51240b4 024e 3668 b446 40bc 6047 4c11 0010
5137047 0000 00b5 044a 4260 044a 0260 fff7
51411fe 01bc 0047 0000 ac0c 0010 bc0c 0010
51500b5 fff7 85ff 01bc 0047 0000 00b5 fff7
51685ff 01bc 0047 0000 00b5 fff7 79ff 01bc
5170047 0000 10b5 81b0 039c 1438 0094 fff7
51807ff 01b0 10bc 01bc 0047 0000 00b5 1438
519fff7 d8fc 01bc 0047 00b5 1438 fff7 00ff
52001bc 0047 00b5 1838 fff7 52ff 02bc 0847
52100b5 1c38 fff7 46ff 02bc 0847 00b5 1c38
522fff7 3aff 02bc 0847 00b5 0438 fff7 c4fd
52302bc 0847 00b5 0438 fff7 b8fd 02bc 0847
52400b5 4838 fff7 a2fc 01bc 0047 00b5 4c38
525fff7 a2fc 01bc 0047 ffff ffff 0000 0000
526ffff ffff 0000 0000 000c 0010 200c 0010
5279c0e 0010 000f 0010 f00e 0010 d00e 0010
528dc0e 0010 340c 0010 040c 0010 ac0c 0010
529bc0c 0010 6c0d 0010 040e 0010 100e 0010
5309c0e 0010 000f 0010 f00e 0010 d00e 0010
531dc0e 0010 240e 0010 340c 0010 300d 0010
532c80d 0010 ac0c 0010 bc0c 0010 f615 2010
5330a00 0000 6400 6500 6600 6100 7500 6c00
5347400 2e00 7000 6c00 0000 0000 0700 0000
5355000 6500 7200 6c00 4d00 6900 6e00 0000
5360000 0000 0000 0000 6d00 0010 4104 0010
5374d04 0010 9907 0010 a507 0010 7506 0010
5388106 0010 5904 0010 8d06 0010 6504 0010
539b107 0010 9906 0010 a506 0010 2d00 0010
540bd07 0010 3d01 0010 c907 0010 2902 0010
541d507 0010 e107 0010 ed07 0010 7104 0010
542f907 0010 0508 0010 1108 0010 1d08 0010
5438104 0010 8d04 0010 fcff ffff 0000 0000
544690b 0010 5d0b 0010 0000 0000 0000 0000
545c90a 0010 4905 0010 5505 0010 6105 0010
5466d05 0010 7905 0010 8505 0010 9105 0010
5479d05 0010 a905 0010 b505 0010 c105 0010
548cd05 0010 d905 0010 e505 0010 f105 0010
549fd05 0010 0906 0010 1506 0010 2106 0010
5502d06 0010 3906 0010 4506 0010 5106 0010
551c902 0010 5d06 0010 6906 0010 0000 0000
5520000 0000 e50a 0010 9904 0010 2908 0010
5539d0a 0010 a504 0010 3508 0010 ed03 0010
5544108 0010 4d08 0010 5908 0010 6508 0010
5557108 0010 9d0a 0010 0000 0000 0000 0000
556f10a 0010 7d08 0010 8908 0010 f903 0010
5579508 0010 a108 0010 ad08 0010 b908 0010
558c508 0010 c50a 0010 d108 0010 dd08 0010
5590504 0010 1104 0010 e908 0010 f508 0010
5600109 0010 1d03 0010 b104 0010 0d09 0010
5611909 0010 0000 0000 0000 0000 fd0a 0010
5629904 0010 2908 0010 0d00 0010 a504 0010
5633508 0010 ed03 0010 4108 0010 4d08 0010
5645908 0010 6508 0010 7108 0010 f502 0010
5650000 0000 0000 0000 9d0a 0010 0000 0000
5660000 0000 9d0a 0010 b106 0010 bd06 0010
5670000 0000 0000 0000 2904 0010 4104 0010
5684d04 0010 9907 0010 a507 0010 7506 0010
5698106 0010 5904 0010 8d06 0010 6504 0010
570b107 0010 9906 0010 a506 0010 a509 0010
571bd07 0010 b109 0010 c907 0010 c109 0010
572d507 0010 e107 0010 ed07 0010 7104 0010
573f907 0010 0508 0010 1108 0010 1d08 0010
5748104 0010 8d04 0010 ecff ffff 0000 0000
575210b 0010 4109 0010 4d09 0010 5909 0010
5766509 0010 7509 0010 8109 0010 090b 0010
5778d09 0010 2d0b 0010 9909 0010 b8ff ffff
5780000 0000 750b 0010 b4ff ffff 0000 0000
579810b 0010 b106 0010 bd06 0010 e4ff ffff
5800000 0000 510b 0010 450b 0010 e8ff ffff
5810000 0000 390b 0010 c906 0010 d506 0010
5820300 0000 0600 0000 1b00 0000 4700 0000
5833f00 0000 ee02 0000 f502 0000 2203 0000
5842303 0000 2503 0000 2803 0000 b504 0000
585b604 0000 d204 0000 e604 0000 f304 0000
5864405 0000 4805 0000 0008 0000 0508 0000
5870300 0000 0c00 0000 1c00 0000 1d00 0000
5882100 0000 2800 0000 4200 0000 4800 0000
5894a00 0000 5200 0000 5400 0000 5500 0000
5905700 0000 5a00 0000 5f00 0000 6000 0000
5916400 0000 6500 0000 8a00 0000 8b00 0000
5928f00 0000 9300 0000 9900 0000 a000 0000
593ad00 0000 b100 0000 b900 0000 bb00 0000
594c500 0000 c800 0000 d000 0000 d600 0000
595dd00 0000 df00 0000 e200 0000 e800 0000
596ec00 0000 ff00 0000 0001 0000 1401 0000
5971501 0000 2401 0000 2501 0000 3801 0000
5983a01 0000 1200 0000 2700 0000 3300 0000
599b700 0000 e300 0000 e600 0000 1100 0000
6001400 0000 1e00 0000 1f00 0000 2000 0000
6012800 0000 3000 0000 3100 0000 3300 0000
6023400 0000 4000 0000 4100 0000 4200 0000
6034300 0000 4400 0000 4700 0000 4a00 0000
6044b00 0000 4c00 0000 5000 0000 5100 0000
6055200 0000 5400 0000 5600 0000 6400 0000
6067400 0000 7900 0000 7a00 0000 7c00 0000
6078200 0000 8500 0000 8600 0000 8c00 0000
6088e00 0000 8f00 0000 9200 0000 9300 0000
6099500 0000 9600 0000 9700 0000 9b00 0000
6109d00 0000 a100 0000 b300 0000 c600 0000
611c800 0000 cc00 0000 ce00 0000 d500 0000
612d600 0000 de00 0000 e000 0000 e200 0000
613fd00 0000 0801 0000 2201 0000 2801 0000
6140200 0000 0300 0000 2903 0000 3803 0000
6153c03 0000 5a03 0000 7c04 0000 8c04 0000
6160205 0000 0305 0000 e005 0000 2e06 0000
6174b06 0000 0400 0000 8905 0000 0000 0000
6188d03 0000 0003 0000 7802 0000 0400 0000
6190300 0000 0600 0000 1b00 0000 4700 0000
6208d02 0000 1000 0000 3f00 0000 ee02 0000
621f502 0000 2203 0000 2303 0000 2503 0000
6222803 0000 b504 0000 b604 0000 d204 0000
623e604 0000 f304 0000 4405 0000 4805 0000
6240008 0000 0508 0000 a102 0000 2d00 0000
6250300 0000 0c00 0000 1c00 0000 1d00 0000
6262100 0000 2800 0000 4200 0000 4800 0000
6274a00 0000 5200 0000 5400 0000 5500 0000
6285700 0000 5a00 0000 5f00 0000 6000 0000
6296400 0000 6500 0000 8a00 0000 8b00 0000
6308f00 0000 9300 0000 9900 0000 a000 0000
631ad00 0000 b100 0000 b900 0000 bb00 0000
632c500 0000 c800 0000 d000 0000 d600 0000
633dd00 0000 df00 0000 e200 0000 e800 0000
634ec00 0000 ff00 0000 0001 0000 1401 0000
6351501 0000 2401 0000 2501 0000 3801 0000
6363a01 0000 b402 0000 0600 0000 1200 0000
6372700 0000 3300 0000 b700 0000 e300 0000
638e600 0000 c802 0000 3900 0000 1100 0000
6391400 0000 1e00 0000 1f00 0000 2000 0000
6402800 0000 3000 0000 3100 0000 3300 0000
6413400 0000 4000 0000 4100 0000 4200 0000
6424300 0000 4400 0000 4700 0000 4a00 0000
6434b00 0000 4c00 0000 5000 0000 5100 0000
6445200 0000 5400 0000 5600 0000 6400 0000
6457400 0000 7900 0000 7a00 0000 7c00 0000
6468200 0000 8500 0000 8600 0000 8c00 0000
6478e00 0000 8f00 0000 9200 0000 9300 0000
6489500 0000 9600 0000 9700 0000 9b00 0000
6499d00 0000 a100 0000 b300 0000 c600 0000
650c800 0000 cc00 0000 ce00 0000 d500 0000
651d600 0000 de00 0000 e000 0000 e200 0000
652fd00 0000 0801 0000 2201 0000 2801 0000
653de02 0000 0d00 0000 0200 0000 0300 0000
6542903 0000 3803 0000 3c03 0000 5a03 0000
6557c04 0000 8c04 0000 0205 0000 0305 0000
656e005 0000 2e06 0000 4b06 0000 f202 0000
6570200 0000 0400 0000 8905 0000 4150 5041
6585243 5b31 3030 3033 6133 645d 2e44 4c4c
6590041 564b 4f4e 5b31 3030 3035 3663 365d
6602e44 4c4c 0043 4f4e 455b 3130 3030 3361
6613431 5d2e 444c 4c00 4546 5352 565b 3130
6623030 3339 6534 5d2e 444c 4c00 4549 4b43
6634f52 455b 3130 3030 3438 3932 5d2e 444c
6644c00 4555 5345 525b 3130 3030 3339 6535
6655d2e 444c 4c00 5045 524c 3539 332e 444c
6664c00 0000 c002 0000 5c01 0000 0000 0000
667c002 0000 1430 2830 dc30 e030 e430 e830
668ec30 f030 1032 9c32 a032 1833 6833 6c33
6697033 7433 7833 7c33 8033 8433 8833 ac33
670f433 0034 0c34 1834 2434 3034 3c34 4834
6715434 6034 6c34 7c34 8834 9434 a034 ac34
672bc34 c834 d434 e034 f034 fc34 0835 1435
6732035 2c35 3835 4435 5035 5c35 6835 7435
6748035 8c35 9835 a435 b035 bc35 c835 d435
675e035 ec35 f835 0436 1036 1c36 2836 3436
6764036 4c36 5836 6436 7036 7c36 8836 9436
677a036 ac36 b836 c436 d036 dc36 e836 f436
6780037 0c37 1c37 2837 3437 4037 4c37 5837
6796437 7037 7c37 8837 9437 a037 ac37 b837
680c437 d037 dc37 e837 f437 0038 0c38 1838
6812438 3038 3c38 4838 5438 6038 6c38 7838
6828438 9038 9c38 a838 b438 c038 cc38 d838
683e438 f038 fc38 0839 1439 2039 3039 3c39
6844839 5439 6039 7039 7c39 8839 9439 a039
685ac39 bc39 c839 d439 e039 f039 fc39 083a
686143a 203a 2c3a 383a 443a 503a 5c3a 683a
687743a 803a 8c3a 983a a43a b03a c03a dc3a
688e03a 9c3b a03b a43b a83b ac3b b03b b43b
689b83b bc3b c03b c43b c83b cc3b d03b d43b
690d83b dc3b e03b e43b e83b ec3b f03b f43b
691f83b fc3b 3c3c 403c 443c 483c 4c3c 503c
692543c 583c 5c3c 603c 643c 683c 6c3c 703c
693743c 783c 7c3c 803c 843c 883c 8c3c 903c
694943c 983c 9c3c a03c a43c a83c b43c b83c
695c43c c83c cc3c d03c d43c d83c dc3c e03c
696e43c e83c ec3c f03c f43c f83c fc3c 003d
697043d 083d 0c3d 103d 143d 183d 1c3d 203d
698243d 283d 2c3d 383d 3c3d 403d 443d 483d
6994c3d 503d 543d 583d 5c3d 603d 643d 683d
700743d 783d 7c3d 803d 843d 883d 8c3d 903d
701943d 983d 9c3d a03d a43d a83d ac3d b03d
702b43d b83d bc3d c03d c43d d03d d43d d83d
703dc3d e03d e43d e83d ec3d f03d f43d f83d
704fc3d 003e 0c3e 183e 1c3e 203e 2c3e 303e
705343e 383e 3c3e 403e 443e 483e 4c3e 503e
706543e 583e 5c3e 603e 643e 683e 6c3e 703e
707743e 783e 7c3e 803e 843e 883e 8c3e 903e
708943e 983e a43e a83e ac3e b03e b43e b83e
709bc3e c03e c43e c83e cc3e d83e e43e e83e
710ec3e f83e fc3e 083f 0c3f 103f
711__APP__
712
713 # This is Symbian application resource skeleton.
714 # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
715 # by compiling the PerlApp.cpp.
c8f896e5 716 # The following resource has been compiled using the Series 60 SDK 2.6
717 # for Visual C.
f26f4a2f 718 $RSCHEX = <<__RSC__;
7196b4a 1f10 0000 0000 5fde 0400 1ca3 60de
72001b8 0010 0004 0000 0001 f0e5 4d00 0000
7210004 f0e5 4d00 0000 0000 0000 001a 00cc
7220800 0000 0001 0005 f0e5 4d00 0000 0000
72300ff ffff ff00 0000 0000 0000 0000 0f05
7240000 0400 0000 0000 0000 0000 0005 0541
725626f 7574 1700 00ff ffff ff00 0000 0001
7260400 0000 0000 0000 0000 0004 0454 696d
7276517 0000 ffff ffff 0000 0000 0204 0000
7280000 0000 0000 0000 0303 5275 6e17 0000
729ffff ffff 0000 0000 0304 0000 0000 0000
7300000 0000 0808 4f6e 656c 696e 6572 1700
73100ff ffff ff00 0000 0004 0400 0000 0000
7320000 0000 0009 0943 6f70 7972 6967 6874
7330e00 00ff ffff ff00 0000 0000 0000 0001
7342000 0000 0000 0000 1400 cc08 0100 6816
7350001 0000 0000 0001 0000 0000 ffff ffff
73600ff ffff ff00 0000 0000 0000 00ff ff00
7370000 0000 0000 0120 0000 0000 0000 0024
73800cc 0801 0068 1600 0100 0000 0000 0100
7390000 00ff ffff ff00 ffff ffff 0000 0000
7400000 0000 ffff 0000 0000 0000 0041 2200
7410000 0000 0000 1400 cc08 0100 6916 0000
7420500 0000 0001 0000 0000 0000 0000 0100
7430000 0400 0700 0800 ff02 0100 ffff ffff
7440000 0000 0000 0000 0000 ffff 0000 0000
7450000 0041 2200 0000 0000 0000 1400 cc08
7460100 7416 0007 0000 0000 0054 1600 00ff
747ffff ff00 0000 0000 00ff ff00 0000 0000
7480000 0000 0000 0015 001d 001d 0035 004d
74900ef 0026 015d 01a3 01d2 01d7 01
750__RSC__
751}