www.pudn.com > sdk_host_2520.rar > pdm_sdm.pl
#;///////////////////////////////////////////////////////////////////////////////
#; Copyright(C) SigmaTel, Inc. 2000-2001
#;
#; Filename: PDM_SDM.pl
#; Description: Utility routines used in creating Primary and Secondary DBCS Map reosurces
#;///////////////////////////////////////////////////////////////////////////////
use strict;
my $MBC_CODE = 1;
my $SBC_CODE = 0;
#;///////////////////////////////////////////////////////////////////////////////
sub generate_PDM_SDM_MBC_src {
my $SDM_index = shift;
return sprintf "%02x%04x\n", $MBC_CODE, $SDM_index;
}
#;///////////////////////////////////////////////////////////////////////////////
sub generate_PDM_SDM_SBC_src {
my $UnicodeChar = shift;
return sprintf "%02x%04x\n", $SBC_CODE, $UnicodeChar;
}
#;///////////////////////////////////////////////////////////////////////////////
sub build_PDM_src {
my $filename = shift;
my $pMap = shift;
my $defaultUnicodeCharacter = shift;
open(PDM_SRC, ">$filename") || die "Can't open output file: $filename\n";
print PDM_SRC "\$RESOURCE_TYPE\n";
print PDM_SRC "DATA\n";
print PDM_SRC "\$REC_SIZE\n";
print PDM_SRC 3+256,"\n";
print PDM_SRC "\$DATA\n";
printf PDM_SRC "%06x\n", 3*256;
print PDM_SRC "000002\n"; # RSRC_TYPE_DATA
my $byteVal;
my $SDMs_count = 0;
for ($byteVal = 0; $byteVal<256; $byteVal++) {
# The mapping at "$byteVal" may be
# undefined - use defaultUnicodeCharacter
# scalar - use scalar value as Unicode character
# a hash - link to map of trail bytes
if (!defined($$pMap{$byteVal})) {
print PDM_SRC generate_PDM_SDM_SBC_src($defaultUnicodeCharacter);
}
elsif (!ref($$pMap{$byteVal})) {
print PDM_SRC generate_PDM_SDM_SBC_src($$pMap{$byteVal});
}
else {
print PDM_SRC generate_PDM_SDM_MBC_src($SDMs_count++);
}
}
close PDM_SRC;
}
#;///////////////////////////////////////////////////////////////////////////////
sub build_SDMs_src {
my $filename = shift;
my $pMap = shift;
my $defaultUnicodeCharacter = shift;
open(SDM_SRC, ">$filename") || die "Can't open output file: $filename\n";
print SDM_SRC "\$RESOURCE_TYPE\n";
print SDM_SRC "DATA\n";
print SDM_SRC "\$REC_SIZE\n";
print SDM_SRC 3+256,"\n";
print SDM_SRC "\$DATA\n";
printf SDM_SRC "%06x\n", 3*256;
print SDM_SRC "000002\n"; # RSRC_TYPE_DATA
my $byteVal;
my $SDMs_count = 0;
for ($byteVal = 0; $byteVal<256; $byteVal++) {
# The mapping at "$byteVal" may be
# undefined - use defaultUnicodeCharacter
# scalar - use scalar value as Unicode character
# a hash - link to map of trail bytes
if (!defined($pMap->{$byteVal})) {
print SDM_SRC generate_PDM_SDM_SBC_src($defaultUnicodeCharacter);
}
elsif (!ref($pMap->{$byteVal})) {
print SDM_SRC generate_PDM_SDM_SBC_src($pMap->{$byteVal});
}
else {
die "Internal error - MBC in SDM!";
}
}
close SDM_SRC;
}
1;
#;///////////////////////////////////////////////////////////////////////////////
#;///////////////////////////////////////////////////////////////////////////////
#;///////////////////////////////////////////////////////////////////////////////