shithub: chessfs

ref: 03a1f26a9e4fdd5c7ccaeae9c82e0af4b074db11
dir: /chessfs.4/

View raw version
.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

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 - ctl, clone and 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 ctl, white, black and moves
file. 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 moves files can be read.
.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
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

Encrypting connections should be an option.

Currently players cannot change the owners of the files. That means
anyone can take over the game.