summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 083fbf1..ccda5f0 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -4,7 +4,6 @@
#include "lib/printf/printf.h"
#include "fs/ext2.h"
#include "kernel.h"
-#include "driver/vesa.h"
#include "fifo.h"
#include "fd.h"
#include "fs/elf.h"
@@ -27,9 +26,13 @@
#include "stdstreams.h"
#include "sys/unistd.h"
+
+// TODO oh maan, dyamically allocate some nice structures and think about reentrancy
+// and smp !!
+//TODO move to process.c or somehting..and implement per process //
+
#define MAX_PID 200
-//TODO move to process.c and implement per process //
static fd fds[MAX_PID][MAX_FD];
static ringbuffer invl[MAX_PID];
//static uint32_t opendir_pos[MAX_PID][MAX_FD];
@@ -69,7 +72,7 @@ int nextfd(int pid)
return i;
}
}
- return -1;
+ kpanic("ran out of filedescirptors for pid : %d",pid);
}
/** errno helper */
void set_errno(int no)
@@ -405,7 +408,6 @@ int syscall_execve(const char *name, char *const argv[], char *const env[], int
if(!entry_global)
{
- kpanic("no entry point!"); // TODO: rem
set_errno(ENOENT);
return -1;
}
@@ -488,6 +490,7 @@ uint32_t syscall_exit(int status, uint32_t none1, uint32_t none2,int pid)
}
}
+ compositor_destroy_window(pid);
task_exit(pid);
__asm__("int $0x81"); // please schedule us away once and for all
return 0;
@@ -597,32 +600,20 @@ uint32_t syscall_tcsetattr(int fd, struct termios *termios_p, uint32_t none, uin
return 0;
}
-uint32_t syscall_gui_rect(uint32_t xy, uint32_t wh, uint32_t none, uint32_t pid)
+uint32_t syscall_gui_rect(uint32_t xy, uint32_t wh, uint32_t fb, uint32_t pid)
{
-// klog("pid %d x y %d %d w h %d %d",pid,xy>>16,xy&0xffff,wh>>16,wh&0xffff);
-
- ringbuffer_put(&invl[pid],xy&0x000000ff);
- ringbuffer_put(&invl[pid],(xy&0x0000ff00)>>8);
- ringbuffer_put(&invl[pid],(xy&0x00ff0000)>>16);
- ringbuffer_put(&invl[pid],(xy&0xff000000)>>24);
-
- ringbuffer_put(&invl[pid],wh&0x000000ff);
- ringbuffer_put(&invl[pid],(wh&0x0000ff00)>>8);
- ringbuffer_put(&invl[pid],(wh&0x00ff0000)>>16);
- ringbuffer_put(&invl[pid],(wh&0xff000000)>>24);
-
- compositor_wake();
-
- return 1;
+ compositor_invalidate(pid,xy>>16,xy&0xffff,wh>>16,wh&0xffff,fb);
+ return 0; // can not fail
}
-uint32_t syscall_gui_win(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
+
+uint32_t syscall_gui_win(uint32_t xy, uint32_t wh, uint32_t flags, uint32_t pid)
{
+ //create a ringbuffer for virtual per process /dev/tty (for fool-terms and similar)//
uint32_t fdn=nextfd(pid);
fds[pid][fdn]=fd_from_ringbuffer();
tty[pid]=fdn;
- invl[pid]=ringbuffer_init(1);
- task_add_win(pid,&invl[pid]);
- return 1;
+
+ return compositor_create_window(pid,xy>>16,xy&0xffff,wh>>16,wh&0xffff,flags);
}
/** Generics . prep before we reenable interrupts*/