OK, finished my mods. This version of the bnet bot is based off of Coleman's greetbot.

New features:

- View window prints out text that comes in from bnet. Now you can see what people are saying.
- Dialog bar at the bottom of the screen lets you type in chat commands as if you were logged in
through Starcraft or Diablo. Hit return to send.
- Uses WSAAsyncSelect. Better than looping for data (it's a new game show! LOOPING FOR DATA!)
- Improved MsgLoop().
- Ability to stop screen from updating. Menu option "View:Chat Updates". When checked, everything's
normal. When unchecked, screen updates will cease. Uncheck it before you fire up Starcraft.

Here's what it's all about, by class:

BnBot - base class for bnet bots. My version uses winsock async.. so it doesn't just stay
in a loop waiting for data. It sits idle until data comes in, deals with it, then sits...

CAboutDlg - it's the about dialog. A gift from MFC.

CMainFrame - generated by Appwizard. Mine has a dialog bar that lets you enter chat commands as
if you were logged in through Starcraft or Diablo. Check it out...

CMyBot - as in Coleman's GreetBot, use this class to override the handler functions in BnBot. I 
took out most of the ones that were there because they annoyed me.

CTextLine - used by my CWinbotDoc.

CWinbotApp - the app.

CWinbotDoc - this class keeps theBot, the only instance of CMyBot. The constructor is where you
need to put your login info, so go do it now. Take a look at HandleBotSocketMessages(). This
is called by CWinbotView when winsock has got something to say. It only handles two of the
possible events right now. I don't think there's any need to implement the rest, but I'm new
to winsock, so I might be wrong. The rest of the stuff in this doc (for example, the array of
CStrings) is used to draw my text view.

CWinbotView - my text view. I made this for a project at work when I couldn't find a simple
text viewer class. Hey, if you know of a better one, let me know.. I'd be happy to implement
it. (rabidmouse@hotmail.com is my email... I don't check it very often, so be patient)

FAQ:

Q: When I compile this, I get error 'xxx'. Can you debug it for me?
A: No. It compiles on every machine I've tried, and I've tried several. Don't bother asking.

Q: Your view class is cool. Can I use it?
A: Sure. Rip out the bot stuff and you've got a simple text view with a 500-line circular buffer.
Be careful of PutLine. It takes a string arg, not variable args like printf. Go look at the Putline
implementation in CMyBot to see how variable args are done. I've just never got around to putting
it in the view.

Q: Your view class sucks. Why did you use it?
A: It was available, and I couldn't find a good one that did the job. If you've got one, let me
know and I'll put it in instead (and start using it for my jobs at work too :)

Q: The async winsock stuff is confusing. Why did you change from how Coleman did it?
A: The way he did it was fine, but I don't like programs that think they're the only damn thing
running on a machine. Real-time programs should spend most of their time waiting around for
some event to occur. That's what this one does now. It waits until winsock tells it there's data
to be had (also, that the connection has been lost). It reads it, then goes back to sleep. I
wanted this bot to be able to run well even while I was playing Starcraft. Written any other way,
this program would have slowed down my game. That would be bad. This way, it runs great.

Q: You made your view class at work? Where do you work?
A: Don't ask.
