diff options
Diffstat (limited to 'src/kernel/keyb.c')
-rw-r--r-- | src/kernel/keyb.c | 39 |
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 |