hoche / cicb

ICB chat client. See www.icb.net
GNU General Public License v3.0
11 stars 4 forks source link
                       INTRODUCTION TO ICB
                       -------------------

ICB (International CB) is a teleconferencing system that allows Internet users to participate in realtime online discussions. This package builds a client program (called, strangely enough, "icb") that is used to access ICB.

ICB is based on Sean Casey's ForumNet ("forum" or "fn") 0.10, with his permission. The new name was devised by Mark Giaquinto and John Atwood DeVries. The actual code here is based on release 5.0.9 of the Tcl C-Icb client. It has been severely modified by a loose knit group of users who can't seem to part with the traditional client code.

                   COPYRIGHT AND REDISTRIBUTION
                   ----------------------------

The parts of the code that are left over from ForumNet are Copyright (c) 1990 by Carrick Sean Casey.

The parts of the code that are left over from icb 5.0.9 is Copyright (c) 1993 by Mark J. Reed.

That said, cicb 5.1 is nearly a complete rewrite of the original code by the cicb-workers committee, which includes, but is not limited to: Erik Fichtner, Phil Stracchino, Michel Hoche-Mong, and Felix Lee.

This code has been placed under the GNU Public License with Mark Reed's blessing. Please see the file "LICENSE" for further information.

                       SYSTEM REQUIREMENTS
                       -------------------

ICB runs on Internet Unix systems with Berkeley compatable TCP/IP and select(). It has been successfully compiled and run on several systems, including FreeBSD, OpenBSD, NetBSD, Solaris, Irix, OSX 10.4 and 10.5, and several popular distributions of Linux. ICB requires a POSIX system with an ANSI C compiler, a relatively recent version of TCL, and the GNU readline library.

                           INSTALLING
                           ----------

cicb now uses the gnu configure utility to try to figure out the correct settings for your system. See the file "INSTALL" for details on building the executable.

                       CHANGES SINCE 5.1.1
                       -------------------

The 5.2.0 release is currently in long-term development. A bunch

of code cleanup has been started, including de-K&Ring most of the code. The intent is to isolate the TCL engine from the main handling and make it so that alternate (modern) scripting languages may be substituted.

Repository: Sourceforge has become untenable, so the code has been moved to github.

Bugfixes:

Fix bug in /w messages where overly-long idle times would cause a buffer
overrun. patch contributed by tris, modified by hoche.

                       CHANGES SINCE 5.1.0
                       -------------------

Startup:

The 5.1.1 release uses a changed initialization procedure using a

shared system.icbrc file to enable providing all users with a sane, working startup environment containing the minimum set of predefined macros needed to make sure common command primitives work as expected.
To facilitate this new startup procedure, the default .rc file for cicb has been changed. Additionally, since cicb-5.1.0 and later use the system Tcl libraries instead of the old embedded Tcl-3.6 interpreter, cicb will no longer read .tclrc or .fnrc files, which can be expected to contain outdated Tcl code that no longer works with Tcl7.6 and Tcl8.x as installed on most systems. The .cicbrc file is also ignored, as it is now obsolete since colors are set using the /color command.

The new startup procedure is as follows:*

1.  The client reads /usr/local/share/icb/system.icbrc to set up a
sane environment with working default commands.
2.  The client checks to see whether $HOME/.icb/icbrc exists.  If it
exists, it is loaded and executed.  $HOME/.icb/icbrc may 
source any additional files desired.
3.  Existing $HOME/.icbrc, $HOME/.cicbrc, $HOME/.tclrc and $HOME/.fnrc 
files are ignored.

SIGWINCH handling:

Open and personal message wrapping now adjusts the wrap point 

properly in response to changes in the size of the icb window when running in an Xterm or other terminal window.

Keepalives:

TCP keepalives are enabled by default now. In addition, a high-level

keepalive functionality has been added that sends ICB "ping" messages to the server at a user defined interval. This is set and cleared by "/oset keepalive".

SSL support:

SSL support has been added to the client to maintain an encrypted

connection to the server. Unfortunately, no known server currently supports this.

OSX support:

The readline that ships with OSX is broken. This will not compile

with that version, nor is there any plan to make it work. Instead, it is recommended that you get a real version of readline and install that. If you use fink, it will likely try to install it in /sw, and that is OK. configure will search there before looking in /usr for it.

                      NEW FEATURES IN 5.1.0
                      ---------------------

Triggers:

When the client receives messages from the server, it can now feed

