mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2024-12-28 09:58:30 +01:00
111 lines
2.9 KiB
Perl
Executable file
111 lines
2.9 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# Copyright 2002 by Eric House
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
# Given arguments consisting of triples, first a string and then pbitm
|
|
# files representing bitmaps. The format looks like this:
|
|
|
|
# array [0-n] of { char len;
|
|
# char[3] alt txt;
|
|
# int16 offsetOfLarge;
|
|
# int16 offsetOfSmall;
|
|
# }
|
|
# array [0-n] of {
|
|
# bitmapLargeIfPresent;
|
|
# bitmapSmallIfPresent;
|
|
# }
|
|
#
|
|
# In addition, there's padding between bitmaps if needed to get the next
|
|
# one to a 2-byte boundary. And the input files are not in PalmOS bitmap
|
|
# format, so thay have to get converted into a tmp file before the sizes
|
|
# can be known and included in the eventual output.
|
|
|
|
use strict;
|
|
|
|
my $tmpfile = "/tmp/tmpout$$";
|
|
|
|
my $nSpecials = @ARGV / 3;
|
|
die "wrong number of args" if (@ARGV % 3) != 0;
|
|
my $gOffset = $nSpecials * 8; # sizeof(Xloc_specialEntry)
|
|
|
|
open TMPFILE, "> $tmpfile";
|
|
|
|
for ( my $i = 0; $i < $nSpecials; ++$i ) {
|
|
|
|
my $size;
|
|
|
|
my $str = shift( @ARGV );
|
|
my $len = length($str);
|
|
die "string $str too long" if $len > 3;
|
|
print $str;
|
|
while ( $len < 4 ) {
|
|
++$len;
|
|
print pack("c", 0 );
|
|
}
|
|
|
|
doOneFile( shift( @ARGV ), \*TMPFILE, \$gOffset );
|
|
doOneFile( shift( @ARGV ), \*TMPFILE, \$gOffset );
|
|
}
|
|
|
|
close TMPFILE;
|
|
|
|
# now append the tempfile
|
|
open TMPFILE, "< $tmpfile";
|
|
while ( read( TMPFILE, my $buffer, 128 ) ) {
|
|
print $buffer;
|
|
}
|
|
close TMPFILE;
|
|
|
|
unlink $tmpfile;
|
|
|
|
exit 0;
|
|
|
|
|
|
sub doOneFile($$$) {
|
|
my ( $fil, $fh, $offsetR ) = @_;
|
|
|
|
my $size = convertBmp($fil, $fh );
|
|
if ( ($size % 2) != 0 ) {
|
|
++$size;
|
|
print $fh pack( "c", 0 );
|
|
}
|
|
|
|
print pack( "n", $size > 0? ${$offsetR} : 0 );
|
|
|
|
${$offsetR} += $size;
|
|
} # doOneFile
|
|
|
|
sub convertBmp($$) {
|
|
my ( $pbitmfile, $fhandle ) = @_;
|
|
|
|
if ( $pbitmfile eq "/dev/null" ) {
|
|
return 0;
|
|
} else {
|
|
|
|
# for some reason I can't get quote marks to print into tmp.rcp using just `echo`
|
|
open TMP, "> tmp.rcp";
|
|
print TMP "BITMAP ID 1000 \"$pbitmfile\" AUTOCOMPRESS";
|
|
close TMP;
|
|
|
|
`pilrc tmp.rcp`;
|
|
print $fhandle `cat Tbmp03e8.bin`;
|
|
my $siz = -s "Tbmp03e8.bin";
|
|
`rm -f tmp.rcp Tbmp03e8.bin`;
|
|
|
|
return $siz;
|
|
}
|
|
}
|