                               Quake Spy 3.02, (c) 1996
                               ========================

OFFICIAL HOME PAGE:
-------------------

        Quake Spy now has an official home page.  You can get up to date
        information about Quake Spy now by visiting:

        http://www.panix.com/~sheaslip/qspy/

        BIG thanks go out to Stephen Heaslip of blue's Quake Rag
        (http://www.panix.com/~sheaslip/quake/ - your best source for
        up to date Quake news) for the space and administration of this site.

        Thanks for the QSpy logo go to Devicer (devicer@earthlink.net).

BIRTH:
------

	This program was born out of a desire to quickly find a playable
	Quake server.  I must have spent a week looking at the finger output
	from Servers@ns.stomped.com and then manually pinging those IP
	addresses looking for a server with a decent response time.  While
	this accomplished my initial goal, it was hardly an acceptable
	solution.  Hence, the birth of Quake Spy!

FEATURES:
---------

	* Gets a list of active Quake servers from the following sites:

	  1. Finger Servers@ns.stomped.com
	  2. http://www.pipo.com/quake/quake.html
	  3. Finger vfuks@monmouth.com
	     (try Deicide's Quake Servers at http://www.monmouth.com/~vfuks)
	  4. User defined finger source
	  5. User defined http source
	  6. User defined http source
	  7. User defined http source
	  8. User defined http source

	  Quake Spy is able to parse any finger or web page for IP addresses.
	  Just fill in the user defined areas and roll your own list!

	* Queries these sites for server name, map name, current and max
	  players.

	* Displays results in a list box in the following format:

	  Average response time in ms, number of times the queries timed out,
	  the IP address of the server, the name of the server, the name of
	  the map currently being run by the server, the current number of
	  players on the server and the maximum allowed players on the server.

	* Launch Quake by double clicking on a server in the listbox.

          Be SURE to tell QSpy where Quake is by using the View/Options
          button and selecting the Quake Page.

	  (Don't do this under NT unless you have a native NT port of Quake.
	   Quake won't like it.)

	* Manually add and delete Quake servers to the list.

	* Save and reload the Quake server list.  This info is saved to a
	  file named QSpy.dat in your Quake directory.

	* Ability to copy the server list to the clipboard for further
	  user processing.

	* Refresh the server information of selected servers.

	* Query servers for player/rule information.  Once the server list
	  has been populated, you can find out who is playing on a particular
	  server by activating the Quake Player Spy!  This process will
	  requery the selected server (possibly failing the filter checks)
	  and then will populate the Rule List with the server parameters
	  that particular server is using.  Next it populates the Player List
	  with the players' colors, names, IP address + port, how many frags
	  they currently have, and how long they've been connected to the
	  server.  You can sort this list on any of these items by clicking
	  on the column header or selecting the appropriate menu item.

	* Busy Server-Redial on selected servers.  If all of your favorite
	  servers are full, you can highlist them and then kick off the
	  Busy-Redial.  Quake Spy will continuously poll these servers until
	  it finds one that is no longer full of players.  It will then
	  either notify you of this fact or will go ahead and launch Quake!

	* When Quake Spy launches Quake, it now plays what we think is an
	  appropriate sound clip!

	* Resize the Quake Spy window to suit your preference.

	* Dynamically resize the different list controls by dragging 
	  splitter bars to suit your preference.

CONFIGURABLE OPTIONS:
---------------------

	. Quake Spy either stops its operations after Quake launches or it
	  terminates after successfully launching Quake.

	. Whether or not to auto-save the Quake Spy server list upon leaving
	  Quake Spy.

	. Whether to auto-load the (saved) server list upon program startup.

	. Whether to auto-start the update process upon program startup.

	. Where to get active Quake server list information

	. There are seven filter settings you can use to limit the output of
	  the server information gathering process:
        
          1. Display servers that return the Quake query request (i.e., they
	     are up and answering queries).
          2. Display servers that are not full of players.
          3. Display servers whose query requests timed out less than
             the specified amount.
          4. Display servers whose average response time is less than the
             specified time.
          5. Display servers whose map name starts with the specified
	     characters (e.g., 'dm' for servers only playing deathmatch
	     levels).
	  6. Display servers who map name does not start with the specified
	     characters (e.g., 'e1' to filter out servers running the
	     shareware levels).
	  7. Display servers who have more than the specified number of
	     players connected to them.
        
        . The directory where Quake is located on your system.  You must
	  use a full drive/path specifier here (e.g., "E:\GAMES\QUAKE").

	. What command line options to pass to Quake when you launch it.
	  You must not include a drive/path specifier here.  That is,
	  don't do this "E:\GAMES\QUAKE\Q95.BAT".  Just use "Q95.BAT"
	  instead.
        
        . Include connection scripts aliases:

	  . qlist: displays a list of the top 10 servers Quake Spy
                   found.

	  . s<#>:  connect to the specified server in the qlist alias.

	. Allow an automatic disconnect and display a top 10 list
	  of servers while in Quake and specify which character to
	  bind this to.
         
          Something to be aware of:  If you do this and later decide
	  you don't want this binding, you'll have to go and remove
	  the bind command from the config.cfg file in the id1
	  directory.  A later version of Quake Spy will do this for
	  you.

	. Whether you want to use multithreaded queries for the Quake Spy
	  server update process.  Quake Spy used to do pings/queries one
	  server at a time.  This routine has been revised to use
	  multiple threads if you so desire.  That is, Quake Spy will 
	  simultaneously query multiple servers thereby speeding up the
	  query process immensely!

          KNOWN PROBLEM:  When using multithreading, the ping times reported
                          are somewhat inflated.
        
        . If you choose the above option, how many threads you want this
	  process to use.  We've tested this process with up to twenty
	  threads.  If you feel we should allow more than this, then pipe
	  up.

	. How long to wait for a response from the query for info before
	  the request times out.  If you are getting a lot of servers that
	  don't return any info, try increasing this parameter.

MISC INFO:
----------

        This release has been tested and (to the best of our knowledge) will
        only work with Windows 95/NT3.51/NT4.0.

        Quake Spy makes use of MFC42.DLL and MSVCRT.DLL.  If you downloaded
        the stand alone verion of Quake Spy and you do not have these files
        in your SYSTEM directory, then you should get QSPYRT24.ZIP from the
        same place you got this file.

        If it's not included, check ftp.cdrom.com for this file:

        /pub/idgames2/utils/network_serial/server_picker/qspy24rt.zip
        
        Or

        The Official Quake Spy home page:

        http://www.panix.com/~sheaslip/qspy/

        If you still can't get it, then you're SOL!  Just kidding...you can
        request a copy from us, and we'll be glad to mail it to you (only do
        this as a last resort though).

        We are also distributing Quake Spy in an installShield package.  If
        you download this package, you don't need the support files.
        Everything is included in this package.

DISTRIBUTION STATUS:
--------------------

	Quake Spy is freeware...with the following provisions:

	If you use Quake Spy, send us an email.  Do you like Quake Spy?  Do
	you have any suggestions on how to improve it?  We want to get a feel
	for what you guys think/want.

	If you feel compelled to show us how much you appreciate Quake Spy,
	we will kindly accept monetary donations of any amount ;-)

