diff --git a/math-rules-cache.zip618 b/math-rules-cache.zip618
new file mode 100644
index 00000000..4df5c5b1
Binary files /dev/null and b/math-rules-cache.zip618 differ
diff --git a/math-rules-cache.zip648 b/math-rules-cache.zip648
new file mode 100644
index 00000000..4df5c5b1
Binary files /dev/null and b/math-rules-cache.zip648 differ
diff --git a/math-rules-cache.zip72 b/math-rules-cache.zip72
new file mode 100644
index 00000000..4df5c5b1
Binary files /dev/null and b/math-rules-cache.zip72 differ
diff --git a/math-rules-cache.zip868 b/math-rules-cache.zip868
new file mode 100644
index 00000000..4df5c5b1
Binary files /dev/null and b/math-rules-cache.zip868 differ
diff --git a/pom.xml b/pom.xml
index 8a74449f..5f858b9f 100755
--- a/pom.xml
+++ b/pom.xml
@@ -14,14 +14,16 @@
src/main/java
src/main/java
src/main/resources
- veryverylongandparticularpath/abcd
+ veryverylongandparticularpath/abcd
teavm-dev
- https://dl.bintray.com/konsoletyper/teavm
- true
- default
+ https://dl.bintray.com/konsoletyper/teavm
+
+ true
+
+ default
oss-snapshots-repo
@@ -32,43 +34,42 @@
always
-
- jitpack.io
- https://jitpack.io
-
+
+ jitpack.io
+ https://jitpack.io
+
-
- 1_teavm-dev
- https://dl.bintray.com/konsoletyper/teavm
- true
- default
-
+
+ 1_teavm-dev
+ https://dl.bintray.com/konsoletyper/teavm
+
+ true
+
+ default
+
-
- aarch64
-
-
- false
-
-
- org/warp/picalculator/gui/graphicengine/gpu/*
-
-
-
- jarprofile
-
- jar-specific
- src/main/rules
-
-
- true
-
-
+
+ aarch64
+
+
+ false
+
+
+ org/warp/picalculator/gui/graphicengine/gpu/*
+
+
+
+ jarprofile
+
+ jar-specific
+ src/main/rules
+
+
+ true
+
+
org.jogamp.jogl
jogl-all-main
@@ -79,27 +80,27 @@
gluegen-rt-main
2.3.2
-
- com.pi4j
- pi4j-core
- 1.2-SNAPSHOT
-
-
- org.fusesource.jansi
- jansi
- 1.15
-
-
- net.lingala.zip4j
- zip4j
- 1.3.2
-
-
- org.eclipse.jdt.core.compiler
- ecj
- 4.6.1
-
-
+
+ com.pi4j
+ pi4j-core
+ 1.2-SNAPSHOT
+
+
+ org.fusesource.jansi
+ jansi
+ 1.15
+
+
+ net.lingala.zip4j
+ zip4j
+ 1.3.2
+
+
+ org.eclipse.jdt.core.compiler
+ ecj
+ 4.6.1
+
+
@@ -111,19 +112,19 @@
1.8
UTF-8
-
- ${buildprops.exclude1}
-
+
+ ${buildprops.exclude1}
+
-
+
jsprofile
js-specific
- src/main/rules
+ src/main/rules
false
@@ -132,7 +133,7 @@
org.teavm
teavm-classlib
- 0.6.0-dev-529
+ 0.6.0-dev-559
@@ -177,7 +178,7 @@
org.teavm
teavm-maven-plugin
- 0.6.0-dev-529
+ 0.6.0-dev-559
@@ -200,8 +201,14 @@
-
+
+
+ org.infinispan
+ infinispan-jcache
+ 8.2.4.Final
+
it.unimi.dsi
fastutil
@@ -214,15 +221,12 @@
- commons-io
- commons-io
- 2.6
+ commons-io
+ commons-io
+ 2.6
-
+
@@ -314,10 +318,10 @@
-
diff --git a/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java b/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java
index 95c1f37f..420efe54 100644
--- a/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java
+++ b/src/jar-specific/java/org/warp/picalculator/deps/StorageUtils.java
@@ -27,7 +27,7 @@ import java.util.stream.Stream;
import org.apache.commons.io.IOUtils;
import org.warp.picalculator.ClassUtils;
-import org.warp.picalculator.Main;
+import org.warp.picalculator.boot.Main;
public class StorageUtils {
public static final boolean exists(Path f) {
diff --git a/src/jar-specific/java/org/warp/picalculator/deps/nio/DFiles.java b/src/jar-specific/java/org/warp/picalculator/deps/nio/DFiles.java
new file mode 100644
index 00000000..2f4df893
--- /dev/null
+++ b/src/jar-specific/java/org/warp/picalculator/deps/nio/DFiles.java
@@ -0,0 +1,29 @@
+package org.warp.picalculator.deps.nio;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Collection;
+import java.util.List;
+
+import org.warp.picalculator.math.Function;
+
+public class DFiles {
+
+ public static boolean deleteIfExists(DPath path) throws IOException {
+ return Files.deleteIfExists(path.toPath());
+
+ }
+
+ public static boolean exists(DPath f) {
+ return Files.exists(f.toPath());
+ }
+
+ public static DPath createTempFile(String prefix, String suffix) throws IOException {
+ return new DPath(Files.createTempFile(prefix, suffix));
+ }
+
+ public static List readAllLines(DPath p) throws IOException {
+ return Files.readAllLines(p.toPath());
+ }
+
+}
diff --git a/src/jar-specific/java/org/warp/picalculator/deps/nio/DPath.java b/src/jar-specific/java/org/warp/picalculator/deps/nio/DPath.java
new file mode 100644
index 00000000..c5d66251
--- /dev/null
+++ b/src/jar-specific/java/org/warp/picalculator/deps/nio/DPath.java
@@ -0,0 +1,20 @@
+package org.warp.picalculator.deps.nio;
+
+import java.nio.file.Path;
+
+public class DPath {
+
+ private final Path p;
+
+ public DPath(Path p) {
+ this.p = p;
+ }
+
+ Path toPath() {
+ return p;
+ }
+
+ public DPath toAbsolutePath() {
+ return new DPath(p.toAbsolutePath());
+ }
+}
diff --git a/src/jar-specific/java/org/warp/picalculator/deps/nio/DPaths.java b/src/jar-specific/java/org/warp/picalculator/deps/nio/DPaths.java
new file mode 100644
index 00000000..9afcb3bf
--- /dev/null
+++ b/src/jar-specific/java/org/warp/picalculator/deps/nio/DPaths.java
@@ -0,0 +1,11 @@
+package org.warp.picalculator.deps.nio;
+
+import java.nio.file.Paths;
+
+public class DPaths {
+
+ public static DPath get(String first, String... more) {
+ return new DPath(Paths.get(first, more));
+ }
+
+}
diff --git a/src/js-specific/java/org/warp/picalculator/deps/StorageUtils.java b/src/js-specific/java/org/warp/picalculator/deps/StorageUtils.java
index 55e021f6..6d765dc4 100644
--- a/src/js-specific/java/org/warp/picalculator/deps/StorageUtils.java
+++ b/src/js-specific/java/org/warp/picalculator/deps/StorageUtils.java
@@ -17,7 +17,6 @@ import java.nio.file.FileSystemAlreadyExistsException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/src/js-specific/java/org/warp/picalculator/deps/nio/DFiles.java b/src/js-specific/java/org/warp/picalculator/deps/nio/DFiles.java
new file mode 100644
index 00000000..2085e499
--- /dev/null
+++ b/src/js-specific/java/org/warp/picalculator/deps/nio/DFiles.java
@@ -0,0 +1,31 @@
+package org.warp.picalculator.deps.nio;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.warp.picalculator.deps.nio.DPaths.DPathImpl;
+
+public class DFiles {
+
+ public static List readAllLines(DPath osRelease) throws IOException {
+ return FileUtils.readLines(osRelease.toFile(), Charset.defaultCharset());
+ }
+
+ public static boolean exists(DPath f) {
+ return f.toFile().exists();
+ }
+
+ public static DPath createTempFile(String prefix, String suffix) throws IOException {
+ return new DPathImpl(File.createTempFile(prefix, suffix));
+ }
+
+ public static void deleteIfExists(DPath f) throws IOException {
+ if (f.toFile().exists()) {
+ f.toFile().delete();
+ }
+ }
+
+}
diff --git a/src/js-specific/java/org/warp/picalculator/deps/nio/DPath.java b/src/js-specific/java/org/warp/picalculator/deps/nio/DPath.java
new file mode 100644
index 00000000..31d0dc0f
--- /dev/null
+++ b/src/js-specific/java/org/warp/picalculator/deps/nio/DPath.java
@@ -0,0 +1,12 @@
+package org.warp.picalculator.deps.nio;
+
+import java.io.File;
+import java.nio.file.Path;
+
+public interface DPath {
+
+ DPath toAbsolutePath();
+
+ File toFile();
+
+}
diff --git a/src/js-specific/java/org/warp/picalculator/deps/nio/DPaths.java b/src/js-specific/java/org/warp/picalculator/deps/nio/DPaths.java
new file mode 100644
index 00000000..c8f5c5e1
--- /dev/null
+++ b/src/js-specific/java/org/warp/picalculator/deps/nio/DPaths.java
@@ -0,0 +1,32 @@
+package org.warp.picalculator.deps.nio;
+
+import java.io.File;
+
+public class DPaths {
+ public static DPath get(String first, String... more) {
+ return new DPathImpl("/etc", "os-release");
+ }
+
+ protected static class DPathImpl implements DPath {
+ protected final File realFile;
+
+ private DPathImpl(String main, String... more) {
+ realFile = new File(String.join(File.separator, main));
+ }
+
+ DPathImpl(File f) {
+ realFile = f;
+ }
+
+ @Override
+ public File toFile() {
+ return realFile;
+ }
+
+ @Override
+ public DPath toAbsolutePath() {
+ return new DPathImpl(realFile.getAbsoluteFile());
+ }
+
+ }
+}
diff --git a/src/main/java/org/warp/picalculator/CacheUtils.java b/src/main/java/org/warp/picalculator/CacheUtils.java
new file mode 100644
index 00000000..95ecea09
--- /dev/null
+++ b/src/main/java/org/warp/picalculator/CacheUtils.java
@@ -0,0 +1,41 @@
+package org.warp.picalculator;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+public class CacheUtils {
+
+ private static final Map cache = Collections.synchronizedMap(new HashMap<>());
+ private static final Map time = Collections.synchronizedMap(new HashMap<>());
+
+ @SuppressWarnings("unchecked")
+ public static T get(String entryName, long expireDelta, Supplier function) {
+ refreshEntry(entryName);
+ synchronized(cache) {
+ if (cache.containsKey(entryName)) {
+ return (T) cache.get(entryName);
+ } else {
+ time.put(entryName, System.currentTimeMillis() + expireDelta);
+ T result = function.get();
+ cache.put(entryName, result);
+ return result;
+ }
+ }
+ }
+
+ private static void refreshEntry(String entryName) {
+ synchronized(time) {
+ synchronized(cache) {
+ if (time.getOrDefault(entryName, 0L) <= System.currentTimeMillis()) {
+ time.remove(entryName);
+ cache.remove(entryName);
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/org/warp/picalculator/KeyboardTest.java b/src/main/java/org/warp/picalculator/KeyboardTest.java
index 45743273..442f0376 100755
--- a/src/main/java/org/warp/picalculator/KeyboardTest.java
+++ b/src/main/java/org/warp/picalculator/KeyboardTest.java
@@ -2,6 +2,7 @@ package org.warp.picalculator;
import java.io.IOException;
+import org.warp.picalculator.boot.Main;
import org.warp.picalculator.device.PIHardwareDisplay;
import org.warp.picalculator.gui.CalculatorHUD;
import org.warp.picalculator.gui.screens.KeyboardDebugScreen;
@@ -9,6 +10,6 @@ import org.warp.picalculator.gui.screens.KeyboardDebugScreen;
public class KeyboardTest {
public static void main(String[] args) throws InterruptedException, Error, IOException {
- new Main(new KeyboardDebugScreen(), new PIHardwareDisplay(), new CalculatorHUD(), args);
+ new PICalculator(new KeyboardDebugScreen(), new PIHardwareDisplay(), new CalculatorHUD(), Main.parseStartupArguments(args));
}
}
diff --git a/src/main/java/org/warp/picalculator/Main.java b/src/main/java/org/warp/picalculator/Main.java
deleted file mode 100755
index 6030981a..00000000
--- a/src/main/java/org/warp/picalculator/Main.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package org.warp.picalculator;
-
-import java.io.IOException;
-
-import org.warp.picalculator.deps.DGpio;
-import org.warp.picalculator.deps.DSystem;
-import org.warp.picalculator.device.HardwareDevice;
-import org.warp.picalculator.device.HardwareTouchDevice;
-import org.warp.picalculator.device.InputManager;
-import org.warp.picalculator.device.Keyboard;
-import org.warp.picalculator.device.PIHardwareDisplay;
-import org.warp.picalculator.device.PIHardwareTouchDevice;
-import org.warp.picalculator.gui.CalculatorHUD;
-import org.warp.picalculator.gui.DisplayManager;
-import org.warp.picalculator.gui.HUD;
-import org.warp.picalculator.gui.HardwareDisplay;
-import org.warp.picalculator.gui.screens.LoadingScreen;
-import org.warp.picalculator.gui.screens.Screen;
-import org.warp.picalculator.math.rules.RulesManager;
-
-public class Main {
- public static Main instance;
- public static String[] args;
-
- public Main(String[] args) throws InterruptedException, Error, IOException {
- this(new LoadingScreen(), new PIHardwareDisplay(), new CalculatorHUD(), args);
- }
-
- public Main(Screen screen, HardwareDisplay disp, HUD hud, String[] args) throws InterruptedException, Error, IOException {
- System.out.println("WarpPI Calculator");
- instance = this;
- Main.args = args;
-// ClassUtils.classLoader = this.getClass();
- beforeStart();
- Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
- PlatformUtils.setThreadName(Thread.currentThread(), "Main thread");
- DisplayManager dm = new DisplayManager(disp, hud, screen, "WarpPI Calculator by Andrea Cavalli (@Cavallium)");
- Keyboard k = new Keyboard();
- HardwareTouchDevice touch = new PIHardwareTouchDevice(false,false,false);
- InputManager im = new InputManager(k, touch);
- HardwareDevice hardwareDevice = new HardwareDevice(dm, im);
- hardwareDevice.setup(() -> {
- try {
- HardwareDevice.INSTANCE.getDisplayManager().setBrightness(0.2f);
- RulesManager.initialize();
- RulesManager.warmUp();
- if (screen instanceof LoadingScreen) {
- ((LoadingScreen) screen).loaded = true;
- }
- HardwareDevice.INSTANCE.getDisplayManager().waitForExit();
- } catch (InterruptedException | Error e) {
- e.printStackTrace();
- }
- ConsoleUtils.out.println(1, "Shutdown...");
- beforeShutdown();
- ConsoleUtils.out.println(1, "");
- ConsoleUtils.out.println(1, "Closed.");
- DSystem.exit(0);
- });
- }
-
- public void beforeStart() throws IOException {
- boolean isRaspi = false;
- try {
- isRaspi = DGpio.getBoardType() != DGpio.UnknownBoardType;
- } catch (final Exception e) {}
- if (Utils.isRunningOnRaspberry() && !Utils.isInArray("-noraspi", args) && isRaspi) {
- DGpio.wiringPiSetupPhys();
- DGpio.pinMode(12, DGpio.PWM_OUTPUT);
- } else {
- StaticVars.screenPos = new int[] { 0, 0 };
- StaticVars.debugOn = true;
- }
- Utils.debugThirdScreen = StaticVars.debugOn & false;
- for (final String arg : args) {
- if (arg.equalsIgnoreCase("2x")) {
- StaticVars.debugWindow2x = true;
- }
- if (arg.equalsIgnoreCase("headless")) {
- Utils.headlessOverride = true;
- }
- if (arg.equalsIgnoreCase("headless-8")) {
- Utils.headlessOverride = true;
- Utils.forceEngine = "console-8";
- }
- if (arg.equalsIgnoreCase("headless-256")) {
- Utils.headlessOverride = true;
- Utils.forceEngine = "console-256";
- }
- if (arg.equalsIgnoreCase("headless-24bit")) {
- Utils.headlessOverride = true;
- Utils.forceEngine = "console-24bit";
- }
- if (arg.equalsIgnoreCase("cpu")) {
- Utils.forceEngine = "cpu";
- }
- if (arg.equalsIgnoreCase("gpu")) {
- Utils.forceEngine = "gpu";
- }
- if (arg.equalsIgnoreCase("fb")) {
- Utils.forceEngine = "fb";
- }
- if (arg.equalsIgnoreCase("nogui")) {
- Utils.forceEngine = "nogui";
- }
- if (arg.equalsIgnoreCase("html")) {
- Utils.forceEngine = "html";
- }
- if (arg.equalsIgnoreCase("verbose") || arg.equalsIgnoreCase("debug")) {
- StaticVars.outputLevel = ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE;
- }
- if (arg.equalsIgnoreCase("uncached")) {
- Utils.debugCache = true;
- }
- if (arg.equalsIgnoreCase("ms-dos")) {
- Utils.headlessOverride = true;
- Utils.msDosMode = true;
- }
- }
- }
-
- public void beforeShutdown() {
- Keyboard.stopKeyboard();
- }
-
- public static void main(String[] args) throws InterruptedException, Error, IOException {
- /*
- * TEST: Comparing BigIntegerMath.divisors() vs programmingpraxis' Number.getFactors() function
- *
- long time1;
- long time2;
- final int max = 10000;
- final long HCN = 720720L;
- final long LCN = 104911L;
- final BigInteger[] bigintegers = new BigInteger[max];
- bigintegers[0] = BigInteger.valueOf(HCN);
- for (int i = 0; i < max; i++) {
- bigintegers[i] = bigintegers[0];
- }
- final Number[] numbers = new Number[max];
- final MathContext mc = new MathContext();
- numbers[0] = new Number(mc, HCN);
- for (int i = 0; i < max; i++) {
- numbers[i] = numbers[0];
- }
- Vector empty = null;
- LinkedList empty2 = null;
-
- time1 = System.currentTimeMillis();
- for(int i = 0; i < max; i++) {
- empty = BigIntegerMath.divisors(bigintegers[i]);
- }
- time2 = System.currentTimeMillis();
- System.out.println("BigIntegerMath HCN: "+(time2-time1)+" ("+empty.toString()+")");
-
-
- bigintegers[0] = BigInteger.valueOf(LCN);
- for (int i = 0; i < max; i++) {
- bigintegers[i] = bigintegers[0];
- }
-
- time1 = System.currentTimeMillis();
- for(int i = 0; i < max; i++) {
- empty = BigIntegerMath.divisors(bigintegers[i]);
- }
- time2 = System.currentTimeMillis();
- System.out.println("BigIntegerMath LCN: "+(time2-time1)+" ("+empty.toString()+")");
-
- time1 = System.currentTimeMillis();
- for(int i = 0; i < max; i++) {
- empty2 = numbers[i].getFactors();
- }
- time2 = System.currentTimeMillis();
- System.out.println("BigIntegerMath HCN: "+(time2-time1)+" ("+empty2.toString()+")");
-
- numbers[0] = new Number(mc, LCN);
- for (int i = 0; i < max; i++) {
- numbers[i] = numbers[0];
- }
- time1 = System.currentTimeMillis();
- for(int i = 0; i < max; i++) {
- empty2 = numbers[i].getFactors();
- }
- time2 = System.currentTimeMillis();
- System.out.println("BigIntegerMath LCN: "+(time2-time1)+" ("+empty2.toString()+")");
- if(true) {
- System.exit(0);;
- }
- */
- new Main(args);
- }
-}
diff --git a/src/main/java/org/warp/picalculator/PICalculator.java b/src/main/java/org/warp/picalculator/PICalculator.java
new file mode 100755
index 00000000..d23a7302
--- /dev/null
+++ b/src/main/java/org/warp/picalculator/PICalculator.java
@@ -0,0 +1,86 @@
+package org.warp.picalculator;
+
+import java.io.IOException;
+
+import org.warp.picalculator.boot.StartupArguments;
+import org.warp.picalculator.deps.DGpio;
+import org.warp.picalculator.deps.DSystem;
+import org.warp.picalculator.device.HardwareDevice;
+import org.warp.picalculator.device.HardwareTouchDevice;
+import org.warp.picalculator.device.InputManager;
+import org.warp.picalculator.device.Keyboard;
+import org.warp.picalculator.device.PIHardwareDisplay;
+import org.warp.picalculator.device.PIHardwareTouchDevice;
+import org.warp.picalculator.gui.CalculatorHUD;
+import org.warp.picalculator.gui.DisplayManager;
+import org.warp.picalculator.gui.HUD;
+import org.warp.picalculator.gui.HardwareDisplay;
+import org.warp.picalculator.gui.screens.LoadingScreen;
+import org.warp.picalculator.gui.screens.Screen;
+import org.warp.picalculator.math.rules.RulesManager;
+
+public class PICalculator {
+ public static PICalculator instance;
+
+ public PICalculator(StartupArguments args) throws InterruptedException, IOException {
+ this(new LoadingScreen(), new PIHardwareDisplay(), new CalculatorHUD(), args);
+ }
+
+ public PICalculator(Screen screen, HardwareDisplay disp, HUD hud, StartupArguments args) throws InterruptedException, IOException {
+ ConsoleUtils.out.println("WarpPI Calculator");
+ initializeEnvironment(args);
+ Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
+ PlatformUtils.setThreadName(Thread.currentThread(), "Main thread");
+ DisplayManager dm = new DisplayManager(disp, hud, screen, "WarpPI Calculator by Andrea Cavalli (@Cavallium)");
+ Keyboard k = new Keyboard();
+ HardwareTouchDevice touch = new PIHardwareTouchDevice(false,false,false);
+ InputManager im = new InputManager(k, touch);
+ HardwareDevice hardwareDevice = new HardwareDevice(dm, im);
+ hardwareDevice.setup(() -> {
+ try {
+ HardwareDevice.INSTANCE.getDisplayManager().setBrightness(0.2f);
+ RulesManager.initialize();
+ RulesManager.warmUp();
+ if (screen instanceof LoadingScreen) {
+ ((LoadingScreen) screen).loaded = true;
+ }
+ HardwareDevice.INSTANCE.getDisplayManager().waitForExit();
+ } catch (InterruptedException | Error e) {
+ e.printStackTrace();
+ }
+ ConsoleUtils.out.println(1, "Shutdown...");
+ beforeShutdown();
+ ConsoleUtils.out.println(1, "");
+ ConsoleUtils.out.println(1, "Closed.");
+ DSystem.exit(0);
+ });
+ }
+
+ public void initializeEnvironment(StartupArguments args) throws IOException {
+ instance = this;
+ ClassUtils.classLoader = this.getClass();
+ StaticVars.startupArguments = args;
+ checkDeviceType();
+ if (Utils.isRunningOnRaspberry() && args.isRaspberryModeAllowed()) {
+ DGpio.wiringPiSetupPhys();
+ DGpio.pinMode(12, DGpio.PWM_OUTPUT);
+ } else {
+ StaticVars.screenPos = new int[] { 0, 0 };
+ StaticVars.debugOn = true;
+ }
+ Utils.debugThirdScreen = StaticVars.debugOn & false;
+ StaticVars.debugWindow2x = args.isZoomed();
+ if (args.isVerboseLoggingEnabled() || args.isDebugEnabled()) {
+ StaticVars.outputLevel = ConsoleUtils.OUTPUTLEVEL_DEBUG_VERBOSE;
+ }
+ }
+
+ private void checkDeviceType() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void beforeShutdown() {
+ Keyboard.stopKeyboard();
+ }
+}
diff --git a/src/main/java/org/warp/picalculator/StaticVars.java b/src/main/java/org/warp/picalculator/StaticVars.java
index 03bd2182..ba5ad64f 100644
--- a/src/main/java/org/warp/picalculator/StaticVars.java
+++ b/src/main/java/org/warp/picalculator/StaticVars.java
@@ -1,5 +1,7 @@
package org.warp.picalculator;
+import org.warp.picalculator.boot.StartupArguments;
+
public class StaticVars {
public static final boolean enableVBO = true;
public static final String calculatorName = "WarpPI";
@@ -13,6 +15,7 @@ public class StaticVars {
public static int outputLevel = 0;
public static boolean debugWindow2x = false;
public static float windowZoom = 2;
+ public static StartupArguments startupArguments;
private StaticVars() {
diff --git a/src/main/java/org/warp/picalculator/Utils.java b/src/main/java/org/warp/picalculator/Utils.java
index a6ec81ce..c3c3ba6e 100755
--- a/src/main/java/org/warp/picalculator/Utils.java
+++ b/src/main/java/org/warp/picalculator/Utils.java
@@ -15,14 +15,20 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.net.URISyntaxException;
+import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.Paths;
+import java.util.Arrays;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
import org.nevec.rjm.BigDecimalMath;
import org.nevec.rjm.Rational;
+import org.warp.picalculator.deps.DGpio;
import org.warp.picalculator.deps.StorageUtils;
+import org.warp.picalculator.deps.nio.DFiles;
+import org.warp.picalculator.deps.nio.DPath;
+import org.warp.picalculator.deps.nio.DPaths;
import org.warp.picalculator.device.HardwareDevice;
import org.warp.picalculator.gui.DisplayManager;
import org.warp.picalculator.gui.graphicengine.BinaryFont;
@@ -53,32 +59,17 @@ public class Utils {
public static final RoundingMode scaleMode2 = RoundingMode.HALF_UP;
public static boolean debugThirdScreen;
- public static boolean headlessOverride = false;
- public static String forceEngine;
- public static boolean msDosMode;
- public static boolean debugCache;
public static boolean newtMode = true;
- public static boolean isInArray(String ch, String[] a) {
- boolean contains = false;
- for (final String c : a) {
- if (c.equals(ch)) {
- contains = true;
- break;
- }
- }
- return contains;
+ public static boolean isInArray(T ch, T[] a) {
+ return Arrays.stream(a).anyMatch(item -> ch.equals(item));
}
public static boolean isInArray(char ch, char[] a) {
- boolean contains = false;
for (final char c : a) {
- if (c == ch) {
- contains = true;
- break;
- }
+ if (c == ch) return true;
}
- return contains;
+ return false;
}
private static final String[] regexNormalSymbols = new String[] { "\\", ".", "[", "]", "{", "}", "(", ")", "*", "+", "-", "?", "^", "$", "|" };
@@ -646,24 +637,30 @@ public class Utils {
} // for
System.out.println("============");
}
-
+
public static boolean isRunningOnRaspberry() {
- if (PlatformUtils.osName.equals("Linux")) {
- final File file = new File("/etc", "os-release");
- try (FileInputStream fis = new FileInputStream(file); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis))) {
- String string;
- while ((string = bufferedReader.readLine()) != null) {
- if (string.toLowerCase().contains("raspbian")) {
- if (string.toLowerCase().contains("name")) {
- return true;
- }
- }
- }
+ return CacheUtils.get("isRunningOnRaspberry", 24*60*60*1000, () -> {
+ if (PlatformUtils.isJavascript) return false;
+ try {
+ // Check if it's a raspberry using pi4j
+ return DGpio.getBoardType() != DGpio.UnknownBoardType;
} catch (final Exception e) {
- e.printStackTrace();
+ // Check if it's a raspberry using other methods
+ if (PlatformUtils.osName.equals("Linux")) {
+ try {
+ final DPath osRelease = DPaths.get("/etc", "os-release");
+ return DFiles.readAllLines(osRelease).stream()
+ .map(String::toLowerCase)
+ .anyMatch(line -> line.contains("raspbian") && line.contains("name"));
+ } catch (IOException readException) {
+ return false;
+ }
+
+ } else {
+ return false;
+ }
}
- }
- return false;
+ });
}
public static boolean isWindows() {
@@ -684,7 +681,7 @@ public class Utils {
}
}
- public static Path getJarDirectory() {
- return Paths.get("").toAbsolutePath();
+ public static DPath getJarDirectory() {
+ return DPaths.get("").toAbsolutePath();
}
}
diff --git a/src/main/java/org/warp/picalculator/boot/Main.java b/src/main/java/org/warp/picalculator/boot/Main.java
new file mode 100644
index 00000000..9ec6cac7
--- /dev/null
+++ b/src/main/java/org/warp/picalculator/boot/Main.java
@@ -0,0 +1,80 @@
+package org.warp.picalculator.boot;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+import org.warp.picalculator.ConsoleUtils;
+import org.warp.picalculator.PICalculator;
+import org.warp.picalculator.Utils;
+import org.warp.picalculator.device.PIHardwareDisplay;
+import org.warp.picalculator.gui.CalculatorHUD;
+import org.warp.picalculator.gui.screens.LoadingScreen;
+
+public class Main {
+ public static void main(String[] args) throws Exception {
+ new PICalculator(parseStartupArguments(args));
+ }
+
+ public static StartupArguments parseStartupArguments(final String[] a) {
+ final StartupArgumentsImpl args = new StartupArgumentsImpl();
+ Arrays.asList(a).stream().parallel().map(String::toLowerCase).forEach(arg -> {
+ switch(arg) {
+ case "2x":
+ args.setZoomed(true);
+ break;
+ case "verbose":
+ args.setVerboseLoggingEnabled(true);
+ break;
+ case "-noraspi":
+ args.setRaspberryModeAllowed(false);
+ break;
+ case "nogui":
+ args.setNoGUIEngineForced(true);
+ break;
+ case "ms-dos":
+ args.setMSDOSModeEnabled(true);
+ break;
+ case "headless-8":
+ args.setHeadless8EngineForced(true);
+ break;
+ case "headless-256":
+ args.setHeadless256EngineForced(true);
+ break;
+ case "headless-24bit":
+ args.setHeadless24bitEngineForced(true);
+ break;
+ case "headless":
+ args.setHeadlessEngineForced(true);
+ break;
+ case "html":
+ args.setHTMLEngineForced(true);
+ break;
+ case "gpu":
+ args.setGPUEngineForced(true);
+ break;
+ case "cpu":
+ args.setCPUEngineForced(true);
+ break;
+ case "framebuffer":
+ args.setFrameBufferEngineForced(true);
+ break;
+ case "debug":
+ args.setDebugEnabled(true);
+ break;
+ case "uncached":
+ args.setUncached(true);
+ break;
+ default:
+ ConsoleUtils.out.print(ConsoleUtils.OUTPUTLEVEL_NODEBUG, "Unrecognized argument " + arg);
+ break;
+ }
+ });
+ args.setHeadlessEngineForced(args.isHeadlessEngineForced() ||
+ args.isHeadless8EngineForced() ||
+ args.isHeadless256EngineForced() ||
+ args.isHeadless24bitEngineForced()
+ );
+ return args;
+ }
+}
diff --git a/src/main/java/org/warp/picalculator/boot/StartupArguments.java b/src/main/java/org/warp/picalculator/boot/StartupArguments.java
new file mode 100644
index 00000000..24a66a15
--- /dev/null
+++ b/src/main/java/org/warp/picalculator/boot/StartupArguments.java
@@ -0,0 +1,21 @@
+package org.warp.picalculator.boot;
+
+public interface StartupArguments {
+ public boolean isRaspberryModeAllowed();
+ public boolean isZoomed();
+ public boolean isHeadlessEngineForced();
+ public boolean isHeadless8EngineForced();
+ public boolean isHeadless256EngineForced();
+ public boolean isHeadless24bitEngineForced();
+ public boolean isCPUEngineForced();
+ public boolean isGPUEngineForced();
+ public boolean isFrameBufferEngineForced();
+ public boolean isNoGUIEngineForced();
+ public boolean isHTMLEngineForced();
+ public boolean isMSDOSModeEnabled();
+ public boolean isVerboseLoggingEnabled();
+ public boolean isDebugEnabled();
+ public boolean isUncached();
+ public boolean isEngineForced();
+
+}
diff --git a/src/main/java/org/warp/picalculator/boot/StartupArgumentsImpl.java b/src/main/java/org/warp/picalculator/boot/StartupArgumentsImpl.java
new file mode 100644
index 00000000..7e3b13b6
--- /dev/null
+++ b/src/main/java/org/warp/picalculator/boot/StartupArgumentsImpl.java
@@ -0,0 +1,175 @@
+package org.warp.picalculator.boot;
+
+public class StartupArgumentsImpl implements StartupArguments {
+
+ StartupArgumentsImpl() {
+ isRaspberryModeAllowed = true;
+ }
+
+ private boolean isRaspberryModeAllowed;
+ private boolean isZoomed;
+ private boolean isHeadlessEngineForced;
+ private boolean isHeadless8EngineForced;
+ private boolean isHeadless256EngineForced;
+ private boolean isHeadless24bitEngineForced;
+ private boolean isCPUEngineForced;
+ private boolean isGPUEngineForced;
+ private boolean isFrameBufferEngineForced;
+ private boolean isNoGUIEngineForced;
+ private boolean isHTMLEngineForced;
+ private boolean isMSDOSModeEnabled;
+ private boolean isVerboseLoggingEnabled;
+ private boolean isDebugEnabled;
+ private boolean isUncached;
+
+ @Override
+ public boolean isRaspberryModeAllowed() {
+ return isRaspberryModeAllowed;
+ }
+
+ @Override
+ public boolean isZoomed() {
+ return isZoomed;
+ }
+
+ @Override
+ public boolean isHeadlessEngineForced() {
+ return isHeadlessEngineForced ||
+ isHeadless8EngineForced ||
+ isHeadless256EngineForced ||
+ isHeadless24bitEngineForced;
+ }
+
+ @Override
+ public boolean isHeadless8EngineForced() {
+ return isHeadless8EngineForced;
+ }
+
+ @Override
+ public boolean isHeadless256EngineForced() {
+ return isHeadless256EngineForced;
+ }
+
+ @Override
+ public boolean isHeadless24bitEngineForced() {
+ return isHeadless24bitEngineForced;
+ }
+
+ @Override
+ public boolean isCPUEngineForced() {
+ return isCPUEngineForced;
+ }
+
+ @Override
+ public boolean isGPUEngineForced() {
+ return isGPUEngineForced;
+ }
+
+ @Override
+ public boolean isFrameBufferEngineForced() {
+ return isFrameBufferEngineForced;
+ }
+
+ @Override
+ public boolean isNoGUIEngineForced() {
+ return isNoGUIEngineForced;
+ }
+
+ @Override
+ public boolean isHTMLEngineForced() {
+ return isHTMLEngineForced;
+ }
+
+ @Override
+ public boolean isMSDOSModeEnabled() {
+ return isMSDOSModeEnabled;
+ }
+
+ @Override
+ public boolean isVerboseLoggingEnabled() {
+ return isVerboseLoggingEnabled;
+ }
+
+ @Override
+ public boolean isDebugEnabled() {
+ return isDebugEnabled;
+ }
+
+ @Override
+ public boolean isUncached() {
+ return isUncached;
+ }
+
+ @Override
+ public boolean isEngineForced() {
+ return isCPUEngineForced
+ || isFrameBufferEngineForced
+ || isGPUEngineForced
+ || isHeadless24bitEngineForced
+ || isHeadless256EngineForced
+ || isHeadless8EngineForced
+ || isHTMLEngineForced
+ || isNoGUIEngineForced;
+ }
+
+ void setRaspberryModeAllowed(boolean isRaspberryModeAllowed) {
+ this.isRaspberryModeAllowed = isRaspberryModeAllowed;
+ }
+
+ void setZoomed(boolean isZoomed) {
+ this.isZoomed = isZoomed;
+ }
+
+ void setHeadlessEngineForced(boolean isHeadlessEngineForced) {
+ this.isHeadlessEngineForced = isHeadlessEngineForced;
+ }
+
+ void setHeadless8EngineForced(boolean isHeadless8EngineForced) {
+ this.isHeadless8EngineForced = isHeadless8EngineForced;
+ }
+
+ void setHeadless256EngineForced(boolean isHeadless256EngineForced) {
+ this.isHeadless256EngineForced = isHeadless256EngineForced;
+ }
+
+ void setHeadless24bitEngineForced(boolean isHeadless24bitEngineForced) {
+ this.isHeadless24bitEngineForced = isHeadless24bitEngineForced;
+ }
+
+ void setCPUEngineForced(boolean isCPUEngineForced) {
+ this.isCPUEngineForced = isCPUEngineForced;
+ }
+
+ void setGPUEngineForced(boolean isGPUEngineForced) {
+ this.isGPUEngineForced = isGPUEngineForced;
+ }
+
+ void setFrameBufferEngineForced(boolean isFrameBufferEngineForced) {
+ this.isFrameBufferEngineForced = isFrameBufferEngineForced;
+ }
+
+ void setNoGUIEngineForced(boolean isNoGUIEngineForced) {
+ this.isNoGUIEngineForced = isNoGUIEngineForced;
+ }
+
+ void setHTMLEngineForced(boolean isHTMLEngineForced) {
+ this.isHTMLEngineForced = isHTMLEngineForced;
+ }
+
+ void setMSDOSModeEnabled(boolean isMSDOSModeEnabled) {
+ this.isMSDOSModeEnabled = isMSDOSModeEnabled;
+ }
+
+ void setVerboseLoggingEnabled(boolean isVerboseLoggingEnabled) {
+ this.isVerboseLoggingEnabled = isVerboseLoggingEnabled;
+ }
+
+ void setDebugEnabled(boolean isDebugEnabled) {
+ this.isDebugEnabled = isDebugEnabled;
+ }
+
+ void setUncached(boolean isUncached) {
+ this.isUncached = isUncached;
+ }
+
+}
diff --git a/src/main/java/org/warp/picalculator/device/CacheFile.java b/src/main/java/org/warp/picalculator/device/CacheFile.java
index 7f0851ee..1e261e69 100755
--- a/src/main/java/org/warp/picalculator/device/CacheFile.java
+++ b/src/main/java/org/warp/picalculator/device/CacheFile.java
@@ -5,11 +5,11 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.nio.file.Files;
-import java.nio.file.Paths;
import java.util.UUID;
import org.warp.picalculator.StaticVars;
+import org.warp.picalculator.deps.nio.DFiles;
+import org.warp.picalculator.deps.nio.DPaths;
public class CacheFile {
private String path;
@@ -21,9 +21,9 @@ public class CacheFile {
public CacheFile() {
do {
path = UUID.randomUUID().toString() + ".ser";
- } while (Files.exists(Paths.get(path)));
+ } while (DFiles.exists(DPaths.get(path)));
try {
- Files.createTempFile(StaticVars.calculatorNameLOWER, "");
+ DFiles.createTempFile(StaticVars.calculatorNameLOWER, "");
} catch (final IOException e) {
e.printStackTrace();
}
@@ -80,7 +80,7 @@ public class CacheFile {
public void dispose() {
closeStreams();
try {
- Files.deleteIfExists(Paths.get(path));
+ DFiles.deleteIfExists(DPaths.get(path));
} catch (final IOException e) {
e.printStackTrace();
}
diff --git a/src/main/java/org/warp/picalculator/device/HardwareDevice.java b/src/main/java/org/warp/picalculator/device/HardwareDevice.java
index 4c3c909f..5fd44567 100644
--- a/src/main/java/org/warp/picalculator/device/HardwareDevice.java
+++ b/src/main/java/org/warp/picalculator/device/HardwareDevice.java
@@ -1,5 +1,6 @@
package org.warp.picalculator.device;
+import org.warp.picalculator.PlatformUtils;
import org.warp.picalculator.gui.DisplayManager;
public class HardwareDevice {
@@ -25,8 +26,8 @@ public class HardwareDevice {
displayManager.initialize();
inputManager.getKeyboard().startKeyboard();
Thread t = new Thread(r);
- t.setDaemon(false);
- t.setName("Main thread (after setup)");
+ PlatformUtils.setDaemon(t, false);
+ PlatformUtils.setThreadName(t, "Main thread (after setup)");
t.start();
}
diff --git a/src/main/java/org/warp/picalculator/device/graphicengine/RAWFont.java b/src/main/java/org/warp/picalculator/device/graphicengine/RAWFont.java
index 3b563710..e6ed528e 100755
--- a/src/main/java/org/warp/picalculator/device/graphicengine/RAWFont.java
+++ b/src/main/java/org/warp/picalculator/device/graphicengine/RAWFont.java
@@ -12,7 +12,7 @@ import java.util.logging.Logger;
import javax.imageio.ImageIO;
import org.warp.picalculator.ClassUtils;
-import org.warp.picalculator.Main;
+import org.warp.picalculator.PICalculator;
import org.warp.picalculator.Utils;
import org.warp.picalculator.deps.DSystem;
diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java
index 770942a2..7d93ff06 100644
--- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java
+++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java
@@ -191,10 +191,10 @@ public class CPUEngine implements GraphicEngine {
@Override
public boolean isSupported() {
- if (Utils.forceEngine != null && Utils.forceEngine != "cpu") {
+ if (StaticVars.startupArguments.isEngineForced() && StaticVars.startupArguments.isCPUEngineForced() == false) {
return false;
}
- return (Utils.headlessOverride || GraphicsEnvironment.isHeadless()) == false;
+ return (StaticVars.startupArguments.isHeadlessEngineForced() || GraphicsEnvironment.isHeadless()) == false;
}
@Override
diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java
index b13587bc..6fcab1c3 100644
--- a/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java
+++ b/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java
@@ -7,6 +7,7 @@ import java.nio.MappedByteBuffer;
import java.util.concurrent.Semaphore;
import org.warp.picalculator.MmapByteBuffer;
+import org.warp.picalculator.StaticVars;
import org.warp.picalculator.TestJNI;
import org.warp.picalculator.Utils;
import org.warp.picalculator.gui.graphicengine.BinaryFont;
@@ -174,10 +175,10 @@ public class FBEngine implements GraphicEngine {
@Override
public boolean isSupported() {
- if (Utils.forceEngine != null && Utils.forceEngine != "fb") {
+ if (StaticVars.startupArguments.isEngineForced() && StaticVars.startupArguments.isFrameBufferEngineForced() == false) {
return false;
}
- if (Utils.headlessOverride) {
+ if (StaticVars.startupArguments.isHeadlessEngineForced()) {
return false;
}
/*
diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java
index 00b5772d..3d19dcef 100755
--- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java
+++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java
@@ -162,10 +162,10 @@ public class GPUEngine implements GraphicEngine {
@Override
public boolean isSupported() {
- if (Utils.forceEngine != null && Utils.forceEngine != "gpu") {
+ if (StaticVars.startupArguments.isEngineForced() && StaticVars.startupArguments.isGPUEngineForced() == false) {
return false;
}
- if (Utils.headlessOverride) {
+ if (StaticVars.startupArguments.isHeadlessEngineForced()) {
return false;
}
boolean available = false;
diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java
index 9af2017b..bcb6003f 100644
--- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java
+++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless24bit/Headless24bitEngine.java
@@ -64,7 +64,7 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng
public void create(Runnable onInitialized) {
StaticVars.outputLevel = -1;
AnsiConsole.systemInstall();
- if (Utils.isWindows() && !Utils.msDosMode) {
+ if (Utils.isWindows() && !StaticVars.startupArguments.isMSDOSModeEnabled()) {
win = true;
WindowsSupport.setConsoleMode(0x0200);
final Thread t = new Thread(() -> {
@@ -319,7 +319,13 @@ public class Headless24bitEngine implements org.warp.picalculator.gui.graphiceng
@Override
public boolean isSupported() {
- if (Utils.msDosMode || (Utils.forceEngine != null && Utils.forceEngine != "console-24bit")) {
+ if (
+ StaticVars.startupArguments.isMSDOSModeEnabled()
+ || (
+ StaticVars.startupArguments.isEngineForced()
+ && StaticVars.startupArguments.isHeadless24bitEngineForced() == false
+ )
+ ) {
return false;
}
return true;
diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java
index fefcb79a..cce6766e 100755
--- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java
+++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless256/Headless256Engine.java
@@ -63,7 +63,7 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin
public void create(Runnable onInitialized) {
StaticVars.outputLevel = -1;
AnsiConsole.systemInstall();
- if (Utils.isWindows() && !Utils.msDosMode) {
+ if (Utils.isWindows() && !StaticVars.startupArguments.isMSDOSModeEnabled()) {
win = true;
WindowsSupport.setConsoleMode(0x0200);
final Thread t = new Thread(() -> {
@@ -276,7 +276,13 @@ public class Headless256Engine implements org.warp.picalculator.gui.graphicengin
@Override
public boolean isSupported() {
- if (Utils.msDosMode || (Utils.forceEngine != null && Utils.forceEngine != "console-256")) {
+ if (
+ StaticVars.startupArguments.isMSDOSModeEnabled()
+ || (
+ StaticVars.startupArguments.isEngineForced()
+ && StaticVars.startupArguments.isHeadless256EngineForced() == false
+ )
+ ) {
return false;
}
return true;
diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java
index 76bee2af..045db8e2 100644
--- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java
+++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Engine.java
@@ -63,7 +63,7 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine.
public void create(Runnable onInitialized) {
StaticVars.outputLevel = -1;
AnsiConsole.systemInstall();
- if (Utils.isWindows() && !Utils.msDosMode) {
+ if (Utils.isWindows() && !StaticVars.startupArguments.isMSDOSModeEnabled()) {
win = true;
WindowsSupport.setConsoleMode(0x0200);
final Thread t = new Thread(() -> {
@@ -276,7 +276,13 @@ public class Headless8Engine implements org.warp.picalculator.gui.graphicengine.
@Override
public boolean isSupported() {
- if (Utils.forceEngine != null && Utils.forceEngine != "console-8") {
+ if (
+ StaticVars.startupArguments.isMSDOSModeEnabled()
+ || (
+ StaticVars.startupArguments.isEngineForced()
+ && StaticVars.startupArguments.isHeadless8EngineForced() == false
+ )
+ ) {
return false;
}
return true;
diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java
index 60ff9c0f..a6fc7306 100644
--- a/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java
+++ b/src/main/java/org/warp/picalculator/gui/graphicengine/headless8/Headless8Renderer.java
@@ -1,5 +1,6 @@
package org.warp.picalculator.gui.graphicengine.headless8;
+import org.warp.picalculator.StaticVars;
import org.warp.picalculator.Utils;
import org.warp.picalculator.gui.graphicengine.Renderer;
@@ -19,7 +20,7 @@ public class Headless8Renderer implements Renderer {
public static final String[] colorANSI = new String[] { "0", "1", "2", "3", "4", "5", "6", "7", "0;1", "1;1", "2;1", "3;1", "4;1", "5;1", "6;1", "7;1" };
public static final String ANSI_RESET = "\u001B[0m";
- public static final char FILL = Utils.msDosMode ? 0xDB : '█';
+ public static final char FILL = StaticVars.startupArguments.isMSDOSModeEnabled() ? 0xDB : '█';
private int hexColor(int red, int green, int blue) {
final int r1 = red;
diff --git a/src/main/java/org/warp/picalculator/math/rules/RulesManager.java b/src/main/java/org/warp/picalculator/math/rules/RulesManager.java
index 0ab00754..ee9f07d4 100644
--- a/src/main/java/org/warp/picalculator/math/rules/RulesManager.java
+++ b/src/main/java/org/warp/picalculator/math/rules/RulesManager.java
@@ -11,7 +11,6 @@ import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
@@ -21,6 +20,7 @@ import org.apache.commons.io.IOUtils;
import org.warp.picalculator.ConsoleUtils;
import org.warp.picalculator.Error;
import org.warp.picalculator.PlatformUtils;
+import org.warp.picalculator.StaticVars;
import org.warp.picalculator.Utils;
import org.warp.picalculator.ZipUtils;
import org.warp.picalculator.deps.StorageUtils;
@@ -101,7 +101,7 @@ public class RulesManager {
tDir.delete();
}
ZipUtils.unzip(cacheFilePath.toString(), tDir.getParent().toString(), "");
- useCache = !Utils.debugCache;
+ useCache = !StaticVars.startupArguments.isUncached();
} catch (final Exception ex) {
ex.printStackTrace();
}
@@ -189,7 +189,7 @@ public class RulesManager {
}
StorageUtils.write(tFileJava, javaCode.getBytes("UTF-8"), DStandardOpenOption.WRITE, DStandardOpenOption.CREATE);
final boolean compiled = DJDTCompiler.compile(new String[] { "-nowarn", "-1.8", tFileJava.toString() }, new PrintWriter(System.out), new PrintWriter(System.err));
- if (Utils.debugCache) {
+ if (StaticVars.startupArguments.isUncached()) {
tFileJava.deleteOnExit();
} else {
tFileJava.delete();