=== Todo ===

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

- [!] The Big Refactor
    - [?] Use GRUB
        - [ ] Multiboot
        - [ ] boot.s
    - [ ] project structure
        - [ ] system root
        - [ ] arch/
        - [ ] lib/
        - [ ] include/
        - [ ] cross compiler setup
    - [ ] libc - User space
    - [ ] libk - Kernel libc
    - [ ] kernel
        - [ ] use libk
        - [ ] makefile
        - [ ] probably a full rewrite
    - [ ] userspace
        - [ ] shell
        - [ ] calc
        - [ ] editor
    - [ ] filesystem
        - [ ] proper file organization
    - [_] Makefile refactorin'

- [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 libs
- [ ] Finish all todos
- [ ] Refactoring!!!
- [ ] Can it run DOOM?
- [ ] Games
    - [ ] Minesweeper
    - [ ] Solitaire
    - [ ] Tetris