that event into the tcl interpreter by calling a "trigger function", if that function has been defined in your ".icbrc" file. With this functionality and minimal exposure to the TCL scripting language, you can craft an autopilot for your client or whatever strikes your fancy. Read the file "TRIGGERS" for an introduction to the trigger API.

Global Variables:

The cicb client now provides four global Tcl variables for your 

use in scripts, to allow you to customize cicb's behavior depending on which server you're connected to, what nick you're using, or even which group you're in. The first two variables will remain constant throughout your icb session:

myServer    Contains the icbserverdb name of the server
        you're connected to.  Even if you didn't specify a
        server, this SHOULD never be NULL.
myHost      Contains the fully quialified domain name of the
        server you're connected to.

The second two will update dynamically as you change your nick and 

group:

myNick      Contains your current nick
myGroup     Contains the name of the group you're in.

Trivial examples of using these variables may be found in the 

system.icbrc file.

Asynchronous I/O:

The client can now display messages to you while you're in the

middle of typing the current line. Just "/oset asyncread true" to enable this behavior. Also, whether you're displaying async or not, the client can now be busy doing things in the background while you're typing.

Color:

You can now adjust the colorization of the client's messages on

the fly. See the file "README.COLOR" for documentation of the new color parser.

Message Highlighting:

For important people in your busy ICB lifestyle, the client offers

personal (/m) message highlighting. This is provided through a TCL string; "personalhilite" containing the nicknames of those people you wish to highlight, and it has its own color code values. This is stored as a TCL variable to allow ease of modification of the highlight list from built-in trigger functions.

Timestamping:

The client is now able to optionally timestamp its output, which

can be handy for those that can't watch their client at all times. To use this, just "/oset timestamp true". It too has its own color code.

ICB Servers:

Most of the icb servers out there have been listed for some time

now under the icb.net domain name. More recently evolve.com, home of the west coast primary server (icb.evolve.com or evolve.icb.net) changed its name to chime.com for reasons involving large amounts of folding green stuff. The west coast default server is now icb.chime.com, aka chime.icb.net. To allow for future changes, chime.icb.net is also aliased as default.icb.net. The evolve.icb.net address will continue to work for now, but Jon Luini, owner of evolve -- er, of chime.com wishes everyone to switch from evolve.icb.net to chime.icb.net or default.icb.net. So, this is the new default host, and the icbserverdb file has been updated to reflect the new DNS domain.

                     MODIFYING THE PROGRAM
                     ---------------------

Guidelines and tips for messing with the source code are in the file "Modifying". I'm always interested in getting patches from people that have extended icb's functionality.

In addition, see the file "README.autoconf" for information on modifying the configuration process.

                           KNOWN BUGS
                           ----------

When using readline 2.x, SIGWINCH is not handled properly.  If you 

run into screen redraw problems when changing window sizes, try using readline 4.x instead.

NetBSD and OpenBSD both ship with a native readline library that is

based on ancient history, and we do not support it.

OSX ships with a native readline library that is crippled, and

we do not support it.

TCL 8.1.x has caused us some problems with the client.

Under certain contitions, if both Tcl8.0 and Tcl8.3 are installed,

the client may hang at startup when attempting to source the .icb/icbrc file. Replacing -ltcl8.3 with -ltcl8.0 in icb/Makefile seems to be an effective workaround for now.

When using asynchronous I/O mode and [=More=] pagebreaks, logging

to the replay log does not happen.

The "personalhilite" string is a case-insensitive substring match

and can cause unexpected things at times.

                        ACKNOWLEDGEMENTS
                        ----------------

Thanks to Sean Casey for starting this whole thing, and to Mark Giaquinto and John Atwood DeVries for making sure it continued past ForumNet's untimely end.

Thanks to Mark J. Reed for the original 5.0 client and all the effort therein.

Kudos for ideas, bugfixes and previous effort go to Aashi Deacon, Rich Dellaripa, Thomas Krueger, Bill Fenner, Bill Wisner, Brian Kendig, Dan Chaney, David Herron, Eric Lechner, Eric Scott, Eric Zamost, George Herbert, Glenn Stone, Jessica Koeppel, Jim Griffith, Jim Lai, Joel Abbott, John deVries, Kris Cox, Lisa Hamilton, Mark Hopkins, Paul Callahan, Stephen Chappell, Thomas Kunselman, Thomas Krueger, Katrina Werpetinski, Keith Graham, Rich Dellaripa, Greg Williams, and others too numerous to mention.