import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 23.02.2006
  * @author
  */

public class BCDErkenner extends Applet {
  // Anfang Variablen
  private Label label1 = new Label();
  private Label label2 = new Label();
  private TextField ein = new TextField();
  private TextField aus = new TextField();
  private Button takt = new Button();
  private Button reset = new Button();
  int i=-1,s=0;
  char rein,raus;
  // Ende Variablen

  public void init() {
    Panel cp = new Panel(null);
    cp.setBounds(0, 0, 817, 184);
    add(cp);
    // Anfang Komponenten

    label1.setBounds(16, 16, 127, 24);
    label1.setText("Eingabeband:");
    label1.setFont (new Font("MS Sans Serif", Font.PLAIN, 19));
    cp.add(label1);
    label2.setBounds(16, 64, 124, 24);
    label2.setText("Ausgabeband:");
    label2.setFont (new Font("MS Sans Serif", Font.PLAIN, 19));
    cp.add(label2);
    ein.setBounds(144, 16, 625, 32);
    ein.setFont (new Font("MS Sans Serif", Font.PLAIN, 19));
    ein.setText("000000010010001101000101011001111000101010111100110111101111");
    cp.add(ein);
    aus.setBounds(144, 64, 625, 32);
    aus.setFont (new Font("MS Sans Serif", Font.PLAIN, 19));
    aus.setText("");
    cp.add(aus);
    takt.setBounds(16, 112, 75, 25);
    takt.setFont (new Font("MS Sans Serif", Font.PLAIN, 19));
    takt.setLabel("Takt");
    cp.add(takt);
    takt.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        taktActionPerformed(evt);
      }
    });

    reset.setBounds(104, 112, 75, 25);
    reset.setFont (new Font("MS Sans Serif", Font.PLAIN, 19));
    reset.setLabel("Reset");
    cp.add(reset);
    reset.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        resetActionPerformed(evt);
      }
    });

    // Ende Komponenten

  }
  // Anfang Ereignisprozeduren
  public void taktActionPerformed(ActionEvent evt) {
    i++;
    if( i < ein.getText().length() )
    {
      rein = ein.getText().charAt(i);
      raus = g(s,rein);
      aus.setText(aus.getText()+raus);
      s = u(s,rein);
    }


  }

  public void resetActionPerformed(ActionEvent evt) {
         neu();
  }

  // Ende Ereignisprozeduren
  private void neu(){
      s = 0;
      i = -1;
      ein.setText("");
      aus.setText("");
  }
  public int u(int s, char e)  {
    switch(s)  {
        case 0: if(e=='0') return 1; else return 2;
        case 1: return 3;
        case 2: if(e=='0') return 4; else return 6;
        case 3: return 5;
        case 4: if(e=='0') return 5; else return 99;
        case 5: return 0;
        case 6: if(e=='0') return 99; else return 7;
        case 7: if(e=='0') return 99; else return 100;
        case 100: return 100;
        default: return 99;
    }
  }
  public char g(int s, char e){
    switch(s)  {
      case 0: return '.';
      case 1: return '.';
      case 2: return '.';
      case 3: return '.';
      case 4: if(e=='0') return '.'; else return 'A';
      case 5: return '.';
      case 6: if(e=='0') return 'A'; else return '.';
      case 7: if(e=='0') return 'A'; else return 'E';
      case 99: return 'A';
      case 100: return 'E';
      default: return 'A';
    }
  }
}




