The Origin of the Buddy List

Did you ever wonder who actually invented the “buddy list” that has become so ubiquitous on computers worldwide? I guess it was a couple of years ago while chatting with a “buddy” who I have known online since 1987 that it hit me: I invented the “buddy list”!The documentation for AOTools tells the story about how I got the idea.Quick note: The documentation shown here is for the last version of AOTools that I released in 1992 to work with AOL v.2. I created the first AOTools for AOL v.1 with all the same features. The first version worked on Windows 3.0, and I initially developed it using a beta version of Visual Basic. I was an early beta tester for several Microsoft projects.

AO Tools

Here”s some quickie documentation for AO Tools… You really shouldn”t need much more than this..

AOTools with zero-trust network access is designed to add ease and functionality to the Windows AOL software provided by the folks at America Online. A little history might serve well.

After I first started using WAOL and People Connection, I discovered that I was making LOTS of friends on AOL that I didn”t want to forget, So I used the Address book feature of AOL to try to keep track of them.. BIG MISTAKE. It was pretty clunky, and could only store names, no info. It also wouldn”t stay visible while I used the system if I wanted it to hang around for reference.

What I did next was to use the F ile / N ew to create a file called FRIENDS.TXT and typed all my friends names and as much as I could remember about them there. It looked a lot like this:

DADDIO from Deer ParkTMP DAD DADDIO aliasButtrcup 8 LaurenLaurenR1 BC in disguise

and so forth…

I would load the FRIENDS.TXT file every time I started AOL, and used it as a reference for “Finds”, “Profiles”, “IMs”, and “EMail”.. Soon enough, I got tired of typing the names in after hitting CTRL-F or CTRL-I, so I wrote a Visual Basic program that would help me maintain the list and do the keystrokes for me.

Enter AOTools. It actually read the FRIENDS.TXT file, and did the keystroke passing for Finds, IMs, Profiles, and EMail. The structure of the Friend file is still the same (largely) for simplicity sake, but I added lots of tools to utilize the data and marry it with AOL.

Another Addition is the ability to send the Text (Description) part of the Friend text to an EMail message, Chat Room, or IM. This is what users commonly call “macros”. They are actually better described as “canned” text. Macros imply some level of programmability, and these do not.

To understand AOTools, let”s examine the AOTools main screen, then we”ll explore the functions that are available.


Name List : This is a list of the “Names” that are in the Friend file (.FRD). Each Name can have an associated description (see Description Window).

Description Window : This displays the associated text for the Name currently selected in the Name List. The text is free-form and may contain embedded new-line (carriage return) characters and upper-ASCII text. This can be real handy.

Button Panel : A collection of 1 to 12 buttons that display together. You may have up to 100 panels numbered 00 to 99. The default button panels should work for most people, but you DO have the ability to re-program the captions and location of buttons (see AOTools Customization).

Buttons : These are they keys to AOTools Power. Each button is associated to a function that AOTools provides: Find a Friend, Send an IM, Get a Profile, etc.. Some buttons act on the Name in the Name list, and others on the Text in the Description window. These will be explained. To initiate a function, merely select the name you want acted upon, if any, and click the associated button. It”s that simple AO Tools Functions:

Since AO Tools” buttons are configurable by you, I will list the functions that are available, by Function Name, the Common Button Caption associated with the Function, and a description of the function itself. I”ll also list what it operates ON, when applicable, and where it will send information, when applicable. I”ll list them grouped common use.

Find (Find): Tells AOL to locate the selected user, if online.

IM (IM): Calls up a new IM window and types the selected user”s Name.

Profile (Profile): Calls up the selected user”s AOL profile, if available.

EMail (EMail): Creates a New EMail Message addressed to the selected user.

SendEnter ([Enter]): Sends the Enter key to the AOL session. Usually used to clear the message AOL sends after “Finding” someone or sending EMail.

CloseWin (WinClose): Closes the active AOL window – Same as Ctrl-[F4]

SendDesc (SendDesc): Sends the text in the Description Window to the active window on AOL (but NOT CRoom) and then Sends the [Enter] key.

PutDesc (PutDesc): Sends the text in the Description Window to the active window on AOL (but NOT CRoom) without sending the [Enter] key.

SendCRoom (SendCRoom): Sends the text in the Description Window to the C-Room window on AOL and then Sends the [Enter] key.

SendKey (): Here”s more power! This sends keystrokes to the active Window on AOL (NOT C-Room). The keystrokes that get sent are defined in the AOTOOLS.INI file. This is a flexible function that you can use to define your own new functions. Check the Customization section Reference for more info.

Hide (Hide): Hides the AOTools Window and places the [UnHide] button at the bottom right of the screen

FriendFile (File): Selects the source file for AOTools. It is possible to maintain many “Friend/Quote” files.

ToolOptions (Options): Sets various run options (AutoSave, StayOnTop) as well as define your default Friend/Quote file.

Customizing AO Tools:

The Options button brings up a window that lets you set the default actions for AOTools. The three things that you can set are:

“Friend/Quote” file : This is the file that is loaded by default whenever you start up AO Tools.

Stay on Top : When selected, tells AO Tools to always remain visible, obscuring any window located behind AO Tools. It should normally be checked.

