Some old files I worked on while doing this, and an incomplete class based version I didn't end up using because I wanted to start
simpler for my first attempt at this. Maybe next time I'll expand it.

Yes, there will be a next time.