richter     01/03/26 20:26:45

  Modified:    .        Changes.pod Embperl.pm EmbperlObject.pm MANIFEST
                        TODO test.pl
  Added:       test/cmp epobase.htm epoincdiv.htm
               test/html/EmbperlObject epoincdiv.htm
  Log:
     - Catch exceptions inside of Embperl.pm and correctly cleanup the
       request. This avoids problems in further request in case anything
       was really going wrong.
     - If the base template in an EmbperlObject request is requested
       directly the Execute ('*') does nothing, to avoid
       endless recursion.
  
  Revision  Changes    Path
  1.157     +9 -1      embperl/Changes.pod
  
  Index: Changes.pod
  ===================================================================
  RCS file: /home/cvs/embperl/Changes.pod,v
  retrieving revision 1.156
  retrieving revision 1.157
  diff -u -r1.156 -r1.157
  --- Changes.pod       2001/03/09 06:21:38     1.156
  +++ Changes.pod       2001/03/27 04:26:41     1.157
  @@ -9,7 +9,15 @@
      - Fixed bug in SetSessionCookie which had called undefined method 
        getinitalid.  Spotted by Sun Choi.
      - Additions to IntroEmbperlObject.pod by Neil Gunton.
  -   
  +   - Emulate the syntax => Text parameter of Embperl 2.0, which allows 
  +     to include pure text files any without interpretation. Requested
  +     by Kee Hinckley.
  +   - Catch exceptions inside of Embperl.pm and correctly cleanup the
  +     request. This avoids problems in further request in case anything
  +     was really going wrong.
  +   - If the base template in an EmbperlObject request is requested
  +     directly the Execute ('*') does nothing, to avoid
  +     endless recursion.
   
   =head1 1.3.1 (RELEASE)   13 Feb. 2001
   
  
  
  
  1.144     +167 -139  embperl/Embperl.pm
  
  Index: Embperl.pm
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl.pm,v
  retrieving revision 1.143
  retrieving revision 1.144
  diff -u -r1.143 -r1.144
  --- Embperl.pm        2001/03/09 06:21:38     1.143
  +++ Embperl.pm        2001/03/27 04:26:41     1.144
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: Embperl.pm,v 1.143 2001/03/09 06:21:38 richter Exp $
  +#   $Id: Embperl.pm,v 1.144 2001/03/27 04:26:41 richter Exp $
   #
   ###################################################################################
   
  @@ -837,180 +837,208 @@
        }
   
   
  +    my $package ;
       my $ar  ;
       $ar = Apache->request if (defined ($req_rec)) ; # workaround that 
