diff --git a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZion7BaseVoid.java b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZion7BaseVoid.java new file mode 100644 index 0000000..9a2117b --- /dev/null +++ b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZion7BaseVoid.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004-2014, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.x4o.fc18.zion7; + +import java.util.List; + +import org.x4o.fc18.octal8.PrimordialOctal; + +/// Handles the hyper reality four corner cake strobes. +/// +/// NOTE: needs a "nether db" where a sand walk gets a spice harvester to deal with the spice value +/// +/// @author Willem Cazander +/// @version 1.0 Sep 8, 2025 +public interface FourCornerZion7BaseVoid extends FourCornerZion7AlphaOmega { + + /// Embed sand spice using a sand walk to call the identified great sand worm which leaves the spice in the sand. + void strobeSandWorm(List sandWalk, List sandSpice); + + interface Adapter extends FourCornerZion7BaseVoid, FourCornerZion7AlphaOmega.Adapter { + + @Override + default void strobeSandWorm(List sandWalk, List sandSpice) { + } + } +} diff --git a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZion7Bereshit.java b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZion7Bereshit.java index 4a27382..d78719a 100644 --- a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZion7Bereshit.java +++ b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZion7Bereshit.java @@ -25,7 +25,6 @@ package org.x4o.fc18.zion7; import java.math.BigInteger; import java.util.List; -import org.x4o.fc18.octal8.PrimordialOctal; import org.x4o.fc18.zion7.flame4.FCFlameFremanChocoBase8; import org.x4o.fc18.zion7.flame4.FCFlameFremanLegoBase2; import org.x4o.fc18.zion7.flame4.FCFlameFremanLegoBase8; @@ -38,7 +37,7 @@ import org.x4o.fc18.zion7.flame4.FCFlameWordDish; /// /// @author Willem Cazander /// @version 1.0 Jan 09, 2025 -public interface FourCornerZion7Bereshit extends FourCornerZion7AlphaOmega { +public interface FourCornerZion7Bereshit extends FourCornerZion7BaseVoid { /// Single word cake point. void strobeTheWord(FCFlameWordDish course, int cakePoint); @@ -61,13 +60,10 @@ public interface FourCornerZion7Bereshit extends FourCornerZion7AlphaOmega { /// Embed base8 computer chocolate number. void strobeNumberBASE8Choco(FCFlameFremanChocoBase8 type, FCFlameNumberTaste taste, BigInteger value); - /// Embed sand spice using a sand walk to call the identified great sand worm which leaves the spice in the sand. - void strobeSandWorm(List sandWalk, List sandSpice); - /// The external supported salah sequence strobes. void strobeSalahSequence(FCFlameSalahSequence type, List> arguments); - interface Adapter extends FourCornerZion7Bereshit, FourCornerZion7AlphaOmega.Adapter { + interface Adapter extends FourCornerZion7Bereshit, FourCornerZion7BaseVoid.Adapter { @Override default void strobeTheWord(FCFlameWordDish course, int cakePoint) { @@ -93,10 +89,6 @@ public interface FourCornerZion7Bereshit extends FourCornerZion7AlphaOmega { default void strobeNumberBASE8Choco(FCFlameFremanChocoBase8 type, FCFlameNumberTaste taste, BigInteger value) { } - @Override - default void strobeSandWorm(List sandWalk, List sandSpice) { - } - @Override default void strobeSalahSequence(FCFlameSalahSequence type, List> arguments) { } diff --git a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoGrapher.java b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoGrapher.java index f16a764..63c0101 100644 --- a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoGrapher.java +++ b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoGrapher.java @@ -58,15 +58,15 @@ import org.x4o.fc18.zion7.flame4.FCFlameNumberGram; public class FourCornerZionStenoGrapher { static public FourCornerZion7Bereshit writerX06(List out) { - return new FourCornerWriter(v -> out.add(v), () -> {}, FCFlameStenoTongue.FC6_PLUS); + return new FourCornerWriterBereshit(v -> out.add(v), () -> {}, FCFlameStenoTongue.FC6_PLUS); } static public FourCornerZion7Candlelier writerX18(List out) { - return new FourCornerWriter(v -> out.add(v), () -> {}, FCFlameStenoTongue.FC18); + return new FourCornerWriterCandlelier(v -> out.add(v), () -> {}, FCFlameStenoTongue.FC18); } static public FourCornerZion7TempleScrolls writerXDBX18(List out) { - return new FourCornerWriter(v -> out.add(v), () -> {}, FCFlameStenoTongue.FC18); + return new FourCornerWriterTempleScrolls(v -> out.add(v), () -> {}, FCFlameStenoTongue.FC18); } /* static public FourCornerZion7Bereshit writerFC6(List out) { @@ -85,11 +85,15 @@ public class FourCornerZionStenoGrapher { return new FourCornerWriter(v -> out.add(v), () -> {}, false); } - static public FourCornerZion7TempleScrolls writerXDBX18(List out) { + static public FourCornerZion7BaseVoid writerFC18Worms(List out) { return new FourCornerWriter(v -> out.add(v), () -> {}, false); } - static public FourCornerZion7TempleScrolls writerXDBX18Adult(List out) { + static public FourCornerZion7TempleScrolls writerTongue(FCFlameStenoTongue outTongue, List out) { + return new FourCornerWriter(v -> out.add(v), () -> {}, false); + } + + static public FourCornerZion7TempleScrolls writerTongue(FCFlameStenoTongue outTongue,List out) { return new FourCornerWriter(v -> out.add(v), () -> {}, false); }s */ @@ -123,27 +127,27 @@ public class FourCornerZionStenoGrapher { } */ - static public final class FourCornerWriter implements FourCornerZionStenoPetroglyphs, FourCornerZion7Candlelier, FourCornerZion7TempleScrolls { - - private final IntConsumer out; - private final Runnable outFlush; - private final FCFlameStenoTongue outTongue; + static abstract private class FourCornerWriterBaseVoid implements FourCornerZionStenoPetroglyphs, FourCornerZion7BaseVoid { - public FourCornerWriter(IntConsumer out, Runnable outFlush, FCFlameStenoTongue outTongue) { + protected final IntConsumer out; + private final Runnable outFlush; + protected final FCFlameStenoTongue outTongue; + + public FourCornerWriterBaseVoid(IntConsumer out, Runnable outFlush, FCFlameStenoTongue outTongue) { this.out = Objects.requireNonNull(out); this.outFlush = Objects.requireNonNull(outFlush); this.outTongue = Objects.requireNonNull(outTongue); } - private void outFlush() { + protected void outFlush() { outFlush.run(); } - private void outAdd(int value) { + protected void outAdd(int value) { out.accept(value); } - private void outAddAll(List values) { + protected void outAddAll(List values) { int listSize = values.size(); for (int i = NCR_ZERO; i < listSize; i++) { outAdd(values.get(i)); @@ -188,7 +192,7 @@ public class FourCornerZionStenoGrapher { outAdd(FCDotCDC1604DashP6.NS04_RAKA1_INTERROBANG.baklavaPointDotIndex()); } - private void outAddFremanCake8(FCFlameFremanSuit suit, int bankStart, BigInteger value, Function overrideMsb) { + protected void outAddFremanCake8(FCFlameFremanSuit suit, int bankStart, BigInteger value, Function overrideMsb) { if (outTongue.isSixBit()) { outAddBankCakeFC6(NCR_BANK8_BITS, BIG_BITS_8, suit, bankStart, value, overrideMsb); } else { @@ -197,7 +201,7 @@ public class FourCornerZionStenoGrapher { outFlush(); } - private void outAddFremanCake9(FCFlameFremanSuit suit, int bankStart, BigInteger value, Function overrideMsb) { + protected void outAddFremanCake9(FCFlameFremanSuit suit, int bankStart, BigInteger value, Function overrideMsb) { if (outTongue.isSixBit()) { outAddBankCakeFC6(NCR_BANK9_BITS, BIG_BITS_9, suit, bankStart, value, overrideMsb); } else { @@ -206,39 +210,39 @@ public class FourCornerZionStenoGrapher { outFlush(); } - private void outAddBankCake12(int cakeSel0, int cakeBank, int bankStart, BigInteger value, Function overrideMsb) { + protected void outAddBankCake12(int cakeSel0, int cakeBank, int bankStart, BigInteger value, Function overrideMsb) { outAddBankCake(NCR_BANK12_BITS, BIG_BITS_12, cakeSel0, cakeBank, bankStart, value, out, overrideMsb); outFlush(); } - private BigInteger requireBigPositive(BigInteger value) { + protected BigInteger requireBigPositive(BigInteger value) { if (value.signum() == NCR_SIGNUM_NEGATIVE) { throw new IllegalArgumentException("Value can't be negative: " + value); } return value; } - private BigInteger requireBigMax(BigInteger value, BigInteger valueMax) { + protected BigInteger requireBigMax(BigInteger value, BigInteger valueMax) { if (value.compareTo(valueMax) > 0) { throw new IllegalArgumentException("Value is larger than max: " + valueMax); } return value; } - private BigInteger requireBigNoneZero(BigInteger value) { + protected BigInteger requireBigNoneZero(BigInteger value) { if (BigInteger.ZERO.equals(value)) { throw new IllegalArgumentException("Value can't be zero: " + value); } return value; } - private void requireTongueFC18() { + protected void requireTongueFC18() { if (outTongue.isSixBit()) { throw new IllegalArgumentException("Value can't be written in six bit mode."); } } - // --------------------------------------- BEGIN FC6 + // --------------------------------------- BEGIN BASE VOID @Override public void strobeDocumentAlpha() { @@ -249,6 +253,57 @@ public class FourCornerZionStenoGrapher { outFlush(); } + @Override + public void strobeSandWorm(List sandWalk, List sandSpice) { + Objects.requireNonNull(sandWalk); + Objects.requireNonNull(sandSpice); + if (!SAND_WORM_SIGNS.contains(sandWalk.size())) { + throw new IllegalArgumentException("Sand walk rhythm is not 72 bit aligned: " + sandWalk.size()); + } + if (0 != (sandSpice.size() % 5)) { + throw new IllegalArgumentException("Sand spice is not 15 bit aligned: " + sandSpice.size()); + } + Iterator walkItr = sandWalk.iterator(); + Iterator spiceItr = sandSpice.iterator(); + if (outTongue.isSixBit()) { + outAdd(FCDotDEC2701DashPX0.ESC6_SAND_WORM.cakePointDotIndex()); + while (walkItr.hasNext()) { + outAdd(FCDotCDC1604DashP6.NX01_A.cakePointDotIndex() + walkItr.next().ordinal()); + } + outAdd(FCDotCDC1604DashP6.NS05_RAKA1_UPQUESTION.cakePointDotIndex()); + while (spiceItr.hasNext()) { + outAdd(FCDotCDC1604DashP6.NX01_A.cakePointDotIndex() + spiceItr.next().ordinal()); + } + outAdd(FCDotCDC1604DashP6.NS04_RAKA1_INTERROBANG.cakePointDotIndex()); + } else { + while (walkItr.hasNext()) { + int bitValue12 = 0; + bitValue12 += (walkItr.next().ordinal() << 9); + bitValue12 += (walkItr.next().ordinal() << 6); + bitValue12 += (walkItr.next().ordinal() << 3); + bitValue12 += (walkItr.next().ordinal() << 0); + outAdd(FourCornerDotCake.FC_SANDWALK_12.getStart() + bitValue12); + } + while (spiceItr.hasNext()) { + int bitValue15 = 0; + bitValue15 += (spiceItr.next().ordinal() << 12); + bitValue15 += (spiceItr.next().ordinal() << 9); + bitValue15 += (spiceItr.next().ordinal() << 6); + bitValue15 += (spiceItr.next().ordinal() << 3); + bitValue15 += (spiceItr.next().ordinal() << 0); + outAdd(FourCornerDotCake.FC_SANDWORM_15.getStart() + bitValue15); + } + } + outFlush(); + } + } + + static private class FourCornerWriterBereshit extends FourCornerWriterBaseVoid implements FourCornerZion7Bereshit { + + public FourCornerWriterBereshit(IntConsumer out, Runnable outFlush, FCFlameStenoTongue outTongue) { + super(out, outFlush, outTongue); + } + @Override public void strobeTheWord(FCFlameWordDish course, int cakePoint) { if (cakePoint < outTongue.cakePointMin()) { @@ -317,50 +372,6 @@ public class FourCornerZionStenoGrapher { outAddFremanCake9(type, type.octals()/3 - 1, value, v -> v = (v & 0x1F) + (taste.ordinal() << 5)); } - @Override - public void strobeSandWorm(List sandWalk, List sandSpice) { - Objects.requireNonNull(sandWalk); - Objects.requireNonNull(sandSpice); - if (!SAND_WORM_SIGNS.contains(sandWalk.size())) { - throw new IllegalArgumentException("Sand walk rhythm is not 72 bit aligned: " + sandWalk.size()); - } - if (0 != (sandSpice.size() % 5)) { - throw new IllegalArgumentException("Sand spice is not 15 bit aligned: " + sandSpice.size()); - } - Iterator walkItr = sandWalk.iterator(); - Iterator spiceItr = sandSpice.iterator(); - if (outTongue.isSixBit()) { - outAdd(FCDotDEC2701DashPX0.ESC6_SAND_WORM.cakePointDotIndex()); - while (walkItr.hasNext()) { - outAdd(FCDotCDC1604DashP6.NX01_A.cakePointDotIndex() + walkItr.next().ordinal()); - } - outAdd(FCDotCDC1604DashP6.NS05_RAKA1_UPQUESTION.cakePointDotIndex()); - while (spiceItr.hasNext()) { - outAdd(FCDotCDC1604DashP6.NX01_A.cakePointDotIndex() + spiceItr.next().ordinal()); - } - outAdd(FCDotCDC1604DashP6.NS04_RAKA1_INTERROBANG.cakePointDotIndex()); - } else { - while (walkItr.hasNext()) { - int bitValue12 = 0; - bitValue12 += (walkItr.next().ordinal() << 9); - bitValue12 += (walkItr.next().ordinal() << 6); - bitValue12 += (walkItr.next().ordinal() << 3); - bitValue12 += (walkItr.next().ordinal() << 0); - outAdd(FourCornerDotCake.FC_SANDWALK_12.getStart() + bitValue12); - } - while (spiceItr.hasNext()) { - int bitValue15 = 0; - bitValue15 += (spiceItr.next().ordinal() << 12); - bitValue15 += (spiceItr.next().ordinal() << 9); - bitValue15 += (spiceItr.next().ordinal() << 6); - bitValue15 += (spiceItr.next().ordinal() << 3); - bitValue15 += (spiceItr.next().ordinal() << 0); - outAdd(FourCornerDotCake.FC_SANDWORM_15.getStart() + bitValue15); - } - } - outFlush(); - } - @Override public void strobeSalahSequence(FCFlameSalahSequence type, List> arguments) { Objects.requireNonNull(type); @@ -402,8 +413,13 @@ public class FourCornerZionStenoGrapher { outAdd(FCDotCDC1604DashP6.NS04_RAKA1_INTERROBANG.baklavaPointDotIndex()); outFlush(); } + } + + static private class FourCornerWriterCandlelier extends FourCornerWriterBereshit implements FourCornerZion7Candlelier { - // ----------------------------- END FC6 + public FourCornerWriterCandlelier(IntConsumer out, Runnable outFlush, FCFlameStenoTongue outTongue) { + super(out, outFlush, outTongue); + } @Override public void strobeNumberGrams(FCFlameNumberGram gram, List values) { @@ -492,5 +508,12 @@ public class FourCornerZionStenoGrapher { }); } } + + static private class FourCornerWriterTempleScrolls extends FourCornerWriterCandlelier implements FourCornerZion7TempleScrolls { + + public FourCornerWriterTempleScrolls(IntConsumer out, Runnable outFlush, FCFlameStenoTongue outTongue) { + super(out, outFlush, outTongue); + } + } } \ No newline at end of file diff --git a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/flame4/FCFlameStenoTongue.java b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/flame4/FCFlameStenoTongue.java index b0376d4..6e89210 100644 --- a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/flame4/FCFlameStenoTongue.java +++ b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/flame4/FCFlameStenoTongue.java @@ -30,10 +30,16 @@ import org.x4o.fc18.cake2.FourCornerDotCake; /// @version 1.0 Sep 6, 2025 public enum FCFlameStenoTongue { + /// Pure six bit baklave point word candy. FC6 (FourCornerDotCake.FC_CDC1604_P6.getStart(), FourCornerDotCake.FC_CDC1604_P6.getStop()), - FC6_PLUS (FourCornerDotCake.FC_CDC1604_P6.getStart(), FourCornerDotCake.FC_PIE9D_27.getStop()), // 63 > auto esc to fc6 + /// Big computer have extra ROM space for extra candy letters. + FC6_PLUS (FourCornerDotCake.FC_CDC1604_P6.getStart(), FourCornerDotCake.FC_PIE9D_27.getStop()), + /// Full range with all features FC18 (FourCornerDotCake.FC_CDC1604_P6.getStart(), FourCornerDotCake.FC_CDC1604_P6.getStop()), - FC18_ADULT (FourCornerDotCake.FC_CLK1K_Z.getStop() + 1, FourCornerDotCake.FC_CDC1604_P6.getStop()), // no candy for adults + /// No candy for adults. + FC18_ADULT (FourCornerDotCake.FC_CLK1K_Z.getStop() + 1, FourCornerDotCake.FC_CDC1604_P6.getStop()), + /// Only adult worms are allowed in the desert of the real. + FC18_WORMS (FourCornerDotCake.FC_SANDWALK_12.getStart(), FourCornerDotCake.FC_SANDWORM_15.getStop()), ; private static final FCFlameStenoTongue[] VALUES = values();