#pragma once #include enum kc_thread_status { AVAILABLE, CREATED, READY, RUNNING, SLEEPING, BLOCKED, WAITING, TERMINATED }; union kc_thread_result { uint64_t scalar; void *pointer; }; struct kc_thread { void *kernel_stack_head; void *kernel_stack_pointer; uint64_t time_elapsed; union kc_thread_result result; enum kc_thread_status status; struct kc_thread *next; union { uint64_t sleep_expiration; struct kc_thread *wait_target; }; }; void task_init(void); void kct_terminate(union kc_thread_result result); union kc_thread_result kct_wait(struct kc_thread *target);