<!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 (2011-07-29)</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>jennifer</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-29 Jennifer Averett <Jennifer.Averett@OARcorp.com>

        * smp01/init.c, smp02/init.c, smp02/tasks.c, smp03/init.c,
        smp03/tasks.c, smp04/Makefile.am, smp04/init.c, smp05/init.c,
        smp06/init.c, smp07/init.c, smp08/init.c: Cleaned up tests and fixed
        some print statement problems.
        * smp04/tasks.c: Removed.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/ChangeLog.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>testsuites/smptests/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp01/init.c.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%'>testsuites/smptests/smp01/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp02/init.c.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%'>testsuites/smptests/smp02/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp02/tasks.c.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%'>testsuites/smptests/smp02/tasks.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp03/init.c.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%'>testsuites/smptests/smp03/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp03/tasks.c.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%'>testsuites/smptests/smp03/tasks.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp04/Makefile.am.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%'>testsuites/smptests/smp04/Makefile.am</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp04/init.c.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%'>testsuites/smptests/smp04/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp04/tasks.c?rev=1.1&content-type=text/vnd.viewcvs-markup">R</a></td><td width='1%'><font color="#880000">1.1</font></td><td width='100%'><font color="#880000">testsuites/smptests/smp04/tasks.c</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp05/init.c.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%'>testsuites/smptests/smp05/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp06/init.c.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%'>testsuites/smptests/smp06/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp07/init.c.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%'>testsuites/smptests/smp07/init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/smptests/smp08/init.c.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%'>testsuites/smptests/smp08/init.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/testsuites/smptests/ChangeLog:1.3 rtems/testsuites/smptests/ChangeLog:1.4
--- rtems/testsuites/smptests/ChangeLog:1.3     Wed Jun 29 12:38:53 2011
+++ rtems/testsuites/smptests/ChangeLog Fri Jul 29 07:29:33 2011
</font><font color='#997700'>@@ -1,3 +1,11 @@
</font><font color='#000088'>+2011-07-29    Jennifer Averett <Jennifer.Averett@OARcorp.com>
+
+       * smp01/init.c, smp02/init.c, smp02/tasks.c, smp03/init.c,
+       smp03/tasks.c, smp04/Makefile.am, smp04/init.c, smp05/init.c,
+       smp06/init.c, smp07/init.c, smp08/init.c: Cleaned up tests and fixed
+       some print statement problems.
+       * smp04/tasks.c: Removed.
+
</font> 2011-06-29        Joel Sherrill <joel.sherrill@oarcorp.com>
 
        * smp01/smp01.doc, smp02/smp02.doc, smp03/smp03.doc, smp04/smp04.doc,

<font color='#006600'>diff -u rtems/testsuites/smptests/smp01/init.c:1.1 rtems/testsuites/smptests/smp01/init.c:1.2
--- rtems/testsuites/smptests/smp01/init.c:1.1  Tue Jun 28 16:08:47 2011
+++ rtems/testsuites/smptests/smp01/init.c      Fri Jul 29 07:29:33 2011
</font><font color='#997700'>@@ -63,7 +63,7 @@
</font>     directive_failed( status, "task create" );
 
     cpu_num = bsp_smp_processor_id();
<font color='#880000'>-    (" CPU %d start task TA%c\n", cpu_num, ch);
</font><font color='#000088'>+    locked_printf(" CPU %d start task TA%c\n", cpu_num, ch);
</font>     status = rtems_task_start( id, Test_task, i+1 );
     directive_failed( status, "task start" );
 
<font color='#997700'>@@ -78,8 +78,7 @@
</font>         allDone = false;
     }
     if (allDone) {
<font color='#880000'>-      Loop();
-      locked_printf( "*** END OF TEST SMP01 ***" );
</font><font color='#000088'>+      locked_printf( "*** END OF TEST SMP01 ***\n" );
</font>       rtems_test_exit( 0 );
     }
   }

