// FileLineReader.java
//
// Copyright 1999 Henrik Bjorkman. All rights reserved. 
// No responsibilities taken. Use on your own risk. Etc...
//
//
//
// History
//
// 1999-09-30 
// Created by Henrik Bjorkman
//
// 2000-06-13
// Changed package name to chartplotter_package.
// Henrik


package chartplotter_package;

import java.io.*;
import java.awt.*;
import java.text.*;


public class FileLineReader
{
  int line=0;
  String fileName=null;
  BufferedReader in=null;
  FileLineReader subReader=null;
  String dirName=null;

  static void error(String s)
  {
    System.err.println("FileLineReader: " + s);
    System.exit(0);
  }

  static void debug(String s)
  {
    //System.err.println("FileLineReader: " + s);
  }

  public static void println(String s)
  {
    System.out.println(s);
  }

  public String getDirName()
  {
    if (subReader!=null)
    {
      return(subReader.getDirName());
    }
    return(dirName);
  }

  public int getLine()
  {
    if (subReader!=null)
    {
      return(subReader.getLine());
    }
    return(line);
  }

  public String getFileName()
  {
    if (subReader!=null)
    {
      return(subReader.getFileName());
    }
    return(fileName);
  }

  public void close()
  {
    if (subReader!=null)
    {
      subReader.close();
      subReader=null;
    }

    try
    {
      if (in!=null) {in.close();}
    }
    catch (IOException e) {error(fileName+" line "+line+" "+e); }

  }

  public String getInfo()
  {
    return("file "+getFileName()+" line "+getLine());
  }

  public String readLine()
  {
    String str=null;
    for(;;)
    {

      if (subReader!=null)
      {
        str=subReader.readLine();
        if (str!=null) break;
        subReader=null;
        str="";
        break;
      }

      try
      {
        str=in.readLine();
        line++;

        if (str==null) 
        {
          in.close();
          in=null;
          break;
        }

        debug("line "+line+": "+str);

        if (str.startsWith("//")) {;}
        else if (str.startsWith("include"))
        {
          subReader=new FileLineReader(dirName+File.separator+ChartWord.changeSeparator(ChartWord.skipWords(str,1)));
          str="";
          break;
        }
        else
        {
          break;
        }
      }
      catch (IOException e) {error(fileName+" line "+line+" "+e); }
    }
    return(str);
  }


  public FileLineReader(String name)
  {
    this.fileName=name;

    try
    {
      File file=new File(fileName);
      File abs_file=new File(file.getAbsolutePath());
      dirName=abs_file.getParent();
      debug("file "+fileName+" dir "+dirName);
      in=new BufferedReader(new FileReader(file));
    }
    catch (IOException e) {error(fileName+" line "+line+" "+e); }
  } 


  static public void main(String[] args)
  {
    FileLineReader r=new FileLineReader(args[0]);
    String str=null;

    for(;;)
    {
      str=r.readLine();
      if (str==null) break;
      println(str);
    }


  }

}
