I've been doing a fair amount of work with Asterisk lately.  It's got a
command-line interface that looks quite a bit like SMTP (and like lots of
other text-based send-a-line-and-get-a-response protocols).

Seems like there should be a generic library to build interfaces for these
sorts of things - is there?  Some sort of DSL that helps you say things
like:

 - the first thing on the line is the command "FOOBAR"
 - it takes two required arguments, and one optional 
 - encode the required arguments using (base64/http/whatever)
 - the response is one line starting with an integer result code
 - when you get a response matching code X, execute a given block
 - etc

 - James Moore