Successfully place window and draw text

init() is a mess, will need to split that up. Also, the die() macro now
takes a return value (this allows splitting the error message from the
actual exit(), for cleanup).