=============================<TO DO>=============================

 - Clean up GenericSurfaceObject::Create():

   - Figure out how to handle mouse states correctly for SwitchMode and the like...

   - Properly localize the clipping stuff (in a struct?) and make it properly copy to both
     back-buffer and front-buffer what it currently on the surface (perhaps add another
	 surface flag for BACKBUFFER?)

   - Fix up the SwitchMode() function to be cleaner, make it return bool in case it can't do
     the switch mode - make another function called "bool CanSwitchMode()"	

*** Fix Clipper problem with SwitchMode()

 - GenericSurfaceObject::Copy_ClipperBackground()?
     -> Keeps a local copy and copies it to backbuffer and front buffer before attaching the clipper
	    and any time there is a chance that the surface is lost?

o Re-Org:

 - Think about GSWinUpdate() - do DirectDrawObject and PrimarySurfaceObject really need to exist???
 - Call GSWinUpdate() in the Keyboard waiting functions!! How beautiful is that!!

o WindowObject

 - Maybe when switching back to WINDOWED mode, it should remember it's last (x,y) coords?

o PrimarySurfaceObject

o SurfaceObject:

 - Add center copy functions to center source rects onto dest rects:
       SetRectCenter(int width, int height, int dest_width, int dest_height);
 - Fix the mouse refresh problem in fullscreen
 - Add GetPixel() function
 - Expose RGB functions
 - Add SaveRAW() and SaveBMP() functions

o DirectDrawObject:

 - Figure out why LoadBMP() doesn't work when image is 8-bits
 - Add option to load your own icon

o General:

 - make "inline" files to define certain member functions inline (or at bottom of .h?) 
 - Improve MouseObject (change cursor)
 - Icon support
 - Templates for MSDEV

 NOT SO URGENT:

 - AVI to DirectDrawSurface?



DONE:

o Re-Org:

 - Add DestroyInstance() member functions to all singletons
 - Write the code for WindowSurfaceObject to work in MFC
 - gs_helper file with helper functions (GSInitLib(...), GSKillLib(...), etc.)
 - Make a surface creation function that creates different types based on a typedef and
   set the surface flags (make that flag private!)

o General

 - Make LoadBMP() work
 - Win2K - issues with buffered input, GetKeyUp() doesn't work properly!
 - Why does hourglass appear when it starts?
 - Let my DX lib handle Window creation/manipulation:
 - Check for 16-bit mode in DirectDrawObject::SetMode()
 - Improve Text function(s)
 - Mouse class
 - Re-organize include files to separate mine from DX (use project-level including)
 - For LoadBMP and LoadRAW, make it so that the surface can be created based on the size of the
   file being loaded.
 - Make Set...Dir() different -> Set...Path() and Set...RelativePath() perhaps? Or make it
   so that a full path can be passed to LoadBMP and LoadRAW and other Load functions?

o DirectDrawObject:

o SurfaceObjects

 - Fix blending functions to work with clipping in windowed mode
 - Make "void SetFlag()" and "bool GetFlag()" to handle flag setting - redo the flags so that     
   they make more sense, like VIDEO and SYSTEM should be mutually exclusive.

o PrimarySurfaceObject

 - Fix Display() so that WindowObject tells it the offsets and it stores them in data members instead
   of statics - faster and more efficient.
 - SwitchMode()

o DirectSoundObject:

 - In LostWinFocus(), if a sound is playing, set Playing field to true
 - In GotWinFocus(), after playing all the ones that were Playing, set Playing to false
 - Make sounds stop playing when window loses focus (especially sounds that repeat!)

o MFC:

 - Make the Surface draw below all the stuff at the top of the Main Frame window
 - Make it compile in Debug mode
