b6daa1efa1 2012-07-14 kinaba: import util; b6daa1efa1 2012-07-14 kinaba: import game; b6daa1efa1 2012-07-14 kinaba: import core.stdc.signal; b6daa1efa1 2012-07-14 kinaba: import std.c.stdlib; b6daa1efa1 2012-07-14 kinaba: b6daa1efa1 2012-07-14 kinaba: abstract class Output b6daa1efa1 2012-07-14 kinaba: { b6daa1efa1 2012-07-14 kinaba: void command(char c); b6daa1efa1 2012-07-14 kinaba: } b6daa1efa1 2012-07-14 kinaba: b6daa1efa1 2012-07-14 kinaba: class NilOutput : Output b6daa1efa1 2012-07-14 kinaba: { b6daa1efa1 2012-07-14 kinaba: override void command(char c) {} b6daa1efa1 2012-07-14 kinaba: } b6daa1efa1 2012-07-14 kinaba: b6daa1efa1 2012-07-14 kinaba: class StdOutput : Output b6daa1efa1 2012-07-14 kinaba: { b6daa1efa1 2012-07-14 kinaba: // Handle SIGINT: force abort and exit. b6daa1efa1 2012-07-14 kinaba: static this() b6daa1efa1 2012-07-14 kinaba: { b6daa1efa1 2012-07-14 kinaba: signal(SIGINT, &sigint); b6daa1efa1 2012-07-14 kinaba: } b6daa1efa1 2012-07-14 kinaba: extern(C) static void sigint(int) { b6daa1efa1 2012-07-14 kinaba: write("A"); b6daa1efa1 2012-07-14 kinaba: stdout.flush(); b6daa1efa1 2012-07-14 kinaba: exit(0); b6daa1efa1 2012-07-14 kinaba: } b6daa1efa1 2012-07-14 kinaba: b6daa1efa1 2012-07-14 kinaba: override void command(char c) b6daa1efa1 2012-07-14 kinaba: { b6daa1efa1 2012-07-14 kinaba: // TODO: optimize redundancy. b6daa1efa1 2012-07-14 kinaba: write(c); b6daa1efa1 2012-07-14 kinaba: stdout.flush(); b6daa1efa1 2012-07-14 kinaba: } b6daa1efa1 2012-07-14 kinaba: }