xIrc is as the name implies, and IRC Client program that runs under X.
It is written in C++ and the binary for it provided was compiled using
gcc  2.7.2  and  qt-0.95  using  the  ELF  libraries.  See the INSTALL
document  provided  for  details  on building it if you need or desire
too, have no fear, it's reasonably easy to build.

Being  that  this  code  is  still  Beta,  I would appreciate any help
offered  in  finding any bugs that may crop up. This will be mostly in
the  form  of  turning on the various debug flags I have embedded then
mailing  me the output. Also, any suggestions for additions or changes
to  it's  look  and  feel will be appreciated. I cannot guarantee that
they will be implemented, but all will be taken into consideration.

It has the following features at this time.

   * Simplified Banning w/ optional kick

	* Individual Windows for each channel you are joined to or each 
	  private conversation.

	* Nick Lists for the channels that allow you to various things on 
	  the folks listed in them.

	* Initiate DCC Chat sessions and Respond to DCC Chat Requests

	* Aliases that allow multiple words to be represented by a symbol.
     Similar to the IRC-II set command.

	* Subset of similar commands and formats to IRC-II though many have
	  been simplified.

	* Auto responses to people getting kicked from a channel or for 
	  you being kicked from a channel.

	* Auto re-join if you've been kicked from a channel.

Things that are yet to be done in the future are...

   *  Use  of  XWindow Resources for configuring the attributes of the
      various windows.

   * An honest to God manual written to use TeX or the like, not this!

	* Command line histories

	* Cut and Paste functionality

	* DCC File transfers

	* Notification of people coming and going

	* Ignore  Private  messages  either ones for you or those sent to a
	  channel

	* Script language based on the one provided by IRC-II.

	* Anything else that you or I may think of that sounds handy, nifty
	  or just plain fun to have.

Before  I get any deeper into the details of the program, I would like
to  make  an  unsolicited  plug  for the folks who wrote the GUI class
library  I  used,  qt. This library was developed by the good folks at
Troll  Tech.  Not only have they seen fit to provide the class library
to  us  Linux  folks  for  free, but they have also been invaluable in
helping me making my program more bullet-proof. The library has a nice
Motif like look and feel to it while it runs considerably lighter then
Motif  ever  could  and  it greatly simplifies the writing of XWindows
applications.  They  can  be  reached  at info@troll.no and the URL to
their home-page is http://www.troll.no/.

Well, now onto what Yall are reading this for, xIrc documentation. The
buttons  and  menus are fairly self explanatory so for the most part I
am  not  going  to  go  into  much  detail for them except where it is
needed.

When  xIrc is started, a dialog box requesting your nick is displayed.
If  a  nick  is  defined in your xIrc.defaults file, it will be in the
edit  window.  You  must  choose  a nick before you will be allowed to
proceed  any further. having the Auto Nick Select button on will cause
the  program to step through the nicks untill it finds one that is not
in use.

Once you have selected a nick, the main window will be displayed. This
window is for displaying messages from the server and has 5 buttons to
allow  you to select a server, choose a channel to join or a person to
chat  with, various actions for a particular nick, change your nick or
exit. All four of these are active from the start though you will most
likely want to start with selecting a server.

Selecting  a  server  is  quite  easy.  Either type in the name of the
server,  double click on a server's name in the list, or select a name
from  the  list  and click on the OK button. The names in the list are
defined in the defaults file using the tag "servers". 

The  'Channels  /  People' button provides much more functionality. By
typing  in  the  Channel  name or the nick of someone you want to chat
with, or selecting one from the list, you can do a whois, names, start
a chat or join a channel, or initiate a DCC Chat session. The names in
the list are from the defaults file under the tag of 'channels'.

The Nick Actions button will bring up the Nick Action Dialog box. This
dialog  box  allows  you to perform various queries and actions on the
nick specified in the edit box.

The remaining two buttons are quite self explanatory.

After  opening  a message window for either a channel or a person, you
can  start  chatting  by typing in the edit field at the bottom of the
window.  I  have  found  it  necessary to click on this field with the
mouse  to  get  focus  to  it,  after  that  focus will be given to it
whenever  you  move  your  mouse into the window, at least if you have
your  window  manager  configured to do so. The buttons at the top are
once again self explanatory.

