You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl-cvs@perl.apache.org by ri...@apache.org on 2001/03/27 06:26:45 UTC

cvs commit: embperl/test/html/EmbperlObject epoincdiv.htm

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: embperl-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-cvs-help@perl.apache.org