<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for rtems-tools (2010-08-09)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>ccj</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-08-09      Chris Johns <chrisj@rtems.org>

        * specbuilder/perl.prov, specbuilder/perl.req: New.
        * specbuilder/defaults.py: The config.sub path is a sub-dir of the
        command.
        * specbuilder/setup.py: Fix make bug. Install RPMLIB files when
        creating the directory.
        * specbuilder/spec.py: Add '%check'.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems-tools/ChangeLog.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems-tools/specbuilder/specbuilder/defaults.py.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>specbuilder/specbuilder/defaults.py</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems-tools/specbuilder/specbuilder/perl.prov?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">specbuilder/specbuilder/perl.prov</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems-tools/specbuilder/specbuilder/perl.req?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">specbuilder/specbuilder/perl.req</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems-tools/specbuilder/specbuilder/setup.py.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>specbuilder/specbuilder/setup.py</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems-tools/specbuilder/specbuilder/spec.py.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>specbuilder/specbuilder/spec.py</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems-tools/ChangeLog:1.1 rtems-tools/ChangeLog:1.2
--- rtems-tools/ChangeLog:1.1   Sun Aug  8 20:29:43 2010
+++ rtems-tools/ChangeLog       Sun Aug  8 23:50:30 2010
</font><font color='#997700'>@@ -1,5 +1,14 @@
</font> 2010-08-09        Chris Johns <chrisj@rtems.org>
 
<font color='#000088'>+   * specbuilder/perl.prov, specbuilder/perl.req: New.
+       * specbuilder/defaults.py: The config.sub path is a sub-dir of the
+       command.
+       * specbuilder/setup.py: Fix make bug. Install RPMLIB files when
+       creating the directory.
+       * specbuilder/spec.py: Add '%check'.
+
+2010-08-09     Chris Johns <chrisj@rtems.org>
+
</font>   * specbuilder, specbuilder/sb-build, specbuilder/sb-crossgcc,
        specbuilder/sb-setup, specbuilder/sb-specdump,
        specbuilder/sb-status, specbuilder/specbuilder/.cvsignore,

<font color='#006600'>diff -u rtems-tools/specbuilder/specbuilder/defaults.py:1.1 rtems-tools/specbuilder/specbuilder/defaults.py:1.2
--- rtems-tools/specbuilder/specbuilder/defaults.py:1.1 Sun Aug  8 20:29:43 2010
+++ rtems-tools/specbuilder/specbuilder/defaults.py     Sun Aug  8 23:50:30 2010
</font><font color='#997700'>@@ -151,7 +151,7 @@
</font> }
 
 class command_line:
<font color='#880000'>-    """Process the command line in a common way across all speculater commands."""
</font><font color='#000088'>+    """Process the command line in a common way across all SpecBuilder commands."""
</font> 
     _defaults = { 'params'   : [],
                   'warn-all' : '0',
<font color='#997700'>@@ -175,8 +175,8 @@
</font>                         '--warn-all' : '_warn_all',
                         '--no-clean' : '_no_clean' }
 
