Commit | Line | Data |
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 | |
10 | require 5.008; |
11 | |
12 | use strict; |
13 | |
14 | use vars qw($VERSION); |
15 | |
c8f896e5 |
16 | $VERSION = '0.2'; |
f26f4a2f |
17 | |
18 | use Getopt::Long; |
19 | use File::Temp qw/tempdir/; |
20 | use File::Find; |
21 | use File::Basename qw/basename dirname/; |
22 | use Cwd qw/getcwd/; |
23 | |
f26f4a2f |
24 | BEGIN { |
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 | |
34 | sub 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 |
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, |
c8f896e5 |
44 | only specify directories for packaging. |
f26f4a2f |
45 | __USAGE__ |
46 | } |
47 | |
48 | my $SisUid; |
49 | my $SisVersion; |
50 | my $Library; |
51 | my @SisPl; |
52 | my @SisPm; |
53 | my @SisDir; |
54 | my @SisOther; |
55 | my $AppName; |
56 | my $Debug; |
57 | my $ShowPkg; |
ed76c0e4 |
58 | my $Variant; |
f26f4a2f |
59 | |
60 | my $SisUidDefault = 0x0acebabe; |
61 | my $SisVersionDefault = '0.0.0'; |
ed76c0e4 |
62 | my $VariantDefault = 'S60'; |
63 | |
64 | my %Variant = qw(S60 1 S80 1); |
f26f4a2f |
65 | |
66 | die_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 | ); |
76 | die_with_usage("Need to specify what to sisify") |
77 | unless @ARGV; |
78 | |
ed76c0e4 |
79 | unless (defined $Variant) { |
80 | warn "$0: Defaulting to $VariantDefault\n"; |
81 | $Variant = $VariantDefault; |
82 | } |
83 | |
84 | unless (exists $Variant{$Variant}) { |
85 | die "$0: Unknown variant '$Variant'\n"; |
86 | } |
87 | |
f26f4a2f |
88 | for 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 | |
102 | sub do_system { |
103 | my $cwd = getcwd(); |
104 | print qq{\# system("@_") [cwd "$cwd"]\n}; |
105 | return system("@_") == 0; |
106 | } |
107 | |
108 | die_with_usage("Must specify something to sisify") |
109 | unless @SisPl || @SisPm || @SisOther || @SisDir; |
110 | |
111 | die_with_usage("With the lib option set, specify only directories") |
112 | if defined $Library && ((@SisPl || @SisPm || @SisOther) || @SisDir == 0); |
113 | |
114 | die_with_usage("Lib must define the Perl 5 version as 5.x.y") |
115 | if defined $Library && $Library !~ /^5.\d+\.\d+$/; |
116 | |
117 | die_with_usage("With the lib option unset, specify at least one .pl file") |
118 | if (! defined $Library && @SisPl == 0); |
119 | |
120 | if (!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 | |
129 | die_with_usage("Must either specify appname or at least one .pl file or the lib option") |
130 | unless defined $AppName || defined $Library; |
131 | |
132 | print "[app name '$AppName']\n" if $Debug; |
133 | |
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) { |
138 | $SisUid = hex($1); |
139 | } else { |
140 | die_with_usage("Bad uid '$SisUid'"); |
141 | } |
142 | $SisUid = sprintf "0x%08x", $SisUid; |
143 | |
144 | die_with_usage("Bad uid '$SisUid'") |
145 | if $SisUid !~ /^0x[0-9a-f]{8}$/i; |
146 | |
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'") |
152 | } |
153 | |
154 | my $tempdir = tempdir( CLEANUP => 1 ); |
155 | |
156 | print "[temp directory '$tempdir']\n" if $Debug; |
157 | |
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); |
c8f896e5 |
162 | do_system("mkdir $tempdir\\$dir") unless $dir eq '.'; |
163 | do_system("copy $file $tempdir"); |
f26f4a2f |
164 | } |
165 | if (@SisPl) { |
c8f896e5 |
166 | do_system("copy $SisPl[0] $tempdir\\default.pl") |
167 | unless $SisPl[0] eq "default.pl"; |
f26f4a2f |
168 | } |
169 | for my $dir (@SisDir) { |
170 | print "[copying directory '$dir']\n" if $Debug; |
c8f896e5 |
171 | do_system("copy $dir $tempdir"); |
f26f4a2f |
172 | } |
173 | |
174 | my $SisVersionCommas = $SisVersion; |
175 | |
176 | $SisVersionCommas =~ s/\./\,/g; |
177 | |
178 | my @pkg; |
179 | |
c8f896e5 |
180 | push @pkg, qq[&EN;]; |
f26f4a2f |
181 | push @pkg, qq[#{"$AppName"},($SisUid),$SisVersionCommas]; |
182 | push @pkg, qq[(0x101F6F88), 0, 0, 0, {"Series60ProductID"}]; |
183 | |
184 | my $OWD = getcwd(); |
185 | |
c8f896e5 |
186 | $OWD =~ s!/!\\!g; |
187 | |
f26f4a2f |
188 | chdir($tempdir) or die "$0: chdir('$tempdir')\n"; |
c8f896e5 |
189 | |
190 | if (@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 |
217 | my @c; |
218 | find( |
219 | sub { |
220 | if (-f $_) { |
221 | $File::Find::name =~ s!^\./!!; |
222 | push @c, $File::Find::name; |
223 | } |
224 | } |
225 | , |
226 | "."); |
227 | |
228 | for 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 | |
234 | sub hex2data { |
ed76c0e4 |
235 | pack("H*", shift); # unpack("H*", $data) for the hex creation. |
f26f4a2f |
236 | } |
237 | |
238 | my $APPHEX; |
239 | my $RSCHEX; |
240 | |
241 | unless ($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 | |
308 | if ($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 | |
335 | exit(0); |
336 | |
ed76c0e4 |
337 | # To create the hex: print unpack("H*", $data); |
338 | |
f26f4a2f |
339 | sub 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__; |
347 | 79000010ce390010f61520108581107645504f430020000056176fa5000000000100bf00803e2bde56e1e0000300000180110000000000000010000000001000002000000000000001000000000000100000000007000000f8110000010000003c0f00007c00000000000000fc110000fc140000000000005e01000000b500f0f7f902bc084700000148006870470000280c001000b5011c024800f0b3fc01bc00470000480c001030b585b00490002100f004fd6846049900f046fb684600f01bf9011c049cb4256d006019016004980022002300f002fab6256d0065190020286000f003fa012100f006fa05b030bc01bc0047f0b5071c0e1c1e4878611e48b8611e48f8611e48b8641e48f8641e483860b42464003d192968002910d0786800f018fb2968002905d008688268081c032100f0a3f9b4246400391900200860b62464003d192868002803d000f060fc00202860b96a002905d008688268081c032100f08bf9381c311c00f0adfcf0bc01bc0047c40e0010280f0010180f0010f80e0010040f00105c0c001084b010b595b01790189119921a9301200021002200f07efc041c14a901a800f037fc002808d10090201c17a90222002300f076fc00f032fc00f036fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f0bbfa011c0a687ea8126a00f043f98026f6006e44301c00f07dfa2949301c7eaa002300f07dfac425ed006d44281c00f07ffa244c6c440021224868440160201c042100f07bfa301c00f07efa011c201c2a1c00f07ffa002824d1301c00f074fa011c8420000168448022520000f0f4fb8521090169446846fc22520000f0f2fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f070fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff2c0c0010480a000044080000480800004c0800004c0a000000b50120fff7e6fe01bc004700b5021c80204000814202d00348814206d1101c00f044fa05e00000c10b0000081cfff7e7ff01bc0047000010b500f007f8041c00f0aafb201c10bc02bc084730b5051c302000f0a7fb041c002c05d000f0f2f80748606007482060201c00f0a1fb201c291c00f009f8201c30bc02bc08470000d40c0010e40c001030b5041c0d1c00f0dff8201c291c00f0e1f82068016a201c00f08af830bc01bc0047000000b5044a4260044a026000f0d7f801bc00470000d40c0010e40c001030b584b0041c00f0d1f8051c6846211c00f0d2f82868b8300268281c694600f069f804b030bc01bc0047000030b5051c242000f053fb041c002c04d0291c00f085fb03482060201c30bc02bc08470000940d001070b5b820400000f03ffb061c002e18d000f0c4f90d48b0640d48f0640d4d75610d4cb4610d4bf3610d4ab2640d49f1640d4830600d483060301c6030802100f02ffb301c70bc02bc084700002c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c001010b58b20800000f019fb041c002c03d000f092f902482060201c10bc02bc0847f00d0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c0463c0f0010014b1b681847c046440f0010014b1b681847c046480f0010014b1b681847c046400f001040b4024e3668b44640bc6047900f0010014b1b681847c04610100010014b1b681847c0462c100010014b1b681847c0461c100010014b1b681847c046a00f0010014b1b681847c04608100010014b1b681847c04618100010014b1b681847c04614100010014b1b681847c046e80f0010014b1b681847c046dc0f0010014b1b681847c046d40f0010014b1b681847c04600100010014b1b681847c046fc0f0010014b1b681847c046980f0010014b1b681847c0468c0f0010014b1b681847c046e40f0010014b1b681847c04628100010014b1b681847c046f40f0010014b1b681847c04604100010014b1b681847c046c40f0010014b1b681847c046d80f0010014b1b681847c046bc0f0010014b1b681847c046a80f0010014b1b681847c046ac0f0010014b1b681847c046cc0f0010014b1b681847c046b80f0010014b1b681847c046b40f0010014b1b681847c046a40f0010014b1b681847c0460c100010014b1b681847c046e00f0010014b1b681847c0469c0f0010014b1b681847c046940f0010014b1b681847c046ec0f0010014b1b681847c046f00f0010014b1b681847c046d00f0010014b1b681847c046b00f0010014b1b681847c046c00f0010014b1b681847c046f80f0010014b1b681847c046c80f0010014b1b681847c04630100010014b1b681847c04634100010014b1b681847c04620100010014b1b681847c04624100010014b1b681847c0463c100010014b1b681847c04638100010014b1b681847c0465410001040b4024e3668b44640bc60474c100010014b1b681847c04650100010014b1b681847c04640100010014b1b681847c04648100010014b1b681847c04644100010014b1b681847c04668100010014b1b681847c046d8100010014b1b681847c04658100010014b1b681847c0468c100010014b1b681847c04624110010014b1b681847c04620110010014b1b681847c04638110010014b1b681847c046e8100010014b1b681847c04698100010014b1b681847c046a8100010014b1b681847c04608110010014b1b681847c046d4100010014b1b681847c046c8100010014b1b681847c04678100010014b1b681847c046ac100010014b1b681847c04614110010014b1b681847c046ec100010014b1b681847c046f0100010014b1b681847c04674100010014b1b681847c046c4100010014b1b681847c04660100010014b1b681847c046e0100010014b1b681847c04694100010014b1b681847c0465c100010014b1b681847c046f4100010014b1b681847c046bc100010014b1b681847c0467c100010014b1b681847c04688100010014b1b681847c046cc100010014b1b681847c04600110010014b1b681847c0460c110010014b1b681847c046f8100010014b1b681847c04690100010014b1b681847c046b8100010014b1b681847c046b4100010014b1b681847c046dc100010014b1b681847c046e4100010014b1b681847c04610110010014b1b681847c0462c11001040b4024e3668b44640bc6047b0100010014b1b681847c04604110010014b1b681847c04670100010014b1b681847c0469c100010014b1b681847c0466410001040b4024e3668b44640bc6047fc100010014b1b681847c04684100010014b1b681847c04680100010014b1b681847c046c0100010014b1b681847c04628110010014b1b681847c0466c10001040b4024e3668b44640bc6047d0100010014b1b681847c046a0100010014b1b681847c04630110010014b1b681847c0463411001040b4024e3668b44640bc6047a4100010014b1b681847c0461c110010014b1b681847c04618110010014b1b681847c04644110010014b1b681847c04664110010014b1b681847c04654110010014b1b681847c04658110010014b1b681847c04648110010014b1b681847c0465c110010014b1b681847c0463c110010014b1b681847c0464c110010014b1b681847c04640110010014b1b681847c04650110010014b1b681847c04660110010014b1b681847c04668110010014b1b681847c0466c110010014b1b681847c0467011001040b4024e3668b44640bc604774110010014b1b681847c0464c0f0010014b1b681847c046840f0010014b1b681847c046880f0010014b1b681847c046640f0010014b1b681847c046740f0010014b1b681847c046540f0010014b1b681847c0465c0f001040b4024e3668b44640bc6047500f0010014b1b681847c046800f0010014b1b681847c0467c0f0010014b1b681847c046700f0010014b1b681847c0466c0f001040b4024e3668b44640bc6047680f0010014b1b681847c046580f0010014b1b681847c046600f0010014b1b681847c046780f00107047000000b5fff72fff01bc0047000000b5fff72fff01bc0047000000b5fff723ff01bc0047000010b581b0039c14380094fff7b1fe01b010bc01bc0047000000b51438fff7d6ff01bc004700b51438fff7aafe01bc004700b51838fff7fcfe02bc084700b51c38fff7f0fe02bc084700b51c38fff7e4fe02bc084700b50438fff774fd02bc084700b50438fff768fd02bc084700b54838fff7a0ff01bc004700b54c38fff7a0ff01bc0047ffffffff00000000ffffffff00000000280c0010480c0010c40e0010280f0010180f0010f80e0010040f00105c0c00102c0c0010d40c0010e40c0010d40c0010e40c0010940d00102c0e0010380e0010c40e0010280f0010180f0010f80e0010040f00104c0e00105c0c0010580d0010f00d0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d0600102d00001039070010590100104507001051020010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010fcffffff00000000910b0010850b00100000000000000000f1020010d1040010dd040010e9040010f5040010010500100d0500101905001025050010310500103d0500104905001055050010610500106d0500107905001085050010910500109d050010a9050010b5050010c1050010cd050010d90500100d030010e5050010f105001000000000000000000d0b0010bd0a0010a5070010190a0010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010190a00100000000000000000190b0010f9070010050800103d040010110800101d080010290800103508001041080010090b00104d08001059080010490400105504001065080010710800107d08001061030010d50a001089080010950800100000000000000000250b0010bd0a0010a50700100d000010c90a0010b107001031040010bd070010c9070010d5070010e1070010ed070010390300100000000000000000190a00100000000000000000190a0010390600104506001000000000000000004d0a0010650a0010710a00101507001021070010fd050010090600107d0a001015060010890a00102d070010210600102d06001021090010390700102d090010450700103d090010510700105d07001069070010950a001075070010810700108d07001099070010a50a0010b10a0010ecffffff00000000490b0010bd080010c9080010d5080010e1080010f1080010fd080010310b001009090010550b001015090010b8ffffff000000009d0b0010b4ffffff00000000a90b00103906001045060010e4ffffff00000000790b00106d0b0010e8ffffff00000000610b0010510600105d06001003000000060000001b000000470000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000120000002700000033000000b7000000e3000000e600000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000040000008905000000000000d103000000030000780200000400000003000000060000001b000000470000008d020000100000003f000000ee020000f502000022030000230300002503000028030000b5040000b6040000d2040000e6040000f304000044050000480500000008000005080000a10200002d000000030000000c0000001c0000001d000000210000002800000042000000480000004a000000520000005400000055000000570000005a0000005f0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000ad000000b1000000b9000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ec000000ff0000000001000014010000150100002401000025010000380100003a010000b402000006000000120000002700000033000000b7000000e3000000e6000000c80200003900000011000000140000001e0000001f0000002000000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000de0200000d000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e0600004b060000f20200000200000004000000890500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000c00200005c01000000000000c002000014302830f830fc300031043108310c312c32c432c832043308335c33ac33b033b433b833bc33c033c433c833cc33f0333834443450345c346c347834843490349c34a834b434c034cc34d834e434f034fc340835143520352c353835443550355c356835743580358c359835a435b035bc35c835d435e035ec35f835043610361c362836343640364c365836643670367c3688369836a436b036bc36c836d436e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38ac38b838c438d038dc38ec38f838043910391c3928393839443950395c396c397839843990399c39a839b439c039cc39d839e439f039fc39083a143a203a2c3a3c3a483a543a603a6c3a783a843a903aa03aac3ab83ac43ad03ae03aec3af83a043bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c0c3c103c143c183c1c3c203c243c643c683c6c3c703c743c783c7c3c803c843c883c8c3c903c943c983c9c3ca03ca43ca83cac3cb03cb43cb83cbc3cc03cc43cc83ccc3cd03cdc3ce03cec3cf03cf43cf83cfc3c003d043d083d0c3d103d143d183d1c3d203d243d283d2c3d303d343d383d3c3d403d443d483d4c3d503d543d603d643d683d6c3d703d743d783d7c3d803d843d883d8c3d903d9c3da03da43da83dac3db03db43db83dbc3dc03dc43dc83dcc3dd03dd43dd83ddc3de03de43de83dec3df83dfc3d003e043e083e0c3e103e143e183e1c3e203e243e283e343e403e443e483e543e583e5c3e603e643e683e6c3e703e743e783e7c3e803e843e883e8c3e903e943e983e9c3ea03ea43ea83eac3eb03eb43eb83ebc3ec03ecc3ed03ed43ed83edc3ee03ee43ee83eec3ef03ef43e003f0c3f103f143f203f243f303f343f383f |
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__; |
358 | 6b4a1f10000000005fde04001ca360de01b80010000400000001f0e54d0000000004f0e54d00000000000000001a00cc0800000000010005f0e54d000000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000120000000000000001400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000000120000000000000002400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000004122000000000000001400cc08010069160000050000000001000000000000000001000000040007000800ff020100ffffffff00000000000000000000ffff000000000000004122000000000000001400cc08010074160007000000000054160000ffffffff000000000000ffff00000000000000000000000015001d001d0035004d00ef0026015d01a301d201d701 |
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__; |
369 | 79000010ce390010f61520108581107645504f43002000009f6ac520000000000100bb00401aaa8157e1e00003000001980e0000000000000010000000001000002000000000000001000000000000100000000007000000100f000001000000900c00007c00000000000000140f0000dc110000000000005e01000000b500f0cff902bc0847000001480068704700009c0a001000b5011c024800f075fc01bc00470000bc0a001030b585b00490002100f0e6fa6846049900f0e8fa684600f013f9011c049c9e256d006019016004980022002300f0daf9a0256d0065190020286000f0dbf9012100f0def905b030bc01bc0047f0b5071c0e1c1b4878611b48b8611b4838609e2464003d192968002910d0786800f0c0fa2968002905d008688268081c032100f081f99e246400391900200860a02464003d192868002803d000f028fc00202860796a002905d008688268081c032100f069f9381c311c00f0a1faf0bc01bc0047480c00107c0c0010d00a001084b010b595b01790189119921a9301200021002200f046fc041c14a901a800f005fc002808d10090201c17a90222002300f03efc00f000fc00f004fc15b010bc08bc04b018470000f0b5474680b4324ca544071c8846022952d100f06ffa011c0a687ea8126a00f027f98026f6006e44301c00f025fa2949301c7eaa002300f025fac425ed006d44281c00f027fa244c6c440021224868440160201c042100f023fa301c00f026fa011c201c2a1c00f027fa002824d1301c00f01cfa011c8420000168448022520000f0c2fb8521090169446846fc22520000f0c0fb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff783ff381c00f024fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffa00a0010480a000044080000480800004c0800004c0a000000b50120fff7f2fe01bc004700b5081cfff7f6ff01bc004710b5021c80204000814203d1101c00f0f5f905e09e24640010190068fff7eaff10bc01bc0047000010b500f007f8041c00f074fb201c10bc02bc084730b5051c2c2000f071fb041c002c03d000f092fb06482060201c00f06dfb201c291c00f007f8201c30bc02bc084700003c0b001030b5041c0d1c00f0bdf8201c291c00f0bff82068016a201c00f06ef830bc01bc0047000000b5034a026000f0b7f801bc004700003c0b001030b584b0041c00f0b3f8051c6846211c00f0b4f82868b8300268281c694600f051f804b030bc01bc0047000030b5051c242000f025fb041c002c04d0291c00f08ff903482060201c30bc02bc08470000b00b001010b5a220400000f011fb041c002c0cd000f082f9074860610748a06107482060201c3430802100f00dfb201c10bc02bc08470000480c00107c0c0010d00a001010b58b20800000f003fb041c002c03d000f068f902482060201c10bc02bc08470c0c0010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c046900c0010014b1b681847c046980c0010014b1b681847c0469c0c0010014b1b681847c046940c001040b4024e3668b44640bc6047a40c0010014b1b681847c046100d0010014b1b681847c046280d0010014b1b681847c046b40c0010014b1b681847c046080d0010014b1b681847c046180d0010014b1b681847c046140d0010014b1b681847c046f00c0010014b1b681847c046e40c0010014b1b681847c046dc0c0010014b1b681847c046000d0010014b1b681847c046fc0c0010014b1b681847c046ac0c0010014b1b681847c046a00c0010014b1b681847c046ec0c0010014b1b681847c046240d0010014b1b681847c046040d0010014b1b681847c046e00c0010014b1b681847c046bc0c0010014b1b681847c046d40c0010014b1b681847c046c80c0010014b1b681847c046c40c0010014b1b681847c046b80c0010014b1b681847c0460c0d0010014b1b681847c046e80c0010014b1b681847c046b00c0010014b1b681847c046a80c0010014b1b681847c046f40c0010014b1b681847c046d80c0010014b1b681847c046c00c0010014b1b681847c046cc0c0010014b1b681847c046f80c0010014b1b681847c046d00c0010014b1b681847c0461c0d0010014b1b681847c046200d0010014b1b681847c046400d001040b4024e3668b44640bc6047380d0010014b1b681847c0463c0d0010014b1b681847c0462c0d0010014b1b681847c046340d0010014b1b681847c046300d0010014b1b681847c046540e0010014b1b681847c0466c0d0010014b1b681847c046e80d0010014b1b681847c046300e0010014b1b681847c0465c0d0010014b1b681847c0468c0d0010014b1b681847c046340e0010014b1b681847c0463c0e0010014b1b681847c046380e0010014b1b681847c046480e0010014b1b681847c046500e0010014b1b681847c046f40d0010014b1b681847c046fc0d0010014b1b681847c046440e0010014b1b681847c046b40d0010014b1b681847c046980d0010014b1b681847c046a80d0010014b1b681847c046e40d0010014b1b681847c046d00d0010014b1b681847c046780d001040b4024e3668b44640bc6047a00d0010014b1b681847c046ac0d0010014b1b681847c046240e0010014b1b681847c046000e0010014b1b681847c046040e0010014b1b681847c046d80d0010014b1b681847c046740d0010014b1b681847c046d40d0010014b1b681847c046c80d0010014b1b681847c046640d0010014b1b681847c046f00d0010014b1b681847c046940d0010014b1b681847c046600d0010014b1b681847c046080e0010014b1b681847c046c00d0010014b1b681847c0467c0d0010014b1b681847c046880d0010014b1b681847c046dc0d0010014b1b681847c046140e0010014b1b681847c0461c0e0010014b1b681847c0460c0e0010014b1b681847c046900d0010014b1b681847c046bc0d0010014b1b681847c046b80d0010014b1b681847c046ec0d0010014b1b681847c046f80d001040b4024e3668b44640bc6047cc0d0010014b1b681847c046200e0010014b1b681847c0464c0e001040b4024e3668b44640bc6047a40d0010014b1b681847c046e00d001040b4024e3668b44640bc6047b00d0010014b1b681847c046180e0010014b1b681847c046700d0010014b1b681847c0469c0d0010014b1b681847c046680d001040b4024e3668b44640bc6047100e0010014b1b681847c046840d0010014b1b681847c046800d0010014b1b681847c046c40d0010014b1b681847c046400e0010014b1b681847c0462c0e0010014b1b681847c046280e0010014b1b681847c046600e0010014b1b681847c046800e0010014b1b681847c046700e0010014b1b681847c046740e0010014b1b681847c046640e0010014b1b681847c046780e0010014b1b681847c046580e0010014b1b681847c046680e0010014b1b681847c0465c0e0010014b1b681847c0466c0e0010014b1b681847c0467c0e0010014b1b681847c046840e0010014b1b681847c046880e001040b4024e3668b44640bc60478c0e0010014b1b681847c046540d0010014b1b681847c046500d0010014b1b681847c0464c0d0010014b1b681847c046480d0010014b1b681847c046440d0010014b1b681847c046580d00107047000000b5fff77bff01bc0047000000b5fff76fff01bc0047000010b581b0039c14380094fff725ff01b010bc01bc0047000000b51438fff716ff01bc004700b51438fff71eff01bc004700b51838fff702ff02bc0847ffffffff00000000ffffffff000000009c0a0010bc0a0010480c00107c0c0010d00a0010a00a00103c0b00103c0b0010b00b0010480c00107c0c0010d00a00100c0c0010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c004d0069006e000000000000000000000079000010710600107d06001089060010950600106505001071050010a10600107d050010ad060010b906001089050010950500102d000010c50600104101001045020010d1060010dd060010e9060010f506001005070010110700101d070010290700100000000000000000d902001075040010810400108d04001099040010a5040010b1040010bd040010c9040010c5090010d5040010d1090010e1040010dd090010e9090010ed040010f904001005050010110500101d0500102905001035050010410500104d050010ed020010f5090010590500100000000000000000050a0010a1070010ad070010ed030010b9070010c5070010d1070010dd070010e9070010010a0010f507001001080010f9030010050400100d08001019080010250800104103001031080010410800104d0800100000000000000000110a001035070010410700100d0000104d07001059070010e103001065070010710700107d070010890700109507001019030010ecffffff00000000350a0010910800109d080010a9080010b5080010c5080010d10800101d0a0010dd080010410a0010e9080010e8ffffff000000004d0a0010a1050010ad05001003000000060000001b00000047000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff000000000100001401000015010000120000002700000033000000b7000000e3000000e6000000260100005601000065010000800200000a040000af04000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e06000004000000890500000000000081030000c80200003c0200000400000003000000060000001b000000470000005102000023000000030000000c0000001c0000001d0000002100000028000000420000004a0000005200000054000000550000005a0000006000000064000000650000008a0000008b0000008f0000009300000099000000a0000000b1000000bb000000c5000000c8000000d0000000d6000000dd000000df000000e2000000e8000000ff0000000001000014010000150100006402000006000000120000002700000033000000b7000000e3000000e60000007802000006000000260100005601000065010000800200000a040000af0400008f0200003f00000011000000140000001e0000001f00000020000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007b0000007c0000007d0000007f0000008200000083000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000002f010000a50200000c000000020000000300000029030000380300003c0300005a0300007c0400008c0400000205000003050000e00500002e060000b90200000200000004000000890500004150504152435b31303030336133645d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f43544c5b31303030343839655d2e444c4c0045494b434f52455b31303030343839325d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0000000004020000fe000000000000000402000014302830ec30f030f4301432b032e8323c33743378337c33a033e833f43300340c341c342834343440344c345834643470347c3488349434a034ac34b834c434d034dc34e834f43400350c351835243530353c354835543560356c357835843590359c35a835b435c035d035dc35e835f43500360c361836243630363c364836543660366c367836843690369c36a836b436c036cc36d836e436f03600370c371837243730373c374837543760376c377837843790379c37a837b437c037cc37d837e437f037fc370838143820382c383c38483854386438703880388c389838a438b038c038cc38d838e438f038fc380839143920392c393839443950395c396839743980398c399839a439b439c039cc39d839e439f039fc39683a6c3a703a743a783a7c3a803a843a883a8c3a903a943a983ad83adc3ae03ae43ae83aec3af03af43af83afc3a003b043b083b0c3b103b143b183b1c3b203b243b283b2c3b303b343b383b443b483b4c3b503b543b583b5c3b603b643b683b6c3b703b743b783b7c3b803b843b883b8c3b903b943b983b9c3ba03ba43ba83bac3bb83bbc3bc03bc43bc83bcc3bd03bd43bd83bdc3be03be43be83bec3bf03bf43bf83bfc3b003c043c083c143c183c1c3c203c243c283c2c3c303c343c383c3c3c403c443c503c543c583c5c3c603c643c683c6c3c703c743c783c843c883c8c3c__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__; |
379 | 6b4a1f10000000005fde04001ca360de01b800380400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000014001c001c0034008200a5004701__RSC__ |
380 | } |
f26f4a2f |
381 | } |