blob: ff82a7d2a3ed47b62860c1653996f293aa134b97 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package WinVersionTranslator;
# ************************************************************
# Description : Translate the version value for Windows.
# Windows can not handle letters in the version
# and truncates anything after \d+\.\d+. We
# will convert letters to numbers, retain
# trailing numbers and everything else will be
# converted to a zero.
#
# ex. 1.4.3 => 1.403
# 1.4a.5 => 1.4005
# 1.4b.4 => 1.4104
#
# Author : Chad Elliott
# Create Date : 10/7/2004
# ************************************************************
# ************************************************************
# Pragmas
# ************************************************************
use strict;
# ************************************************************
# Subroutine Section
# ************************************************************
sub translate {
my $version = shift;
## See if the version contains something other than numbers followed by
## a decimal point and numbers.
if ($version =~ /^(\d+\.\d+)([^\d].*)$/) {
$version = $1;
my $post = $2;
my $length = length($post);
## Convert the non-conforming value to all numbers
for(my $i = 0; $i < $length; ++$i) {
my $ch = substr($post, $i, 1);
if ($ch =~ /[a-z]/i) {
my $digit = ord(lc($ch)) - ord('a');
$version .= $digit;
}
elsif ($ch =~ /\d/) {
$version .= $ch;
}
else {
$version .= '0';
}
}
## If we have a good version number we need to make sure that the
## minor version number does not exceed the value of a short unsigned
## integer.
if ($version =~ /(\d+)\.(\d+)/) {
my($major, $minor) = ($1, $2);
$minor =~ s/^\d+\.//;
while($minor > 65535) {
$minor = substr($minor, 0, length($minor) - 1);
}
$version = $major . '.' . $minor;
}
}
return $version;
}
1;
|