Browse Source

-- 2010/02/12: VERSION 0.9.1 released

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   bug
          Severity:     Major
          Module(s):    Processor
          Description:  Calculation of length and crc statistics corrected for global code

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   bug
          Severity:     Major
          Module(s):    Appraiser
          Description:  Calculation of avarage data fixed

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   bug
          Severity:     Major
          Module(s):    Duplication indexer
          Description:  By default, it is now enabled

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   improvement
          Severity:     Minor
          Module(s):    Images
          Description:  Logos attached to the source control system

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   improvement
          Severity:     Minor
          Module(s):    Parser (C++ language)
          Description:  Excessive blank symbols are removed in names of functions-operators

       -- Date:         2010/02/12
          Reference:    noref
          Issue type:   improvement
          Severity:     Minor
          Module(s):    Project description
          Description:  Minor stylistic improvements
avkonst 15 years ago
parent
commit
9a6d4c3a6c
14 changed files with 190 additions and 36 deletions
  1. 61 0
      changelog.txt
  2. 15 0
      dupindex/Makefile
  3. BIN
      images/logo.png
  4. BIN
      images/logo.psd
  5. BIN
      images/logo_project.psd
  6. 11 0
      index.html
  7. 12 13
      lib/SWI/Appraiser.pm
  8. 0 6
      lib/SWI/Converter.pm
  9. 1 1
      lib/SWI/Launcher.pm
  10. 20 5
      lib/SWI/Processor.pm
  11. 63 7
      project.html
  12. 1 0
      style.css
  13. 3 3
      swi_config_sample.xml
  14. 3 1
      swi_main.pl

+ 61 - 0
changelog.txt

@@ -20,6 +20,67 @@
 ____________________________________________
 ____________________________________________
 
 
 
 
+-- 2010/02/12: VERSION 0.9.1 released
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Major
+          Module(s):    Processor
+          Description:  Calculation of length and crc statistics corrected for global code
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Major
+          Module(s):    Appraiser
+          Description:  Calculation of avarage data fixed
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Major
+          Module(s):    Duplication indexer
+          Description:  By default, it is now enabled
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   improvement
+          Severity:     Minor
+          Module(s):    Images
+          Description:  Logos attached to the source control system
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   improvement
+          Severity:     Minor
+          Module(s):    Parser (C++ language)
+          Description:  Excessive blank symbols are removed in names of functions-operators
+
+       -- Date:         2010/02/12
+          Reference:    noref
+          Issue type:   improvement
+          Severity:     Minor
+          Module(s):    Project description
+          Description:  Minor stylistic improvements
+
+       -- Date:         2010/02/11
+          Reference:    noref
+          Issue type:   feature
+          Severity:     Critical
+          Module(s):    Duplication indexer
+          Description:  Makefile added
+
+       -- Date:         2010/02/11
+          Reference:    noref
+          Issue type:   bug
+          Severity:     Critical
+          Module(s):    Parser
+          Description:  C language, correction for nonamed enum, struct
+
+____________________________________________
+
+
 -- 2010/02/11: VERSION 0.9.0 released for internal beta testing
 -- 2010/02/11: VERSION 0.9.0 released for internal beta testing
 
 
        -- Date:         2010/02/10
        -- Date:         2010/02/10

+ 15 - 0
dupindex/Makefile

@@ -0,0 +1,15 @@
+#
+# Note: use gmake
+#
+
+PROGRAM    = bin/dupindex.exe
+SRC_CPP    = $(wildcard *.cpp)
+OBJECTS    = $(SRC_CPP:.cpp=.o)
+
+all: clean $(PROGRAM)
+
+$(PROGRAM): $(SRC_CPP)
+	g++ -O2 -o $@ $<
+
+clean:
+	rm $(PROGRAM) || echo ""

BIN
images/logo.png


BIN
images/logo.psd


BIN
images/logo_project.psd


