A Zephyr-Like AOL Instant Messenger client

It's spiffy! It's keen! It's spiffy-keen! It's an AIM client that acts like zephyr, combining the worst of both worlds! You know you want it.

Get it here: azlaim-0.9.tar.gz

Requirements:

If you're new to azlaim, you'll probably need to read this page from bottom to top (in chronological order) for it to make sense.

Version 0.9 (June 3, 2004)

Changes some connection timeouts to deal with chronic server outages which preiously caused awgc to appear to hang when starting up.

Version 0.8 (July 15, 2002)

Adds a "reload" option to actl. The code for this was actually written over a year ago, about a week after the last release, and then I promply forgot I had done anything.

Version 0.7 (June 11, 2001)

I read a book on Tcl/Tk for unrelated reasons, and now understand how resources are done in Perl/Tk much better. Resources now work properly. Default resources are specified like this (same as before):

Awgc*geometry: +0+0
Awgc*background: #022

To specify resources for a particular class of windowgrams, do something like this:

Awgc.Error*geometry: +200+200
Awgc.Error*background: #800
The default formatting code uses three classes, "Error", "Login", and "Personal". The supplied aim.desc also has sample code (supplied commented-out) which will supply the sender's username as the class, so as to facilitate coloring or positioning messages from different people differently.

Additionally, the ability to send the same message to multiple recipients has been added (just put them all on the command line, space separated). More helpful error messages have been added in assorted places.

Sadly, some error messages (it seems to be those related to initial sign-on problems, such as a bad password) are no longer being reported correctly. This seems unrelated to any changes in my own code, and I have not yet investigated it in detail.

Version 0.6 (January 20, 2001)

Added an "actl" program to provide some control over the running windowgram client. It supports the following commands:

  sub login, [username]
unsub login, [username]

    These add or remove a username from the list of people for whom you 
    receive login and logout announcements, and who appear in your anol
    listing.

  add login, [username]
  del login, [username]

    These have the same effect as the above, but also add or remove the
    user in question from your .aol.subs file, so that the changes will
    be permanent.

  ret

    This shows the messages to which you are currently subscribed.

  kill

    This stops awgc.

Additionally, anol has been modified to display more information. It now displays the username, login time, idle time (which is often erroneously zero), and warning level. A minor bug in the wordwrap code was also fixed, so be sure to use the new aim.desc, or take the wordwrap code from it if you've modified your copy.

Version 0.5 (January 18, 2001)

There are several changes in this version. The most significant of these is that awgc no longer forks for every single windowgram. When you start awgc, one process starts; it talks to the AOL servers and your clients. When you get a message, it forks a second process to display it on your screen. When you get another message, the first process instructs the second process to display it, in addition to the message already on your screen.

When all the windowgrams have been clicked away, the process which was displaying them can either remain running, ready to display more, or exit and be restarted when you get your next message. By default, it does the former, but you can select the latter behavior by editing the awgc script and changing the $stayresident configuration option to 0.

Also, the AOL servers seem to have problems where they may silently drop messages with newlines in them. Thus, all newlines are now translated into <BR> tags before the message is sent to the server.

Of the original "major problems", only the xresources problem remains. One problem that wasn't listed there, but is still significant, is that awgc doesn't automatically exit when the X server does; it has to be explicitly killed. I'm still thinking about what to do about that one.

On a completely different subject, is anyone other than me actually using this? Send me an email (or a postcard, or a carrier pigeon, or just about anything that doesn't go "tick") if you're reading this and you give a damn about what I'm doing here.

Version 0.4 (October 16, 2000)

awrite messages can be ended with a period instead of ^D if you prefer. Wordwrap for displayed messages has been added to the included sample aim.desc, though it is not in the default display in awgc. Errors, such as a failure to actually send your message, now pop up windowgrams instead of being sent to the console from which awgc was run.

The forking problem and Xresources problem still need to be addressed.

If you're bored, you can try to parse the single regular expression replacement that does the wordwrap:

$str=~s/(?:^|\G)(?:(.{1,$width})(?:\s|\n|$)|(\S{$width})|\n)/$1$2\n/g;

Version 0.3 (October 10, 2000)

Bugfix to the bugfix that prevented a person's first login from displaying correctly. This should work correctly now; people who are logged in when you first login will not cause login messages to display, but people who login later will. I even tested it this time.

Version 0.2 (October 9, 2000)

Reads configuration file .aim.desc in user's home directory. Comes with an example of such file, which also provides the ability to log (set log=1 in .aim.vars to turn this on).

Assorted bugfixes

Major problems remaining:

Version 0.1 (September 30, 2000)

I just hacked this together this evening, so don't expect a whole lot in the way of quality. If I'm feeling motivated, I'll actually rewrite it so it doesn't suck later. At the moment, you get three files - "awgc" the client, "anol" which tells you who's online, and "awrite" which you use to send messages. They're all perl scripts; you just put them wherever you want them and run them.

Before you run them, though, you have to set up a few files. You need a '.aim.vars' file in your home directory. It needs to have a line which says "username=foo" where foo is your AIM username. It can also have a line which says "password=bar" where bar is your password. If this line is absent, you'll be prompted for a password every time you run the client. To set up your buddy list, create a file called '.aim.subs'. For each person you want on your "buddy list", put a line that says 'login, username' where "login" is a literal and "username" is the username of the person in question. Any line starting with something other than login is ignored.

If you want to control how the windowgrams display, use the following resources:

Awgc*geometry
Awgc*foreground
Awgc*background
(the capital As are important)

Awgc has only one option at this time -ttymode (which is also assumed if $DISPLAY is not set). If this option is given, it does not fork to background itself, but stays in the console. Otherwise, it goes into the background. When you get an instant message, it display it, formatted similarly to a zephyr. When you click on it, it goes away. It also displays login and logout announcements when people come and go. To log out, kill awgc.

To send something to other people, use 'awrite username'. You must use exactly one username, and there are no other options. You won't get any sort of confirmation about whether or not your message was actually received, or even if the person is still online.

To see who's online, run 'anol', which takes no options at all. It shows you which of your buddies are currently online.

Note that, unlike the actual zephyr tools, anol and awrite talk to awgc, so the latter must be running for the former to work. awgc creates a socket in /tmp when it's run; the other clients use this to talk to it.


The version numbering treats each segment as independently incrementing, not as a decimal number, so 0.10 will be nine releases after 0.1. 1.0 will be the first release I'm actually proud of, assuming I get that far.