import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;


// Einlesen einer dBase-datei
// mittels DataInputStream
// GUI ist vollstaendig

// (c), 2008 Michael Wilhelm


public class Read_dBase extends JFrame {

   // globale GUI-Elemente
  JTextField Editzeile;
  JTextArea Editor;

  //Frame konstruieren
  public Read_dBase() {

    setSize(1000, 700);
    setTitle("Einlesen einer dBase-Datei");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setGUI();
  } // create


  // setzen der GUI-Elemente, vollständig
  void setGUI() {
    JLabel Label1;
    JScrollPane Sc;
    JButton BnOk;		// Schalter definieren
    JButton BnEsc;		// Schalter definieren
    Box box1;
    Box box2;

      // North
    Label1 = new JLabel();
    Label1.setText("Datei");
    Label1.setFont( new Font("Arial", Font.BOLD,28));
    Editzeile = new JTextField();
    Editzeile.setFont( new Font("Arial", Font.BOLD,28));
    Editzeile.setText("test_bsp1.dbf");  // N =10

    box1 = Box.createVerticalBox();
    box1.add(  Box.createVerticalStrut(5) );
    box1.add(Label1);
    box1.add(  Box.createVerticalStrut(5) );
    box1.add(Editzeile) ;
    box1.add(  Box.createVerticalStrut(30) );
    this.getContentPane().add(box1, BorderLayout.NORTH);

      // Center
    Editor = new JTextArea();
    Editor.setFont( new Font("Arial", Font.BOLD,28));
    Editor.setText("-");
    Sc = new JScrollPane(Editor);
    getContentPane().add( Sc, BorderLayout.CENTER);

      // South
		BnOk = new JButton();  	// Schalter erzeugen
		BnOk.setText("Ok");  	// Text setzen
    BnOk.setFont( new Font("Arial", Font.BOLD,28));
		BnEsc= new JButton();  	// Schalter erzeugen
		BnEsc.setText("Esc");  	// Text setzen
    BnEsc.setFont( new Font("Arial", Font.BOLD,28));
    box2 = Box.createHorizontalBox();
    box2.add(  Box.createVerticalStrut(40) );
    box2.add(  Box.createHorizontalStrut(70) );
    box2.add(BnOk);
    box2.add(  Box.createHorizontalStrut(70) );
    box2.add(BnEsc) ;
    box2.add(  Box.createHorizontalStrut(70) );
    this.getContentPane().add(box2, BorderLayout.SOUTH);

     // setzen Event-Handler
    BnOk.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        BnOk_Click();
      }
    });
    BnEsc.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        BnEsc_Click();
      }
    });

  }



  // wird ausgelöst beim Drücken des Schalters ESC
  void BnEsc_Click() {
    System.exit(0);
  }



  public static void main(String[] args) {
    Read_dBase frame = new Read_dBase();
    frame.setVisible(true);
  }

  // testet, ob die Datei vorhanden ist
  public boolean FileExists(String sFileName) {
      File f = null;
      try {
          // evnetuell kann auch f.pathSeparatorChar verwendet werden
          f = new File(sFileName);
          if (f.exists())
              return true;
          else
              return false;
      }
      catch (Exception e) {
          return false;
      }
  }  // FileExists


  // wird ausgelöst beim Drücken des Schalters Ok
  // hier fehlt etwas
  void BnOk_Click() {
    String NL = "\r\n";
    FileInputStream Fin;
    DataInputStream Din;
    String sFilename;
    dBase_Header header;
    dBase_Feld felder[];
    int i, j, k;
    int i1,i2,i3,i4;
    String sStr;
    char ch;

    // test, ob Datei vorhanden ist
    Editor.setText("");  // Editorinhalt löschen
    /*
    try {
    }
    catch (IOException ee) {
        System.err.println("IOException: " + ee);
    }
    */

  }  // BnOk_Click

}


// Klasse fuer den Header
// oeffentliche Variablen, vereinfacht
class dBase_Header {
     public int Version;  // byte
     public int jahr;  // byte
     public int monat;  // byte
     public int tag;  // byte
     public int anzRecords;   // Anzahl der Datensaetze
     public int headersize;   // WORD Headergroesse in Byte
     public int recordsize;   // Word Laenge eines einzelnen Datensatzes */
     private byte  dummy[] = new byte[20];
     public int AnzFelder;

     // liest den Header
     public void loadFromFile(DataInputStream Din) {
         byte b, b1, b2, b3, b4;
         int i1,i2;
         /*
         try {
         }
         catch (IOException ee) {
            System.err.println("IOException: " + ee);
         }
         */
     }

} // dBase_Header


// Klasse fuer einen Feldeintrag, keine Daten
//   nur Definition
class dBase_Feld {
    public String FeldStr;      // Feldname   aber nur Grossbuchstaben  11 Zeichen
    public char cTyp;           //Feldtyp  C=String; N=Zahl; D=Datum; L=Boolean
    private byte  dummy1[] = new byte[4];

    public int  fieldsize;           // Feldlaenge byte
    public int  nk;             // Nachkommastellen byte
    private byte  dummy2[] = new byte[14];
    public  int offset;  // speichert den Offset jedes Feldes
                     // eventuell zum zurückschreiben

     // liest die definition eines Feldes
     public void loadFromFile(DataInputStream Din) {
         byte b, b1, b2;
         char ch;
         int i, i1,i2;
         /*
         try {
         }
         catch (IOException ee) {
            System.err.println("IOException: " + ee);
         }
         */
     }

} // dBase_Feld