+ 11 - 0
index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-5" />
+<meta http-equiv="REFRESH" content="0;url=./project.html"></HEAD>
+<title>Index page, wait for redirect</title>
+</head>
+
+<body>
+</body>
+</html>

+ 12 - 13
lib/SWI/Appraiser.pm

@@ -113,7 +113,7 @@ sub swiAppraise
                           $subStat->{$keySubStat}->{'swi:exact'};
                           $subStat->{$keySubStat}->{'swi:exact'};
                         $fileStat->{$keyStat}->{$keySubStat}->{"swi:average"} =
                         $fileStat->{$keyStat}->{$keySubStat}->{"swi:average"} =
                           $fileStat->{$keyStat}->{$keySubStat}->{"swi:total"} /
                           $fileStat->{$keyStat}->{$keySubStat}->{"swi:total"} /
-                          $fileStat->{"swi:count"}->{"swi:functions"};
+                          $fileStat->{"swi:count"}->{"swi:functions"}->{'swi:exact'};
 
 
                         # add total per module
                         # add total per module
                         $moduleStat->{$keyStat}->{$keySubStat}->{"swi:total"} +=
                         $moduleStat->{$keyStat}->{$keySubStat}->{"swi:total"} +=
@@ -122,7 +122,7 @@ sub swiAppraise
                           ->{"swi:average"} =
                           ->{"swi:average"} =
                           $moduleStat->{$keyStat}->{$keySubStat}
                           $moduleStat->{$keyStat}->{$keySubStat}
                           ->{"swi:total"} /
                           ->{"swi:total"} /
-                          $moduleStat->{"swi:count"}->{"swi:functions"};
+                          $moduleStat->{"swi:count"}->{"swi:functions"}->{'swi:exact'};
 
 
                         # add total per project
                         # add total per project
                         $projectStat->{$keyStat}->{$keySubStat}
                         $projectStat->{$keyStat}->{$keySubStat}
@@ -132,7 +132,7 @@ sub swiAppraise
                           ->{"swi:average"} =
                           ->{"swi:average"} =
                           $projectStat->{$keyStat}->{$keySubStat}
                           $projectStat->{$keyStat}->{$keySubStat}
                           ->{"swi:total"} /
                           ->{"swi:total"} /
-                          $projectStat->{"swi:count"}->{"swi:functions"};
+                          $projectStat->{"swi:count"}->{"swi:functions"}->{'swi:exact'};
 
 
                         # add minimum per file
                         # add minimum per file
                         if (
                         if (
@@ -386,7 +386,7 @@ sub swiAppraise
                             $functionStat->{$keyStat}->{$keySubStat}
                             $functionStat->{$keyStat}->{$keySubStat}
                               ->{'swi:exact'},
                               ->{'swi:exact'},
                             $functionBase->{"swi:statistic"}->{$keyStat}
                             $functionBase->{"swi:statistic"}->{$keyStat}
-                              ->{$keySubStat}->{"swi:exact"}
+                              ->{$keySubStat}->{"swi:exact"}->{'content'}
                         );
                         );
                         print $fh "            <"
                         print $fh "            <"
                           . $keySubStat
                           . $keySubStat
@@ -516,7 +516,7 @@ sub swiAppraise
                                 $fileDiff,
                                 $fileDiff,
                                 $fileStat->{$keyStat}->{$keySubStat}->{$type},
                                 $fileStat->{$keyStat}->{$keySubStat}->{$type},
                                 $fileBase->{"swi:statistic"}->{$keyStat}
                                 $fileBase->{"swi:statistic"}->{$keyStat}
-                                  ->{$keySubStat}->{$type}
+                                  ->{$keySubStat}->{$type}->{'content'}
 
 
                             );
                             );
                             print $fh "            <" . $type
                             print $fh "            <" . $type
