sbsv1_os/e32toolp/genutil/genutl.pm
changeset 0 83f4b4db085c
child 1 d4b442d23379
equal deleted inserted replaced
-1:000000000000 0:83f4b4db085c
       
     1 # Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 # All rights reserved.
       
     3 # This component and the accompanying materials are made available
       
     4 # under the terms of "Eclipse Public License v1.0"
       
     5 # which accompanies this distribution, and is available
       
     6 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 #
       
     8 # Initial Contributors:
       
     9 # Nokia Corporation - initial contribution.
       
    10 #
       
    11 # Contributors:
       
    12 #
       
    13 # Description:
       
    14 # Contains utility subroutines for MAKMAKE and associated scripts
       
    15 # 
       
    16 #
       
    17 
       
    18 package Genutl;
       
    19 
       
    20 require Exporter;
       
    21 @ISA=qw(Exporter);
       
    22 
       
    23 @EXPORT=qw(
       
    24 	Genutl_AnyToHex
       
    25 	Genutl_VersionToUserString
       
    26 	Genutl_VersionToHexString
       
    27 	Genutl_VersionToFileAugment
       
    28 	Genutl_StringToVersion
       
    29 	Genutl_ParseVersionedName
       
    30 	Genutl_NormaliseVersionedName
       
    31 );
       
    32 
       
    33 use strict;
       
    34 
       
    35 sub Genutl_AnyToHex ($) {
       
    36 # changes decimal and hexadecimal numbers to the required hexadecimal format
       
    37 	my $Num=$_[0];
       
    38 	$Num=lc $Num;	# lower casing the x specifying hexadecimal essential
       
    39 	if ($Num=~/^(\d{1,10}|0x[\dabcdef]{1,8})$/o) { # this isn't perfect
       
    40 		$Num=oct $Num if $Num=~/^0x/o;
       
    41 		return sprintf "0x%.8lx", $Num;
       
    42 	}
       
    43 	return undef;
       
    44 }
       
    45 
       
    46 sub Genutl_VersionToUserString(%) {
       
    47 	my (%ver) = @_;
       
    48 	return sprintf("%d\.%d", $ver{major}, $ver{minor});
       
    49 }
       
    50 
       
    51 sub Genutl_VersionToHexString(%) {
       
    52 	my (%ver) = @_;
       
    53 	return sprintf("%04x%04x", $ver{major}, $ver{minor});
       
    54 }
       
    55 
       
    56 sub Genutl_VersionToFileAugment(%) {
       
    57 	my (%ver) = @_;
       
    58 	return sprintf("{%04x%04x}", $ver{major}, $ver{minor});
       
    59 }
       
    60 
       
    61 sub Genutl_StringToVersion($) {
       
    62 	my ($s) = @_;
       
    63 	if ($s =~ /^(\d+)\.(\d+)$/) {
       
    64 		my %ver;
       
    65 		$ver{major} = $1;
       
    66 		$ver{minor} = $2;
       
    67 		if ($ver{major}<32768 and $ver{minor}<32768) {
       
    68 			return %ver;
       
    69 		}
       
    70 	}
       
    71 	return undef;
       
    72 }
       
    73 
       
    74 sub Genutl_ParseVersionedName($) {
       
    75 	my ($nref) = @_;
       
    76 	return 1 unless ($$nref =~ /\{|\}/);
       
    77 	my $a;
       
    78 	my $b;
       
    79 	if ($$nref =~ /(.*)\{((\d|a|b|c|d|e|f){8})\}(.*?)/i) {
       
    80 		$a = $1;
       
    81 		$b = $3;
       
    82 	} elsif ($$nref =~ /(.*)\{\s*(\d+)\s*\.\s*(\d+)\s*\}(.*?)$/i) {
       
    83 		$a = $1;
       
    84 		$b = $4;
       
    85 		my $major = $2;
       
    86 		my $minor = $3;
       
    87 		return 0 if ($major>=32768 or $minor>=32768);
       
    88 		$$nref = $a.sprintf("{%04x%04x}",$major,$minor).$b;
       
    89 	} else {
       
    90 		return 0;
       
    91 	}
       
    92 	if ($a=~/\{|\}/ or $b=~/\{|\}/) {
       
    93 		return 0;
       
    94 	}
       
    95 	return 1;
       
    96 }
       
    97 
       
    98 sub Genutl_NormaliseVersionedName($) {
       
    99 	my ($name) = @_;
       
   100 	if ($name =~ /(.*)\{\s*(\d+)\s*\.\s*(\d+)\s*\}(.*?)$/i) {
       
   101 		my $a = $1;
       
   102 		my $b = $4;
       
   103 		my $major = $2;
       
   104 		my $minor = $3;
       
   105 		return $a.sprintf("{%04x%04x}",$major,$minor).$b if ($major<32768 and $minor<32768);
       
   106 	}
       
   107 	return $name;
       
   108 }