AUTHORS:
--------

	Joe Powell (Team Leader), jep@sclsis.navy.mil (preferred)
	            or powelljo@jaxmail.navy.mil
	   (10 years of C, 2 months of MFC C++ programming experience)
           
	   The initial idea for QSpy came from me.  Tim got me started with
	   the network code.  Then, I took it from there and developed it
	   into the app we all know and love!

	Tim Cook (Network Guru), cookti@jaxmail.navy.mil.
	   (9 years of C, 3 years of C++ programming experience)
	   
	   Tim wrote most of the networking code in QSpy.  His latest
	   contribution has been the multithreaded queries!  Yea Tim!
	   
	   Tim is the C++ guru of the team. In the earlier versions of QSpy,
	   I'd wander over to Tim's cube every now and then asking, "Hey Tim,
	   how do you do this in C++?"

	Jack Mathews (MFC, UI Guru), jack@opportunist.com
	   (5 years of C, 1.5 years of MFC C++ programming experience)
	   
	   Jack is the newest member of the QSpy team.  His initial
	   contributions have been some resizing enhancements, splitter
	   bars between the list controls, player list (colored icons and
	   sorting) enhancements, and rules list implementation.
	   
	   Since neither Tim or I had ever done anything with MFC before
	   QSpy, we were both learning as we went along.  When Jack offered
	   to help us out, we jumped at the chance!
		
TODO
----

    RMB popup server menu (suggested).
    Option to save filtered server list instead of entire list
       (suggested).
    Add property page setting to allow user to select sound clip.
    Add Quake property page button to select Quake directory.
    Query for specified player like IronMan's site used to!
	Ability to send server list to printer (suggested).
	Remove the disconnect key binding command from the config.cfg file
	   when that option is deselected or changed.
	PLAY more Quake!

REVISION HISTORY
----------------

v3.02   9/9/96
        Refined busy redial server (no ping, no player/rule query) (JP).
        Refined player/rule update (no ping) (JP).
	More informative messages displayed for failure of load/save (JM).
	Fixed: QSpy crashed on LARGE (> 64K) lists (JP).
	Fixed: First user defined http slot not saving properly (JP).
	Fixed: Multithreading was not stopping properly (TC).


