grammar updates
[mono.git] / doc / mono-contribution-howto
index 7a48fcd32aab7fc7f7bc64ba9d157fc3a2905e53..ea3a4eaae53af0e0c3c77c7daf87bcf461f17a17 100644 (file)
@@ -1,9 +1,10 @@
 
                        <Mono newbie coders start file>
 
                        <Mono newbie coders start file>
+       <h1> A little help for mono newbie coders </h1>
 
 
        For those who are new to Mono and are impatient to contribute
 
 
        For those who are new to Mono and are impatient to contribute
-       with code (uhh... you are brave!!) here is the document you
+       with code (uhh... you are brave!!) here is the document you 
        should read.
 
        
        should read.
 
        
                * Start with the NUnit Tests Guidelines.  In the cvs
                  they are located at: mcs/class/doc/NUnitGuideli...
 
                * Start with the NUnit Tests Guidelines.  In the cvs
                  they are located at: mcs/class/doc/NUnitGuideli...
 
-                 But wait, this is a document for impatient
+               * But wait, this is a document for impatient
                  people. So EVERYTHING should be here. Well, it is. 
        </ul>
 
                  people. So EVERYTHING should be here. Well, it is. 
        </ul>
 
--------------------- cut here --------------------
 
 
-Mono NUnit Test Guidelines and Best Practices
+       <h2> The NUnit Tests Guidelines document </h2>
 
 
-Authors: Nick Drochak  <ndrochak@gol.com>
-        Martin Baulig  <martin@gnome.org>
-Last Update: 2002-03-02
-Rev: 0.3
+       Mono NUnit Test Guidelines and Best Practices
 
 
-* Purpose
+       Authors: Nick Drochak  <ndrochak@gol.com>
+       Martin Baulig  <martin@gnome.org>
+       Last Update: 2002-03-02
+       Rev: 0.3
 
 
-This document captures all the good ideas people have had about
-writing NUnit tests for the mono project. This document will be useful
-for anyone who writes or maintains unit tests.
+ <b> Purpose </b>
+
+       This document captures all the good ideas people have had 
+       about writing NUnit tests for the mono project. This document 
+       will be useful for anyone who writes or maintains unit tests.
+
+ <b> Other resources </b>
 
 
-* Other resources
        - mcs/class/README has an explanation of the build process and
          how it relates to the tests.
        - mcs/class/README has an explanation of the build process and
          how it relates to the tests.
-       - http://nunit.sourceforge.net is the place to find out about NUnit
+       - http://nunit.sourceforge.net is the place to find out about 
+         NUnit
 
 
-* Getting Started
+ <b> Getting Started </b>
 
 
-If you are new to writing NUnit tests, there is a template you may use
-to help get started. The file is:
+       If you are new to writing NUnit tests, there is a template 
+       you may use to help get started. The file is:
 
        mcs/class/doc/TemplateTest.cs
 
 
 
        mcs/class/doc/TemplateTest.cs
 
 
