summaryrefslogtreecommitdiff
path: root/src/devices/stream.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/stream.rs')
-rw-r--r--src/devices/stream.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/devices/stream.rs b/src/devices/stream.rs
new file mode 100644
index 0000000..3d376b6
--- /dev/null
+++ b/src/devices/stream.rs
@@ -0,0 +1,46 @@
+use std::io::{Read, Write, Stdin, Stdout};
+
+pub struct StreamDevice {
+ pub wake_flag: bool,
+
+ pub input_control: bool,
+ pub output_control: bool,
+ pub read_queue: Vec<u8>,
+
+ pub stdin: Stdin,
+ pub stdout: Stdout,
+}
+
+impl StreamDevice {
+ pub fn new() -> Self {
+ Self {
+ wake_flag: false,
+
+ input_control: true,
+ output_control: true,
+ read_queue: Vec::with_capacity(256),
+
+ stdin: std::io::stdin(),
+ stdout: std::io::stdout(),
+ }
+ }
+
+ // pub fn fetch_stdin(&mut self) {
+ // match self.stdin.read(&mut self.read_queue) {
+ // Ok() => (),
+ // Err() => (),
+ // }
+ // }
+
+ pub fn read_stdin(&mut self) -> u8 {
+ let mut buffer = [0; 1];
+ match self.stdin.read_exact(&mut buffer) {
+ Ok(()) => buffer[0],
+ Err(_) => 0,
+ }
+ }
+
+ pub fn write_stdout(&mut self, val: u8) {
+ self.stdout.write_all(&[val]).unwrap();
+ }
+}