This code should be very portable, except: 1) The code sometimes uses structural assignment. That is, it'll sometimes say "a=b", where a and b are struct's of the same type, instead of using a function that copies each field of the struct 2) The blinking cursor in the curses interface does I/O from a signal handler. If your OS doesn't like I/O from a signal handler, you could tear the blink out of curses-graphics.c or use line-graphics.c instead. I may eventually do a cgoban interface. 3) I've assumed that calling isupper with a nonalphabetic argument "works". Any compiler that doesn't handle this is badly broken, but I've heard that some don't deal with it. I have not assumed that tolower works with non-alpha arguments.