@@ -597,7 +597,7 @@ sub swiAppraise
                             $moduleDiff,
                             $moduleDiff,
                             $moduleStat->{$keyStat}->{$keySubStat}->{$type},
                             $moduleStat->{$keyStat}->{$keySubStat}->{$type},
                             $moduleBase->{"swi:statistic"}->{$keyStat}
                             $moduleBase->{"swi:statistic"}->{$keyStat}
-                              ->{$keySubStat}->{$type}
+                              ->{$keySubStat}->{$type}->{'content'}
 
 
                         );
                         );
                         print $fh "          <" . $type
                         print $fh "          <" . $type
@@ -672,7 +672,7 @@ sub swiAppraise
                         $projectDiff,
                         $projectDiff,
                         $projectStat->{$keyStat}->{$keySubStat}->{$type},
                         $projectStat->{$keyStat}->{$keySubStat}->{$type},
                         $reportBase->{"swi:statistic"}->{$keyStat}
                         $reportBase->{"swi:statistic"}->{$keyStat}
-                          ->{$keySubStat}->{$type}
+                          ->{$keySubStat}->{$type}->{'content'}
 
 
                     );
                     );
                     print $fh "        <" . $type
                     print $fh "        <" . $type
@@ -907,18 +907,18 @@ sub swiReportModificationGet
     my $newLength =
     my $newLength =
       $objNew->{"swi:statistic"}->{"swi:length"}->{"swi:source"}->{$statType};
       $objNew->{"swi:statistic"}->{"swi:length"}->{"swi:source"}->{$statType};
     my $newDup =
     my $newDup =
-      $objNew->{"swi:statistic"}->{"swi:duplication"}->{"swi:executable"}
+      $objNew->{"swi:statistic"}->{"swi:duplication"}->{"swi:symbols"}
       ->{$statType};
       ->{$statType};
 
 
     if ( $objBase->{"swi:statistic"}->{"swi:checksum"}->{"swi:source"}
     if ( $objBase->{"swi:statistic"}->{"swi:checksum"}->{"swi:source"}
-        ->{$statType} != $newCrc
+        ->{$statType}->{'content'} != $newCrc
         || $objBase->{"swi:statistic"}->{"swi:length"}->{"swi:source"}
         || $objBase->{"swi:statistic"}->{"swi:length"}->{"swi:source"}
-        ->{$statType} != $newLength )
+        ->{$statType}->{'content'} != $newLength )
     {
     {
         return "modified";
         return "modified";
     }
     }
-    if ( $objBase->{"swi:statistic"}->{"swi:duplication"}->{"swi:executable"}
-        ->{$statType} != $newDup )
+    if ( $objBase->{"swi:statistic"}->{"swi:duplication"}->{"swi:symbols"}
+        ->{$statType}->{'content'} != $newDup )
     {
     {
         return "cloned";
         return "cloned";
     }
     }