Apache::Request has another C Interface, than Apache
       my $r = SetupRequest ($ar, $Inputfile, $mtime, $filesize, ($$req{firstline} || 
1), $Outputfile, $conf,
                             &epIOMod_Perl, $In, $Out, $Sub, defined 
($import)?scalar(caller ($import > 0?$import - 1:0)):'',$SessionMgnt) ;
       
  -    if (exists ($$req{'bless'})) 
  +    eval
           {
  -        bless $r, $$req{'bless'} ;
  -        warn "\@ISA corrupted HTML::Embperl::Req must be a base class of 
$$req{'bless'}" if (!$r -> isa ('HTML::Embperl::Req')) ; 
  -        }
  -
  -    $r -> Path ($req->{path}) if ($req->{path}) ;
  -    $r -> PathNdx ($pathndx) ;
  -
  -    my $package = $r -> CurrPackage ;
  -    $evalpackage = $package ;   
  -    my $exports ;
  +        if (exists ($$req{'bless'})) 
  +            {
  +            bless $r, $$req{'bless'} ;
  +            warn "\@ISA corrupted HTML::Embperl::Req must be a base class of 
$$req{'bless'}" if (!$r -> isa ('HTML::Embperl::Req')) ; 
  +            }
   
  -    $r -> CreateAliases () ;
  +        $r -> Path ($req->{path}) if ($req->{path}) ;
  +        $r -> PathNdx ($pathndx) ;
   
  -    if (defined ($import) && ($exports = $r -> ExportHash))
  -     {
  -        $r -> Export ($exports, caller ($import - 1)) if ($import) ;
  -     $rc = 0 ;
  -     }
  -    else
  -     {
  -     #local $^W = 0 ;
  -     @ffld = @{$$req{'ffld'}} if (defined ($$req{'ffld'})) ;
  -     if (defined ($$req{'fdat'})) 
  -         {
  -         %fdat = %{$$req{'fdat'}} ;
  -         @ffld = keys %fdat if (!defined ($$req{'ffld'})) ;
  +        $package = $r -> CurrPackage ;
  +        $evalpackage = $package ;   
  +        my $exports ;
  +
  +        $r -> CreateAliases () ;
  +
  +        if (defined ($import) && ($exports = $r -> ExportHash))
  +         {
  +            $r -> Export ($exports, caller ($import - 0)) if ($import) ;
  +         $rc = 0 ;
            }
  -     elsif (!($optDisableFormData) &&
  -            !($r -> SubReq) &&
  -            defined($ENV{'CONTENT_TYPE'}) &&
  -            $ENV{'CONTENT_TYPE'}=~m|^multipart/form-data|)
  -         { # just let CGI.pm read the multipart form data, see cgi docu
  -         #eval 'require CGI' ;
  -         #die "require CGI failed: $@" if ($@); 
  -         require CGI ;
  -
  -         my $cgi ;
  -         #$cgi = new CGI  ;
  -         eval { $cgi = new CGI } ;
  -         if ($@ || !$cgi)
  -                {
  -                $r -> logerror (rcCGIError, $@)  ;
  -                $@ = '' ;
  -                }
  -            else
  -                {
  -             @ffld = $cgi->param;
  +        else
  +         {
  +         #local $^W = 0 ;
  +         @ffld = @{$$req{'ffld'}} if (defined ($$req{'ffld'})) ;
  +         if (defined ($$req{'fdat'})) 
  +             {
  +             %fdat = %{$$req{'fdat'}} ;
  +             @ffld = keys %fdat if (!defined ($$req{'ffld'})) ;
  +             }
  +         elsif (!($optDisableFormData) &&
  +                !($r -> SubReq) &&
  +                defined($ENV{'CONTENT_TYPE'}) &&
  +                $ENV{'CONTENT_TYPE'}=~m|^multipart/form-data|)
  +             { # just let CGI.pm read the multipart form data, see cgi docu
  +             #eval 'require CGI' ;
  +             #die "require CGI failed: $@" if ($@); 
  +             require CGI ;
  +
  +             my $cgi ;
  +             #$cgi = new CGI  ;
  +             eval { $cgi = new CGI } ;
  +             if ($@ || !$cgi)
  +                    {
  +                    $r -> logerror (rcCGIError, $@)  ;
  +                    $@ = '' ;
  +                    }
  +                else
  +                    {
  +                 @ffld = $cgi->param;
       
  -             my $params ;
  -             foreach ( @ffld )
  -                 {
  -                 # the param_fetch needs CGI.pm 2.43
  -                 #$params = $cgi->param_fetch( $_ ) ;
  -                 $params = $cgi->{$_} ;
  -                 if ($#$params > 0)
  -                     {
  -                     $fdat{ $_ } = join ("\t", @$params) ;
  -                     }
  -                 else
  +                 my $params ;
  +                 foreach ( @ffld )
                        {
  -                     $fdat{ $_ } = $params -> [0] ;
  -                     }
  -                 
  -                 ##print LOG "[$$]FORM: $_=" . (ref ($fdat{$_})?ref 
($fdat{$_}):$fdat{$_}) . "\n" if ($dbgForm) ; 
  -                 print LOG "[$$]FORM: $_=$fdat{$_}\n" if ($dbgForm) ; 
  +                     # the param_fetch needs CGI.pm 2.43
  +                     #$params = $cgi->param_fetch( $_ ) ;
  +                     $params = $cgi->{$_} ;
  +                     if ($#$params > 0)
  +                         {
  +                         $fdat{ $_ } = join ("\t", @$params) ;
  +                         }
  +                     else
  +                         {
  +                         $fdat{ $_ } = $params -> [0] ;
  +                         }
  +                     
  +                     ##print LOG "[$$]FORM: $_=" . (ref ($fdat{$_})?ref 
($fdat{$_}):$fdat{$_}) . "\n" if ($dbgForm) ; 
  +                     print LOG "[$$]FORM: $_=$fdat{$_}\n" if ($dbgForm) ; 
  +
  +                     if (ref($fdat{$_}) eq 'Fh') 
  +                         {
  +                         $fdat{"-$_"} = $cgi -> uploadInfo($fdat{$_}) ;
  +                         }
  +                     }
  +                    }
  +             }
   
  -                 if (ref($fdat{$_}) eq 'Fh') 
  -                     {
  -                     $fdat{"-$_"} = $cgi -> uploadInfo($fdat{$_}) ;
  -                     }
  -                 }
  -                }
  +         my $saved_param = undef;
  +         if ( ref $$req{'param'} eq 'ARRAY') {
  +             no strict 'refs';
  +             # pass parameters via @param
  +             $saved_param = \@{"$package\:\:param"} 
  +                 if defined @{"$package\:\:param"};
  +             *{"$package\:\:param"}   = $$req{'param'};
            }
   
  -     my $saved_param = undef;
  -     if ( ref $$req{'param'} eq 'ARRAY') {
  -         no strict 'refs';
  -         # pass parameters via @param
  -         $saved_param = \@{"$package\:\:param"} 
  -             if defined @{"$package\:\:param"};
  -         *{"$package\:\:param"}   = $$req{'param'};
  -     }
   
  +            $r -> SetupSession ($req_rec, $Inputfile) ;
   
  -        $r -> SetupSession ($req_rec, $Inputfile) ;
  -
  -         {
  -         local $SIG{__WARN__} = \&Warn ;
  -         local *0 = \$Inputfile;
  -         my $oldfh = select (OUT) if ($optRedirectStdout) ;
  -         my $saver = $r ;
  +             {
  +             local $SIG{__WARN__} = \&Warn ;
  +             local *0 = \$Inputfile;
  +             my $oldfh = select (OUT) if ($optRedirectStdout) ;
  +             my $saver = $r ;
           
   
  -         $@ = undef ;
  -            $rc = CleanCallExecuteReq ($r, $$req{'param'}) ;
  -         #$rc = $r -> ExecuteReq ($$req{'param'}) ;
  -        
  -         $r = $saver ;
  -         select ($oldfh) if ($optRedirectStdout) ;
  -        
  -         if (exists $$req{'output_func'}) 
  -             {
  -             my @p ;
  -                my $ofreq = $$req{'output_func'} ;
  -                if (ref $ofreq)
  +             $@ = undef ;
  +                if ($req -> {'syntax'} eq 'Text')
                       {
  -                    @p = (ref ($ofreq) eq 'ARRAY')?@$ofreq:($$ofreq) ;
  +                    if (open FH, "<$Inputfile")
  +                        {
  +                        local $/ = undef ;
  +                        local $escmode = 0 ;
  +                        print OUT <FH> ;
  +                        close FH ;
  +                        }
  +                    else
  +                        {
  +                        $r -> logerror (rcFileOpenErr, $Inputfile) ;
  +                        }
                       }
                   else
                       {
  -                    @p = split (/\s*\,\s*/, $ofreq) ;
  +                    $rc = CleanCallExecuteReq ($r, $$req{'param'}) ;
                       }
  +        
  +             $r = $saver ;
  +             select ($oldfh) if ($optRedirectStdout) ;
  +        
  +             if (exists $$req{'output_func'}) 
  +                 {
  +                 my @p ;
  +                    my $ofreq = $$req{'output_func'} ;
  +                    if (ref $ofreq)
  +                        {
  +                        @p = (ref ($ofreq) eq 'ARRAY')?@$ofreq:($$ofreq) ;
  +                        }
  +                    else
  +                        {
  +                        @p = split (/\s*\,\s*/, $ofreq) ;
  +                        }
   
  -                my $OutFunc = shift @p ;
  -    no strict ;
  -             eval { &$OutFunc ($req_rec, $Out,@p) } ;
  -    use strict ;
  -             $r -> logerror (rcCallOutputFuncFailed, $@) if ($@) ;
  -             }
  -         }
  +                    my $OutFunc = shift @p ;
  +        no strict ;
  +                 eval { &$OutFunc ($req_rec, $Out,@p) } ;
  +        use strict ;
  +                 $r -> logerror (rcCallOutputFuncFailed, $@) if ($@) ;
  +                 }
  +             }
   
   
   
  -     if ( defined $saved_param ) {
  -         no strict 'refs';
  -         *{"$package\:\:param"} = $saved_param;
  -     }
  +         if ( defined $saved_param ) {
  +             no strict 'refs';
  +             *{"$package\:\:param"} = $saved_param;
  +         }
   
   
  -        $r -> CleanupSession ;
  +            $r -> CleanupSession ;
   
  -        $r -> Export ($exports, caller ($import - 1)) if ($import && ($exports = $r 
-> ExportHash)) ;
  +            $r -> Export ($exports, caller ($import - 0)) if ($import && ($exports 
= $r -> ExportHash)) ;
   
  -     my $cleanup    = $$req{'cleanup'}    || ($optDisableVarCleanup?-1:0) ;
  +         my $cleanup    = $$req{'cleanup'}    || ($optDisableVarCleanup?-1:0) ;
   
  -     if ($cleanup == -1)
  -         { ; } 
  -     elsif ($cleanup == 0)
  -         {
  -         if ($#cleanups == -1) 
  -             {
  -             push @cleanups, 'dbgShowCleanup' if ($dbgShowCleanup) ;
  -             $req_rec -> register_cleanup(\&HTML::Embperl::cleanup) if (defined 
($req_rec)) ;
  -             }
  -         push @cleanups, $package ;
  +         if ($cleanup == -1)
  +             { ; } 
  +         elsif ($cleanup == 0)
  +             {
  +             if ($#cleanups == -1) 
  +                 {
  +                 push @cleanups, 'dbgShowCleanup' if ($dbgShowCleanup) ;
  +                 $req_rec -> register_cleanup(\&HTML::Embperl::cleanup) if (defined 
($req_rec)) ;
  +                 }
  +             push @cleanups, $package ;
           
  -         cleanup () if (!$r -> SubReq () && !$req_rec) ;
  -         }
  -     else
  -         {
  -         push @cleanups, 'dbgShowCleanup' if ($dbgShowCleanup) ;
  -         push @cleanups, $package ;
  -         cleanup () ;
  -         }
  +             cleanup () if (!$r -> SubReq () && !$req_rec) ;
  +             }
  +         else
  +             {
  +             push @cleanups, 'dbgShowCleanup' if ($dbgShowCleanup) ;
  +             push @cleanups, $package ;
  +             cleanup () ;
  +             }
   
  -     $rc = $r -> Error?500:0 ;
  -     }
  +         $rc = $r -> Error?500:0 ;
  +         }
   
  -    if ($req -> {'isa'})
  -        {
  -        no strict ;
  -        my $callerisa = \@{caller () . '::ISA'} ;
  -        push @$callerisa, $package  if (!grep ($_ eq $package, @$callerisa)) ;
  -        use strict ;
  -        }
  +        if ($req -> {'isa'})
  +            {
  +            no strict ;
  +            my $callerisa = \@{caller (1) . '::ISA'} ;
  +            push @$callerisa, $package  if (!grep ($_ eq $package, @$callerisa)) ;
  +            use strict ;
  +            }
   
  -    @{$req -> {errors}} = @{$r -> ErrArray()} if (ref ($req -> {errors}) eq 
'ARRAY')  ;
  +        @{$req -> {errors}} = @{$r -> ErrArray()} if (ref ($req -> {errors}) eq 
'ARRAY')  ;
  +    } ; # eval
  +    if ($@)
  +     {
  +     my $err = $@ ;
  +        #require Devel::Symdump ;
  +     #warn "[$$] " . scalar (localtime) .  Devel::Symdump -> isa_tree ;
  +     HTML::Embperl::Req::FreeRequest ($r) ; # try to Free the Request data ($r may 
not be an objectref!)
  +     die $err ;
  +     }
   
       $r -> FreeRequest () ;
       
  
  
  
  1.43      +7 -4      embperl/EmbperlObject.pm
  
  Index: EmbperlObject.pm
  ===================================================================
  RCS file: /home/cvs/embperl/EmbperlObject.pm,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- EmbperlObject.pm  2001/02/13 05:39:10     1.42
  +++ EmbperlObject.pm  2001/03/27 04:26:42     1.43
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: EmbperlObject.pm,v 1.42 2001/02/13 05:39:10 richter Exp $
  +#   $Id: EmbperlObject.pm,v 1.43 2001/03/27 04:26:42 richter Exp $
   #
   ###################################################################################
   
  @@ -292,16 +292,19 @@
                   $package = $HTML::Embperl::evalpackage ;
                   print HTML::Embperl::LOG "[$$]EmbperlObject new file: $filename, 
package = $package\n"  if ($debug);
                   }
  +            }
   
  -            no strict ;
  +        no strict ;
  +        if (!@{"$package\:\:ISA"})
  +            {
               @{"$package\:\:ISA"} = ($basepackage) if ($package ne $basepackage) ;
  -            use strict ;
               }
  +        use strict ;
   
           $req -> {'inputfile'} = $ENV{PATH_TRANSLATED} = $fn ;
           $req -> {'bless'}     = $package ;
           $req -> {'path'}      = $searchpath ;
  -        $req -> {'reqfilename'} = $filename ;
  +        $req -> {'reqfilename'} = $filename if ($filename ne $fn) ;
           return HTML::Embperl::Execute ($req) ;
           }
   
  
  
  
  1.63      +4 -0      embperl/MANIFEST
  
  Index: MANIFEST
  ===================================================================
  RCS file: /home/cvs/embperl/MANIFEST,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- MANIFEST  2001/02/07 08:20:46     1.62
  +++ MANIFEST  2001/03/27 04:26:42     1.63
  @@ -155,6 +155,7 @@
   test/html/EmbperlObject/epofoot.htm
   test/html/EmbperlObject/epopage1.htm
   test/html/EmbperlObject/epodiv.htm
  +test/html/EmbperlObject/epoincdiv.htm
   test/html/EmbperlObject/sub/subsub/eposubsub.htm
   test/html/EmbperlObject/sub/subsub/subsubsub/eposubsub.htm
   test/html/EmbperlObject/eposubsub2.htm
  @@ -261,6 +262,7 @@
   test/cmp/clearsess.htm
   test/cmp/epopage1.htm
   test/cmp/epodiv.htm
  +test/cmp/epoincdiv.htm
   test/cmp/epopage2.htm
   test/cmp/eposubsub.htm
   test/cmp/eposubsub2.htm
  @@ -275,6 +277,7 @@
   test/cmp/epobless.htm
   test/cmp/epobless2.htm
   test/cmp/epobless3.htm
  +test/cmp/epobase.htm
   test/cmp/getbsess.htm
   test/cmp/delrdsess.htm     
   test/cmp/delwrsess.htm
  @@ -289,3 +292,4 @@
   Embperl/Session.pm
   Embperl/Mail.pm
   EmbperlLogo.gif
  +
  
  
  
  1.107     +5 -0      embperl/TODO
  
  Index: TODO
  ===================================================================
  RCS file: /home/cvs/embperl/TODO,v
  retrieving revision 1.106
  retrieving revision 1.107
  diff -u -r1.106 -r1.107
  --- TODO      2001/02/07 08:20:48     1.106
  +++ TODO      2001/03/27 04:26:42     1.107
  @@ -66,6 +66,7 @@
   
   - discard output [ Roman Maeder 28.11.00]
   
  +- patch for multiple headers [Maxwell Krohn 15.3.01]
   
   Test
   ----
  @@ -73,6 +74,8 @@
   
   - test Embperl_debug 0
   
  +- Perl 5.6.1 [Gary Ashton-Jones 16.3.01]
  +
   Bugs
   ----
   
  @@ -87,6 +90,8 @@
   - using outputfile inside a outputfile crashs
   
   - errdoc2 sv count (-> loop)
  +
  +
   
   Docs
   ----
  
  
  
  1.96      +8 -0      embperl/test.pl
  
  Index: test.pl
  ===================================================================
  RCS file: /home/cvs/embperl/test.pl,v
  retrieving revision 1.95
  retrieving revision 1.96
  diff -u -r1.95 -r1.96
  --- test.pl   2001/03/09 13:50:30     1.95
  +++ test.pl   2001/03/27 04:26:42     1.96
  @@ -405,6 +405,10 @@
           'offline'    => 0,
           'cgi'        => 0,
           },
  +    'EmbperlObject/epoincdiv.htm' => { 
  +        'offline'    => 0,
  +        'cgi'        => 0,
  +        },
       'EmbperlObject/epodiv.htm' => { 
           'offline'    => 0,
           'cgi'        => 0,
  @@ -471,6 +475,10 @@
           'cgi'        => 0,
           },
       'EmbperlObject/base3/epobaselib.htm' => { 
  +        'offline'    => 0,
  +        'cgi'        => 0,
  +        },
  +    'EmbperlObject/epobase.htm' => {
           'offline'    => 0,
           'cgi'        => 0,
           },
  
  
  
  1.1                  embperl/test/cmp/epobase.htm
  
  Index: epobase.htm
  ===================================================================
   <html>
   <head>
   <title>Example</title>
   </head>
   <body>
    <h1>head from foo</h1>
  
  
   <hr> Footer <hr>
   
   
  
  </body>
   </html>
  
  
  
  
  1.1                  embperl/test/cmp/epoincdiv.htm
  
  Index: epoincdiv.htm
  ===================================================================
   <html>
   <head>
   <title>Example</title>
   </head>
   <body>
    <h1>head from foo</h1>
  
  
  
  Include epodiv.htm from this file, to check if this @ISA is correctly setup in the 
