ref: eb8f0cbd6b03c83d0ec53c73ce721dae347217de
dir: /chessfs.4/
.TH CHESSFS 4 .SH NAME chessfs \- chess filesystem .SH SYNOPSIS chessfs [-verbose] [-addr addr] [-srv srv] [-group gid] chessterm [-font path] [-bg col] [-fg col] player directory uciconnect [-think time] [-wait time] [-player p] -dir game command rc/play [-r] player directory rc/spectate [-r] directory .SH DESCRIPTION Chessfs is a filesystem for playing chess games. It posts a server named after the argument, which by default is "chessfs". Specifying a listening address serves 9p over the announces address, instead of a server, or UNIX socket. The files' username is the one running the program, and the group can be set using the -group option. The filesystem contains three files - .BI "ctl", .BI "clone" and .BI "games". Opening the clone file creates a new game, and the id can be read from the fid. The game can be found under the games directory, as a directory with the game id. Ctl is for reading and setting server options. It displays the maximum amount of games, and the current count of games. Setting roomsize changes the maximum number of games which can be played. In each game directory, there are the .BI "ctl", .BI "white", .BI "black", .BI "moves" and .BI "fen" files. Ctl supports the following commands: .TF "\fLtime seconds\fR" .TP .BI "time " seconds Set the amount of time each player has. The default value is -1 indicating that the game is not timed. .TP .BI "start" Start the game. .TP .BI "close" Close the game, which may or may not have ended. .PD .RE .PP The board files, white and black, show the current pieces' position, depending on the player. Writing to the file makes a move on behalf of the corresponding player. .TF "\fLresign\fR" .TP .BI "draw" Offer a draw, or accept a draw if the other player offered one. .TP .BI "resign" Resign the game. .TP .I "move" Make the following move, following the algebraic notation. .PD .RE .PP For reading the game in the PGN notation, the .BI moves file can be read. .PP The .BI fen file can be used to read the FEN notation of the current game. Additionally, writing to the file, before the game is started, sets the pieces' position. .PP Chessterm is the user interface for the filesystem. It assumes the game is already cloned, and takes as arguments the player (either "black" or "white"), and the game directory. Every half of second the directory is checked and the board is updated. A mouse action, or the pressing the space key on the keyboard, retriggers an update. Mouse button 2 brings up a menu with the option to offer a draw, resign, or start the game. When promoting, the pieces are shown in a menu. The font used is the one either from the .CW font environment variable, or from the argument. Additionally, the background and foreground colors can also be set, based on which the board is drawn. .PP Uciconnect can be used to connect a game directory, with a process serving the UCI protocol via standard input and output. There are two mandatory arguments: the game directory and the command to execute. The .BI -think arguments sets the time the engine is allowed to find a move. Between commands and reads, the program sleeps a duration, which can be set via the .BI -wait option. By default, the engine plays the white player, which can be set with the .BI -player flag. .PP Play is an interactive script which prints the board and game status, and waits for your or your opponent's move. The -r flag transcribes the UTF-8 piece symbols into other symbols, in case the used font doesn't have them. Spectate is a similar script, only printing the board updates. .SH EXAMPLES Run the filesystem: .IP .EX chessfs -srv chessfs -group chessclub mount /srv/chessfs /n/chess .EE .PP Create a new game, set parameters, and play: .IP .EX cd /n/chess cd games/`{cat clone} echo time 1800 >ctl echo start >ctl echo e4 >white sleep 1 echo resign >white .EE .SH SOURCE https://git.disroot.org/kitzman/chessfs https://shithub.us/kitzman/chess/HEAD/info.html .SH BUGS AND TODO Menus don't work with plan9port's devdraw. I have only tested this, once, on a Linux machine. Encrypting connections should be an option. Currently players cannot change the owners of the files. That means anyone can take over the game.