From c055a2f6a9778f93a8f09b6d820d2504d3fa2601 Mon Sep 17 00:00:00 2001 From: Benji Dial Date: Thu, 26 Dec 2019 18:21:44 -0500 Subject: keyboard skeleton, skeleton, rcs, etc --- src/kernel/keyb.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/kernel/keyb.c (limited to 'src/kernel/keyb.c') 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 -- cgit v1.2.3