Artifact cc6de47bb7b4cd3e3a24e5d8affc9d8186cbbe67:
File user/crc/irc.retro part of check-in [63f09b7e59] - irc; use vocabularies to control namespace pollution by crc on 2010-06-17 19:46:08. [annotate]
0000: 28 20 52 78 20 74 6f 20 49 52 43 20 42 69 6e 64 ( Rx to IRC Bind
0010: 69 6e 67 73 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ings ~~~~~~~~~~~
0020: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0030: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a ~~~~~~~~~~~~~ ).
0040: 28 20 43 6f 70 79 72 69 67 68 74 20 5b 63 5d 20 ( Copyright [c]
0050: 32 30 31 30 2c 20 43 68 61 72 6c 65 73 20 43 68 2010, Charles Ch
0060: 69 6c 64 65 72 73 20 20 20 20 20 20 20 20 20 20 ilders
0070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0080: 28 20 4c 69 63 65 6e 73 65 3a 20 49 53 43 20 20 ( License: ISC
0090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
00c0: 28 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ( ~~~~~~~~~~~~~~
00d0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
00e0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
00f0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a ~~~~~~~~~~~~~ ).
0100: 28 20 43 6f 6d 6d 61 6e 64 73 3a 20 20 20 20 20 ( Commands:
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0140: 28 20 20 2f 73 65 72 76 65 72 20 73 65 72 76 65 ( /server serve
0150: 72 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20 20 rname
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0180: 28 20 20 2f 6e 69 63 6b 20 6e 69 63 6b 6e 61 6d ( /nick nicknam
0190: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e
01a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
01c0: 28 20 20 2f 77 68 6f 20 69 64 65 6e 74 69 74 79 ( /who identity
01d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0200: 28 20 20 2f 6a 6f 69 6e 20 63 68 61 6e 6e 65 6c ( /join channel
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0240: 28 20 20 73 61 79 20 74 65 78 74 3c 65 73 63 3e ( say text<esc>
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0280: 28 20 20 69 6e 20 63 68 61 6e 6e 65 6c 20 20 20 ( in channel
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
02c0: 28 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ( ~~~~~~~~~~~~~~
02d0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
02e0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
02f0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a ~~~~~~~~~~~~~ ).
0300: 0a 26 6e 65 74 20 6f 70 65 6e 0a 0a 76 6f 63 61 .&net open..voca
0310: 62 20 69 72 63 0a 28 28 0a 20 20 76 6f 63 61 62 b irc.((. vocab
0320: 20 70 72 69 76 61 74 65 0a 20 20 28 28 0a 20 20 private. ((.
0330: 20 20 28 20 44 61 74 61 20 7e 7e 7e 7e 7e 7e 7e ( Data ~~~~~~~
0340: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0350: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0360: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a 20 20 ~~~~~~~~~~~ ).
0370: 20 20 63 72 65 61 74 65 20 63 72 6c 66 20 31 30 create crlf 10
0380: 20 2c 20 31 33 20 2c 20 30 20 2c 0a 20 20 20 20 , 13 , 0 ,.
0390: 32 20 65 6c 65 6d 65 6e 74 73 20 73 6f 63 6b 65 2 elements socke
03a0: 74 20 63 68 61 6e 6e 65 6c 0a 0a 20 20 20 20 28 t channel.. (
03b0: 20 43 6f 64 65 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e Code ~~~~~~~~~~
03c0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
03d0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
03e0: 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a 20 20 20 20 3a ~~~~~~~~ ). :
03f0: 20 73 65 6e 64 20 20 20 20 28 20 24 2d 20 20 29 send ( $- )
0400: 20 40 73 6f 63 6b 65 74 20 6e 65 74 2e 73 65 6e @socket net.sen
0410: 64 20 64 72 6f 70 20 3b 0a 20 20 20 20 3a 20 73 d drop ;. : s
0420: 65 6e 64 6e 20 20 20 28 20 24 2d 20 20 29 20 73 endn ( $- ) s
0430: 65 6e 64 20 63 72 6c 66 20 73 65 6e 64 20 3b 0a end crlf send ;.
0440: 20 20 20 20 3a 20 74 6f 6b 65 6e 20 20 20 28 20 : token (
0450: 22 2d 61 20 29 20 33 32 20 61 63 63 65 70 74 20 "-a ) 32 accept
0460: 74 69 62 20 3b 0a 20 20 20 20 3a 20 72 65 61 64 tib ;. : read
0470: 20 20 20 20 28 20 20 2d 63 20 29 20 40 73 6f 63 ( -c ) @soc
0480: 6b 65 74 20 6e 65 74 2e 72 65 63 76 20 3b 0a 20 ket net.recv ;.
0490: 20 20 20 3a 20 70 6f 6e 67 20 20 20 20 28 20 20 : pong (
04a0: 2d 20 20 29 20 73 22 20 50 4f 4e 47 20 3a 6b 6f - ) s" PONG :ko
04b0: 72 6e 62 6c 75 74 68 2e 66 72 65 65 6e 6f 64 65 rnbluth.freenode
04c0: 2e 6e 65 74 22 20 73 65 6e 64 6e 20 3b 0a 20 20 .net" sendn ;.
04d0: 29 29 0a 0a 20 20 7b 7b 0a 20 20 20 20 3a 20 72 )).. {{. : r
04e0: 20 20 20 20 20 28 20 20 2d 20 20 29 0a 20 20 20 ( - ).
04f0: 20 20 20 72 65 70 65 61 74 20 72 65 61 64 20 64 repeat read d
0500: 75 70 20 31 30 20 3d 20 6f 76 65 72 20 31 33 20 up 10 = over 13
0510: 3d 20 6f 72 20 69 66 3b 20 65 6d 69 74 20 61 67 = or if; emit ag
0520: 61 69 6e 20 3b 0a 20 20 2d 2d 2d 72 65 76 65 61 ain ;. ---revea
0530: 6c 2d 2d 2d 0a 20 20 20 20 3a 20 6c 69 6e 65 20 l---. : line
0540: 20 28 20 20 2d 20 20 29 20 72 20 72 20 70 6f 6e ( - ) r r pon
0550: 67 20 72 65 73 65 74 20 63 72 20 3b 0a 20 20 20 g reset cr ;.
0560: 20 3a 20 6c 69 6e 65 73 20 28 20 6e 2d 20 20 29 : lines ( n- )
0570: 20 66 6f 72 20 6c 69 6e 65 20 6e 65 78 74 20 3b for line next ;
0580: 0a 20 20 20 20 3a 20 73 6b 69 6d 20 20 28 20 22 . : skim ( "
0590: 2d 20 20 29 20 72 65 70 65 61 74 20 6b 65 79 20 - ) repeat key
05a0: 32 37 20 3d 20 69 66 3b 20 6c 69 6e 65 20 61 67 27 = if; line ag
05b0: 61 69 6e 20 3b 0a 20 20 7d 7d 0a 0a 20 20 3a 20 ain ;. }}.. :
05c0: 69 6e 20 20 20 20 20 20 28 20 22 2d 20 20 29 20 in ( "- )
05d0: 74 6f 6b 65 6e 20 6b 65 65 70 53 74 72 69 6e 67 token keepString
05e0: 20 21 63 68 61 6e 6e 65 6c 20 3b 0a 20 20 7b 7b !channel ;. {{
05f0: 0a 20 20 20 20 3a 20 74 6f 20 20 20 20 28 20 20 . : to (
0600: 2d 20 20 29 20 73 22 20 50 52 49 56 4d 53 47 20 - ) s" PRIVMSG
0610: 22 20 73 65 6e 64 20 40 63 68 61 6e 6e 65 6c 20 " send @channel
0620: 73 65 6e 64 20 73 22 20 20 3a 22 20 73 65 6e 64 send s" :" send
0630: 20 3b 0a 20 20 20 20 3a 20 6d 73 67 20 20 20 28 ;. : msg (
0640: 20 22 2d 20 20 29 20 32 37 20 61 63 63 65 70 74 "- ) 27 accept
0650: 20 74 69 62 20 73 65 6e 64 6e 20 3b 0a 20 20 2d tib sendn ;. -
0660: 2d 2d 72 65 76 65 61 6c 2d 2d 2d 0a 20 20 20 20 --reveal---.
0670: 3a 20 73 61 79 20 20 20 28 20 22 2d 20 20 29 20 : say ( "- )
0680: 74 6f 20 6d 73 67 20 70 6f 6e 67 20 3b 0a 20 20 to msg pong ;.
0690: 7d 7d 0a 0a 20 20 3a 20 2f 73 65 72 76 65 72 20 }}.. : /server
06a0: 28 20 22 2d 20 20 29 0a 20 20 20 20 74 6f 6b 65 ( "- ). toke
06b0: 6e 20 36 36 36 37 20 6e 65 74 2e 73 6f 63 6b 65 n 6667 net.socke
06c0: 74 20 64 75 70 20 21 73 6f 63 6b 65 74 20 6e 65 t dup !socket ne
06d0: 74 2e 63 6f 6e 6e 65 63 74 20 64 72 6f 70 20 3b t.connect drop ;
06e0: 0a 20 20 3a 20 2f 6e 69 63 6b 20 20 20 28 20 22 . : /nick ( "
06f0: 2d 20 20 29 20 20 73 22 20 4e 49 43 4b 20 22 20 - ) s" NICK "
0700: 73 65 6e 64 20 74 6f 6b 65 6e 20 73 65 6e 64 6e send token sendn
0710: 20 3b 0a 20 20 3a 20 2f 6a 6f 69 6e 20 20 20 28 ;. : /join (
0720: 20 22 2d 20 20 29 20 20 73 22 20 4a 4f 49 4e 20 "- ) s" JOIN
0730: 22 20 73 65 6e 64 20 74 6f 6b 65 6e 20 73 65 6e " send token sen
0740: 64 6e 20 3b 0a 20 20 7b 7b 0a 20 20 20 20 3a 20 dn ;. {{. :
0750: 77 68 6f 20 20 20 28 20 22 2d 20 20 29 20 20 73 who ( "- ) s
0760: 22 20 55 53 45 52 20 22 20 73 65 6e 64 20 74 6f " USER " send to
0770: 6b 65 6e 20 73 65 6e 64 20 3b 0a 20 20 20 20 3a ken send ;. :
0780: 20 69 64 65 6e 74 20 28 20 20 2d 20 20 29 20 20 ident ( - )
0790: 73 22 20 20 38 20 2a 20 20 3a 20 43 68 61 72 6c s" 8 * : Charl
07a0: 65 73 20 43 68 69 6c 64 65 72 73 22 20 73 65 6e es Childers" sen
07b0: 64 6e 20 3b 0a 20 20 2d 2d 2d 72 65 76 65 61 6c dn ;. ---reveal
07c0: 2d 2d 2d 0a 20 20 20 20 3a 20 2f 75 73 65 72 20 ---. : /user
07d0: 28 20 22 2d 20 20 29 20 20 77 68 6f 20 69 64 65 ( "- ) who ide
07e0: 6e 74 20 3b 0a 20 20 7d 7d 0a 20 20 26 70 72 69 nt ;. }}. &pri
07f0: 76 61 74 65 20 73 68 75 74 0a 29 29 0a 0a 0a 28 vate shut.))...(
0800: 20 4d 61 6b 65 20 43 6f 6e 6e 65 63 74 69 6f 6e Make Connection
0810: 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~
0820: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0830: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a 2f ~~~~~~~~~~~~ )./
0840: 73 65 72 76 65 72 20 6b 6f 72 6e 62 6c 75 74 68 server kornbluth
0850: 2e 66 72 65 65 6e 6f 64 65 2e 6e 65 74 0a 2f 6e .freenode.net./n
0860: 69 63 6b 20 72 78 2d 69 72 63 0a 2f 75 73 65 72 ick rx-irc./user
0870: 20 63 72 63 0a 2f 6a 6f 69 6e 20 23 72 65 74 72 crc./join #retr
0880: 6f 0a 69 6e 20 23 72 65 74 72 6f 0a o.in #retro.