summaryrefslogtreecommitdiff
path: root/ACE/MPC/modules/WinVersionTranslator.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/MPC/modules/WinVersionTranslator.pm')
-rw-r--r--ACE/MPC/modules/WinVersionTranslator.pm69
1 files changed, 69 insertions, 0 deletions
diff --git a/ACE/MPC/modules/WinVersionTranslator.pm b/ACE/MPC/modules/WinVersionTranslator.pm
new file mode 100644
index 00000000000..ff82a7d2a3e
--- /dev/null
+++ b/ACE/MPC/modules/WinVersionTranslator.pm
@@ -0,0 +1,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;