  0.99 -> 1.0
  * memoryRead* functions only return 1 value again. If an error occures, they return nil.
  * registerKey() renamed to netPushKey().
  * bit.* functions remapped to bitAnd(), bitOr(), bitLShift(), bitRShift().
  * Added custom 'commands' directory for command scripts.
  * Added function saveScreenshot() to save screenshots of the specified window (or 0 for desktop).
  * Added function findPatternInProcess() to aid in finding addresses that may move when the game client updates.
  * Added functions for getting/setting startKey and stopKey.
  * Added function getAttachedHwnd() to return the handle of the attached window, or 0 if not attached.
  * When attached, start and stop hotkeys only take affect when the target or MicroMacro window have focus.
  * Corrected minor bugs in XML parsing.
  * findWindow() and findWindowList() now can accept a second parameter; a specific control within a window.
  * Made a minor improvement to keyboardType().
  * Fixed a bug with function stopPE() that would cause it to not pause execution.
  * Added getTime() and deltaTime() functions to get the current time, and difference between times with higher precision.
  * Improved precision of yrest().
  * Updated to Lua 5.1.4
  * memoryReadString* functions that specify a length will read and return a string of that length, even if a NULL terminator is reached first.
  * unregisterTimer() no longer generates an error when trying to unregister a non-existing timer.
  * Added isDirectory() function to check if the given fully qualified path is a directory or not.
  * Improved operating system detection.
  * Added attachKeyboard() and attachMouse() to attach specifically one device; attach() still attaches both devices.
  * Fixed window title not changing properly under Vista.
  * Added memory access protection to host process; helps protect the user against malicious scripts.
  * Window previews (thumbnails) will no longer be returned by findWindow() or findWindowList() unless specifically asked for (by class name).
  * Removed memoryWriteU* functions. You can now use the standard memoryWrite* functions to write signed or unsigned. (only affects write functions, not read!)
  * Automatic timers now run in a separate coroutine. You may now place while loops and yrests inside of timed functions without disrupting the flow of the script.
  * Added getWindowClassName() function.
  * Fixed network object finalizer functions causing MicroMacro to freeze.
  * Improved speed of endian swapping when sending/receiving information.
  * Added netGetAddress() to return the address of a remote connection.
  * Fixed traceback output.
  * Plugin system completely removed; Use Lua modules instead (work almost exactly the same way)
  * Added cprintf_ex() function; cprintf() is now deprecated.
  * Beta version number is now displayed in the log and window title.
  * Window title resets back to default when re-initializing.
  * Fixed a bug in the XML parser that caused negitive numbers to be returned as strings.
  * Fixed an XML parser bug that caused empty strings to be returned as empty strings; they will now be returned as nil.
  * Added function warning() which works almost exactly like error(), except it does not end script execution.
  * Threads will no longer get out of control and block the user from stopping or killing (CTRL+L) the script.
  * All memoryRead*Ptr() and memoryWrite*Ptr() functions can now accept a table of offsets for pointer chains.
  * Added memory read/write functions for double type.
  * Added lib/autoload.lua - place Lua and DLL files to autoload here.
  * Automatically create a randomly generated network encryption key if net.lua does not exist.
  * Added a proxy Lua DLL for better module compatibility.
  * Fixed a bug in module loading (not running a returned function).
  * Script input now assumes .lua extension if none is given (and file does not exist in current state).
  * Added getModuleAddress() to return the address of a specific module inside of the given process.
  * Added getTimerFrequency() to return CPU frequency and full operator support for time types.
  * XML module functions getAttribute(), getValue(), and getElement() now accept a second optional value; a string of which type to explicitly cast the return value to.
  * Added function xml.parse() which will parse the given input stream; currently accepts already-opened files or strings.
  * Including a file (using include()) multiple times will now ony result in the file being run once; Pass 'true' as a second parameter to force the include.

  0.98 -> 0.99
  * Added function getDirectory() to get the contents (contained files/subdirectories) of a directory.
  * Fixed a minor bug in yrest().
  * Added atPause() and atResume() functions to set pause and resume callbacks.
  * safeYield() properly checks if the current thread is a coroutine before yielding now.
  * Corrected some minor path issues.
  * Added getExeuctionPath()/setExecutionPath() to get and set the "working directory" of the executed script(s).
  * The behaviour of include() has changed. It now includes from the main script's working directory, but also accepts full paths.
  * Added getFilePath() to return just the path section of a fully qualified path, less trailing slash.
  * Added getFileName() to return just the file name section of a fully qualified path.
  * Added AND(), OR(), LSHIFT(), and RSHIFT() functions to table bit as stand-ins for missing binary operators.
  * Mouse input is now attached when using the attach() function.
  * Keyboard input will no longer send two different sets of information to the attached window. Use attach() only if it is supported!
  * Added XML support.
  * Improved printf/sprintf functions; They now accept all data types except nil as strings (use %s).
  * registerTimer() now allows you to pass in extra arguments to be passed to the timed function.
  * Added system() function to execute system commands and return output as a string.

  0.97 -> 0.98
  * keymap.lua has been removed. Keyboard modules will be used from now on for better support. See: lib/mods/keyboard
  * Added pluginInstalled() function which returns true if the plugin with the given name is installed.
  * Arrow keys fixed for keyboardPress().
  * Upgraded to Lua 5.1.3 with LuaCoco.
  * Timed functions will now generate proper error messages (with Coco enabled).
  * Added safeYield() to the library; This will call coroutine.yield() from a protected environment and provide error checking (with Coco enabled).
  * Added global variable "cocoAvailable" which is true if Coco was compiled into MicroMacro, otherwise false.
  * Added global variable "args" to pass command-line information to your scripts. See the 'misc' section of the manual for more information.
  * Moved PRIORITY_HIGH, PRIORITY_NORMAL, and PRIORITY_LOW into module "priority". Use priority.high, priority.normal, and priority.low instead.
  * Addes showWindow() with corresponding module "sw" (contains used variables) to show, hide, minimize, etc.
  * Fixed pluginInstalled() so that it returns correct results.
  * Added mouseMClick(), mouseMHold(), and mouseMRelease() for working with middle mouse button clicks.
  * Added mouseWheelMove() to scroll the mouse wheel up and down.
  * Passing an address as a string to memoryRead* or memoryWrite* functions is now official deprecated. Do not do this anymore.
  * Fixed memoryReadStringPtr(). It now correctly takes pointer offset into account.
  * Added memoryReadUString() and memoryReadUStringPtr() for Unicode support.
  * Added getR(), getG(), and getB() functions to retrieve the red, green, and blue sections of a color.
  * Added colorMatch() to the library. This function returns true if two colors match (with given accuracy).
  * Added pixelSearch() to aid in pixel color searching.
  * Optional length limiter has been added to memoryReadString(), memoryReadUString(), memoryReadStringPtr(), and memoryReadUStringPtr().
  * SeDebugPrivilege enabled, allowing better memory access to certain programs without the need of protection disabling.
  * Added fileExists() function to library. As you may expect, it returns true if the given file exists, false otherwise.
  * Added clear command to the console. Entering 'clear' into the console when asked for a script will clear the screen.
  * Fixed memoryWriteFloatPtr() rounding error (was not taking decimal places into account).
  * Added colored text to the console window. This uses conio, and may not be supported by your compiler.
  * Added setTextColor() to misc functions.
  * Added cprintf() to the library. This will allow you to print colored text.
  * Added function showWarnings() to enable or disable the showing of warnings.
  * Added function keyboardBufferClear() to clear out any remaining characters in the keyboard buffer.
  * Added function explode to library. This function splits a string into substrings based on a given token, or space by default.
  * Added function windowValid() which returns if a window handle is (still) valid or not.

  0.96 -> 0.97
  * stopPE() now automatically calls coroutine.yield() so you don't have to.
  * Minor lib.lua fixes and improvements.
  * Extra keys added to keymap.lua and key.VK_MINUS fixed.
  * key.VK_ALT remapped to left ALT key.
  * PRIORITY_HIGH, PRIORITY_NORMAL, and PRIORITY_LOW added as defines for setPriority().
  * findWindow(), findProcess(), and findProcessByExe() now accept wildcards '*' and '?'.
  * Improved error checking and logging for timers.
  * Fixed timers not being removed when reloading scripts.
  * isTriggered() now returns true or false instead of 1 or 0.
  * Added hoursToTimer(), minutesToTimer(), and secondsToTimer() to lib.lua to make timing easier.
  * Fixed handle closing bug (no longer will it randomly close handles)
  * Fixed minor memory errors and potential crashing.
  * Attached input now allows sending to non-focused or minimized windows.
  * Attached input will *only* send to it's attached window -- but may not work minimized for all applications.
  * Fixed/improved keyboardPress when not attached.
  * Added findProcessByWindow, which will return the process that belongs to the window with the specified HWND.
  * Added getKeyName() which returns the symbolic name of the specified key
  * Fixed start/stop key not returning to default state when reloading scripts.
  * Fixed keyboardType() ignoring capitol characters.
  * Added findWindowList() which returns a table of handles to all windows that match it's mask.
  * Added getWindowName() to return the name of a window with the specified handle.
  * Added setWindowName() in case you want to change a window's title.
  * Added atExit() to lua.lib, which allows you to set a callback function that is called on script termination.
  * startMacro() now accepts a second parameter: The default run state. Use this if you want to automatically start.
  * Networking disconnection issue fixed.
  * Added getHwnd() which returns the window handle for MicroMacro. You may use this to change it's window title.
  * Added keyPressedLocal() which returns true only if the key is pressed and the calling MicroMacro window or attached window is on top.
  * The load/reload hotkey combination (CTRL + L) now uses keyPressedLocal(), as to not interfere with multiple instances.
  * The keyboard and input buffer are now properly cleared when a script terminates.
  * Plugin system, although very basic, has been added.
  * Added getPath(), which returns the full path to MicroMacro.
  * Added include() to lib.lua. Use this function instead of dofile().
  * Error messages now perform an automatic lookup on error codes, and present meaningful messages.
  * Closed handles are no longer reported as being closed by the GC.
  * memoryRead* functions now return a second value: true or false. True if the read is successful, otherwise false.
  * memoryWrite* functions now return a single value: true or false. True if the write is successful, otherwise false.
  * Microsoft Vista UAC manifest now works correctly