Hyperlinked commands sound like exactly what you want. They create hyperlinks which, when clicked, will execute a command script. Here is an example (in code):
<command name="AcceptCommand">
<pattern>accept</pattern>
<script>
msg ("You take the coffee and now feel more alert.")
</script>
</command>
<command name="DeclineCommand">
<pattern>decline</pattern>
<script>
msg ("You sniff at the coffee, but it's not what you're in the mood for at the moment.")
</script>
</command>
This defines two commands, one for "accept" and one for "decline". The pattern defines the text you need to pass in your hyperlinked command. You can then print out a menu like this:
msg ("{command:accept:Accept the coffee}")
msg ("{command:decline:Decline the coffee}")
"command:" is a text processor command. The first part between the colons is the text executed, as if the player had typed it in. This should match the pattern of a command. (You can even execute built-in Quest commands and verbs this way.) The last part is the text to show.
Note that you can create commands on a per-room basis. So if you're simulating a game book by moving from room to room, then the commands defined in each room will only be active when you're actually in the room.
I also have some code I could pass along which is a single "DoScript" command, which executes named scripts on named objects, with parameters. But that might be a bit more than what you need. Let me know (anyone) if that would be useful.