FC18: Converted NCR magic sparkler to smoke signal for missing sparkler
This commit is contained in:
parent
e7e26b569b
commit
7ea17d7628
6 changed files with 35 additions and 47 deletions
|
|
@ -196,15 +196,7 @@ public class FourCornerZionStenoLexer {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ncrBankReset() {
|
private void ncrBankFire() {
|
||||||
for (int i = 0; i < denominatorBank.length; i++) {
|
|
||||||
denominatorBank[i] = 0;
|
|
||||||
numeratorBank[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ncrBankFire(boolean magic) {
|
|
||||||
fireSignals.fireStateNCR1632BankSparkler(magic);
|
|
||||||
BigInteger denominator = BigInteger.ONE;
|
BigInteger denominator = BigInteger.ONE;
|
||||||
for (int i = 0; i < denominatorBank.length; i++) {
|
for (int i = 0; i < denominatorBank.length; i++) {
|
||||||
denominator = denominator.add(BigInteger.valueOf(denominatorBank[i]).shiftLeft(i * 9));
|
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));
|
numerator = numerator.add(BigInteger.valueOf(numeratorBank[i]).shiftLeft(i * 9));
|
||||||
}
|
}
|
||||||
handler.strobeNCR1632(denominator, numerator);
|
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() {
|
private void decModeReset() {
|
||||||
|
|
@ -351,30 +348,27 @@ public class FourCornerZionStenoLexer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(FourCornerZionStenoLexer lexer, int idxFirst, int idxLast) {
|
public void process(FourCornerZionStenoLexer lexer, int idxFirst, int idxLast) {
|
||||||
lexer.ncrBankReset();
|
boolean missingSparkler = true;
|
||||||
boolean magicSparkler = true;
|
|
||||||
for (int i = idxFirst; i <= idxLast; i++) {
|
for (int i = idxFirst; i <= idxLast; i++) {
|
||||||
int cakePoint = lexer.input.get(i);
|
int cakePoint = lexer.input.get(i);
|
||||||
if (cakePoint >= FourCornerDotCake.FC_NCR1632_DEN.getStart() && cakePoint <= FourCornerDotCake.FC_NCR1632_DEN.getStop()) {
|
if (cakePoint >= FourCornerDotCake.FC_NCR1632_DEN.getStart() && cakePoint <= FourCornerDotCake.FC_NCR1632_DEN.getStop()) {
|
||||||
int denominatorX = cakePoint - FourCornerDotCake.FC_NCR1632_DEN.getStart();
|
int denominatorX = cakePoint - FourCornerDotCake.FC_NCR1632_DEN.getStart();
|
||||||
lexer.denominatorBank[denominatorX / 512] = denominatorX % 512;
|
lexer.denominatorBank[denominatorX / 512] = denominatorX % 512;
|
||||||
magicSparkler = true;
|
missingSparkler = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int numeratorX = cakePoint - FourCornerDotCake.FC_NCR1632_NUM.getStart();
|
int numeratorX = cakePoint - FourCornerDotCake.FC_NCR1632_NUM.getStart();
|
||||||
lexer.numeratorBank[numeratorX / 512] = numeratorX % 512;
|
lexer.numeratorBank[numeratorX / 512] = numeratorX % 512;
|
||||||
|
|
||||||
if (cakePoint > CAKEPOINT_BANK0_END) {
|
if (cakePoint > CAKEPOINT_BANK0_END) {
|
||||||
magicSparkler = true;
|
missingSparkler = true;
|
||||||
continue; // Only fire fraction on lowest value select
|
continue; // Only fire fraction on lowest value select
|
||||||
}
|
}
|
||||||
lexer.ncrBankFire(false);
|
lexer.ncrBankFire();
|
||||||
lexer.ncrBankReset();
|
missingSparkler = false;
|
||||||
magicSparkler = false;
|
|
||||||
}
|
}
|
||||||
if (magicSparkler) {
|
if (missingSparkler) {
|
||||||
lexer.ncrBankFire(true);
|
lexer.smokeSignals.burnNCR1632MissingBankSparkler(lexer.currLine, lexer.currCol);
|
||||||
lexer.ncrBankReset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -724,8 +718,7 @@ public class FourCornerZionStenoLexer {
|
||||||
lexer.numeratorBank[lexer.cdcDECModeNCR68NumPage] = lexer.cdcDECModeNCR68NumValue;
|
lexer.numeratorBank[lexer.cdcDECModeNCR68NumPage] = lexer.cdcDECModeNCR68NumValue;
|
||||||
lexer.cdcDECModeNCR68NumPage = 0;
|
lexer.cdcDECModeNCR68NumPage = 0;
|
||||||
lexer.cdcDECModeNCR68NumValue = 0;
|
lexer.cdcDECModeNCR68NumValue = 0;
|
||||||
lexer.ncrBankFire(false);
|
lexer.ncrBankFire();
|
||||||
lexer.ncrBankReset();
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,6 @@ public interface FourCornerZionStenoLexerFire {
|
||||||
|
|
||||||
void fireStateScannerMatch(int blockStart, int blockStop, int matchPoint, int idxFirst, int idxLast);
|
void fireStateScannerMatch(int blockStart, int blockStop, int matchPoint, int idxFirst, int idxLast);
|
||||||
|
|
||||||
void fireStateNCR1632BankSparkler(boolean magic);
|
|
||||||
|
|
||||||
interface Adapter extends FourCornerZionStenoLexerFire {
|
interface Adapter extends FourCornerZionStenoLexerFire {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -43,9 +41,5 @@ public interface FourCornerZionStenoLexerFire {
|
||||||
@Override
|
@Override
|
||||||
default void fireStateScannerMatch(int blockStart, int blockStop, int matchPoint, int idxFirst, int idxLast) {
|
default void fireStateScannerMatch(int blockStart, int blockStop, int matchPoint, int idxFirst, int idxLast) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
default void fireStateNCR1632BankSparkler(boolean magic) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ public interface FourCornerZionStenoLexerSmoke {
|
||||||
void burnSandWalkerStepUnaligned(int line, int col, int size);
|
void burnSandWalkerStepUnaligned(int line, int col, int size);
|
||||||
|
|
||||||
|
|
||||||
|
void burnNCR1632MissingBankSparkler(int line, int col);
|
||||||
|
|
||||||
interface Adapter extends FourCornerZionStenoLexerSmoke {
|
interface Adapter extends FourCornerZionStenoLexerSmoke {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -68,6 +70,10 @@ public interface FourCornerZionStenoLexerSmoke {
|
||||||
@Override
|
@Override
|
||||||
default void burnSandWalkerStepUnaligned(int line, int col, int size) {
|
default void burnSandWalkerStepUnaligned(int line, int col, int size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default void burnNCR1632MissingBankSparkler(int line, int col) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface AdapterMonoPipe extends FourCornerZionStenoLexerSmoke {
|
interface AdapterMonoPipe extends FourCornerZionStenoLexerSmoke {
|
||||||
|
|
@ -103,5 +109,10 @@ public interface FourCornerZionStenoLexerSmoke {
|
||||||
default void burnSandWalkerStepUnaligned(int line, int col, int size) {
|
default void burnSandWalkerStepUnaligned(int line, int col, int size) {
|
||||||
burnMonoPipe(line, col, "burnSandWalkerStepUnaligned:" + size);
|
burnMonoPipe(line, col, "burnSandWalkerStepUnaligned:" + size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default void burnNCR1632MissingBankSparkler(int line, int col) {
|
||||||
|
burnMonoPipe(line, col, "burnNCR1632MissingBankSparkler");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,6 @@ public class FourCornerRecipeTest {
|
||||||
BigInteger v2 = BigInteger.valueOf(12345);
|
BigInteger v2 = BigInteger.valueOf(12345);
|
||||||
FourCornerRecipe.embedNCR1632FractionX06(cdcX06, v2, BigInteger.ONE);
|
FourCornerRecipe.embedNCR1632FractionX06(cdcX06, v2, BigInteger.ONE);
|
||||||
FourCornerRecipe.embedNCR1632FractionX18(cdcX18, v2, BigInteger.ONE);
|
FourCornerRecipe.embedNCR1632FractionX18(cdcX18, v2, BigInteger.ONE);
|
||||||
System.out.println(FourCornerUnicodeDisplay.raw().renderFromInt18(cdcX06));
|
|
||||||
String resX06 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX06);
|
String resX06 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX06);
|
||||||
String resX18 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX18);
|
String resX18 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX18);
|
||||||
Assertions.assertEquals(resX18, resX06);
|
Assertions.assertEquals(resX18, resX06);
|
||||||
|
|
@ -79,7 +78,6 @@ public class FourCornerRecipeTest {
|
||||||
FourCornerRecipe.embedNCR1632FractionX06(cdcX06, v, BigInteger.ONE);
|
FourCornerRecipe.embedNCR1632FractionX06(cdcX06, v, BigInteger.ONE);
|
||||||
FourCornerRecipe.embedNCR1632FractionX18(cdcX18, v, BigInteger.ONE);
|
FourCornerRecipe.embedNCR1632FractionX18(cdcX18, v, BigInteger.ONE);
|
||||||
}
|
}
|
||||||
System.out.println(FourCornerUnicodeDisplay.raw().renderFromInt18(cdcX06));
|
|
||||||
String resX06 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX06);
|
String resX06 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX06);
|
||||||
String resX18 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX18);
|
String resX18 = FourCornerUnicodeDisplay.text().renderFromInt18(cdcX18);
|
||||||
Assertions.assertEquals(resX18, resX06);
|
Assertions.assertEquals(resX18, resX06);
|
||||||
|
|
|
||||||
|
|
@ -41,23 +41,24 @@ import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC2701DashPX0;
|
||||||
public class LexerNCRTest {
|
public class LexerNCRTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNCRMagicSparkler() throws Exception {
|
public void testNCRSmokeSignals() throws Exception {
|
||||||
TestFireWalker fireWalker = new TestFireWalker();
|
TestSmokeReader smokeReader = new TestSmokeReader();
|
||||||
FourCornerZionStenoLexer lexer = new FourCornerZionStenoLexer(new FourCornerZion7Candlelier.Adapter() {}, true);
|
FourCornerZionStenoLexer lexer = new FourCornerZionStenoLexer(new FourCornerZion7Candlelier.Adapter() {}, true);
|
||||||
lexer.withFireSignals(fireWalker);
|
lexer.withSmokeSignals(smokeReader);
|
||||||
|
|
||||||
List<Integer> cdc = new ArrayList<>();
|
List<Integer> cdc = new ArrayList<>();
|
||||||
cdc.add(FourCornerDotCake.FC_NCR1632_DEN.getStart() + (512*3) + 1); /// auto NXX_001
|
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);
|
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.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() - 1 + 123); // normal NXX_123
|
||||||
cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStart() + (512*4) + 2); /// auto NXX_123 + this
|
cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStart() + (512*4) + 2); /// auto NXX_123 + this
|
||||||
fireWalker.reset();
|
smokeReader.reset();
|
||||||
lexer.read(cdc);
|
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.addAll(FCDotDEC2701DashPX0.ESC_STOP.cakePointSequence()); // the print above auto value + next test (normal bank reset)
|
||||||
cdc.add(FourCornerDotCake.FC_NCR1632_DEN.getStart() - 1 + 11);
|
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());
|
||||||
cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStop()); // embedded bank reset
|
cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStop()); // embedded bank reset
|
||||||
cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStart() - 1 + 123); // normal NXX_123
|
cdc.add(FourCornerDotCake.FC_NCR1632_NUM.getStart() - 1 + 123); // normal NXX_123
|
||||||
fireWalker.reset();
|
smokeReader.reset();
|
||||||
lexer.read(cdc);
|
lexer.read(cdc);
|
||||||
String res = "¹/₁₃₄₂₁₇₇₂₉¹²³/₁¹³⁷⁴³⁸⁹⁵³⁴⁷³/₁⁴⁹³⁴⁷⁴⁵⁶²⁴⁴¹²¹⁷/₁₆₁₀₆₁₂₇₄₇²⁴⁶⁸⁴⁷³³⁴²⁸²⁷²⁷³⁷⁶⁷⁶⁷⁴¹⁵⁶⁰²⁰³³²⁸⁰⁶⁹¹⁶¹⁷⁰⁹³⁹⁸³¹⁸⁴⁹⁹⁸⁵³⁵⁵³⁹²³⁰⁹⁰¹⁶⁸⁶⁴⁶⁵⁷⁸⁵²¹³⁷⁴⁵⁶⁷²¹¹⁷²⁴⁹³⁷⁶⁸⁴⁰⁴²⁰³⁰⁴⁶⁶⁷³⁵²³⁶³⁴⁷⁴⁰¹²²⁰¹⁵⁶⁷²⁰⁴¹⁹⁴³⁹⁹⁴⁷⁴¹²⁰⁸³⁶⁵¹⁰⁵⁷⁸²⁹¹⁵¹⁷⁷⁰⁹⁷⁸²⁸²³⁰¹⁹⁶⁴⁹⁵⁴⁶⁸⁴⁶³³¹/₁";
|
String res = "[0:1:burnNCR1632MissingBankSparkler]¹²³/₁₃₄₂₁₇₇₂₉[0:8:burnNCR1632MissingBankSparkler]⁴⁹³⁴⁷⁴⁵⁶²⁴⁴¹²¹⁷/₁₆₁₀₆₁₂₇₄₇²⁴⁶⁸⁴⁷³³⁴²⁸²⁷²⁷³⁷⁶⁷⁶⁷⁴¹⁵⁶⁰²⁰³³²⁸⁰⁶⁹¹⁶¹⁷⁰⁹³⁹⁸³¹⁸⁴⁹⁹⁸⁵³⁵⁵³⁹²³⁰⁹⁰¹⁶⁸⁶⁴⁶⁵⁷⁸⁵²¹³⁷⁴⁵⁶⁷²¹¹⁷²⁴⁹³⁷⁶⁸⁴⁰⁴²⁰³⁰⁴⁶⁶⁷³⁵²³⁶³⁴⁷⁴⁰¹²²⁰¹⁵⁶⁷²⁰⁴¹⁹⁴³⁹⁹⁴⁷⁴¹²⁰⁸³⁶⁵¹⁰⁵⁷⁸²⁹¹⁵¹⁷⁷⁰⁹⁷⁸²⁸²³⁰¹⁹⁶⁴⁹⁵⁴⁶⁸⁴⁶³³¹/₁";
|
||||||
Assertions.assertEquals(res, FourCornerUnicodeDisplay.text().renderFromInt18(cdc));
|
Assertions.assertEquals(res, FourCornerUnicodeDisplay.text().renderFromInt18(cdc));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter {
|
||||||
int scanBlockStart;
|
int scanBlockStart;
|
||||||
int scanBlockStop;
|
int scanBlockStop;
|
||||||
int scanMatchPoint;
|
int scanMatchPoint;
|
||||||
int ncr1632BankSparkler;
|
|
||||||
|
|
||||||
public TestFireWalker() {
|
public TestFireWalker() {
|
||||||
reset();
|
reset();
|
||||||
|
|
@ -45,7 +44,6 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter {
|
||||||
scanBlockStart = 0;
|
scanBlockStart = 0;
|
||||||
scanMatchPoint = 0;
|
scanMatchPoint = 0;
|
||||||
scanMatchPoint = 0;
|
scanMatchPoint = 0;
|
||||||
ncr1632BankSparkler = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -59,11 +57,4 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter {
|
||||||
scanBlockStop = blockStop;
|
scanBlockStop = blockStop;
|
||||||
scanMatchPoint = matchPoint;
|
scanMatchPoint = matchPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void fireStateNCR1632BankSparkler(boolean magic) {
|
|
||||||
if (magic) {
|
|
||||||
ncr1632BankSparkler++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue