=== Todo ===

Legend:
- [ ] Not done
- [x] Done
- [_] Was done at some point, but isn't now
- [!] Important todo
- [?] Optional

- [!] The Big Refactor
    - [?] Use UEFI
        - [ ] 32-bit (probably)
        - [ ] Partitioned disk
    - [ ] Use an existing bootloader
        - [ ] Limine
        - [ ] Grub :/
    - [ ] project structure
        - [ ] arch/
        - [x] lib/
        - [x] include/
    - [x] libc - User space
    - [x] libk - Kernel libc
    - [x] kernel
        - [x] use libk
        - [x] makefile
        - [?] probably a full rewrite
    - [ ] filesystem
        - [ ] use Ext1
        - [ ] sysroot
        - [ ] good buildutil
        - [ ] proper file organization
    - [X] Makefile refactorin' (finally done!!!)

- [ ] LIBC
    - [ ] assert.h
    - [ ] complex.h (idk why we would need this)
    - [x] ctype.h
    - [x] errno.h
    - [ ] float.h
    - [x] limits.h
    - [x] math.h (maybe a separate libm?) TODO: add errno errors in there
    - [x] setjmp.h (this plagues my mind)
    - [ ] signal.h (we would need signals first)
    - [x] stdarg.h
    - [x] stdbool.h
    - [x] stddef.h
    - [x] stdint.h
    - [ ] stdio.h
    - [ ] stdlib.h
    - [x] string.h
    - [x] syscall.h
    - [ ] time.h
    - [ ] unistd.h (do we do POSIX?)
    - [ ] wchar.h (we would need text support for wide chars ig?)
    - [ ] wctype.h (same as above)
    - [ ] sys/
        - [ ] types.h (syscall types)
        - [ ] gfx.h (basic graphics lib)

- [ ] LIBK
    - [x] disk - disk r/w
    - [ ] error - error handling (bigerr is not enough :( )
    - [ ] fs - filesystem 
    - [x] interrupt - handling and registering interupts
    - [ ] input - handle ALL input devices (currently implemented as the keyboard dir)
    - [x] memory - memory managing (physical and virtual)
    - [x] ports - handles IO ports (eg. serial console)
    - [x] screen - everything that displays on the screen
    - [x] sound - handles everything related to sound
    - [ ] syscall - system calls
    - [x] tty - handles terminal output 

- [x] Multistage Bootloader
- [x] Bootloader reads filesystem to find files
- [x] The almighty 'printf()'
- [x] Write down where stuff is in memory (in notes.txt)

- [ ] "Text" mode (not actually)
    - [x] Scrolling
    - [ ] Scroll-back
    - [x] Color codes (and just multicolor text in general)
    - [x] Controll sequences!
    - [x] VESA BIOS Extensions
    - [x] Better resolution
    - [x] Graphics mode
    - [x] Custom font
    - [_] Larger text size
    - [ ] Variable text size :)
    - [x] Make output overflow go to next line
    - [x] More fonts
    - [x] Generic screen.h stuff (don't assume 1920x1080 32bpp)
    - [x] Multi vbe mode support
    - [x] Setup on boot
    - [ ] Different font size support

- [x] Graphics
    - [?] Enter/exit a "graphics" mode (idk if we need this)
    - [x] Pixel drawing
    - [x] Line drawing (Raycaster Alert??)
    - [x] Triangles (3D?!!???)
    - [x] Rectange :)
    - [x] Circle!
    - [x] Filled verisons

- [x] Interrupts
    - [x] IDT Setup (idt.h)
    - [x] Exception handling
    - [x] Hardware/software interrupts
    - [x] Syscalls! (int 0x80)
    - [x] IRQ 0 - PIT
    - [x] IRQ 1 - Keyboard
    - [x] IRQ 8 - CMOS Real time clock
    - [?] Other IRQs (idk which ones)

- [ ] Sound
    - [x] Pc Speaker
    - [x] Notes (in hertz)
    - [ ] Sound Blaster 16
    - [x] MEGALOVANIA

- [ ] Math
    - [ ] Trigonometry
        - [ ] Sine
        - [ ] Cosine
        - [ ] Tangent
        - [ ] Cotangent
        - [ ] Arc (inverse) versions
        - [ ] Hyperbolic versions
    - [x] Absolute value
    - [ ] isOdd() 🗿
    - [ ] Exponential fn (e^x)
    - [ ] Logarithm
    - [ ] Power
    - [ ] Square Root
    - [ ] Nth Root
    - [x] Floor
    - [x] Round
    - [x] Ceiling
    - [x] Sign
    - [ ] INFINITY
    - [ ] NAN
    - [x] E (eulers number)
    - [x] PI
    - [ ] Floating point macros/functions

- [ ] Filesystem
    - [x] Utility for filesystem building (not just an assembly file)
    - [_] Better header for file i/o (disk/filesys.h)
    - [x] Filetable
    - [x] A better filesystem using INodes etc.
    - [x] Files
        - [x] Larger than one sector (512B)
        - [x] Any file size (Not multiples of 512B)
        - [x] Filetypes
    - [ ] Directories
        - [x] File tree
        - [x] Dir Entries
        - [ ] cd command
    - [ ] Links??
        - [ ] Symbolic
        - [ ] Hard

- [ ] System Calls
    - [x] Sleep()
    - [x] Write()
    - [ ] Read() (temporarly gets())
    - [ ] Open()
    - [ ] Close()
    - [x] Malloc()
    - [x] Free()
    - [ ] Seek()
    - [ ] Tell()
    - [ ] Exit()

- [ ] Shell
    - [ ] Separate file/program
    - [ ] ';' separated commands
    - [ ] I/O Redirection with '<' '>'
    - [x] Display directory in prompt
    - [ ] Custom prompts
    - [ ] Variables
        - [ ] Enviromental/Global
        - [ ] Normal
    - [ ] Commands
        - [x] echo
        - [x] clear
        - [x] help
        - [x] ls
        - [x] exit
        - [ ] touch (make file)
        - [ ] rm
        - [ ] mkdir (add dirs first)
        - [x] reboot
        - [ ] cd

- [ ] Standard I/O stuff
    - [ ] stdin
    - [x] stdout
    - [ ] stderr

- [x] Memory manager
    - [x] Memory map
    - [x] Print mem map
    - [x] Physical
    - [x] Virtual
    - [x] Paging

- [ ] User (or system) programs
    - [x] Loading them
    - [x] Running them
    - [x] Exit back to kernel/shell
    - [x] Let them use libs
    - [ ] Proper include files (LibC?)
    - [x] argc, argv[]

- [ ] Standalone shell program
- [ ] Userspace programs
    - [x] Calculator
    - [ ] Calendar

- [ ] Code Editor
    - [ ] Text editor
    - [ ] Syntax highlighting
    - [ ] Saving/Loading
    - [ ] Hex editor

- [ ] Assembler/Compiler
    - [ ] Assembler
    - [ ] Compiler (probably C)
    - [ ] Standard lib

- [ ] Finish all todos
- [ ] Refactoring!!!
- [ ] Can it run DOOM?
- [ ] Games
    - [ ] Minesweeper
    - [ ] Solitaire
    - [ ] Tetris

- [ ] Write an OS in kern (The FINAL Todo)

