/* mywc.cpp

   Counts number of lines, words and characters in an ascii file.
   This is a basic form of the wc command in linux.

   Usage: mywc <file>

   October 2009
*/

#include <iostream>
#include <fstream>
using namespace std;

#define CR    '\n'
#define TAB   '\t'
#define SPACE ' '
#define ZERO  0U

int main( int argc, char *argv[] )
{
   if(argc != 2){
	cout << "Missing or too many parameters." << endl;
	cout << "Usage: mywc <file>" << endl;
        return -1;
   }

   ifstream source( argv[1] );

   // Check if files can be opened
   if (source.is_open()==false){
      cout << "Unable to open file " << argv[1] << endl;
      return 1;
   }

   bool flag = false;
   unsigned long character, word, line;
   char ch;

   character = word = line = ZERO;

   while( !(source.eof()) )
   {
       // get a single character
       source.get(ch);

       // count number of characters
       character++;

       // count newlines
       if( ch == CR ) line++;

       // count words
       if ( ch == SPACE || ch == CR || ch == TAB )
           flag = false;
       else if(flag == false){
           flag = true;
           word++;
       }
   }
   source.close();

   cout << line-1 << SPACE << word << SPACE << character -1 << TAB << argv[1] << CR;

  return 0;
}