summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2005-11-30 00:05:40 +0000
committerJens Arnold <amiconn@rockbox.org>2005-11-30 00:05:40 +0000
commit4c385148ac4a2f4959ec39841c20eaeb42ace668 (patch)
tree09f7e37c89a0a187fc1573efbfa9f2bd8cd60ec2 /tools
parent8b022749a7c29ce5f7254fc153ca78b087e53e04 (diff)
downloadrockbox-4c385148ac4a2f4959ec39841c20eaeb42ace668.zip
rockbox-4c385148ac4a2f4959ec39841c20eaeb42ace668.tar.gz
rockbox-4c385148ac4a2f4959ec39841c20eaeb42ace668.tar.bz2
rockbox-4c385148ac4a2f4959ec39841c20eaeb42ace668.tar.xz
Self-extracting loader: Cleaner method for inclusion of the UCL-compressed image. The input image is now checked for correctness and converted to C source. The Makefile still needs fixing...
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8109 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'tools')
-rwxr-xr-xtools/ucl2src.pl110
1 files changed, 110 insertions, 0 deletions
diff --git a/tools/ucl2src.pl b/tools/ucl2src.pl
new file mode 100755
index 0000000..54cda5b
--- /dev/null
+++ b/tools/ucl2src.pl
@@ -0,0 +1,110 @@
+#!/usr/bin/env perl
+############################################################################
+# __________ __ ___.
+# Open \______ \ ____ ____ | | _\_ |__ _______ ___
+# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+# \/ \/ \/ \/ \/
+# $Id$
+#
+# Copyright (C) 2005 by Jens Arnold
+#
+# All files in this archive are subject to the GNU General Public License.
+# See the file COPYING in the source tree root for full license agreement.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+############################################################################
+
+if (!$ARGV[0])
+{
+ print <<HERE
+Usage: ucl2src [-p=<prefix>] <ucl file>
+
+Check & strip header from an .ucl file and generate <prefix>.c and
+<prefix>.h from it.
+HERE
+;
+ exit;
+}
+
+my $prefix = $p;
+if(!$prefix) {
+ $prefix="uclimage";
+}
+
+my $input = $ARGV[0];
+my $buffer;
+my $insize;
+my $readsize = 0;
+
+open(INF, "<$input") or die "Can't open $input";
+binmode INF;
+
+# check UCL header
+
+# magic header
+read(INF, $buffer, 8);
+if ($buffer ne pack("C8", 0x00, 0xe9, 0x55, 0x43, 0x4c, 0xff, 0x01, 0x1a))
+{
+ die "Not an UCL file.";
+}
+read(INF, $buffer, 4);
+
+# method
+read(INF, $buffer, 1);
+if (ord($buffer) != 0x2E)
+{
+ die sprintf("Wrong compression method (expected 0x2E, found 0x%02X)",
+ ord($buffer));
+}
+
+read(INF, $buffer, 9);
+
+# file size
+read(INF, $buffer, 4);
+$insize = unpack("N", $buffer) + 8;
+
+open(OUTF, ">$prefix.c") or die "Can't open $prefix.c";
+
+print OUTF <<HERE
+/* This file was automatically generated using ucl2src.pl */
+
+/* Data compressed with UCL method 0x2e follows */
+const unsigned char image[] = {
+HERE
+ ;
+
+while (read(INF, $buffer, 1))
+{
+ $readsize++;
+ printf OUTF ("0x%02x,", ord($buffer));
+ if (!($readsize % 16))
+ {
+ print OUTF "\n";
+ }
+}
+
+close(INF);
+
+if ($readsize != $insize)
+{
+ die "Input file truncated, got $readsize of $insize bytes."
+}
+
+print OUTF <<HERE
+};
+/* end of compressed image */
+HERE
+ ;
+close(OUTF);
+
+open(OUTF, ">$prefix.h") or die "Can't open $prefix.h";
+
+print OUTF "/* This file was automatically generated using ucl2src.pl */\n";
+print OUTF "extern const unsigned char image[".$insize."];\n";
+
+close(OUTF);
+