#include #include #include #include #include #include #include #include extern uint32_t ticks; int sys_puts(char *s) { uint32_t sigs = 5; printk("[kernel] Setting signals %01x for PID 0x%04x\n", sigs, ctask->pid); ctask->signal |= sigs; printk("[%04x] ", ctask->pid); return printk(s); } time_t sys_time(void) { return ticks / 100; } pid_t sys_getpid(void) { return ctask->pid; } void *sys_getpdir(void) { uint32_t pdir; __asm__ ("mov %%cr3, %%eax" : "=a" (pdir)); return (void*) pdir; } void *sys_signal(int sig, void (*func)(int)) { if(sig < 0 || sig >= NRSIG) return NULL; /* SIGKILL and SIGSTOP cannot be caught */ if(sig == SIGKILL || sig == SIGSTOP) return NULL; printk("Task %x registered new signal handler 0x%08x for signal %01x\n", ctask->pid, (uint32_t) func, sig); ctask->sig_handlers[sig] = func; return func; } int sys_dummy(void) { return -ENOSYS; }