ref: 470f19bc73180395683aa1e14c96ea3c2d3a828f
dir: /rc/replay/
#!/bin/rc
rfork e
flagfmt='s sleepamt, k skip, f fen, d delay, c:close, h:help'
args='chessdir'
eval `{aux/getflags $*}
chessdir=$1
gameid=()
gamedir=()
player=white
if(~ $help 1 || ! ~ $#* 1) {
aux/usage
exit usage
}
if(~ $#sleepamt 0)
sleepamt=1.5
if(~ $#delay 0)
delay=10
fn sighup sigint sigterm{
exit
}
# create game
gameid=`{cat $chessdir/clone}
gamedir=$chessdir/games/$gameid
if(~ $#gameid 0)
exit clone
echo 'created game' $gameid
# load fen if necessary
if(! ~ $#fen 0) {
echo $"fen >$chessdir/fen
if(! ~ $#status 0) {
echo 'unable to load fen'
exit fen
}
echo 'loaded FEN'
}
# start player process
echo 'starting game in 5 seconds'
sleep $delay
oifs=$ifs
line=()
finished=()
echo start >$gamedir/ctl
echo 'game started'
while(line=`{read | tr -d \xa} && ! ~ $line 1.*) {}
while(~ $#finished 0) {
for(i in `{seq 1 $#line}) {
move=$line($i)
if(! ~ $move *.) {
echo $player 'plays' $move
echo $move >$gamedir/$player
switch($player) {
case white
player=black
case black
player=white
}
sleep $sleepamt
}
}
line=`{read | tr -d \xa}
if(! ~ $#status 0)
finished=yes
}
echo 'replay finished'
ifs=$oifs
rm /env/oifs
rm /env/chessdir
rm /env/gameid
rm /env/gamedir
rm /env/player
rm /env/line
rm /env/finished
if(! ~ $#close 0) {
echo 'closing game'
echo close >$gamedir/ctl
}