From 8e933fac9fd068343bb602f13175c8d70a6c5768 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Wed, 1 Aug 2018 02:27:57 +1000 Subject: Defined EOF as -1 in stdio.h. Implemented the sprintf() library function in lib/stdio.c which uses the vsprintf() function. Implemented a very primative controlling TTY for each process. This is achieved by a switch in the sys_puts system call which uses the 'ctty' element of the process' task structure to determine an appropriate I/O channel. A negative ctty value doesn't equate to any I/O channel effectively disabling the process' output. Added the sys_ctty system call which allows a process to set it's own ctty value. Removed the sys_rsputs system call. Output to serial is now performed by the process first setting it's ctty value to 1, then invoking sys_puts. --- kernel/sys.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'kernel/sys.c') diff --git a/kernel/sys.c b/kernel/sys.c index c2256c1..986c4dd 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -3,13 +3,28 @@ #include #include #include +#include #include #include #include int sys_puts(char *s) { - printk("[%04x] ", ctask->pid); - return printk(s); + char buf[8]; + sprintf(buf, "[%04x] ", ctask->pid); + + if(ctask->ctty < 0) + return EOF; + + switch(ctask->ctty) { + case 1: + rsputs(buf); + return rsputs(s); + break; + default: + printk("%s", buf); + return printk(s); + break; + } } time_t sys_time(void) { @@ -56,6 +71,12 @@ int sys_pause(void) { return -1; } +int sys_ctty(int ctty) { + ctask->ctty = ctty; + + return 0; +} + int sys_dummy(void) { return -ENOSYS; } -- cgit v1.3