shithub: gridchat

ref: 4ed833284a1ef29cf1957a0dd63191e84ef2b62e
dir: gridchat/chat

View raw version
#!/bin/rc
# minimal chat client for hubfs: chat [-n NICK] [-j CHANNEL] [chatsrv]
# dd -bs `{du -n /n/chat/chat | sed 's/ .*//'} -skip 1 -if /n/chat/chat
rfork enf

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 -------------------------
}

fn close{
	echo PART $name from $channel >>/n/$chatsrv/$channel
	@{echo kill>/proc/$catkill/ctl}
}

fn shutdown{
	close
	exit
}

fn sighup{
	shutdown
}

fn sigint{
	shutdown
}

channel=chat
chatsrv=chat
while (~ $1 -*){
	switch($1){
	case -n
		name = $2
		shift 2
	case -j
		channel = $2
		shift 2
	case -s
		chatsrv = $2
		shift 2
	case *
		echo bad flag $1 '-n NICK -j CHANNEL'
		shift
	}
}
if(! ~ $1 '')
	chatsrv=$1
if(! test -e /n/$chatsrv/ctl)
	mount /srv/$chatsrv /n/$chatsrv
if(! test -e /n/$chatsrv/ctl){
	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

$home/bin/$objtype/chat-fmt </n/$chatsrv/$channel &
catkill=$apid

while(talk=`{read}){
	switch($talk(1)){
	case /q
		shutdown
	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'
	case /j
		if (~ $talk(2) '')
			echo must specify a channel to join
		if not if(test -e /n/$chatsrv/$talk(2)){
			close
			channel=$talk(2)
			cat /n/$chatsrv/$channel &
			catkill=$apid
			echo JOIN $name to $channel >>/n/$chatsrv/$channel
		}
		if not
			echo channel does not exist
	case /h
		helpmessage
		echo currently in $channel
		echo
	case /c
		echo Available channels:
		lc /n/$chatsrv
		echo -------------------
		echo currently in $channel
		echo
	case *
#		ts=`{date -u}
#		ts=`{echo '('^$ts(4)^')'}
		if(! ~ $talk ''){
			line=`{echo $name '→ ' $talk}
			echo $line >>/n/$chatsrv/$channel
		}
	}
}