Filewatcher File Search
FTP Search
  
Directory 
  
Content Search 
   
pkg://zipper101a.tgz:105944/zippera1.tgz  downloads

CHANGES100644    765      0         701  6421414435  10475 0ustar  wolfieroot10/14/97
	Zipper! Version 1.0a  released to general public.

10/15/97 	
	Added Color coding to Server Events
	Added support for channel directed CTCP Events
	Fixed Alias substitution that prevent paramaters
	from being passed to remainder of a multiple command
	alias.

10/16/97
	Added About menu which had been accidentally removed 
	during previous development session.
	CTCP Format changed.  Added support for CTCP Events
	directed at a channel.
FEATURES100644    765      0       20546  6420435157  10717 0ustar  wolfierootCurrent Features present in Zipper! as of 09/30/97

IRC Commands Supported:

	/action		: send an action to a channel
	/alias 		: create command aliases 
	/ban   		: ban a user from a channel
	/chat  		: initiate a DCC chat with another user
	/clone 		: create a clone of zipper to connect to another server
	/ctcp  		: send a CTCP message to another user
	/describe	: sends a /action to a user
	/disconnect	: disconnects you from and IRC server
	/echo		: echo a string to the server window
	/edit		: edit system settings
	/ignore		: ignore a user
	/irccommand	: execute a string as an IRC command
	/join 		: join a channel
	/kick		: kick a user from a channel
	/list		: get a channel list from the IRC server
	/load		: load customized settings
	/me		: a synonym for /action
	/mode		: set user/channel modes
	/modify		: activate list editing
	/msg		: send a private message to another user
	/names		: get a list of nicks on a channel
	/nick		: change your nickname
	/notice		: send a notice
	/notify		: add or remove a notify list entry
	/part		: leave a channel
	/play		: play a file to a channel (unimplemented)
	/query		: open a private message window for another user
	/quit		: exit IRC
	/quote		: send a string directly to the server
	/recycle	: reload the current user settings
	/rctcp		: generate a CTCP reply string
	/save		: save current settings
	/say		: send a message to a window as if typed
	/server		: change servers
	/send		: send a file to someone via DCC
	/set		: set a user variable
	/topic		: set the channel topic
	/whois		: get information about a user
	/who		: get a list of users

	There are also a number of alias predefined for some of these commands.  Issue a "/alias"
	command to see the current list OR "/edit alias" will also work.


Unsupported or Unlisted Commands:

	IRC commands which are not listed may or may not be fully supported depending on the 
	nature of the command.  The command processor attempts to locate the command internally,
	failing that, it looks for and alias, failing that, the command is passed directly
	to the server as-is.


	
User List
	
	Zipper! supports the notion of leveled users.  That is a user may be assigned a certain
	level and as such may be entitled to priviledges encoded within Zipper!  Users are 
	defined by a level and a user@host type notation that conforms to the user@host system
	in use by the IRC servers.

Server List

	Zipper! currently supports a small server list comprised of the the server name and port 
	number.  Grouping may be added later

Channel List

	Zipper! supports a user definable "frequent" channels list.

Notify List

	Zipper! supports a user definable notify list which can be accessed by either the /notify
	command or by the notify list editor.

Ignore List
	Zipper! supporst an ignore list system that is accessible via the /ignore command
	or the ignore list editor.  The ignore list supports variable ignorance...meaning
	that you can selectively the messages a user sends.  Ignore supports channel, private
	message, notice and CTCP messages.



CTCP
	CTCP's are implemented as a COMPLETELY user definable system.  Normal CTCP events are
	already included with the default resource files.
	The CTCP system is accessible via the CTCP editor.  CTCP's support user level,
	and Nickname triggering.  

	Once triggered an action is executed.
	Action which are listed as #internal are handled by code within Zipper!

Events

	Zipper! supports IRC server event triggering.  Events like CTCP's are user definable.
	Currently Zipper! supports the following events:

		ban		: a user gets banned from the channel
		chanmsg		: any message is sent to a channel
		deop		: someone is De-Opped
		join		: someone joins a channel
		kick		: someone is kicked from a channel
		part		: someone leaves a channel
		mode		: a channel mode is changed
		nick		: a nickname is changed
		notify		: someone on your notify list joins IRC
		op		: somone is opped
		privmsg 	: you get a private message
		quit		: someone quits IRC
		topic		: a channel topic is changed
		unban		: someone is unbanned from a channel

	When the events are triggered, the following information (if applicaple) is made available:
		
		User Level 	: the level of the user triggering the event
		Channel		: the channel where the event was triggered
		Nick/User	: the nickname/userhost of the user triggering the event
		target		: the target of the event



Script Actions (For Alias, CTCP, Event)

	Actions support variable and function substition.
	Actions also support multiple commands per LINE separated by " ; "

	A script action is any irc command or commands (/command)
	Actions may contain variable information or information obtained
	by executing functions.

	There are 2 types of variables, system variables, and user variables.
	System variables are those which are made available as IRC runs and 
	contain various informtation about who set off CTCPs Events and so 
	forth.  They also are used to access parameters given by the user, or
	by triggered commands.  They are accessed by using the "-$name" notation.

	User varibles are created and set by the user as IRC is running and
	are independent of ANY other variables.  They are accessed by using the 
	"-%name" notation.


	A set of simple functions are included to make things easier.  Zipper! 
	however is intended not to include a rich set of internal functions, but
	rather to make functions available by using external scripts and programs.
	included are a few TCL scripts to perform some useful and some useless
	functions, but mainly are for use a guide.  They are accessed by using the
	"-@" notation.


	Current System Variable List:
	
		fromchannel	: channel triggered from
		fromnick	: nickname of user that caused trigger
		fromuser	: userhost of user that caused trigger
		hostname	: your host name
		ip		: your IP address
		level		: level of user that caused trigger
		line		: all paramaters associated with a trigger
		myuserhost	: my user@host
		nick		: my nickname
		parm1-6		: user or triggered parameters
		port		: server port
		realname	: my realname
		server		: IRC server
		username	: my username
		version		: Zipper! version
	
		In normal aliases, CTCP's, and events, fromchannel, fromnick, level, parm1-6 are
		generally the only variables needed.

		In the case of events, parm1-6 is generally additional information other
		than the identity and location of the person that triggered the event.
	
		In cases where there is a target, the target(s) will be contained in the "parm(s)"
		
		In the case of aliases, parm1-6 is defined by the user on the command line
		
		In the case of CTCP's, parm1-6 contain the first 6 words of the CTCP command $line
		can be used to access ALL of the words and to send them to an external
		program if they are needed.


		Note that the 6 parameter limitation MAY be removed in the future if warranted.




	Current System Functions:

		add 		: add 2 numbers or variables together
		chanlist	: retrieve the list of people currently on a channel
		level		: get the level of a user
		none		: do nothing
		rtime		: get the time in CTCP PING format
		run		: run an external program and return its result
		sub		: subtract 2 numbers or variables
		time		: return the current time




	Special Notes on functions, scripts, and variables:

		ALL variables must be "clean."  That is there must be at least 1 space
		both before and after the variable name.  This is because of the method
		used for processing commands.  

		ALL functions must be "clean" of whitespace.  This means that you cannot
		embed spaces or into functions at this time.   This limitation may be
		removed in the future.  As a work-around, you can "/set" a variable
		first, then send it into the function.	


DCC CHAT and SEND

	Zipper! includes the ability to perform DCC CHAT and File Transfers.  
	The CHAT option is integrated (almost) fully into the standard window
	system.  DCC File transfers are actually handled by external programs,
	but are still fully functional.  Zipper! does not at this time
	support the mIRC RESUME feature.  The transfer system still needs
	to be cleaned up a bit in its display, otherwise it should work
	fine.


Channel Activity Indicator

	The "windows" list in the Main Server Window, will indicate when
	there has been activity in a window that is minimized or is not
	currently focused on.  The ">" before a window indicates that there
	is a new message waiting there. Also any minimized windows that
	have waiting messages will indicate this by the icon image.
INSTALL.txt100644    765      0         407  6420706620  11353 0ustar  wolfierootZipper!  NEEDS TCL/TK 7.6/4.2 or greater!  
Please do not attempt to install without this as
it will not work.


To install Zipper! simply untar the archive, and
type "install pathname" where pathname is the
absolute path where you wish install the zipper
files.
README100644    765      0       10167  6421466245  10437 0ustar  wolfierootWelcome to Zipper Alpha 1!

Get the MOST CURRENT version from my website:
	http://users.vnet.net/ashman/zipper


Intro and Errata.

This software is COPYRIGHT 1997 Ashley R. Bowers.  It is not Public Domain,
but you can use it freely, and give it away, as long as you preserve the
entire archive as is AND you do not distribute any changes that you might
make.

Zipper is a IRC client written primarily in TCL/TK and with a little help
from "C" every now and then.  Zipper was started by me as project to help
me learn TCL/Tk and also because i wanted an IRC client for X-windows that
worked the way I wanted it too.  It is not intended to compete with the
existing clients, but rather as an alternative.


Zipper currently is still missing a bit of functionality as far
as recognizing IRC server messages.  There are also still quite a few
bugs present.  Remember, this is ALPHA software.  There are NO warranties
either expressed or implied!  


At the current time it is relatively stable and i have used it on a 
regular basis to connect to EFNet servers.  It still crashes once in 
a while but those time are becoming less and less.



Anyone that would like to tackle some of the bugs that you may encounter,
feel free to do so, but please email me with the fix so that it can be 
incorporated into the distribution.  Full credit for working fixes and
useful additions that are added to the archive will be given.


Installation

Installing Zipper! is a simple matter.  You need 2 files.  The "install" shell
script and the zipper*.tgz file.  Running "install <directory>" where
<directory> is where you want to install zipper, will take care of almost 
everthing for you!  The only other thing you need to do is add Zipper!'s
directory to your path.  Please note that for some reason Zipper! does
not want to fully recognize the new path, unless you log off and then
log on.


Zipper!

Ok, you are probably asking by now what Zipper! stands for.  Well to 
answer that question in one word: Nothing.  I needed a name, a cute 
catchy name, and Zipper! stuck in my head.  It seems like that are
ton of other IRC clients that want to be cute and have "irc" somewhere
in there name.  Well not so here!!  :)

Zipper uses a simple point click and type interface.  It functions in a 
similar fashion the windows clients mIRC and Pirch.  Currently only single
server connections are supported, although it is possible to clone
multiple client processes.

Zipper has working notify, ignore, dcc chat, dcc send and 
receive, and a variety of useful irc commands (see customrc for currently
supported commands).  The standard ircII slash ("/") command syntax is/will
be supported.


Coming soon 

BETTER HELP :)  
I will be adding more server message support and more IRCII commands.  
Server event handling
better alias support with multiple irc commands per line
support for executing custom TCL scripts outside of the main program. (in progress)



Installation


To install Zipper! untar the archive into an empty directory, then type
"install".  You will now be prompted for the directory in which zipper is
to permanently reside.  Once you hit enter, the files will be installed
into the appropriate directory.  If you later decide to move the files, then
you will need to reinstall zipper, or manually edit the paths in the files.
Once the files are copied, the Zipper! resource files will be installed into
your home directory.  They are installed in a hidden subdirectory, but are 
needed in order for Zipper! to be used by multiple people.

Now just be sure Zipper! is in your path, and type the command "zipper".  If
all goes well, the main Zipper! window should appear.


Current Features

Please see the file FEATURES for this information.



End Stuff


Well, i know this program is not as good as it could be and has a number
of annoying problems which will hopefully be fixed.  But use it and enjoy
it if you can, and let me know if you like it, or what might make it better,
or if there is just something you really don't like about it.

I want honest criticism, both good and bad, but please don't flame the program.
Send those to alt.flame, or /dev/null.


Thanks a Bunch!

