After rereading Markus Enzenberger's gtp_interrupt proposal, I think there is a way to include it in GTP in a non-intrusive way, and I can agree with most of it. There are still some complications, which I'll discuss at the end. I 'll try to summarise what I understood it is supposed to be/do.
################################################
Semantics of the GTP-interrupt-feature :
* The 003 (control-C) character is used to indicate an interrupt. * a program that does not implement the interrupt feature can ignore the character. If the 003 character is encountered in the middle of a (otherwise) valid commandline, the behaviour is indefined. * upon reception of a 003 character, a program that does implement the feature may (*or may not*) honor the interrupt by stopping it's current processing. * the aborted command should return an error status like "?[%d] interrupted\n\n" * if no command was currently executing, ...
* Like ordinary commands, the existence of the 003 feature can be tested by "valid_command gtp_interrupt". I should also be included in the output from the "list_commands" command.
* Sending the gtp_interrupt command literally (as text) is allowed. It should result in the same behaviour as a 003 character.
################################################
Discussion.
* There is a possible collision here: In unix, the 003 character is (often) used as the interrupt character and translated by the line-discipline into an "interrupt" signal, which is sent to the process attached to the tty. Agreed, this complication is -strictly speaking- not in the GTP domain, but choosing 003 seems to be asking for problems (and confusion), which could have been be avoided. [ I can imagine the FAQ in the future: Q: ^C does not work, it aborts the program. A: stty intr ^G QQ: Huh ? ]
* so, ^C is a bad choice. Any suggestions for an alternative interrupt character? ESC, DEL, ^A, ^G ^X ^T come to mind. ^G seems safe to me. Won't interfere with anything.
Does ring a bell, though ... Wake-up call! * In addition, I think there is a place for a similar interrup-feature, but using a signal (interrupt) instead of an in-band character. It could use the same semantics, but a different command name ("signal", "interrupt" ?), making it's implementation independent of the 003 feature. This *could* be useful for engines that don't like polling (but *do* support signals).
AvK