v3.01   9/7/96
	Fixed the qlist alias corruption problem (JP).
	Fixed the first user defined http slot (it was still trying to
	   connect to IronMan's list) (JP).
	Fixed killing threads before their time (JM).
	Fixed case where refresh was attempted with no anchor (JM).
	Fixed problem where QSpy was referring to wrong sound clip (JP).

v3.0	9/6/96

	Removed IronMan's listing from the sources property page :-( (JP).
	Converted the server listbox to a listctrl (JM).
	Save/restore QSpy window size/position (JM).
	Added menu item to launch the Quake Spy home page! (JP).
	Added menu items to launch my favorite Quake pages (JP).
	Filtered out highlight characters in player names (JP).
	Added the code to fill in the rules listctrl (JP).
	Revamped the menu system and property sheets (JM).
	Implemented the rules listctrl (JM).
	Implemented multithreaded queries (TC).
	Implemented sorting on different columns in the player listctrl (JM).
	Added a splitter bar to dynamically resize the server and player
		list controls (JM).
	Now plays a sound clip while Quake is being launched (TC).
	Actually PLAYED Quake instead of programmed for it!  (Hi Cain!)
	Finally found the bug that was corrupting the server list
	   (this was causing multiple problems) (JP).
	Save/Restore the column sizes in the player list ctrl (JP).
	Added an option to either launch Quake or just let the user know
	   when a spot opens up during a queue cycle (JP).
	Added a Busy Server-Redial command (suggested) (JP).
	Added filter option to exclude specified map names (suggested) (JP).
	Added filter option to exclude servers with less than a specified
	   number of players (JP).
	Implemented new queries to get player information! (TC).
	HEY!  We FINALLY got the Quake protocol information we wanted!
	Modified IP parsing routine to look for port numbers and other
	   portions of the program to use this information (JP).
	Rewrote the user interface: (JP)
	   Added a menu.
	   Added a toolbar menu.
	   Added a real status bar.
	Added a button to copy server list to clipboard. (JP)
	In 'qlist' alias, indicate (with an "(L)") which server was launched 
	(suggested). (JP)
	Modified code to allow for unlimited length server sources
	(it was limited to 64K before). (TC)

v2.6	8/6/96 (JP)
	Added filter option for map name.
	Added option to auto-load server list upon program start.
	Added option to auto-start update upon program start.
	Added 3 user defined http spots and 1 user defined finger spot
	   to the sources property page.
	Added vfuks@monmouth.com finger to Sources property page.
	Added Pipo's web page to Sources property page.
	Wrote a generic routine to parse out IP addresses from any page
	   (suggested).

v2.5	8/2/96 (JP)
	Return focus to last selected item after a refresh (suggested).
	Added Quake Spy option to autosave server list upon leaving QSpy.
	Added Quake Spy option to ping/not ping servers after loading data.
	Implemented non-blocking socket reads throughout the program.
	   (Press Stop immediately after starting an update and you'll
	    see what I mean.)
	Improved display speed on delete and refresh functions.
	Allowed the Quake Spy window to be resized and maximized.

v2.4	7/25/96 (JP)
	Added a Quake Spy property page with an option to terminate QSpy
	   after launching Quake.
	Rewrote the Refresh button list traversal code.
	The filter options are reapplied to the list upon exiting the
	   property page.
	Added buttons and code to save/load list of servers.
	Added buttons and code to allow manual addition/deletion of servers.
	Rewrote portions of code to allow easy addition/deletion of servers.
	Added connection scripts option when launching Quake.
	Added Quake property page options to:
	Include connection scripts aliases (TC)
	Allow an automatic disconnect and display a top 10 list
	   of servers. (TC)
	Specify which character to bind the above to.

v2.3    07/20/96 (JP)
	Added button to refresh (re-ping/re-query) selected servers.
	   (updated information is not checked against the filter criteria)
	Added the ability to stop the server information retrieval process.
	Added the ability to stop the server refresh process.

v2.2	07/17/96 (JP)
	Added some more status messages to indicate QSpy is doing something.
	Added a proper icon to the application :-)
	Fixed: If the close button was pressed during the pinging process,
	       the application window closed, but the process continued to
	       run. (TC)
	Fixed: The property page settings were never initialized unless the
	       property page was activated.

v2.1	07/15/96 (JP)
	Fixed pointer bug (for real) this time (hey, it was late).
	Added a property page accessed through the Configure button.
	Added ][ronMan's server web page to the Sources property page.
	Added Filtering options to the property page and implemented them.
	Added Quake property page to allow definition of command line and
	   working directory.
	Added ability to launch Quake by double clicking a list item.
	Added a Ping property page to allow number of pings and timeout
	   values to be adjusted.

v2.01	07/13/96 (JP)
	Fixed stupid pointer bug that happened when the process was restarted.

v2.0	07/12/96 (JP)
	Converted application to a 32-bit Win95/NT application.
	Filter out duplicates in the Stomped output.
	Display results sorted by ping time.

v1.0	07/11/96 (JP & TC)
	Initial Public Release as a Console Application.

LEGAL DISCLAIMER
----------------

	We're not responsible for anything that happens to your system while
	Quake Spy is running.  Period!  Hey, what do you expect for free?
