/* 
 * Hason.java
 * file-ok :SorOlvasó-val történő összehasonlító rutinjai
 * by pts@fazekas.hu at Fri Mar 30 21:02:36 CEST 2001
 * további doksi: a README-ben és e file legkülső class-ának fejkommentjében
 *
 * Kincskereső Kisgömböc (C) Early May 2001 by eNTitánok (Rév Szilvia,
 * Szabó Péter <pts@inf.bme.hu>, Szurdi Miklós, Weizengruber Attila).
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or   
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package eNTitanok.util;
import java.io.FileInputStream;
import java.io.IOException;
// import eNTitanok.util.SorOlvaso;

/**
 * File-ok :SorOlvasó-val történő összehasonlító rutinjai.
 * @see eNTitanok.util.SorOlvaso
 */
public class Hason {
  /**
   * A megadott két file-t :SorOlvasó-val olvasva hasonlítja össze
   * @return pontosan akkor igaz, ha megegyeznek
   * @see eNTitanok.util.SorOlvaso
   * @see eNTitanok.util.Hason#hasonlit_mester
   * @see eNTitanok.util.Hason#hasonlit_prefix
   */
  public static boolean hasonlit(String nev1, String nev2) throws IOException {
    // Imp: sorszám/karakterpozíció visszadása
    SorOlvaso s1=new SorOlvaso(new FileInputStream(nev1));
    SorOlvaso s2=new SorOlvaso(new FileInputStream(nev2));
    String sor1, sor2;
    while (true) {
      sor1=s1.readLine(); sor2=s2.readLine();
      if (sor1==null && sor2==null) { s1.close(); s2.close()return true}
      if (sor1==null || sor2==null) { s1.close(); s2.close()return false}
      if (!sor1.equals(sor2))       { s1.close(); s2.close()return false}
    }
  }
  /**
   * A megadott két file-t :SorOlvasó-val olvasva hasonlítja össze, de az első
   * file-nak csak a prefix-szel kezdődő sorait veszi figyelembe, levágva
   * belőlük prefix-et.
   * @return pontosan akkor igaz, ha a file-ok megegyeznek
   * @see eNTitanok.util.SorOlvaso
   * @see eNTitanok.util.Hason#hasonlit
   */
  public static boolean hasonlit_prefix(String nev1, String nev2, String prefix) throws IOException {
    // Imp: sorszám/karakterpozíció visszadása
    SorOlvaso s1=new SorOlvaso(new FileInputStream(nev1));
    SorOlvaso s2=new SorOlvaso(new FileInputStream(nev2));
    String sor1, sor2;
    while (true) {
      while (true) {
        sor1=s1.readLine();
        if (sor1==null || sor1.startsWith(prefix)) break;
      }
      sor1=sor1.substring(prefix.length());
      sor2=s2.readLine();
      if (sor1==null && sor2==null) { s1.close(); s2.close()return true}
      if (sor1==null || sor2==null) { s1.close(); s2.close()return false}
      if (!sor1.equals(sor2))       { s1.close(); s2.close()return false}
    }
  }
  /**
   * A megadott file <TT>fn_prefix</TT>-szel kezdődő sorából veszi a másik
   * file nevét, amivel a megadott file <TT>sor_prefix</TT>-szel kezdődő sorait
   * :SorOlvasó-val olvasva hasonlítja össze. fn_prefix egyszer szerepelhet,
   * mégpedig az első sor_prefix előtt.
   * @return pontosan akkor igaz, ha a file-ok megegyeznek
   * @see eNTitanok.util.SorOlvaso
   * @see eNTitanok.util.Hason#hasonlit
   * @see eNTitanok.util.Hason#hasonlit_prefix
   */
  public static boolean hasonlit_mester(String nev1, String fn_prefix, String sor_prefix) throws IOException {
    // Imp: sorszám/karakterpozíció visszadása
    SorOlvaso s1=new SorOlvaso(new FileInputStream(nev1));
    String sor1, sor2;
    while ((sor1=s1.readLine())!=null && !sor1.startsWith(fn_prefix));
    // System.out.println(sor1);
    if (null==sor1) return false// Imp: többféle visszatérési kód
    SorOlvaso s2=new SorOlvaso(new FileInputStream(sor1.substring(fn_prefix.length())));
    while (true) {
      while (true) {
        sor1=s1.readLine();
        if (sor1==null || sor1.startsWith(sor_prefix)) break;
      }
      if (sor1!=null) sor1=sor1.substring(sor_prefix.length());
      sor2=s2.readLine();
      // System.out.println("ZZZ"); // DEBUG
      // System.out.println(sor1); // DEBUG
      // System.out.println(sor2); // DEBUG
      if (sor1==null && sor2==null) { s1.close(); s2.close()return true}
      if (sor1==null || sor2==null) { s1.close(); s2.close()return false}
      if (!sor1.equals(sor2))       { s1.close(); s2.close()return false}
    } /// WHILE
  } /// hasonlit_mester()
} /// class Hason