<font color='#006600'>diff -u rtems/testsuites/smptests/smp02/init.c:1.1 rtems/testsuites/smptests/smp02/init.c:1.2
--- rtems/testsuites/smptests/smp02/init.c:1.1  Tue Jun 28 16:08:47 2011
+++ rtems/testsuites/smptests/smp02/init.c      Fri Jul 29 07:29:33 2011
</font><font color='#997700'>@@ -47,7 +47,7 @@
</font>   status = rtems_semaphore_obtain( Semaphore, RTEMS_WAIT, 0);
   directive_failed( status,"rtems_semaphore_obtain of SEM1\n");
 
<font color='#880000'>-  for ( i=1; i < CONFIGURE_SMP_MAXIMUM_PROCESSORS; i++ ){
</font><font color='#000088'>+  for ( i=1; i < rtems_smp_get_number_of_processors(); i++ ){
</font> 
     /* Create and start tasks for each CPU */
     ch = '0' + i;
<font color='#997700'>@@ -64,7 +64,6 @@
</font>     cpu_num = bsp_smp_processor_id();
     locked_printf(" CPU %d start task TA%c\n", cpu_num, ch);
     status = rtems_task_start( id, Test_task, i+1 );
<font color='#880000'>-    locked_printf(str, "rtems_task_start TA%d", i+1);
</font>     directive_failed( status, str );
   }
 

<font color='#006600'>diff -u rtems/testsuites/smptests/smp02/tasks.c:1.1 rtems/testsuites/smptests/smp02/tasks.c:1.2
--- rtems/testsuites/smptests/smp02/tasks.c:1.1 Tue Jun 28 16:08:47 2011
+++ rtems/testsuites/smptests/smp02/tasks.c     Fri Jul 29 07:29:33 2011
</font><font color='#997700'>@@ -15,7 +15,7 @@
</font> 
 #include "system.h"
 
<font color='#880000'>-void Loop() {
</font><font color='#000088'>+void Loop(void) {
</font>   volatile int i;
 
   for (i=0; i<300000; i++);
<font color='#997700'>@@ -26,8 +26,6 @@
</font>   int       cpu_num,
   uint32_t  task_index
 ){
<font color='#880000'>-  int i;
-
</font>   if (Log_index < LOG_SIZE) {<span style="background-color: #FF0000"> </span>
     /* Log the information */
     Log[ Log_index ].IsLocked   = obtained;
<font color='#997700'>@@ -57,7 +55,5 @@
</font>     LogSemaphore(false, cpu_num, task_index);
   
     rtems_semaphore_release( Semaphore );
<font color='#880000'>-  }
-
-  while(1);
</font><font color='#000088'>+  } while(1);
</font> }

<font color='#006600'>diff -u rtems/testsuites/smptests/smp03/init.c:1.1 rtems/testsuites/smptests/smp03/init.c:1.2
--- rtems/testsuites/smptests/smp03/init.c:1.1  Tue Jun 28 16:08:47 2011
+++ rtems/testsuites/smptests/smp03/init.c      Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -29,7 +29,6 @@
</font> )
 {
   int               cpu_num;
<font color='#880000'>-  rtems_status_code sc;
</font> 
   cpu_num = bsp_smp_processor_id();
 
<font color='#997700'>@@ -41,21 +40,21 @@
</font> )
 {
   int               i;
<font color='#880000'>-  char              ch;
</font><font color='#000088'>+  char              ch = '0';
</font>   rtems_id          id;
   rtems_status_code status;
 
   Loop();
   locked_print_initialize();
 
<font color='#880000'>-  locked_printf( "\n\n***  SMP03 TEST ***" );
</font><font color='#000088'>+  locked_printf( "\n\n***  SMP03 TEST ***\n" );
</font> 
 
   /* Show that the init task is running on this cpu */
   PrintTaskInfo( "Init" );
 
   /* for each remaining cpu create and start a task */
<font color='#880000'>-  for ( i=1; i < CONFIGURE_SMP_MAXIMUM_PROCESSORS; i++ ){
</font><font color='#000088'>+  for ( i=1; i < rtems_smp_get_number_of_processors(); i++ ){
</font> 
     ch = '0' + i;
 
<font color='#997700'>@@ -82,13 +81,15 @@
</font>     &id
   );
   TestFinished = false;
<font color='#880000'>-  status = rtems_task_start( id, Test_task, CONFIGURE_SMP_MAXIMUM_PROCESSORS );
</font><font color='#000088'>+  status = rtems_task_start(id,Test_task,rtems_smp_get_number_of_processors());
</font> 
   /* Wait on the last task to run */
   while(!TestFinished)
     ;
 
   /* End the test */
<font color='#880000'>-  locked_printf( "*** END OF TEST SMP03 ***" );
</font><font color='#000088'>+  Loop();
+  locked_printf( "*** END OF TEST SMP03 ***\n" );
+  Loop();
</font>   rtems_test_exit( 0 );<span style="background-color: #FF0000">    </span>
 }

<font color='#006600'>diff -u rtems/testsuites/smptests/smp03/tasks.c:1.1 rtems/testsuites/smptests/smp03/tasks.c:1.2
--- rtems/testsuites/smptests/smp03/tasks.c:1.1 Tue Jun 28 16:08:47 2011
+++ rtems/testsuites/smptests/smp03/tasks.c     Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -28,7 +28,7 @@
</font>   /* If this is the last task created set a flag for the
    * test to end.
    */
<font color='#880000'>-  if ( task_index  == CONFIGURE_SMP_MAXIMUM_PROCESSORS ) {
</font><font color='#000088'>+  if ( task_index  == rtems_smp_get_number_of_processors() ) {
</font>     TestFinished = true;
   }
 

<font color='#006600'>diff -u rtems/testsuites/smptests/smp04/Makefile.am:1.1 rtems/testsuites/smptests/smp04/Makefile.am:1.2
--- rtems/testsuites/smptests/smp04/Makefile.am:1.1     Tue Jun 28 16:08:47 2011
+++ rtems/testsuites/smptests/smp04/Makefile.am Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -5,7 +5,7 @@
</font> MANAGERS = all
 
 rtems_tests_PROGRAMS = smp04
<font color='#880000'>-smp04_SOURCES = init.c tasks.c system.h ../../support/src/locked_print.c
</font><font color='#000088'>+smp04_SOURCES = init.c system.h ../../support/src/locked_print.c
</font> 
 dist_rtems_tests_DATA = smp04.scn
 dist_rtems_tests_DATA += smp04.doc

<font color='#006600'>diff -u rtems/testsuites/smptests/smp04/init.c:1.1 rtems/testsuites/smptests/smp04/init.c:1.2
--- rtems/testsuites/smptests/smp04/init.c:1.1  Tue Jun 28 16:08:47 2011
+++ rtems/testsuites/smptests/smp04/init.c      Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -25,15 +25,18 @@
</font>   for (i=0; i<500000; i++);
 }
 
<font color='#880000'>-void PrintTaskInfo(
-  const char *task_name
</font><font color='#000088'>+rtems_task Test_task(
+  rtems_task_argument task_index
</font> )
 {
   int               cpu_num;
 
   cpu_num = bsp_smp_processor_id();
<font color='#000088'>+  locked_printf("  CPU %d running task TA%" PRIu32 "\n", cpu_num, task_index );
+  Loop();
+  TaskRan[task_index] = true;
</font> 
<font color='#880000'>-  locked_printf("  CPU %d running task %s\n", cpu_num, task_name );
</font><font color='#000088'>+  while(1);
</font> }
 
 rtems_task Init(
<font color='#997700'>@@ -45,17 +48,26 @@
</font>   rtems_id          id;
   rtems_status_code status;
   bool              allDone;
<font color='#000088'>+  int               cpu_num;
</font> 
   Loop();
   locked_print_initialize();
   locked_printf( "\n\n***  SMP04 TEST ***\n" );
 
<font color='#880000'>-  PrintTaskInfo( "Init" );
</font><font color='#000088'>+  /* Display which cpu is running this init thread. */
+  cpu_num = bsp_smp_processor_id();
+  locked_printf("  CPU %d running task Init\n", cpu_num );
</font> 
<font color='#000088'>+  /* Set all Tasks to not ran except for the init task */
</font>   TaskRan[0] = true;
   for ( i=1; i <= rtems_smp_get_number_of_processors() ; i++ )
     TaskRan[i] = false;
   
<font color='#000088'>+
+  /*
+   * For each processor create and start a task alternating<span style="background-color: #FF0000"> </span>
+   * between  RTEMS_PREEMPT and RTEMS_NO_PREEMPT.
+   */
</font>   for ( i=1; i < rtems_smp_get_number_of_processors() ; i++ ){
 
     /* Create and start tasks for each CPU */
<font color='#997700'>@@ -75,20 +87,33 @@
</font>       RTEMS_DEFAULT_ATTRIBUTES,
       &id
     );
<font color='#880000'>-  }
</font> 
<font color='#880000'>-  for ( i=1; i < rtems_smp_get_number_of_processors() ; i++ ){
</font><font color='#000088'>+    locked_printf(
+      "Start TA%c a %s task\n",
+      ch,<span style="background-color: #FF0000"> </span>
+      ((i%2) ? "RTEMS_PREEMPT" : "RTEMS_NO_PREEMPT" )<span style="background-color: #FF0000"> </span>
+    );
</font>     status = rtems_task_start( id, Test_task, i );
 
<font color='#880000'>-    /* Force a wait on the task to run in order to synchronize on
</font><font color='#000088'>+    /*
+     * Force a wait on the task to run in order to synchronize on
</font>      * simulated systems.
      */<span style="background-color: #FF0000">   </span>
     while (TaskRan[i] == false)
       ;
   }
 
<font color='#000088'>+  /*
+   * Create and start one more task.  This task
+   * should preempt the longest running PREEMPTABLE
+   * task and run on that cpu.
+   */
</font>   ch = '0' + rtems_smp_get_number_of_processors() ;
<font color='#880000'>-
</font><font color='#000088'>+  locked_printf(
+    "Create a TA%c a %s task\n",
+    ch,<span style="background-color: #FF0000"> </span>
+    "RTEMS_PREEMPT"<span style="background-color: #FF0000">  </span>
+  );
</font>   status = rtems_task_create(
     rtems_build_name( 'T', 'A', ch, ' ' ),
     3,
<font color='#997700'>@@ -97,13 +122,20 @@
</font>     RTEMS_DEFAULT_ATTRIBUTES,
     &id
   );
<font color='#000088'>+  locked_printf(
+    "Start TA%c a %s task\n",
+    ch,<span style="background-color: #FF0000"> </span>
+    "RTEMS_PREEMPT"<span style="background-color: #FF0000"> </span>
+  );
</font>   status = rtems_task_start(
     id,
     Test_task,
     rtems_smp_get_number_of_processors()
   );
   
<font color='#880000'>-  /* Wait on the all tasks to run */
</font><font color='#000088'>+  /*<span style="background-color: #FF0000"> </span>
+   * Wait on the all tasks to run<span style="background-color: #FF0000"> </span>
+   */
</font>   while (1) {
     allDone = true;
     for ( i=1; i<=rtems_smp_get_number_of_processors() ; i++ ) {
<font color='#997700'>@@ -112,7 +144,7 @@
</font>     }
     if (allDone) {
       Loop();
<font color='#880000'>-      locked_printf( "*** END OF TEST SMP04 ***" );
</font><font color='#000088'>+      locked_printf( "*** END OF TEST SMP04 ***\n" );
</font>       rtems_test_exit( 0 );
     }
   }

<font color='#006600'>diff -u rtems/testsuites/smptests/smp05/init.c:1.1 rtems/testsuites/smptests/smp05/init.c:1.2
--- rtems/testsuites/smptests/smp05/init.c:1.1  Tue Jun 28 16:08:48 2011
+++ rtems/testsuites/smptests/smp05/init.c      Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -17,7 +17,7 @@
</font> )
 {
   locked_printf( "Shut down from CPU %d\n", bsp_smp_processor_id() );
<font color='#880000'>-  locked_printf( "*** END OF TEST SMP05 ***" );
</font><font color='#000088'>+  locked_printf( "*** END OF TEST SMP05 ***\n" );
</font>   rtems_test_exit(0);
 }
 

<font color='#006600'>diff -u rtems/testsuites/smptests/smp06/init.c:1.1 rtems/testsuites/smptests/smp06/init.c:1.2
--- rtems/testsuites/smptests/smp06/init.c:1.1  Tue Jun 28 16:08:48 2011
+++ rtems/testsuites/smptests/smp06/init.c      Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -31,7 +31,7 @@
</font>   Ran = true;
 
   if ( do_exit ) {
<font color='#880000'>-    locked_printf( "*** END OF TEST SMP06 ***" );
</font><font color='#000088'>+    locked_printf( "*** END OF TEST SMP06 ***\n" );
</font>     rtems_test_exit(0);
   }
   while(1)
<font color='#997700'>@@ -42,8 +42,6 @@
</font>   rtems_task_argument argument
 )
 {
<font color='#880000'>-  int                i;
-  char               ch;
</font>   int                cpu_num;
   rtems_id           id;
   rtems_status_code  status;
<font color='#997700'>@@ -115,7 +113,7 @@
</font> #define CONFIGURE_MAXIMUM_TASKS           4
 
 #define CONFIGURE_INIT_TASK_PRIORITY      2
<font color='#880000'>-#define CONFIGURE_INIT_TASK_MODES         RTEMS_PREEMPT
</font><font color='#000088'>+#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_PREEMPT
</font> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
 
 #define CONFIGURE_INIT

<font color='#006600'>diff -u rtems/testsuites/smptests/smp07/init.c:1.1 rtems/testsuites/smptests/smp07/init.c:1.2
--- rtems/testsuites/smptests/smp07/init.c:1.1  Tue Jun 28 16:08:48 2011
+++ rtems/testsuites/smptests/smp07/init.c      Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -44,7 +44,11 @@
</font>   TaskRan = true;
 
   /* Print that the task is up and running. */
<font color='#880000'>-  locked_printf(" CPU %d running Task %s after semaphore release\n", cpu_num, name);
</font><font color='#000088'>+  locked_printf(
+    " CPU %d running Task %s after semaphore release\n",<span style="background-color: #FF0000"> </span>
+    cpu_num,<span style="background-color: #FF0000"> </span>
+    name
+  );
</font> 
   (void) rtems_task_delete( RTEMS_SELF );
 }

