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; 
 
#;/////////////////////////////////////////////////////////////////////////////// 
#;/////////////////////////////////////////////////////////////////////////////// 
#;///////////////////////////////////////////////////////////////////////////////