diff --git a/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java b/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java
index ba0f1772d..ae313670a 100644
--- a/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java
+++ b/src/main/java/de/neemann/digital/analyse/expression/modify/ThreeInputs.java
@@ -11,6 +11,7 @@ import de.neemann.digital.analyse.expression.Operation;
import java.util.ArrayList;
/**
+ * uses only gates with three inputs
*/
public class ThreeInputs implements ExpressionModifier {
@Override
@@ -49,26 +50,16 @@ public class ThreeInputs implements ExpressionModifier {
private Expression gen(int a, int b) {
int num = b - a + 1;
- System.out.println(num);
if (num == 1)
return expressions.get(a);
else if (num == 2)
return opGen.op(expressions.get(a), expressions.get(b));
else {
- int d = 1;
- while (d * 3 * 2 < num)
- d *= 3;
-
- if (d * 3 * 2 == num) {
- return opGen.op(
- gen(a, a + d * 3 - 1),
- gen(a + d * 3, b));
- } else {
- return opGen.op(
- gen(a, a + d - 1),
- gen(a + d, a + d * 2 - 1),
- gen(a + d * 2, b));
- }
+ int d = num / 3;
+ return opGen.op(
+ gen(a, a + d - 1),
+ gen(a + d, a + d * 2 - 1),
+ gen(a + d * 2, b));
}
}
}
diff --git a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
index 984880804..34d10b368 100644
--- a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
+++ b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
@@ -14,10 +14,7 @@ import de.neemann.digital.analyse.expression.Variable;
import de.neemann.digital.analyse.expression.format.FormatToExpression;
import de.neemann.digital.analyse.expression.format.FormatToTableLatex;
import de.neemann.digital.analyse.expression.format.FormatterException;
-import de.neemann.digital.analyse.expression.modify.ExpressionModifier;
-import de.neemann.digital.analyse.expression.modify.NAnd;
-import de.neemann.digital.analyse.expression.modify.NOr;
-import de.neemann.digital.analyse.expression.modify.TwoInputs;
+import de.neemann.digital.analyse.expression.modify.*;
import de.neemann.digital.analyse.format.TruthTableFormatterLaTeX;
import de.neemann.digital.analyse.quinemc.BoolTableByteArray;
import de.neemann.digital.builder.ATF150x.ATFDevice;
@@ -405,6 +402,13 @@ public class TableDialog extends JDialog {
}
}.setToolTip(Lang.get("menu_table_createTwo_tt")).createJMenuItem());
+ createMenu.add(new ToolTipAction(Lang.get("menu_table_createThree")) {
+ @Override
+ public void actionPerformed(ActionEvent actionEvent) {
+ createCircuit(new ThreeInputs());
+ }
+ }.setToolTip(Lang.get("menu_table_createThree_tt")).createJMenuItem());
+
createMenu.add(new ToolTipAction(Lang.get("menu_table_createNAnd")) {
@Override
public void actionPerformed(ActionEvent actionEvent) {
diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml
index 3fe081a82..a1b5b88d8 100644
--- a/src/main/resources/lang/lang_de.xml
+++ b/src/main/resources/lang/lang_de.xml
@@ -1242,6 +1242,8 @@ Sind evtl. die Namen der Variablen nicht eindeutig?
Erzeugt eine Schaltung, welche der Wahrheitstabelle entspricht nur mit NOr-Gattern.
Schaltung mit Gattern mit zwei Eingängen
Erzeugt eine Schaltung und verwendet nur Gatter mit zwei Eingängen.
+ Schaltung mit Gattern mit drei Eingängen
+ Erzeugt eine Schaltung und verwendet nur Gatter mit maximal drei Eingängen.
Bausteine
Erzeugt eine JEDEC Datei für den Baustein
Export LaTeX
diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml
index 34c41b8d5..abd41c3ea 100644
--- a/src/main/resources/lang/lang_en.xml
+++ b/src/main/resources/lang/lang_en.xml
@@ -1238,6 +1238,8 @@
Creates a circuit which reproduces the truth table only with NOr gates.
Circuit with two input gates
create circuit, use only gates with two inputs
+ Circuit with three input gates
+ create circuit, use only gates with a maximum of three inputs
Device
Creates a JEDEC file for the device
Export LaTeX