#include #include #include #include #include #include #include #include int sys_puts(char *s) { 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; ctask->sig_handlers[sig] = func; return func; } int sys_alarm(unsigned int seconds) { if(!seconds) { ctask->alarm = 0; return 0; } ctask->alarm = ticks + (seconds * 100); } int sys_pause(void) { ctask->state = TSTATE_INTERRUPTIBLE; reschedule(); return -1; } int sys_dummy(void) { return -ENOSYS; }