diff options
Diffstat (limited to 'ACE/MPC/modules/GUID.pm')
-rw-r--r-- | ACE/MPC/modules/GUID.pm | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/ACE/MPC/modules/GUID.pm b/ACE/MPC/modules/GUID.pm new file mode 100644 index 00000000000..0f4a29b709a --- /dev/null +++ b/ACE/MPC/modules/GUID.pm @@ -0,0 +1,48 @@ +package GUID; + +# ************************************************************ +# Description : Generate GUID's for VC7 projects and workspaces +# Author : Chad Elliott +# Create Date : 5/14/2002 +# ************************************************************ + +# ************************************************************ +# Pragmas +# ************************************************************ + +use strict; + +# ************************************************************ +# Subroutine Section +# ************************************************************ + +sub generate { + my($out, $in, $cwd) = @_; + my $chash = GUID::hash($cwd); + my $nhash = GUID::hash($out); + my $ihash = GUID::hash($in); + my $val = 0xfeca1bad; + + return sprintf("%08X-%04X-%04X-%04X-%04X%08X", + $nhash & 0xffffffff, ($val >> 16) & 0xffff, + ($val & 0xffff), ($ihash >> 16) & 0xffff, + $ihash & 0xffff, $chash & 0xffffffff); +} + + +sub hash { + my $str = shift; + my $value = 0; + + if (defined $str) { + my $length = length($str); + for(my $i = 0; $i < $length; $i++) { + $value = (($value << 4) & 0xffffffff) ^ ($value >> 28) + ^ ord(substr($str, $i, 1)); + } + } + + return $value; +} + +1; |