home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / CMTCOUNT.CPP < prev    next >
C/C++ Source or Header  |  1997-07-05  |  2KB  |  90 lines

  1. // +++Date last modified: 05-Jul-1997
  2.  
  3. /*
  4.  * CMTCOUNT.CPP
  5.  * Implementation of comment counter.
  6.  *
  7.  * ver 1.0, 30 Jun 1996
  8.  *
  9.  * Public domain by:
  10.  *   Jari Laaksonen
  11.  *   Arkkitehdinkatu 30 A 2
  12.  *   FIN-33720 Tampere
  13.  *   FINLAND
  14.  *
  15.  *   Fidonet : 2:221/360.20
  16.  *   Internet: jla@to.icl.fi
  17.  */
  18.  
  19. #include <stdio.h>
  20.  
  21. #include "cmtcount.h"
  22.  
  23. void CommentCounter::ProcessActions (Event theEvent)
  24. {
  25.     if (theEvent == FOUND_NL)
  26.     {
  27.         if (open_comment > close_comment)
  28.         {
  29.             cmt_lines++;
  30.         }
  31.     }
  32.  
  33.     switch (itsState)
  34.     {
  35.     case BeginComment:
  36.         switch (theEvent)
  37.         {
  38.         case FOUND_SLASH:               // Yes, it's a C++ comment.
  39.             cpp_comments++;
  40.             cmt_lines++;
  41.             break;
  42.  
  43.         case FOUND_STAR:                // Yes, it's a C comment.
  44.             open_comment++;
  45.             cmt_lines++;
  46.             break;
  47.         }
  48.         break;
  49.  
  50.     case StarInCComment:
  51.         switch (theEvent)
  52.         {
  53.         case FOUND_SLASH:               // End of C comment.
  54.             close_comment++;
  55.             break;
  56.         }
  57.         break;
  58.     }
  59. }
  60.  
  61. int   main (int argc, char **argv)
  62. {
  63.     CommentCounter CommCnt;
  64.     double Coverage;
  65.  
  66.     if (argc < 2 || 0 == CommCnt.Init (argv[1]))
  67.     {
  68.         fprintf (stderr, "USAGE: CMTCOUNT InFile\n");
  69.     }
  70.     else
  71.     {
  72.         CommCnt.Run();
  73.         CommCnt.Uninit();
  74.  
  75.         printf ("\n%s:\tOpens: %03d, Closes: %03d (%s), C++ comments: %03d\n",
  76.             argv[1],
  77.             CommCnt.GetOpenComment(),
  78.             CommCnt.GetCloseComment(),
  79.             CommCnt.GetOpenComment() != CommCnt.GetCloseComment() ? "*" : " ",
  80.             CommCnt.GetCppComments()
  81.         );
  82.         Coverage = 100.0 * (double)CommCnt.GetCommentLines() /
  83.             (double)CommCnt.GetLines();
  84.         printf ("Comments in %d out of %ld total lines (%3.1f%% coverage)\n",
  85.             CommCnt.GetCommentLines(), CommCnt.GetLines(), Coverage);
  86.     }
  87.  
  88.     return 0;
  89. }
  90.