-       (2.- This is the point two!. This file is just after the end of the 
-       guidelines. Copy/paste it in another buffer. And keep reading.)
+       (2.- This is the point two!. This file is just after the end 
+       of the guidelines. Copy/paste it in another buffer. And keep 
+       reading.)
 
 
+       Save a copy of this file in the appropriate test subdirecty 
+       (see below), and replace all the [text] markers with 
+       appropriate code. Comments in the template are there to guide 
+       you. You should also look at existing tests to see how other 
+       people have written them. 
 
 
-Save a copy of this file in the appropriate test subdirecty (see
-below), and replace all the [text] markers with appropriate
-code. Comments in the template are there to guide you. You should also
-look at existing tests to see how other people have written them.
-mcs/class/corlib/Test/System.Collections/CollectionBaseTest.cs is a
-small one that might help.
+       mcs/class/corlib/Test/System.Collections/CollectionBaseTest.cs 
 
 
-      (3.- You reached the third point. And as expected, it's just here to 
-      tell you that the content of CollectionBaseTest.cs is after the 
-      TemplateTest.cs code at the end of these guidelines.)
+       is a small one that might help.
 
 
-The directory that will contain your new file depends on the
-assembly/namespace of the class for which you are creating the
-tests. Under mcs/class there is a directory for each assembly. In each
-assembly there is a Test directory, e.g. mcs/class/corlib/Test. In the
-Test directory there are sub-directories for each namespace in the
-assembly, e.g. mcs/class/corlib/Test/Sytem. Put your new test file in
-the appropriate sub-directory under Test for the class you are
-testing.
+       (3.- You reached the third point. And as expected, it's just 
+       here to tell you that the content of CollectionBaseTest.cs is 
+       after the TemplateTest.cs code at the end of these 
+       guidelines.)
 
 
-Once your test class is complete, you need to add it to the
-AllTests.cs file in the same directory as your new test. Add a call to
-"suite.AddTest()" passing the name of your new test class's suite
-property as the parameter.  You will see examples in the AllTests.cs
-file, so just copy and paste inside there.
+       The directory that will contain your new file depends on the
+       assembly/namespace of the class for which you are creating the
+       tests. Under mcs/class there is a directory for each assembly. 
+       In each assembly there is a Test directory, e.g. 
+       mcs/class/corlib/Test. In the Test directory there are 
+       sub-directories for each namespace in the assembly, e.g. 
+       mcs/class/corlib/Test/Sytem. Put your new test file in the 
+       appropriate sub-directory under Test for the class you are
+       testing.
 
 
-Once all of that is done, you can do a 'make test' from the top mcs
-directory.  Your test class will be automagically included in the
-build and the tests will be run along with all the others.
+       Once your test class is complete, you need to add it to the
+       AllTests.cs file in the same directory as your new test. Add a 
+       call to "suite.AddTest()" passing the name of your new test 
+       class's suite property as the parameter.  You will see examples 
+       in the AllTests.cs file, so just copy and paste inside there.
 
 
-* Tips
+       Once all of that is done, you can do a 'make test' from the top 
+       mcs directory.  Your test class will be automagically included 
+       in the build and the tests will be run along with all the 
+       others.
 
 
-** Provide an unique error message for Assert()
+ <b> Tips </b>
 
 
-Include an unique message for each Assert() so that when the assert
-fails, it is trivial to locate the failing one. Otherwise, it may be
-difficult to determine which part of the test is failing. A good way
-to ensure unique messages is to use something like #A01, #A02 etc.
+ <b> Provide an unique error message for Assert() </b>
 
 
-    Bad:
+       Include an unique message for each Assert() so that when the 
+       assert fails, it is trivial to locate the failing one. 
+       Otherwise, it may be difficult to determine which part of the 
+       test is failing. A good way to ensure unique messages is to use 
+       something like #A01, #A02 etc.
+
+       Bad:
 <pre>
        AssertEquals("array match", compare[0], i1[0]);
        AssertEquals("array match", compare[1], i1[1]);
        AssertEquals("array match", compare[2], i1[2]);
        AssertEquals("array match", compare[3], i1[3]);
 </pre>
 <pre>
        AssertEquals("array match", compare[0], i1[0]);
        AssertEquals("array match", compare[1], i1[1]);
        AssertEquals("array match", compare[2], i1[2]);
        AssertEquals("array match", compare[3], i1[3]);
 </pre>
-    Good:
+       Good:
 <pre>
        AssertEquals("#A01", compare[0], i1[0]);
        AssertEquals("#A02", compare[1], i1[1]);
        AssertEquals("#A03", compare[2], i1[2]);
        AssertEquals("#A04", compare[3], i1[3]);
 </pre>
 <pre>
        AssertEquals("#A01", compare[0], i1[0]);
        AssertEquals("#A02", compare[1], i1[1]);
        AssertEquals("#A03", compare[2], i1[2]);
        AssertEquals("#A04", compare[3], i1[3]);
 </pre>
-Once you used such a number in an Assert(), don't change it later on -
-people might use it it identify the test in bug reports or in mailing
-lists.
+       Once you used such a number in an Assert(), don't change it 
+       later on - people might use it it identify the test in bug 
+       reports or in mailing lists.
 
 
-** Use AssertEquals() to compare things, not Assert().
+ <b> Use AssertEquals() to compare things, not Assert(). </b>
 
 
-Never compare two values with Assert() - if the test fails, people
-have no idea what went wrong while AssertEquals() reports the failed
-value.
+       Never compare two values with Assert() - if the test fails, 
+       people have no idea what went wrong while AssertEquals() 
+       reports the failed value.
 
 
-    Bad:
+       Bad:
 <pre>
         Assert ("A01", myTicks[0] == t1.Ticks);
 </pre>
 <pre>
         Assert ("A01", myTicks[0] == t1.Ticks);
 </pre>