next request
  
  
  <html>
  <head>
  <title>Some Plain tests Embperl</title>
  </head>
  
  <body>
  
  Here it starts with some HTML Text<P>
  
  All values should be undefined:
  
  $a =  <BR>
  $b =  <BR>
  $c =  <BR>
  $d =  <BR>
  $e =  <BR>
  
  
  First of all assign a value:
  <BR>
  
  Now we have some 'Umlaute':
  
  
  Now lets look what we are getting from this:<BR>
  (this is the value in $a) (this is the value in $a) &auml;&ouml;&uuml;<BR>
  
  And now a and b together: (this is the value in $a)(this is the value in $a) 
&auml;&ouml;&uuml;<P>
  
  Here we have some HTML tags within the perl code, Embperl will delete them!<BR>
  
  57
  Embperl will also translate HMTL escapes to the right characters i.e. $a &amp;lt; 6 
will get the perl expression $a &lt; 6: <BR>
  
  1
  Now they should have a value
  
  $a = (this is the value in $a) <BR>
  $b = (this is the value in $a) &auml;&ouml;&uuml; <BR>
  $c = 57 <BR>
  $d = 1 <BR>
  $e = 2 <BR>
  
  a <br>
  a <br>
  a <br>
      b is null <br>
      a <br>
      b is null <br>
      a<br>
      b is null <br>
      <table></table>
  
  
  <p> $tabmode = default <p>
  
  <hr><p>Display an two dimensional array with one, two and three columns !<BR>
  Please take a look at the source in your browser to see the difference<BR>
  
  $a[0][0] = '1/1' ;<BR>
     $a[1][0] = '2/1' ;<BR>
     $a[1][1] = '2/2' ;<BR>
     $a[2][0] = '3/1' ;<BR>
     $a[2][1] = '3/2' ;<BR>
     $a[2][2] = '3/3' ;<BR>
  
  <P>$tabmode = default <P>
  
  <table border="1" width="100%">
      <tr>
          <td>a1/1 </td>
      </tr> 
  
      <tr>
          <td>a2/1 </td>
      
          <td>a2/2 </td>
      </tr> 
  
      <tr>
          <td>a3/1 </td>
      
          <td>a3/2 </td>
      
          <td>a3/3 </td>
      </tr> 
  </table>
  
  <table border="2" width="100%">
      <tr>
          <td>a1/1 </td>
      </tr> 
  
      <tr>
          <td>a2/1 </td>
      
          <td>a2/2 </td>
      </tr> 
  
      <tr>
          <td>a3/1 </td>
      
          <td>a3/2 </td>
      
          <td>a3/3 </td>
      </tr> 
  </table>
  
  <table border="3" width="100%">
      <tr>
          <td>a1/1 </td>
      </tr> 
  
      <tr>
          <td>a2/1 </td>
      
          <td>a2/2 </td>
      </tr> 
  
      <tr>
          <td>a3/1 </td>
      
          <td>a3/2 </td>
      
          <td>a3/3 </td>
      </tr> 
  </table>
  
  <table  border="4" >
      <tr>
          <td>
              <table  border="5" >
                <tr>
                      <td>b1/1 </td>
                </tr> 
            
                <tr>
                      <td>b2/1 </td>
                
                      <td>b2/2 </td>
                </tr> 
            
                <tr>
                      <td>b3/1 </td>
                
                      <td>b3/2 </td>
                
                      <td>b3/3 </td>
                </tr> 
            </table>
  
          a1/1 </td>
      </tr> 
  
      <tr>
          <td>
              <table  border="5" >
                <tr>
                      <td>b1/1 </td>
                </tr> 
            
                <tr>
                      <td>b2/1 </td>
                
                      <td>b2/2 </td>
                </tr> 
            
                <tr>
                      <td>b3/1 </td>
                
                      <td>b3/2 </td>
                
                      <td>b3/3 </td>
                </tr> 
            </table>
  
          a2/1 </td>
      
          <td>
              <table  border="5" >
                <tr>
                      <td>b1/1 </td>
                </tr> 
            
                <tr>
                      <td>b2/1 </td>
                
                      <td>b2/2 </td>
                </tr> 
            
                <tr>
                      <td>b3/1 </td>
                
                      <td>b3/2 </td>
                
                      <td>b3/3 </td>
                </tr> 
            </table>
  
          a2/2 </td>
      </tr> 
  
      <tr>
          <td>
              <table  border="5" >
                <tr>
                      <td>b1/1 </td>
                </tr> 
            
                <tr>
                      <td>b2/1 </td>
                
                      <td>b2/2 </td>
                </tr> 
            
                <tr>
                      <td>b3/1 </td>
                
                      <td>b3/2 </td>
                
                      <td>b3/3 </td>
                </tr> 
            </table>
  
          a3/1 </td>
      
          <td>
              <table  border="5" >
                <tr>
                      <td>b1/1 </td>
                </tr> 
            
                <tr>
                      <td>b2/1 </td>
                
                      <td>b2/2 </td>
                </tr> 
            
                <tr>
                      <td>b3/1 </td>
                
                      <td>b3/2 </td>
                
                      <td>b3/3 </td>
                </tr> 
            </table>
  
          a3/2 </td>
      
          <td>
              <table  border="5" >
                <tr>
                      <td>b1/1 </td>
                </tr> 
            
                <tr>
                      <td>b2/1 </td>
                
                      <td>b2/2 </td>
                </tr> 
            
                <tr>
                      <td>b3/1 </td>
                
                      <td>b3/2 </td>
                
                      <td>b3/3 </td>
                </tr> 
            </table>
  
          a3/3 </td>
      </tr> 
  </table>
  
  ^<P>1.3
  
  <P>17<P>
  <P>1<P>
  
  <P>
  
  0
  
      1
  
      2
  A = 1<br>
  
      B = 2<br>
  
      C = 3<br>
  @a[0] = a<br>
        
      @a[1] = b<br>
        
      @a[2] = c<br>
        
      @a[3] = d<br>
        @a[0] = a<br>
        
      @a[1] = b<br>
        
      @a[2] = c<br>
        
      @a[3] = d<br>
        a <br>
  
        b <br>
  
        c <br>
  
        d <br>
  1 <br>
  
        3 <br>
  
        5 <br>
  
        7 <br>
  
        9 <br>
  1 <br>
  
        2 <br>
  
        3 <br>
  
        4 <br>
  
        5 <br>
  
        6 <br>
  
        7 <br>
  
        8 <br>
  
        9 <br>
  
        10 <br>
  2:1 <br>
  
        2:2 <br>
  
        2:3 <br>
  
        2:4 <br>
  
        2:5 <br>
  3:a <br>
  
        3:b <br>
  
        3:c <br>
  @a[0] = a<br>
        A = 1<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                B = 2<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                C = 3<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
      @a[1] = b<br>
        A = 1<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                B = 2<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                C = 3<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
      @a[2] = c<br>
        A = 1<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                B = 2<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                C = 3<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
      @a[3] = d<br>
        A = 1<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                B = 2<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                
                C = 3<br>
                1 <br>
                
                        3 <br>
                
                        5 <br>
                
                        7 <br>
                
                        9 <br>
                x
  
   y
  
  <table>
      <tr>
              <td>ii[0] = 0 </td>
      </tr> 
  
      <tr>
              <td>ii[1] = 1 </td>
      </tr> 
  
      <tr>
              <td>ii[2] = 2 </td>
      </tr> 
  
      <tr>
              <td>ii[3] = 3 </td>
      </tr> 
  
      <tr>
              <td>ii[4] = 4 </td>
      </tr> 
  
      <tr>
              <td>ii[5] = 5 </td>
      </tr> 
  
      <tr>
              <td>ii[6] = 6 </td>
      </tr> 
  
      <tr>
              <td>ii[7] = 7 </td>
      </tr> 
  
      <tr>
              <td>ii[8] = 8 </td>
      </tr> 
  
      <tr>
              <td>ii[9] = 9 </td>
      </tr> 
  </table>
  
  </body>
  </html>
  
  --- END ---
  
  
   <hr> Footer <hr>
   
   
  
  </body>
   </html>
  
  
  
  
  1.1                  embperl/test/html/EmbperlObject/epoincdiv.htm
  
  Index: epoincdiv.htm
  ===================================================================
  
  
  Include epodiv.htm from this file, to check if this @ISA is correctly setup in the 
next request
  
  [- Execute ('epodiv.htm') ; -]
  
  --- END ---
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to