| #!/usr/bin/env perl |
| ############################################################################ |
| # __________ __ ___. |
| # 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; |
| } |
| |
| my $english = $ARGV[0]; |
| my $input = $ARGV[1]; |
| my $output = $ARGV[2]; |
| |
| my $idnum=0; |
| |
| open(ENG, "<$english"); |
| open(LANG, "<$input"); |
| open(OFILE, ">$output"); |
| |
| my $langversion = 1; |
| |
| binmode OFILE; |
| |
| printf OFILE ("\x1a%c", $langversion); # magic lang file header |
| |
| # |
| # We scan the english file to get the correct order of the id numbers |
| # |
| while(<ENG>) { |
| if($_ =~ / *\#/) { |
| # comment |
| next; |
| } |
| # get rid of DOS newlines |
| $_ =~ s/\r//g; |
| if($_ =~ / *([a-z]+): *(.*)/) { |
| ($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>) { |
| if($_ =~ / *\#/) { |
| # comment |
| next; |
| } |
| # get rid of DOS newlines |
| $_ =~ s/\r//g; |
| if($_ =~ / *([a-z]+): *(.*)/) { |
| ($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'}; |
| } |
| |
| $value =~ s/^\"(.*)\"/$1/g; |
| |
| $idnum = $idnum{$set{'id'}}; |
| $idnum{$set{'id'}} = '_done_'; |
| |
| printf OFILE ("%c%c%s\x00", |
| ($idnum>>8), ($idnum&0xff), |
| $value); |
| |
| undef %set; |
| } |
| |
| } |
| |
| } |
| close(LANG); |
| |
| close(OFILE); |
| |
| foreach $k (keys(%idnum)) |
| { |
| if($idnum{$k} ne '_done_') |
| { |
| warn "Missing ID in $input: $k\n"; |
| } |
| } |