Added NCR1632 embedded bank reset feature
This commit is contained in:
parent
62bdf94435
commit
aa6f12f336
|
@ -304,6 +304,7 @@ public class FourCornerZionStenoLexer {
|
|||
private void handlePoints(List<Integer> slicedPoints) {
|
||||
bankReset();
|
||||
boolean magicSparkler = true;
|
||||
boolean requestBankReset = false;
|
||||
for (Integer cakePoint : slicedPoints) {
|
||||
if (cakePoint >= FourCornerDotCake.FC_NCR1632_XD.getStart() && cakePoint <= FourCornerDotCake.FC_NCR1632_XD.getStop()) {
|
||||
int denominatorX = cakePoint - FourCornerDotCake.FC_NCR1632_XD.getStart();
|
||||
|
@ -314,15 +315,29 @@ public class FourCornerZionStenoLexer {
|
|||
int numeratorX = cakePoint - FourCornerDotCake.FC_NCR1632_XN.getStart();
|
||||
numeratorBank[numeratorX / 512] = numeratorX % 512;
|
||||
|
||||
// highest number, 1st select + enable request, if second than reset bank
|
||||
if (cakePoint == FourCornerDotCake.FC_NCR1632_XN.getStop()) {
|
||||
if (requestBankReset) {
|
||||
requestBankReset = false;
|
||||
magicSparkler = false; // if EOF ends with bank reset, ignore
|
||||
fireSignals.fireStateNCR1632BankReset();
|
||||
bankReset();
|
||||
continue;
|
||||
}
|
||||
requestBankReset = true;
|
||||
} else {
|
||||
requestBankReset = false;
|
||||
}
|
||||
|
||||
if (cakePoint > FourCornerDotCake.FC_NCR1632_XN.getStart() + 512) {
|
||||
magicSparkler = true;
|
||||
continue; // Only fire fraction on lowest value select
|
||||
}
|
||||
} else
|
||||
bankFire();
|
||||
magicSparkler = false;
|
||||
}
|
||||
if (magicSparkler) {
|
||||
fireSignals.fireStateNCR1632Sparkler();
|
||||
fireSignals.fireStateNCR1632BankSparkler();
|
||||
bankFire();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,9 @@ public interface FourCornerZionStenoLexerFire {
|
|||
|
||||
void fireStateScanner(int blockStart, int blockStop, int cakePoint);
|
||||
|
||||
void fireStateNCR1632Sparkler();
|
||||
void fireStateNCR1632BankSparkler();
|
||||
|
||||
void fireStateNCR1632BankReset();
|
||||
|
||||
interface Adapter extends FourCornerZionStenoLexerFire {
|
||||
|
||||
|
@ -51,7 +53,11 @@ public interface FourCornerZionStenoLexerFire {
|
|||
}
|
||||
|
||||
@Override
|
||||
default void fireStateNCR1632Sparkler() {
|
||||
default void fireStateNCR1632BankSparkler() {
|
||||
}
|
||||
|
||||
@Override
|
||||
default void fireStateNCR1632BankReset() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,22 +46,35 @@ public class LexerNCRTest {
|
|||
TestFireWalker fireWalker = new TestFireWalker();
|
||||
FourCornerZionStenoLexer lexer = new FourCornerZionStenoLexer(new FourCornerZion7Candlelier.Adapter() {}, true);
|
||||
lexer.withFireSignals(fireWalker);
|
||||
|
||||
List<Integer> cdc = new ArrayList<>();
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XD.getStart() + (512*3) + 1); /// auto NXX_001
|
||||
cdc.addAll(FCDotDEC0127DashPX0.ESC_STOP.toInt18BaklavaPoints());
|
||||
|
||||
Assertions.assertEquals(0, fireWalker.ncrMagicSparks);
|
||||
Assertions.assertEquals(0, fireWalker.ncr1632BankSparkler);
|
||||
lexer.read(cdc);
|
||||
Assertions.assertEquals(1, fireWalker.ncrMagicSparks);
|
||||
Assertions.assertEquals(1, fireWalker.ncr1632BankSparkler);
|
||||
|
||||
cdc.addAll(FCDotDEC0127DashPX0.ESC_STOP.toInt18BaklavaPoints()); // the print above auto value + next test
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStart() - 1 + 123); // normal NXX_123
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStart() + (512*4) + 2); /// auto NXX_123 + this
|
||||
|
||||
fireWalker.reset();
|
||||
lexer.read(cdc);
|
||||
Assertions.assertEquals(2, fireWalker.ncrMagicSparks);
|
||||
Assertions.assertEquals(2, fireWalker.ncr1632BankSparkler);
|
||||
|
||||
Assertions.assertEquals("¹/₁₃₄₂₁₇₇₂₉¹²³/₁¹³⁷⁴³⁸⁹⁵³⁵⁹⁵/₁", FourCornerUnicodeDisplay.text().renderFromInt18(cdc));
|
||||
Assertions.assertEquals(0, fireWalker.ncr1632BankReset);
|
||||
cdc.addAll(FCDotDEC0127DashPX0.ESC_STOP.toInt18BaklavaPoints()); // the print above auto value + next test (normal bank reset)
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XD.getStart() - 1 + 11);
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XD.getStart() + (512*3) + 12);
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStart() + (512*4) + 13);
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStart() + (512*5) + 14);
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStart()); // and one which prints
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStop());
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStop()); // embedded bank reset
|
||||
cdc.add(FourCornerDotCake.FC_NCR1632_XN.getStart() - 1 + 123); // normal NXX_123
|
||||
fireWalker.reset();
|
||||
lexer.read(cdc);
|
||||
Assertions.assertEquals(1, fireWalker.ncr1632BankReset);
|
||||
|
||||
Assertions.assertEquals("¹/₁₃₄₂₁₇₇₂₉¹²³/₁¹³⁷⁴³⁸⁹⁵³⁵⁹⁵/₁⁴⁹³⁴⁷⁴⁵⁶²⁴⁴¹²¹⁷/₁₆₁₀₆₁₂₇₄₇¹²³/₁", FourCornerUnicodeDisplay.text().renderFromInt18(cdc));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -35,7 +35,8 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter {
|
|||
int scanBlockStart;
|
||||
int scanBlockStop;
|
||||
int scanCakePoint;
|
||||
int ncrMagicSparks;
|
||||
int ncr1632BankSparkler;
|
||||
int ncr1632BankReset;
|
||||
|
||||
public TestFireWalker() {
|
||||
reset();
|
||||
|
@ -45,7 +46,8 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter {
|
|||
currentLine = 0;
|
||||
currentColumn = 0;
|
||||
scanBlockStart = 0;
|
||||
ncrMagicSparks = 0;
|
||||
ncr1632BankSparkler = 0;
|
||||
ncr1632BankReset = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -66,7 +68,12 @@ public class TestFireWalker implements FourCornerZionStenoLexerFire.Adapter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireStateNCR1632Sparkler() {
|
||||
ncrMagicSparks++;
|
||||
public void fireStateNCR1632BankSparkler() {
|
||||
ncr1632BankSparkler++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireStateNCR1632BankReset() {
|
||||
ncr1632BankReset++;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue