You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.0 KiB
Plaintext
113 lines
2.0 KiB
Plaintext
2 years ago
|
#!/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 *
|
||
|
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}){
|
||
|
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 /me
|
||
|
if(! ~ $talk(2-) ''){
|
||
|
line=`{echo $name $talk(2-)}
|
||
|
echo $line >>/n/chat/$channel
|
||
|
}
|
||
|
case /j
|
||
|
if (~ $talk(2) '')
|
||
|
echo must specify a channel to join
|
||
|
if not if(test -e /n/chat/$talk(2)){
|
||
|
close
|
||
|
channel=$talk(2)
|
||
|
cat /n/chat/$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/chat/$channel
|
||
|
}
|
||
|
}
|
||
|
}
|