import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 23.02.2006
  * @author
  */

public class ZaehlerModulo3 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, 740, 194);
    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, 377, 32);
    ein.setFont (new Font("MS Sans Serif", Font.PLAIN, 19));
    ein.setText("0101010101R010101");
    cp.add(ein);
    aus.setBounds(144, 64, 377, 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: switch(e) {case '0': return 0; case '1':return 1;
      case 'R': return 0;}
      case 1: switch(e) {case '0': return 2; case '1':return 1;
      case 'R': return 0;}
      case 2: switch(e) {case '0': return 2; case '1':return 3;
      case 'R': return 0;}
      case 3: switch(e) {case '0': return 4; case '1':return 3;
      case 'R': return 0;}
      case 4: switch(e) {case '0': return 4; case '1':return 5;
      case 'R': return 0;}
      case 5: switch(e) {case '0': return 1; case '1':return 5;
      case 'R': return 0;}
      default: return 99;
    }
  }
  public char g(int s, char e)  {
    switch(s){
      case 0: switch(e) {case '0': return '0'; case '1':return '0';
      case 'R': return '0';}
      case 1: switch(e) {case '0': return '1'; case '1':return '0';
      case 'R': return '0';}
      case 2: switch(e) {case '0': return '1'; case '1':return '1';
      case 'R': return '0';}
      case 3: switch(e) {case '0': return '2'; case '1':return '1';
      case 'R': return '0';}
      case 4: switch(e) {case '0': return '2'; case '1':return '2';
      case 'R': return '0';}
      case 5: switch(e) {case '0': return '0'; case '1':return '2';
      case 'R': return '0';}
      default: return ' ';
    }
  }


}
