41 lines
		
	
	
		
			No EOL
		
	
	
		
			617 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			No EOL
		
	
	
		
			617 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef TASK_H
 | |
| #define TASK_H
 | |
| 
 | |
| #include <stdbool.h>
 | |
| #include <stdint.h>
 | |
| 
 | |
| #define TASK_NAME_LEN 15
 | |
| 
 | |
| enum wait_mode {
 | |
|   NONE,
 | |
|   PROCESS_END,
 | |
| };
 | |
| 
 | |
| struct task_state {
 | |
|   uint32_t ret_addr;
 | |
|   void *page_directory;
 | |
| 
 | |
|   uint32_t ebx;
 | |
|   uint32_t ecx;
 | |
|   uint32_t edx;
 | |
|   uint32_t esi;
 | |
|   uint32_t edi;
 | |
|   uint32_t ebp;
 | |
|   uint32_t esp;
 | |
| 
 | |
|   enum wait_mode wait_mode;
 | |
|   uint32_t wait_arg;
 | |
| 
 | |
|   char name[TASK_NAME_LEN + 1];
 | |
| } __attribute__ ((packed));
 | |
| 
 | |
| extern struct task_state *active_task;
 | |
| 
 | |
| void init_tasks();
 | |
| 
 | |
| uint32_t new_task(struct task_state state);
 | |
| void advance_active_task();
 | |
| 
 | |
| void delete_task(struct task_state *state);
 | |
| 
 | |
| #endif |