digraph { node [fontname="Gentium", shape="box"] edge [fontname="Gentium", fontsize=10] Begin -> fileExists Begin [style="rounded"] fileExists [label="Target file exists?", shape=diamond] fileExists -> readFile [label="Yes"] fileExists -> fileDoesNotExist [label="No"] readFile [label="Read the file…", shape="parallelogram"] fileDoesNotExist [label="Create file with start FEN,\nstart board, White to move: ", shape="parallelogram", margin=.001] fileDoesNotExist -> readFile readFile -> FENvalid FENvalid [label="File begins with\nvalid FEN?", shape="diamond"] FENvalid -> errorTime [label="No"] FENvalid -> readFEN [label="Yes"] readFEN [label="Read FEN,\nConstruct board"] readFEN -> moveToMake moveToMake [label="Do we have a\nmove to make?", shape="diamond"] moveToMake -> output [label="No"] moveToMake -> readMove [label="Yes"] readMove [label="Read move.", shape="parallelogram"] readMove -> validMove validMove [label="Examine FEN,\nmove valid?", shape="diamond"] validMove -> errorTime [label="No"] validMove -> adjustFEN [label="Yes"] adjustFEN [label="Change FEN,\nclear movetext"] adjustFEN -> readFEN output [label="Write FEN, board,\nlast move, next move\nto screen, file", shape="parallelogram", margin=.001] output -> inputMode inputMode [label="Are we in a mode\nto input a new move?", shape="diamond"] inputMode -> inputReady [label="Yes"] inputReady [label="…and should we input?", shape="diamond"] inputMode -> exitOrNot [label="No"] exitOrNot [label="Run once or loop?", shape="diamond"] exitOrNot -> Exit [label="Once"] exitOrNot -> wait [label="Loop"] wait [label="Wait.\nFile changed?", shape="diamond"] wait -> wait [label="No"] wait -> readFile [label="Yes"] inputReady -> receiveInput [label="Yes"] inputReady -> exitOrNot [label="No"] receiveInput [label="Receive input as move", shape="parallelogram"] receiveInput -> whatInput whatInput [label="Is input EOF or\nother exit command?", shape="diamond"] whatInput -> Exit [label="Yes"] whatInput -> validMove [label="No"] errorTime [label="Display whatever we can\nand an error message", shape="parallelogram", margin=.001] errorTime -> exitOrNot Exit [style="rounded"] }