Message  windows for channels also have an associated nick box showing
the  current membership on the channel. Double clicking on any nick in
the  list  will bring up the 'Channel / People' Dialog box w/ the nick
pre-loaded  in  it's edit field. The Kick button will display the kick
dialog  which  allows  you  to use either the default kick message (as
defined  in  the defaults file w/ the tag 'kickmessage', or enter in a
different  one. One word of caution. If the nicks change while you are
typing  in a kick message or what not, the nick you kick or do a whois
or  whatever  may  not be the one you intended! Trust me, I've learned
this the hard way. The exception to that is the chat button (or double
clicking  on  a  nick).  The close button will close out the nick box.
Pressing the Nick List button will show it again.

Double  clicking  on any word or pressing the Nick Actions button will
bring  up  the  Nick  Action  Dialog  box.  The  word selected will be
preloaded  in  the  Nick  field  while  the name of the window will be
preloaded  in the channel box. It is assumed that the user will double
click  on  nicks to allow for easy chats, kicks or whatever. Mind you,
if  the channel window does not specify a name with a starting '#', it
will not attempt to do a 'Kick', Give Ops, or Take Ops operation.

Each  message  window has a command line. Most commands will work from
either  a  window  associated  with a channel or private conversations
though  not  all  will work for the latter. A command is preceded by a
'/'  character  and  must  start  at  the  beginning  of  the line. Be
forewarned  though,  THE  PROGRAM  SKIPS  LEADING SPACES!!! Therefore,
unlike  IRC-II,  preceding  a command with spaces to make it not work,
say you want to be funny, does not work! The command will be processed
and executed!

Besides  the  '/' character, there are 2 other special characters. the
'$'  for  denoting  aliases and the '\' used as an escape character. A
$<tag> will be expanded to whatever string is associated with the tag.
If  the  tag  is  undefined,  the  $  and the tag are consumed with no
output.  To  send a $, you must either enter in a '$$' or '\$'. Either
way will place the $ into the message.

The  '\'  character is mostly for entering in escape codes or escaping
itself  or  the $. There are 5 types of escape codes. '\b' will toggle
highlighting  for  a  string. \u' will toggle underlining of a string.
'\[0-9]+'  will send the decimal number entered as an 8 bit character.
'\0[0-7]+'  will  send the octal number entered as an 8 bit character.
Finally,  '\x[0-9a-fA-F]+' will send the hexadecimal number entered as
an  8  bit  character.  I  have yet to find a whole lot of use for the
latter three cases but the first two can be a lot of fun!

From  a normal Message Window (uh.. one that isn't a DCC Chat Window),
the following commands are accepted:

	/ALIAS <TAG> <STRING>
	/AWAY [<MESSAGE>]
	/INVITE <NICK>
	/JOIN <CHANNEL>
	/KICK <NICK> [<MESSAGE>]
	/LIST <CHANNEL LIST> [<SERVER>]
	/ME <ACTION STRING>
	/MODE <MODES> [<NICK>]	
	/NAMES [<CHANNEL LIST>]
	/NOTICE <NICK/CHANNEL> <MESSAGE>
	/NICK [<NEW NICK>]
	/PART <CHANNEL>
	/PING [<NICK>]
	/PRIVMSG <NICK/CHANNEL> <MESSAGE>
	/QUIT [<MESSAGE>]
	/TOPIC [<NEW TOPIC>]
	/WHO <NICK-LIST>
	/WHOIS <NICK>
	/WHOWAS <NICK>
	/VERSION [<NICK>]

ALIAS:
   This  command  allows you to have simple macro replacements. Though
   they  are very basic, they can be useful. Basically the string will
   be  inserted  anywhere  $<TAG>  is  found  on  an entered line. For
   example:

	/alias hugs *Big Hairy Hugs*
	/me gives so and so $hugs tightly

   will result in an action of '<nick> gives so and so *Big Hairy Hug*
   tightly'.

AWAY:
   Sets  you  away.  The <Message> will be given to anyone who private
   messages you.

INVITE:
   This invites a person to the channel associated w/ the window it is
   typed  in  on. It is functional but useless on windows used to chat
   with others privately

JOIN:
   One  of  the  commands  you  probably ought to leave alone. Use the
   'Channel  /  People' Dialog instead. It will join you to a channel,
   but  the  routing  of  messages  will not right and therefore won't
   work!

KICK:
   Kicks  a  person  from  a  channel. Once again, it's functional but
   useless if used from a window not associated with a channel.

LIST:
   Lists  channels topic and such. Works just like the LIST command in
   IRC-II.

ME:
   Sends a ctcp ACTION message. In DCC Chat windows it will append the
   action to the characters '<='.

MODE:
   Sets  the  modes  for the channel the window is associated with. It
   works  just  like the MODE command in IRC-II except that the channel
   name is derived from the window's name.

NAMES:
   Lists  the  members  on  a  channel.  If  channel is not given, the
   channel name will be used. If I'm not mistaken, in the latter case,
   no  results will be display, instead, they will be reflected in the
   Nick Dialog for that channel.

NOTICE:
   Sends a NOTICE to the Nick or channel specified.

NICK:
   Changes your nick

PART:
   Like the JOIN command, it there, but it's best to leave it be!

PING:
   Pings  the  Member or Channel given. If neither are given, the name
   pinged is derived from the window's name.

PRIVMSG:
    Sends a private message to the channel or member specified.

QUIT:
   Closes  the  connection to the current server sending the optional
   message if present.
   
TOPIC:
   Set  or  displays  the  topic  for the channel associated with the
   window.

WHO:
   Does a who on the nick provided. Works like IRC-II.

WHOIS:
   Does a whois on the nick provided. Works like IRC-II.

WHOWAS:
   Does a whowas on the nick provided. Works like IRC-II.

VERSION:
   Sends  a  ctcp Version message to the channel or nick provided. If
   no name is given, the name of the window is used.


The xIrc.defaults file has various run time settings for xIrc. At this
point  it  MUST reside in the current directory where you are when you
start  xIrc. There are just a handful of various things you can set at
this point, hopefully it will not get too much larger in time.

If you take a look at the defaults file provided, you will get an idea
of  how  it's formated. definitions can be on multiple lines using the
continuation  character  as the last character on the line before they
new  line.  Any  handy  little  definitions you want to be able to use
while  chatting can also be placed in this file and they will be there
ready for you to use when you start up.

Here  is  the  list  of  the  currently used tags. Not all of them are
needed,  though  some  do make life much easier. These names may be in
any case to simplifiy reading them.

BAN_MESSAGE
   String to use for the kick if the kick is implemented with a ban.

CHANNELS
   List  of  channels  or  nicks you want to regularly check out, chat
   with or whatever.

DCC_SEND_RESPONSE
   Response  message  you  want to send when someone tries to set up a
   DCC File transfer to you.

EMAIL_ADDR
   Entry  to  specifiy  the  user  name  and  host  name provided when
   connecting to the server. It must follow the <user>@<domain> syntax
   or  you  stand the chance that your connection will be rejected. If
   this entry is not provided, the user name from the /etc/passwd file
   will  be  used and a dummy domainname of dummy.hostname.org will be
   used.

FRAME_FG_COLOR_NAME
FRAME_FG_COLOR_RGB
   Sets  the Window Frames Foreground color. NAME does it by name, RGB
   does it by value.

FRAME_BG_COLOR_NAME
FRAME_BG_COLOR_RGB
   Sets  the Window Frames Background color. NAME does it by name, RGB
   does it by value.

KICKMESSAGE
   Default message to send when you kick someone.

KICKED_OTHER_RESPONSE
   Message to send when a kick of someone is detected.

KICKED_YOU_RESPONSE
   Message to send someone when they kick you.

NICK
   Now Obsolete tag. See NICKS.

NICKS
   Allows  you  to  define a set of possible nicks to when connecting.
   Each nick should be seperated with a space.

QUITMESSAGE
   Default message to append to the QUIT command.

REALNAME
   Will  be  sent when first connecting to a server as your real name.
   Can  be  anything you like though if you're one of those snots that
   don't  like  people  being  able  to  see  just who they are really
   talking  too  (Personal  oppinion there). If it is not defined, the
   user_name field of the /etc/passwd file will be used instead.

SERVERS
   List of server names you frequent.

TCPPORT
   Default TCP port, probably should be left at 6667.

USERINFO
   Whatever  you  want to tell the world about yourself when they do a
   ctcp USERINFO command of you.

WINDOW_FG_COLOR_NAME
WINDOW_FG_COLOR_RGB
WINDOW_BG_COLOR_NAME
WINDOW_BG_COLOR_RGB
    Like  the  FRAME  ones  except these set the colors of the windows
    themselves.