Auto Save : This tells AO Tools to autmatically accept and save any changes you make to a Friend/Quote file during a session. If this is unchecked, it will prompt you to save changes before you load another file, or exit AO Tools.

Button Placement / Button Panels :

AO Tools has the ability to display up to twelve buttons in its main window, making twelve functions available to the user at any time. It also has the ability to store and display up to 100 “panels” of buttons for a total of 1200 combinations. The buttons displayed on the AO Tols main screen are defined in the AOTOOLS.INI file, grouped into panels. With a little effort, you can change the location and caption of any given button, and even design your own buttons & functions.

If you look at the AOTOOLS.INI file (located in your Windows directory), you will notice sections labelled [Panel1] and [Panel2]. These are the sections that define the button panels. Here”s a sample:













11=Panel&2|PanelSet 2





3=&Log OFF|SendKeys “%G{Enter}”








11=Panel&1|PanelSet 1


Button Placement on Panel:


This diagram shows which button is applied where on the panel.

The structure of the button definition is a such:

x=Caption|Function [parameters]

x -Button location

Caption -What you want the button to say. The ”&” in the Caption sets the Hotkey for the button (which character is underlined)

Function -The function that you want the button to perform. They are listed above.

Parameters-Any parameters that a function may require


means that the button at position 5 will display [E n ter] (Alt-n will be the shortcut key) and will perform the SendEnter function.

3=&Log OFF|SendKeys “%K{Enter}”

Specifies that the button at position 3 will display [ L og OFF] and perform the SendKeys Function, sending “%K{Enter}” as the parameter.

11=Panel&2|PanelSet 2

Specifies that the button at position 11 will display [Panel 2 ] and perform the PanelSet Function, sending “2” as the parameter. This would load the panel set [Panel2] from AOTOOLS.INI.

Customization Hints : Remember when you set up your own Panel definitions to leave buttons available to navigate between Panels. If you go to a Panel that has no button to leave the panel, you”re stuck on it until you exit AO Tools and restart it. Defining Your Own Functions

The SendKeys function gives you the power to create your own functions. When you specify the SendKeys, you tell AO Tools what keystrokes to send to WAOL. These keystrokes can select from Menu options, Call up hotkey windows, even fill in fields. Basically, if you can do it from the keyboard in WAOL, you can do it with the SendKeys function!

Since SendKeys can send Control, Shift, and Alt keys with Keystrokes, there are certain symbols that have special meaning to SendKeys, and will not sent as such to AOL. These are discussed below. Since I use the Visual Basic SendKeys statement, Here is the section of the VB manual that discusses SendKeys:

Each key is represented by one or more characters. To specify a single keyboard character, use the character itself. For example, to represent the letter A, use “A” for keytext. If you want to represent more than one character, append each additional character to the one preceding it. To represent the letters A, B, and C, use “ABC” for keytext.

The plus sign (+), caret (^), percent sign (%), tilde (~), and parentheses ( ) have special meanings to SendKeys. To specify one of these characters, enclose it inside braces. For example, to specify the plus sign, use {+}. Brackets ([ ]) have no special meaning to SendKeys, but you must enclose them in braces as well, because in other applications for Microsoft Windows, brackets do have special meaning that may be significant when dynamic data exchange (DDE) occurs. To send brace characters, use {{} and {}}. To specify characters that aren”t displayed when you press a key (such as Enter or Tab) and keys that represent actions rather than characters, use the codes shown below:

Key Code Key Code Backspace {BS} or {BKSP}Break {BREAK}Caps Lock {CAPSLOCK}Clear {CLEAR}Del {DELETE} or {DEL}Down Arrow {DOWN}End {END}Enter {ENTER} or ~Esc {ESCAPE} or {ESC}Help {HELP}Home {HOME}Ins {INSERT}Left Arrow {LEFT}Num Lock {NUMLOCK}Page Down {PGDN}Page Up {PGUP}Print Screen {PRTSC}Right Arrow {RIGHT}Scroll Lock {SCROLLLOCK}Tab {TAB}Up Arrow {UP} F1 {F1}F2 {F2} F3 {F3}F4 {F4} F5 {F5}F6 {F6} F7 {F7}F8 {F8} F9 {F9}F10 {F10} F11 {F11}F12 {F12} F13 {F13}F14 {F14} F15 {F15}F16 {F16}

To specify keys combined with any combination of Shift, Ctrl, and Alt keys, precede the regular key code with one or more of the following codes:

Key Code Shift +Control ^Alt %

To specify that Shift, Ctrl, and/or Alt should be held down while several other keys are pressed, enclose the keys” code in parentheses. For example, to have the Shift key held down while E and C are pressed, use “+(EC)”. To have Shift held down while E is pressed, followed by C being pressed without Shift, use “+EC”.

To specify repeating keys, use the form {key number}; you must put a space between key and number. For example, {LEFT 42} means press the Left Arrow key 42 times; {h 10} means press h 10 times.

Note: SendKeys can”t send keystrokes to an application that is not designed to run in Microsoft Windows. Sendkeys also can”t send the Print Screen (PRTSC) key to any application.