diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-03-27 23:26:37 -0400 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-03-27 23:26:37 -0400 |
| commit | ab727513337a4729c57220367d67eaa8bc6ce6ff (patch) | |
| tree | 8b95e4157915392f28c7ad8c3f525349e3267189 /BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDSUtils.java | |
| parent | 9cc1e73debc0385a0ab4e880276be502ce2b9a0e (diff) | |
Continue work on FDS
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDSUtils.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDSUtils.java | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDSUtils.java b/BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDSUtils.java new file mode 100644 index 0000000..ec8cea8 --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/cli/fds/FDSUtils.java @@ -0,0 +1,61 @@ +package bjc.utils.cli.fds; + +import static bjc.utils.ioutils.BlockReaders.pushback; +import static bjc.utils.ioutils.BlockReaders.simple; +import static bjc.utils.ioutils.BlockReaders.trigger; + +import java.io.PrintStream; +import java.io.Reader; + +import bjc.utils.cli.fds.FDSState.InputMode; +import bjc.utils.ioutils.BlockReader; +import bjc.utils.ioutils.Prompter; +import bjc.utils.ioutils.PushbackBlockReader; + +/** + * Utilities for dealing with FDS + * + * @author bjculkin + * + */ +public class FDSUtils { + /** + * Run a FDS instance from a reader. + * + * @param reader + * The reader to use. + * + * @param out + * The output stream to use. + * + * @param mode + * The mode to use. + * + * @param ctx + * The initial state. + * + * @return The final state. + * + * @throws FDSException + * If something goes wrong. + */ + public static <S> S runFromReader(Reader reader, PrintStream out, FDSMode<S> mode, S ctx) throws FDSException { + BlockReader input = simple("\\R", reader); + + Prompter comPrompter = new Prompter("Enter a command (m for help): ", out); + Prompter dataPrompter = new Prompter("> ", out); + + BlockReader rawComInput = trigger(input, comPrompter); + BlockReader rawDataInput = trigger(input, dataPrompter); + + PushbackBlockReader comInput = pushback(rawComInput); + PushbackBlockReader dataInput = pushback(rawDataInput); + + FDSState<S> fdsState = new FDSState<>(ctx, InputMode.NORMAL, comInput, dataInput, out); + fdsState.modes.push(mode); + + FDS.runFDS(fdsState); + + return ctx; + } +}
\ No newline at end of file |
