ref: a84fb85ea760b4bac5228c3706461a29aff38c82
dir: /rc/play/
#!/bin/rc
rfork e
flagfmt='r:transcribe, h:help'
args='player gamedir'
eval `{aux/getflags $*}
player=$1
game=$2
lstat=()
lmsg=()
uppid=()
if(~ $help 1 || ! ~ $#* 2 || ! ~ $player (white black)) {
aux/usage
exit usage
}
board=$game/$player
ctl=$game/ctl
fn prtboard {
if(~ $#transcribe 0) {
cat $board
}
if not {
cat $board | \
sed 's/♙/p/g' | sed 's/♟/q/g' | \
sed 's/♖/ᴙ/g' | sed 's/♜/ᴚ/g' | \
sed 's/♘/N/g' | sed 's/♞/ᴎ/g' | \
sed 's/♗/ᴇ/g' | sed 's/♝/ᴈ/g' | \
sed 's/♕/S/g' | sed 's/♛/Z/g' | \
sed 's/♔/ᴍ/g' | sed 's/♚/ᴡ/g'
}
}
fn status {
gst=`{cat $ctl | sed 1q}
msg=`{cat $ctl | sed 2q | tail -n 1}
wtm=`{cat $ctl | sed 3q | tail -n 1 | awk '{print $3}'}
wtb=`{cat $ctl | sed 4q | tail -n 1 | awk '{print $3}'}
echo $msg ' W' $wtm 'B' $wtb
}
fn shutdown {
echo 'shutting down play script'
echo kill >/proc/$uppid/note
echo 'exiting'
exit
}
fn sighup sigint sigterm{
shutdown
}
oifs=$ifs
while() {
if(! test -f $ctl) {
echo 'ctl file' $ctl 'not found'
exit
}
cstat=`{cat $ctl | sed 1q}
msg=`{cat $ctl | sed 2q | tail -n 1}
if(! ~ $"msg $"lmsg) {
lmsg=$msg
prtboard
status
}
if(! ~ $"cstat $"lstat) {
lstat=$cstat
echo '!!!' $cstat
}
sleep 0.5
} &
uppid=$apid
echo $uppid
sleep 0.5
while(echo -n '> '; ifs=() line=`{read | tr -d \xa}) {
ifs=$oifs
if(! ~ $line '') {
switch($line) {
case start
echo start >$ctl
case time*
if(! ~ $line(1) '') {
echo time $line(1) >$ctl
}
if not {
echo malformed time
}
case /h
echo '/h help'
echo '/p print board'
echo '/q quit'
echo 'start start game'
echo 'time set time'
echo '* move/draw/resign'
prtt=()
case /p
prtboard
status
case /q
shutdown
case *
echo $line >$board
sleep 0.5
}
}
}
shutdown