changed interrupt callback handler to conditionally loop per callback, rather than using a single 'loop' boolean. This means that we can break the wait_for_input loop per callback.
finished interrupt alteration. Now uses 'direction' instead of ambigious 'into' and can return from the wait function per callback, not just after one/keyboard interrupt