From 1e022d71b078dca9c05dc4963ed752d1dcbd5b62 Mon Sep 17 00:00:00 2001 From: JacksonAbney Date: Wed, 16 Apr 2025 14:18:13 -0800 Subject: [PATCH] Terminal hotfix. --- .../cil/oc2/common/vm/terminal/escapes/csi/CH5.java | 4 ++-- .../cil/oc2/common/vm/terminal/modes/ModeState.java | 11 +++++++++-- .../common/vm/terminal/modes/PrivateModeState.java | 13 +++++++++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/li/cil/oc2/common/vm/terminal/escapes/csi/CH5.java b/src/main/java/li/cil/oc2/common/vm/terminal/escapes/csi/CH5.java index 4a6d39dc..1856204f 100644 --- a/src/main/java/li/cil/oc2/common/vm/terminal/escapes/csi/CH5.java +++ b/src/main/java/li/cil/oc2/common/vm/terminal/escapes/csi/CH5.java @@ -18,10 +18,10 @@ public class CH5 extends CSISequenceHandler { // Combined Handler 5 (XTSMPOINTER } else if (state.dollarSign) { // DECRQM int mode = args[0]; if (state.questionMark) { // DECSET/DECRST - terminal.putResponse("\033[?" + mode + ";" + (terminal.currentPrivateModeState.getMode(mode) ? 1 : 0) + "$y"); + terminal.putResponse("\033[?" + mode + ";" + terminal.currentPrivateModeState.getModeForRequest(mode) + "$y"); } else { // SM/RM - terminal.putResponse("\033[" + mode + ";" + (terminal.currentModeState.getMode(mode) ? 1 : 0) + "$y"); + terminal.putResponse("\033[" + mode + ";" + terminal.currentModeState.getModeForRequest(mode) + "$y"); } } else { // XTPUSHSGR System.out.println("XTPUSHSGR not implemented"); diff --git a/src/main/java/li/cil/oc2/common/vm/terminal/modes/ModeState.java b/src/main/java/li/cil/oc2/common/vm/terminal/modes/ModeState.java index bd935fa2..04391efe 100644 --- a/src/main/java/li/cil/oc2/common/vm/terminal/modes/ModeState.java +++ b/src/main/java/li/cil/oc2/common/vm/terminal/modes/ModeState.java @@ -9,13 +9,20 @@ public class ModeState { public boolean SRM = false; public boolean LNM = false; - public boolean getMode(int mode) { + public int getModeForRequest(int mode) { + Boolean modeState = getMode(mode); + if (modeState == null) return 0; + if (modeState) return 1; + return 2; + } + + public Boolean getMode(int mode) { return switch (mode) { case 2 -> KAM; case 4 -> IRM; case 12 -> SRM; case 20 -> LNM; - default -> throw new IndexOutOfBoundsException(); + default -> null; }; } } diff --git a/src/main/java/li/cil/oc2/common/vm/terminal/modes/PrivateModeState.java b/src/main/java/li/cil/oc2/common/vm/terminal/modes/PrivateModeState.java index e14c1ebf..3a2b5afd 100644 --- a/src/main/java/li/cil/oc2/common/vm/terminal/modes/PrivateModeState.java +++ b/src/main/java/li/cil/oc2/common/vm/terminal/modes/PrivateModeState.java @@ -2,6 +2,7 @@ package li.cil.oc2.common.vm.terminal.modes; import li.cil.ceres.api.Serialized; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; @@ -82,7 +83,15 @@ public class PrivateModeState { public boolean APPLICATION_SYNC = false; public boolean APPLICATION_ESC_MODE = false; - public boolean getMode(int mode) { + public int getModeForRequest(int mode) { + Boolean modeState = getMode(mode); + if (modeState == null) return 0; + if (modeState) return 1; + return 2; + } + + @Nullable + public Boolean getMode(int mode) { return switch (mode) { case 1 -> DECCKM; case 2 -> DECANM; @@ -158,7 +167,7 @@ public class PrivateModeState { case 2006 -> ENABLE_READLINE_NEWLINE_PASTE; case 2026 -> APPLICATION_SYNC; case 7727 -> APPLICATION_ESC_MODE; - default -> throw new IndexOutOfBoundsException(); + default -> null; }; }