--- loncom/xml/lonxml.pm	2001/05/26 17:27:28	1.79
+++ loncom/xml/lonxml.pm	2001/05/30 17:42:15	1.82
@@ -8,6 +8,7 @@
 # 3/29,5/4 Gerd Kortemeyer
 # 5/10 Scott Harrison
 # 5/26 Gerd Kortemeyer
+# 5/27 H. K. Ng
 
 package Apache::lonxml; 
 use vars 
@@ -16,6 +17,7 @@ use strict;
 use HTML::TokeParser;
 use Safe;
 use Safe::Hole;
+use Math::Cephes qw(:trigs :hypers :bessels erf erfc);
 use Opcode;
 
 sub register {
@@ -170,16 +172,7 @@ sub xmlparse {
 
  my $safeeval = new Safe;
  my $safehole = new Safe::Hole;
- $safeeval->permit("entereval");
- $safeeval->permit(":base_math");
- $safeeval->permit("sort");
- $safeeval->deny(":base_io");
- $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT');
-#need to inspect this class of ops
-# $safeeval->deny(":base_orig");
- $safeinit .= ';$external::target='.$target.';';
- $safeinit .= ';$external::randomseed='.&Apache::lonnet::rndseed().';';
- &Apache::run::run($safeinit,$safeeval);
+ &init_safespace($target,$safeeval,$safehole,$safeinit);
 #-------------------- Redefinition of the target in the case of compound target
 
  ($target, my @tenta) = split('&&',$target);
@@ -395,6 +388,41 @@ sub callsub {
   return $currentstring;
 }
 
+sub init_safespace {
+  my ($target,$safeeval,$safehole,$safeinit) = @_;
+  $safeeval->permit("entereval");
+  $safeeval->permit(":base_math");
+  $safeeval->permit("sort");
+  $safeeval->deny(":base_io");
+  $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT');
+  
+  $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');
+  $safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos');
+  $safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan');
+  $safehole->wrap(\&Math::Cephes::sinh,$safeeval,'&sinh');
+  $safehole->wrap(\&Math::Cephes::cosh,$safeeval,'&cosh');
+  $safehole->wrap(\&Math::Cephes::tanh,$safeeval,'&tanh');
+  $safehole->wrap(\&Math::Cephes::asinh,$safeeval,'&asinh');
+  $safehole->wrap(\&Math::Cephes::acosh,$safeeval,'&acosh');
+  $safehole->wrap(\&Math::Cephes::atanh,$safeeval,'&atanh');
+  $safehole->wrap(\&Math::Cephes::erf,$safeeval,'&erf');
+  $safehole->wrap(\&Math::Cephes::erfc,$safeeval,'&erfc');
+  $safehole->wrap(\&Math::Cephes::j0,$safeeval,'&j0');
+  $safehole->wrap(\&Math::Cephes::j1,$safeeval,'&j1');
+  $safehole->wrap(\&Math::Cephes::jn,$safeeval,'&jn');
+  $safehole->wrap(\&Math::Cephes::jv,$safeeval,'&jv');
+  $safehole->wrap(\&Math::Cephes::y0,$safeeval,'&y0');
+  $safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1');
+  $safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn');
+  $safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv');
+  
+#need to inspect this class of ops
+# $safeeval->deny(":base_orig");
+  $safeinit .= ';$external::target='.$target.';';
+  $safeinit .= ';$external::randomseed='.&Apache::lonnet::rndseed().';';
+  &Apache::run::run($safeinit,$safeeval);
+}
+
 sub startredirection {
   $Apache::lonxml::redirection++;
   push (@Apache::lonxml::outputstack, '');