ref: 5bba44eae97153d0cc3ee5a08d014c9a38a850e4
dir: /gridirc.rc/
#!/bin/rc rfork en test -r /srv/gridircmq || { /usr/sirjofri/src/gridirc/gridircprep } mount /srv/gridircmq /n/chat nick=user user=user prefix=9p.zone joined=false pids=() fn sigint{ for (i in $pids) echo kill>/proc/$i/ctl exit } fn sighup{ for (i in $pids) echo kill>/proc/$i/ctl exit } fn parsed{ echo $* | awk 'NF >= 3 { chan=ENVIRON["currentchannel"] if (length($2) == 1){ sender=$1 $1="" $2="" sub(/^ +/, "") printf ":%s PRIVMSG #%s :%s\n", sender, chan, $0 } else { printf ":%s PRIVMSG #%s :%s\n", chan, chan, $0 } next } { printf ":%s PRIVMSG #%s :%s\n", chan, chan, $0 }' } fn loopread{ currentchannel=$1 while(c=`{read}) parsed $c #echo :$1 PRIVMSG '#'$1 :$"c } fn startread{ { cat /n/chat/$1 | loopread $1 } & pids=($pids $apid) } fn loop{ cmd=`{read} switch($cmd(1)){ case NICK nick=$cmd(2) #echo nick $cmd(2) case USER user=$cmd(2) echo 001 $nick :Welcome $nick!$user@$prefix case JOIN ch=`{echo $cmd(2) | sed 's/^:?#//g'} echo :$nick JOIN '#'^$ch echo 332 '#'^$ch :Channel $ch echo 353 '#'^$ch :$ch $nick echo 366 '#'^$ch :End of NAMES list startread $ch case PRIVMSG ch=`{echo $cmd(2) | sed 's/^#//g'} msg=`{echo $cmd | sed 's/^[^:]*://'} echo $nick → $msg >>/n/chat/$ch^WRITE #echo msg: $msg case PING echo $cmd | sed 's/PING/PONG/' case QUIT for (i in $pids) echo kill>/proc/$i/ctl exit case * #echo ignored } loop } loop