<font color='#880000'>-    _target_triplets = { '--host'   :   '_host',
-                         '--build'  :  '_build',
</font><font color='#000088'>+    _target_triplets = { '--host'   : '_host',
+                         '--build'  : '_build',
</font>                          '--target' : '_target' }
 
     def __init__(self, argv):
<font color='#997700'>@@ -273,7 +273,8 @@
</font>                                     # make sure it is ok.
                                     #
                                     e = execute.capture_execution()
<font color='#880000'>-                                    config_sub = os.path.join(self.command_path, 'config.sub')
</font><font color='#000088'>+                                    config_sub = os.path.join(self.command_path,<span style="background-color: #FF0000"> </span>
+                                                              'specbuilder', 'config.sub')
</font>                                     exit_code, proc, output = e.shell(config_sub + ' ' + value)
                                     if exit_code == 0:
                                         value = output

<font color='#006600'>diff -u /dev/null rtems-tools/specbuilder/specbuilder/perl.prov:1.1
--- /dev/null   Mon Aug  9 00:10:34 2010
+++ rtems-tools/specbuilder/specbuilder/perl.prov       Sun Aug  8 23:50:30 2010
</font><font color='#997700'>@@ -0,0 +1,199 @@
</font><font color='#000088'>+#!/usr/bin/perl
+
+# RPM (and it's source code) is covered under two separate licenses.
+
+# The entire code base may be distributed under the terms of the GNU
+# General Public License (GPL), which appears immediately below.
+# Alternatively, all of the source code in the lib subdirectory of the
+# RPM source code distribution as well as any code derived from that
+# code may instead be distributed under the GNU Library General Public
+# License (LGPL), at the choice of the distributor. The complete text
+# of the LGPL appears at the bottom of this file.
+
+# This alternative is allowed to enable applications to be linked
+# against the RPM library (commonly called librpm) without forcing
+# such applications to be distributed under the GPL.
+
+# Any questions regarding the licensing of RPM should be addressed to
+# Erik Troan <ewt@redhat.com>.
+
+# a simple script to print the proper name for perl libraries.
+
+# To save development time I do not parse the perl grammmar but
+# instead just lex it looking for what I want.  I take special care to
+# ignore comments and pod's.
+
+# it would be much better if perl could tell us the proper name of a
+# given script.
+
+# The filenames to scan are either passed on the command line or if
+# that is empty they are passed via stdin.
+
+# If there are lines in the file which match the pattern
+#      (m/^\s*\$VERSION\s*=\s+/)
+# then these are taken to be the version numbers of the modules.
+# Special care is taken with a few known idioms for specifying version
+# numbers of files under rcs/cvs control.
+
+# If there are strings in the file which match the pattern
+#     m/^\s*\$RPM_Provides\s*=\s*["'](.*)['"]/i
+# then these are treated as additional names which are provided by the
+# file and are printed as well.
+
+# I plan to rewrite this in C so that perl is not required by RPM at
+# build time.
+
+# by Ken Estes Mail.com kestes@staff.mail.com
+
+if ("@ARGV") {
+  foreach (@ARGV) {
+    process_file($_);
+  }
+} else {
+
+  # notice we are passed a list of filenames NOT as common in unix the
+  # contents of the file.
+
+  foreach (<>) {
+    process_file($_);
+  }
+}
+
+
+foreach $module (sort keys %require) {
+  if (length($require{$module}) == 0) {
+    print "perl($module)\n";
+  } else {
+
+    # I am not using rpm3.0 so I do not want spaces arround my
+    # operators. Also I will need to change the processing of the
+    # $RPM_* variable when I upgrade.
+
+    print "perl($module) = $require{$module}\n";
+  }
+}
+
+exit 0;
+
+
+
+sub process_file {
+
+  my ($file) = @_;
+  chomp $file;
+<span style="background-color: #FF0000">  </span>
+  open(FILE, "<$file") || return;
+
+  my ($package, $version, $incomment, $inover) = ();
+
+  while (<FILE>) {
+<span style="background-color: #FF0000">    </span>
+    # skip the documentation
+
+    # we should not need to have item in this if statement (it
+    # properly belongs in the over/back section) but people do not
+    # read the perldoc.
+
+    if (m/^=(head[1-4]|pod|item)/) {
+      $incomment = 1;
+    }
+
+    if (m/^=(cut)/) {
+      $incomment = 0;
+      $inover = 0;
+    }
+<span style="background-color: #FF0000">    </span>
+    if (m/^=(over)/) {
+      $inover = 1;
+    }
+
+    if (m/^=(back)/) {
+      $inover = 0;
+    }
+
+    if ($incomment || $inover) {
+       next;
+    }
+<span style="background-color: #FF0000">    </span>
+    # skip the data section
+    if (m/^__(DATA|END)__$/) {
+      last;
+    }
+
+    # not everyone puts the package name of the file as the first
+    # package name so we report all namespaces except some common
+    # false positives as if they were provided packages (really ugly).
+
+    if (m/^\s*package\s+([_:a-zA-Z0-9]+)\s*;/) {
+      $package=$1;
+      undef $version;
+      if ($package eq 'main') {
+        undef $package;
+      } else {
+        # If $package already exists in the $require hash, it means
+        # the package definition is broken up over multiple blocks.
+        # In that case, don't stomp a previous $VERSION we might have
+        # found.  (See BZ#214496.)
+        $require{$package}=undef unless (exists $require{$package});
+      }
+    }
+
+    # after we found the package name take the first assignment to
+    # $VERSION as the version number. Exporter requires that the
+    # variable be called VERSION so we are safe.
+
+    # here are examples of VERSION lines from the perl distribution
+
+    #FindBin.pm:$VERSION = $VERSION = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/);
+    #ExtUtils/Install.pm:$VERSION = substr q$Revision$, 10;
+    #CGI/Apache.pm:$VERSION = (qw$Revision$)[1];
+    #DynaLoader.pm:$VERSION = $VERSION = "1.03";     # avoid typo warning
+    #General.pm:$Config::General::VERSION = 2.33;
+    #<span style="background-color: #FF0000"> </span>
+    # or with the new "our" pragma you could (read will) see:
+    #
+    #    our $VERSION = '1.00'
+    if (($package) && (m/^\s*(our\s+)?\$(\Q$package\E::)?VERSION\s*=\s+/)) {
+
+      # first see if the version string contains the string
+      # '$Revision' this often causes bizzare strings and is the most
+      # common method of non static numbering.
+
+      if (m/(\$Revision: (\d+[.0-9]+))/) {
+       $version= $2;<span style="background-color: #FF0000"> </span>
+      } elsif (m/[\'\"]?(\d+[.0-9]+)[\'\"]?/) {
+<span style="background-color: #FF0000">       </span>
+       # look for a static number hard coded in the script
+<span style="background-color: #FF0000">       </span>
+       $version= $1;<span style="background-color: #FF0000"> </span>
+      }
+      $require{$package}=$version;
+    }
+<span style="background-color: #FF0000">  </span>
+    # Allow someone to have a variable that defines virtual packages
+    # The variable is called $RPM_Provides.  It must be scoped with<span style="background-color: #FF0000"> </span>
+    # "our", but not "local" or "my" (just would not make sense).<span style="background-color: #FF0000"> </span>
+    #<span style="background-color: #FF0000"> </span>
+    # For instance:
+    #<span style="background-color: #FF0000">  </span>
+    #     $RPM_Provides = "blah bleah"
+    #<span style="background-color: #FF0000"> </span>
+    # Will generate provides for "blah" and "bleah".
+    #
+    # Each keyword can appear multiple times.  Don't
+    #  bother with datastructures to store these strings,
+    #  if we need to print it print it now.
+<span style="background-color: #FF0000">       </span>
+    if ( m/^\s*(our\s+)?\$RPM_Provides\s*=\s*["'](.*)['"]/i) {
+      foreach $_ (split(/\s+/, $2)) {
+       print "$_\n";
+      }
+    }
+
+  }
+
+  close(FILE) ||
+    die("$0: Could not close file: '$file' : $!\n");
+
+  return ;
+}
</font>
<font color='#006600'>diff -u /dev/null rtems-tools/specbuilder/specbuilder/perl.req:1.1
--- /dev/null   Mon Aug  9 00:10:34 2010
+++ rtems-tools/specbuilder/specbuilder/perl.req        Sun Aug  8 23:50:30 2010
</font><font color='#997700'>@@ -0,0 +1,247 @@
</font><font color='#000088'>+#!/usr/bin/perl
+
+# RPM (and its source code) is covered under two separate licenses.<span style="background-color: #FF0000"> </span>
+
+# The entire code base may be distributed under the terms of the GNU
+# General Public License (GPL), which appears immediately below.
+# Alternatively, all of the source code in the lib subdirectory of the
+# RPM source code distribution as well as any code derived from that
+# code may instead be distributed under the GNU Library General Public
+# License (LGPL), at the choice of the distributor. The complete text
+# of the LGPL appears at the bottom of this file.
+
+# This alternatively is allowed to enable applications to be linked
+# against the RPM library (commonly called librpm) without forcing
+# such applications to be distributed under the GPL.
+
+# Any questions regarding the licensing of RPM should be addressed to
+# Erik Troan <ewt@redhat.com>.
+
+# a simple makedepend like script for perl.
+<span style="background-color: #FF0000"> </span>
+# To save development time I do not parse the perl grammmar but
+# instead just lex it looking for what I want.  I take special care to
+# ignore comments and pod's.
+
+# It would be much better if perl could tell us the dependencies of a
+# given script.
+
+# The filenames to scan are either passed on the command line or if
+# that is empty they are passed via stdin.
+
+# If there are strings in the file which match the pattern
+#     m/^\s*\$RPM_Requires\s*=\s*["'](.*)['"]/i
+# then these are treated as additional names which are required by the
+# file and are printed as well.
+
+# I plan to rewrite this in C so that perl is not required by RPM at
+# build time.
+
+# by Ken Estes Mail.com kestes@staff.mail.com
+
+if ("@ARGV") {
+  foreach (@ARGV) {
+    process_file($_);
+  }
+} else {
+<span style="background-color: #FF0000">  </span>
+  # notice we are passed a list of filenames NOT as common in unix the
+  # contents of the file.
+<span style="background-color: #FF0000">  </span>
+  foreach (<>) {
+    process_file($_);
+  }
+}
+
+
+foreach $module (sort keys %require) {
+  if (length($require{$module}) == 0) {
+    print "perl($module)\n";
+  } else {
+
+    # I am not using rpm3.0 so I do not want spaces around my
+    # operators. Also I will need to change the processing of the
+    # $RPM_* variable when I upgrade.
+
+    print "perl($module) >= $require{$module}\n";
+  }
+}
+
+exit 0;
+
+
+
+sub process_file {
+<span style="background-color: #FF0000">  </span>
+  my ($file) = @_;
+  chomp $file;
+<span style="background-color: #FF0000">  </span>
+  open(FILE, "<$file") || return;
+<span style="background-color: #FF0000">  </span>
+  while (<FILE>) {
+<span style="background-color: #FF0000">    </span>
+    # skip the "= <<" block
+
+    if ( ( m/^\s*\$(.*)\s*=\s*<<\s*["'](.*)['"]/) ||
+         ( m/^\s*\$(.*)\s*=\s*<<\s*(.*);/) ) {
+      $tag = $2;
+      while (<FILE>) {
+        ( $_ =~ /^$tag/) && last;
+      }
+    }
+
+    # skip q{} quoted sections - just hope we don't have curly brackets
+    # within the quote, nor an escaped hash mark that isn't a comment
+    # marker, such as occurs right here. Draw the line somewhere.
+    if ( m/^.*\Wq[qxwr]?\s*([\{\(\[#|\/])[^})\]#|\/]*$/ && ! m/^\s*(require|use)\s/ ) {
+      $tag = $1;
+      $tag =~ tr/{\(\[\#|\//})]#|\//;
+      while (<FILE>) {
+        ( $_ =~ m/\}/ ) && last;
+      }
+    }
+
+    # skip the documentation
+
+    # we should not need to have item in this if statement (it
+    # properly belongs in the over/back section) but people do not
+    # read the perldoc.
+
+    if ( (m/^=(head[1-4]|pod|item)/) .. (m/^=(cut)/) ) {
+      next;
+    }
+
+    if ( (m/^=(over)/) .. (m/^=(back)/) ) {
+      next;
+    }
+<span style="background-color: #FF0000">    </span>
+    # skip the data section
+    if (m/^__(DATA|END)__$/) {
+      last;
+    }
+
+    # Each keyword can appear multiple times.  Don't
+    #  bother with datastructures to store these strings,
+    #  if we need to print it print it now.
+    #
+       # Again allow for "our".
+    if ( m/^\s*(our\s+)?\$RPM_Requires\s*=\s*["'](.*)['"]/i) {
+      foreach $_ (split(/\s+/, $2)) {
+       print "$_\n";
+      }
+    }
+
+    if (<span style="background-color: #FF0000"> </span>
+
+# ouch could be in a eval, perhaps we do not want these since we catch
+# an exception they must not be required
+
+#   eval { require Term::ReadLine } or die $@;
+#   eval "require Term::Rendezvous;" or die $@;
+#   eval { require Carp } if defined $^S; # If error/warning during compilation,
+
+
+       (m/^(\s*)         # we hope the inclusion starts the line
+        (require|use)\s+(?!\{)     # do not want 'do {' loops
+        # quotes around name are always legal
+        [\'\"]?([^\;\ \'\"\t]*)[\'\"]?[\t\;\ ]
+        # the syntax for 'use' allows version requirements
+        \s*([.0-9]*)
+        /x)
+       ) {
+      my ($whitespace, $statement, $module, $version) = ($1, $2, $3,$4);
+
+      # we only consider require statements that are flush against
+      # the left edge. any other require statements give too many
+      # false positives, as they are usually inside of an if statement
+      # as a fallback module or a rarely used option
+
+      ($whitespace ne "" && $statement eq "require") && next;
+
+      # if there is some interpolation of variables just skip this
+      # dependency, we do not want
+      #        do "$ENV{LOGDIR}/$rcfile";
+<span style="background-color: #FF0000">   </span>
+      ($module =~ m/\$/) && next;
+
+      # skip if the phrase was "use of" -- shows up in gimp-perl, et al.
+      next if $module eq 'of';
+
+      # if the module ends in a comma we probaly caught some
+      # documentation of the form 'check stuff,\n do stuff, clean
+      # stuff.' there are several of these in the perl distribution
+
+      ($module  =~ m/[,>]$/) && next;
+
+      # if the module name starts in a dot it is not a module name.
+      # Is this necessary?  Please give me an example if you turn this
+      # back on.
+
+      #      ($module =~ m/^\./) && next;
+
+      # if the module ends with .pm strip it to leave only basename.
+      # starts with /, which means its an absolute path to a file
+      if ($module =~ m(^/)) {
+        print "$module\n";
+        next;
+      }
+
+      # sometimes people do use POSIX qw(foo), or use POSIX(qw(foo)) etc.
+      # we can strip qw.*$, as well as (.*$:
+      $module =~ s/qw.*$//;
+      $module =~ s/\(.*$//;
+
+      $module =~ s/\.pm$//;
+
+      # some perl programmers write 'require URI/URL;' when<span style="background-color: #FF0000"> </span>
+      # they mean 'require URI::URL;'
+
+      $module =~ s/\//::/;
+
+      # trim off trailing parentheses if any.  Sometimes people pass
+      # the module an empty list.
+
+      $module =~ s/\(\s*\)$//;
+
+      if ( $module =~ m/^v?([0-9._]+)$/ ) {
+      # if module is a number then both require and use interpret that
+      # to mean that a particular version of perl is specified
+
+      my $ver=$1;
+      if ($ver =~ /5.00/) {
+        print "perl >= 0:$ver\n";
+        next;
+      }
+      else {
+        print "perl >= 1:$ver\n";
+        next;
+      }
+
+      };
+
+      # ph files do not use the package name inside the file.
+      # perlmodlib documentation says:
+<span style="background-color: #FF0000">      </span>
+      #       the .ph files made by h2ph will probably end up as
+      #       extension modules made by h2xs.
+<span style="background-color: #FF0000">      </span>
+      # so do not expend much effort on these.
+
+
+      # there is no easy way to find out if a file named systeminfo.ph
+      # will be included with the name sys/systeminfo.ph so only use the
+      # basename of *.ph files
+
+      ($module  =~ m/\.ph$/) && next;
+
+      $require{$module}=$version;
+      $line{$module}=$_;
+    }
+<span style="background-color: #FF0000">    </span>
+  }
+
+  close(FILE) ||
+    die("$0: Could not close file: '$file' : $!\n");
+<span style="background-color: #FF0000">  </span>
+  return ;<span style="background-color: #FF0000"> </span>
+}
</font>
<font color='#006600'>diff -u rtems-tools/specbuilder/specbuilder/setup.py:1.1 rtems-tools/specbuilder/specbuilder/setup.py:1.2
--- rtems-tools/specbuilder/specbuilder/setup.py:1.1    Sun Aug  8 20:29:43 2010
+++ rtems-tools/specbuilder/specbuilder/setup.py        Sun Aug  8 23:50:30 2010
</font><font color='#997700'>@@ -25,6 +25,7 @@
</font> # Setup a series of directories ready for building with the Spec Builder.
 #
 
<font color='#000088'>+import errno
</font> import os
 import shutil
 
<font color='#997700'>@@ -48,9 +49,8 @@
</font>     """Set up the various directories in a specified path"""
 
     _dirs = [ 'TARS',
<font color='#880000'>-              'TARS',
</font>               'SPECS',
<font color='#880000'>-              'SOURCE',
</font><font color='#000088'>+              'SOURCES',
</font>               'RPMLIB',
               'BUILD',
               'TMP' ]
<font color='#997700'>@@ -74,7 +74,19 @@
</font> 
     def make(self, path):
         for d in setup._dirs:
<font color='#880000'>-            self.mkdir(os.path.join(path, d))
</font><font color='#000088'>+            try:
+                dst = os.path.join(path, d)
+                self.mkdir(dst)
+            except os.error, oerr:
+                if oerr[0] != errno.EEXIST:
+                    raise error.general('OS error: ' + str(oerr))
+            if d == 'RPMLIB':
+                for n in ['perl.prov', 'perl.req']:
+                    sf = os.path.join(self.opts.command_path, 'specbuilder', n)
+                    df = os.path.join(dst, n)
+                    self._output('installing: ' + df)
+                    if os.path.isfile(sf):
+                        shutil.copy(sf, df)
</font> 
 def run():
     import sys
<font color='#997700'>@@ -84,7 +96,7 @@
</font>         _notice(opts, 'RTEMS Tools, Setup Spec Builder, v%s' % (version))
         for path in opts.params():
             s = setup(path, _defaults = _defaults, opts = opts)
<font color='#880000'>-            s.make()
</font><font color='#000088'>+            s.make(path)
</font>             del s
     except error.general, gerr:
         print gerr

<font color='#006600'>diff -u rtems-tools/specbuilder/specbuilder/spec.py:1.1 rtems-tools/specbuilder/specbuilder/spec.py:1.2
--- rtems-tools/specbuilder/specbuilder/spec.py:1.1     Sun Aug  8 20:29:43 2010
+++ rtems-tools/specbuilder/specbuilder/spec.py Sun Aug  8 23:50:30 2010
</font><font color='#997700'>@@ -148,6 +148,7 @@
</font>     _directive = [ '%description',
                    '%prep',
                    '%build',
<font color='#000088'>+                   '%check',
</font>                    '%install',
                    '%clean',
                    '%post',
</pre>
<p> </p>

<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>