Not logged in

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.