// FILE. . . . . /home/hak/hlt/src/hlt/osfv1/apps/v1/sources/OsfV0Main.java
// EDIT BY . . . Hassan Ait-Kaci
// ON MACHINE. . Hak-Laptop
// STARTED ON. . Sun Sep 08 18:31:33 2013

/**
 * This is the main entry file for running "<bf>OSF Version 1</bf>",
 * which defines a primitive OSF constraint language. (See <a
 * href="OsfV1.html">OsfV1.grm</a> for details.)
 *
 * <p>
 * 
 * @version     Last modified on Sun Sep 08 18:32:38 2013 by hak
 * @author      <a href="mailto:hak@acm.org">Hassan A&iuml;t-Kaci</a>
 * @copyright   &copy; <a href="http://www.hassan-ait-kaci.net/">by the author</a>
 */

package hlt.osf.v1;

import java.io.File;
import java.io.IOException;

import hlt.language.util.Error;

import hlt.osf.util.BitCode;

public class OsfV1Main
{
  final static void welcome ()
    {
      System.out.println();
      System.out.println("**********************************************************");
      System.out.println("***                                                    ***");
      System.out.println("*** This is HLT's OSF Prototype Version 1.0 - Welcome! ***");
      System.out.println("***                                                    ***");
      System.out.println("**********************************************************");
      System.out.println();
      System.out.println("*** Interactive mode: type '%help.' for known pragmas.");
      System.out.println();
    }

  final static void exit ()
    {
      System.out.println();
      System.out.println();
      System.out.println("**********************************************************");
      System.out.println("*** Exiting HLT's OSF Version 1.0 - Good Bye!          ***");
      System.out.println("**********************************************************");
      System.out.println();
      System.exit(0);
    }

  final public static void main (String args[])
    {
      OsfV1Tokenizer tokenizer = new OsfV1Tokenizer();
      OsfV1Parser parser = new OsfV1Parser(tokenizer);

      welcome();

      BitCode.setOnChar('+');
      BitCode.setOffChar('-');

      try
        {
          for (int i=0; i<args.length; i++)
            {
              parser.displayLine("*** Loading file: "+args[i]);
              parser.parse(args[i]);
            }
          tokenizer.setInteractive();
          parser.parse();
        }
      catch (IOException e)
        {
          parser.errorManager().reportError(new Error().setLabel("IO Error: ")
					    .setMsg(e.getMessage()+" aborting")
					    .setSee("..."));
        }
      catch (Throwable e)
        {
          parser.errorManager().reportError(new Error().setLabel("Fatal Error: ")
                                            .setMsg("aborting")
                                            .setSee("..."));
          e.printStackTrace();
        }
      finally
        {
          exit();
        }
    }
}
