YOu're 100% correct in your assumptions. That's what I've got.
I think your solution works well for trigger events (e.g. jump, shoot), where it would be an action for the first frame only. I think it may not be the way for 'continuous' actions (e.g. moving left/whilst (x) key is down..).
It's those continuous actions which are the problem! I need a 'if I push the left axis up then simulate pressing the up key!'.
Might just have to be a less elegant but more expedient code addition operation...
However, I wonder how people modularise or design this type of thing for multiple control schemes where continuous button presses need to be accounted for. 'Whilst (x) is held down...then...', etc. Would functions be okay for that?
LATER EDIT: Went away and did what you said - does work, included for 'continuous' direction events.
I've made an example for anyone else that has this problem in the future:
dropbox.com/s/bpcgh07khcgycem/controlWithFunctions.c3p
(explanation: Made a game on my desktop, but was to go on an arcade machine. Turns out that the joystick in arcade machine was mapped to gamepad axis and not POV/hat cardinals - hence the question. Since I've got state machines for movement in there and all sorts didn't fancy rewriting all the code that had taken me AGES to re-write, so I've kind of 'hacked' in the axis controls on top. But next time - winners use functions people!)
Thanks to dop2000! Never thought about using functions for movement.