diff options
| author | Jens Arnold <amiconn@rockbox.org> | 2005-11-30 00:05:40 +0000 |
|---|---|---|
| committer | Jens Arnold <amiconn@rockbox.org> | 2005-11-30 00:05:40 +0000 |
| commit | 4c385148ac4a2f4959ec39841c20eaeb42ace668 (patch) | |
| tree | 09f7e37c89a0a187fc1573efbfa9f2bd8cd60ec2 /tools | |
| parent | 8b022749a7c29ce5f7254fc153ca78b087e53e04 (diff) | |
| download | rockbox-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-x | tools/ucl2src.pl | 110 |
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); + |