--- loncom/homework/response.pm	2004/08/29 07:49:35	1.101
+++ loncom/homework/response.pm	2005/02/24 00:36:10	1.114
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # various response type definitons response definition
 #
-# $Id: response.pm,v 1.101 2004/08/29 07:49:35 albertel Exp $
+# $Id: response.pm,v 1.114 2005/02/24 00:36:10 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 {
+	my $shift=(4*scalar(@Apache::inputtags::responselist))%30;
+	$rndmod=(&Apache::lonnet::numval3($Apache::inputtags::part) << (($shift+15)%30));
+	if (defined($Apache::inputtags::response[-1])) {
+	    $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 '';
 }
 
@@ -268,10 +279,11 @@ sub handle_previous {
     if ($$previous{'used'} && ($$previous{'award'} eq $ad) ) {
 	if ($$previous{'last'}) {
 	    push(@Apache::inputtags::previous,'PREVIOUSLY_LAST');
-	} else {
+	    push(@Apache::inputtags::previous_version,$$previous{'version'});
+	} elsif ($Apache::lonhomework::type ne 'survey') {
 	    push(@Apache::inputtags::previous,'PREVIOUSLY_USED');
+	    push(@Apache::inputtags::previous_version,$$previous{'version'});
 	}
-	push(@Apache::inputtags::previous_version,$$previous{'version'});
     }
 }
 
@@ -419,13 +431,11 @@ sub end_responseparam {
 }
 
 sub start_parameter {
-    my $result = &start_responseparam(@_);
-    return $result;
+    return &start_responseparam(@_);
 }
 
 sub end_parameter {
-    my $result = &end_responseparam(@_);
-    return $result;
+    return &end_responseparam(@_);
 }
 
 sub reset_params {
@@ -500,12 +510,15 @@ sub answer_footer {
 }
 
 sub showallfoils {
-    my $return=0;
-    if (defined($ENV{'form.showallfoils'}) &&
-	$ENV{'request.state'} eq 'construct') {
-	$return=1;
+    if (defined($ENV{'form.showallfoils'})) {
+	my ($symb)=&Apache::lonxml::whichuser();
+	if ($ENV{'request.state'} eq 'construct' || 
+	    ($ENV{'user.adv'} && $symb eq '')) {
+	    return 1;
+	}
     }
-    return $return;
+    if ($Apache::lonhomework::type eq 'survey') { return 1; }
+    return 0;
 }
 
 sub getresponse {
@@ -530,7 +543,11 @@ sub getresponse {
 	$Apache::lonhomework::results{"resource.$part.$id.scantron"}.=
 	    $response;
 	if ($resulttype ne 'letter') {
-	    $response = $let_to_num{$response};
+	    if ($resulttype eq 'A is 1') {
+		$response = $let_to_num{$response}+1;
+	    } else {
+		$response = $let_to_num{$response};
+	    }
 	}
     } else {
 	$response = $ENV{$formparm};
@@ -640,7 +657,7 @@ sub analyze_store_foilgroup {
 sub check_if_computed {
     my ($token,$parstack,$safeeval,$name)=@_;
     my $value = &Apache::lonxml::get_param($name,$parstack,$safeeval);
-    if ($value ne $token->[2]{$name}) {
+    if (ref($token->[2]) eq 'HASH' && $value ne $token->[2]{$name}) {
 	my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";
 	$Apache::lonhomework::analyze{"$part_id.answercomputed"} = 1;
     }
@@ -696,6 +713,19 @@ sub get_response_param {
     return $parameter;
 }
 
+sub submitted {
+    my ($who)=@_;
+    
+    # when scatron grading any submission is a submission
+    if ($ENV{'form.submitted'} eq 'scantron') { return 1; }
+    # if the caller only cared if this was a scantron submission
+    if ($who eq 'scantron') { return 0; }
+    # if the Submit Answer button for this particular part was pressed
+    my $partid=$Apache::inputtags::part;
+    if (defined($ENV{'form.submit_'.$partid})) { return 1; }
+    # otherwise no submission occured
+    return 0;
+}
 1;
 __END__