#!/bin/rc # minimal chat client for hubfs: chat [-n NICK] [-j CHANNEL] [chatsrv] fn helpmessage{ echo ------------------------- echo '/q to quit | /c to list channels | /h for help message' echo '/n NICK to change nick | /j CHANNEL to change channels' echo ------------------------- } rfork enf channel=chat chatsrv=chat while (~ $1 -*){ switch($1){ case -n name = $2 shift shift case -j channel = $2 shift shift case * echo bad flag $1 '-n NICK -j CHANNEL' shift } } if(! ~ $1 '') chatsrv=$1 if(! test -e /n/$chatsrv/chat) mount /srv/$chatsrv /n/$chatsrv if(! test -e /n/$chatsrv/chat){ echo 'no chat service named $chatsrv found' >[1=2] exit no.chat } echo ' -- hubchat 0.2 --' helpmessage sleep 2 while(~ $#name 0){ echo 'please enter a chat name:' name=`{read} } echo JOIN $name to $channel >>/n/$chatsrv/$channel cat /n/$chatsrv/$channel & catkill=$apid while(talk=`{read}){ if(~ $talk /*){ switch($talk){ case /q* echo PART $name from $channel >>/n/$chatsrv/$channel @{echo kill>/proc/$catkill/ctl} exit case /n* if(! ~ $talk(2) ''){ echo nick $name ' -> ' $talk(2) >>/n/$chatsrv/$channel name=$talk(2) } if not echo 'you need to provide a nick for /n NICK' command=yes case /j* if (~ $talk(2) '') echo must specify a channel to join if not if(test -e /n/chat/$talk(2)){ echo PART $name from $channel >>/n/$chatsrv/$channel @{echo kill>/proc/$catkill/ctl} channel=$talk(2) cat /n/chat/$channel & catkill=$apid echo JOIN $name to $channel >>/n/$chatsrv/$channel } if not echo channel does not exist command=yes case /h* helpmessage echo currently in $channel echo command=yes case /c echo Available channels: lc /n/$chatsrv echo ------------------- echo currently in $channel echo command=yes case * echo unknown command command=yes } } if(~ $talk '') command=yes if(! ~ $command yes){ # ts=`{date -u} # ts=`{echo '('^$ts(4)^')'} line=`{echo $name ': ' $talk} echo $line >>/n/chat/$channel } command=no }