diff options
Diffstat (limited to 'com32/lib/sys/rawcon_read.c')
-rw-r--r-- | com32/lib/sys/rawcon_read.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/com32/lib/sys/rawcon_read.c b/com32/lib/sys/rawcon_read.c index e6635909..7eae95f1 100644 --- a/com32/lib/sys/rawcon_read.c +++ b/com32/lib/sys/rawcon_read.c @@ -35,51 +35,38 @@ #include <errno.h> #include <string.h> #include <com32.h> +#include <core.h> #include <minmax.h> #include "file.h" /* Global, since it's used by stdcon_read */ -#ifndef SYSLINUX_EFI ssize_t __rawcon_read(struct file_info *fp, void *buf, size_t count) { - com32sys_t ireg, oreg; char *bufp = buf; size_t n = 0; + char hi = 0; -printf("__rawcon_read... enter\n"); (void)fp; - memset(&ireg, 0, sizeof ireg); - while (n < count) { + if (hi) { + *bufp++ = hi; + n++; + hi = 0; + continue; + } + /* Poll */ - ireg.eax.b[1] = 0x0B; - __intcall(0x21, &ireg, &oreg); - if (!oreg.eax.b[0]) + if (!pollchar()) break; /* We have data, go get it */ - ireg.eax.b[1] = 0x08; - __intcall(0x21, &ireg, &oreg); - *bufp++ = oreg.eax.b[0]; + *bufp++ = getchar(&hi); n++; } return n; } -#else -ssize_t __rawcon_read(struct file_info *fp, void *buf, size_t count) -{ - extern char getchar(); - char *bufp = buf; - size_t n = 0; - while (n < count) { - *bufp++ = getchar(); - n++; - } - return n; -} -#endif const struct input_dev dev_rawcon_r = { .dev_magic = __DEV_MAGIC, |