-    Good:
+       Good:
 <pre>
         AssertEquals ("A01", myTicks[0], t1.Ticks);
 </pre>
 
 <pre>
         AssertEquals ("A01", myTicks[0], t1.Ticks);
 </pre>
 
-** Constructors
+ <b> Constructors </b>
 
 
-When writing your testcase, please make sure to provide a constructor
-which takes no arguments:
+       When writing your testcase, please make sure to provide a 
+       constructor which takes no arguments:
 
 <pre>
         public class DateTimeTest : TestCase
 
 <pre>
         public class DateTimeTest : TestCase
@@ -145,7 +156,7 @@ which takes no arguments:
         }
 </pre>
 
         }
 </pre>
 
-* Namespace
+ <b> Namespace </b>
 
        Please keep the namespace within each test directory
        consistent - all tests which are referenced in the same
 
        Please keep the namespace within each test directory
        consistent - all tests which are referenced in the same
@@ -157,7 +168,7 @@ which takes no arguments:
        and you have a subdirectory called "System", you can put all
        the tests in that dir into namespace "MonoTests.System".
 
        and you have a subdirectory called "System", you can put all
        the tests in that dir into namespace "MonoTests.System".
 
-* Test your test with the microsoft runtime
+ <b> Test your test with the microsoft runtime </b>
 
        If possible, try to run your testsuite with the Microsoft
        runtime on Windows and make sure all tests in it pass. This is
 
        If possible, try to run your testsuite with the Microsoft
        runtime on Windows and make sure all tests in it pass. This is
@@ -177,51 +188,53 @@ which takes no arguments:
        we'll forward this to the Microsoft people from time to time
        to help them fix their documentation and runtime.
 
        we'll forward this to the Microsoft people from time to time
        to help them fix their documentation and runtime.
 
--------------------- cut here ------------------------
-
 <pre>
 -------------------- TemplateTest.cs begins ----------
 
 <pre>
 -------------------- TemplateTest.cs begins ----------
 
-// this is a template for making NUnit tests.  Text enclosed in square
-// brackets (and the brackets themselves) should be replaced by appropiate
-// code.
-
-// [File Name].cs - NUnit Test Cases for [explain here]
-//
-// [Author Name] ([Author email Address])
-//
-// (C) [Copyright holder]
-// 
-
-// these are the standard namespaces you will need.  You may need to add more
-// depending on your tests.
-using NUnit.Framework;
-using System;
-
-// all test namespaces start with "MonoTests."  Append the Namespace that
-// contains the class you are testing, e.g. MonoTests.System.Collections
-namespace MonoTests.[Namespace]
-{
-
-// the class name should end with "Test" and start with the name of the class
-// you are testing, e.g. CollectionBaseTest
-public class [Class to be tested]Test : TestCase {
+       // this is a template for making NUnit tests.  Text enclosed 
+       // in square brackets (and the brackets themselves) should be 
+       // replaced by appropiate code.
+
+       // [File Name].cs - NUnit Test Cases for [explain here]
+       //
+       // [Author Name] ([Author email Address])
+       //
+       // (C) [Copyright holder]
+       // 
+
+       // these are the standard namespaces you will need.  You may 
+       // need to add more depending on your tests.
+       using NUnit.Framework;
+       using System;
+
+       // all test namespaces start with "MonoTests."  Append the 
+       // Namespace that contains the class you are testing, e.g. 
+       // MonoTests.System.Collections
+       namespace MonoTests.[Namespace]
+       {
+
+       // the class name should end with "Test" and start with the name 
+       // of the class you are testing, e.g. CollectionBaseTest
+       public class [Class to be tested]Test : TestCase {
        
        
-       // there should be two constructors for your class.  The first one
-       // (without parameters) should set the name to something unique.
-       // Of course the name of the method is the same as the name of the
-       // class
+       // there should be two constructors for your class.  The first 
+       // one (without parameters) should set the name to something 
+       // unique.
+       // Of course the name of the method is the same as the name of 
+       // the class
        public [Constructor]() : base ("[Namespace.Class]") {}
        public [Constructor](string name) : base(name) {}
 
        public [Constructor]() : base ("[Namespace.Class]") {}
        public [Constructor](string name) : base(name) {}
 
-       // this method is run before each Test* method is called. You can put
-       // variable initialization, etc. here that is common to each test.
+       // this method is run before each Test* method is called. You 
+       // can put variable initialization, etc. here that is common to 
+       // each test.
        // Just leave the method empty if you don't need to use it.
        protected override void SetUp() {}
 
        // Just leave the method empty if you don't need to use it.
        protected override void SetUp() {}
 
-       // this method is run after each Test* method is called. You can put
-       // clean-up code, etc. here.  Whatever needs to be done after each test.
-       // Just leave the method empty if you don't need to use it.
+       // this method is run after each Test* method is called. You 
+       // can put clean-up code, etc. here.  Whatever needs to be done 
+       // after each test. Just leave the method empty if you don't need 
+       // to use it.
        protected override void TearDown() {}
 
        // this property is required.  You need change the parameter for
        protected override void TearDown() {}
 
        // this property is required.  You need change the parameter for
@@ -232,159 +245,181 @@ public class [Class to be tested]Test : TestCase {
                }
        }
 
                }
        }
 
-       // this is just one of probably many test methods in your test class.
-       // each test method must start with "Test".  All methods in your class
-       // which start with "Test" will be automagically called by the NUnit
-       // framework.
+       // this is just one of probably many test methods in your test 
+       // class. each test method must start with "Test".  All methods 
+       // in your class which start with "Test" will be automagically 
+       // called by the NUnit framework.
        public void Test[Something] {
        public void Test[Something] {
-               // inside here you will exercise your class and then call Assert()
+               // inside here you will exercise your class and then 
+               // call Assert()
        }
 }
 
 ---------------------- TemplateTest.cs ends --------------
        }
 }
 
 ---------------------- TemplateTest.cs ends --------------
