--- loncom/homework/response.pm	2004/10/21 06:33:37	1.108
+++ loncom/homework/response.pm	2004/12/07 23:23:34	1.111
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # various response type definitons response definition
 #
-# $Id: response.pm,v 1.108 2004/10/21 06:33:37 albertel Exp $
+# $Id: response.pm,v 1.111 2004/12/07 23:23:34 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -124,11 +124,17 @@ sub setrandomnumber {
 	if (defined($Apache::inputtags::response[-1])) {
 	    $rndmod+=&Apache::lonnet::numval($Apache::inputtags::response[-1]);
 	}
-    } else {
+    } elsif ($rand_alg eq '64bit3') {
 	$rndmod=(&Apache::lonnet::numval2($Apache::inputtags::part) << 10);
 	if (defined($Apache::inputtags::response[-1])) {
 	    $rndmod+=&Apache::lonnet::numval2($Apache::inputtags::response[-1]);
 	}
+    } else {
+	$rndmod=(&Apache::lonnet::numval3($Apache::inputtags::part) << 10);
+	if (defined($Apache::inputtags::response[-1])) {
+	    my $shift=(4*scalar(@Apache::inputtags::response))%20;
+	    $rndmod+=(&Apache::lonnet::numval3($Apache::inputtags::response[-1]) << $shift );
+	}
     }
     if ($rndseed =~/([,:])/) {
 	my $char=$1;
@@ -136,12 +142,17 @@ sub setrandomnumber {
 	my ($num1,$num2)=split(/\Q$char\E/,$rndseed);
 	$num1+=$rndmod;
 	$num2+=$rndmod;
+	if($Apache::lonnet::_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); }
 	$rndseed=$num1.$char.$num2;
     } else {
 	$rndseed+=$rndmod;
+	if($Apache::lonnet::_64bit) {
+	    use integer;
+	    $rndseed=(($rndseed<<32)>>32);
+	}
     }
+    &Apache::lonxml::debug("randseed $rndmod $rndseed");
     &Apache::lonnet::setup_random_from_rndseed($rndseed);
-    &Apache::lonxml::debug("randseed $rndseed");
     return '';
 }