summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDS.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-03-26 11:30:43 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-03-26 11:30:43 -0400
commit98cdf435d4974f4cca8f7b4eb4026da2c88cbc4c (patch)
treece5edea29a4da719affe61afda30a50afae15e87 /BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDS.java
parentb53c1ef47c438fb1144b961d1939c37a4bfe9120 (diff)
Update
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDS.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDS.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDS.java b/BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDS.java
new file mode 100644
index 0000000..6dc0337
--- /dev/null
+++ b/BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDS.java
@@ -0,0 +1,69 @@
+package bjc.utils.cli.fds;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import bjc.utils.ioutils.Block;
+import bjc.utils.ioutils.BlockReader;
+
+/**
+ * Runs a FDS (FDiskScript) interface.
+ *
+ * This is a rudimentary console interface inspired heavily by FDisk's interface
+ * style.
+ *
+ * Commands are denoted by a single character, but can invoke submodes.
+ *
+ * @author bjculkin
+ *
+ */
+public class FDS {
+ /**
+ * Run a provided FDS mode until it is exited or there is no more input.
+ *
+ * @param comin
+ * The command input source for the FDS mode.
+ *
+ * @param datain
+ * The data input source for the FDS mode.
+ *
+ * @param out
+ * The output source for the FDS mode.
+ *
+ * @param initialMode
+ * The mode to start in.
+ *
+ * @param initialState
+ * The initial state for the mode.
+ *
+ * @return The final state of the mode.
+ *
+ * @throws FDSException
+ * If something went wrong during mode execution.
+ */
+ public static <S> S runFDS(InputStream comin, InputStream datain, OutputStream out, FDSMode<S> initialMode,
+ S initialState) throws FDSException {
+ PrintStream printer = new PrintStream(out);
+
+ try (BlockReader blockSource = new BlockReader("\\R", new InputStreamReader(comin))) {
+ printer.print("Enter a command (m for help): ");
+
+ while (blockSource.hasNext()) {
+ Block comBlock = blockSource.next();
+
+ String comString = comBlock.contents.trim();
+
+ char comChar = comString.charAt(0);
+
+ printer.println(String.format("\nRecieved command '%s'\n", comChar));
+
+ printer.print("Enter a command (m for help): ");
+ }
+ } catch (Exception ex) {
+ throw new FDSException("Unexpected I/O error", ex);
+ }
+
+ return initialState;
+ }
+}