Ash Bowers
wolfie@vnet.net
a.out100755    765      0        7644  6377365116  10526 0ustar  wolfierootELFЃ4č4 (44€4€  ÔԀԀ€€••źŔDD•D•ˆˆ/lib/ld-linux.so.1

	xƒ("D•ń˙•%`ƒ+ˆƒF7• ?̕M…
S˜ƒ4Z$•ń˙p¨ƒ€u¸ƒ>€ô„ń˙‡Ě•ń˙ŽĚ•ń˙šĐ•ń˙libc.so.5printf_DYNAMIC__environ_init__libc_initenviron__fpu_control_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucw_etext_edata__bss_start_end̕0•4•8•	<•@•čkÂ˙5(•˙%,•˙%0•héŕ˙˙˙˙%4•héĐ˙˙˙˙%8•héŔ˙˙˙˙%<•hé°˙˙˙˙%@•h é ˙˙˙Y‰ă‰ŕ‰ĘŇŇЃŔ1íUUU‰ĺPSQ¸ˆťÍ€‹D$Ł•ˇ̕PčŹ˙˙˙ƒÄčt˙˙˙h…čz˙˙˙ƒÄč:˙˙˙čUPčw˙˙˙[´&´&¸̀ë÷´&Sť •ƒ= •t
‹˙ЃĂƒ;uô[Í6АU‰ĺƒěÇEüƒ}ü~ë*v´&‹EüP‹EüPh…čĆţ˙˙ƒÄ˙Eüëԍś‰ě]АSť•ƒ=•˙t
‹˙ЃĂüƒ;˙uô[Í6АčK˙˙˙Â%c:%d
˙˙˙˙˙˙˙˙D•~ƒŽƒžƒރžƒ`ƒ
…č€ˆ‚x
Ÿ$•(0ƒ(ƒ01.0101.0101.01GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.0GCC: (GNU) 2.7.2.l.3.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.note.commentԀÔ#č€č)xx1ˆ‚ˆŸ9	(ƒ(B	0ƒ0(K`ƒ`Qhƒh`VЃĐ$\…b…j•p•w•~$•$ ƒD•DˆŒ̕Ě‘Ě<—>F €
Ŕ)	@d	

ń˙Є	Є	1•
>đ„	I•W •dń˙k@„	ń˙P„	pP„	†•”p„	I•Ÿ•
­ń˙€„	ľxƒ("źD•ń˙Ĺô„ń˙Ě•Ö`ƒ܈ƒFč• đ̕ţЃ€	Ѓ	̕ń˙ €„D	%…
+˜ƒ42̕ń˙9$•ń˙OЕń˙T¨ƒ€Y¸ƒ>crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__chars.cprintf_DYNAMIC_etext__environ_init__libc_initenviron__fpu_control_start___crt_dummy____bss_startmain_finiatexit_edata_GLOBAL_OFFSET_TABLE__endexit__setfpucwadd.tcl100755    765      0         315  6401302425  10733 0ustar  wolfieroot#!/usr/local/bin/tclsh
#
#
set x 0
set y 0
set z 0

foreach item $argv {
	
	if [string compare "" [lindex $argv $y]] {
		set  z [lindex $argv $y]
		set  x [expr $x+$z]
	}
	incr y

}
puts stdout "/echo $x"
aliasrc100644    765      0         543  6420703235  11045 0ustar  wolfieroot#aliases
#
#use the form alias name /command    
#
# 
j /join -$parm1
q /quit Leaving! Later!
k /kick # -$parm1
n /notice -$line
whowas /quote whowas -$parm1 -$parm2
dcc /echo Use /send or /chat instead instead of /dcc
dis /disconnect
ping /ctcp -$parm1 PING
mod /modify -$parm1
pn /echo -@run,tclping
banlist /mode -$parm1 +b
myip /echo IP Address: -$ip
channelsrc100644    765      0           1  6420703252  11473 0ustar  wolfieroot
clicks.tcl100644    765      0       30425  6421415156  11525 0ustar  wolfierootpackage provide clicks 1.0


proc leave_chan_button {w} {
        global winlist
        global esvrSock

}                               

proc open_irc_connection {} {
# open the connection to the IRC server...
global esvrSock
global server
global port
global serveractive
global username
global hostname
global realname
global nick
global notify

set nicklogin "NICK $nick"
set userlogin "USER $username $hostname $server :$realname"


send_to_window server "\002\0035,8Connecting to IRC server $server:$port...\n\n"
set esvrSock ""
set esvrSock [socket $server $port]

# Setup monitoring on the socket so that when there is data to be 
# read the proc "read_sock" is called
fileevent $esvrSock readable [list read_sock $esvrSock]

# configure channel modes
# ensure the socket is line buffered so we can get a line of text 
# at a time (Cos thats what the server expects)...
# Depending on your needs you may also want this unbuffered so 
# you don't block in reading a chunk larger than has been fed 
#  into the socket
fconfigure $esvrSock  -buffering line


puts $esvrSock $nicklogin
puts $esvrSock $userlogin
set serveractive 1
wm title .zipperserver "$nick on server $server  port: $port"
.zipperserver.controls.connect configure -state disabled
.zipperserver.controls.disconnect configure -state normal


puts $esvrSock "ISON $notify"
check_notify
}                     


proc modify_notify {} {
        global notify

        if [winfo exists ".zipperpernotify"] {
                raise .zipperpernotify
                focus .zipperpernotify.box.list

        } else {
          new_pers_notify
        }

        .zipperpernotify.box.list delete 0 end
	set notify [lsort  -command customsort $notify] 
        foreach name $notify {
                .zipperpernotify.box.list insert end $name

        }

}


proc notify_add {} {

        global notify

        set name [.zipperpernotify.box.name get]
        fake_user_in "/notify $name"
        .zipperpernotify.box.name delete 0 end

        .zipperpernotify.box.list delete 0 end
        foreach name $notify {
                .zipperpernotify.box.list insert end $name

        }
}
proc notify_del {} {

        global notify

        set name [.zipperpernotify.box.list get active]
        fake_user_in "/notify $name"

        .zipperpernotify.box.list delete 0 end
        foreach name $notify {
                .zipperpernotify.box.list insert end $name

        }
}                 
proc modify_channels {} {
        global channels

        if [winfo exists ".zipperperchan"] {
                raise .zipperperchan
                focus .zipperperchan.box.list

        } else {
          new_pers_channel
        }

        .zipperperchan.box.list delete 0 end
	set channels [lsort -command customsort $channels]
        foreach name $channels {
                .zipperperchan.box.list insert end $name

        }

}

proc modify_events {} {
        global eventlist

        if [winfo exists ".zipperevents"] {
                raise .zipperevents
                focus .zipperevents.box.list

        } else {
          new_event_list
        }

        .zipperevents.box.list delete 0 end
	set eventlist [lsort -command customsort $eventlist]
        foreach name $eventlist {
                .zipperevents.box.list insert end $name

        }

}     
proc modify_ctcps {} {
        global ctcp_message

        if [winfo exists ".zipperctcps"] {
                raise .zipperctcps
                focus .zipperctcps.box.list

        } else {
          new_ctcp_list
        }

        .zipperctcps.box.list delete 0 end
	set ctcp_message [lsort  -command customsort $ctcp_message] 
        foreach name $ctcp_message {
                .zipperctcps.box.list insert end $name

        }
	
}

proc modify_users {} {
        global userlist

        if [winfo exists ".zipperusers"] {
                raise .zipperusers
                focus .zipperusers.box.list

        } else {
          new_user_list
        }

        .zipperusers.box.list delete 0 end
	set userlist [lsort -command customsort $userlist]
        foreach name $userlist {
                .zipperusers.box.list insert end $name

        }

}          
              
proc channel_add {} {

        set name [.zipperperchan.box.name get]
        .zipperperchan.box.list insert end $name

}
proc channel_del {} {

        .zipperperchan.box.list delete active
}
proc channel_join {} {

        set channel [.zipperperchan.box.list get active]
        fake_user_in "/join $channel"
}
proc channel_names {} {

        set channel [.zipperperchan.box.list get active]
        fake_user_in "/names $channel"
}

proc channel_done {} {
        global channels

        set channels ""

        set chanlist [.zipperperchan.box.list get 0 end]
        foreach chan $chanlist {
                set channels [linsert $channels end $chan]
        }
        fake_user_in "/save channels"
        destroy .zipperperchan
}                               

proc modify_servers {} {
        global servers

        if [winfo exists ".zipperperserv"] {
                raise .zipperperserv
                focus .zipperperserv.box.list

        } else {
          new_pers_server
        }

        .zipperperserv.box.list delete 0 end
	set servers [lsort -command customsort $servers]
        foreach name $servers {
                .zipperperserv.box.list insert end $name

        }

}
proc server_add {} {
	set name ""
	set port ""

        set name [.zipperperserv.box.name get]
	set port [.zipperperserv.box.port get]
	
	if ![string compare $name ""] {
		return
	}
	if ![string compare $port ""] {
		set port 6667
	}

	set name "$name:$port"	
        .zipperperserv.box.list insert end $name

}
proc server_del {} {

        .zipperperserv.box.list delete active
}
proc server_connect {} {

        set serv [.zipperperserv.box.list get active]
        set tmplist [split $serv ":"]
        set serv [lindex $tmplist 0]
        set sport [lindex $tmplist 1]

        fake_user_in "/disconnect"
        fake_user_in "/server $serv $sport"
}
proc server_done {} {
        global servers

        set servers ""

        set servlist [.zipperperserv.box.list get 0 end]
        foreach serv $servlist {
                set servers [linsert $servers end $serv]
        }
        fake_user_in "/save servers"
        destroy .zipperperserv
}   

proc modify_ignore {} {
        global ignore
        if [winfo exists ".zipperperig"] {
                raise .zipperperig
                focus .zipperperig.box.list

        } else {
          new_pers_ignore
        }

        .zipperperig.box.list delete 0 end
	set ignore [lsort -command customsort $ignore]
        foreach name $ignore {
                .zipperperig.box.list insert end $name

        }

}
proc ignore_add {} {

        set name [.zipperperig.box.name get]
        .zipperperig.box.list insert end $name

}
proc ignore_del {} {

        .zipperperig.box.list delete active
}
proc ignore_upd {} {
	global ignoreindex
	
	if [expr $ignoreindex < 0 ] {return}
	.zipperperig.box.list delete $ignoreindex $ignoreindex
	ignore_add
	set ignoreindex -1



}
proc ignore_done {} {
        global ignore
        set ignore ""

        set iglist [.zipperperig.box.list get 0 end]
        foreach ig $iglist {
                set ignore [linsert $ignore end $ig]
        }
        fake_user_in "/save ignore"
        destroy .zipperperig
}


proc user_add {} {

	set name ""
	set level 0

        set name [.zipperusers.box.name get]
	set level [.zipperusers.box.level get]
	set options [.zipperusers.box.options get]
	if ![string compare $name ""] {
		return
	}
	if ![string compare $level ""] {
		set level 0
	}

	set name "$level:$name:$options"	
        .zipperusers.box.list insert end $name

}
proc user_del {} {

        .zipperusers.box.list delete active
}

proc user_upd {} {
	global userindex
	if [expr $userindex < 0 ] {return}
	.zipperusers.box.list delete $userindex $userindex
	user_add
	set userindex -1

}
proc user_done {} {
        global userlist
        set userlist ""

        set ulist [.zipperusers.box.list get 0 end]
        foreach user $ulist {
                set userlist [linsert $userlist end $user]
        }
        fake_user_in "/save users"
        destroy .zipperusers
}                          

proc ctcp_add {} {
	set level ""
	set type ""
	set nick ""
	set channel ""
	set action ""

        set level [.zipperctcps.f1.level get]
        set type [string toupper [.zipperctcps.f1.type get]]
        set nick [.zipperctcps.f1.nick get]
        set channel [.zipperctcps.f1.channel get]
        set action [.zipperctcps.f1.action get]

	if ![string compare $level ""] {
		set level 0
	}
	if ![string compare $type ""] {
		return
	}
	if ![string compare $nick ""] {
		set nick "*"
	}
	if ![string compare $channel ""] {
		set channel "*"
	}
	if ![string compare $action ""] {
		return
	}


	set name "$level:$type:$nick:$channel:$action"
        .zipperctcps.box.list insert end $name

}
proc ctcp_del {} {

        .zipperctcps.box.list delete active
}
proc ctcp_upd {} {

	global ctcpindex
	if [expr $ctcpindex < 0 ] {return}
	.zipperctcps.box.list delete $ctcpindex $ctcpindex
	ctcp_add
	set ctcpindex -1
}

proc ctcp_done {} {
        global ctcp_message
        set ctcp_message ""

        set elist [.zipperctcps.box.list get 0 end]
        foreach ctcp $elist {
                set ctcp_message [linsert $ctcp_message end $ctcp]
        }
        fake_user_in "/save ctcp"
        destroy .zipperctcps
}                                              
proc event_add {} {
	set level ""
	set type ""
	set nick ""
	set chan ""
	set action ""

        set level [.zipperevents.f1.level get]
        set type [string toupper [.zipperevents.f1.type get]]
        set nick [.zipperevents.f1.nick get]
        set chan [.zipperevents.f1.channel get]
        set action [.zipperevents.f1.action get]

	if ![string compare $level ""] {
		set level 0
	}
	if ![string compare $type ""] {
		return
	}
	if ![string compare $nick ""] {
		set nick "*"
	}
	if ![string compare $chan ""] {
		set chan "*"
	}
	if ![string compare $action ""] {
		return
	}


	set name "$level:$type:$nick:$chan:$action"
        .zipperevents.box.list insert end $name

}
proc event_del {} {

        .zipperevents.box.list delete active
}
proc event_upd {} {
	global eventindex
	if [expr $eventindex <  0 ] {return}
	.zipperevents.box.list delete $eventindex $eventindex
	event_add
	set eventindex -1
}
proc event_done {} {
        global eventlist
        set eventlist ""

        set elist [.zipperevents.box.list get 0 end]
        foreach event $elist {
                set eventlist [linsert $eventlist end $event]
        }
        fake_user_in "/save events"
        destroy .zipperevents
}



proc load_ignore_edit {} {
	set w .zipperperig.box.list	
	set z .zipperperig.box
	set x [$w get active]
	set x [split $x ":"]
	set name [lindex  $x  0] 

	$z.name delete 0 end
	$z.name insert end $name

}
proc load_ctcp_edit {} {
	set w .zipperctcps.box.list	
	set z .zipperctcps.f1
	set x [$w get active]
	set x [split $x ":"]
	set level [lindex $x 0]
	set type  [lindex  $x  1] 
	set nick [lindex  $x  2] 
	set channel [lindex  $x  3] 
	set action [lindex $x 4] 

	$z.level delete 0 end
	$z.level insert end $level	

	$z.type delete 0 end
	$z.type insert end $type

	$z.nick delete 0 end
	$z.nick insert end $nick	

	$z.channel delete 0 end
	$z.channel insert end $channel

	$z.action delete 0 end
	$z.action insert end $action	
}
proc load_event_edit {} {
	set w .zipperevents.box.list	
	set z .zipperevents.f1
	set x [$w get active]
	set x [split $x ":"]
	set level [lindex $x 0]
	set type  [lindex  $x  1] 
	set nick [lindex  $x  2] 
	set channel [lindex $x 3] 
	set action [lindex $x 4] 

	$z.level delete 0 end
	$z.level insert end $level	

	$z.type delete 0 end
	$z.type insert end $type

	$z.nick delete 0 end
	$z.nick insert end $nick	

	$z.channel delete 0 end
	$z.channel insert end $channel	

	$z.action delete 0 end
	$z.action insert end $action	
}
proc load_user_edit {} {
	set w .zipperusers.box.list	
	set z .zipperusers.box
	set x [$w get active]
	set x [split $x ":"]
	set level [lindex $x 0]
	set nick [lindex  $x  1] 

	$z.level delete 0 end
	$z.level insert end $level	

	$z.name delete 0 end
	$z.name insert end $nick	

}


proc unban_button {} {

	set w .zipperbanlist
	
	set chan [$w.bans.channel cget -text]
	set ban [$w.bans.list get active]

	fake_user_in "/mode $chan -b $ban"
	$w.bans.list del 0 end
	fake_user_in "/mode $chan +b"	
}
colorstylesrc100644    765      0         106  6421172432  12331 0ustar  wolfierootkickcol 4
joincol 3
modecol 3
partcol 3
actcol  6
notccol 7
notfcol 3
ctcp.tcl100644    765      0       10761  6421460240  11201 0ustar  wolfieroot#CTCP Handlers
package provide ctcp 1

proc handle_ctcp {orig msg longnick dest} {

#ctcp_message in the form
#level:Command:user:channel:action
	global ctcp_message
	global userlist
	global nick
	set from $longnick
	set list2 ""

	set msg [string trim $msg "\001 "]
	set return $msg
	set found 0	

	scan $msg "%s" command
	set command [string toupper $command]
	set param [string range $msg [string first $command $msg] end ]
        set param [string trimleft $param $command]
        set param [string trimleft $param " :="]

	set ircuser [string tolower $longnick]
	set level [get_level $ircuser]

	foreach ctcp $ctcp_message {
		set ctcplevel [lindex [split $ctcp ":"] 0]
		set ctcpcommand [lindex [split $ctcp ":"] 1]
		set ctcpuser [string tolower [lindex [split $ctcp ":"] 2]]
		set ctcpchannel [string tolower [lindex [split $ctcp ":"] 3]]
		set action [lindex [split $ctcp ":"] 4]
	
		if ![string match $ctcpuser $ircuser] {return}
		if ![string match $ctcpchannel $dest] {return}
	
		if [string match $ctcpuser $ircuser] { 
		if [expr $level >= $ctcplevel] { 

		if ![string compare $ctcpcommand $command] {
			set found 1
			set list [split $action " "]			
			
			foreach element $list {
				if ![string compare "#internal" $element] {
					ctcp_$ctcpcommand $orig $param $dest
					return 1 
				}
				set list2 [linsert $list2 end $element ]
			}
			set element [string trimleft  [join $list2 " "] " "]
			set element [string trimleft  $element " $ctcpcommand"]

			set comlist [split $element ";"]
			foreach x $comlist {
			set command $x
			substitute  $from " " $return
			fake_user_in $command
			}
			return 1
				
		}
		} 
		}





	}

	if !$found { send_to_window server "\[CTCP $command: Unknown CTCP command\]\n" }
}

proc handle_ctcp_reply {orig reply} {

	set reply [string trim $reply "\001"]
	set list [split $reply " "]
	set parm1 [string toupper [lindex $list 0] ]
	set parm2 [lindex $list 1]
	set parm3 [join [lrange $list 1 end] " "]
		
	
	if ![string compare $parm1 "PING"] {
		set ztime [exec pingtime]
		if [sNull $parm2] { return }
			if [regexp " \[0-9\]+ " " $parm2 "] {
				set parm3 [expr $ztime - $parm2]
				send_to_window server "\[CTCP PING Reply from $orig\] $parm3 secs.\n"
			} else {
				send_to_window server "\[CTCP $parm1 Reply from $orig\] $parm3 -- TAINTED PING REPLY\n"
			}
		

	} else {
			send_to_window server "\[CTCP $parm1 Reply from $orig\] $parm3\n"
		}
}

proc init_ctcp_rec {} {
	
	global ctcp_message
	global rcdir

	set ctcp_message ""
	set f [open $rcdir/ctcprc r]
	

	while 1 {
	set l [gets $f]
		if [ eof $f ] {
			close $f
			return 1
		}
#		if [string compare "#" [string index $l 0] ] {
			set ctcp_message [linsert $ctcp_message end $l]
#		}

	}

}


proc ctcp_ACTION {orig param dest} {
	global actst

        set frommsg "* $orig"
 	if [winfo exists ".zipperwin[winman $dest]" ] {
                send_to_window $dest "$actst$frommsg $param\n"
        } else {
          winmannew $orig "$orig" "priv" 1
          insert_chan_list [string tolower $orig]
          send_to_window $orig "$actst$frommsg $param\n"
	  set_chan_activity 1 $orig
          }                                         



}

proc ctcp_DCC {orig param dest} {
	global nick
	global longip
	global xip
	
	set list [split $param " "]
	set type [lindex $list 0]
	set longip [lindex $list 2]
	set dccport [lindex $list 3]

	switch -exact $type {

	"CHAT"		{
			  set i [tk_dialog .question$dccport "Incoming DCC Chat" "$orig is requesting a \
								   DCC Chat with you."  question 0 Accept Reject Ignore]
		 	  if $i<1 { 
			  	send_to_window server "DCC Chat from: $orig\n"
 			  	dccchat "get" $orig $dccport 0
			  } elseif $i>1 {
				fake_user_in "/echo Ignoring $orig"
				fake_user_in "/ignore $orig"
			   }
				
			}

	"SEND"		{
				decode_ip	
				set filename [lindex $list 1]
				set fsize [lindex $list 4]
			  set i [tk_dialog .question$dccport "Incoming File" "$orig is sending you\
								   $filename."  question 0 Accept Reject Rename Ignore]
		 	  if $i<1 { 
				send_to_window server "DCC Send from: $orig File: $filename  Size: $fsize\n"
				exec dccsend.tcl 0 $orig $filename $xip $dccport $fsize &
			  }
		 	  if [expr $i==2] { 
				set filename [choose_file $filename "~" "save"]
				send_to_window server "DCC Send from: $orig File: $filename  Size: $fsize\n"
				exec dccsend.tcl 0 $orig $filename $xip $dccport $fsize &
			  }
		 	  if [expr $i==3] { 
				fake_user_in "/echo Ignoring $orig"
				fake_user_in "/ignore $orig"
			  }
			}

	default		{send_to_window server "Unknown DCC command from $orig: $type\n" }
	}
}
ctcprc100644    765      0         600  6421414367  10705 0ustar  wolfieroot0:ACTION:*:*:#internal
0:CLIENTINFO:*:*:/rctcp -$fromnick CLIENTINFO Standard Clientinfo reply
0:DATE:*:*:/rctcp -$fromnick -@date
0:DCC:*:*:#internal
0:PING:*:*:/notice -$fromnick -$parm1 -$parm2
0:TIME:*:*:/rctcp -$fromnick TIME The time is -@time
0:USERINFO:*:*:/rctcp -$fromnick USERINFO Standard Userinfo reply
0:VERSION:*:*:/rctcp -$fromnick VERSION Zipper -$version X is best!
custom.tcl100644    765      0       46147  6421230135  11567 0ustar  wolfierootpackage provide custom 1.0

proc set_command {wsock}  {
        global w
        global nick
        upvar l myl
       	do_custom_command $wsock $myl 
}
proc do_custom_command {wsock input} {

	global nick
	global zip_command
	set found 0
	scan $input "%s" command
	set command [string tolower $command]
        set param [string range $input [string first $command $input] end ]
        set param [string trimleft $param $command]
        set param [string trimleft $param " "]

	foreach com $zip_command {
                if ![string compare $com $command] {   
			set found 1
                      	do_$command $param $wsock
		}
        } 
	if !$found {
		set found [do_command_alias $command $param]
        	if !$found { 
      			send_to_server $wsock ":$nick $command $param"
			
		}                                                                   
        }    	

}



proc do_command_alias {command param} {
	global aliaslist
	global nick
	global myuserhost
	global response

	set plist $param
	set command [string tolower $command]
	foreach com $aliaslist {
		set scom [lindex [split $com " "] 0]
		if ![string compare $scom $command] {
        		set com [string trim $com " "]
			set com [join [lrange [split $com " "] 1 end] " "]
        		set com [string trim $com " "]

			set comlist [split $com ";"]
			foreach x $comlist {
			set com [string trim $x]
			set alias2 ""
			
			set param [string trim $param " "]
			set list [split $param " "]
                        set parm(1) [lindex $list 0]
                        set parm(2) [lindex $list 1]
                        set parm(3) [lindex $list 2]
                        set parm(4) [lindex $list 3]
                        set parm(5) [lindex $list 4]
                        set parm(6) [lindex $list 5]   	

			
			set alias [split $com " "]
                        set n 1
			foreach word $alias {
                               if ![string compare "-" [string range $word 0  0 ] ] {     
					set command $word
					substitute $myuserhost "Alias" $plist
                                       	set alias2 [linsert $alias2 end $command]
                                      	set n [expr $n + 1]
                               } elseif ![string compare "#" $word] {
                                       get_chan_name [focus]
                                       set alias2 [linsert $alias2 end $response]
			       } elseif ![string compare "?" $word] {
					set x [ask_user "Enter Channel Name"] 
					set alias2 [linsert $alias2 end $x]
                               } else {
                                       set alias2 [linsert $alias2 end $word]
                               }
                        }
                        set param [lrange $list [expr $n-1] end]
                        set com [join $alias2 " "]       
puts $com
                        fake_user_in "$com"
			}

			return 1
		}

        }

	return 0

}


###################  IRC command descriptions follow

proc do_ignore {param wsock} {
# /ignore <hostmask> [,m|n|c|p]
	global ignore

	if [string compare $param ""] {

	set iglist [split $param ","]
	set iguser [lindex $iglist 0]
	set igtype [lindex $iglist 1]
	if ![string compare "" $igtype] {
		set igtype "cmnp"
	}

	set ignore [linsert $ignore end  "$iguser,$igtype" ]

	} else {
		foreach name $ignore {
			send_to_window server "Ignore: $name\n"
		}
	}
}

proc do_alias {param wsock} {
	global aliaslist
	
	set alias [lindex [split $param " "] 0]

	if ![sNull $param] {
		set index [aliasindex $alias]
		if [expr $index >= 0] {
			set aliaslist [lreplace $aliaslist $index $index $param]
		} else {
			set aliaslist [linsert $aliaslist end $param]
		}

	} else {
		foreach alias $aliaslist {
			send_to_window server "Alias: $alias\n"
		}
	}
}


proc do_describe {param wsock} {
# /describe <nickname> <action>
	global nick

	if [string compare $param  ""] {

		scan $param "%s" to
		set param [string range $param [string first $to $param] end ]
        	set param [string trimleft $param $to]
        	set param [string trimleft $param " "]  
		
		send_to_window "server" "* To $to :$nick $param\n"
      		send_to_server $wsock ":$nick PRIVMSG $to :\001ACTION $param\001"

	}
	

}


proc do_kick {param wsock} {
# /kick #channel <user> [reason]


	global nick
	global response

	if [string compare $param  ""] {
		set parm [split $param " "]
		set parm1 [channel [lindex $parm 0] ]
		set parm2 [lindex $parm 1]

		set newlist [lrange $parm 2 end]
		set reason  [join $newlist " "]

		set output ":$nick KICK $parm1 $parm2 :$reason"
		send_to_server $wsock $output
	}


}


proc do_whois {param wsock} {


	send_to_server $wsock "WHOIS $param"

}
proc do_who {param wsock} {


	send_to_server $wsock "WHO $param"

}


proc do_server {param wsock} {
#/server <new server> [port]

	global nick
	global server
	global port
	global serveractive

	if [string compare $param ""] {
		
		set parm [split $param " "]
		set parm1 [lindex $parm 0]	
		set parm2 [lindex $parm 1]
		if [sNull $parm2] {
			set parm2 "6667"
		}

# Close server connection....
# Close all Channel windows but not Query windows
# Reconnect to new server 		
	if $serveractive {	
		send_to_server $wsock ":$nick QUIT :Changing Servers"
		close $wsock
		set serveractive 0
	}

		set list [.zipperserver.list get 0 end]	
		foreach chan $list {
			if ![string compare "#" [string index $chan 0] ] {
				destroy .zipperwin[winman $chan]
				remove_chan_list $chan
			}


		}

		set server $parm1
		set port   $parm2

		open_irc_connection

	}
}


proc do_quote {param wsock} {

	send_to_server $wsock "$param"

}

proc do_mode {param wsock } {
	global response

	set parmlist [split $param " "]
	set chan [channel [lindex $parmlist 0] ]
	set mode [lindex $parmlist 1]
	set who1 [lindex $parmlist 2]
	set who2 [lindex $parmlist 3]
	set who3 [lindex $parmlist 4]


	

	send_to_server $wsock "MODE $chan $mode $who1 $who2 $who3"

}
proc do_topic {param wsock} {
global response
global nick

	  if [string compare $param  ""] {
                set parm [split $param " "]
                set parm1 [channel [lindex $parm 0] ]

                set newlist [lrange $parm 1 end]
                set reason  [join $newlist " "]


                set output ":$nick TOPIC $parm1 :$reason"
                send_to_server $wsock $output
        }       

}
proc do_names {param wsock} {

	set param [channel $param]	
	send_to_server $wsock "NAMES $param"

}


proc do_save {param wsock} {
# /save <all|ctcp|events|alias|notify|ignore|channels>

	global rcdir
	global aliaslist
	global notify
	global eventlist
	global ctcp_message
	global channels
	global ignore
	global servers
	global userlist
	
	set ctcp 0
	set events 0
	set alias 0
	set noti 0
	set ign  0
	set chan 0
	set serv 0
	set usrs 0

	
	
	if [string compare $param ""] {
		set param [string tolower $param]
		switch -exact $param {

		"all" 		{ set ctcp 1
				  set events 1
				  set alias 1
				  set noti 1
				  set ign  1
				  set chan 1
				  set serv 1
				  set usrs 1
				}
		"ctcp" 		{ set ctcp 1 }
		"events"	{ set events 1 }
		"alias"		{ set alias 1 }
		"notify"        { set noti 1 } 
		"ignore"	{ set ign 1 }
		"channels"	{ set chan 1}
		"servers"	{ set serv 1}
		"users"		{ set usrs 1}

		}	
		
		if $serv 	{ 
				set f [open "$rcdir/serverrc" w]	
				foreach item $servers {
					puts $f $item
				}
				close $f
				}
		if $chan 	{ 
				set f [open "$rcdir/channelsrc" w]	
				foreach item $channels {
					puts $f $item
				}
				close $f
				}
		if $ctcp 	{ 
				set f [open "$rcdir/ctcprc" w]	
				foreach item $ctcp_message {
					puts $f $item
				}
				close $f
				}
		if $events { 
				set f [open "$rcdir/eventsrc" w]	
				foreach item $eventlist {
					puts $f $item
				}
				close $f
		    	   }
		if $alias { 
				set f [open "$rcdir/aliasrc" w]	
				foreach item $aliaslist {
					puts $f $item
				}
				close $f
		    	   }
		if $noti { 
				set f [open "$rcdir/notifyrc" w]	
				foreach item $notify {
					puts $f $item
				}
				close $f
		    	   }
		if $ign { 
				set f [open "$rcdir/ignorerc" w]	
				foreach item $ignore {
					puts $f $item
				}
				close $f
			  }
		if $usrs { 
				set f [open "$rcdir/usersrc" w]	
				foreach item $userlist {
					puts $f $item
				}
				close $f
			  }
	}


}


proc do_say {param wsock} {
# /say <#|#channel|nick> <message>
	global response
	
	if [string compare $param ""] {
		set parm [split $param " "]
		set parm1 [channel [lindex $parm 0] ]
		set parm2 [lrange $parm 1 end]
		fake_user_in "/msg $parm1 $parm2"
	}


}



proc do_script {param wsock} {

	set return [exec ]
	fake_user_in "$return"

}

proc do_play {param wsock} {
#/play <Channel> <file> [rate]
	set chanl [channel [lindex [split $param] 0] ]
	set file [lindex [split $param] 1]
	set rate [lindex [split $param] 2]
	

}


proc do_exec {param wsock} {

	
	send_to_window server "\n"

}

proc do_ctcp {param wsock} {
#/ctcp <nick|#channel> <command string>
	global response
	
	if [string compare $param ""] {
		set parm [split $param " "]
		set parm1 [channel [lindex $parm 0] ]
		set parm2 [lindex $parm 1]		
		set parm2 [string toupper $parm2]
		
			
		set parm3 [lrange $parm 1 end]

		if ![string compare $parm2 "PING"] {
#get time in seconds top send for PING command
			set ztime [exec pingtime] 
			fake_user_in "/msg $parm1 \001$parm2 $ztime\001"
				
		} else {
			fake_user_in "/msg $parm1 \001$parm3\001"
		}
	}

}


proc do_rctcp {param wsock} {
#/rctcp <nick> <reply string>
	global response
	if [string compare $param ""] {
		set parm [split $param " "]
		set parm1 [lindex $parm 0]	
			
		if ![string compare $parm1 "#"] {
			get_chan_name [focus]	
			set parm1 $response
		} 
	
		set parm2 [join [lrange $parm 1 end] " "]
			fake_user_in "/notice $parm1 \001$parm2\001"

	}

}

proc do_nick {param wsock} {


	send_to_server $wsock "NICK $param"
}

proc do_load {param wsock} {
# /load <all|ctcp|events|alias|notify|channels|users>

	global aliaslist
	global notify
#	global eventlist
	global ctcp_message
	global ignore
	global channels
	global servers
	global userlist

	set ctcp 0
	set events 0
	set alias 0
	set noti 0
	set ign 0
	set chan 0
	set serv 0	
	set usrs 0
	
	if [string compare $param ""] {
		set param [string tolower $param]
		switch -exact $param {

		"all" 		{ set ctcp 1
				  set events 1
				  set alias 1
				  set noti 1
				  set ign 1
				  set chan 1
				  set serv 1
				  set usrs 1
				}
		"ctcp" 		{ set ctcp 1 }
		"events"	{ set events 1 }
		"alias"		{ set alias 1 }
		"notify"        { set noti 1 } 
		"ignore"        { set ign 1 } 
		"channels"	{ set chan 1}
		"servers"	{ set serv 1}
		"users"		{ set usrs 1}

		}	
		
		if $ctcp 	{ init_ctcp_rec }
		if $serv 	{ init_servers }
		if $chan 	{ init_channels }
		if $events 	{ init_events }
		if $alias 	{ init_aliases }
		if $noti 	{ init_notify } 
		if $ign 	{ init_ignore } 
		if $usrs 	{ init_users } 

	}


}


proc do_echo {param wsock} {
#/echo <message>
global chaninfo

	send_to_window server "$param\n"
}

proc do_notify {param wsock} {
#/notify <nickname>
	global notify
	global esvrSock

	set newnotify ""	
	set remove 0
	if [string compare $param ""] {
		set sp [string tolower $param]
		foreach name $notify {
			if [string compare $sp [string tolower $name] ] {
				set newnotify [linsert $newnotify end $name]	
			} else {
				set remove 1
			}
					
		}
		if $remove { set notify $newnotify } else { set notify [linsert $notify end $param] }
	}
	send_to_server $esvrSock "ISON [join $notify " "] "

}


proc do_send {param wsock} {
#/send <nickname> <filename>
	global ip
	global longip
	global nick

	set dccbaseport [exec getport 0]
	set longip $ip
	encode_ip
	if [string compare $param ""] {

		set list [split $param]
		set target [lindex $list 0]
		set filename [lindex $list 1]	
		if [sNull $filename] {
			set filename [choose_file "" "~" "open"]
			if [sNull $filename] {
				return
			}
		}
		set filesize [file size $filename]
			
		exec dccsend.tcl 1 $target $filename $ip $dccbaseport $filesize &
		fake_user_in "/ctcp $target DCC SEND [file tail $filename] $longip $dccbaseport $filesize"
	}
}


proc do_chat {param wsock} {
#/chat <nickname>
	global ip
	global longip
	global nick

	set dccbaseport [exec getport 0]
	set longip $ip
	encode_ip
	if [string compare $param ""] {

		fake_user_in "/ctcp $param DCC CHAT chat $longip $dccbaseport"
		dccchat "start" $param 0 $dccbaseport
	}
}


proc do_disconnect {param wsock} {
	global serveractive


	# close all open channel windows
	set chanlist ""

	set chanlist [.zipperserver.list get 0 end]
	foreach item $chanlist {
		if [is_channel $item] {
			remove_chan_list $item
			destroy .zipperwin[winman $item]
		}

	}

	if $serveractive {
	set serveractive 0
	close $wsock

	.zipperserver.controls.connect configure -state normal
	.zipperserver.controls.disconnect configure -state disabled
	send_to_window server "Disconneted from server.\n"
	wm title .zipperserver "Zipper: Not Connected"
	}
}

proc close_irc_connection {} {

	fake_user_in "/disconnect"
}
proc do_edit {param wsock} {
# /edit <all|ctcp|events|alias|notify>

	global rcdir
	global aliaslist
	global notify
	global eventlist
	global ctcp_message
	global editor
	global userlist
	global ignore

	set ctcp 0
	set events 0
	set alias 0
	set noti 0
	set ign 0
	set usrs 0
	
	
	if [string compare $param ""] {
		set param [string tolower $param]
		switch -exact $param {

		"all" 		{ set ctcp 1
				  set events 1
				  set alias 1
				  set noti 1
				  set ign 1
				  set usrs 1
				}
		"ctcp" 		{ set ctcp 1 }
		"events"	{ set events 1 }
		"alias"		{ set alias 1 }
		"notify"        { set noti 1 } 
		"ignore"        { set ign 1 } 
		"users"      	{ set usrs 1 } 

		}	
		
		if $ctcp 	{ exec $editor $rcdir/ctcprc
				  init_ctcp_rec }
		if $events 	{ exec $editor $rcdir/eventsrc
			  	  init_events }
		if $alias 	{ exec $editor "$rcdir/aliasrc"
				  init_aliases }
		if $noti 	{  exec $editor $rcdir/notifyrc
				  init_notify } 
		if $ign 	{ exec $editor $rcdir/ignorerc
				  init_ignore } 
		if $usrs 	{ exec $editor $rcdir/usersrc
				  init_users } 

	}


}

proc do_recycle {a b} {

        exec "./ridx"

        init_user_rc
        init_ctcp_rec
        init_custom_command
        init_events
        init_aliases
        init_notify
        init_ignore
        init_menu
        init_channels
        init_servers
	init_stylecolors
	set_styles
}

proc do_query {myl wsock} {
        scan $myl "%s" w
        if ![string compare "dcc" [string range $w 0 2] ] {
                wm deiconify .zipper$w
                raise .zipper$w

        } elseif [winfo exists ".zipperwin[winman $w]"] {
                wm deiconify .zipperwin[winman $w]
                raise .zipperwin[winman $w]
        } else {
          winmannew $w "$w" "priv" 0
          insert_chan_list [string tolower $w]
          }

}
        
proc do_me {myl wsock} {

	do_action $myl $wsock
}             
proc do_action {myl wsock} {

        global dccnicklist
        global nick
	global actst

        set win [focus]
        set win [string range $win 7 end ]
        set win [string range $win 0 [string first "." $win] ]
        set win [string trimright $win "."]
        set win  [lindex [split [wm  title .zipper$win] " "] 1]

        set to $win

        send_to_window $win "$actst\* $nick $myl\n"

        set i [lsearch -regexp $dccnicklist $wsock]
        set iwin [lindex $dccnicklist $i]
        set iwin [lindex [split $iwin " "] 0]

        if ![string compare "dcc$iwin" $win] {
                send_to_dcc_server $iwin "\001ACTION $myl\001"
        } else {
        send_to_server $wsock ":$nick PRIVMSG $to :\001ACTION $myl\001"
        }


}

proc do_quit {myl wsock} {

        global nick
        fake_user_in "/save all"
        set myl ":$nick QUIT :$myl"
        send_to_server $wsock $myl
        set eventLoop "done"
        destroy .
        exit
}
            

proc do_notice {myl wsock} {
        global nick
        scan $myl "%s" tonick
        set myl [string range $myl [string first $tonick $myl] end ]
        set myl [string trimleft $myl $tonick]
        set myl [string trimleft $myl " "]
        set myl ":$nick NOTICE $tonick :$myl"
        send_to_server $wsock $myl ;# send the data to the server^M
}


proc do_msg {myl wsock} {
        global nick
        scan $myl "%s" tonick
        set myl [string range $myl [string first $tonick $myl] end ]
        set myl [string trimleft $myl $tonick]
        set myl [string trimleft $myl " "]
        if [string compare "\001" [string index $myl 0] ] {
        if [winfo exists .zipperwin[winman $tonick] ] {

                send_to_window $tonick "* $myl\n"

        } else {
                send_to_window "server" "** To: $tonick ** $myl\n"
        }
        }
        set myl ":$nick PRIVMSG $tonick :$myl"
        send_to_server $wsock $myl ;# send the data to the server^M
}

proc do_part {myl wsock} {
	
	set myl [channel $myl]
	set myl ".zipperwin[winman $myl]"
	destroy $myl

# send_to_server $wsock "PART $myl" ;# send the data to the server^M
}

proc do_join {myl wsock} {
        send_to_server $wsock "JOIN $myl" ;# send the data to the server^M
}
                                


proc do_list {myl wsock} {
# /list  match min max

	global listmatch

	set w ".zipperchannellist"
	
	if [winfo exists $w] {
		$w.channels.list delete 0 end
	}
	set listmatch $myl

	send_to_server $wsock "LIST"

}


proc do_set {myl wsock} {
# set <varname> <value>  -- sets a variable
# set 			 -- lists all variables
	global varlist

	if [sNull $myl] {
		foreach var $varlist {

			send_to_window server $var
		}
	} else {
	set var [lindex [split $myl " "] 0]
	set value [string trim [join [lrange [split $myl " "] 1 end] ]	" "]
	if [expr [set index [varindex $var]] >= 0] {
		set varlist [lreplace $varlist $index $index "$var $value"]
	} else {
		lappend varlist "$var $value"
	} 
	}

}
proc do_irccommand {myl wsock} {
	set multi [split $myl ";"]
	foreach l $multi {
		fake_user_in $l
	}
}


proc do_modify {in wsock} {
#/modify <servers|channels|notify|ctcp|events|users|ignore>
	
	set what [lindex [split $in " "] 0]
	
	switch -- $what {

	servers 	{modify_servers}
	channels 	{modify_channels}
	notify		{modify_notify}
	ctcp		{modify_ctcp}
	events		{modify_events}
	users		{modify_users}
	ignore		{modify_ignore}

	}

}


proc do_clone {l wsock} {
	global rcdir
	global allowsaverc

	set rc [lindex [split $l " "] 0]
	set as [lindex [split $l " "] 1]

	set dir $rcdir
	set als $allowsaverc

	if [string compare "" $rc] {set dir $rc}
	if [string compare "" $as] {set als $as}

	exec zipper $dir $als &

}



proc do_ban  {plist wsock} {
#/ban channel nick [type]
#where type is 1=nick ban only, 2=userhost ban, 3=host ban, 4=full site ban
global whoisvisible
global whoisuser

	set whoisuser ""
	set chan [lindex [split $plist " "] 0]
	set user [lindex [split $plist " "] 1]
	set type [lindex [split $plist " "] 2]

	if [sNull $chan] {
		return
	}
	if [sNull $user] {
		return
	}
	if [sNull $type] {
		set type "2"
	}
	set whoisvisible 0
	fake_user_in "/echo Looking up $user..."
	fake_user_in "/whois $user"
	tkwait variable whoisvisible
	if ![sNull $whoisuser] {
		set userhost [lindex [split $whoisuser "!"] 1]
		set host [lindex [split $whoisuser "@"] 1]
		set domain [join [lrange [split $whoisuser "."] 1 end] "."]
		switch $type {
			
			1	{fake_user_in "/mode $chan +b $user"}
			2	{fake_user_in "/mode $chan +b *!*$userhost"}
			3	{fake_user_in "/mode $chan +b *!*@*$host"}
			4	{fake_user_in "/mode $chan +b *!*@*$domain"}

		}
	}
}
customrc100644    765      0         541  6420702737  11272 0ustar  wolfieroot#customrc
#
# File to customize IRC commands
#
# Begin system commands
describe
alias
ban
kick
whois
who
server
list
ignore
notify
quote
load
save
edit
say
play
script
#exec
ctcp
rctcp
nick
send
chat
echo
disconnect
mode
names
topic
recycle
join
part
action
quit
msg
notice
query
me
set
irccommand
#adduser
#deluser
modify
clone
#
# Begin User commands
dccchat.tcl100644    765      0       12300  6417242465  11644 0ustar  wolfierootpackage provide dccchat 1.0

proc init_dcc_connection {tnick dccbaseport} {
	global longip
	global srvcPort 
	global s_sock
	
	set s_sock [socket -server "connect_dcc_connection $tnick" $dccbaseport ]

}
proc connect_dcc_connection {tnick sock addr port } {
	global dccnicklist
	global s_sock
	global response

	fileevent "$sock" readable [list read_dcc_sock "$sock"]
	fconfigure "$sock" -buffering line
	new_dcc_window $sock "DCC:$tnick" "$sock"
	send_to_window "dcc$sock" "Talking to $tnick...\n"
	set dccnicklist [linsert $dccnicklist end "$sock $tnick"]
	get_dcc_nick_from_socket $sock
	insert_chan_list "DCC:$response"
	close $s_sock
}

proc accept_dcc_connection {tnick dccport} {
# open the connection to the DCC server...
	global xip
	global dccnicklist
	global response

	set sock [socket $xip $dccport]
	new_dcc_window $sock "DCC:$tnick    IP: $xip    Port: $dccport" $sock
	send_to_window "dcc$sock"  "Talking to $tnick...\n"
	set dccnicklist [linsert $dccnicklist end "$sock $tnick"]
	get_dcc_nick_from_socket $sock
	insert_chan_list "DCC:$response"
	fileevent $sock readable [list read_dcc_sock "$sock"] 
	fconfigure $sock  -buffering line  

}

proc read_dcc_sock {sock} {

  set l [gets $sock]
  if {[eof $sock]} {
	close $sock
	send_to_window "dcc$sock" "DCC Session Closed\n"
	.zipperdcc$sock.entry configure -state disabled
        set eventLoop "done"
  } else {
    handle_dcc_message  $sock $l
  }
}     

proc read_dcc_user_in {sock}  {
	global nick
	global history
	global historyidx


	set l [.zipperdcc$sock.entry get]
	.zipperdcc$sock.entry delete 0 end 

	set hname [string tolower [get_dcc_nick_from_socket $sock] ]
	set historyidx(dcc:$hname) 30 
 	lappend history(dcc:$hname) $l    
	roll_off_hist dcc:$hname


#default is to send to current dcc window

  if ![string compare "/" [string index $l 0] ] {
        set l [string trimleft $l "/"]
        set_command $sock
  } else {
          send_to_window "dcc$sock" "> $l\n"
	  send_to_dcc_server $sock "$l"
  }    

}


proc get_dcc_nick_from_socket sock {
	global response
	global dccnicklist

	set i [lsearch -regexp $dccnicklist $sock]
	set tnick [lindex $dccnicklist $i]
	set tnick [lindex [split $tnick " "] 1]
		
	set response $tnick
	return $tnick

}
proc get_dcc_sock_from_nick nick {
	global response
	global dccnicklist

	set i [lsearch -regexp $dccnicklist $nick]
	set tsock [lindex $dccnicklist $i]
	set tsock [lindex [split $tsock " "] 0]
	
	set response $tsock
	return $tsock
}

proc remove_dcc_nick_list sock {

	global dccnicklist
	set i [lsearch -regexp $dccnicklist $sock]
	set n1 [lrange $dccnicklist 0 [expr $i-1] ]
	set n2 [lrange $dccnicklist [expr $i+1] end]

	set dccnicklist [list $n1 $n2]

}

proc handle_dcc_message {sock l} {
	global dccnicklist

	set i [lsearch -regexp $dccnicklist $sock]
	set tnick [lindex $dccnicklist $i]
	set tnick [lindex [split $tnick " "] 1]
	if ![string compare "\001" [string index $l 0] ] {
		set l [string trim $l "\001" ]
		set l [string trimleft $l "ACTION" ]
		set l [string trimleft $l " " ]
		send_to_window "dcc$sock" "* $tnick $l\n"
	} else {	
		send_to_window "dcc$sock" "<$tnick> $l\n"
	}

}

proc new_dcc_window {w name sock} {

global response
global textfg
global textbg
global mirccolors
global actwin


set w ".zipperdcc$sock"
toplevel $w
wm iconname $w "$name"
wm iconify $w
#set font  -adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*
set font 8x13

wm title $w $name
wm iconbitmap $w @zipperwinicon.bmp
set start 0.0
set length 0             

text $w.text  -state disabled -font $font -relief sunken -bd 2 -yscrollcommand "$w.scroll set" -setgrid 1 -height 20 -width 50  -foreground $mirccolors($textfg) -background $mirccolors($textbg)

scrollbar $w.scroll -command "$w.text yview"
entry $w.entry -bd 2 -relief sunken -width 30
pack $w.scroll -side right -fill y
pack $w.text -expand yes -fill both
pack $w.entry -expand no -fill both


bind $w.entry <KeyPress-Up>     {select_history [focus] -1 }
bind $w.entry <KeyPress-Down>   {select_history [focus] 1 }   
bind $w.entry <Control-KeyPress-b> {[focus] insert end "\002"}
bind $w.entry <Control-KeyPress-k> {[focus] insert end "\003"}
bind $w.entry <Control-KeyPress-i> {[focus] insert end "\026"}
bind $w.entry <Control-KeyPress-u> {[focus] insert end "\037"}
bind $w.entry <Control-KeyPress-g> {[focus] insert end "\007"}      
bind $w.entry <Destroy> {canceldcc $actwin  }
bind $w.entry <KeyPress-Return> "read_dcc_user_in $sock"
bind $w  <FocusIn> {update_chan_activity 0 [focus] }   
focus $w.entry

}                   



proc canceldcc {w} {

	set sockname [lindex [split [string range $w 10 end] "."] 0]
	closedcc $sockname
}

proc closedcc sock {
	global response

	get_dcc_nick_from_socket $sock
	remove_chan_list "DCC:$response"
	remove_dcc_nick_list $sock
	destroy ".zipperdcc$sock"
	close $sock

}

proc send_to_dcc_server {wsock l} {
  puts $wsock $l           ;# send the data to the server

} 

proc encode_ip {} {
    global longip
    set longip [exec encodeip $longip]
}
proc decode_ip {} {
	global longip
	global xip
		
	set xip [exec decodeip $longip]

}
proc dccchat {type tnick connectport dccport} {

global longip
global xip

if ![string compare "get" $type] {
	decode_ip
	accept_dcc_connection $tnick $connectport
} else {
	decode_ip
	init_dcc_connection $tnick $dccport
}
}
dccsend.tcl100755    765      0        4003  6417164322  11635 0ustar  wolfieroot#!/bin/sh   
# the next line restarts using wish \
exec wish "$0" "$@" 

proc dotransfer {type host port file size} {
	global f

	set f [open "|zdcc $type $host $port $file $size"]
	fileevent $f readable "handlemessage $f $size"

}


proc handlemessage {f size} {

	set l [gets $f]
	if [eof $f] {
		close $f
		return 0
	}
	if ![string compare "DONE" [string range $l 0 3]] {
		.dccxfer.msgs configure -text "Transfer Complete."
		close $f
		return 0
	}
	if ![string compare "XMSG" [string range $l 0 3]] {
		set input [string range $l 5 end]
		.dccxfer.msgs configure -text $input
		return 0
	}
	if ![string compare "XTRN" [string range $l 0 3]] {
		set input [string range $l 5 end]
		set per [expr double($input)/double($size)*100]
		setWidth $per 
		return 0
	}

}


proc createwin {name nick} {
global f
global id
global event
wm withdraw .   
set w .dccxfer
catch {destroy $w}
toplevel $w
wm iconname $w "DCC:$name"
wm title $w "DCC:$name"
#positionWindow $w


label $w.stuff -text "DCC Transfer:$nick    $name" -width 40 -relief sunken
label $w.msgs -text "Waiting..." -width 40 -relief sunken
pack $w.stuff -side top
pack $w.msgs -side top
frame $w.buttons
pack $w.buttons -side bottom -fill x -pady 2m
button $w.buttons.close -text "X" -command { exit }
pack $w.buttons.close


frame $w.frame -borderwidth 10
pack $w.frame -side top -fill x

canvas $w.frame.canvas -width 250 -height 25 -bd 0 -highlightthickness 0
set id [$w.frame.canvas create rectangle 0 0 245 20 ]
set id [$w.frame.canvas create rectangle 0 0 1 1  -fill DeepSkyBlue3 ]
pack $w.frame.canvas -side top -expand yes -anchor s -fill x  -padx 15


}
proc setWidth {w} {
	global id
	set w [expr $w*2.45]	
	.dccxfer.frame.canvas coords $id 0 0 $w 20	
}



set type [lindex $argv 0]
set nick [lindex $argv 1]
set file [lindex $argv 2]
set host [lindex $argv 3]
set port [lindex $argv 4]
set size [lindex $argv 5]
set event 0
set id ""

if ![string compare "" $size] {
	set size 0
}
set f ""
createwin $file $nick
dotransfer $type $host $port $file $size
tkwait variable event
exit
decodeip100755    765      0       10253  6347310123  11243 0ustar  wolfierootELFp„4¤4 (44€4€  ÔԀԀ€€ťťŔŔ•Ŕ•ČĚ––ˆˆ/lib/ld-linux.so.1

	čƒ("–ń˙řƒ(#Ŕ•-Ѓ3„F?Ŕ• Gˆ–U„"[(„Ce°…
k8„4rԕń˙ˆH„€X„>˜¤…ń˙Ÿˆ–ń˙ڈ–ń˙˛Œ–ń˙libc.so.5printf_DYNAMICstrtoul__environ_init__libc_initenviron__fpu_controlhtonlinet_ntoa_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucw_etext_edata__bss_start_endˆ–ŕ•ä•č•ě•	đ•
ô•ř•ü•čŤÂ˙5ؕ˙%ܕ˙%ŕ•héŕ˙˙˙˙%ä•héĐ˙˙˙˙%č•héŔ˙˙˙˙%ě•hé°˙˙˙˙%đ•h é ˙˙˙˙%ô•h(é˙˙˙˙%ř•h0é€˙˙˙˙%ü•h8ép˙˙˙Y‰ă‰ŕ‰ĘŇŇЃŔ1íUUU‰ĺPSQ¸ˆťÍ€‹D$ŁŔ•ˇˆ–PčŹ˙˙˙ƒÄčT˙˙˙h°…čz˙˙˙ƒÄč
˙˙˙čUPčw˙˙˙[´&´&¸̀ë÷´&SťĐ•ƒ=Еt
‹˙ЃĂƒ;uô[Í6АU‰ĺƒějj‹EƒŔ‹RčŔţ˙˙ƒÄ‰Ŕ‰Eü‹EüPčĎţ˙˙ƒÄ‰ŔPčÔţ˙˙ƒÄ‰ŔPh¸…č„ţ˙˙ƒÄ1Ŕ됍t&‰ě]АSťÄ•ƒ=ĕ˙t
‹˙ЃĂüƒ;˙uô[Í6Аč;˙˙˙Â%s˙˙˙˙˙˙˙˙–îƒţƒ„„.„>„N„^„Ѓ
°…č€Ă„
ˇԕ@„ƒ|ƒ01.0101.0101.01GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.0GCC: (GNU) 2.7.2.l.3.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.note.commentԀÔ#č€čœ)„„@1Ăġ9	|ƒ|B	„ƒ„@KЃĐQ؃ؐVp„p4\°…°b¸…¸jŔ•ŔpĕÄw̕Ě~ԕÔ,ƒ–ˆŒˆ–ˆ‘ˆ<—Ä> <đ)	,	

ń˙€…	€…	1ȕ
> …	IĕWЕdń˙kŕ„	ń˙đ„	pđ„	†Ě•”…	IĕŸÄ•
­ń˙ …	¸čƒ("ż–ń˙Ȥ…ń˙Ďřƒ(×Ŕ•áЃç„FóŔ• űˆ–	p„€	„"p„	%ˆ–ń˙1 …T	6(„C@°…
F8„4Mˆ–ń˙Tԕń˙jŒ–ń˙oH„€tX„>crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__decodeip.cprintf_DYNAMIC_etextstrtoul__environ_init__libc_initenviron__fpu_control_starthtonl___crt_dummy____bss_startmaininet_ntoa_finiatexit_edata_GLOBAL_OFFSET_TABLE__endexit__setfpucwdecodeip.c100644    765      0         302  6347310117  11416 0ustar  wolfieroot#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>

main(int argc, char *argv[]){
	unsigned long int i;

	i=strtoul(argv[1],NULL,0);
	printf("%s",inet_ntoa(htonl(i)));
	return(0);
}
defaults.tcl100755    765      0          36  6403556602  12004 0ustar  wolfierootpackage provide defaults 1.0

dialog_box.gif100644    765      0         402  6406010276  12274 0ustar  wolfierootGIF87a  ó˛Ŕ܀€€UUU˙™f˙˙˙ď™ĚĚËţ,  ˇČIŤ˝8ëÍť˙`(Ždiž] Žl랪tmßxČyďŰ;Ŕě×ô‚3ŒfžR(XŻŘBUˤAŁT^Ő@6dľÖa7ÝžŻŹŽN\(×ÍđĂAí…Jéoy{r_BTwwxiz|s‡nrlbz˜™”k7m˘Ą¤›ƒ}O†IšŽ“¨M…ap+•Ÿtvviiš@€ś[ŽłmJ.„~´CD8žÁ‡ÎÓŹÔÔHČŮ0;dialog_box.xpm100644    765      0        2612  6406007767  12373 0ustar  wolfieroot/* XPM */
static char * icl8_16322_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 9 1",
/* colors */
" 	s None	c None",
".	c black",
"X	c cadet blue",
"o	c #555555",
"O	c #FF9966",
"+	c white",
"@	c #0000EF",
"#	c #99CCCC",
"$	c #00CBFE",
/* pixels */
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
"                                ",
" .............................. ",
" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXoXXXXXXXX. ",
" .X................XXoXXOOOOXX. ",
" .X.+++++++++++.++.XXoXXOOOOXX. ",
" .X.+@@@@++++++.++.XXoXXXXXXXX. ",
" .X.+++++++++++....XXoXXXXXXXX. ",
" .X.+@@@+@@++++.##.XXoXXOOOOXX. ",
" .X.+++++++++++.##.XXoXXOOOOXX. ",
" .X.+@@+@@@++++.##.XXoXXXXXXXX. ",
" .X.+++++++++++.##.XXoXXXXXXXX. ",
" .X.###########.##.XXoXXXXXXXX. ",
" .X.#$$$$#$$###.##.XXoXXOOOOXX. ",
" .X.###########.##.XXoXXOOOOXX. ",
" .X.+++++++++++....XXoXXXXXXXX. ",
" .X.+@@@+@@@+++.++.XXoXXXXXXXX. ",
" .X.+++++++++++.++.XXoXXOOOOXX. ",
" .X................XXoXXOOOOXX. ",
" .XXXXXXXXXXXXXXXXXXXoXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
" .............................. "};
drawing.xbm100644    765      0        3030  6406015435  11663 0ustar  wolfieroot#define noname_width 48
#define noname_height 48
static char noname_bits[] = {
 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
 0x00,0xf8,0x31,0x00,0x00,0x00,0x00,0xce,0x1b,0x00,0x00,0x00,0x00,0x83,0x07,
 0x00,0x00,0x00,0x80,0xe1,0x1f,0x00,0x00,0x00,0xc0,0xf8,0x1f,0x00,0x00,0x00,
 0xc0,0x3e,0x3e,0x00,0x00,0x40,0xc0,0x07,0x33,0x00,0x00,0x80,0xe1,0x01,0x13,
 0x00,0x00,0x80,0x79,0x80,0x11,0x00,0x00,0x00,0x1e,0x80,0x19,0x00,0x00,0x00,
 0x0e,0xc0,0x08,0xc0,0x7f,0x00,0x0b,0xc0,0x0c,0xf0,0xff,0xc0,0x10,0x60,0x07,
 0xf8,0xff,0x31,0x20,0xe0,0x03,0xfc,0x7f,0x0c,0x40,0xf0,0x00,0xfe,0x1f,0x07,
 0x80,0x18,0x00,0xfe,0xcf,0x0f,0x00,0x19,0xf0,0xff,0xf3,0x1f,0x00,0x0e,0xff,
 0xff,0xfc,0x1f,0x00,0xfc,0x3f,0x7f,0xff,0x1f,0x00,0x7e,0x39,0xff,0xff,0x1f,
 0xd0,0x7e,0x3e,0xff,0xff,0x1f,0x7c,0xff,0x27,0xff,0xff,0xff,0x7f,0xff,0x3b,
 0xff,0x3f,0xe0,0xbf,0xfd,0x1f,0xff,0x3b,0x7e,0x85,0xf1,0x01,0xff,0xb1,0x03,
 0xc0,0x73,0x00,0xfe,0x21,0x00,0x40,0x7e,0x00,0xfe,0x40,0x00,0x60,0x38,0x00,
 0xfc,0x80,0x00,0x20,0x1c,0x00,0x78,0x00,0x01,0x30,0x1e,0x00,0x60,0x00,0x02,
 0x10,0x17,0x00,0x20,0x00,0x04,0x98,0x13,0x00,0x20,0x00,0x08,0xc8,0x10,0x00,
 0x10,0x00,0x10,0x6c,0x10,0x00,0x10,0x00,0x20,0x3c,0x10,0x00,0x08,0x00,0x40,
 0x0e,0x10,0x00,0x08,0x00,0x80,0x06,0x10,0x00,0x04,0x00,0x00,0x01,0x10,0x00,
 0x04,0x00,0x00,0x02,0x10,0x00,0xfe,0xff,0xff,0x03,0x10,0x00,0x00,0x20,0x00,
 0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x10,0x00,
 0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0xe0,0xff,
 0xff,0x1f,0x00};
encodeip100755    765      0       10077  6347303021  11260 0ustar  wolfierootELF0„4P4 (44€4€  ÔԀԀ€€kkpp•p•ÄČŹŹ•Ź•ˆˆ/lib/ld-linux.so.1

	¸ƒ("Ź•ń˙p•% ƒ+ȃF7p• ?؃9Ičƒ"O4–]`…
cřƒ4j„•ń˙€„€…„>T…ń˙—4–ń˙ž4–ń˙Ş8–ń˙libc.so.5printf_DYNAMIC__environ_init__libc_initenvironinet_addrntohl__fpu_control_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucw_etext_edata__bss_start_end4–	•”•˜•œ• •¤•
¨•č‹Â˙5ˆ•˙%Œ•˙%•héŕ˙˙˙˙%”•héĐ˙˙˙˙%˜•héŔ˙˙˙˙%œ•hé°˙˙˙˙% •h é ˙˙˙˙%¤•h(é˙˙˙˙%¨•h0é€˙˙˙Y‰ă‰ŕ‰ĘŇŇЃŔ1íUUU‰ĺPSQ¸ˆťÍ€‹D$Łp•ˇ4–PčŹ˙˙˙ƒÄčT˙˙˙h`…čz˙˙˙ƒÄč˙˙˙čUPčw˙˙˙[´&´&¸̀ë÷´&Sť€•ƒ=€•t
‹˙ЃĂƒ;uô[Í6АU‰ĺ‹EƒŔ‹Rčçţ˙˙ƒÄ‰ŔPčěţ˙˙ƒÄ‰ŔPhh…čŹţ˙˙ƒÄ1Ŕë
ś´&‰ě]АSťt•ƒ=t•˙t
‹˙ЃĂüƒ;˙uô[Í6АčK˙˙˙Â%u˙˙˙˙˙˙˙˙Ź•žƒ΃ރîƒţƒ„„ ƒ
`…耰‚€
Ż„•8hƒ`ƒ01.0101.0101.01GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.0GCC: (GNU) 2.7.2.l.3.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.note.commentԀÔ#č€č˜)€€01°‚°Ż9	`ƒ`B	hƒh8K ƒ Q¨ƒ¨€V0„0$\`…`bh…hjp•ppt•tw|•|~„•„(ƒŹ•ŹˆŒ4–4‘4<—p>Ž č
ŕ)	Čw	

ń˙0…	0…	1x•
>P…	It•W€•dń˙k „	ń˙°„	p°„	†|•”Đ„	It•Ÿt•
­ń˙ŕ„	¸¸ƒ("żŹ•ń˙ČT…ń˙Ďp•Ů ƒßȃFëp• ó؃9ýčƒ"4–0„€	0„	'4–ń˙3ŕ„D	8`…
>řƒ4E4–ń˙L„•ń˙b8–ń˙g„€l„>crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__encodeip.cprintf_DYNAMIC_etext__environ_init__libc_initenvironinet_addrntohl__fpu_control_start___crt_dummy____bss_startmain_finiatexit_edata_GLOBAL_OFFSET_TABLE__endexit__setfpucwencodeip.c100644    765      0         157  6347302757  11453 0ustar  wolfieroot#include <sys/socket.h>

main(int argc, char *argv[]){
	printf("%u",ntohl(inet_addr(argv[1])));

	return(0);
}
events.tcl100644    765      0        2705  6414203134  11532 0ustar  wolfierootpackage provide events 1.0

# Events.tcl
# handle system and user added events.
#
# and event is described in the following manner
#
# LEVEL:EVENT:CHANNEL:NICK|USERHOST:ACTION
#
# where 
#
#	LEVEL = users level in user list (if not in list the level = 0)
#
#	EVENT = the event that was triggered
#
#	CHANNEL = the channel the event was triggered on  or "*"
#
#	NICK|USERHOST = the nickname or userhost or "*" that triggered the event
#
#	ACTION = zipper irc command to execute


proc irc_event {ircevent ircchan ircuser target} {
	global eventlist
	global userlist
	global myuserhost
	global nick


	set ircevent [string tolower $ircevent]
	set ircchan [string tolower $ircchan]
	set ircuser [string tolower $ircuser]
	set me [string tolower $nick]
	set level [get_level $ircuser]
	if [is_me $ircuser] { return }
	foreach item $eventlist {
	 	set list [split $item ":"]
		set evlevel [lindex $list 0]
		set evevent [lindex $list 1]
		set evchannel [lindex $list 2]
		set evuser [lindex $list 3]
		set evaction [lindex $list 4]

		set evchannel [string tolower $evchannel]
		set evevent [string tolower $evevent]
		set evuser [string tolower $evuser]

		if ![string compare $ircevent $evevent] {
		if [string match $evuser $ircuser] {
			if [string match $evchannel $ircchan] {
				if [expr $level >= $evlevel] {

					set l [split $evaction ";"]
					foreach command $l {
						substitute $ircuser $ircchan $target
						fake_user_in $command
					}
				}
			}

		}
		}

	}

}
eventsrc100644    765      0         143  6420702737  11262 0ustar  wolfieroot0:KICK:*:#gaync:/set tarlev -@level,-$parm1 ; -@prot.tcl,-$fromnick,-$parm1,-%tarlev,-$fromchannel
getdevaddr100755    765      0         122  6416722434  11543 0ustar  wolfieroot#!/bin/sh
/sbin/ifconfig $1|head -n 2|tail -n 1|gawk '{print $2}' | cut -f 2 -d :
gethost100755    765      0        7726  6347771273  11160 0ustar  wolfierootELF„4ü4 (44€4€  ÔԀԀ€€  • •ŔÄXX•X•ˆˆ/lib/ld-linux.so.1

	˜ƒ("X•ń˙ •%€ƒ+¨ƒF7 • ?ŕ•M…
S¸ƒ"_ȃ4f4•ń˙|؃€čƒ>Œ…ń˙“ŕ•ń˙šŕ•ń˙Śä•ń˙libc.so.5printf_DYNAMIC__environ_init__libc_initenviron__fpu_control_finigethostnameatexit_GLOBAL_OFFSET_TABLE_exit__setfpucw_etext_edata__bss_start_endŕ•@•D•H•	L•
P•T•
č[Â˙58•˙%<•˙%@•héŕ˙˙˙˙%D•héĐ˙˙˙˙%H•héŔ˙˙˙˙%L•hé°˙˙˙˙%P•h é ˙˙˙˙%T•h(é˙˙˙Y‰ă‰ŕ‰ĘŇŇЃŔ1íUUU‰ĺPSQ¸ˆťÍ€‹D$Ł •ˇŕ•PčŹ˙˙˙ƒÄčd˙˙˙h…čz˙˙˙ƒÄč*˙˙˙čUPčw˙˙˙[´&´&¸̀ë÷´&Sť0•ƒ=0•t
‹˙ЃĂƒ;uô[Í6АU‰ĺƒědjEœPč÷ţ˙˙ƒÄEœPh…čĆţ˙˙ƒÄ‰ě]АSť$•ƒ=$•˙t
‹˙ЃĂüƒ;˙uô[Í6Аčk˙˙˙Â%s
˙˙˙˙˙˙˙˙X•žƒރžƒ΃ރîƒ€ƒ
…č€œ‚|
Ť4•0PƒHƒ01.0101.0101.01GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.0GCC: (GNU) 2.7.2.l.3.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.note.commentԀÔ#č€č”)|| 1œ‚œŤ9	HƒHB	PƒP0K€ƒ€QˆƒˆpV„\…b…j • p$•$w,•,~4•4$ƒX•XˆŒŕ•ŕ‘ŕ<—>Z ”
Đ)	dr	

ń˙ŕ„	ŕ„	1(•
>…	I$•W0•dń˙kp„	ń˙€„	p€„	†,•” „	I$•Ÿ$•
­ń˙°„	ˇ˜ƒ("žX•ń˙Ç…ń˙Î •؀ƒިƒFę • ňŕ•„€	„	ŕ•ń˙"°„)	'…
-¸ƒ"9ȃ4@ŕ•ń˙G4•ń˙]ä•ń˙b؃€gčƒ>crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__gethost.cprintf_DYNAMIC_etext__environ_init__libc_initenviron__fpu_control_start___crt_dummy____bss_startmain_finigethostnameatexit_edata_GLOBAL_OFFSET_TABLE__endexit__setfpucwgethost.c100644    765      0         137  6347771271  11341 0ustar  wolfieroot#include <unistd.h>

main(){
	char name[100];
	gethostname(name,15);
	printf("%s\n",name);


}
getid100755    765      0       10212  6416700662  10566 0ustar  wolfierootELFp„4„4 (44€4€  ÔԀԀ€€››  • •ČĚŕŕ•ŕ•ˆˆ/lib/ld-linux.so.1	

čƒ("ŕ•ń˙ •%Ѓ+řƒF7 • ?h–M„"S„C]…
c(„4j´•ń˙€8„€…H„>X„źš„…ń˙Ąh–ń˙¨h–ń˙´l–ń˙libc.so.5printf_DYNAMIC__environ_init__libc_initenviron__fpu_controlhtonlinet_ntoa_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucwgethostid_etext_edata__bss_start_endh–Ŕ•ĕȕ̕	Еԕ
ؕܕč‹Â˙5¸•˙%ź•˙%Ŕ•héŕ˙˙˙˙%ĕhéĐ˙˙˙˙%ȕhéŔ˙˙˙˙%̕hé°˙˙˙˙%Еh é ˙˙˙˙%ԕh(é˙˙˙˙%ؕh0é€˙˙˙˙%ܕh8ép˙˙˙Y‰ă‰ŕ‰ĘŇŇЃŔ1íUUU‰ĺPSQ¸ˆťÍ€‹D$Ł •ˇh–Pčœ˙˙˙ƒÄčD˙˙˙h…čj˙˙˙ƒÄč
˙˙˙čUPčg˙˙˙[´&´&¸̀ë÷´&Sť°•ƒ=°•t
‹˙ЃĂƒ;uô[Í6АU‰ĺƒěč-˙˙˙‰Eü‹EüPčŃţ˙˙ƒÄ‰ŔPčÖţ˙˙ƒÄ‰ŔPh˜…č–ţ˙˙ƒÄ‰ě]АSť¤•ƒ=¤•˙t
‹˙ЃĂüƒ;˙uô[Í6Аč[˙˙˙Â%s˙˙˙˙˙˙˙˙ŕ•îƒţƒ„„.„>„N„^„Ѓ
…č€Ă„
š´•@ˆƒ€ƒ01.0101.0101.01GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.0GCC: (GNU) 2.7.2.l.3.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.note.commentԀÔ#č€čœ)„„@1ĂÄš9	€ƒ€B	ˆƒˆ@KЃĐQ؃ؐVp„p\…b˜…˜j • p¤•¤wŹ•Ź~´•´,ƒŕ•ŕˆŒh–h‘h<—¤>â đ)	~	

ń˙`…	`…	1¨•
>€…	I¤•W°•dń˙kŕ„	ń˙đ„	pđ„	†Ź•”…	I¤•Ÿ¤•
­ń˙ …	ľčƒ("źŕ•ń˙ń…ń˙Ě •ÖЃÜřƒF蠕 đh–ţp„€	„"p„	h–ń˙& …9	+„C5…
;(„4Bh–ń˙I´•ń˙_l–ń˙d8„€iH„>tX„źcrtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__getid.cprintf_DYNAMIC_etext__environ_init__libc_initenviron__fpu_control_starthtonl___crt_dummy____bss_startmaininet_ntoa_finiatexit_edata_GLOBAL_OFFSET_TABLE__endexit__setfpucwgethostidgetid.c100644    765      0         156  6416700736  10754 0ustar  wolfieroot#include <unistd.h>

main(){
	unsigned long int id;
	id=gethostid();
	printf("%s",inet_ntoa(htonl(id))); 


}
getport100755    765      0       12403  6352507412  11157 0ustar  wolfierootELF †4ô
4 (44€4€  ÔԀԀ€€ďďđđ˜đ˜č@P	P™P™ˆˆ/lib/ld-linux.so.1	

…("P™ń˙ؙT'(…<.8…^"5H…"<đ˜FX…6L…Rh…F^đ˜ fx…^"k,šyˆ…
"˜…V"ˆŕˆ
ލ…4•™ń˙Ť¸…
"ąČ…€śŘ…"ťč…>Ćř…"̆^"ŘԈń˙ßؙń˙ćؙń˙ň0šń˙libc.so.5printf_DYNAMIC_IO_stdout_memcpysocketfflush__environbzero_init__libc_initenvironbind__fpu_controlntohsshutdown_finiatexit_GLOBAL_OFFSET_TABLE_htonsexitatoi__setfpucwclosegetsockname_etext_edata__bss_start_endؙ,š
™™™™ ™$™
(™,™0™4™8™<™@™D™H™L™čŤÂ˙5™˙%™˙%™héŕ˙˙˙˙%™héĐ˙˙˙˙%™héŔ˙˙˙˙%™hé°˙˙˙˙% ™h é ˙˙˙˙%$™h(é˙˙˙˙%(™h0é€˙˙˙˙%,™h8ép˙˙˙˙%0™h@é`˙˙˙˙%4™hHéP˙˙˙˙%8™hPé@˙˙˙˙%<™hXé0˙˙˙˙%@™h`é ˙˙˙˙%D™hhé˙˙˙˙%H™hpé˙˙˙˙%L™hxéđţ˙˙Y‰ă‰ŕ‰ĘŇŇЃŔ1íUUU‰ĺPSQ¸ˆťÍ€‹D$Łđ˜ˇ,šPčŒ˙˙˙ƒÄč˙˙˙hŕˆč:˙˙˙ƒÄčŠţ˙˙čőPčG˙˙˙[´&´&¸̀ë÷´&Sť™ƒ=™t
‹˙ЃĂƒ;uô[Í6АU‰ĺƒě<jjjčWţ˙˙ƒÄ‰Ŕ‰Eԃ}Ô}¸˙˙˙˙é7´&ÇE̍MĉMř‹EřM̉‹EřƒŔÇÇEôÇEđMč‰MüjEŘPčţ˙˙ƒÄfÇEŘ‹Eü‹PR‹Eü‹P‹PE؍PRčĂý˙˙ƒÄ‹EˇRčDţ˙˙ƒÄ‰Ŕf‰EÚjEŘP‹EÔPčěý˙˙ƒÄ‰Ŕ…Ŕ};‹EÔPčZţ˙˙ƒÄhčˆčmý˙˙ƒÄhؙčý˙˙ƒÄ¸˙˙˙˙ën´&´&ÇEЍEĐPEŘP‹EÔPč ţ˙˙ƒÄˇEÚPč“ý˙˙ƒÄ‰Ŕ‹UˇČ‰
‹E‹Rhëˆčý˙˙ƒÄhؙč)ý˙˙ƒÄ‹EÔë	6´&‰ě]ÍśśU‰ĺj‹EPčJý˙˙ƒÄ‹EPčžý˙˙ƒÄ‰ě]Ăë
U‰ĺƒě‹EƒŔ‹RčTý˙˙ƒÄ‰Ŕ‰EüEüPč;ţ˙˙ƒÄ‰Ŕ‰Eř‹EřPčš˙˙˙ƒÄ‰ě]АSťô˜ƒ=ô˜˙t
‹˙ЃĂüƒ;˙uô[Í6Аčťý˙˙Â0
%d
˙˙˙˙˙˙˙˙P™….…>…N…^…n…~…Ž…ž…Ž…ž…΅ޅî…ţ…†…
ŕˆč€xƒ¨
÷™€€„p„01.0101.0101.01GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.0GCC: (GNU) 2.7.2.l.3.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.note.commentԀÔ#č€čŔ)¨¨Đ1xƒx÷9	p„pB	€„€€K…Q…V † ´\ŕˆŕbčˆčjđ˜đpô˜ôwü˜ü~™	LƒP™P	ˆŒؙŘ	X‘Ř	<—
>R
 Œ )	,×	

ń˙°ˆ	°ˆ	1ř˜
>Ј	Iô˜W™dń˙k†	ń˙ †	p †	†ü˜”Ŕ†	Iô˜Ÿô˜
­ń˙І	ˇ…("žP™ń˙ÇԈń˙ÎؙTÚ(…<á8…^"čH…"ďđ˜ůX…6˙…@ˆ!	h…Fđ˜ &x…^"+Іd	7,šE †€	L †	[ؙń˙gpˆ=	lˆ…
"r˜…V"{ŕˆ
¨…4ˆؙń˙™ń˙Ľ0šń˙޸…
"°ȅ€ľ؅"şč…>Ĺř…"ˆ^"crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__getport.cprintf_DYNAMIC_etext_IO_stdout_memcpysocketfflush__environbzero_initclose_server__libc_initenvironbindinit_server__fpu_control_start___crt_dummy____bss_startmainntohsshutdown_finiatexit_edata_GLOBAL_OFFSET_TABLE__endhtonsexitatoi__setfpucwclosegetsocknamegetport.c100644    765      0        3224  6351757422  11365 0ustar  wolfieroot#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/time.h>
#include <fcntl.h>
                              


int init_server(int *port){
        struct hostent *zhost, chost;
        struct sockaddr_in addr;
        int sock, t;
        int hostaddr, hostptr[2];

        if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
        {
         return -1;
        }


        hostaddr = INADDR_ANY;
        chost.h_addr_list = (char **) hostptr;
        chost.h_addr_list[0] = (char *) &hostaddr;
        chost.h_addr_list[1] = NULL;
        chost.h_length = sizeof(hostaddr);
        chost.h_addrtype = AF_INET;
        zhost = &chost;                         

	  bzero((char *) &addr, sizeof(addr));
        addr.sin_family = AF_INET;
        memcpy((char *) &(addr.sin_addr.s_addr),
           (char *) zhost->h_addr_list[0],
           (size_t) zhost->h_length);
        addr.sin_port = htons(*port);

        if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0)
        {
         (void) close(sock);
         printf("0\n");
        fflush(stdout);
         return -1;
        }
        t = sizeof(addr);
        getsockname (sock, (struct sockaddr *) &addr, &t);
        *port = ntohs(addr.sin_port);
                                          
	    printf("%d\n",*port);
        fflush(stdout);

    return sock;


}                   


close_server(int sock) {

        shutdown(sock,2);
        close(sock);

}


main(int argc, char *argv[]) {
	int port=atoi(argv[1]);
	int sock;

	sock=init_server(&port);
	close_server(sock);

}
ignorerc100644    765      0           1  6420703363  11166 0ustar  wolfieroot
install100755    765      0         265  6420706167  11110 0ustar  wolfieroot#!/bin/sh
mkdir /tmp/zipperinstall
cp zippera1.tgz /tmp/zipperinstall
cd /tmp/zipperinstall
tar -xzf zippera1.tgz
install2 $1
install1 $1
rm -r /tmp/zipperinstall
cd $1
zippersetup
install1100755    765      0          31  6416444312  11134 0ustar  wolfieroot#!/bin/sh
installrc
ridx
install2100755    765      0         154  6416444326  11170 0ustar  wolfieroot#!/bin/sh

echo "Installing to $1..."
echo $1 > installpath
mkdir $1
cp * $1
cd $1
make
chmod ugo+rx zipper
installpath100644    765      0          14  6420702737  11731 0ustar  wolfieroot~/zipperdev
installrc100755    765      0         356  6420705067  11434 0ustar  wolfieroot#!/usr/local/bin/tclsh7.6
set files [exec ls]
set flist [split $files "\n"]
file mkdir "~/.zipper"
foreach file $flist {

	if [string match *rc $file] {
		file copy -force "$file" ~/.zipper/
	}

}

file copy -force installpath ~/.zipper/
irc_dcc.txt100644    765      0       12504  6336351164  11701 0ustar  wolfieroot		A description of the DCC protocol
		=================================
	By Troy Rollo (troy@plod.cbme.unsw.oz.au)

	(In response for requests for the protocol to be
	 documented).

	The first comment I should make is that the DCC protocol
was never designed to be portable to clients other than IRCII.
As such I take no responsibility for it being difficult to
implement for other clients.


		Why DCC?
		========

	DCC allows the user to overcome some limitations
of the IRC server network and to have the ultimate in secure
chat connections while still in an IRC oriented protocol.

	DCC uses direct TCP connections between the clients
taking part to carry data. There is no flood control, so
packets can be sent at full speed, and there is no
dependance on server links (or load imposed on them). In
addition, since only the initial handshake for DCC conections
is passed through the IRC network, it is impossible for
Operators with cracked servers to spy on DCC messages.

		How?
		====

	The initial socket for a DCC connection is created
by the side that initiates (Offers) the connection. This socket
should be a TCP socket bound to INADDR_ANY, listening for
connections.
	The Initiating client, on creating the socket, should
send its details to the target client using the CTCP command
DCC. This command takes the form:

	DCC type argument address port

type	- The connection type
argument - The connectin type dependant argument
address	- the host address of the initiator as an integer.
port	- the port or the socket on which the initiator expects
	  to receive the connection.

The address and port should be sent as ascii representations of the
decimal integer formed by converting the values to host byte order
and treating them as an unsigned long and unsigned short respectively.


	The following DCC connection types are known to IRCII:

Type	Purpose				Argument
CHAT	To carry a secure conversation	the string "chat"
SEND	To send a file to the recipient	the file name

In addition, the following are included in the IRCII DCC command,
although they do not transmit a DCC request via IRC:

TALK	Establishes a TALK connection


		Implementation
		==============

	The CHAT and SEND connection types should not be
accepted automatically as this would create the potential for
terrorism. Instead, they should notify the user that an
offer has been made, and allow the user to accept it.

	The recipient should have the opportunity to rename
a file send with the DCC SEND command prior to retrieving
it.

	The following are the steps which should occur in
the clients:

Initiator:
	DCC command issued.
	Create a socket, bind it to INADDR_ANY, port 0, and
		make it passive (a listening socket).
	Send the recipient a DCC request via CTCP supplying
		the address and port of the socket. (This
		is ideally taken from the address of the local
		side of the socket which is connected to a
		server. This is presumably the interface on
		the host which is closest to the rest of
		the net, and results in one less routing hop
		in the case of gateway nodes).
	Continue normally until a connection is received.

	On a connection:
	Accept the connection.
	Close the original passive socket.
	Conduct transaction on the new socket.

Acceptor:
	CTCP DCC request received.
	Record information on the DCC request and notify the user.

	At this point, the USER should be able to abort (close) the
	request, or accept it. The request should be accepted with
	a command specifying the sender, type, and argument, or
	a subset of these where no ambiguity exists.

	If accepted, create a TCP socket.
	Connect the new socket to the address and port supplied.
	Conduct the transaction over the socket.


		Type specific details.
		======================

CHAT	Data sent across a CHAT connection should be sent line-by-line
	without any prefixes or commands. A CHAT connection ends when
	one party issues the DCC CLOSE command to their clients, which
	causes the socket to be closed and the information on the connection
	to be discarded.

FILE	Data is sent in packets, rather than dumped in a stream manner.
	This allows the DCC SEND connection to survive where an FTP
	connection might fail. The size of the packets is up to the
	client, and may be set by the user. Smaller packets result
	in a higher probability of survival over bad links.
	The recipient should acknowledge each packet by transmitting
	the total number of bytes received as an unsigned, 4 byte
	integer in network byte order. The sender should not continue
	to transmit until the recipient has acknowledged all data
	already transmitted. Additionally, the sender should not
	close the connection until the last byte has been
	acknowledged by the recipient.

	Note that it is not possible for the recipient to tell if the
	entire file has been received - only the sender has that
	information, although IRCII does not report it. Users generally
	verify the transfer by checking file sizes.

	Note also that no provision is made for text translation.

	The block size used by IRCII is BIG_BUFFER_SIZE (1024).
	This should probably be reviewed and reduced.


--
_______________________________________________________________________________
troy@cbme.unsw.EDU.AU	      Overworked, overcommited and always multitasking.
Opinions expressed are not those of the CBME or UNSW, but are my opinions only.
You are free to adopt them.   I suggest you adopt them.    You will adopt them!

list.tcl100755    765      0         124  6405310224  11154 0ustar  wolfieroot#!/usr/local/bin/tclsh
#
#
set list [lindex $argv 0]

puts stdout "The list>$list<"
makefile100644    765      0         407  6351756436  11221 0ustar  wolfierootall:	encodeip decodeip zdcc gethost getport


encodeip:	encodeip.c
	cc -o encodeip encodeip.c
decodeip:	decodeip.c
	cc -o decodeip decodeip.c
zdcc:		zdcc.c
	cc -o zdcc zdcc.c
gethost:	gethost.c
	cc -o gethost gethost.c
getport:	getport.c
	cc -o getport getport.c
menu.tcl100644    765      0         255  6337451036  11162 0ustar  wolfierootpackage provide menu 1.0


proc init_menu {} {
	
	init_popups
	init_menu_window



}


proc init_popups {} {


}
proc init_menu_window {} {


}



proc nicklist_menu {} {
}
mkins100755    765      0        1013  6421230342  10557 0ustar  wolfieroot#!/bin/sh
# the next line restarts using wish \
exec tclsh "$0" "$@"  
if [file exists server.log] {
	puts "Removing server.log"
	exec rm server.log
}

set name [lindex $argv 0]
puts "Making Installation for $name"

if [file exists zipper.tgz] {
	puts "Removing zipper.tgz"
	exec rm zipper.tgz
}
if [file exists $name] {
	puts "Removing $name"
	exec rm $name
}

set list [exec ls]
set f [open mkins2 "w"] 

puts $f "exec tar -czf $name [join [split $list "\n"] " "]"
close $f
source mkins2
exec rm mkins2
exec mkinsI $name
mkinsI100755    765      0          66  6421230303  10634 0ustar  wolfieroot#!/bin/sh

tar -czf zipper.tgz install $1 INSTALL.txt
notifyrc100644    765      0           1  6420703374  11215 0ustar  wolfieroot
personal.tcl100644    765      0          35  6372114067  12014 0ustar  wolfierootpackage provide personal 1.0
pingtime100755    765      0        7740  6337451036  11302 0ustar  wolfierootELF„44 (44€4€  ÔԀԀ€€++00•0•ŔÄhh•h•ˆˆ/lib/ld-linux.so.1	

˜ƒ("h•ń˙0•%€ƒ+¨ƒF70• ?đ•M¸ƒ"R …
Xȃ4_D•ń˙u؃€zčƒ>……ń˙Œđ•ń˙“đ•ń˙Ÿô•ń˙libc.so.5printf_DYNAMIC__environ_init__libc_initenviron__fpu_controltime_finiatexit_GLOBAL_OFFSET_TABLE_exit__setfpucw_etext_edata__bss_start_endđ•P•T•X•\•
`•d•
čkÂ˙5H•˙%L•˙%P•héŕ˙˙˙˙%T•héĐ˙˙˙˙%X•héŔ˙˙˙˙%\•hé°˙˙˙˙%`•h é ˙˙˙˙%d•h(é˙˙˙Y‰ă‰ŕ‰ĘŇŇЃŔ1íUUU‰ĺPSQ¸ˆťÍ€‹D$Ł0•ˇđ•PčŹ˙˙˙ƒÄčd˙˙˙h …čz˙˙˙ƒÄč*˙˙˙čUPčw˙˙˙[´&´&¸̀ë÷´&Sť@•ƒ=@•t
‹˙ЃĂƒ;uô[Í6АU‰ĺƒějčűţ˙˙ƒÄ‰Eü‹EüPh(…čÇţ˙˙ƒÄ1Ŕ됍´&‰ě]АSť4•ƒ=4•˙t
‹˙ЃĂüƒ;˙uô[Í6Аč[˙˙˙Â%d˙˙˙˙˙˙˙˙h•žƒރžƒ΃ރîƒ€ƒ
 …č€œ‚|
¤D•0Hƒ@ƒ01.0101.0101.01GCC: (GNU) 2.7.2.l.3GCC: (GNU) 2.7.0GCC: (GNU) 2.7.2.l.3.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.note.commentԀÔ#č€č”)|| 1œ‚œ¤9	@ƒ@B	HƒH0K€ƒ€QˆƒˆpV„\ … b(…(j0•0p4•4w<•<~D•D$ƒh•hˆŒđ•đ‘đ<—,>j ¤
Đ)	tl	

ń˙đ„	đ„	18•
>…	I4•W@•dń˙kp„	ń˙€„	p€„	†<•” „	I4•Ÿ4•
­ń˙°„	¸˜ƒ("żh•ń˙Č…ń˙Ď0•ـƒߨƒFë0• óđ•„€	„	đ•ń˙#°„4	(¸ƒ"- …
3ȃ4:đ•ń˙AD•ń˙Wô•ń˙\؃€ačƒ>crtstuff.cgcc2_compiled.__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END__crt0.Sdone__do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__pingtime.cprintf_DYNAMIC_etext__environ_init__libc_initenviron__fpu_control_start___crt_dummy____bss_startmaintime_finiatexit_edata_GLOBAL_OFFSET_TABLE__endexit__setfpucwpingtime.c100644    765      0         147  6337451036  11472 0ustar  wolfieroot#include <stdio.h>
#include <time.h>

main() {
	int t;
	
	t=time(NULL);
	printf("%d",t);

	return 0;
}
pkgIndex.tcl100644    765      0       10365  6421461775  12037 0ustar  wolfieroot# Tcl package index file, version 1.0
# This file is generated by the "pkg_mkIndex" command
# and sourced either when an application starts up or
# by a "package unknown" script.  It invokes the
# "package ifneeded" command to set up package-related
# information so that packages will be loaded automatically
# in response to "package require" commands.  When this
# script is sourced, the variable $dir must contain the
# full path name of this file's directory.

package ifneeded clicks 1.0 [list tclPkgSetup $dir clicks 1.0 {{clicks.tcl source {channel_add channel_del channel_done channel_join channel_names ctcp_add ctcp_del ctcp_done ctcp_upd event_add event_del event_done event_upd ignore_add ignore_del ignore_done ignore_upd leave_chan_button load_ctcp_edit load_event_edit load_ignore_edit load_user_edit modify_channels modify_ctcps modify_events modify_ignore modify_notify modify_servers modify_users notify_add notify_del open_irc_connection server_add server_connect server_del server_done unban_button user_add user_del user_done user_upd}}}]
package ifneeded ctcp 1 [list tclPkgSetup $dir ctcp 1 {{ctcp.tcl source {ctcp_ACTION ctcp_DCC handle_ctcp handle_ctcp_reply init_ctcp_rec}}}]
package ifneeded custom 1.0 [list tclPkgSetup $dir custom 1.0 {{custom.tcl source {close_irc_connection do_action do_alias do_ban do_chat do_clone do_command_alias do_ctcp do_custom_command do_describe do_disconnect do_echo do_edit do_exec do_ignore do_irccommand do_join do_kick do_list do_load do_me do_mode do_modify do_msg do_names do_nick do_notice do_notify do_part do_play do_query do_quit do_quote do_rctcp do_recycle do_save do_say do_script do_send do_server do_set do_topic do_who do_whois set_command}}}]
package ifneeded dccchat 1.0 [list tclPkgSetup $dir dccchat 1.0 {{dccchat.tcl source {accept_dcc_connection canceldcc closedcc connect_dcc_connection dccchat decode_ip encode_ip get_dcc_nick_from_socket get_dcc_sock_from_nick handle_dcc_message init_dcc_connection new_dcc_window read_dcc_sock read_dcc_user_in remove_dcc_nick_list send_to_dcc_server}}}]
package ifneeded defaults 1.0 [list tclPkgSetup $dir defaults 1.0 {{defaults.tcl source {}}}]
package ifneeded events 1.0 [list tclPkgSetup $dir events 1.0 {{events.tcl source irc_event}}]
package ifneeded menu 1.0 [list tclPkgSetup $dir menu 1.0 {{menu.tcl source {init_menu init_menu_window init_popups nicklist_menu}}}]
package ifneeded personal 1.0 [list tclPkgSetup $dir personal 1.0 {{personal.tcl source {}}}]
package ifneeded server 1.0 [list tclPkgSetup $dir server 1.0 {{server.tcl source {do_command handle_server_message read_sock rec_BANLIST rec_CHANLIST rec_CHANMODE rec_CHANNELDATE rec_JOIN rec_JOINTOPIC rec_KICK rec_LIST rec_MODE rec_MOTD rec_NICK rec_NICKINUSE rec_NOTICE rec_NOTIFY rec_PART rec_PERSONAL rec_PING rec_PRIVMSG rec_QUIT rec_STARTUP rec_TOPIC rec_WHOISCHANNELS rec_WHOISENDOF rec_WHOISIDLE rec_WHOISOPERATOR rec_WHOISSERVER rec_WHOISUSER rec_unknown}}}]
package ifneeded user 1.0 [list tclPkgSetup $dir user 1.0 {{user.tcl source {}}}]
package ifneeded util 1.0 [list tclPkgSetup $dir util 1.0 {{util.tcl source {aliasindex center chan_exists channel check_notify customsort do_menu_command extract_msg fake_user_in format_user_command funcvalue get_chan_name get_level get_nick_from_hostmask get_nick_from_hostmask2 get_shortnick get_user_list_entry get_userhost_from_hostmask init_aliases init_channels init_check_rc init_custom_command init_events init_ignore init_notify init_servers init_stylecolors init_user_rc init_users insert_chan_list insert_nick is_active is_channel is_me is_on_ignore ison join_channel_from_list loadstartupscript lremove max_size playsystembell process_options read_user_in remove_chan_list remove_nick roll_off_hist sNull select_history send_to_server set_chan_activity set_popups set_styles substitute togglemode update_chan_activity varindex varvalue}}}]
package ifneeded winman 1.0 [list tclPkgSetup $dir winman 1.0 {{winman.tcl source {add_system_menus ask_user bgerror choose_file conftag create_banlist_window create_chanlist_window do_about goto_window kill_window new_ctcp_list new_event_list new_msg_window new_pers_channel new_pers_ignore new_pers_notify new_pers_server new_server new_user_list new_window notify_window send_to_window set_userlist_popup tkerror winman winman2 winmannew}}}]
popuprc100644    765      0         663  6420703403  11117 0ustar  wolfieroot[USERLIST]
- User List Control
- Info
Whois /whois -$parm1
- CTCP
Ping /ping -$parm1
Finger /ctcp -$parm1 finger
Version /ctcp -$parm1 version
Time /ctcp -$parm1 time
Userinfo /ctcp -$parm1 userinfo
Clientinfo /ctcp -$parm1 clientinfo
- Control
Op /mode # +o -$parm1
deOp /mode # -o -$parm1
Kick /kick # -$parm1
[-]
[NOTIFY]
Whois /whois -$parm1
[-]
[CHANNEL]
[-]
[QUERY]
Whois /whois -$parm1
SEND /send -$parm1
CHAT /chat -$parm1
[-]
popuprcold100644    765      0         456  6411735355  11631 0ustar  wolfieroot- User List Control
- Info
Whois /whois -$parm1
- CTCP
Ping /ping -$parm1
Finger /ctcp -$parm1 finger
Version /ctcp -$parm1 version
Time /ctcp -$parm1 time
Userinfo /ctcp -$parm1 userinfo
Clientinfo /ctcp -$parm1 clientinfo
- Control
Op /mode # +o -$parm1
deOp /mode # -o -$parm1
Kick /kick # -$parm1

prot.tcl100755    765      0         573  6416476400  11210 0ustar  wolfieroot#!/bin/sh
# the next line restarts using wish \
exec tclsh "$0" "$@"  

set from [lindex $argv 0]
set targ [lindex $argv 1]
set targlevel [lindex $argv 2]
set fromchan [lindex $argv 3]
set limit [lindex $argv 4]

if [expr $targlevel > $limit ] {

	set command "/say $fromchan $targ is a PROTECTED USER!;/kick $fromchan $from PROTECTED USER!"
	puts $command
	exit
}

puts "/echo"
rfc1459.txt100644    765      0      370627  6400634756  11450 0ustar  wolfieroot    This file is over 130K and may take over a minute to load by modem.

----------------------------------------------------------------------------

  Network Working Group                                      J. Oikarinen

  Request for Comments: 1459                                      D. Reed

                                                                 May 1993

                        Internet Relay Chat Protocol

  Status of This Memo

  This memo defines an Experimental Protocol for the Internet community.
  Discussion and suggestions for improvement are requested. Please refer
  to the current edition of the "IAB Official Protocol Standards" for the
  standardization state and status of this protocol. Distribution of this
  memo is unlimited.

  Abstract

  The IRC protocol was developed over the last 4 years since it was first
  implemented as a means for users on a BBS to chat amongst themselves.
  Now it supports a world-wide network of servers and clients, and is
  stringing to cope with growth. Over the past 2 years, the average number
  of users connected to the main IRC network has grown by a factor of 10.

  The IRC protocol is a text-based protocol, with the simplest client
  being any socket program capable of connecting to the server.

  Table of Contents

        INTRODUCTION  ...............................................    4

        1.1  Servers ................................................    4

        1.2  Clients ................................................    5

           1.2.1 Operators ..........................................    5

        1.3 Channels ................................................    5

        1.3.1  Channel Operators ....................................    6

        THE IRC SPECIFICATION .......................................    7

        2.1 Overview ................................................    7

        2.2 Character codes .........................................    7

        2.3 Messages ................................................    7

           2.3.1  Message format in 'pseudo' BNF ....................    8

        2.4 Numeric replies .........................................   10

        IRC Concepts ................................................   10

        3.1 One-to-one communication ................................   10

        3.2 One-to-many .............................................   11

           3.2.1 To a list ..........................................   11

           3.2.2 To a group (channel) ...............................   11

           3.2.3 To a host/server mask ..............................   12

        3.3 One to all ..............................................   12

           3.3.1 Client to Client ...................................   12

           3.3.2 Clients to Server ..................................   12

           3.3.3 Server to Server ...................................   12

     4. MESSAGE DETAILS .............................................   13

        4.1 Connection Registration .................................   13

           4.1.1 Password message ...................................   14

           4.1.2 Nickname message ...................................   14

           4.1.3 User message .......................................   15

           4.1.4 Server message .....................................   16

           4.1.5 Operator message ...................................   17

           4.1.6 Quit message .......................................   17

           4.1.7 Server Quit message ................................   18

        4.2 Channel operations ......................................   19

           4.2.1 Join message .......................................   19

           4.2.2 Part message .......................................   20

           4.2.3 Mode message .......................................   21

              4.2.3.1 Channel modes .................................   21

              4.2.3.2 User modes ....................................   22

           4.2.4 Topic message ......................................   23

           4.2.5 Names message ......................................   24

           4.2.6 List message .......................................   24

           4.2.7 Invite message .....................................   25

           4.2.8 Kick message .......................................   25

        4.3 Server queries and commands .............................   26

           4.3.1 Version message ....................................   26

           4.3.2 Stats message ......................................   27

           4.3.3 Links message ......................................   28

           4.3.4 Time message .......................................   29

           4.3.5 Connect message ....................................   29

           4.3.6 Trace message ......................................   30

           4.3.7 Admin message ......................................   31

           4.3.8 Info message .......................................   31

        4.4 Sending messages ........................................   32

           4.4.1 Private messages ...................................   32

           4.4.2 Notice messages ....................................   33

        4.5 User-based queries ......................................   33

           4.5.1 Who query ..........................................   33

           4.5.2 Whois query ........................................   34

           4.5.3 Whowas message .....................................   35

        4.6 Miscellaneous messages ..................................   35

           4.6.1 Kill message .......................................   36

           4.6.2 Ping message .......................................   37

           4.6.3 Pong message .......................................   37

           4.6.4 Error message ......................................   38

     5. OPTIONAL MESSAGES ...........................................   38

        5.1 Away message ............................................   38

        5.2 Rehash command ..........................................   39

        5.3 Restart command .........................................   39

        5.4 Summon message ..........................................   40

        5.5 Users message ...........................................   40

        5.6 Operwall command ........................................   41

        5.7 Userhost message ........................................   42

        5.8 Ison message ............................................   42

     6. REPLIES .....................................................   43

        6.1 Error Replies ...........................................   43

        6.2 Command responses .......................................   48

        6.3 Reserved numerics .......................................   56

     7. Client and server authentication ............................   56

     8. Current Implementations Details .............................   56

        8.1 Network protocol: TCP ...................................   57

           8.1.1 Support of Unix sockets ............................   57

        8.2 Command Parsing .........................................   57

        8.3 Message delivery ........................................   57

        8.4 Connection 'Liveness' ...................................   58

        8.5 Establishing a server-client connection .................   58

        8.6 Establishing a server-server connection .................   58

           8.6.1 State information exchange when connecting .........   59

        8.7 Terminating server-client connections ...................   59

        8.8 Terminating server-server connections ...................   59

        8.9 Tracking nickname changes ...............................   60

        8.10 Flood control of clients ...............................   60

        8.11 Non-blocking lookups ...................................   61

           8.11.1 Hostname (DNS) lookups ............................   61

           8.11.2 Username (Ident) lookups ..........................   61

        8.12 Configuration file .....................................   61

           8.12.1 Allowing clients to connect .......................   62

           8.12.2 Operators .........................................   62

           8.12.3 Allowing servers to connect .......................   62

           8.12.4 Administrivia .....................................   63

        8.13 Channel membership .....................................   63

     9. Current problems ............................................   63

        9.1 Scalability .............................................   63

        9.2 Labels ..................................................   63

           9.2.1 Nicknames ..........................................   63

           9.2.2 Channels ...........................................   64

           9.2.3 Servers ............................................   64

        9.3 Algorithms ..............................................   64

     10. Support and availability ...................................   64

     11. Security Considerations ....................................   65

     12. Authors' Addresses .........................................   65

 INTRODUCTION

 The IRC (Internet Relay Chat) protocol has been designed over a number of
 years for use with text based conferencing. This document describes the
 current IRC protocol.

 The IRC protocol has been developed on systems using the TCP/IP network
 protocol, although there is no requirement that this remain the only
 sphere in which it operates.

 IRC itself is a teleconferencing system, which (through the use of the
 client-server model) is well-suited to running on many machines in a
 distributed fashion. A typical setup involves a single process (the
 server) forming a central point for clients (or other servers) to connect
 to, performing the required message delivery/multiplexing and other
 functions.

 1.1 Servers

 The server forms the backbone of IRC, providing a point to which clients
 may connect to to talk to each other, and a point for other servers to
 connect to, forming an IRC network. The only network configuration allowed
 for IRC servers is that of a spanning tree [see Fig. 1] where each server
 acts as a central node for the rest of the net it sees.

                            [ Server 15 ]  [ Server 13 ] [ Server 14]

                                  /                \         /

                                 /                  \       /

         [ Server 11 ] ------ [ Server 1 ]       [ Server 12]

                               /        \          /

                              /          \        /

                   [ Server 2 ]          [ Server 3 ]

                     /       \                      \

                    /         \                      \

            [ Server 4 ]    [ Server 5 ]         [ Server 6 ]

             /    |    \                           /

            /     |     \                         /

           /      |      \____                   /

          /       |           \                 /

  [ Server 7 ] [ Server 8 ] [ Server 9 ]   [ Server 10 ]

                                   :

                                [ etc. ]

                                   :

                  [ Fig. 1. Format of IRC server network ]

 1.2 Clients

 A client is anything connecting to a server that is not another server.
 Each client is distinguished from other clients by a unique nickname
 having a maximum length of nine (9) characters. See the protocol grammar
 rules for what may and may not be used in a nickname. In addition to the
 nickname, all servers must have the following information about all
 clients: the real name of the host that the client is running on, the
 username of the client on that host, and the server to which the client is
 connected.

 1.2.1 Operators

 To allow a reasonable amount of order to be kept within the IRC network, a
 special class of clients (operators) is allowed to perform general
 maintenance functions on the network. Although the powers granted to an
 operator can be considered as 'dangerous', they are nonetheless required.
 Operators should be able to perform basic network tasks such as
 disconnecting and reconnecting servers as needed to prevent long-term use
 of bad network routing. In recognition of this need, the protocol
 discussed herein provides for operators only to be able to perform such
 functions. See sections 4.1.7 (SQUIT) and 4.3.5 (CONNECT).

 A more controversial power of operators is the ability to remove a user
 from the connected network by 'force', i.e. operators are able to close
 the connection between any client and server. The justification for this
 is delicate since its abuse is both destructive and annoying. For further
 details on this type of action, see section 4.6.1 (KILL).

 1.3 Channels

 A channel is a named group of one or more clients which will all receive
 messages addressed to that channel. The channel is created implicitly when
 the first client joins it, and the channel ceases to exist when the last
 client leaves it. While channel exists, any client can reference the
 channel using the name of the channel.

 Channels names are strings (beginning with a '&' or '#' character) of
 length up to 200 characters. Apart from the the requirement that the first
 character being either '&' or '#'; the only restriction on a channel name
 is that it may not contain any spaces (' '), a control G (^G or ASCII 7),
 or a comma (',' which is used as a list item separator by the protocol).

 There are two types of channels allowed by this protocol. One is a
 distributed channel which is known to all the servers that are connected
 to the network. These channels are marked by the first character being a
 only clients on the server where it exists may join it. These are
 distinguished by a leading '&' character. On top of these two types, there
 are the various channel modes available to alter the characteristics of
 individual channels. See section 4.2.3 (MODE command) for more details on
 this.

 To create a new channel or become part of an existing channel, a user is
 required to JOIN the channel. If the channel doesn't exist prior to
 joining, the channel is created and the creating user becomes a channel
 operator. If the channel already exists, whether or not your request to
 JOIN that channel is honoured depends on the current modes of the channel.
 For example, if the channel is invite-only, (+i), then you may only join
 if invited. As part of the protocol, a user may be a part of several
 channels at once, but a limit of ten (10) channels is recommended as being
 ample for both experienced and novice users. See section 8.13 for more
 information on this.

 If the IRC network becomes disjoint because of a split between two
 servers, the channel on each side is only composed of those clients which
 are connected to servers on the respective sides of the split, possibly
 ceasing to exist on one side of the split. When the split is healed, the
 connecting servers announce to each other who they think is in each
 channel and the mode of that channel. If the channel exists on both sides,
 the JOINs and MODEs are interpreted in an inclusive manner so that both
 sides of the new connection will agree about which clients are in the
 channel and what modes the channel has.

 1.3.1 Channel Operators

 The channel operator (also referred to as a "chop" or "chanop") on a given
 channel is considered to 'own' that channel. In recognition of this
 status, channel operators are endowed with certain powers which enable
 them to keep control and some sort of sanity in their channel. As an owner
 of a channel, a channel operator is not required to have reasons for their
 actions, although if their actions are generally antisocial or otherwise
 abusive, it might be reasonable to ask an IRC operator to intervene, or
 for the usersjust leave and go elsewhere and form their own channel.

 The commands which may only be used by channel operators are:

         KICK    - Eject a client from the channel

         MODE    - Change the channel's mode

         INVITE  - Invite a client to an invite-only channel (mode +i)

         TOPIC   - Change the channel topic in a mode +t channel

 A channel operator is identified by the '@' symbol next to their nickname
 whenever it is associated with a channel (ie replies to the NAMES, WHO and
 WHOIS commands).

 2. The IRC Specification

 2.1 Overview

 The protocol as described herein is for use both with server to server and
 client to server connections. There are, however, more restrictions on
 client connections (which are considered to be untrustworthy) than on
 server connections.

 2.2 Character codes

 No specific character set is specified. The protocol is based on a a set
 of codes which are composed of eight (8) bits, making up an octet. Each
 message may be composed of any number of these octets; however, some octet
 values are used for control codes which act as message delimiters.

 Regardless of being an 8-bit protocol, the delimiters and keywords are
 such that protocol is mostly usable from USASCII terminal and a telnet
 connection.

 Because of IRC's scandanavian origin, the characters {}| are considered to
 be the lower case equivalents of the characters []\, respectively. This is
 a critical issue when determining the equivalence of two nicknames.

 2.3 Messages

 Servers and clients send eachother messages which may or may not generate
 a reply. If the message contains a valid command, as described in later
 sections, the client should expect a reply as specified but it is not
 advised to wait forever for the reply; client to server and server to
 server communication is essentially asynchronous in nature.

 Each IRC message may consist of up to three main parts: the prefix
 (optional), the command, and the command parameters (of which there may be
 up to 15). The prefix, command, and all parameters are separated by one
 (or more) ASCII space character(s) (0x20).

 The presence of a prefix is indicated with a single leading ASCII colon
 character (':', 0x3b), which must be the first character of the message
 itself. There must be no gap (whitespace) between the colon and the
 prefix. The prefix is used by servers to indicate the true origin of the
 message. If the prefix is missing from the message, it is assumed to have
 originated from the connection from which it was received. Clients should
 not use prefix when sending a message from themselves; if they use a
 prefix, the only valid prefix is the registered nickname associated with
 the client. If the source identified by the prefix cannot be found from
 the server's internal database, or if the source is registered from a
 different link than from which the message arrived, the server must ignore
 the message silently.

 The command must either be a valid IRC command or a three (3) digit number
 represented in ASCII text.

 IRC messages are always lines of characters terminated with a CR-LF
 (Carriage Return - Line Feed) pair, and these messages shall not exceed
 512 characters in length, counting all characters including the trailing
 CR-LF. Thus, there are 510 characters maximum allowed for the command and
 its parameters. There is no provision for continuation message lines. See
 section 7 for more details about current implementations.

 2.3.1 Message format in 'pseudo' BNF

 The protocol messages must be extracted from the contiguous stream of
 octets. The current solution is to designate two characters, CR and LF, as
 message separators. Empty messages are silently ignored, which permits use
 of the sequence CR-LF between messages without extra problems.

 The extracted message is parsed into the components <prefix>, <command>
 and list of parameters matched either by <middle> or <trailing>
 components.

 The BNF representation for this is:

 <message>  ::= [':' <prefix> <SPACE> ] <command> <params> <crlf>

 <prefix>   ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ]

 <command>  ::= <letter> { <letter> } | <number> <number> <number>

 <SPACE>    ::= ' ' { ' ' }

 <params>   ::= <SPACE> [ ':' <trailing> | <middle> <params> ]

 <middle>   ::= <Any *non-empty* sequence of octets not including SPACE

                  or NUL or CR or LF, the first of which may not be ':'>

 <trailing> ::= <Any, possibly *empty*, sequence of octets not including

                  NUL or CR or LF>

 <crlf>     ::= CR LF

 NOTES:

   1. <SPACE> is consists only of SPACE character(s) (0x20). Specially
      notice that TABULATION, and all other control characters are
      considered NON-WHITE-SPACE.
   2. After extracting the parameter list, all parameters are equal,
      whether matched by <middle> or <trailing>. <Trailing> is just a
      syntactic trick to allow SPACE within parameter.
   3. The fact that CR and LF cannot appear in parameter strings is just
      artifact of the message framing. This might change later.
   4. The NUL character is not special in message framing, and basically
      could end up inside a parameter, but as it would cause extra
      complexities in normal C string handling. Therefore NUL is not
      allowed within messages.
   5. The last parameter may be an empty string.
   6. Use of the extended prefix (['!' <user> ] ['@' <host> ]) must not be
      used in server to server communications and is only intended for
      server to client messages in order to provide clients with more
      useful information about who a message is from without the need for
      additional queries.

 Most protocol messages specify additional semantics and syntax for the
 extracted parameter strings dictated by their position in the list. For
 example, many server commands will assume that the first parameter after
 the command is the list of targets, which can be described with:

    <target>     ::= <to> [ "," <target> ]

    <to>         ::= <channel> | <user> '@' <servername> | <nick> | <mask>

    <channel>    ::= ('#' | '&') <chstring>

    <servername> ::= <host>

    <host>       ::= see RFC 952 [DNS:4] for details on allowed hostnames

    <nick>       ::= <letter> { <letter> | <number> | <special> }

    <mask>       ::= ('#' | '$') <chstring>

    <chstring>   ::= <any 8bit code except SPACE, BELL, NUL, CR, LF and

                      comma (',')>

 Other parameter syntaxes are:

    <user>       ::= <nonwhite> { <nonwhite> }

    <letter>     ::= 'a' ... 'z' | 'A' ... 'Z'

    <number>     ::= '0' ... '9'

    <special>    ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'

    <nonwhite>   ::= <any 8bit code except SPACE (0x20), NUL (0x0), CR

                      (0xd), and LF (0xa)>

 2.4 Numeric replies

 Most of the messages sent to the server generate a reply of some sort. The
 most common reply is the numeric reply, used for both errors and normal
 replies. The numeric reply must be sent as one message consisting of the
 sender prefix, the three digit numeric, and the target of the reply. A
 numeric reply is not allowed to originate from a client; any such messages
 received by a server are silently dropped. In all other respects, a
 numeric reply is just like a normal message, except that the keyword is
 made up of 3 numeric digits rather than a string of letters. A list of
 different replies is supplied in section 6.

 3. IRC Concepts.

 This section is devoted to describing the actual concepts behind the
 organization of the IRC protocol and how the current implementations
 deliver different classes of messages.

                           1--\

                               A        D---4

                           2--/ \      /

                                 B----C

                                /      \

                               3        E

    Servers: A, B, C, D, E         Clients: 1, 2, 3, 4

                     [ Fig. 2. Sample small IRC network ]

 3.1 One-to-one communication

 Communication on a one-to-one basis is usually only performed by clients,
 since most server-server traffic is not a result of servers talking only
 to each other. To provide a secure means for clients to talk to each
 other, it is required that all servers be able to send a message in
 exactly one direction along the spanning tree in order to reach any
 client. The path of a message being delivered is the shortest path between
 any two points on the spanning tree.

 The following examples all refer to Figure 2 above.

 Example 1:

        A message between clients 1 and 2 is only seen by server A, which

        sends it straight to client 2.

 Example 2:

        A message between clients 1 and 3 is seen by servers A & B, and

        client 3.  No other clients or servers are allowed see the message.

 Example 3:

        A message between clients 2 and 4 is seen by servers A, B, C & D

        and client 4 only.

 3.2 One-to-many

 The main goal of IRC is to provide a forum which allows easy and efficient
 conferencing (one to many conversations). IRC offers several means to
 achieve this, each serving its own purpose.

 3.2.1 To a list

 The least efficient style of one-to-many conversation is through clients
 talking to a 'list' of users. How this is done is almost self explanatory:
 the client gives a list of destinations to which the message is to be
 delivered and the server breaks it up and dispatches a separate copy of
 the message to each given destination. This isn't as efficient as using a
 group since the destination list is broken up and the dispatch sent
 without checking to make sure duplicates aren't sent down each path.

 3.2.2 To a group (channel)

 In IRC the channel has a role equivalent to that of the multicast group;
 their existence is dynamic (coming and going as people join and leave
 channels) and the actual conversation carried out on a channel is only
 sent to servers which are supporting users on a given channel. If there
 are multiple users on a server in the same channel, the message text is
 sent only once to that server and then sent to each client on the channel.
 This action is then repeated for each client-server combination until the
 original message has fanned out and reached each member of the channel.

 The following examples all refer to Figure 2.

 Example 4:

        Any channel with 1 client in it. Messages to the channel go to the

        server and then nowhere else.

 Example 5:

        2 clients in a channel. All messages traverse a path as if they

        were private messages between the two clients outside a channel.

 Example 6:

        Clients 1, 2 and 3 in a channel.  All messages to the channel are

        sent to all clients and only those servers which must be traversed

        by the message if it were a private message to a single client.  If

        client 1 sends a message, it goes back to client 2 and then via

        server B to client 3.

 3.2.3 To a host/server mask

 To provide IRC operators with some mechanism to send messages to a large
 body of related users, host and server mask messages are provided. These
 messages are sent to users whose host or server information match that of
 the mask. The messages are only sent to locations where users are, in a
 fashion similar to that of channels.

 3.3 One-to-all

 The one-to-all type of message is better described as a broadcast message,
 sent to all clients or servers or both. On a large network of users and
 servers, a single message can result in a lot of traffic being sent over
 the network in an effort to reach all of the desired destinations.

 For some messages, there is no option but to broadcast it to all servers
 so that the state information held by each server is reasonably consistent
 between servers.

 3.3.1 Client-to-Client

 There is no class of message which, from a single message, results in a
 message being sent to every other client.

 3.3.2 Client-to-Server

 Most of the commands which result in a change of state information (such
 as channel membership, channel mode, user status, etc) must be sent to all
 servers by default, and this distribution may not be changed by the
 client.

 3.3.3 Server-to-Server.

 While most messages between servers are distributed to all 'other'
 servers, this is only required for any message that affects either a user,
 channel or server. Since these are the basic items found in

 IRC, nearly all messages originating from a server are broadcast to all
 other connected servers.

 4. Message details

 On the following pages are descriptions of each message recognized by the
 IRC server and client. All commands described in this section must be
 implemented by any server for this protocol.

 Where the reply ERR_NOSUCHSERVER is listed, it means that the <server>
 parameter could not be found. The server must not send any other replies
 after this for that command.

 The server to which a client is connected is required to parse the
 complete message, returning any appropriate errors. If the server
 encounters a fatal error while parsing a message, an error must be sent
 back to the client and the parsing terminated. A fatal error may be
 considered to be incorrect command, a destination which is otherwise
 unknown to the server (server, nick or channel names fit this category),
 not enough parameters or incorrect privileges.

 If a full set of parameters is presented, then each must be checked for
 validity and appropriate responses sent back to the client. In the case of
 messages which use parameter lists using the comma as an item separator, a
 reply must be sent for each item.

 In the examples below, some messages appear using the full format:

 :Name COMMAND parameter list

 Such examples represent a message from "Name" in transit between servers,
 where it is essential to include the name of the original sender of the
 message so remote servers may send back a reply along the correct path.

 4.1 Connection Registration

 The commands described here are used to register a connection with an IRC
 server as either a user or a server as well as correctly disconnect.

 A "PASS" command is not required for either client or server connection to
 be registered, but it must precede the server message or the latter of the
 NICK/USER combination. It is strongly recommended that all server
 connections have a password in order to give some level of security to the
 actual connections. The recommended order for a client to register is as
 follows:

   1. Pass message
   2. Nick message
   3. User message

 4.1.1 Password message

 Command: PASS
 Parameters: <password>

 The PASS command is used to set a 'connection password'. The password can
 and must be set before any attempt to register the connection is made.
 Currently this requires that clients send a PASS command before sending
 the NICK/USER combination and servers *must* send a PASS command before
 any SERVER command. The password supplied must match the one contained in
 the C/N lines (for servers) or I lines (for clients). It is possible to
 send multiple PASS commands before registering but only the last one sent
 is used for verification and it may not be changed once registered.
 Numeric Replies:

 ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED

 Example:

 PASS secretpasswordhere

 4.1.2 Nick message

 Command: NICK
 Parameters: <nickname> [ <hopcount> ]

 NICK message is used to give user a nickname or change the previous one.
 The <hopcount> parameter is only used by servers to indicate how far away
 a nick is from its home server. A local connection has a hopcount of 0. If
 supplied by a client, it must be ignored.

 If a NICK message arrives at a server which already knows about an
 identical nickname for another client, a nickname collision occurs. As a
 result of a nickname collision, all instances of the nickname are removed
 from the server's database, and a KILL command is issued to remove the
 nickname from all other server's database. If the NICK message causing the
 collision was a nickname change, then the original (old) nick must be
 removed as well.

 If the server recieves an identical NICK from a client which is directly
 connected, it may issue an ERR_NICKCOLLISION to the local client, drop the
 NICK command, and not generate any kills.

 Numeric Replies:

            ERR_NONICKNAMEGIVEN             ERR_ERRONEUSNICKNAME

            ERR_NICKNAMEINUSE               ERR_NICKCOLLISION

 Example:

 NICK Wiz ; Introducing new nick "Wiz".

 :WiZ NICK Kilroy ; WiZ changed his nickname to Kilroy.

 4.1.3 User message

 Command: USER
 Parameters: <username> <hostname> <servername> <realname>

 The USER message is used at the beginning of connection to specify the
 username, hostname, servername and realname of s new user. It is also used
 in communication between servers to indicate new user arriving on IRC,
 since only after both USER and NICK have been received from a client does
 a user become registered.

 Between servers USER must to be prefixed with client's NICKname. Note that
 hostname and servername are normally ignored by the IRC server when the
 USER command comes from a directly connected client (for security
 reasons), but they are used in server to server communication. This means
 that a NICK must always be sent to a remote server when a new user is
 being introduced to the rest of the network before the accompanying USER
 is sent.

 It must be noted that realname parameter must be the last parameter,
 because it may contain space characters and must be prefixed with a colon
 (':') to make sure this is recognised as such.

 Since it is easy for a client to lie about its username by relying solely
 on the USER message, the use of an "Identity Server" is recommended. If
 the host which a user connects from has such a server enabled the username
 is set to that as in the reply from the "Identity Server".

 Numeric Replies:

 ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED

 Examples:

 USER guest tolmoon tolsun :Ronnie Reagan

                                    ; User registering themselves with a

                                    username of "guest" and real name

                                    "Ronnie Reagan".

    :testnick USER guest tolmoon tolsun :Ronnie Reagan

                                    ; message between servers with the

                                    nickname for which the USER command

                                    belongs to

 4.1.4 Server message

 Command: SERVER
 Parameters: <servername> <hopcount> <info>

 The server message is used to tell a server that the other end of a new
 connection is a server. This message is also used to pass server data over
 whole net. When a new server is connected to net, information about it be
 broadcast to the whole network. <hopcount> is used to give all servers
 some internal information on how far away all servers are. With a full
 server list, it would be possible to construct a map of the entire server
 tree, but hostmasks prevent this from being done.

 The SERVER message must only be accepted from either (a) a connection
 which is yet to be registered and is attempting to register as a server,
 or (b) an existing connection to another server, in which case the SERVER
 message is introducing a new server behind that server.

 Most errors that occur with the receipt of a SERVER command result in the
 connection being terminated by the destination host (target SERVER). Error
 replies are usually sent using the "ERROR" command rather than the numeric
 since the ERROR command has several useful properties which make it useful
 here.

 If a SERVER message is parsed and attempts to introduce a server which is
 already known to the receiving server, the connection from which that
 message must be closed (following the correct procedures), since a
 duplicate route to a server has formed and the acyclic nature of the IRC
 tree broken.

 Numeric Replies:

 ERR_ALREADYREGISTRED

 Example:

 SERVER test.oulu.fi 1 :[tolsun.oulu.fi] Experimental server

                                 ; New server test.oulu.fi introducing

                                 itself and attempting to register.  The

                                 name in []'s is the hostname for the

                                 host running test.oulu.fi.

 :tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server

                                 ; Server tolsun.oulu.fi is our uplink

                                 for csd.bu.edu which is 5 hops away.

 4.1.5 Oper

 Command: OPER
 Parameters: <user> <password>

 OPER message is used by a normal user to obtain operator privileges. The
 combination of <user> and <password> are required to gain Operator
 privileges.

 If the client sending the OPER command supplies the correct password for
 the given user, the server then informs the rest of the network of the new
 operator by issuing a "MODE +o" for the clients nickname.

 The OPER message is client-server only.

 Numeric Replies:

            ERR_NEEDMOREPARAMS              RPL_YOUREOPER

            ERR_NOOPERHOST                  ERR_PASSWDMISMATCH

 Example:

    OPER foo bar                    ; Attempt to register as an operator

                                    using a username of "foo" and "bar" as

                                    the password.

 4.1.6 Quit

 Command: QUIT
 Parameters: [<Quit message>]

 A client session is ended with a quit message. The server must close the
 connection to a client which sends a QUIT message. If a "Quit Message" is
 given, this will be sent instead of the default message, the nickname.

 When netsplits (disconnecting of two servers) occur, the quit message is
 composed of the names of two servers involved, separated by a space. The
 first name is that of the server which is still connected and the second
 name is that of the server that has become disconnected.

 If, for some other reason, a client connection is closed without the
 client issuing a QUIT command (e.g. client dies and EOF occurs on socket),
 the server is required to fill in the quit message with some sort of
 message reflecting the nature of the event which caused it to happen.

 Numeric Replies:

 None.

 Examples:

 QUIT :Gone to have lunch ; Preferred message format.

 4.1.7 Server quit message

 Command: SQUIT
 Parameters: <server> <comment>

 The SQUIT message is needed to tell about quitting or dead servers. If a
 server wishes to break the connection to another server it must send a
 SQUIT message to the other server, using the the name of the other server
 as the server parameter, which then closes its connection to the quitting
 server.

 This command is also available operators to help keep a network of IRC
 servers connected in an orderly fashion. Operators may also issue an SQUIT
 message for a remote server connection. In this case, the SQUIT must be
 parsed by each server inbetween the operator and the remote server,
 updating the view of the network held by each server as explained below.

 The <comment> should be supplied by all operators who execute a SQUIT for
 a remote server (that is not connected to the server they are currently
 on) so that other operators are aware for the reason of this action. The
 <comment> is also filled in by servers which may place an error or similar
 message here.

 Both of the servers which are on either side of the connection being
 closed are required to to send out a SQUIT message (to all its other
 server connections) for all other servers which are considered to be
 behind that link.

 Similarly, a QUIT message must be sent to the other connected servers rest
 of the network on behalf of all clients behind that link. In addition to
 this, all channel members of a channel which lost a member due to the
 split must be sent a QUIT message.

 If a server connection is terminated prematurely (e.g. the server on the
 other end of the link died), the server which detects this disconnection
 is required to inform the rest of the network that the connection has
 closed and fill in the comment field with something appropriate.

 Numeric replies:

 ERR_NOPRIVILEGES ERR_NOSUCHSERVER

 Example:

 SQUIT tolsun.oulu.fi :Bad Link ? ; the server link tolson.oulu.fi has

 been terminated because of "Bad Link".

 :Trillian SQUIT cm22.eng.umd.edu :Server out of control

                                     ; message from Trillian to disconnect

                                    "cm22.eng.umd.edu" from the net

                                     because "Server out of control".

 4.2 Channel operations

 This group of messages is concerned with manipulating channels, their
 properties (channel modes), and their contents (typically clients). In
 implementing these, a number of race conditions are inevitable when
 clients at opposing ends of a network send commands which will ultimately
 clash. It is also required that servers keep a nickname history to ensure
 that wherever a <nick> parameter is given, the server check its history in
 case it has recently been changed.

 4.2.1 Join message

 Command: JOIN
 Parameters: <channel>{,<channel>} [<key>{,<key>}]

 The JOIN command is used by client to start listening a specific channel.
 Whether or not a client is allowed to join a channel is checked only by
 the server the client is connected to; all other servers automatically add
 the user to the channel when it is received from other servers. The
 conditions which affect this are as follows:

            1.  the user must be invited if the channel is invite-only;

            2.  the user's nick/username/hostname must not match any

                active bans;

            3.  the correct key (password) must be given if it is set.

 These are discussed in more detail under the MODE command (see section
 4.2.3 for more details).

 Once a user has joined a channel, they receive notice about all commands
 their server receives which affect the channel. This includes MODE, KICK,
 PART, QUIT and of course PRIVMSG/NOTICE. The JOIN command needs to be
 broadcast to all servers so that each server knows where to find the users
 who are on the channel. This allows optimal delivery of PRIVMSG/NOTICE
 messages to the channel.

 If a JOIN is successful, the user is then sent the channel's topic (using
 RPL_TOPIC) and the list of users who are on the channel (using
 RPL_NAMREPLY), which must include the user joining.

 Numeric Replies:

            ERR_NEEDMOREPARAMS              ERR_BANNEDFROMCHAN

            ERR_INVITEONLYCHAN              ERR_BADCHANNELKEY

            ERR_CHANNELISFULL               ERR_BADCHANMASK

            ERR_NOSUCHCHANNEL               ERR_TOOMANYCHANNELS

            RPL_TOPIC

 Examples:

    JOIN #foobar                    ; join channel #foobar.

    JOIN &foo fubar                 ; join channel &foo using key "fubar".

    JOIN #foo,&bar fubar            ; join channel #foo using key "fubar"

                                    and &bar using no key.

    JOIN #foo,#bar fubar,foobar     ; join channel #foo using key "fubar".

                                    and channel #bar using key "foobar".

    JOIN #foo,#bar                  ; join channels #foo and #bar.

    :WiZ JOIN #Twilight_zone        ; JOIN message from WiZ

 4.2.2 Part message

 Command: PART
 Parameters: <channel>{,<channel>}

 The PART message causes the client sending the message to be removed from
 the list of active users for all given channels listed in the parameter
 string.

 Numeric Replies:

            ERR_NEEDMOREPARAMS              ERR_NOSUCHCHANNEL

            ERR_NOTONCHANNEL

 Examples:

    PART #twilight_zone             ; leave channel "#twilight_zone"

    PART #oz-ops,&group5            ; leave both channels "&group5" and

                                    "#oz-ops".

 4.2.3 Mode message

 Command: MODE

 The MODE command is a dual-purpose command in IRC. It allows both
 usernames and channels to have their mode changed. The rationale for this
 choice is that one day nicknames will be obsolete and the equivalent
 property will be the channel.

 When parsing MODE messages, it is recommended that the entire message be
 parsed first and then the changes which resulted then passed on.

 4.2.3.1 Channel modes

 Parameters: <channel> {[+|-]|o|p|s|i|t|n|b|v} [<limit>] [<user>]

 [<ban mask>]

 The MODE command is provided so that channel operators may change the
 characteristics of `their' channel. It is also required that servers be
 able to change channel modes so that channel operators may be created.

 The various modes available for channels are as follows:

            o - give/take channel operator privileges;

            p - private channel flag;

            s - secret channel flag;

            i - invite-only channel flag;

            t - topic settable by channel operator only flag;

            n - no messages to channel from clients on the outside;

            m - moderated channel;

            l - set the user limit to channel;

            b - set a ban mask to keep users out;

            v - give/take the ability to speak on a moderated channel;

            k - set a channel key (password).

 When using the 'o' and 'b' options, a restriction on a total of three per
 mode command has been imposed. That is, any combination of 'o' and

 4.2.3.2 User modes

 Parameters: <nickname> {[+|-]|i|w|s|o}

 The user MODEs are typically changes which affect either how the client is
 seen by others or what 'extra' messages the client is sent. A user MODE
 command may only be accepted if both the sender of the message and the
 nickname given as a parameter are both the same.

 The available modes are as follows:

            i - marks a users as invisible;

            s - marks a user for receipt of server notices;

            w - user receives wallops;

            o - operator flag.

 Additional modes may be available later on.

 If a user attempts to make themselves an operator using the "+o" flag, the
 attempt should be ignored. There is no restriction, however, on anyone
 `deopping' themselves (using "-o"). Numeric Replies:

            ERR_NEEDMOREPARAMS              RPL_CHANNELMODEIS

            ERR_CHANOPRIVSNEEDED            ERR_NOSUCHNICK

            ERR_NOTONCHANNEL                ERR_KEYSET

            RPL_BANLIST                     RPL_ENDOFBANLIST

            ERR_UNKNOWNMODE                 ERR_NOSUCHCHANNEL

            ERR_USERSDONTMATCH              RPL_UMODEIS

            ERR_UMODEUNKNOWNFLAG

 Examples:

 Use of Channel Modes:

 MODE #Finnish +im               ; Makes #Finnish channel moderated and

                                 'invite-only'.

 MODE #Finnish +o Kilroy         ; Gives 'chanop' privileges to Kilroy on

                                 channel #Finnish.

 MODE #Finnish +v Wiz            ; Allow WiZ to speak on #Finnish.

 MODE #Fins -s                   ; Removes 'secret' flag from channel

                                 #Fins.

 MODE #42 +k oulu                ; Set the channel key to "oulu".

 MODE #eu-opers +l 10            ; Set the limit for the number of users

                                 on channel to 10.

 MODE &oulu +b                   ; list ban masks set for channel.

 MODE &oulu +b *!*@*             ; prevent all users from joining.

 MODE &oulu +b *!*@*.edu         ; prevent any user from a hostname

                                 matching *.edu from joining.

         Use of user Modes:

 :MODE WiZ -w                    ; turns reception of WALLOPS messages

                                 off for WiZ.

 :Angel MODE Angel +i            ; Message from Angel to make themselves

                                 invisible.

 MODE WiZ -o                     ; WiZ 'deopping' (removing operator

                                 status).  The plain reverse of this

                                 command ("MODE WiZ +o") must not be

                                 allowed from users since would bypass

                                 the OPER command.

 4.2.4 Topic message

 Command: TOPIC
 Parameters: <channel> [<topic>]

 The TOPIC message is used to change or view the topic of a channel. The
 topic for channel <channel> is returned if there is no <topic> given. If
 the <topic> parameter is present, the topic for that channel will be
 changed, if the channel modes permit this action.

 Numeric Replies:

            ERR_NEEDMOREPARAMS              ERR_NOTONCHANNEL

            RPL_NOTOPIC                     RPL_TOPIC

            ERR_CHANOPRIVSNEEDED

 Examples:

 :Wiz TOPIC #test :New topic ;User Wiz setting the topic.

    TOPIC #test :another topic      ;set the topic on #test to "another

                                    topic".

    TOPIC #test                     ; check the topic for #test.

 4.2.5 Names message

 Command: NAMES
 Parameters: [<channel>{,<channel>}]

 By using the NAMES command, a user can list all nicknames that are visible
 to them on any channel that they can see. Channel names which they can see
 are those which aren't private (+p) or secret (+s) or those which they are
 actually on. The <channel> parameter specifies which channel(s) to return
 information about if valid. There is no error reply for bad channel names.

 If no <channel> parameter is given, a list of all channels and their
 occupants is returned. At the end of this list, a list of users who are
 visible but either not on any channel or not on a visible channel are
 listed as being on `channel' "*".

 Numerics:

 RPL_NAMREPLY RPL_ENDOFNAMES

 Examples:

    NAMES #twilight_zone,#42        ; list visible users on #twilight_zone

                                    and #42 if the channels are visible to

                                    you.

    NAMES                           ; list all visible channels and users

 4.2.6 List message

 Command: LIST
 Parameters: [<channel>{,<channel>} [<server>]]

 The list message is used to list channels and their topics. If the
 <channel> parameter is used, only the status of that channel is displayed.
 Private channels are listed (without their topics) as channel "Prv" unless
 the client generating the query is actually on that channel. Likewise,
 secret channels are not listed at all unless the client is a member of the
 channel in question.

 Numeric Replies:

            ERR_NOSUCHSERVER                RPL_LISTSTART

            RPL_LIST                        RPL_LISTEND

 Examples:

 LIST ; List all channels.

 LIST #twilight_zone,#42 ; List channels #twilight_zone and #42

 4.2.7 Invite message

 Command: INVITE
 Parameters: <nickname> <channel>

 The INVITE message is used to invite users to a channel. The parameter
 <nickname> is the nickname of the person to be invited to the target
 channel <channel>. There is no requirement that the channel the target
 user is being invited to must exist or be a valid channel. To invite a
 user to a channel which is invite only (MODE +i), the client sending the
 invite must be recognised as being a channel operator on the given
 channel.

 Numeric Replies:

            ERR_NEEDMOREPARAMS              ERR_NOSUCHNICK

            ERR_NOTONCHANNEL                ERR_USERONCHANNEL

            ERR_CHANOPRIVSNEEDED

            RPL_INVITING                    RPL_AWAY

 Examples:

    :Angel INVITE Wiz #Dust         ; User Angel inviting WiZ to channel

                                    #Dust

    INVITE Wiz #Twilight_Zone       ; Command to invite WiZ to

                                    #Twilight_zone

 4.2.8 Kick command

 Command: KICK
 Parameters: <channel> <user> [<comment>]

 The KICK command can be used to forcibly remove a user from a channel. It
 'kicks them out' of the channel (forced PART).

 Only a channel operator may kick another user out of a channel. Each
 server that receives a KICK message checks that it is valid (ie the sender
 is actually a channel operator) before removing the victim from the
 channel.

 Numeric Replies:

            ERR_NEEDMOREPARAMS              ERR_NOSUCHCHANNEL

            ERR_BADCHANMASK                 ERR_CHANOPRIVSNEEDED

            ERR_NOTONCHANNEL

 Examples:

 KICK &Melbourne Matthew ; Kick Matthew from &Melbourne

 KICK #Finnish John :Speaking English

                                 ; Kick John from #Finnish using

                                 "Speaking English" as the reason

                                 (comment).

 :WiZ KICK #Finnish John         ; KICK message from WiZ to remove John

                                 from channel #Finnish

 NOTE:

 It is possible to extend the KICK command parameters to the following:

 <channel>{,<channel>} <user>{,<user>} [<comment>]

 4.3 Server queries and commands

 The server query 
Results 1 - 1
Help - FTP Sites List - Software Dir.
Searching half a billion files worldwide
© 1997-2009 MARUHN Internet Solutions