From 7ea17d76282a1f7d0b96caa707dae4b9fbdd04e0 Mon Sep 17 00:00:00 2001 From: Willem Date: Fri, 22 Aug 2025 15:39:33 +0200 Subject: [PATCH] FC18: Converted NCR magic sparkler to smoke signal for missing sparkler --- .../fc18/zion7/FourCornerZionStenoLexer.java | 35 ++++++++----------- .../zion7/FourCornerZionStenoLexerFire.java | 6 ---- .../zion7/FourCornerZionStenoLexerSmoke.java | 11 ++++++ .../org/x4o/fc18/FourCornerRecipeTest.java | 2 -- .../java/org/x4o/fc18/zion7/LexerNCRTest.java | 19 +++++----- .../org/x4o/fc18/zion7/TestFireWalker.java | 9 ----- 6 files changed, 35 insertions(+), 47 deletions(-) diff --git a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexer.java b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexer.java index 691fa88..e968f99 100644 --- a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexer.java +++ b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexer.java @@ -196,15 +196,7 @@ public class FourCornerZionStenoLexer { return true; } - private void ncrBankReset() { - for (int i = 0; i < denominatorBank.length; i++) { - denominatorBank[i] = 0; - numeratorBank[i] = 0; - } - } - - private void ncrBankFire(boolean magic) { - fireSignals.fireStateNCR1632BankSparkler(magic); + private void ncrBankFire() { BigInteger denominator = BigInteger.ONE; for (int i = 0; i < denominatorBank.length; i++) { denominator = denominator.add(BigInteger.valueOf(denominatorBank[i]).shiftLeft(i * 9)); @@ -214,6 +206,11 @@ public class FourCornerZionStenoLexer { numerator = numerator.add(BigInteger.valueOf(numeratorBank[i]).shiftLeft(i * 9)); } handler.strobeNCR1632(denominator, numerator); + // reset the bank after each fire + for (int i = 0; i < denominatorBank.length; i++) { + denominatorBank[i] = 0; + numeratorBank[i] = 0; + } } private void decModeReset() { @@ -351,30 +348,27 @@ public class FourCornerZionStenoLexer { @Override public void process(FourCornerZionStenoLexer lexer, int idxFirst, int idxLast) { - lexer.ncrBankReset(); - boolean magicSparkler = true; + boolean missingSparkler = true; for (int i = idxFirst; i <= idxLast; i++) { int cakePoint = lexer.input.get(i); if (cakePoint >= FourCornerDotCake.FC_NCR1632_DEN.getStart() && cakePoint <= FourCornerDotCake.FC_NCR1632_DEN.getStop()) { int denominatorX = cakePoint - FourCornerDotCake.FC_NCR1632_DEN.getStart(); lexer.denominatorBank[denominatorX / 512] = denominatorX % 512; - magicSparkler = true; + missingSparkler = true; continue; } int numeratorX = cakePoint - FourCornerDotCake.FC_NCR1632_NUM.getStart(); lexer.numeratorBank[numeratorX / 512] = numeratorX % 512; if (cakePoint > CAKEPOINT_BANK0_END) { - magicSparkler = true; + missingSparkler = true; continue; // Only fire fraction on lowest value select } - lexer.ncrBankFire(false); - lexer.ncrBankReset(); - magicSparkler = false; + lexer.ncrBankFire(); + missingSparkler = false; } - if (magicSparkler) { - lexer.ncrBankFire(true); - lexer.ncrBankReset(); + if (missingSparkler) { + lexer.smokeSignals.burnNCR1632MissingBankSparkler(lexer.currLine, lexer.currCol); } } } @@ -724,8 +718,7 @@ public class FourCornerZionStenoLexer { lexer.numeratorBank[lexer.cdcDECModeNCR68NumPage] = lexer.cdcDECModeNCR68NumValue; lexer.cdcDECModeNCR68NumPage = 0; lexer.cdcDECModeNCR68NumValue = 0; - lexer.ncrBankFire(false); - lexer.ncrBankReset(); + lexer.ncrBankFire(); } return true; } diff --git a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerFire.java b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerFire.java index dd88ae0..6bcb7e8 100644 --- a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerFire.java +++ b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerFire.java @@ -32,8 +32,6 @@ public interface FourCornerZionStenoLexerFire { void fireStateScannerMatch(int blockStart, int blockStop, int matchPoint, int idxFirst, int idxLast); - void fireStateNCR1632BankSparkler(boolean magic); - interface Adapter extends FourCornerZionStenoLexerFire { @Override @@ -43,9 +41,5 @@ public interface FourCornerZionStenoLexerFire { @Override default void fireStateScannerMatch(int blockStart, int blockStop, int matchPoint, int idxFirst, int idxLast) { } - - @Override - default void fireStateNCR1632BankSparkler(boolean magic) { - } } } diff --git a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerSmoke.java b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerSmoke.java index 2faf180..a976fef 100644 --- a/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerSmoke.java +++ b/nx01-x4o-fc18/src/main/java/org/x4o/fc18/zion7/FourCornerZionStenoLexerSmoke.java @@ -43,6 +43,8 @@ public interface FourCornerZionStenoLexerSmoke { void burnSandWalkerStepUnaligned(int line, int col, int size); + void burnNCR1632MissingBankSparkler(int line, int col); + interface Adapter extends FourCornerZionStenoLexerSmoke { @Override @@ -68,6 +70,10 @@ public interface FourCornerZionStenoLexerSmoke { @Override default void burnSandWalkerStepUnaligned(int line, int col, int size) { } + + @Override + default void burnNCR1632MissingBankSparkler(int line, int col) { + } } interface AdapterMonoPipe extends FourCornerZionStenoLexerSmoke { @@ -103,5 +109,10 @@ public interface FourCornerZionStenoLexerSmoke { default void burnSandWalkerStepUnaligned(int line, int col, int size) { burnMonoPipe(line, col, "burnSandWalkerStepUnaligned:" + size); } + + @Override + default void burnNCR1632MissingBankSparkler(int line, int col) { + burnMonoPipe(line, col, "burnNCR1632MissingBankSparkler"); + } } } diff --git a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/FourCornerRecipeTest.java b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/FourCornerRecipeTest.java index f34250e..a3f1b91 100644 --- a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/FourCornerRecipeTest.java +++ b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/FourCornerRecipeTest.java @@ -63,7 +63,6 @@ public class FourCornerRecipeTest { BigInteger v2 = BigInteger.valueOf(12345); FourCornerRecipe.embedNCR1632FractionX06(cdcX06, v2, BigInteger.ONE); FourCornerRecipe.embedNCR1632FractionX18(cdcX18, v2, BigInteger.ONE); - System.out.println(FourCornerUnicodeDisplay.raw().renderFromInt18(cdcX06)); String resX06 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX06); String resX18 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX18); Assertions.assertEquals(resX18, resX06); @@ -79,7 +78,6 @@ public class FourCornerRecipeTest { FourCornerRecipe.embedNCR1632FractionX06(cdcX06, v, BigInteger.ONE); FourCornerRecipe.embedNCR1632FractionX18(cdcX18, v, BigInteger.ONE); } - System.out.println(FourCornerUnicodeDisplay.raw().renderFromInt18(cdcX06)); String resX06 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX06); String resX18 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX18); Assertions.assertEquals(resX18, resX06); diff --git a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/LexerNCRTest.java b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/LexerNCRTest.java index 17e336d..fdf75f9 100644 --- a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/LexerNCRTest.java +++ b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/LexerNCRTest.java @@ -41,23 +41,24 @@ import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC2701DashPX0; public class LexerNCRTest { @Test - public void testNCRMagicSparkler() throws Exception { - TestFireWalker fireWalker = new TestFireWalker(); + public void testNCRSmokeSignals() throws Exception { + TestSmokeReader smokeReader = new TestSmokeReader(); FourCornerZionStenoLexer lexer = new FourCornerZionStenoLexer(new FourCornerZion7Candlelier.Adapter() {}, true); - lexer.withFireSignals(fireWalker); + lexer.withSmokeSignals(smokeReader); List cdc = new ArrayList<>(); cdc.add(FourCornerDotCake.FC_NCR1632_DEN.getStart() + (512*3) + 1); /// auto NXX_001 - Assertions.assertEquals(0, fireWalker.ncr1632BankSparkler); + Assertions.assertEquals(0, smokeReader.pipeSmokeClouds); lexer.read(cdc); - Assertions.assertEquals(1, fireWalker.ncr1632BankSparkler); + Assertions.assertEquals(1, smokeReader.pipeSmokeClouds); + Assertions.assertEquals("burnNCR1632MissingBankSparkler", smokeReader.pipeError); cdc.addAll(FCDotDEC2701DashPX0.ESC_STOP.baklavaPointSequence()); // the print above auto value + next test cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStart() - 1 + 123); // normal NXX_123 cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStart() + (512*4) + 2); /// auto NXX_123 + this - fireWalker.reset(); + smokeReader.reset(); lexer.read(cdc); - Assertions.assertEquals(2, fireWalker.ncr1632BankSparkler); + Assertions.assertEquals(2, smokeReader.pipeSmokeClouds); cdc.addAll(FCDotDEC2701DashPX0.ESC_STOP.cakePointSequence()); // the print above auto value + next test (normal bank reset) cdc.add(FourCornerDotCake.FC_NCR1632_DEN.getStart() - 1 + 11); @@ -68,9 +69,9 @@ public class LexerNCRTest { cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStop()); cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStop()); // embedded bank reset cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStart() - 1 + 123); // normal NXX_123 - fireWalker.reset(); + smokeReader.reset(); lexer.read(cdc); - String res = "¹/₁₃₄₂₁₇₇₂₉¹²³/₁¹³⁷⁴³⁸⁹⁵³⁴⁷³/₁⁴⁹³⁴⁷⁴⁵⁶²⁴⁴¹²¹⁷/₁₆₁₀₆₁₂₇₄₇²⁴⁶⁸⁴⁷³³⁴²⁸²⁷²⁷³⁷⁶⁷⁶⁷⁴¹⁵⁶⁰²⁰³³²⁸⁰⁶⁹¹⁶¹⁷⁰⁹³⁹⁸³¹⁸⁴⁹⁹⁸⁵³⁵⁵³⁹²³⁰⁹⁰¹⁶⁸⁶⁴⁶⁵⁷⁸⁵²¹³⁷⁴⁵⁶⁷²¹¹⁷²⁴⁹³⁷⁶⁸⁴⁰⁴²⁰³⁰⁴⁶⁶⁷³⁵²³⁶³⁴⁷⁴⁰¹²²⁰¹⁵⁶⁷²⁰⁴¹⁹⁴³⁹⁹⁴⁷⁴¹²⁰⁸³⁶⁵¹⁰⁵⁷⁸²⁹¹⁵¹⁷⁷⁰⁹⁷⁸²⁸²³⁰¹⁹⁶⁴⁹⁵⁴⁶⁸⁴⁶³³¹/₁"; + String res = "[0:1:burnNCR1632MissingBankSparkler]¹²³/₁₃₄₂₁₇₇₂₉[0:8:burnNCR1632MissingBankSparkler]⁴⁹³⁴⁷⁴⁵⁶²⁴⁴¹²¹⁷/₁₆₁₀₆₁₂₇₄₇²⁴⁶⁸⁴⁷³³⁴²⁸²⁷²⁷³⁷⁶⁷⁶⁷⁴¹⁵⁶⁰²⁰³³²⁸⁰⁶⁹¹⁶¹⁷⁰⁹³⁹⁸³¹⁸⁴⁹⁹⁸⁵³⁵⁵³⁹²³⁰⁹⁰¹⁶⁸⁶⁴⁶⁵⁷⁸⁵²¹³⁷⁴⁵⁶⁷²¹¹⁷²⁴⁹³⁷⁶⁸⁴⁰⁴²⁰³⁰⁴⁶⁶⁷³⁵²³⁶³⁴⁷⁴⁰¹²²⁰¹⁵⁶⁷²⁰⁴¹⁹⁴³⁹⁹⁴⁷⁴¹²⁰⁸³⁶⁵¹⁰⁵⁷⁸²⁹¹⁵¹⁷⁷⁰⁹⁷⁸²⁸²³⁰¹⁹⁶⁴⁹⁵⁴⁶⁸⁴⁶³³¹/₁"; Assertions.assertEquals(res, FourCornerUnicodeDisplay.text().renderFromInt18(cdc)); } diff --git a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/TestFireWalker.java b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/TestFireWalker.java index 799aa7f..5d95a9e 100644 --- a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/TestFireWalker.java +++ b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/zion7/TestFireWalker.java @@ -34,7 +34,6 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter { int scanBlockStart; int scanBlockStop; int scanMatchPoint; - int ncr1632BankSparkler; public TestFireWalker() { reset(); @@ -45,7 +44,6 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter { scanBlockStart = 0; scanMatchPoint = 0; scanMatchPoint = 0; - ncr1632BankSparkler = 0; } @Override @@ -59,11 +57,4 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter { scanBlockStop = blockStop; scanMatchPoint = matchPoint; } - - @Override - public void fireStateNCR1632BankSparkler(boolean magic) { - if (magic) { - ncr1632BankSparkler++; - } - } }