aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-03-03 02:25:30 +0000
committersotech117 <michael_foiani@brown.edu>2024-03-03 02:25:30 +0000
commit00c85e5881a7cc1f3e15b2c4940ea2d02e4fbe9c (patch)
treec014a3267db88bee84833055d60571b497826a7b
parente8970e39cac119369177e32723c75ea585a94587 (diff)
work on disk read
-rw-r--r--kernel/drivers/tty/ldisc.c52
1 files changed, 24 insertions, 28 deletions
diff --git a/kernel/drivers/tty/ldisc.c b/kernel/drivers/tty/ldisc.c
index 5651601..23c9d00 100644
--- a/kernel/drivers/tty/ldisc.c
+++ b/kernel/drivers/tty/ldisc.c
@@ -93,43 +93,39 @@ size_t ldisc_read(ldisc_t *ldisc, char *buf, size_t count)
// read from ldisc buffer to buf
size_t i = 0;
- while (i < count)
+ int break_loop = 0;
+ while (i < count && !break_loop)
{
// if we have new chars to read
if (ldisc->ldisc_head != ldisc->ldisc_tail)
{
- // if we encounter a new line symbol
- if (ldisc->ldisc_buffer[ldisc->ldisc_head] == '\n')
- {
- buf[i] = ldisc->ldisc_buffer[ldisc->ldisc_head];
- ldisc->ldisc_head = (ldisc->ldisc_head + 1) % LDISC_BUFFER_SIZE;
- i++;
- break;
- }
- // if we encounter an EOT
- else if (ldisc->ldisc_buffer[ldisc->ldisc_head] == EOT)
+ char c = ldisc->ldisc_buffer[ldisc->ldisc_tail];
+ switch (c)
{
+
+ case EOT:
+ buf[i] = c;
+ break_loop = 1;
break;
- }
- // if we encounter an ETX
- else if (ldisc->ldisc_buffer[ldisc->ldisc_head] == ETX)
- {
- // clear uncooked portion of the line
- ldisc->ldisc_head = ldisc->ldisc_cooked;
+
+ // case ETX:
+ // ldisc->ldisc_tail = ldisc->ldisc_cooked;
+ // break;
+
+ case '\n':
+ buf[i] = c;
+ ldisc->ldisc_tail = (ldisc->ldisc_tail + 1) % LDISC_BUFFER_SIZE;
+ i++;
+ break_loop = 1;
break;
- }
- // if we encounter a normal char
- else
- {
- buf[i] = ldisc->ldisc_buffer[ldisc->ldisc_head];
- ldisc->ldisc_head = (ldisc->ldisc_head + 1) % LDISC_BUFFER_SIZE;
+
+ default:
+ buf[i] = c;
+ ldisc->ldisc_tail = (ldisc->ldisc_tail + 1) % LDISC_BUFFER_SIZE;
i++;
+ break;
}
}
- else
- {
- break;
- }
}
// return the number of bytes read
@@ -207,7 +203,7 @@ void ldisc_key_pressed(ldisc_t *ldisc, char c)
vterminal_write(ldisc_to_tty(ldisc), "\n", 1);
// add the new char to the buffer
- // ldisc->ldisc_buffer[ldisc->ldisc_tail] = c;
+ ldisc->ldisc_buffer[ldisc->ldisc_tail] = c;
ldisc->ldisc_head = (ldisc->ldisc_head + 1) % LDISC_BUFFER_SIZE;
// cook the buffer