2002-09-26 09:07:46 +00:00
|
|
|
#!/usr/bin/env perl
|
2002-09-24 12:38:00 +00:00
|
|
|
############################################################################
|
|
|
|
# __________ __ ___.
|
|
|
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
|
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
|
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
|
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
|
|
# \/ \/ \/ \/ \/
|
|
|
|
# $Id$
|
|
|
|
#
|
|
|
|
# Copyright (C) 2002 by Daniel Stenberg <daniel@haxx.se>
|
|
|
|
#
|
|
|
|
# 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] || !$ARGV[1] || !$ARGV[2]) {
|
|
|
|
print <<MOO
|
|
|
|
Usage: binlang <english file> <language file> <output file>
|
|
|
|
|
|
|
|
Generate a binary language file.
|
|
|
|
MOO
|
|
|
|
;
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
2002-10-29 08:23:33 +00:00
|
|
|
if($ARGV[0] eq "-v") {
|
|
|
|
shift @ARGV;
|
|
|
|
$debug=1;
|
|
|
|
}
|
|
|
|
|
2002-09-24 12:38:00 +00:00
|
|
|
my $english = $ARGV[0];
|
|
|
|
my $input = $ARGV[1];
|
|
|
|
my $output = $ARGV[2];
|
|
|
|
|
|
|
|
my $idnum=0;
|
|
|
|
|
2003-03-09 13:44:33 +00:00
|
|
|
open(ENG, "<$english") or die "Can't open $english";
|
|
|
|
open(LANG, "<$input") or die "Can't open $input";
|
2003-04-12 16:23:55 +00:00
|
|
|
open(OUTF, ">$output") or die "Can't open $output";
|
2002-09-24 12:38:00 +00:00
|
|
|
|
2004-01-23 11:41:11 +00:00
|
|
|
my $langversion = 2;
|
2002-09-24 12:38:00 +00:00
|
|
|
|
2003-04-12 16:23:55 +00:00
|
|
|
binmode OUTF;
|
2002-09-24 12:46:04 +00:00
|
|
|
|
2003-04-12 16:23:55 +00:00
|
|
|
printf OUTF ("\x1a%c", $langversion); # magic lang file header
|
2002-09-24 12:38:00 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# We scan the english file to get the correct order of the id numbers
|
|
|
|
#
|
2002-10-29 08:23:33 +00:00
|
|
|
my $idnum=0; # start with a true number
|
2002-09-24 12:38:00 +00:00
|
|
|
while(<ENG>) {
|
|
|
|
if($_ =~ / *\#/) {
|
|
|
|
# comment
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
# get rid of DOS newlines
|
|
|
|
$_ =~ s/\r//g;
|
2003-04-29 12:38:32 +00:00
|
|
|
if($_ =~ /^ *([a-z]+): *(.*)/) {
|
2002-09-24 12:38:00 +00:00
|
|
|
($var, $value) = ($1, $2);
|
|
|
|
$set{$var} = $value;
|
|
|
|
|
|
|
|
if($var eq "new") {
|
|
|
|
# the last one for a single phrase
|
|
|
|
$idnum{$set{'id'}}=$idnum;
|
|
|
|
$idnum++;
|
|
|
|
undef %set;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
close(ENG);
|
|
|
|
|
|
|
|
while(<LANG>) {
|
2003-04-29 12:38:32 +00:00
|
|
|
if($_ =~ /^ *\#/) {
|
2002-09-24 12:38:00 +00:00
|
|
|
# comment
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
# get rid of DOS newlines
|
|
|
|
$_ =~ s/\r//g;
|
2003-04-29 12:38:32 +00:00
|
|
|
if($_ =~ /^ *([a-z]+): *(.*)/) {
|
2002-09-24 12:38:00 +00:00
|
|
|
($var, $value) = ($1, $2);
|
|
|
|
# print "$var => $value\n";
|
|
|
|
|
|
|
|
$set{$var} = $value;
|
|
|
|
|
|
|
|
if($var eq "new") {
|
|
|
|
# the last one for a single phrase
|
|
|
|
|
|
|
|
if(!$value) {
|
|
|
|
# if not set, get the english version
|
|
|
|
$value = $set{'eng'};
|
|
|
|
}
|
|
|
|
|
2003-05-08 08:35:28 +00:00
|
|
|
if($value =~ s/^\"(.*)\"\s*$/$1/g) {
|
2002-09-24 12:38:00 +00:00
|
|
|
|
2002-10-11 22:01:24 +00:00
|
|
|
$idnum = $idnum{$set{'id'}};
|
2002-09-24 12:38:00 +00:00
|
|
|
|
2002-10-29 08:23:33 +00:00
|
|
|
if($idnum eq "") {
|
|
|
|
warn "Found no ".$set{'id'}." in english file!\n";
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$idnum{$set{'id'}} = '_done_';
|
|
|
|
|
2003-04-12 16:23:55 +00:00
|
|
|
printf OUTF ("%c%c%s\x00",
|
2002-10-29 08:23:33 +00:00
|
|
|
($idnum>>8), ($idnum&0xff),
|
|
|
|
$value);
|
|
|
|
if($debug) {
|
|
|
|
printf("%02x => %s\n", $idnum, $value);
|
|
|
|
}
|
|
|
|
}
|
2002-10-11 22:01:24 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
warn "String for ".$set{'id'}." misses quotes\n";
|
|
|
|
}
|
2002-09-24 12:38:00 +00:00
|
|
|
|
|
|
|
undef %set;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
close(LANG);
|
|
|
|
|
2003-04-12 16:23:55 +00:00
|
|
|
close(OUTF);
|
2002-09-26 09:07:46 +00:00
|
|
|
|
|
|
|
foreach $k (keys(%idnum))
|
|
|
|
{
|
|
|
|
if($idnum{$k} ne '_done_')
|
|
|
|
{
|
|
|
|
warn "Missing ID in $input: $k\n";
|
|
|
|
}
|
|
|
|
}
|