@@ -935,7 +935,6 @@ sub swiCheckUselessPatterns
         {
         {
             if ($key eq 'swi:pattern')
             if ($key eq 'swi:pattern')
             {
             {
-                # TODO process;
                 foreach my $pattern (@{$root->{'swi:pattern'}})
                 foreach my $pattern (@{$root->{'swi:pattern'}})
                 {
                 {
                     if (!defined($pattern->{'swi:used'}) || $pattern->{'swi:used'} == 0)
                     if (!defined($pattern->{'swi:used'}) || $pattern->{'swi:used'} == 0)

+ 0 - 6
lib/SWI/Converter.pm

@@ -63,12 +63,6 @@ sub swiConvert
       )
       )
       or die("Can not open output file!");
       or die("Can not open output file!");
 
 
-    if ( defined( $ENV{USER} ) )
-    {
-        print $fh "User\t" . $ENV{USER} . "\n";
-    }
-    print $fh "\n";
-
     my $projectStat     = $report->{"swi:statistic"};
     my $projectStat     = $report->{"swi:statistic"};
     my $projectName     = $config->{"swi:info"}->{"swi:project"}->{"swi:name"};
     my $projectName     = $config->{"swi:info"}->{"swi:project"}->{"swi:name"};
     my $projectLocation = $config->{"swi:report"}->{"swi:destination"};
     my $projectLocation = $config->{"swi:report"}->{"swi:destination"};

+ 1 - 1
lib/SWI/Launcher.pm

@@ -462,7 +462,7 @@ sub swiConfigurationValidate
                 }
                 }
                 if ( !defined( $module->{'swi:indexer:dup'}->{'swi:enabled'} ) )
                 if ( !defined( $module->{'swi:indexer:dup'}->{'swi:enabled'} ) )
                 {
                 {
-                    $module->{'swi:indexer:dup'}->{'swi:enabled'} = 'off';
+                    $module->{'swi:indexer:dup'}->{'swi:enabled'} = 'on';
                 }
                 }
                 if ( !defined( $module->{'swi:indexer:dup'}->{'swi:minlength'} )
                 if ( !defined( $module->{'swi:indexer:dup'}->{'swi:minlength'} )
                   )
                   )

+ 20 - 5
lib/SWI/Processor.pm

@@ -112,7 +112,7 @@ my $regexpCodeContainerModifier   =
 my $regexpCodeContainerArguments = '\s*[^;]*\s*';
 my $regexpCodeContainerArguments = '\s*[^;]*\s*';
 my $regexpCodeContainerDelimeter = '::';
 my $regexpCodeContainerDelimeter = '::';
 my $regexpCodeBlockStartIgnore   =
 my $regexpCodeBlockStartIgnore   =
-  '=\s*|,\s*|\s+enum\s*|\s+union\s*|\s+struct\s*';
+  '=\s*|,\s*|\s*enum\s*|\s*union\s*|\s*struct\s*';
 my $regexpCodeStringBorder_Escape =
 my $regexpCodeStringBorder_Escape =
   '(([^\\\](\\\\\\\\)*\\\\)|^([\\\](\\\\\\\\)*))';
   '(([^\\\](\\\\\\\\)*\\\\)|^([\\\](\\\\\\\\)*))';
 my $regexpCodeStringBorder_Text          = '["\']';
 my $regexpCodeStringBorder_Text          = '["\']';
@@ -204,6 +204,10 @@ sub swiProcess
         $dupindexHandler =
         $dupindexHandler =
           open3( $dupindexIn, $dupindexOut, $dupindexErr,
           open3( $dupindexIn, $dupindexOut, $dupindexErr,
             "$rootLocation/dupindex/bin/dupindex.exe" );
             "$rootLocation/dupindex/bin/dupindex.exe" );
+        if (!defined($dupindexHandler) || !defined($dupindexIn) || !defined($dupindexOut) )
+        {
+             die("Can not start the internal platform native tool '$rootLocation/dupindex/bin/dupindex.exe'");
+        }
 
 
         my $dupfinderSettings =
         my $dupfinderSettings =
           $config->{"swi:modules"}->{"swi:module"}[$moduleId]
           $config->{"swi:modules"}->{"swi:module"}[$moduleId]
@@ -786,8 +790,15 @@ s/($regexpCodeContainerDelimeter)?($regexpCodeContainerIdentifier$regexpCodeCont
         $function->{'swi:reference'} = [];
         $function->{'swi:reference'} = [];
 
 
         # Calculate swi:length->swi:source
         # Calculate swi:length->swi:source
+        # Note: this statistic is used to detect differences
+        # Global code is compared without new lines
+        my $initialContent = $block->{'initial'};
+        if ($functionName eq $regexpCodeGlobalFunctionName)
+        {
+            $initialContent =~ s/\n+//g;
+        }
         $function->{'swi:statistic'}->{'swi:length'}->{'swi:source'}
         $function->{'swi:statistic'}->{'swi:length'}->{'swi:source'}
-          ->{'swi:exact'} = length( $block->{'initial'} );
+          ->{'swi:exact'} = length( $initialContent );
 
 
         # Calculate swi:length->swi:executable
         # Calculate swi:length->swi:executable
         $function->{'swi:statistic'}->{'swi:length'}->{'swi:executable'}
         $function->{'swi:statistic'}->{'swi:length'}->{'swi:executable'}
@@ -848,7 +859,9 @@ s/($regexpCodeContainerDelimeter)?($regexpCodeContainerIdentifier$regexpCodeCont
           ->{'swi:exact'} = $function->{'swi:depth'};
           ->{'swi:exact'} = $function->{'swi:depth'};
 
 
         # Calculate swi:checksum->swi:index
         # Calculate swi:checksum->swi:index
-        my @symbols = split( //, $block->{'initial'} );
+        # Note: this statistic is used to detect differences
+        # Global code is compared without new lines
+        my @symbols = split( //, $initialContent );
         my $crcSumTotal = 0;
         my $crcSumTotal = 0;
         for ( my $pos = 0 ; $pos <= $#symbols ; $pos++ )
         for ( my $pos = 0 ; $pos <= $#symbols ; $pos++ )
         {
         {
@@ -1140,9 +1153,11 @@ m/^($regexpCodeFunctionModifier)*($regexpCodeFunctionIdentifier)($regexpCodeFunc
                     $mod  = $`;
                     $mod  = $`;
                     $word = $&;
                     $word = $&;
 
 
-                    # Remove empty symbols in indetifier
+                    # Remove empty symbols in identifier
+                    $word =~ s/\s+$//;
                     $word =~ s/[\n\t ]+/ /g;
                     $word =~ s/[\n\t ]+/ /g;
-
+                    $word =~ s/\s*$regexpCodeContainerDelimeter\s*/$regexpCodeContainerDelimeter/;
+                    
                     # Remove empty symbols in modifier
                     # Remove empty symbols in modifier
                     $mod =~ s/^\s*//;
                     $mod =~ s/^\s*//;
                     $mod =~ s/\s*$//;
                     $mod =~ s/\s*$//;

+ 63 - 7
project.html

@@ -37,7 +37,7 @@
     <td valign="bottom">      <div align="right">
     <td valign="bottom">      <div align="right">
       <p><a href="http://sourceforge.net/projects/swi"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=275605&amp;type=10" alt="Get Software Index at SourceForge.net. Fast, secure and Free Open Source software downloads" width="80" height="15" border="0" /></a></p>
       <p><a href="http://sourceforge.net/projects/swi"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=275605&amp;type=10" alt="Get Software Index at SourceForge.net. Fast, secure and Free Open Source software downloads" width="80" height="15" border="0" /></a></p>
       <p>&nbsp;</p>
       <p>&nbsp;</p>
-      <p><a href="#Description">Description</a> | <a href="#Download">Download &amp; Installation </a> | <a href="#License">License</a> | <a href="#Documentation">Documentation</a> | <a href="#Getsupport">Get support </a>| <a href="#Fordevelopers">For developers</a></p>
+      <p><a href="#Description">Overview</a> | <a href="#Download">Download &amp; Installation </a> | <a href="#License">License</a> | <a href="#Documentation">Documentation</a> | <a href="#Getsupport">Get support </a>| <a href="#Fordevelopers">For developers</a></p>
     </div></td>
     </div></td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -46,7 +46,7 @@
     <td colspan="2" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="10">
     <td colspan="2" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="10">
       
       
       <tr>
       <tr>
-        <td valign="top"><h3><a id="Description"></a>Description</h3>
+        <td valign="top"><h3><a id="Description"></a>Overview</h3>
           <p><span class="normalImportance">Software Index </span>measures, reports and validates software statistic,
           <p><span class="normalImportance">Software Index </span>measures, reports and validates software statistic,
             searches for duplications, scans for errors, 'coding style' violations
             searches for duplications, scans for errors, 'coding style' violations
             and occasions of broken design patterns which are defined by your design team.</p>
             and occasions of broken design patterns which are defined by your design team.</p>
@@ -60,7 +60,7 @@
                 <li>Number of <span class="normalImportance">symbols in name</span> of a function </li>
                 <li>Number of <span class="normalImportance">symbols in name</span> of a function </li>
                 <li>Number of <span class="normalImportance">blocks</span></li>
                 <li>Number of <span class="normalImportance">blocks</span></li>
                 <li>Maximum <span class="normalImportance">indent level</span> (depth level) </li>
                 <li>Maximum <span class="normalImportance">indent level</span> (depth level) </li>
-                <li><span class="normalImportance">Cyclomatic complexity</span> (McCabe's / Mayer's) index </li>
+                <li><span class="normalImportance">Cyclomatic complexity</span> (McCabe's / Myer's) index </li>
                 <li>Number of <span class="normalImportance">functions, files, modules</span></li>
                 <li>Number of <span class="normalImportance">functions, files, modules</span></li>
                 <li>Number of symbols in <span class="normalImportance">duplicated fragments</span></li>
                 <li>Number of symbols in <span class="normalImportance">duplicated fragments</span></li>
                 <li><span class="normalImportance">Code coverage</span> indexes<br />
                 <li><span class="normalImportance">Code coverage</span> indexes<br />
@@ -102,7 +102,7 @@
             <li><span class="normalImportance">cloned</span> functions (objects)</li>
             <li><span class="normalImportance">cloned</span> functions (objects)</li>
             <li><span class="normalImportance">unmodified</span> functions (objects)</li>
             <li><span class="normalImportance">unmodified</span> functions (objects)</li>
           </ul>
           </ul>
-          <h4>Internal tools helps to adapt the tool for your specific needs:</h4>
+          <h4>Internal tools helps to adapt Software Index for your specific needs:</h4>
           <ul>
           <ul>
             <li><span class="normalImportance">code preprocessor</span>: simplifies the code parsing and scaning with preprocessor definitions</li>
             <li><span class="normalImportance">code preprocessor</span>: simplifies the code parsing and scaning with preprocessor definitions</li>
             <li> <span class="normalImportance">code scanner</span>: similar 'grep' tool, helps to find occasion of 'bad' coding style/formating and detect broken  rules which defined by your design team, has flexible suppress methods </li>
             <li> <span class="normalImportance">code scanner</span>: similar 'grep' tool, helps to find occasion of 'bad' coding style/formating and detect broken  rules which defined by your design team, has flexible suppress methods </li>
@@ -114,12 +114,66 @@
           <ul>
           <ul>
             <li>C (stable version) </li>
             <li>C (stable version) </li>
             <li>C++ (beta version) </li>
             <li>C++ (beta version) </li>
-          </ul>
+            </ul>
+          <h4>Limitations:</h4>
+          <ul>
+            <li>Parser does not detect functions (C language) with declarations of local variables outside of function's body. However, it is not a problem for a major part of software products. The example below demostrates problematic formatting/style:</li>
+            </ul>
+          <table width="80%" border="0" align="center" cellpadding="2" cellspacing="2">
+            <tr>
+              <td width="50%">This function is <span class="highImportance">not detectable</span> by Software Index. </td>
+              <td width="50%">This function is <span class="normalImportance">parsable</span>. </td>
+            </tr>
+            <tr>
+              <td><pre>int <strong>getMax</strong>(int* array, int length)
+<span class="highImportance">    int i = 0;
+    int curMax;</span>
+<strong>{</strong>
+    /* ... */
+<strong>}</strong></pre>                </td>
+              <td><pre>int <strong>getMax</strong>(int* array, int length)
+<strong>{</strong>
+<span class="normalImportance">    int i = 0;
+    int curMax;</span>
+    /* ... */
+<strong>}</strong></pre>
+              </td>
+            </tr>
+          </table>
+          <ul>
+            <li>Comments inside preprocessor strings are not acceptable (C/C++ languages). Otherwise, some code can be unrecognizable by Software Index.<br />
+            </li>
+            </ul>
+          <table width="80%" border="0" align="center" cellpadding="2" cellspacing="2">
+            <tr>
+              <td width="50%">This code is <span class="highImportance">not recognizable </span> by Software Index. </td>
+              <td width="50%">This code is <span class="normalImportance">parsable</span>.</td>
+            </tr>
+            <tr>
+              <td><pre>#define <strong>GET_MAX</strong>(a, b)       \
+<span class="highImportance">    /*                      \
+     * This macros returns  \
+     * maximum from a and b \
+     */                     \
+</span>    ((a &gt; b) ? a : b)</pre>
+              </td>
+              <td><pre><span class="normalImportance">/*
+ * This macros returns
+ * maximum from a and b
+ */
+</span>#define <strong>GET_MAX</strong>(a, b) \
+    ((a &gt; b) ? a : b)</pre>
+              </td>
+            </tr>
+          </table>
+          <ul>
+            <li>Interface with gcov tool is not tested for C++ language.</li>
+            </ul>
           <h3><a id="Download"></a>Download &amp; Installation</h3>
           <h3><a id="Download"></a>Download &amp; Installation</h3>
           <p>For the installation of the <span class="normalImportance">Software Index</span> <a href="http://sourceforge.net/projects/swi/files/">download</a> the archive with all required modules and unpack it to some folder. Also, you have got an option to get the <a href="http://swi.svn.sourceforge.net/viewvc/swi/">source code</a> from the version conrol sytem.</p>
           <p>For the installation of the <span class="normalImportance">Software Index</span> <a href="http://sourceforge.net/projects/swi/files/">download</a> the archive with all required modules and unpack it to some folder. Also, you have got an option to get the <a href="http://swi.svn.sourceforge.net/viewvc/swi/">source code</a> from the version conrol sytem.</p>
           <p><em class="highImportance">Warning:</em> <span class="normalImportance">Software Index</span> has an internal tool (dupindex) which should be compiled for the target platform.
           <p><em class="highImportance">Warning:</em> <span class="normalImportance">Software Index</span> has an internal tool (dupindex) which should be compiled for the target platform.
             By default, the distributable archive includes the compiled binary for PC Windows (x86) platform.
             By default, the distributable archive includes the compiled binary for PC Windows (x86) platform.
-            Recompile it if you need (only one file: dupindex.cpp), using g++ or some other C++ compiler for your specific platform. There is a project configuration file for users of Microsoft Visual Studio 2008. </p>
+            Recompile it if you need (only one file: dupindex.cpp), using g++ or some other C++ compiler for your specific platform. There is a project configuration file for users of Microsoft Visual Studio 2008. There is Makefile for users of gmake and g++ tools. </p>
           <h4>Prerequisites:</h4>
           <h4>Prerequisites:</h4>
           <ul>
           <ul>
             <li>Perl Runtime Environment (version 5.6.x or later)</li>
             <li>Perl Runtime Environment (version 5.6.x or later)</li>
@@ -150,7 +204,9 @@
           <h3><a id="Documentation"></a>Documentation</h3>
           <h3><a id="Documentation"></a>Documentation</h3>
           <p>The context help is available by:</p>
           <p>The context help is available by:</p>
           <pre>&gt; perl swi_main.pl --help</pre>
           <pre>&gt; perl swi_main.pl --help</pre>
-          <p>The description of the configuration file is accessable by:</p>
+          <p>The sample/description of the configuration file is available by link:</p>
+		  <pre><a href="http://swi.svn.sourceforge.net/viewvc/swi/swi_config_sample.xml?view=markup" target="_blank">http://swi.svn.sourceforge.net/viewvc/swi/swi_config_sample.xml?view=markup</a></pre>
+          <p> In the command line context, it is accessable by:</p>
           <pre>&gt; perl swi_main.pl --sample</pre>
           <pre>&gt; perl swi_main.pl --sample</pre>
           <h3><a id="Getsupport"></a>Get support</h3>
           <h3><a id="Getsupport"></a>Get support</h3>
           <p>The best way to get help is by <a href="https://sourceforge.net/tracker/?func=add&amp;group_id=275605&amp;atid=1170878">creating a new item</a> in the 'Request Tracker'.</p>
           <p>The best way to get help is by <a href="https://sourceforge.net/tracker/?func=add&amp;group_id=275605&amp;atid=1170878">creating a new item</a> in the 'Request Tracker'.</p>

+ 1 - 0
style.css

@@ -34,6 +34,7 @@ body{
 
 
 pre{
 pre{
     font-size: 100%;
     font-size: 100%;
+    padding-left: 50;
 }
 }
 td{
 td{
 	background-position: left;
 	background-position: left;

+ 3 - 3
swi_config_sample.xml

@@ -419,7 +419,7 @@
               swi:lines       / swi:executable     - number of executable lines
               swi:lines       / swi:executable     - number of executable lines
               swi:lines       / swi:comment        - number of lines with comments
               swi:lines       / swi:comment        - number of lines with comments
               swi:complexity  / swi:blocks         - number of blocks
               swi:complexity  / swi:blocks         - number of blocks
-              swi:complexity  / swi:cyclomatic     - McCabe's (Mayer's) Cyclomatic complexity metric
+              swi:complexity  / swi:cyclomatic     - McCabe's (Myer's) Cyclomatic complexity metric
               swi:complexity  / swi:maxdepth       - Maximum indent level
               swi:complexity  / swi:maxdepth       - Maximum indent level
               swi:count       / swi:functions      - Number of functions
               swi:count       / swi:functions      - Number of functions
               swi:count       / swi:files          - Number of files
               swi:count       / swi:files          - Number of files
@@ -502,7 +502,7 @@
                 on  - the search tool is launched and the statistic is calculated
                 on  - the search tool is launched and the statistic is calculated
                 off - the search tool is not started, the statistic is reported by zeros
                 off - the search tool is not started, the statistic is reported by zeros
             
             
-            By default, the this is not enabled
+            By default, the this feature is enabled
         -->
         -->
         <swi:enabled>on</swi:enabled>
         <swi:enabled>on</swi:enabled>
           <!--
           <!--
@@ -883,7 +883,7 @@
               If it is so, the 'regular' level is attached to this function.
               If it is so, the 'regular' level is attached to this function.
               If comment has 3-4 lines, level 'info' is assigned.
               If comment has 3-4 lines, level 'info' is assigned.
               If comment has 1-2 lines, level 'notice' is assigned.
               If comment has 1-2 lines, level 'notice' is assigned.
-              If ther� is no comments at all (0 lines), level 'warning' is assigned.
+              If there are no comments at all (0 lines), level 'warning' is assigned.
           -->
           -->
           <swi:info>5</swi:info>
           <swi:info>5</swi:info>
           <swi:notice>3</swi:notice>
           <swi:notice>3</swi:notice>

+ 3 - 1
swi_main.pl

@@ -22,7 +22,9 @@
 
 
 Software Index measures, reports and validates software statistic,
 Software Index measures, reports and validates software statistic,
 searches for duplications, scans for errors, 'coding style' violations
 searches for duplications, scans for errors, 'coding style' violations
-and occasions of broken design patterns which are defined by your design team. 
+and occasions of broken design patterns which are defined by your design team.
+
+More information available at 'http://swi.sourceforge.net'.
 
 
 =head1 SYNOPSIS
 =head1 SYNOPSIS