factor/examples/irc.factor

51 lines
1.0 KiB
Factor
Raw Normal View History

2004-12-07 23:21:32 -05:00
! A simple IRC client written in Factor.
2004-11-09 12:25:13 -05:00
USE: stack
USE: stdio
2004-12-07 23:21:32 -05:00
USE: namespaces
2004-11-09 12:25:13 -05:00
USE: streams
2004-12-07 23:21:32 -05:00
USE: combinators
USE: threads
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
SYMBOL: irc-stream
SYMBOL: channel
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: irc-write ( str -- )
irc-stream get fwrite ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: irc-print ( str -- )
irc-stream get fprint irc-stream get fflush ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: join ( chan -- )
dup channel set "JOIN " irc-write irc-print ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: login ( nick -- )
"NICK " irc-write dup irc-print
"USER " irc-write irc-write
" hostname servername :irc.factor" irc-print ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: connect ( channel nick server -- )
6667 <client> irc-stream set login join ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: in-loop ( -- )
irc-stream get freadln [ print in-loop ] when* ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: say ( input -- )
"PRIVMSG " irc-write
channel get irc-write
" :" irc-write irc-print ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: say-loop ( -- )
read [ say say-loop ] when* ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: disconnect ( -- )
irc-stream get fclose ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: input-thread ( -- )
[ in-loop ] in-thread ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
: irc ( channel nick server -- )
[ connect input-thread say-loop disconnect ] with-scope ;
2004-11-09 12:25:13 -05:00
2004-12-07 23:21:32 -05:00
"#concatenative" "conc" "irc.freenode.net" irc