--- loncom/xml/lonxml.pm	2002/10/17 14:42:07	1.203
+++ loncom/xml/lonxml.pm	2002/10/17 17:13:44	1.204
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.203 2002/10/17 14:42:07 sakharuk Exp $
+# $Id: lonxml.pm,v 1.204 2002/10/17 17:13:44 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -140,6 +140,10 @@ $Apache::lonxml::registered=0;
 # a pointer the the Apache request object
 $Apache::lonxml::request='';
 
+# a problem number counter, and check on hether it is used
+$Apache::lonxml::counter=0;
+$Apache::lonxml::counter_changed=0;
+
 sub xmlbegin {
   my $output='';
   if ($ENV{'browser.mathml'}) {
@@ -555,6 +559,7 @@ sub xmlparse {
  if ($ENV{'request.uri'}) {
     &writeallows($ENV{'request.uri'});
  }
+ if ($Apache::lonxml::counter_changed) { &store_counter() }
  return $finaloutput;
 }
 
@@ -847,14 +852,7 @@ sub setup_globals {
   my ($request,$target)=@_;
   $Apache::lonxml::request=$request;
   $Apache::lonxml::registered = 0;
-  if ($ENV{'form.counter'}) {
-      $Apache::lonxml::counter=$ENV{'form.counter'}
-  } elsif (not defined $Apache::lonxml::counter) {
-      $Apache::lonxml::counter=1;
-      my %moreenv;
-      $moreenv{'form.counter'}=$Apache::lonxml::counter;
-      &Apache::lonnet::appenv(%moreenv);
-  } 
+  &init_counter();
   @Apache::lonxml::pwd=();
   @Apache::lonxml::extlinks=();
   if ($target eq 'meta') {
@@ -1038,6 +1036,26 @@ sub get_all_text_unbalanced {
  return $result
 }
 
+sub increment_counter {
+    $Apache::lonxml::counter++;
+    $Apache::lonxml::counter_changed=1;
+}
+
+sub init_counter {
+    if (defined($ENV{'form.counter'})) {
+	$Apache::lonxml::counter=$ENV{'form.counter'};
+    } elsif (not defined($Apache::lonxml::counter)) {
+	$Apache::lonxml::counter=1;
+	&store_counter();
+    }
+    $Apache::lonxml::counter_changed=0;
+}
+
+sub store_counter {
+    &Apache::lonnet::appenv(('form.counter' => $Apache::lonxml::counter));
+    return '';
+}
+
 sub get_all_text {
  my($tag,$pars)= @_;
  my $depth=0;