main 

This is the verbatim text of the file ini__main.cpp part of the LLOOP package. Copyright (C) 2005-2006 ERSA. All rights reserved.


int main(int argc, char** argv)
{
  if (argc != 2) 
    {
      cerr <<  "Usage: " << argv[0] << "  or 'selftest'" << endl;
      return -1;
    }

  /*
  if (argc == 2)
    {
      if ((::strcmp(argv[1], "--help") == 0) || 
	  (::strcmp(argv[1], "-H") == 0) ||
	  (::strcmp(argv[1], "-h") == 0))
	{
	}
    }
  */

  ini::Parser parser(argv[1]);

  // ## Self-testing 
  // ##
  universal::String sArg(argv[1]);
  if (sArg == "selftest")
    {
      if (!parser.testSymbols(cout))
	return -1;
      
      return 0;
    }
    
  // ## Parsing
  // ##

  clock_t startstamp;
  clock_t endstamp;
  startstamp = clock();

  parser.run();

  if (parser.fail())
    {
      if (parser.syntaxerror())
	{
	  parser.outputFailureContext(cerr,4);
	}
      parser.outputFailureMessage(cerr);
      cerr << endl;
      cerr << parser.getStreamName() << ": parse error." << endl;
    }

  endstamp = clock();
  double dTime = ((double)(endstamp - startstamp))/(double)CLOCKS_PER_SEC ;
  cout << "done in " << dTime << " seconds." << endl; cout.flush();
  cout << "Press  to expand parsed code..." << endl;
  getchar();

  // ## Expanding : this is the parse reverse operation
  // ## Only for test purposes: It allows to check what was actually parsed.
  // ## 
  if (!parser.fail())
    {
      cout << "This is what you have parsed:" << endl;
      parser.root().expand(cout);
    }
  // ## Memory clean-up 
  // ##
  if (!parser.fail())
    {
      ini::SIniFile* pRoot = &parser.root();
      parser.root().factory().destroy(pRoot);
    }

  return 0;
}