TODO/reminders:
- we are using C
- keep directory structure as a single directory of source files (no folders)
- errors should be printed out to stderr and program execution should be aborted
- free dynamically allocated memory asap, close fds when no longer needed