version 1.96, 2002/07/05 21:44:50
|
version 1.97, 2002/07/15 12:26:51
|
Line 783 sub sett {
|
Line 783 sub sett {
|
} else { |
} else { |
$pattern='[A-Z]'; |
$pattern='[A-Z]'; |
} |
} |
|
|
|
# Deal with the template row |
foreach (keys(%f)) { |
foreach (keys(%f)) { |
if ($_=~/template\_(\w)/) { |
if ($_=~/template\_(\w)/) { |
my $col=$1; |
my $col=$1; |
Line 809 sub sett {
|
Line 811 sub sett {
|
} |
} |
} |
} |
} |
} |
|
|
|
# Deal with the normal cells |
foreach (keys(%f)) { |
foreach (keys(%f)) { |
if (($f{$_}) && ($_!~/template\_/)) { |
if (($f{$_}) && ($_!~/template\_/)) { |
my $matches=($_=~/^$pattern(\d+)/); |
my $matches=($_=~/^$pattern(\d+)/); |
Line 824 sub sett {
|
Line 828 sub sett {
|
} |
} |
} |
} |
} |
} |
|
# For inserted lines, [B-Z] is also valid |
|
|
|
unless ($sheettype eq 'assesscalc') { |
|
foreach (keys(%f)) { |
|
if ($_=~/[B-Z](\d+)/) { |
|
if ($f{'A'.$1}=~/^[\~\-]/) { |
|
$t{$_}=$f{$_}; |
|
$t{$_}=~s/\.\.+/\,/g; |
|
$t{$_}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; |
|
$t{$_}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge; |
|
} |
|
} |
|
} |
|
} |
|
|
# For some reason 'A0' gets special treatment... This seems superfluous |
# For some reason 'A0' gets special treatment... This seems superfluous |
# but I imagine it is here for a reason. |
# but I imagine it is here for a reason. |
$t{'A0'}=$f{'A0'}; |
$t{'A0'}=$f{'A0'}; |
Line 836 sub calc {
|
Line 855 sub calc {
|
undef %v; |
undef %v; |
&sett(); |
&sett(); |
my $notfinished=1; |
my $notfinished=1; |
|
my $lastcalc=''; |
my $depth=0; |
my $depth=0; |
while ($notfinished) { |
while ($notfinished) { |
$notfinished=0; |
$notfinished=0; |
Line 846 sub calc {
|
Line 866 sub calc {
|
undef %v; |
undef %v; |
return $_.': '.$@; |
return $_.': '.$@; |
} |
} |
if ($v{$_} ne $old) { $notfinished=1; } |
if ($v{$_} ne $old) { $notfinished=1; $lastcalc=$_; } |
} |
} |
$depth++; |
$depth++; |
if ($depth>100) { |
if ($depth>100) { |
undef %v; |
undef %v; |
return 'Maximum calculation depth exceeded'; |
return $lastcalc.': Maximum calculation depth exceeded'; |
} |
} |
} |
} |
return ''; |
return ''; |
Line 986 sub getformulas {
|
Line 1006 sub getformulas {
|
return %{$safeeval->varglob('f')}; |
return %{$safeeval->varglob('f')}; |
} |
} |
|
|
|
# ----------------------------------------------------- Get value of $f{'A'.$n} |
|
|
|
sub getfa { |
|
my ($safeeval,$n)=@_; |
|
return $safeeval->reval('$f{"A'.$n.'"}'); |
|
} |
|
|
# -------------------------------------------------------------------- Get type |
# -------------------------------------------------------------------- Get type |
|
|
sub gettype { |
sub gettype { |
Line 1124 sub rown {
|
Line 1151 sub rown {
|
} |
} |
my $showf=0; |
my $showf=0; |
my $proc; |
my $proc; |
my $maxred; |
my $maxred=1; |
my $sheettype=&gettype($safeeval); |
my $sheettype=&gettype($safeeval); |
if ($sheettype eq 'studentcalc') { |
if ($sheettype eq 'studentcalc') { |
$proc='&outrowassess'; |
$proc='&outrowassess'; |
Line 1137 sub rown {
|
Line 1164 sub rown {
|
} else { |
} else { |
$maxred=26; |
$maxred=26; |
} |
} |
|
if (&getfa($safeeval,$n)=~/^[\~\-]/) { $maxred=1; } |
if ($n eq '-') { $proc='&templaterow'; $n=-1; $dataflag=1; } |
if ($n eq '-') { $proc='&templaterow'; $n=-1; $dataflag=1; } |
foreach ($safeeval->reval($proc.'('.$n.')')) { |
foreach ($safeeval->reval($proc.'('.$n.')')) { |
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); |
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); |
Line 1678 sub updateclasssheet {
|
Line 1706 sub updateclasssheet {
|
if ($_=~/^A(\d+)/) { |
if ($_=~/^A(\d+)/) { |
$maxrow=($1>$maxrow)?$1:$maxrow; |
$maxrow=($1>$maxrow)?$1:$maxrow; |
$existing{$f{$_}}=1; |
$existing{$f{$_}}=1; |
unless ((defined($currentlist{$f{$_}})) || (!$1)) { |
unless ((defined($currentlist{$f{$_}})) || (!$1) || |
|
($f{$_}=~/^(\~\~\~|\-\-\-)/)) { |
$f{$_}='!!! Obsolete'; |
$f{$_}='!!! Obsolete'; |
$changed=1; |
$changed=1; |
} |
} |
Line 1817 sub updatestudentassesssheet {
|
Line 1846 sub updatestudentassesssheet {
|
$maxrow=($1>$maxrow)?$1:$maxrow; |
$maxrow=($1>$maxrow)?$1:$maxrow; |
my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_}); |
my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_}); |
$existing{$usy}=1; |
$existing{$usy}=1; |
unless ((defined($current{$usy})) || (!$1)) { |
unless ((defined($current{$usy})) || (!$1) || |
$f{$_}='!!! Obsolete'; |
($f{$_}=~/^(\~\~\~|\-\-\-)/)){ |
|
$f{$_}='!!! Obsolete'; |
$changed=1; |
$changed=1; |
} elsif ($ufn) { |
} elsif ($ufn) { |
$current{$usy} |
$current{$usy} |
Line 1871 sub loadstudent {
|
Line 1901 sub loadstudent {
|
foreach (keys(%f)) { |
foreach (keys(%f)) { |
if ($_=~/^A(\d+)/) { |
if ($_=~/^A(\d+)/) { |
my $row=$1; |
my $row=$1; |
unless (($f{$_}=~/^\!/) || ($row==0)) { |
unless (($f{$_}=~/^[\!\~\-]/) || ($row==0)) { |
my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_}); |
my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_}); |
@assessdata=&exportsheet(&getuname($safeeval), |
@assessdata=&exportsheet(&getuname($safeeval), |
&getudom($safeeval), |
&getudom($safeeval), |
Line 1910 sub loadcourse {
|
Line 1940 sub loadcourse {
|
my $total=0; |
my $total=0; |
foreach (keys(%f)) { |
foreach (keys(%f)) { |
if ($_=~/^A(\d+)/) { |
if ($_=~/^A(\d+)/) { |
unless ($f{$_}=~/^\!/) { $total++; } |
unless ($f{$_}=~/^[\!\~\-]/) { $total++; } |
} |
} |
} |
} |
my $now=0; |
my $now=0; |
Line 1930 ENDPOP
|
Line 1960 ENDPOP
|
foreach (keys(%f)) { |
foreach (keys(%f)) { |
if ($_=~/^A(\d+)/) { |
if ($_=~/^A(\d+)/) { |
my $row=$1; |
my $row=$1; |
unless (($f{$_}=~/^\!/) || ($row==0)) { |
unless (($f{$_}=~/^[\!\~\-]/) || ($row==0)) { |
my @studentdata=&exportsheet(split(/\:/,$f{$_}), |
my @studentdata=&exportsheet(split(/\:/,$f{$_}), |
'studentcalc'); |
'studentcalc'); |
undef %userrdatas; |
undef %userrdatas; |
Line 2094 sub loadassessment {
|
Line 2124 sub loadassessment {
|
my %f=&getformulas($safeeval); |
my %f=&getformulas($safeeval); |
foreach (keys(%f)) { |
foreach (keys(%f)) { |
if ($_=~/^A/) { |
if ($_=~/^A/) { |
unless ($f{$_}=~/^\!/) { |
unless ($f{$_}=~/^[\!\~\-]/) { |
if ($f{$_}=~/^parameter/) { |
if ($f{$_}=~/^parameter/) { |
if ($thisassess{$f{$_}}) { |
if ($thisassess{$f{$_}}) { |
my $val=&parmval($f{$_},$safeeval); |
my $val=&parmval($f{$_},$safeeval); |