+
 ---------------------- CollectionBaseTest.cs begins ------
 ---------------------- CollectionBaseTest.cs begins ------
-//
-// System.Collections.CollectionBase
-// Test suite for System.Collections.CollectionBase
-//
-// Author:
-//    Nick D. Drochak II
-//
-// (C) 2001 Nick D. Drochak II
-//
-
-
-using System;
-using System.Collections;
-using NUnit.Framework;
-
-namespace MonoTests.System.Collections
-{
-
-public class CollectionBaseTest : TestCase     
-{
-       public CollectionBaseTest () : base ("System.Collection.CollectionBase testsuite") {}
-       public CollectionBaseTest (String name) : base (name) {}
-
-       // We need a concrete class to test the abstract base class
-       public class ConcreteCollection : CollectionBase 
+       //
+       // System.Collections.CollectionBase
+       // Test suite for System.Collections.CollectionBase
+       //
+       // Author:
+       //    Nick D. Drochak II
+       //
+       // (C) 2001 Nick D. Drochak II
+       //
+
+
+       using System;
+       using System.Collections;
+       using NUnit.Framework;
+
+       namespace MonoTests.System.Collections
+       {
+
+       public class CollectionBaseTest : TestCase      
        {
        {
-               // These fields are used as markers to test the On* hooks.
-               public bool onClearFired;
-               public bool onClearCompleteFired;
-
-               public bool onInsertFired;
-               public int onInsertIndex;
-               public bool onInsertCompleteFired;
-               public int onInsertCompleteIndex;
-
-               public bool onRemoveFired;
-               public int onRemoveIndex;
-               public bool onRemoveCompleteFired;
-               public int onRemoveCompleteIndex;
-
-               public bool onSetFired;
-               public int onSetOldValue;
-               public int onSetNewValue;
-               public bool onSetCompleteFired;
-               public int onSetCompleteOldValue;
-               public int onSetCompleteNewValue;
-
-               // This constructor is used to test OnValid()
-               public ConcreteCollection()     
+               public CollectionBaseTest () : base 
+                       ("System.Collection.CollectionBase testsuite") 
+                       {}
+               public CollectionBaseTest (String name) : base (name) 
+                       {}
+
+               // We need a concrete class to test the abstract base 
+               // class
+               public class ConcreteCollection : CollectionBase 
                {
                {
-                       IList listObj;
-                       listObj = this;
-                       listObj.Add(null);
-               }
+                       // These fields are used as markers to test 
+                       // the On* hooks.
+                       public bool onClearFired;
+                       public bool onClearCompleteFired;
+
+                       public bool onInsertFired;
+                       public int onInsertIndex;
+                       public bool onInsertCompleteFired;
+                       public int onInsertCompleteIndex;
+
+                       public bool onRemoveFired;
+                       public int onRemoveIndex;
+                       public bool onRemoveCompleteFired;
+                       public int onRemoveCompleteIndex;
+
+                       public bool onSetFired;
+                       public int onSetOldValue;
+                       public int onSetNewValue;
+                       public bool onSetCompleteFired;
+                       public int onSetCompleteOldValue;
+                       public int onSetCompleteNewValue;
+
+                       // This constructor is used to test OnValid()
+                       public ConcreteCollection()     
+                       {
+                               IList listObj;
+                               listObj = this;
+                               listObj.Add(null);
+                       }
 
 
-               // This constructor puts consecutive integers into the list
-               public ConcreteCollection(int i) {
-                       IList listObj;
-                       listObj = this;
+                       // This constructor puts consecutive integers into the list
+                       public ConcreteCollection(int i) {
+                               IList listObj;
+                               listObj = this;
 
 
-                       int j;
-                       for (j = 0; j< i; j++) {
-                               listObj.Add(j);
+                               int j;
+                               for (j = 0; j< i; j++) {
+                                       listObj.Add(j);
+                               }
                        }
                        }
-               }
 
 
-               // A helper method to look at a value in the list at a specific index
-               public int PeekAt(int index)
-               {
-                       IList listObj;
-                       listObj = this;
-                       return (int) listObj[index];
-               }
+                       // A helper method to look at a value in the 
+                       // list at a specific index
+                       public int PeekAt(int index)
+                       {
+                               IList listObj;
+                               listObj = this;
+                               return (int) listObj[index];
+                       }
 
 
-               // Mark the flag if this hook is fired
-               protected override void OnClear() {
-                       this.onClearFired = true;
-               }
+                       // Mark the flag if this hook is fired
+                       protected override void OnClear() {
+                               this.onClearFired = true;
+                       }
 
 
-               // Mark the flag if this hook is fired
-               protected override void OnClearComplete() 
-               {
-                       this.onClearCompleteFired = true;
-               }
+                       // Mark the flag if this hook is fired
+                       protected override void OnClearComplete() 
+                       {
+                               this.onClearCompleteFired = true;
+                       }
 
 
-               // Mark the flag, and save the paramter if this hook is fired
-               protected override void OnInsert(int index, object value) 
-               {
-                       this.onInsertFired = true;
-                       this.onInsertIndex = index;
-               }
+                       // Mark the flag, and save the paramter if 
+                       // this hook is fired
+                       protected override void OnInsert(int index, 
+                                                       object value) 
+                       {
+                               this.onInsertFired = true;
+                               this.onInsertIndex = index;
+                       }
 
 
-               // Mark the flag, and save the paramter if this hook is fired
-               protected override void OnInsertComplete(int index, object value) 
-               {
-                       this.onInsertCompleteFired = true;
-                       this.onInsertCompleteIndex = index;
-               }
+                       // Mark the flag, and save the paramter if 
+                       // this hook is fired
+                       protected override void OnInsertComplete(int index, 
+                                                       object value) 
+                       {
+                               this.onInsertCompleteFired = true;
+                               this.onInsertCompleteIndex = index;
+                       }
                
                
-               // Mark the flag, and save the paramter if this hook is fired
-               protected override void OnRemove(int index, object value) 
-               {
-                       this.onRemoveFired = true;
-                       this.onRemoveIndex = index;
-               }
+                       // Mark the flag, and save the paramter if this hook 
+                       // is fired
+                       protected override void OnRemove(int index, 
+                                                       object value) 
+                       {
+                               this.onRemoveFired = true;
+                               this.onRemoveIndex = index;
+                       }
                
                
-               // Mark the flag, and save the paramter if this hook is fired
-               protected override void OnRemoveComplete(int index, object value) 
-               {
-                       this.onRemoveCompleteFired = true;
-                       this.onRemoveCompleteIndex = index;
-               }
+                       // Mark the flag, and save the paramter if this hook 
+                       // is fired
+                       protected override void OnRemoveComplete(int index, 
+                                                               object value) 
+                       {
+                               this.onRemoveCompleteFired = true;
+                               this.onRemoveCompleteIndex = index;
+                       }
                
                
-               // Mark the flag, and save the paramters if this hook is fired
-               protected override void OnSet(int index, object oldValue, object newValue) 
-               {
-                       this.onSetFired = true;
-                       this.onSetOldValue = (int) oldValue;
-                       this.onSetNewValue = (int) newValue;
-               }
+                       // Mark the flag, and save the paramters if this hook 
+                       // is fired
+                       protected override void OnSet(int index, object oldValue, 
+                                                               object newValue) 
+                       {
+                               this.onSetFired = true;
+                               this.onSetOldValue = (int) oldValue;
+                               this.onSetNewValue = (int) newValue;
+                       }
                
                
-               // Mark the flag, and save the paramters if this hook is fired
-               protected override void OnSetComplete(int index, object oldValue, object newValue) 
-               {
-                       this.onSetCompleteFired = true;
-                       this.onSetCompleteOldValue = (int) oldValue;
-                       this.onSetCompleteNewValue = (int) newValue;
-               }
-       }  // public class ConcreteCollection
+                       // Mark the flag, and save the paramters if this hook 
+                       // is fired
+                       protected override void OnSetComplete(int index, 
+                                                       object oldValue, 
+                                                       object newValue) 
+                       {
+                               this.onSetCompleteFired = true;
+                               this.onSetCompleteOldValue = (int) oldValue;
+                               this.onSetCompleteNewValue = (int) newValue;
+                       }
+               }  // public class ConcreteCollection
 
 
-       public static ITest Suite {
-               get {
-                       return new TestSuite (typeof(CollectionBaseTest));
+               public static ITest Suite {
+                       get {
+                               return new TestSuite 
+                                       (typeof(CollectionBaseTest));
+                       }
                }
                }
-       }
 
 
-       // Check the count property
-       public void TestCount() {
-               ConcreteCollection myCollection;
-               myCollection = new ConcreteCollection(4);
-               Assert(4 == myCollection.Count);
-       }
+               // Check the count property
+               public void TestCount() {
+                       ConcreteCollection myCollection;
+                       myCollection = new ConcreteCollection(4);
+                       Assert(4 == myCollection.Count);
+               }
 
        // Make sure GetEnumerator returns an object
        public void TestGetEnumerator() {
 
        // Make sure GetEnumerator returns an object
        public void TestGetEnumerator() {
@@ -480,26 +515,37 @@ public class CollectionBaseTest : TestCase
 
 }
 ----------------------- CollectionBaseTest.cs ends --------
 
 }
 ----------------------- CollectionBaseTest.cs ends --------
+
 </pre>
        <ul>
 </pre>
        <ul>
-               * If you use Emacs, you might want to use the .emacs file and the 
-                 package developed by Brad Merrill mailto:zbrad@cybercom.net. It 
-                 will allow you to highlight and indent in C# style in your Emacs
-                 editor. (XEmacs will still work but it'll also complain).
-
-               *  CSharpDevelop is a GPLed IDE developed by IC#Code. Search for it
-                  at sourceforge if you are interested in it.
-
-               * For those who Java: "A comparison of Microsoft's C# programming
-                 language to Sun Microsystem's Java Programming language" by Dare
-                 Obasanjo is a really good (very complete) text to read. 
-
-               * Suggest this point and more, now I can't think of anything more.
+               * If you use Emacs, you might want to use the .emacs 
+                 file and the package developed by Brad Merrill 
+                 mailto:zbrad@cybercom.net. It will allow you to 
+                 highlight and indent in C# style in your Emacs
+                 editor. (XEmacs will still work but it'll also 
+                 complain).
+
+               * CSharpDevelop is a GPLed IDE developed by IC#Code. 
+                 Search for it at sourceforge if you are interested 
+                 in it.
+
+               * For those who Java: "A comparison of Microsoft's 
+                 C# programming language to Sun Microsystem's Java 
+                 Programming language" by Dare Obasanjo is a really good 
+                 (very complete) text to read. 
+
+               * Suggest this point and more, now I can't think of 
+                 anything more.
        </ul>
 
        Enjoy!!.
 
        </ul>
 
        Enjoy!!.
 
-       (c) Jaime Anguiano Olarra.
+       (c) 2002, <a href="mailto:jaime@geneura.ugr.es">Jaime Anguiano Olarra</a>.
+
+       The parts included in this document are property of their 
+       respective authors.
 
 
-       The parts included in this document are property of their respective authors.
+       Note: The identation of the source code has been changed a bit
+       so it could fit better in the website. Anyway, as nothing more
+       changed, the files should work as expected.