diff options
Diffstat (limited to 'kernel/syscalls.c')
| -rw-r--r-- | kernel/syscalls.c | 39 |
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*/ |
