summaryrefslogtreecommitdiff
path: root/kernel/sys.c
diff options
context:
space:
mode:
authorJake Mannens <jake72360@gmail.com>2018-08-01 02:27:57 +1000
committerJake Mannens <jake72360@gmail.com>2018-08-01 02:27:57 +1000
commit8e933fac9fd068343bb602f13175c8d70a6c5768 (patch)
tree2d0c2ef1c1165d701d94617986e80c7598d0fc4d /kernel/sys.c
parent7babda5d4573d432441a416f880cb8cc8c15b55b (diff)
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.
Diffstat (limited to 'kernel/sys.c')
-rw-r--r--kernel/sys.c25
1 files changed, 23 insertions, 2 deletions
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 <kernel/sched.h>
#include <signal.h>
#include <stdint.h>
+#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
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;
}