#include #include #include #include #include #include #include #include #include int sys_puts(char *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) { 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_ctty(int ctty) { ctask->ctty = ctty; return 0; } int sys_dummy(void) { return -ENOSYS; }