From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 Date: Mon, 31 Aug 2009 16:15:39 -0400 Message-ID: From: Akshat Kumar To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/mixed; boundary=0016e64ca2a68fbe57047275b223 Subject: [9fans] 9 Games of Go Topicbox-Message-UUID: 5da62b48-ead5-11e9-9d60-3106f5b1d025 --0016e64ca2a68fbe57047275b223 Content-Type: text/plain; charset=ISO-8859-7 Content-Transfer-Encoding: quoted-printable With the hopes of playing Go amongst fellow Plan 9 users, I've written a little filesystem[1] which can currently be used for any two-player turn-based games. I'm currently working on Paurea's wonderful goban code, to implement support for reading from and writing to files, so that we have a working interface to use. I also have plans to add the same ability to Mirtchovski's port of GNU Go, so that the antisocial community can play amongst themselves (or oneself). The filesystem is meant to simulate a proper game server, through basic file and permissions operations. Creating a directory in the root of the fs is equivalent to a "game room". The fs automatically creates two files: 'W' and 'B' under the newly created dir, which correspond, respectively, to the positional data of "white" and "black" players. The files, as well as the directory, have uid and gid of the user who created them. When that user wants to play against someone, they set the gid of either 'W' or 'B' to their opponent's uname. To this effect, both files are mode 464. Both files block until new data is written. The fs implements no formatting restrictions to data -- it is left up to clients to agree on a format and use it for the duration of a game. (Oh what fun it might be to map the operations of a Chess game to that of Go....) In this way, the fs implements only one real "rule", which is general enough for any sort of game (in this class): once either 'W' or 'B' is written, a "dirty" flag is set on the file, so it may not again be written to, until the other file has been written. There are a few things left to do still, and they are briefly documented in the NOTES[2] file. I crave feedback, so please do not hesitate. Programming suggestions, fs implementations, and the like, all more than welcome. Privately, or publicly. Best, ak [1] The source can be found in /n/sources/contrib/akumar/=E1/gofs [2] /n/sources/contrib/akumar/=E1/gofs/NOTES For convenience, I've attached just the gofs source file to this mail. Let me know if this is undesirable. --0016e64ca2a68fbe57047275b223 Content-Type: application/x-gzip; name="gofs.c.gz" Content-Disposition: attachment; filename="gofs.c.gz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fz1gltj20 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 --0016e64ca2a68fbe57047275b223--