X-Git-Url: https://git.ucc.asn.au/?p=progcomp2013.git;a=blobdiff_plain;f=qchess%2Fsrc%2Fmain.py;h=137d1cb7f77a19395459012138d00d764bb707f7;hp=0adecb0e5c1cd362e9315dadcf897ba903cc8899;hb=a35e4dc5f4fb6325785b6f8b123266976107b748;hpb=877034f05346e24fdf822f6e6149ad50d891f030 diff --git a/qchess/src/main.py b/qchess/src/main.py index 0adecb0..137d1cb 100644 --- a/qchess/src/main.py +++ b/qchess/src/main.py @@ -67,8 +67,9 @@ def main(argv): global log_file global src_file global graphics_enabled + global always_reveal_states - + max_lines = None src_file = None style = "quantum" @@ -105,6 +106,8 @@ def main(argv): style = "classical" elif arg[1] == '-' and arg[2:] == "quantum": style = "quantum" + elif arg[1] == '-' and arg[2:] == "reveal": + always_reveal_states = True elif (arg[1] == '-' and arg[2:] == "graphics"): graphics_enabled = not graphics_enabled elif (arg[1] == '-' and arg[2:].split("=")[0] == "file"): @@ -112,7 +115,11 @@ def main(argv): if len(arg[2:].split("=")) == 1: src_file = sys.stdin else: - src_file = open(arg[2:].split("=")[1]) + src_file = open(arg[2:].split("=")[1].split(":")[0]) + + if len(arg[2:].split(":")) == 2: + max_lines = int(arg[2:].split(":")[1]) + elif (arg[1] == '-' and arg[2:].split("=")[0] == "log"): # Log file if len(arg[2:].split("=")) == 1: @@ -144,9 +151,21 @@ def main(argv): # Construct a GameThread! Make it global! Damn the consequences! if src_file != None: - if len(players) == 0: + # Hack to stop ReplayThread from exiting + #if len(players) == 0: + # players = [HumanPlayer("dummy", "white"), HumanPlayer("dummy", "black")] + + # Normally the ReplayThread exits if there are no players + # TODO: Decide which behaviour to use, and fix it + end = (len(players) == 0) + if end: players = [Player("dummy", "white"), Player("dummy", "black")] - game = ReplayThread(players, src_file) + elif len(players) != 2: + sys.stderr.write(sys.argv[0] + " : Usage " + sys.argv[0] + " white black\n") + if graphics_enabled: + sys.stderr.write(sys.argv[0] + " : (You won't get a GUI, because --file was used, and the author is lazy)\n") + return 44 + game = ReplayThread(players, src_file, end=end, max_lines=max_lines) else: board = Board(style) game = GameThread(board, players) @@ -219,17 +238,24 @@ def main(argv): + log_init(game.board, players) + if graphics != None: game.start() # This runs in a new thread graphics.run() - game.join() + if game.is_alive(): + game.join() + + error = game.error + graphics.error else: game.run() error = game.error + if log_file != None and log_file != sys.stdout: + log_file.write("# EOF\n") log_file.close() if src_file != None and src_file != sys.stdin: @@ -239,4 +265,18 @@ def main(argv): # This is how python does a main() function... if __name__ == "__main__": - sys.exit(main(sys.argv)) + try: + sys.exit(main(sys.argv)) + except KeyboardInterrupt: + sys.stderr.write(sys.argv[0] + " : Got KeyboardInterrupt. Stopping everything\n") + if isinstance(graphics, StoppableThread): + graphics.stop() + graphics.run() # Will clean up graphics because it is stopped, not run it (a bit dodgy) + + if isinstance(game, StoppableThread): + game.stop() + if game.is_alive(): + game.join() + + sys.exit(102) +