<font color='#006600'>diff -u rtems/testsuites/smptests/smp08/init.c:1.1 rtems/testsuites/smptests/smp08/init.c:1.2
--- rtems/testsuites/smptests/smp08/init.c:1.1  Tue Jun 28 16:08:48 2011
+++ rtems/testsuites/smptests/smp08/init.c      Fri Jul 29 07:29:34 2011
</font><font color='#997700'>@@ -22,7 +22,6 @@
</font> )
 {
   int               cpu_num;
<font color='#880000'>-  rtems_status_code sc;
</font> 
   cpu_num = bsp_smp_processor_id();
 
<font color='#997700'>@@ -45,7 +44,7 @@
</font>   rtems_status_code status;
   rtems_time_of_day time;
   int               i;
<font color='#880000'>-  char              ch;
</font><font color='#000088'>+  char              ch[4];
</font>   rtems_id          id;
  
   locked_print_initialize();
<font color='#997700'>@@ -77,10 +76,10 @@
</font>   PrintTaskInfo( "Init", &time );
 
   for ( i=1; i <= rtems_smp_get_number_of_processors() *3; i++ ) {
<font color='#880000'>-    ch = '0' + i;
</font> 
<font color='#000088'>+    sprintf(ch, "%02" PRId32, i );
</font>     status = rtems_task_create(
<font color='#880000'>-      rtems_build_name( 'T', 'A', ch, ' ' ),
</font><font color='#000088'>+      rtems_build_name( 'T', 'A', ch[0], ch[1] ),
</font>       1,
       RTEMS_MINIMUM_STACK_SIZE,
       RTEMS_DEFAULT_MODES,
</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>