summaryrefslogtreecommitdiff
path: root/src/kernel/keyb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/keyb.c')
-rw-r--r--src/kernel/keyb.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/kernel/keyb.c b/src/kernel/keyb.c
new file mode 100644
index 0000000..bae462a
--- /dev/null
+++ b/src/kernel/keyb.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2019 Benji Dial
+
+Permission to use, copy, modify, and/or distribute this
+software for any purpose with or without fee is hereby
+granted, provided that the above copyright notice and this
+permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS
+ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+OF THIS SOFTWARE.
+*/
+
+#include "serial.h"
+#include "vga.h"
+
+uint8_t get_char(bool echo) {
+ uint8_t ch = poll_port(COM2) ? read_byte(COM2) : 0;//TODO: from get_key
+ if (echo)
+ put_char(ch);
+ return ch;
+}
+
+uint32_t get_line(uint32_t max, uint8_t *buffer, bool echo) {
+ uint8_t *i = (uint8_t *)buffer;
+ while (i < (uint8_t *)buffer + max) {
+ if ((*i = get_char(echo)) == (uint8_t)'\n') {
+ *i = 0;
+ return i - (uint8_t *)buffer;
+ }
+ ++i;
+ }
+} \ No newline at end of file